[ruby-core:118562] [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 12:49:21 UTC
List:
ruby-core #118562
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQo+IGJ1dCBhbHNvIHRoYXQgdGhlIGVuY29kaW5nIGlzIGlnbm9yZWQgDQoNClRoYXQgd2Fz IG15IHVuZGVyc3RhbmRpbmcgYXMgd2VsbCwgYnV0IGdpdmVuIHRoYXQgYGJ5dGVzcGxpY2VgIGRv ZXMgcG90ZW50aWFsbHkgcmFpc2UgYEVuY29kaW5nRXJyb3JgLCB0aGVyZSBpcyBhIG1pc21hdGNo IGhlcmUuDQoNCkluIHRoaXMgY2FzZSBJIHZlcnkgbXVjaCB3YW50IHRvIGFsbG93IGJyZWFraW5n IGEgc3RyaW5nIGVuY29kaW5nLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpGZWF0dXJlICMyMDU5NDogQSBuZXcgU3RyaW5nIG1ldGhvZCB0byBhcHBlbmQgYnl0 ZXMgd2hpbGUgcHJlc2VydmluZyBlbmNvZGluZw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcv aXNzdWVzLzIwNTk0I2NoYW5nZS0xMDkwODQNCg0KKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vz c2llcikNCiogU3RhdHVzOiBPcGVuDQoqIEFzc2lnbmVlOiBieXJvb3QgKEplYW4gQm91c3NpZXIp DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIyMgQ29udGV4dA0K DQpXaGVuIHdvcmtpbmcgd2l0aCBiaW5hcnkgcHJvdG9jb2xzIHN1Y2ggYXMgYHByb3RvYnVmYCBv ciBgTWVzc2FnZVBhY2tgLCB5b3UgbWF5IG9mdGVuIG5lZWQgdG8gYXNzZW1ibGUgbXVsdGlwbGUN CnN0cmluZ3Mgb2YgZGlmZmVyZW50IGVuY29kaW5nOg0KDQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0 Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYgPDwN CiAgICAgIDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZSA8PA0KICAgICAgMjU1IDw8IGJv ZHkuYnl0ZXNpemUgPDwgYm9keQ0KICBlbmQNCmVuZA0KDQpQb3N0Lm5ldygiSGVsbG8iLCAiV29y bGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICJzb21lZGF0YVx4RkZceDA1SGVsbG9c eEZGXHgwNVdvcmxkIiAjPEVuY29kaW5nOkFTQ0lJLThCSVQ+DQpgYGANCg0KVGhlIHByb2JsZW0g aW4gdGhlIGFib3ZlIGNhc2UsIGlzIHRoYXQgYmVjYXVzZSBgRW5jb2Rpbmc6OkFTQ0lJXzhCSVRg IGlzIGRlY2xhcmVkIGFzIEFTQ0lJIGNvbXBhdGlibGUsDQppZiBvbmUgb2YgdGhlIGFwcGVuZGVk IHN0cmluZyBjb250YWlucyBieXRlcyBvdXRzaWRlIHRoZSBBU0NJSSByYW5nZSwgc3RyaW5nIGlz IGF1dG9tYXRpY2FsbHkgcHJvbW90ZWQNCnRvIGFub3RoZXIgZW5jb2RpbmcsIHdoaWNoIHRoZW4g bGVhZHMgdG8gZW5jb2RpbmcgaXNzdWVzOg0KDQpgYGBydWJ5DQpQb3N0Lm5ldygiSOKCrGxsbyIs ICJXw7RybGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+IGluY29tcGF0aWJsZSBjaGFy YWN0ZXIgZW5jb2RpbmdzOiBBU0NJSS04QklUIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGli aWxpdHlFcnJvcikNCmBgYA0KDQpJbiBtYW55IGNhc2VzLCB5b3Ugd2FudCB0byBhcHBlbmQgdG8g YSBTdHJpbmcgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVjZWl2ZXIncyBlbmNvZGluZy4NCg0KVGhl IGlzc3VlIGlzbid0IGV4Y2x1c2l2ZSB0byBiaW5hcnkgcHJvdG9jb2xzIGFuZCBmb3JtYXRzLCBp dCBhbHNvIGhhcHBlbiB3aXRoIEFTQ0lJIHByb3RvY29scyB0aGF0IGFjY2VwdCBhcmJpdHJhcnkg Ynl0ZXMgaW5saW5lLA0KbGlrZSBSZWRpcydzIFJFU1AgcHJvdG9jb2wgb3IgZXZlbiBIVFRQLzEu MS4NCg0KIyMjIFByZXZpb3VzIGRpc2N1c3Npb24NCg0KVGhlcmUgd2FzIGEgc2ltaWxhciBmZWF0 dXJlIHJlcXVlc3QgYSB3aGlsZSBhZ28sIGJ1dCBpdCB3YXMgYWJhbmRvbmVkOiBodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTQ5NzUNCg0KIyMjIEV4aXN0aW5nIHNvbHV0aW9ucw0K DQpZb3UgY2FuIG9mIGNvdXJzZSBhbHdheXMgY2FzdCB0aGUgc3RyaW5ncyB5b3UgYXBwZW5kIHRv IGF2b2lkIHRoaXMgcHJvYmxlbToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxl LCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8DQogICAgICAyNTUg PDwgdGl0bGUuYnl0ZXNpemUgPDwgdGl0bGUuYiA8PA0KICAgICAgMjU1IDw8IGJvZHkuYnl0ZXNp emUgPDwgYm9keS5iDQogIGVuZA0KZW5kDQpgYGANCg0KQnV0IHRoaXMgY2F1c2UgYSBsb3Qgb2Yg bmVlZGxlc3MgYWxsb2NhdGlvbnMuDQoNCllvdSdkIHRoaW5rIHlvdSBjb3VsZCBhbHNvIHVzZSBg Ynl0ZXNwbGljZWAsIGJ1dCBpdCBhY3R1YWxseSBoYXMgdGhlIHNhbWUgaXNzdWU6DQoNCmBgYHJ1 YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUo YnVmKQ0KICAgIGJ1ZiA8PCAyNTUgPDwgdGl0bGUuYnl0ZXNpemUNCiAgICBidWYuYnl0ZXNwbGlj ZShidWYuYnl0ZXNpemUsIHRpdGxlLmJ5dGVzaXplLCB0aXRsZSkNCiAgICBidWYgPDwgMjU1IDw8 IGJvZHkuYnl0ZXNpemUNCiAgICBidWYuYnl0ZXNwbGljZShidWYuYnl0ZXNpemUsIGJvZHkuYnl0 ZXNpemUsIHRpdGxlKQ0KICBlbmQNCmVuZA0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxkIiku c2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAnU3RyaW5nI2J5dGVzcGxpY2UnOiBpbmNvbXBh dGlibGUgY2hhcmFjdGVyIGVuY29kaW5nczogQklOQVJZIChBU0NJSS04QklUKSBhbmQgVVRGLTgg KEVuY29kaW5nOjpDb21wYXRpYmlsaXR5RXJyb3IpDQpgYGANCg0KQW5kIGV2ZW4gaWYgaXQgd29y a2VkLCBpdCB3b3VsZCBiZSB2ZXJ5IHVuZXJnb25vbWljLg0KDQojIyMgUHJvcG9zYWw6IGEgYGJ5 dGVjb25jYXRgIG1ldGhvZA0KDQpBIHNvbHV0aW9uIHRvIHRoaXMgd291bGQgYmUgdG8gYWRkIGEg bmV3IGBieXRlY29uY2F0YCBtZXRob2QsIHRoYXQgY291bGQgYmUgc2hpbWVkIGFzOg0KDQpgYGBy dWJ5DQpjbGFzcyBTdHJpbmcNCiAgZGVmIGJ5dGVjb25jYXQoKnN0cmluZ3MpDQogICAgc3RyaW5n cy5tYXAhIGRvIHxzfA0KICAgICAgaWYgcy5pc19hPyhTdHJpbmcpICYmIHMuZW5jb2RpbmcgIT0g ZW5jb2RpbmcNCiAgICAgICAgcy5kdXAuZm9yY2VfZW5jb2RpbmcoZW5jb2RpbmcpDQogICAgICBl bHNlDQogICAgICAgIHMNCiAgICAgIGVuZA0KICAgIGVuZA0KICAgIGNvbmNhdCgqc3RyaW5ncykN CiAgZW5kDQplbmQNCg0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVm IHNlcmlhbGl6ZShidWYpDQogICAgYnVmLmJ5dGVjb25jYXQoDQogICAgICAyNTUsIHRpdGxlLmJ5 dGVzaXplLCB0aXRsZSwNCiAgICAgIDI1NSwgYm9keS5ieXRlc2l6ZSwgYm9keSwNCiAgICApDQog IGVuZA0KZW5kDQoNClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29t ZWRhdGEiLmIpICMgPT4gInNvbWVkYXRhXHhGRlxhSFx4RTJceDgyXHhBQ2xsb1x4RkZceDA2V1x4 QzNceEI0cmxkIiAjPEVuY29kaW5nOkFTQ0lJLThCSVQ+DQpgYGANCg0KQnV0IG9mIGNvdXJzZSBh IGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gd291bGRuJ3QgbmVlZCB0byBkdXAgdGhlIGFyZ3VtZW50 cy4NCg0KTGlrZSBvdGhlciBgYnl0ZSpgIG1ldGhvZHMsIGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5 IG9mIHRoZSBjYWxsZXIgdG8gZW5zdXJlIHRoZSByZXN1bHRpbmcgc3RyaW5nIGhhcyBhIHZhbGlk IGVuY29kaW5nLCBvcg0KdG8gZGVhbCB3aXRoIGl0IGlmIG5vdC4NCg0KIyMjIE1ldGhvZCBuYW1l IGFuZCBzaWduYXR1cmUNCg0KIyMjIyBOYW1lDQoNClRoaXMgcHJvcG9zYWwgc3VnZ2VzdHMgYFN0 cmluZyNieXRlY29uY2F0YCwgdG8gbWlycm9yIGBTdHJpbmcjY29uY2F0YCwgYnV0IG90aGVyIG5h bWVzIGFyZSBwb3NzaWJsZToNCg0KICAtIGBieXRlYXBwZW5kYCAobGlrZSBgQXJyYXkjYXBwZW5k YCkNCiAgLSBgYnl0ZXB1c2hgICAobGlrZSBgQXJyYXkjcHVzaGApDQoNCiMjIyMgU2lnbmF0dXJl DQoNClRoaXMgcHJvcG9zYWwgbWFrZXMgYGJ5dGVjb25jYXRgIGFjY2VwdCBlaXRoZXIgYFN0cmlu Z2Agb3IgYEludGVnZXJgIChpbiBjaGFyIHJhbmdlKSBhcmd1bWVudHMgbGlrZSBgY29uY2F0YC4g SSBiZWxpZXZlIGl0IG1ha2VzIHNlbnNlIGZvciBjb25zaXN0ZW5jeSBhbmQgYWxzbyBiZWNhdXNl IGl0J3Mgbm90IHVuY29tbW9uIGZvciBwcm90b2NvbHMgdG8gaGF2ZSBzb21lIGJ5dGUgYmFzZWQg c2VnbWVudHMsIGFuZCBJbnRlZ2VycyBhcmUgbW9yZSBjb252ZW5pZW50IHRoZXJlLg0KDQpUaGUg cHJvcG9zZWQgbWV0aG9kIGFsc28gYWNjZXB0IHZhcmlhYmxlIGFyZ3VtZW50cyBmb3IgY29uc2lz dGVuY3kgd2l0aCBgU3RyaW5nI2NvbmNhdGAsIGBBcnJheSNwdXNoYCwgYEFycmF5I2FwcGVuZGAu DQoNClRoZSBwcm9wb3NlZCBtZXRob2QgcmV0dXJucyBzZWxmLCBsaWtlIGBjb25jYXRgIGFuZCBv dGhlcnMuDQoNCiMjIyBZSklUIGNvbnNpZGVyYXRpb24NCg0KSSBjb25zdWx0ZWQgQG1heGltZWNi IGFib3V0IHRoaXMgcHJvcG9zYWwsIGFuZCBhY2NvcmRpbmcgdG8gaGVyLCBhY2NlcHRpbmcgdmFy aWFibGUgYXJndW1lbnRzIG1ha2VzIGl0IGhhcmRlciBmb3IgWUpJVCB0byBvcHRpbWl6ZS4NCkkg c3VzcGVjdCBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIEFQSXMgdHJ1bXBzIHRoZSBwZXJmb3JtYW5j ZSBjb25zaWRlcmF0aW9uLCBidXQgSSB0aGluayBpdCdzIHdvcnRoIG1lbnRpb25pbmcuDQoNCg0K DQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0t IHJ1YnktY29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWls IHRvIHJ1YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBo dHRwczovL21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1Ynkt bGFuZy5vcmcv