[ruby-core:118799] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2024-08-06 12:15:00 UTC
List:
ruby-core #118799
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQo+IFRoZSBuYW1lIGlzIGBTdHJpbmcjYXBwZW5kX2FzX2J5dGVzYCwgYW5kIHRoZSBuYW1l IHByb3ZpZGVzIGEgZnJhbWluZyBvZiAicmVpbnRlcnByZXRhdGlvbiIgdGhhdCBoZWxwcyB0byBl eHBsYWluIHRoZSBiZWhhdmlvciBvZiB0aGUgbWV0aG9kLg0KDQpJIGxpa2UgdGhhdCBuYW1lLCBJ IHRoaW5rIGl0IGNsZWFycyBvdXQgYW55IHBvc3NpYmxlIGNvbmZ1c2lvbi4NCg0KPiBgYXBwZW5k X2FzX2J5dGVzKCpvYmplY3RzKWANCg0KSSByZXRpcmVkIHRoZSBgKm9iamVjdHNgIGZyb20gbXkg cHJvcG9zYWwgYmVjYXVzZSBJJ3ZlIGJlZW4gdG9sZCBpdCdkIGJlIHRvbyBoYXJkIHRvIG9wdGlt aXplLCBidXQgaWYgeW91IGJlbGlldmUgaXQncyBubyBwcm9ibGVtLCBJIGRlZmluaXRlbHkgcHJl ZmVyIGl0IGFzIGl0J3MgbXVjaCBtb3JlIFJ1YnkgbGlrZSwgYW5kIHdhcyBteSBpbml0aWFsIHBy b3Bvc2FsLg0KDQo+IEZvciBpbnRlZ2VycywgdGhlIGkgJiAweGZmIG1hc2tpbmcgYmVoYXZpb3Ig Y29tZXMgZnJvbSBTdHJpbmcjc2V0Ynl0ZS4NCg0KSSBhZ3JlZSBpdCBtYWtlcyBzZW5zZSB0byBt aXJyb3IgYHNldGJ5dGVgIHJhdGhlciB0aGFuIGBTdHJpbmcjPDwoSW50ZWdlcilgIGhlcmUuDQoN Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0 OiBBIG5ldyBTdHJpbmcgbWV0aG9kIHRvIGFwcGVuZCBieXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVu Y29kaW5nDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEw OTM1NQ0KDQoqIEF1dGhvcjogYnlyb290IChKZWFuIEJvdXNzaWVyKQ0KKiBTdGF0dXM6IE9wZW4N CiogQXNzaWduZWU6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMjIyBDb250ZXh0DQoNCldoZW4gd29ya2luZyB3aXRoIGJp bmFyeSBwcm90b2NvbHMgc3VjaCBhcyBgcHJvdG9idWZgIG9yIGBNZXNzYWdlUGFja2AsIHlvdSBt YXkgb2Z0ZW4gbmVlZCB0byBhc3NlbWJsZSBtdWx0aXBsZQ0Kc3RyaW5ncyBvZiBkaWZmZXJlbnQg ZW5jb2Rpbmc6DQoNCmBgYHJ1YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRv DQogIGRlZiBzZXJpYWxpemUoYnVmKQ0KICAgIGJ1ZiA8PA0KICAgICAgMjU1IDw8IHRpdGxlLmJ5 dGVzaXplIDw8IHRpdGxlIDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5DQog IGVuZA0KZW5kDQoNClBvc3QubmV3KCJIZWxsbyIsICJXb3JsZCIpLnNlcmlhbGl6ZSgic29tZWRh dGEiLmIpICMgPT4gInNvbWVkYXRhXHhGRlx4MDVIZWxsb1x4RkZceDA1V29ybGQiICM8RW5jb2Rp bmc6QVNDSUktOEJJVD4NCmBgYA0KDQpUaGUgcHJvYmxlbSBpbiB0aGUgYWJvdmUgY2FzZSwgaXMg dGhhdCBiZWNhdXNlIGBFbmNvZGluZzo6QVNDSUlfOEJJVGAgaXMgZGVjbGFyZWQgYXMgQVNDSUkg Y29tcGF0aWJsZSwNCmlmIG9uZSBvZiB0aGUgYXBwZW5kZWQgc3RyaW5nIGNvbnRhaW5zIGJ5dGVz IG91dHNpZGUgdGhlIEFTQ0lJIHJhbmdlLCBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBwcm9tb3Rl ZA0KdG8gYW5vdGhlciBlbmNvZGluZywgd2hpY2ggdGhlbiBsZWFkcyB0byBlbmNvZGluZyBpc3N1 ZXM6DQoNCmBgYHJ1YnkNClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgi c29tZWRhdGEiLmIpICMgPT4gaW5jb21wYXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3M6IEFTQ0lJ LThCSVQgYW5kIFVURi04IChFbmNvZGluZzo6Q29tcGF0aWJpbGl0eUVycm9yKQ0KYGBgDQoNCklu IG1hbnkgY2FzZXMsIHlvdSB3YW50IHRvIGFwcGVuZCB0byBhIFN0cmluZyB3aXRob3V0IGNoYW5n aW5nIHRoZSByZWNlaXZlcidzIGVuY29kaW5nLg0KDQpUaGUgaXNzdWUgaXNuJ3QgZXhjbHVzaXZl IHRvIGJpbmFyeSBwcm90b2NvbHMgYW5kIGZvcm1hdHMsIGl0IGFsc28gaGFwcGVuIHdpdGggQVND SUkgcHJvdG9jb2xzIHRoYXQgYWNjZXB0IGFyYml0cmFyeSBieXRlcyBpbmxpbmUsDQpsaWtlIFJl ZGlzJ3MgUkVTUCBwcm90b2NvbCBvciBldmVuIEhUVFAvMS4xLg0KDQojIyMgUHJldmlvdXMgZGlz Y3Vzc2lvbg0KDQpUaGVyZSB3YXMgYSBzaW1pbGFyIGZlYXR1cmUgcmVxdWVzdCBhIHdoaWxlIGFn bywgYnV0IGl0IHdhcyBhYmFuZG9uZWQ6IGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vl cy8xNDk3NQ0KDQojIyMgRXhpc3Rpbmcgc29sdXRpb25zDQoNCllvdSBjYW4gb2YgY291cnNlIGFs d2F5cyBjYXN0IHRoZSBzdHJpbmdzIHlvdSBhcHBlbmQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtOg0K DQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2Vy aWFsaXplKGJ1ZikNCiAgICBidWYgPDwNCiAgICAgIDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0 aXRsZS5iIDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5LmINCiAgZW5kDQpl bmQNCmBgYA0KDQpCdXQgdGhpcyBjYXVzZSBhIGxvdCBvZiBuZWVkbGVzcyBhbGxvY2F0aW9ucy4N Cg0KWW91J2QgdGhpbmsgeW91IGNvdWxkIGFsc28gdXNlIGBieXRlc3BsaWNlYCwgYnV0IGl0IGFj dHVhbGx5IGhhcyB0aGUgc2FtZSBpc3N1ZToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXco OnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8IDI1NSA8 PCB0aXRsZS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgdGl0bGUu Ynl0ZXNpemUsIHRpdGxlKQ0KICAgIGJ1ZiA8PCAyNTUgPDwgYm9keS5ieXRlc2l6ZQ0KICAgIGJ1 Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgYm9keS5ieXRlc2l6ZSwgdGl0bGUpDQogIGVuZA0K ZW5kDQpQb3N0Lm5ldygiSOKCrGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5i KSAjID0+ICdTdHJpbmcjYnl0ZXNwbGljZSc6IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2Rp bmdzOiBCSU5BUlkgKEFTQ0lJLThCSVQpIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxp dHlFcnJvcikNCmBgYA0KDQpBbmQgZXZlbiBpZiBpdCB3b3JrZWQsIGl0IHdvdWxkIGJlIHZlcnkg dW5lcmdvbm9taWMuDQoNCiMjIyBQcm9wb3NhbDogYSBgYnl0ZWNvbmNhdGAgbWV0aG9kDQoNCkEg c29sdXRpb24gdG8gdGhpcyB3b3VsZCBiZSB0byBhZGQgYSBuZXcgYGJ5dGVjb25jYXRgIG1ldGhv ZCwgdGhhdCBjb3VsZCBiZSBzaGltZWQgYXM6DQoNCmBgYHJ1YnkNCmNsYXNzIFN0cmluZw0KICBk ZWYgYnl0ZWNvbmNhdCgqc3RyaW5ncykNCiAgICBzdHJpbmdzLm1hcCEgZG8gfHN8DQogICAgICBp ZiBzLmlzX2E/KFN0cmluZykgJiYgcy5lbmNvZGluZyAhPSBlbmNvZGluZw0KICAgICAgICBzLmR1 cC5mb3JjZV9lbmNvZGluZyhlbmNvZGluZykNCiAgICAgIGVsc2UNCiAgICAgICAgcw0KICAgICAg ZW5kDQogICAgZW5kDQogICAgY29uY2F0KCpzdHJpbmdzKQ0KICBlbmQNCmVuZA0KDQpQb3N0ID0g U3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBi dWYuYnl0ZWNvbmNhdCgNCiAgICAgIDI1NSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlLA0KICAgICAg MjU1LCBib2R5LmJ5dGVzaXplLCBib2R5LA0KICAgICkNCiAgZW5kDQplbmQNCg0KUG9zdC5uZXco IkjigqxsbG8iLCAiV8O0cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAic29tZWRh dGFceEZGXGFIXHhFMlx4ODJceEFDbGxvXHhGRlx4MDZXXHhDM1x4QjRybGQiICM8RW5jb2Rpbmc6 QVNDSUktOEJJVD4NCmBgYA0KDQpCdXQgb2YgY291cnNlIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlv biB3b3VsZG4ndCBuZWVkIHRvIGR1cCB0aGUgYXJndW1lbnRzLg0KDQpMaWtlIG90aGVyIGBieXRl KmAgbWV0aG9kcywgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBlbnN1 cmUgdGhlIHJlc3VsdGluZyBzdHJpbmcgaGFzIGEgdmFsaWQgZW5jb2RpbmcsIG9yDQp0byBkZWFs IHdpdGggaXQgaWYgbm90Lg0KDQojIyMgTWV0aG9kIG5hbWUgYW5kIHNpZ25hdHVyZQ0KDQojIyMj IE5hbWUNCg0KVGhpcyBwcm9wb3NhbCBzdWdnZXN0cyBgU3RyaW5nI2J5dGVjb25jYXRgLCB0byBt aXJyb3IgYFN0cmluZyNjb25jYXRgLCBidXQgb3RoZXIgbmFtZXMgYXJlIHBvc3NpYmxlOg0KDQog IC0gYGJ5dGVhcHBlbmRgIChsaWtlIGBBcnJheSNhcHBlbmRgKQ0KICAtIGBieXRlcHVzaGAgIChs aWtlIGBBcnJheSNwdXNoYCkNCg0KIyMjIyBTaWduYXR1cmUNCg0KVGhpcyBwcm9wb3NhbCBtYWtl cyBgYnl0ZWNvbmNhdGAgYWNjZXB0IGVpdGhlciBgU3RyaW5nYCBvciBgSW50ZWdlcmAgKGluIGNo YXIgcmFuZ2UpIGFyZ3VtZW50cyBsaWtlIGBjb25jYXRgLiBJIGJlbGlldmUgaXQgbWFrZXMgc2Vu c2UgZm9yIGNvbnNpc3RlbmN5IGFuZCBhbHNvIGJlY2F1c2UgaXQncyBub3QgdW5jb21tb24gZm9y IHByb3RvY29scyB0byBoYXZlIHNvbWUgYnl0ZSBiYXNlZCBzZWdtZW50cywgYW5kIEludGVnZXJz IGFyZSBtb3JlIGNvbnZlbmllbnQgdGhlcmUuDQoNClRoZSBwcm9wb3NlZCBtZXRob2QgYWxzbyBh Y2NlcHQgdmFyaWFibGUgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGBTdHJpbmcjY29u Y2F0YCwgYEFycmF5I3B1c2hgLCBgQXJyYXkjYXBwZW5kYC4NCg0KVGhlIHByb3Bvc2VkIG1ldGhv ZCByZXR1cm5zIHNlbGYsIGxpa2UgYGNvbmNhdGAgYW5kIG90aGVycy4NCg0KIyMjIFlKSVQgY29u c2lkZXJhdGlvbg0KDQpJIGNvbnN1bHRlZCBAbWF4aW1lY2IgYWJvdXQgdGhpcyBwcm9wb3NhbCwg YW5kIGFjY29yZGluZyB0byBoZXIsIGFjY2VwdGluZyB2YXJpYWJsZSBhcmd1bWVudHMgbWFrZXMg aXQgaGFyZGVyIGZvciBZSklUIHRvIG9wdGltaXplLg0KSSBzdXNwZWN0IGNvbnNpc3RlbmN5IHdp dGggb3RoZXIgQVBJcyB0cnVtcHMgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGJ1dCBJ IHRoaW5rIGl0J3Mgd29ydGggbWVudGlvbmluZy4NCg0KDQoNCg0KDQotLSANCmh0dHBzOi8vYnVn cy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFu Zy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1s LnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9y Zy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=