[ruby-core:118554] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2024-07-11 08:43:07 UTC
List:
ruby-core #118554
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4NCg0K DQpFeGlzdGluZyBtZXRob2RzIHdpdGggYnl0ZS1wcmVmaXggKFN0cmluZyNieXRlaW5kZXgsICNi eXRlc3BsaXRlLCBldGMuKSBtZWFuIHRoYXQgdGhlIHVuaXQgb2Ygb2Zmc2V0IG9yIHNpemUgaXMg aW4gYnl0ZS4NCg0KYGJ5dGVjb25jYXRgIGFuZCBgYnl0ZWFwcGVuZGAsIG9uIHRoZSBvdGhlciBo YW5kLCBhcmUgY29uZnVzaW5nIGJlY2F1c2UgdGhleSBoYXZlIG5vIG9mZnNldCBvciBzaXplLCBi dXQgdGhleSBtZWFuIGNvbmNhdGVuYXRpb24gd2l0aG91dCByZWdhcmQgdG8gZW5jb2RpbmdzLg0K DQpUaGVyZSB3ZXJlIHNvbWUgYWx0ZXJuYXRpdmUgcHJvcG9zYWxzIHRoYXQgY2FtZSBvdXQgb2Yg dGhlIGRldiBtZWV0aW5nLg0KDQoqIGBmb3JjZV9jb25jYXRgIChtYXR6OiBpdCBsYWNrcyAiZW5j b2RpbmciLCBJIGRvbid0IGxpa2UgaXQgc28gbXVjaCkNCiogYGJpbmFyeV9jb25jYXRgIChJdCBz aG91bGQgd29yayBvbmx5IHdoZW4gdGhlIHJlY2VpdmVyJ3MgZW5jb2RpbmcgaXMgQklOQVJZLiBE b2VzIGl0IGZpdCB3aXRoIEBieXJvb3QgJ3MgbW90aXZhdGlvbj8pDQoNCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJpbmcg bWV0aG9kIHRvIGFwcGVuZCBieXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVuY29kaW5nDQpodHRwczov L2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEwOTA3NQ0KDQoqIEF1dGhv cjogYnlyb290IChKZWFuIEJvdXNzaWVyKQ0KKiBTdGF0dXM6IE9wZW4NCiogQXNzaWduZWU6IGJ5 cm9vdCAoSmVhbiBCb3Vzc2llcikNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCiMjIyBDb250ZXh0DQoNCldoZW4gd29ya2luZyB3aXRoIGJpbmFyeSBwcm90b2NvbHMg c3VjaCBhcyBgcHJvdG9idWZgIG9yIGBNZXNzYWdlUGFja2AsIHlvdSBtYXkgb2Z0ZW4gbmVlZCB0 byBhc3NlbWJsZSBtdWx0aXBsZQ0Kc3RyaW5ncyBvZiBkaWZmZXJlbnQgZW5jb2Rpbmc6DQoNCmBg YHJ1YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxp emUoYnVmKQ0KICAgIGJ1ZiA8PA0KICAgICAgMjU1IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRpdGxl IDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5DQogIGVuZA0KZW5kDQoNClBv c3QubmV3KCJIZWxsbyIsICJXb3JsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gInNv bWVkYXRhXHhGRlx4MDVIZWxsb1x4RkZceDA1V29ybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4N CmBgYA0KDQpUaGUgcHJvYmxlbSBpbiB0aGUgYWJvdmUgY2FzZSwgaXMgdGhhdCBiZWNhdXNlIGBF bmNvZGluZzo6QVNDSUlfOEJJVGAgaXMgZGVjbGFyZWQgYXMgQVNDSUkgY29tcGF0aWJsZSwNCmlm IG9uZSBvZiB0aGUgYXBwZW5kZWQgc3RyaW5nIGNvbnRhaW5zIGJ5dGVzIG91dHNpZGUgdGhlIEFT Q0lJIHJhbmdlLCBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBwcm9tb3RlZA0KdG8gYW5vdGhlciBl bmNvZGluZywgd2hpY2ggdGhlbiBsZWFkcyB0byBlbmNvZGluZyBpc3N1ZXM6DQoNCmBgYHJ1YnkN ClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMg PT4gaW5jb21wYXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3M6IEFTQ0lJLThCSVQgYW5kIFVURi04 IChFbmNvZGluZzo6Q29tcGF0aWJpbGl0eUVycm9yKQ0KYGBgDQoNCkluIG1hbnkgY2FzZXMsIHlv dSB3YW50IHRvIGFwcGVuZCB0byBhIFN0cmluZyB3aXRob3V0IGNoYW5naW5nIHRoZSByZWNlaXZl cidzIGVuY29kaW5nLg0KDQpUaGUgaXNzdWUgaXNuJ3QgZXhjbHVzaXZlIHRvIGJpbmFyeSBwcm90 b2NvbHMgYW5kIGZvcm1hdHMsIGl0IGFsc28gaGFwcGVuIHdpdGggQVNDSUkgcHJvdG9jb2xzIHRo YXQgYWNjZXB0IGFyYml0cmFyeSBieXRlcyBpbmxpbmUsDQpsaWtlIFJlZGlzJ3MgUkVTUCBwcm90 b2NvbCBvciBldmVuIEhUVFAvMS4xLg0KDQojIyMgUHJldmlvdXMgZGlzY3Vzc2lvbg0KDQpUaGVy ZSB3YXMgYSBzaW1pbGFyIGZlYXR1cmUgcmVxdWVzdCBhIHdoaWxlIGFnbywgYnV0IGl0IHdhcyBh YmFuZG9uZWQ6IGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNDk3NQ0KDQojIyMg RXhpc3Rpbmcgc29sdXRpb25zDQoNCllvdSBjYW4gb2YgY291cnNlIGFsd2F5cyBjYXN0IHRoZSBz dHJpbmdzIHlvdSBhcHBlbmQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtOg0KDQpgYGBydWJ5DQpQb3N0 ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAg ICBidWYgPDwNCiAgICAgIDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZS5iIDw8DQogICAg ICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5LmINCiAgZW5kDQplbmQNCmBgYA0KDQpCdXQg dGhpcyBjYXVzZSBhIGxvdCBvZiBuZWVkbGVzcyBhbGxvY2F0aW9ucy4NCg0KWW91J2QgdGhpbmsg eW91IGNvdWxkIGFsc28gdXNlIGBieXRlc3BsaWNlYCwgYnV0IGl0IGFjdHVhbGx5IGhhcyB0aGUg c2FtZSBpc3N1ZToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkg ZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8IDI1NSA8PCB0aXRsZS5ieXRlc2l6 ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxl KQ0KICAgIGJ1ZiA8PCAyNTUgPDwgYm9keS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1 Zi5ieXRlc2l6ZSwgYm9keS5ieXRlc2l6ZSwgdGl0bGUpDQogIGVuZA0KZW5kDQpQb3N0Lm5ldygi SOKCrGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICdTdHJpbmcj Ynl0ZXNwbGljZSc6IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzOiBCSU5BUlkgKEFT Q0lJLThCSVQpIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcikNCmBgYA0K DQpBbmQgZXZlbiBpZiBpdCB3b3JrZWQsIGl0IHdvdWxkIGJlIHZlcnkgdW5lcmdvbm9taWMuDQoN CiMjIyBQcm9wb3NhbDogYSBgYnl0ZWNvbmNhdGAgbWV0aG9kDQoNCkEgc29sdXRpb24gdG8gdGhp cyB3b3VsZCBiZSB0byBhZGQgYSBuZXcgYGJ5dGVjb25jYXRgIG1ldGhvZCwgdGhhdCBjb3VsZCBi ZSBzaGltZWQgYXM6DQoNCmBgYHJ1YnkNCmNsYXNzIFN0cmluZw0KICBkZWYgYnl0ZWNvbmNhdCgq c3RyaW5ncykNCiAgICBzdHJpbmdzLm1hcCEgZG8gfHN8DQogICAgICBpZiBzLmlzX2E/KFN0cmlu ZykgJiYgcy5lbmNvZGluZyAhPSBlbmNvZGluZw0KICAgICAgICBzLmR1cC5mb3JjZV9lbmNvZGlu ZyhlbmNvZGluZykNCiAgICAgIGVsc2UNCiAgICAgICAgcw0KICAgICAgZW5kDQogICAgZW5kDQog ICAgY29uY2F0KCpzdHJpbmdzKQ0KICBlbmQNCmVuZA0KDQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0 bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYuYnl0ZWNvbmNhdCgN CiAgICAgIDI1NSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlLA0KICAgICAgMjU1LCBib2R5LmJ5dGVz aXplLCBib2R5LA0KICAgICkNCiAgZW5kDQplbmQNCg0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0 cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAic29tZWRhdGFceEZGXGFIXHhFMlx4 ODJceEFDbGxvXHhGRlx4MDZXXHhDM1x4QjRybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBg YA0KDQpCdXQgb2YgY291cnNlIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiB3b3VsZG4ndCBuZWVk IHRvIGR1cCB0aGUgYXJndW1lbnRzLg0KDQpMaWtlIG90aGVyIGBieXRlKmAgbWV0aG9kcywgaXQn cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBlbnN1cmUgdGhlIHJlc3VsdGlu ZyBzdHJpbmcgaGFzIGEgdmFsaWQgZW5jb2RpbmcsIG9yDQp0byBkZWFsIHdpdGggaXQgaWYgbm90 Lg0KDQojIyMgTWV0aG9kIG5hbWUgYW5kIHNpZ25hdHVyZQ0KDQojIyMjIE5hbWUNCg0KVGhpcyBw cm9wb3NhbCBzdWdnZXN0cyBgU3RyaW5nI2J5dGVjb25jYXRgLCB0byBtaXJyb3IgYFN0cmluZyNj b25jYXRgLCBidXQgb3RoZXIgbmFtZXMgYXJlIHBvc3NpYmxlOg0KDQogIC0gYGJ5dGVhcHBlbmRg IChsaWtlIGBBcnJheSNhcHBlbmRgKQ0KICAtIGBieXRlcHVzaGAgIChsaWtlIGBBcnJheSNwdXNo YCkNCg0KIyMjIyBTaWduYXR1cmUNCg0KVGhpcyBwcm9wb3NhbCBtYWtlcyBgYnl0ZWNvbmNhdGAg YWNjZXB0IGVpdGhlciBgU3RyaW5nYCBvciBgSW50ZWdlcmAgKGluIGNoYXIgcmFuZ2UpIGFyZ3Vt ZW50cyBsaWtlIGBjb25jYXRgLiBJIGJlbGlldmUgaXQgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3Rl bmN5IGFuZCBhbHNvIGJlY2F1c2UgaXQncyBub3QgdW5jb21tb24gZm9yIHByb3RvY29scyB0byBo YXZlIHNvbWUgYnl0ZSBiYXNlZCBzZWdtZW50cywgYW5kIEludGVnZXJzIGFyZSBtb3JlIGNvbnZl bmllbnQgdGhlcmUuDQoNClRoZSBwcm9wb3NlZCBtZXRob2QgYWxzbyBhY2NlcHQgdmFyaWFibGUg YXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGBTdHJpbmcjY29uY2F0YCwgYEFycmF5I3B1 c2hgLCBgQXJyYXkjYXBwZW5kYC4NCg0KVGhlIHByb3Bvc2VkIG1ldGhvZCByZXR1cm5zIHNlbGYs IGxpa2UgYGNvbmNhdGAgYW5kIG90aGVycy4NCg0KIyMjIFlKSVQgY29uc2lkZXJhdGlvbg0KDQpJ IGNvbnN1bHRlZCBAbWF4aW1lY2IgYWJvdXQgdGhpcyBwcm9wb3NhbCwgYW5kIGFjY29yZGluZyB0 byBoZXIsIGFjY2VwdGluZyB2YXJpYWJsZSBhcmd1bWVudHMgbWFrZXMgaXQgaGFyZGVyIGZvciBZ SklUIHRvIG9wdGltaXplLg0KSSBzdXNwZWN0IGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgQVBJcyB0 cnVtcHMgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGJ1dCBJIHRoaW5rIGl0J3Mgd29y dGggbWVudGlvbmluZy4NCg0KDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3Jn Lw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1Ynkt Y29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vi c2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcK IHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0 cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=