[ruby-core:118576] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"shugo (Shugo Maeda) via ruby-core" <ruby-core@...>
Date:
2024-07-12 00:53:15 UTC
List:
ruby-core #118576
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgc2h1Z28gKFNodWdvIE1hZWRhKS4NCg0K DQpFcmVnb24gKEJlbm9pdCBEYWxvemUpIHdyb3RlIGluICNub3RlLTExOg0KPiBJIHdvbmRlciBp ZiB0aGF0J3MgYSBidWcgb2YgYGJ5dGVzcGxpY2VgLg0KPiBJdCdzIG5vdCBsaWtlIGUuZy4gYHNl dGJ5dGVgIHdvdWxkIHJlc3BlY3QgdGhlIGVuY29kaW5nIChpdCBjYW5ub3QgcG9zc2libHkpLg0K PiBPVE9IIGBieXRlaW5kZXhgIGFsc28gdGFrZXMgYSBTdHJpbmcgYXJndW1lbnQgYW5kIHJhaXNl cyBgRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcmAgZm9yIGAiw6kiLmIuYnl0ZWluZGV4ICLD qSJgIHNvIEkgZ3Vlc3MgaXQncyBub3Qgc28gY2xlYXItY3V0IGN1cnJlbnRseSAoSSBnZXQgdGhl IHJlcGxpZXMgYWJvdmUgYSBiaXQgYmV0dGVyKS4NCg0KSXQncyBpbnRlbmRlZCBiZWhhdmlvci4N CkhhdmluZyBhIGxvbmcgaGlzdG9yeSBvZiBzdWZmZXJpbmcgZnJvbSBjaGFyYWN0ZXIgZW5jb2Rp bmcgaXNzdWVzIHN1Y2ggYXMgbW9qaWJha2UsIHdlIEphcGFuZXNlIGJlbGlldmUgdGhhdCBvcGVy YXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBkaWZmZXJlbnQgZW5jb2RpbmdzIHNob3VsZCBiZSBhcHBy b2FjaGVkIHdpdGggY2F1dGlvbi4NCg0KYGJ5dGUtYCBtZXRob2RzIGNvdWxkIGJlIGNvbnNpZGVy ZWQgZXhjZXB0aW9ucywgYnV0IGF0IHByZXNlbnQsIHRoZXkgYXJlIG5vdC4gIFRoYXQncyB3aHkg TWF0eiBkb2Vzbid0IGxpa2UgdGhlIG5hbWUgYGJ5dGVjb25jYXRgLg0KDQoNCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJp bmcgbWV0aG9kIHRvIGFwcGVuZCBieXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVuY29kaW5nDQpodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEwOTEwMQ0KDQoqIEF1 dGhvcjogYnlyb290IChKZWFuIEJvdXNzaWVyKQ0KKiBTdGF0dXM6IE9wZW4NCiogQXNzaWduZWU6 IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCiMjIyBDb250ZXh0DQoNCldoZW4gd29ya2luZyB3aXRoIGJpbmFyeSBwcm90b2Nv bHMgc3VjaCBhcyBgcHJvdG9idWZgIG9yIGBNZXNzYWdlUGFja2AsIHlvdSBtYXkgb2Z0ZW4gbmVl ZCB0byBhc3NlbWJsZSBtdWx0aXBsZQ0Kc3RyaW5ncyBvZiBkaWZmZXJlbnQgZW5jb2Rpbmc6DQoN CmBgYHJ1YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJp YWxpemUoYnVmKQ0KICAgIGJ1ZiA8PA0KICAgICAgMjU1IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRp dGxlIDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5DQogIGVuZA0KZW5kDQoN ClBvc3QubmV3KCJIZWxsbyIsICJXb3JsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4g InNvbWVkYXRhXHhGRlx4MDVIZWxsb1x4RkZceDA1V29ybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJ VD4NCmBgYA0KDQpUaGUgcHJvYmxlbSBpbiB0aGUgYWJvdmUgY2FzZSwgaXMgdGhhdCBiZWNhdXNl IGBFbmNvZGluZzo6QVNDSUlfOEJJVGAgaXMgZGVjbGFyZWQgYXMgQVNDSUkgY29tcGF0aWJsZSwN CmlmIG9uZSBvZiB0aGUgYXBwZW5kZWQgc3RyaW5nIGNvbnRhaW5zIGJ5dGVzIG91dHNpZGUgdGhl IEFTQ0lJIHJhbmdlLCBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBwcm9tb3RlZA0KdG8gYW5vdGhl ciBlbmNvZGluZywgd2hpY2ggdGhlbiBsZWFkcyB0byBlbmNvZGluZyBpc3N1ZXM6DQoNCmBgYHJ1 YnkNClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIp ICMgPT4gaW5jb21wYXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3M6IEFTQ0lJLThCSVQgYW5kIFVU Ri04IChFbmNvZGluZzo6Q29tcGF0aWJpbGl0eUVycm9yKQ0KYGBgDQoNCkluIG1hbnkgY2FzZXMs IHlvdSB3YW50IHRvIGFwcGVuZCB0byBhIFN0cmluZyB3aXRob3V0IGNoYW5naW5nIHRoZSByZWNl aXZlcidzIGVuY29kaW5nLg0KDQpUaGUgaXNzdWUgaXNuJ3QgZXhjbHVzaXZlIHRvIGJpbmFyeSBw cm90b2NvbHMgYW5kIGZvcm1hdHMsIGl0IGFsc28gaGFwcGVuIHdpdGggQVNDSUkgcHJvdG9jb2xz IHRoYXQgYWNjZXB0IGFyYml0cmFyeSBieXRlcyBpbmxpbmUsDQpsaWtlIFJlZGlzJ3MgUkVTUCBw cm90b2NvbCBvciBldmVuIEhUVFAvMS4xLg0KDQojIyMgUHJldmlvdXMgZGlzY3Vzc2lvbg0KDQpU aGVyZSB3YXMgYSBzaW1pbGFyIGZlYXR1cmUgcmVxdWVzdCBhIHdoaWxlIGFnbywgYnV0IGl0IHdh cyBhYmFuZG9uZWQ6IGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNDk3NQ0KDQoj IyMgRXhpc3Rpbmcgc29sdXRpb25zDQoNCllvdSBjYW4gb2YgY291cnNlIGFsd2F5cyBjYXN0IHRo ZSBzdHJpbmdzIHlvdSBhcHBlbmQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtOg0KDQpgYGBydWJ5DQpQ b3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikN CiAgICBidWYgPDwNCiAgICAgIDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZS5iIDw8DQog ICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5LmINCiAgZW5kDQplbmQNCmBgYA0KDQpC dXQgdGhpcyBjYXVzZSBhIGxvdCBvZiBuZWVkbGVzcyBhbGxvY2F0aW9ucy4NCg0KWW91J2QgdGhp bmsgeW91IGNvdWxkIGFsc28gdXNlIGBieXRlc3BsaWNlYCwgYnV0IGl0IGFjdHVhbGx5IGhhcyB0 aGUgc2FtZSBpc3N1ZToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9k eSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8IDI1NSA8PCB0aXRsZS5ieXRl c2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgdGl0bGUuYnl0ZXNpemUsIHRp dGxlKQ0KICAgIGJ1ZiA8PCAyNTUgPDwgYm9keS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNl KGJ1Zi5ieXRlc2l6ZSwgYm9keS5ieXRlc2l6ZSwgdGl0bGUpDQogIGVuZA0KZW5kDQpQb3N0Lm5l dygiSOKCrGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICdTdHJp bmcjYnl0ZXNwbGljZSc6IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzOiBCSU5BUlkg KEFTQ0lJLThCSVQpIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcikNCmBg YA0KDQpBbmQgZXZlbiBpZiBpdCB3b3JrZWQsIGl0IHdvdWxkIGJlIHZlcnkgdW5lcmdvbm9taWMu DQoNCiMjIyBQcm9wb3NhbDogYSBgYnl0ZWNvbmNhdGAgbWV0aG9kDQoNCkEgc29sdXRpb24gdG8g dGhpcyB3b3VsZCBiZSB0byBhZGQgYSBuZXcgYGJ5dGVjb25jYXRgIG1ldGhvZCwgdGhhdCBjb3Vs ZCBiZSBzaGltZWQgYXM6DQoNCmBgYHJ1YnkNCmNsYXNzIFN0cmluZw0KICBkZWYgYnl0ZWNvbmNh dCgqc3RyaW5ncykNCiAgICBzdHJpbmdzLm1hcCEgZG8gfHN8DQogICAgICBpZiBzLmlzX2E/KFN0 cmluZykgJiYgcy5lbmNvZGluZyAhPSBlbmNvZGluZw0KICAgICAgICBzLmR1cC5mb3JjZV9lbmNv ZGluZyhlbmNvZGluZykNCiAgICAgIGVsc2UNCiAgICAgICAgcw0KICAgICAgZW5kDQogICAgZW5k DQogICAgY29uY2F0KCpzdHJpbmdzKQ0KICBlbmQNCmVuZA0KDQpQb3N0ID0gU3RydWN0Lm5ldyg6 dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYuYnl0ZWNvbmNh dCgNCiAgICAgIDI1NSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlLA0KICAgICAgMjU1LCBib2R5LmJ5 dGVzaXplLCBib2R5LA0KICAgICkNCiAgZW5kDQplbmQNCg0KUG9zdC5uZXcoIkjigqxsbG8iLCAi V8O0cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAic29tZWRhdGFceEZGXGFIXHhF Mlx4ODJceEFDbGxvXHhGRlx4MDZXXHhDM1x4QjRybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4N CmBgYA0KDQpCdXQgb2YgY291cnNlIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiB3b3VsZG4ndCBu ZWVkIHRvIGR1cCB0aGUgYXJndW1lbnRzLg0KDQpMaWtlIG90aGVyIGBieXRlKmAgbWV0aG9kcywg aXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBlbnN1cmUgdGhlIHJlc3Vs dGluZyBzdHJpbmcgaGFzIGEgdmFsaWQgZW5jb2RpbmcsIG9yDQp0byBkZWFsIHdpdGggaXQgaWYg bm90Lg0KDQojIyMgTWV0aG9kIG5hbWUgYW5kIHNpZ25hdHVyZQ0KDQojIyMjIE5hbWUNCg0KVGhp cyBwcm9wb3NhbCBzdWdnZXN0cyBgU3RyaW5nI2J5dGVjb25jYXRgLCB0byBtaXJyb3IgYFN0cmlu ZyNjb25jYXRgLCBidXQgb3RoZXIgbmFtZXMgYXJlIHBvc3NpYmxlOg0KDQogIC0gYGJ5dGVhcHBl bmRgIChsaWtlIGBBcnJheSNhcHBlbmRgKQ0KICAtIGBieXRlcHVzaGAgIChsaWtlIGBBcnJheSNw dXNoYCkNCg0KIyMjIyBTaWduYXR1cmUNCg0KVGhpcyBwcm9wb3NhbCBtYWtlcyBgYnl0ZWNvbmNh dGAgYWNjZXB0IGVpdGhlciBgU3RyaW5nYCBvciBgSW50ZWdlcmAgKGluIGNoYXIgcmFuZ2UpIGFy Z3VtZW50cyBsaWtlIGBjb25jYXRgLiBJIGJlbGlldmUgaXQgbWFrZXMgc2Vuc2UgZm9yIGNvbnNp c3RlbmN5IGFuZCBhbHNvIGJlY2F1c2UgaXQncyBub3QgdW5jb21tb24gZm9yIHByb3RvY29scyB0 byBoYXZlIHNvbWUgYnl0ZSBiYXNlZCBzZWdtZW50cywgYW5kIEludGVnZXJzIGFyZSBtb3JlIGNv bnZlbmllbnQgdGhlcmUuDQoNClRoZSBwcm9wb3NlZCBtZXRob2QgYWxzbyBhY2NlcHQgdmFyaWFi bGUgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGBTdHJpbmcjY29uY2F0YCwgYEFycmF5 I3B1c2hgLCBgQXJyYXkjYXBwZW5kYC4NCg0KVGhlIHByb3Bvc2VkIG1ldGhvZCByZXR1cm5zIHNl bGYsIGxpa2UgYGNvbmNhdGAgYW5kIG90aGVycy4NCg0KIyMjIFlKSVQgY29uc2lkZXJhdGlvbg0K DQpJIGNvbnN1bHRlZCBAbWF4aW1lY2IgYWJvdXQgdGhpcyBwcm9wb3NhbCwgYW5kIGFjY29yZGlu ZyB0byBoZXIsIGFjY2VwdGluZyB2YXJpYWJsZSBhcmd1bWVudHMgbWFrZXMgaXQgaGFyZGVyIGZv ciBZSklUIHRvIG9wdGltaXplLg0KSSBzdXNwZWN0IGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgQVBJ cyB0cnVtcHMgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGJ1dCBJIHRoaW5rIGl0J3Mg d29ydGggbWVudGlvbmluZy4NCg0KDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1 YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVu c3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5v cmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9s aXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=