[ruby-core:118555] [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 08:45:20 UTC
List:
ruby-core #118555
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQo+IGJpbmFyeV9jb25jYXQgKEl0IHNob3VsZCB3b3JrIG9ubHkgd2hlbiB0aGUgcmVjZWl2 ZXIncyBlbmNvZGluZyBpcyBCSU5BUlkuIERvZXMgaXQgZml0IHdpdGggQGJ5cm9vdCAoSmVhbiBC b3Vzc2llcikgJ3MgbW90aXZhdGlvbj8pDQoNCk5vIGl0J3MgdG9vIGxpbWl0aW5nLiBJdCBzaG91 bGQgd29yayB3aXRoIGFueSBlbmNvZGluZyBpbiBteSBvcGluaW9uLg0KDQpJJ2xsIHRyeSB0byBj b21lIHVwIHdpdGggb3RoZXIgbmFtZXMuIFNvIGZhciBJJ20gdGhpbmtpbmcgb2YgYFN0cmluZyNh cHBlbmRfYnl0ZXMoU3RyaW5nKWAuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJpbmcgbWV0aG9kIHRvIGFwcGVuZCBi eXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVuY29kaW5nDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEwOTA3Ng0KDQoqIEF1dGhvcjogYnlyb290IChKZWFuIEJv dXNzaWVyKQ0KKiBTdGF0dXM6IE9wZW4NCiogQXNzaWduZWU6IGJ5cm9vdCAoSmVhbiBCb3Vzc2ll cikNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMjIyBDb250ZXh0 DQoNCldoZW4gd29ya2luZyB3aXRoIGJpbmFyeSBwcm90b2NvbHMgc3VjaCBhcyBgcHJvdG9idWZg IG9yIGBNZXNzYWdlUGFja2AsIHlvdSBtYXkgb2Z0ZW4gbmVlZCB0byBhc3NlbWJsZSBtdWx0aXBs ZQ0Kc3RyaW5ncyBvZiBkaWZmZXJlbnQgZW5jb2Rpbmc6DQoNCmBgYHJ1YnkNClBvc3QgPSBTdHJ1 Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUoYnVmKQ0KICAgIGJ1ZiA8 PA0KICAgICAgMjU1IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRpdGxlIDw8DQogICAgICAyNTUgPDwg Ym9keS5ieXRlc2l6ZSA8PCBib2R5DQogIGVuZA0KZW5kDQoNClBvc3QubmV3KCJIZWxsbyIsICJX b3JsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gInNvbWVkYXRhXHhGRlx4MDVIZWxs b1x4RkZceDA1V29ybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0KDQpUaGUgcHJvYmxl bSBpbiB0aGUgYWJvdmUgY2FzZSwgaXMgdGhhdCBiZWNhdXNlIGBFbmNvZGluZzo6QVNDSUlfOEJJ VGAgaXMgZGVjbGFyZWQgYXMgQVNDSUkgY29tcGF0aWJsZSwNCmlmIG9uZSBvZiB0aGUgYXBwZW5k ZWQgc3RyaW5nIGNvbnRhaW5zIGJ5dGVzIG91dHNpZGUgdGhlIEFTQ0lJIHJhbmdlLCBzdHJpbmcg aXMgYXV0b21hdGljYWxseSBwcm9tb3RlZA0KdG8gYW5vdGhlciBlbmNvZGluZywgd2hpY2ggdGhl biBsZWFkcyB0byBlbmNvZGluZyBpc3N1ZXM6DQoNCmBgYHJ1YnkNClBvc3QubmV3KCJI4oKsbGxv IiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gaW5jb21wYXRpYmxlIGNo YXJhY3RlciBlbmNvZGluZ3M6IEFTQ0lJLThCSVQgYW5kIFVURi04IChFbmNvZGluZzo6Q29tcGF0 aWJpbGl0eUVycm9yKQ0KYGBgDQoNCkluIG1hbnkgY2FzZXMsIHlvdSB3YW50IHRvIGFwcGVuZCB0 byBhIFN0cmluZyB3aXRob3V0IGNoYW5naW5nIHRoZSByZWNlaXZlcidzIGVuY29kaW5nLg0KDQpU aGUgaXNzdWUgaXNuJ3QgZXhjbHVzaXZlIHRvIGJpbmFyeSBwcm90b2NvbHMgYW5kIGZvcm1hdHMs IGl0IGFsc28gaGFwcGVuIHdpdGggQVNDSUkgcHJvdG9jb2xzIHRoYXQgYWNjZXB0IGFyYml0cmFy eSBieXRlcyBpbmxpbmUsDQpsaWtlIFJlZGlzJ3MgUkVTUCBwcm90b2NvbCBvciBldmVuIEhUVFAv MS4xLg0KDQojIyMgUHJldmlvdXMgZGlzY3Vzc2lvbg0KDQpUaGVyZSB3YXMgYSBzaW1pbGFyIGZl YXR1cmUgcmVxdWVzdCBhIHdoaWxlIGFnbywgYnV0IGl0IHdhcyBhYmFuZG9uZWQ6IGh0dHBzOi8v YnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNDk3NQ0KDQojIyMgRXhpc3Rpbmcgc29sdXRpb25z DQoNCllvdSBjYW4gb2YgY291cnNlIGFsd2F5cyBjYXN0IHRoZSBzdHJpbmdzIHlvdSBhcHBlbmQg dG8gYXZvaWQgdGhpcyBwcm9ibGVtOg0KDQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0 bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYgPDwNCiAgICAgIDI1 NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZS5iIDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRl c2l6ZSA8PCBib2R5LmINCiAgZW5kDQplbmQNCmBgYA0KDQpCdXQgdGhpcyBjYXVzZSBhIGxvdCBv ZiBuZWVkbGVzcyBhbGxvY2F0aW9ucy4NCg0KWW91J2QgdGhpbmsgeW91IGNvdWxkIGFsc28gdXNl IGBieXRlc3BsaWNlYCwgYnV0IGl0IGFjdHVhbGx5IGhhcyB0aGUgc2FtZSBpc3N1ZToNCg0KYGBg cnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlhbGl6 ZShidWYpDQogICAgYnVmIDw8IDI1NSA8PCB0aXRsZS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3Bs aWNlKGJ1Zi5ieXRlc2l6ZSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlKQ0KICAgIGJ1ZiA8PCAyNTUg PDwgYm9keS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgYm9keS5i eXRlc2l6ZSwgdGl0bGUpDQogIGVuZA0KZW5kDQpQb3N0Lm5ldygiSOKCrGxsbyIsICJXw7RybGQi KS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICdTdHJpbmcjYnl0ZXNwbGljZSc6IGluY29t cGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzOiBCSU5BUlkgKEFTQ0lJLThCSVQpIGFuZCBVVEYt OCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcikNCmBgYA0KDQpBbmQgZXZlbiBpZiBpdCB3 b3JrZWQsIGl0IHdvdWxkIGJlIHZlcnkgdW5lcmdvbm9taWMuDQoNCiMjIyBQcm9wb3NhbDogYSBg Ynl0ZWNvbmNhdGAgbWV0aG9kDQoNCkEgc29sdXRpb24gdG8gdGhpcyB3b3VsZCBiZSB0byBhZGQg YSBuZXcgYGJ5dGVjb25jYXRgIG1ldGhvZCwgdGhhdCBjb3VsZCBiZSBzaGltZWQgYXM6DQoNCmBg YHJ1YnkNCmNsYXNzIFN0cmluZw0KICBkZWYgYnl0ZWNvbmNhdCgqc3RyaW5ncykNCiAgICBzdHJp bmdzLm1hcCEgZG8gfHN8DQogICAgICBpZiBzLmlzX2E/KFN0cmluZykgJiYgcy5lbmNvZGluZyAh PSBlbmNvZGluZw0KICAgICAgICBzLmR1cC5mb3JjZV9lbmNvZGluZyhlbmNvZGluZykNCiAgICAg IGVsc2UNCiAgICAgICAgcw0KICAgICAgZW5kDQogICAgZW5kDQogICAgY29uY2F0KCpzdHJpbmdz KQ0KICBlbmQNCmVuZA0KDQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBk ZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYuYnl0ZWNvbmNhdCgNCiAgICAgIDI1NSwgdGl0bGUu Ynl0ZXNpemUsIHRpdGxlLA0KICAgICAgMjU1LCBib2R5LmJ5dGVzaXplLCBib2R5LA0KICAgICkN CiAgZW5kDQplbmQNCg0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxkIikuc2VyaWFsaXplKCJz b21lZGF0YSIuYikgIyA9PiAic29tZWRhdGFceEZGXGFIXHhFMlx4ODJceEFDbGxvXHhGRlx4MDZX XHhDM1x4QjRybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0KDQpCdXQgb2YgY291cnNl IGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiB3b3VsZG4ndCBuZWVkIHRvIGR1cCB0aGUgYXJndW1l bnRzLg0KDQpMaWtlIG90aGVyIGBieXRlKmAgbWV0aG9kcywgaXQncyB0aGUgcmVzcG9uc2liaWxp dHkgb2YgdGhlIGNhbGxlciB0byBlbnN1cmUgdGhlIHJlc3VsdGluZyBzdHJpbmcgaGFzIGEgdmFs aWQgZW5jb2RpbmcsIG9yDQp0byBkZWFsIHdpdGggaXQgaWYgbm90Lg0KDQojIyMgTWV0aG9kIG5h bWUgYW5kIHNpZ25hdHVyZQ0KDQojIyMjIE5hbWUNCg0KVGhpcyBwcm9wb3NhbCBzdWdnZXN0cyBg U3RyaW5nI2J5dGVjb25jYXRgLCB0byBtaXJyb3IgYFN0cmluZyNjb25jYXRgLCBidXQgb3RoZXIg bmFtZXMgYXJlIHBvc3NpYmxlOg0KDQogIC0gYGJ5dGVhcHBlbmRgIChsaWtlIGBBcnJheSNhcHBl bmRgKQ0KICAtIGBieXRlcHVzaGAgIChsaWtlIGBBcnJheSNwdXNoYCkNCg0KIyMjIyBTaWduYXR1 cmUNCg0KVGhpcyBwcm9wb3NhbCBtYWtlcyBgYnl0ZWNvbmNhdGAgYWNjZXB0IGVpdGhlciBgU3Ry aW5nYCBvciBgSW50ZWdlcmAgKGluIGNoYXIgcmFuZ2UpIGFyZ3VtZW50cyBsaWtlIGBjb25jYXRg LiBJIGJlbGlldmUgaXQgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5IGFuZCBhbHNvIGJlY2F1 c2UgaXQncyBub3QgdW5jb21tb24gZm9yIHByb3RvY29scyB0byBoYXZlIHNvbWUgYnl0ZSBiYXNl ZCBzZWdtZW50cywgYW5kIEludGVnZXJzIGFyZSBtb3JlIGNvbnZlbmllbnQgdGhlcmUuDQoNClRo ZSBwcm9wb3NlZCBtZXRob2QgYWxzbyBhY2NlcHQgdmFyaWFibGUgYXJndW1lbnRzIGZvciBjb25z aXN0ZW5jeSB3aXRoIGBTdHJpbmcjY29uY2F0YCwgYEFycmF5I3B1c2hgLCBgQXJyYXkjYXBwZW5k YC4NCg0KVGhlIHByb3Bvc2VkIG1ldGhvZCByZXR1cm5zIHNlbGYsIGxpa2UgYGNvbmNhdGAgYW5k IG90aGVycy4NCg0KIyMjIFlKSVQgY29uc2lkZXJhdGlvbg0KDQpJIGNvbnN1bHRlZCBAbWF4aW1l Y2IgYWJvdXQgdGhpcyBwcm9wb3NhbCwgYW5kIGFjY29yZGluZyB0byBoZXIsIGFjY2VwdGluZyB2 YXJpYWJsZSBhcmd1bWVudHMgbWFrZXMgaXQgaGFyZGVyIGZvciBZSklUIHRvIG9wdGltaXplLg0K SSBzdXNwZWN0IGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgQVBJcyB0cnVtcHMgdGhlIHBlcmZvcm1h bmNlIGNvbnNpZGVyYXRpb24sIGJ1dCBJIHRoaW5rIGl0J3Mgd29ydGggbWVudGlvbmluZy4NCg0K DQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3Qg LS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1h aWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0t IGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVi eS1sYW5nLm9yZy8=