[ruby-core:118738] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"Dan0042 (Daniel DeLorme) via ruby-core" <ruby-core@...>
Date:
2024-07-30 12:36:57 UTC
List:
ruby-core #118738
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQoNCmR1ZXJzdCAoTWFydGluIETDvHJzdCkgd3JvdGUgaW4gI25vdGUtMTc6DQo+IFRoaXMg bWF5IG5lZWQgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIGlzc3VlLCBidXQgd2hlbiBJIGludHJvZHVj ZWQgYFN0cmluZyNmb3JjZV9lbmNvZGluZ2AsIEkgd2FzIGltYWdpbmluZyBhZGRpbmcgYSBibG9j ayB0byBpdCBzbyB0aGF0IHRoZSBmb3JjZWQgZW5jb2Rpbmcgd291bGQgb25seSBhcHBseSBpbnNp ZGUgdGhlIGJsb2NrLg0KDQorMSwgdGhhdCB3b3VsZCBiZSB2ZXJ5IGNvbnZlbmllbnQsIGJ1dCB5 ZXMgaXQncyBhIGRpZmZlcmVudCBpc3N1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgaWdub3JlIEVuY29k aW5nOjpDb21wYXRpYmlsaXR5RXJyb3Igd2hpY2ggaXMgdGhlIHBvaW50IG9mIHRoaXMgcHJvcG9z YWwuDQoNCk1hbnkgbGFuZ3VhZ2VzIGhhdmUgYSBCeXRlQXJyYXkgb3IgQnl0ZUJ1ZmZlciBzZXBh cmF0ZSBmcm9tIFN0cmluZywgYW5kIEkgYmVsaWV2ZSB0aGlzIGlzIHdoYXQgcnVieSBuZWVkcy4g RGVzaWduLXdpc2UsIGluIHRoZSBsb25nIHJ1biwgSSBiZWxpZXZlIGl0J3MgYmV0dGVyIHRvIGV2 b2x2ZSBTdHJpbmdJTyBvciBJTzo6QnVmZmVyIGludG8gYSBwcm9wZXIgYnl0ZWJ1ZmZlciB0byBo YW5kbGUgZW5jb2RpbmctYWdub3N0aWMgYnl0ZXM7IGFuZCBTdHJpbmcgc2hvdWxkIG9ubHkgaGFu ZGxlIGVuY29kaW5nLWF3YXJlIGNoYXJhY3RlcnMuIChJIGFwb2xvZ2l6ZSBmb3IgYmVhdGluZyBh IGRlYWQgaG9yc2UuKQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpGZWF0dXJlICMyMDU5NDogQSBuZXcgU3RyaW5nIG1ldGhvZCB0byBhcHBlbmQgYnl0ZXMgd2hp bGUgcHJlc2VydmluZyBlbmNvZGluZw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVz LzIwNTk0I2NoYW5nZS0xMDkyNzYNCg0KKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikN CiogU3RhdHVzOiBPcGVuDQoqIEFzc2lnbmVlOiBieXJvb3QgKEplYW4gQm91c3NpZXIpDQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIyMgQ29udGV4dA0KDQpXaGVu IHdvcmtpbmcgd2l0aCBiaW5hcnkgcHJvdG9jb2xzIHN1Y2ggYXMgYHByb3RvYnVmYCBvciBgTWVz c2FnZVBhY2tgLCB5b3UgbWF5IG9mdGVuIG5lZWQgdG8gYXNzZW1ibGUgbXVsdGlwbGUNCnN0cmlu Z3Mgb2YgZGlmZmVyZW50IGVuY29kaW5nOg0KDQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0Lm5ldyg6 dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYgPDwNCiAgICAg IDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZSA8PA0KICAgICAgMjU1IDw8IGJvZHkuYnl0 ZXNpemUgPDwgYm9keQ0KICBlbmQNCmVuZA0KDQpQb3N0Lm5ldygiSGVsbG8iLCAiV29ybGQiKS5z ZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICJzb21lZGF0YVx4RkZceDA1SGVsbG9ceEZGXHgw NVdvcmxkIiAjPEVuY29kaW5nOkFTQ0lJLThCSVQ+DQpgYGANCg0KVGhlIHByb2JsZW0gaW4gdGhl IGFib3ZlIGNhc2UsIGlzIHRoYXQgYmVjYXVzZSBgRW5jb2Rpbmc6OkFTQ0lJXzhCSVRgIGlzIGRl Y2xhcmVkIGFzIEFTQ0lJIGNvbXBhdGlibGUsDQppZiBvbmUgb2YgdGhlIGFwcGVuZGVkIHN0cmlu ZyBjb250YWlucyBieXRlcyBvdXRzaWRlIHRoZSBBU0NJSSByYW5nZSwgc3RyaW5nIGlzIGF1dG9t YXRpY2FsbHkgcHJvbW90ZWQNCnRvIGFub3RoZXIgZW5jb2RpbmcsIHdoaWNoIHRoZW4gbGVhZHMg dG8gZW5jb2RpbmcgaXNzdWVzOg0KDQpgYGBydWJ5DQpQb3N0Lm5ldygiSOKCrGxsbyIsICJXw7Ry bGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIg ZW5jb2RpbmdzOiBBU0NJSS04QklUIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlF cnJvcikNCmBgYA0KDQpJbiBtYW55IGNhc2VzLCB5b3Ugd2FudCB0byBhcHBlbmQgdG8gYSBTdHJp bmcgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVjZWl2ZXIncyBlbmNvZGluZy4NCg0KVGhlIGlzc3Vl IGlzbid0IGV4Y2x1c2l2ZSB0byBiaW5hcnkgcHJvdG9jb2xzIGFuZCBmb3JtYXRzLCBpdCBhbHNv IGhhcHBlbiB3aXRoIEFTQ0lJIHByb3RvY29scyB0aGF0IGFjY2VwdCBhcmJpdHJhcnkgYnl0ZXMg aW5saW5lLA0KbGlrZSBSZWRpcydzIFJFU1AgcHJvdG9jb2wgb3IgZXZlbiBIVFRQLzEuMS4NCg0K IyMjIFByZXZpb3VzIGRpc2N1c3Npb24NCg0KVGhlcmUgd2FzIGEgc2ltaWxhciBmZWF0dXJlIHJl cXVlc3QgYSB3aGlsZSBhZ28sIGJ1dCBpdCB3YXMgYWJhbmRvbmVkOiBodHRwczovL2J1Z3MucnVi eS1sYW5nLm9yZy9pc3N1ZXMvMTQ5NzUNCg0KIyMjIEV4aXN0aW5nIHNvbHV0aW9ucw0KDQpZb3Ug Y2FuIG9mIGNvdXJzZSBhbHdheXMgY2FzdCB0aGUgc3RyaW5ncyB5b3UgYXBwZW5kIHRvIGF2b2lk IHRoaXMgcHJvYmxlbToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9k eSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8DQogICAgICAyNTUgPDwgdGl0 bGUuYnl0ZXNpemUgPDwgdGl0bGUuYiA8PA0KICAgICAgMjU1IDw8IGJvZHkuYnl0ZXNpemUgPDwg Ym9keS5iDQogIGVuZA0KZW5kDQpgYGANCg0KQnV0IHRoaXMgY2F1c2UgYSBsb3Qgb2YgbmVlZGxl c3MgYWxsb2NhdGlvbnMuDQoNCllvdSdkIHRoaW5rIHlvdSBjb3VsZCBhbHNvIHVzZSBgYnl0ZXNw bGljZWAsIGJ1dCBpdCBhY3R1YWxseSBoYXMgdGhlIHNhbWUgaXNzdWU6DQoNCmBgYHJ1YnkNClBv c3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUoYnVmKQ0K ICAgIGJ1ZiA8PCAyNTUgPDwgdGl0bGUuYnl0ZXNpemUNCiAgICBidWYuYnl0ZXNwbGljZShidWYu Ynl0ZXNpemUsIHRpdGxlLmJ5dGVzaXplLCB0aXRsZSkNCiAgICBidWYgPDwgMjU1IDw8IGJvZHku Ynl0ZXNpemUNCiAgICBidWYuYnl0ZXNwbGljZShidWYuYnl0ZXNpemUsIGJvZHkuYnl0ZXNpemUs IHRpdGxlKQ0KICBlbmQNCmVuZA0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxkIikuc2VyaWFs aXplKCJzb21lZGF0YSIuYikgIyA9PiAnU3RyaW5nI2J5dGVzcGxpY2UnOiBpbmNvbXBhdGlibGUg Y2hhcmFjdGVyIGVuY29kaW5nczogQklOQVJZIChBU0NJSS04QklUKSBhbmQgVVRGLTggKEVuY29k aW5nOjpDb21wYXRpYmlsaXR5RXJyb3IpDQpgYGANCg0KQW5kIGV2ZW4gaWYgaXQgd29ya2VkLCBp dCB3b3VsZCBiZSB2ZXJ5IHVuZXJnb25vbWljLg0KDQojIyMgUHJvcG9zYWw6IGEgYGJ5dGVjb25j YXRgIG1ldGhvZA0KDQpBIHNvbHV0aW9uIHRvIHRoaXMgd291bGQgYmUgdG8gYWRkIGEgbmV3IGBi eXRlY29uY2F0YCBtZXRob2QsIHRoYXQgY291bGQgYmUgc2hpbWVkIGFzOg0KDQpgYGBydWJ5DQpj bGFzcyBTdHJpbmcNCiAgZGVmIGJ5dGVjb25jYXQoKnN0cmluZ3MpDQogICAgc3RyaW5ncy5tYXAh IGRvIHxzfA0KICAgICAgaWYgcy5pc19hPyhTdHJpbmcpICYmIHMuZW5jb2RpbmcgIT0gZW5jb2Rp bmcNCiAgICAgICAgcy5kdXAuZm9yY2VfZW5jb2RpbmcoZW5jb2RpbmcpDQogICAgICBlbHNlDQog ICAgICAgIHMNCiAgICAgIGVuZA0KICAgIGVuZA0KICAgIGNvbmNhdCgqc3RyaW5ncykNCiAgZW5k DQplbmQNCg0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlh bGl6ZShidWYpDQogICAgYnVmLmJ5dGVjb25jYXQoDQogICAgICAyNTUsIHRpdGxlLmJ5dGVzaXpl LCB0aXRsZSwNCiAgICAgIDI1NSwgYm9keS5ieXRlc2l6ZSwgYm9keSwNCiAgICApDQogIGVuZA0K ZW5kDQoNClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEi LmIpICMgPT4gInNvbWVkYXRhXHhGRlxhSFx4RTJceDgyXHhBQ2xsb1x4RkZceDA2V1x4QzNceEI0 cmxkIiAjPEVuY29kaW5nOkFTQ0lJLThCSVQ+DQpgYGANCg0KQnV0IG9mIGNvdXJzZSBhIGJ1aWx0 aW4gaW1wbGVtZW50YXRpb24gd291bGRuJ3QgbmVlZCB0byBkdXAgdGhlIGFyZ3VtZW50cy4NCg0K TGlrZSBvdGhlciBgYnl0ZSpgIG1ldGhvZHMsIGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRo ZSBjYWxsZXIgdG8gZW5zdXJlIHRoZSByZXN1bHRpbmcgc3RyaW5nIGhhcyBhIHZhbGlkIGVuY29k aW5nLCBvcg0KdG8gZGVhbCB3aXRoIGl0IGlmIG5vdC4NCg0KIyMjIE1ldGhvZCBuYW1lIGFuZCBz aWduYXR1cmUNCg0KIyMjIyBOYW1lDQoNClRoaXMgcHJvcG9zYWwgc3VnZ2VzdHMgYFN0cmluZyNi eXRlY29uY2F0YCwgdG8gbWlycm9yIGBTdHJpbmcjY29uY2F0YCwgYnV0IG90aGVyIG5hbWVzIGFy ZSBwb3NzaWJsZToNCg0KICAtIGBieXRlYXBwZW5kYCAobGlrZSBgQXJyYXkjYXBwZW5kYCkNCiAg LSBgYnl0ZXB1c2hgICAobGlrZSBgQXJyYXkjcHVzaGApDQoNCiMjIyMgU2lnbmF0dXJlDQoNClRo aXMgcHJvcG9zYWwgbWFrZXMgYGJ5dGVjb25jYXRgIGFjY2VwdCBlaXRoZXIgYFN0cmluZ2Agb3Ig YEludGVnZXJgIChpbiBjaGFyIHJhbmdlKSBhcmd1bWVudHMgbGlrZSBgY29uY2F0YC4gSSBiZWxp ZXZlIGl0IG1ha2VzIHNlbnNlIGZvciBjb25zaXN0ZW5jeSBhbmQgYWxzbyBiZWNhdXNlIGl0J3Mg bm90IHVuY29tbW9uIGZvciBwcm90b2NvbHMgdG8gaGF2ZSBzb21lIGJ5dGUgYmFzZWQgc2VnbWVu dHMsIGFuZCBJbnRlZ2VycyBhcmUgbW9yZSBjb252ZW5pZW50IHRoZXJlLg0KDQpUaGUgcHJvcG9z ZWQgbWV0aG9kIGFsc28gYWNjZXB0IHZhcmlhYmxlIGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kg d2l0aCBgU3RyaW5nI2NvbmNhdGAsIGBBcnJheSNwdXNoYCwgYEFycmF5I2FwcGVuZGAuDQoNClRo ZSBwcm9wb3NlZCBtZXRob2QgcmV0dXJucyBzZWxmLCBsaWtlIGBjb25jYXRgIGFuZCBvdGhlcnMu DQoNCiMjIyBZSklUIGNvbnNpZGVyYXRpb24NCg0KSSBjb25zdWx0ZWQgQG1heGltZWNiIGFib3V0 IHRoaXMgcHJvcG9zYWwsIGFuZCBhY2NvcmRpbmcgdG8gaGVyLCBhY2NlcHRpbmcgdmFyaWFibGUg YXJndW1lbnRzIG1ha2VzIGl0IGhhcmRlciBmb3IgWUpJVCB0byBvcHRpbWl6ZS4NCkkgc3VzcGVj dCBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIEFQSXMgdHJ1bXBzIHRoZSBwZXJmb3JtYW5jZSBjb25z aWRlcmF0aW9uLCBidXQgSSB0aGluayBpdCdzIHdvcnRoIG1lbnRpb25pbmcuDQoNCg0KDQoNCg0K LS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1Ynkt Y29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1 YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczov L21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1YnktbGFuZy5v cmcv