[ruby-core:118547] [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-07-11 05:38:35 UTC
List:
ruby-core #118547
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQpEaXNjdXNzZWQgaW4gcGVyc29uIGluIHRoZSBtZWV0aW5nLiBJJ2xsIHRoaW5rIGFib3V0 IG90aGVyIG5hbWVzIGFuZCBwcm9wb3NlIHNvbWUuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJpbmcgbWV0aG9kIHRv IGFwcGVuZCBieXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVuY29kaW5nDQpodHRwczovL2J1Z3MucnVi eS1sYW5nLm9yZy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEwOTA2Nw0KDQoqIEF1dGhvcjogYnlyb290 IChKZWFuIEJvdXNzaWVyKQ0KKiBTdGF0dXM6IE9wZW4NCiogQXNzaWduZWU6IGJ5cm9vdCAoSmVh biBCb3Vzc2llcikNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMj IyBDb250ZXh0DQoNCldoZW4gd29ya2luZyB3aXRoIGJpbmFyeSBwcm90b2NvbHMgc3VjaCBhcyBg cHJvdG9idWZgIG9yIGBNZXNzYWdlUGFja2AsIHlvdSBtYXkgb2Z0ZW4gbmVlZCB0byBhc3NlbWJs ZSBtdWx0aXBsZQ0Kc3RyaW5ncyBvZiBkaWZmZXJlbnQgZW5jb2Rpbmc6DQoNCmBgYHJ1YnkNClBv c3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUoYnVmKQ0K ICAgIGJ1ZiA8PA0KICAgICAgMjU1IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRpdGxlIDw8DQogICAg ICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5DQogIGVuZA0KZW5kDQoNClBvc3QubmV3KCJI ZWxsbyIsICJXb3JsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gInNvbWVkYXRhXHhG Rlx4MDVIZWxsb1x4RkZceDA1V29ybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0KDQpU aGUgcHJvYmxlbSBpbiB0aGUgYWJvdmUgY2FzZSwgaXMgdGhhdCBiZWNhdXNlIGBFbmNvZGluZzo6 QVNDSUlfOEJJVGAgaXMgZGVjbGFyZWQgYXMgQVNDSUkgY29tcGF0aWJsZSwNCmlmIG9uZSBvZiB0 aGUgYXBwZW5kZWQgc3RyaW5nIGNvbnRhaW5zIGJ5dGVzIG91dHNpZGUgdGhlIEFTQ0lJIHJhbmdl LCBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBwcm9tb3RlZA0KdG8gYW5vdGhlciBlbmNvZGluZywg d2hpY2ggdGhlbiBsZWFkcyB0byBlbmNvZGluZyBpc3N1ZXM6DQoNCmBgYHJ1YnkNClBvc3QubmV3 KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gaW5jb21w YXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3M6IEFTQ0lJLThCSVQgYW5kIFVURi04IChFbmNvZGlu Zzo6Q29tcGF0aWJpbGl0eUVycm9yKQ0KYGBgDQoNCkluIG1hbnkgY2FzZXMsIHlvdSB3YW50IHRv IGFwcGVuZCB0byBhIFN0cmluZyB3aXRob3V0IGNoYW5naW5nIHRoZSByZWNlaXZlcidzIGVuY29k aW5nLg0KDQpUaGUgaXNzdWUgaXNuJ3QgZXhjbHVzaXZlIHRvIGJpbmFyeSBwcm90b2NvbHMgYW5k IGZvcm1hdHMsIGl0IGFsc28gaGFwcGVuIHdpdGggQVNDSUkgcHJvdG9jb2xzIHRoYXQgYWNjZXB0 IGFyYml0cmFyeSBieXRlcyBpbmxpbmUsDQpsaWtlIFJlZGlzJ3MgUkVTUCBwcm90b2NvbCBvciBl dmVuIEhUVFAvMS4xLg0KDQojIyMgUHJldmlvdXMgZGlzY3Vzc2lvbg0KDQpUaGVyZSB3YXMgYSBz aW1pbGFyIGZlYXR1cmUgcmVxdWVzdCBhIHdoaWxlIGFnbywgYnV0IGl0IHdhcyBhYmFuZG9uZWQ6 IGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNDk3NQ0KDQojIyMgRXhpc3Rpbmcg c29sdXRpb25zDQoNCllvdSBjYW4gb2YgY291cnNlIGFsd2F5cyBjYXN0IHRoZSBzdHJpbmdzIHlv dSBhcHBlbmQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtOg0KDQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0 Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYgPDwN CiAgICAgIDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZS5iIDw8DQogICAgICAyNTUgPDwg Ym9keS5ieXRlc2l6ZSA8PCBib2R5LmINCiAgZW5kDQplbmQNCmBgYA0KDQpCdXQgdGhpcyBjYXVz ZSBhIGxvdCBvZiBuZWVkbGVzcyBhbGxvY2F0aW9ucy4NCg0KWW91J2QgdGhpbmsgeW91IGNvdWxk IGFsc28gdXNlIGBieXRlc3BsaWNlYCwgYnV0IGl0IGFjdHVhbGx5IGhhcyB0aGUgc2FtZSBpc3N1 ZToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVm IHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8IDI1NSA8PCB0aXRsZS5ieXRlc2l6ZQ0KICAgIGJ1 Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlKQ0KICAgIGJ1 ZiA8PCAyNTUgPDwgYm9keS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6 ZSwgYm9keS5ieXRlc2l6ZSwgdGl0bGUpDQogIGVuZA0KZW5kDQpQb3N0Lm5ldygiSOKCrGxsbyIs ICJXw7RybGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICdTdHJpbmcjYnl0ZXNwbGlj ZSc6IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzOiBCSU5BUlkgKEFTQ0lJLThCSVQp IGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcikNCmBgYA0KDQpBbmQgZXZl biBpZiBpdCB3b3JrZWQsIGl0IHdvdWxkIGJlIHZlcnkgdW5lcmdvbm9taWMuDQoNCiMjIyBQcm9w b3NhbDogYSBgYnl0ZWNvbmNhdGAgbWV0aG9kDQoNCkEgc29sdXRpb24gdG8gdGhpcyB3b3VsZCBi ZSB0byBhZGQgYSBuZXcgYGJ5dGVjb25jYXRgIG1ldGhvZCwgdGhhdCBjb3VsZCBiZSBzaGltZWQg YXM6DQoNCmBgYHJ1YnkNCmNsYXNzIFN0cmluZw0KICBkZWYgYnl0ZWNvbmNhdCgqc3RyaW5ncykN CiAgICBzdHJpbmdzLm1hcCEgZG8gfHN8DQogICAgICBpZiBzLmlzX2E/KFN0cmluZykgJiYgcy5l bmNvZGluZyAhPSBlbmNvZGluZw0KICAgICAgICBzLmR1cC5mb3JjZV9lbmNvZGluZyhlbmNvZGlu ZykNCiAgICAgIGVsc2UNCiAgICAgICAgcw0KICAgICAgZW5kDQogICAgZW5kDQogICAgY29uY2F0 KCpzdHJpbmdzKQ0KICBlbmQNCmVuZA0KDQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5 KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYuYnl0ZWNvbmNhdCgNCiAgICAgIDI1 NSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlLA0KICAgICAgMjU1LCBib2R5LmJ5dGVzaXplLCBib2R5 LA0KICAgICkNCiAgZW5kDQplbmQNCg0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxkIikuc2Vy aWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAic29tZWRhdGFceEZGXGFIXHhFMlx4ODJceEFDbGxv XHhGRlx4MDZXXHhDM1x4QjRybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0KDQpCdXQg b2YgY291cnNlIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiB3b3VsZG4ndCBuZWVkIHRvIGR1cCB0 aGUgYXJndW1lbnRzLg0KDQpMaWtlIG90aGVyIGBieXRlKmAgbWV0aG9kcywgaXQncyB0aGUgcmVz cG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBlbnN1cmUgdGhlIHJlc3VsdGluZyBzdHJpbmcg aGFzIGEgdmFsaWQgZW5jb2RpbmcsIG9yDQp0byBkZWFsIHdpdGggaXQgaWYgbm90Lg0KDQojIyMg TWV0aG9kIG5hbWUgYW5kIHNpZ25hdHVyZQ0KDQojIyMjIE5hbWUNCg0KVGhpcyBwcm9wb3NhbCBz dWdnZXN0cyBgU3RyaW5nI2J5dGVjb25jYXRgLCB0byBtaXJyb3IgYFN0cmluZyNjb25jYXRgLCBi dXQgb3RoZXIgbmFtZXMgYXJlIHBvc3NpYmxlOg0KDQogIC0gYGJ5dGVhcHBlbmRgIChsaWtlIGBB cnJheSNhcHBlbmRgKQ0KICAtIGBieXRlcHVzaGAgIChsaWtlIGBBcnJheSNwdXNoYCkNCg0KIyMj IyBTaWduYXR1cmUNCg0KVGhpcyBwcm9wb3NhbCBtYWtlcyBgYnl0ZWNvbmNhdGAgYWNjZXB0IGVp dGhlciBgU3RyaW5nYCBvciBgSW50ZWdlcmAgKGluIGNoYXIgcmFuZ2UpIGFyZ3VtZW50cyBsaWtl IGBjb25jYXRgLiBJIGJlbGlldmUgaXQgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5IGFuZCBh bHNvIGJlY2F1c2UgaXQncyBub3QgdW5jb21tb24gZm9yIHByb3RvY29scyB0byBoYXZlIHNvbWUg Ynl0ZSBiYXNlZCBzZWdtZW50cywgYW5kIEludGVnZXJzIGFyZSBtb3JlIGNvbnZlbmllbnQgdGhl cmUuDQoNClRoZSBwcm9wb3NlZCBtZXRob2QgYWxzbyBhY2NlcHQgdmFyaWFibGUgYXJndW1lbnRz IGZvciBjb25zaXN0ZW5jeSB3aXRoIGBTdHJpbmcjY29uY2F0YCwgYEFycmF5I3B1c2hgLCBgQXJy YXkjYXBwZW5kYC4NCg0KVGhlIHByb3Bvc2VkIG1ldGhvZCByZXR1cm5zIHNlbGYsIGxpa2UgYGNv bmNhdGAgYW5kIG90aGVycy4NCg0KIyMjIFlKSVQgY29uc2lkZXJhdGlvbg0KDQpJIGNvbnN1bHRl ZCBAbWF4aW1lY2IgYWJvdXQgdGhpcyBwcm9wb3NhbCwgYW5kIGFjY29yZGluZyB0byBoZXIsIGFj Y2VwdGluZyB2YXJpYWJsZSBhcmd1bWVudHMgbWFrZXMgaXQgaGFyZGVyIGZvciBZSklUIHRvIG9w dGltaXplLg0KSSBzdXNwZWN0IGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgQVBJcyB0cnVtcHMgdGhl IHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGJ1dCBJIHRoaW5rIGl0J3Mgd29ydGggbWVudGlv bmluZy4NCg0KDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWls aW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNl bmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29y ZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNv cmUubWwucnVieS1sYW5nLm9yZy8=