[ruby-core:118632] [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-18 19:15:19 UTC
List:
ruby-core #118632
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQoNCkZyb20gdGhlIFtkZXYgbWVldGluZyBsb2ddKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5 L2Rldi1tZWV0aW5nLWxvZy9ibG9iL21hc3Rlci8yMDI0L0Rldk1lZXRpbmctMjAyNC0wNy0xMS5t ZCNmZWF0dXJlLTIwNTk0LWEtbmV3LXN0cmluZy1tZXRob2QtdG8tYXBwZW5kLWJ5dGVzLXdoaWxl LXByZXNlcnZpbmctZW5jb2RpbmctYnlyb290KSB0aGVzZSB0d28gcG9pbnRzIHN0dWNrIG91dCBh dCBtZToNCiogbm9idTogY2FuIHdlIHVzZSBJTzo6QnVmZmVyPw0KKiBzaHlvdWhlaTogd2h5IG5v dCBTdHJpbmdJTz8NCg0KVGhlc2UgYXJlIGdvb2QgcXVlc3Rpb25zIHRoYXQgSSBhbHNvIHdvbmRl cmVkIGFib3V0LCBidXQgdGhlIGFuc3dlcnMgYXJlIG5vdCByZWNvcmRlZCBpbiB0aGUgbWVldGlu ZyBsb2cuIFdoYXQgaXMgdGhlIHJlYXNvbiBub3QgdG8gdXNlIHRoZXNlIEFQSXMgd2hpY2ggYXJl IHByZXR0eSBtdWNoIGRlc2lnbmVkIGZvciB0aGlzIGV4YWN0IHVzZSBjYXNlPyBXaHkgaW50cm9k dWNlIGEgdGhpcmQgQVBJPw0KDQpCVFcgSSBoYXZlIHRvIHNheSBJIGZpbmQgaXQgZXh0cmVtZWx5 IGlyb25pYyB0aGF0IHdlIHdlbnQgdG8gc28gbXVjaCB0cm91YmxlIHRvIG1pZ3JhdGUgZnJvbSBi eXRlLW9yaWVudGVkIHN0cmluZ3MgaW4gMS44IHRvIGNoYXJhY3Rlci1vcmllbnRlZCBzdHJpbmdz IGluIDEuOSwgYW5kIG5vdyB3ZSdyZSByZS1hZGRpbmcgYnl0ZS1vcmllbnRlZCBtZXRob2RzLg0K DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMyMDU5 NDogQSBuZXcgU3RyaW5nIG1ldGhvZCB0byBhcHBlbmQgYnl0ZXMgd2hpbGUgcHJlc2VydmluZyBl bmNvZGluZw0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIwNTk0I2NoYW5nZS0x MDkxNTkNCg0KKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCiogU3RhdHVzOiBPcGVu DQoqIEFzc2lnbmVlOiBieXJvb3QgKEplYW4gQm91c3NpZXIpDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIyMgQ29udGV4dA0KDQpXaGVuIHdvcmtpbmcgd2l0aCBi aW5hcnkgcHJvdG9jb2xzIHN1Y2ggYXMgYHByb3RvYnVmYCBvciBgTWVzc2FnZVBhY2tgLCB5b3Ug bWF5IG9mdGVuIG5lZWQgdG8gYXNzZW1ibGUgbXVsdGlwbGUNCnN0cmluZ3Mgb2YgZGlmZmVyZW50 IGVuY29kaW5nOg0KDQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBk bw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYgPDwNCiAgICAgIDI1NSA8PCB0aXRsZS5i eXRlc2l6ZSA8PCB0aXRsZSA8PA0KICAgICAgMjU1IDw8IGJvZHkuYnl0ZXNpemUgPDwgYm9keQ0K ICBlbmQNCmVuZA0KDQpQb3N0Lm5ldygiSGVsbG8iLCAiV29ybGQiKS5zZXJpYWxpemUoInNvbWVk YXRhIi5iKSAjID0+ICJzb21lZGF0YVx4RkZceDA1SGVsbG9ceEZGXHgwNVdvcmxkIiAjPEVuY29k aW5nOkFTQ0lJLThCSVQ+DQpgYGANCg0KVGhlIHByb2JsZW0gaW4gdGhlIGFib3ZlIGNhc2UsIGlz IHRoYXQgYmVjYXVzZSBgRW5jb2Rpbmc6OkFTQ0lJXzhCSVRgIGlzIGRlY2xhcmVkIGFzIEFTQ0lJ IGNvbXBhdGlibGUsDQppZiBvbmUgb2YgdGhlIGFwcGVuZGVkIHN0cmluZyBjb250YWlucyBieXRl cyBvdXRzaWRlIHRoZSBBU0NJSSByYW5nZSwgc3RyaW5nIGlzIGF1dG9tYXRpY2FsbHkgcHJvbW90 ZWQNCnRvIGFub3RoZXIgZW5jb2RpbmcsIHdoaWNoIHRoZW4gbGVhZHMgdG8gZW5jb2RpbmcgaXNz dWVzOg0KDQpgYGBydWJ5DQpQb3N0Lm5ldygiSOKCrGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUo InNvbWVkYXRhIi5iKSAjID0+IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzOiBBU0NJ SS04QklUIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcikNCmBgYA0KDQpJ biBtYW55IGNhc2VzLCB5b3Ugd2FudCB0byBhcHBlbmQgdG8gYSBTdHJpbmcgd2l0aG91dCBjaGFu Z2luZyB0aGUgcmVjZWl2ZXIncyBlbmNvZGluZy4NCg0KVGhlIGlzc3VlIGlzbid0IGV4Y2x1c2l2 ZSB0byBiaW5hcnkgcHJvdG9jb2xzIGFuZCBmb3JtYXRzLCBpdCBhbHNvIGhhcHBlbiB3aXRoIEFT Q0lJIHByb3RvY29scyB0aGF0IGFjY2VwdCBhcmJpdHJhcnkgYnl0ZXMgaW5saW5lLA0KbGlrZSBS ZWRpcydzIFJFU1AgcHJvdG9jb2wgb3IgZXZlbiBIVFRQLzEuMS4NCg0KIyMjIFByZXZpb3VzIGRp c2N1c3Npb24NCg0KVGhlcmUgd2FzIGEgc2ltaWxhciBmZWF0dXJlIHJlcXVlc3QgYSB3aGlsZSBh Z28sIGJ1dCBpdCB3YXMgYWJhbmRvbmVkOiBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1 ZXMvMTQ5NzUNCg0KIyMjIEV4aXN0aW5nIHNvbHV0aW9ucw0KDQpZb3UgY2FuIG9mIGNvdXJzZSBh bHdheXMgY2FzdCB0aGUgc3RyaW5ncyB5b3UgYXBwZW5kIHRvIGF2b2lkIHRoaXMgcHJvYmxlbToN Cg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNl cmlhbGl6ZShidWYpDQogICAgYnVmIDw8DQogICAgICAyNTUgPDwgdGl0bGUuYnl0ZXNpemUgPDwg dGl0bGUuYiA8PA0KICAgICAgMjU1IDw8IGJvZHkuYnl0ZXNpemUgPDwgYm9keS5iDQogIGVuZA0K ZW5kDQpgYGANCg0KQnV0IHRoaXMgY2F1c2UgYSBsb3Qgb2YgbmVlZGxlc3MgYWxsb2NhdGlvbnMu DQoNCllvdSdkIHRoaW5rIHlvdSBjb3VsZCBhbHNvIHVzZSBgYnl0ZXNwbGljZWAsIGJ1dCBpdCBh Y3R1YWxseSBoYXMgdGhlIHNhbWUgaXNzdWU6DQoNCmBgYHJ1YnkNClBvc3QgPSBTdHJ1Y3QubmV3 KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUoYnVmKQ0KICAgIGJ1ZiA8PCAyNTUg PDwgdGl0bGUuYnl0ZXNpemUNCiAgICBidWYuYnl0ZXNwbGljZShidWYuYnl0ZXNpemUsIHRpdGxl LmJ5dGVzaXplLCB0aXRsZSkNCiAgICBidWYgPDwgMjU1IDw8IGJvZHkuYnl0ZXNpemUNCiAgICBi dWYuYnl0ZXNwbGljZShidWYuYnl0ZXNpemUsIGJvZHkuYnl0ZXNpemUsIHRpdGxlKQ0KICBlbmQN CmVuZA0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIu YikgIyA9PiAnU3RyaW5nI2J5dGVzcGxpY2UnOiBpbmNvbXBhdGlibGUgY2hhcmFjdGVyIGVuY29k aW5nczogQklOQVJZIChBU0NJSS04QklUKSBhbmQgVVRGLTggKEVuY29kaW5nOjpDb21wYXRpYmls aXR5RXJyb3IpDQpgYGANCg0KQW5kIGV2ZW4gaWYgaXQgd29ya2VkLCBpdCB3b3VsZCBiZSB2ZXJ5 IHVuZXJnb25vbWljLg0KDQojIyMgUHJvcG9zYWw6IGEgYGJ5dGVjb25jYXRgIG1ldGhvZA0KDQpB IHNvbHV0aW9uIHRvIHRoaXMgd291bGQgYmUgdG8gYWRkIGEgbmV3IGBieXRlY29uY2F0YCBtZXRo b2QsIHRoYXQgY291bGQgYmUgc2hpbWVkIGFzOg0KDQpgYGBydWJ5DQpjbGFzcyBTdHJpbmcNCiAg ZGVmIGJ5dGVjb25jYXQoKnN0cmluZ3MpDQogICAgc3RyaW5ncy5tYXAhIGRvIHxzfA0KICAgICAg aWYgcy5pc19hPyhTdHJpbmcpICYmIHMuZW5jb2RpbmcgIT0gZW5jb2RpbmcNCiAgICAgICAgcy5k dXAuZm9yY2VfZW5jb2RpbmcoZW5jb2RpbmcpDQogICAgICBlbHNlDQogICAgICAgIHMNCiAgICAg IGVuZA0KICAgIGVuZA0KICAgIGNvbmNhdCgqc3RyaW5ncykNCiAgZW5kDQplbmQNCg0KUG9zdCA9 IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAg YnVmLmJ5dGVjb25jYXQoDQogICAgICAyNTUsIHRpdGxlLmJ5dGVzaXplLCB0aXRsZSwNCiAgICAg IDI1NSwgYm9keS5ieXRlc2l6ZSwgYm9keSwNCiAgICApDQogIGVuZA0KZW5kDQoNClBvc3QubmV3 KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gInNvbWVk YXRhXHhGRlxhSFx4RTJceDgyXHhBQ2xsb1x4RkZceDA2V1x4QzNceEI0cmxkIiAjPEVuY29kaW5n OkFTQ0lJLThCSVQ+DQpgYGANCg0KQnV0IG9mIGNvdXJzZSBhIGJ1aWx0aW4gaW1wbGVtZW50YXRp b24gd291bGRuJ3QgbmVlZCB0byBkdXAgdGhlIGFyZ3VtZW50cy4NCg0KTGlrZSBvdGhlciBgYnl0 ZSpgIG1ldGhvZHMsIGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gZW5z dXJlIHRoZSByZXN1bHRpbmcgc3RyaW5nIGhhcyBhIHZhbGlkIGVuY29kaW5nLCBvcg0KdG8gZGVh bCB3aXRoIGl0IGlmIG5vdC4NCg0KIyMjIE1ldGhvZCBuYW1lIGFuZCBzaWduYXR1cmUNCg0KIyMj IyBOYW1lDQoNClRoaXMgcHJvcG9zYWwgc3VnZ2VzdHMgYFN0cmluZyNieXRlY29uY2F0YCwgdG8g bWlycm9yIGBTdHJpbmcjY29uY2F0YCwgYnV0IG90aGVyIG5hbWVzIGFyZSBwb3NzaWJsZToNCg0K ICAtIGBieXRlYXBwZW5kYCAobGlrZSBgQXJyYXkjYXBwZW5kYCkNCiAgLSBgYnl0ZXB1c2hgICAo bGlrZSBgQXJyYXkjcHVzaGApDQoNCiMjIyMgU2lnbmF0dXJlDQoNClRoaXMgcHJvcG9zYWwgbWFr ZXMgYGJ5dGVjb25jYXRgIGFjY2VwdCBlaXRoZXIgYFN0cmluZ2Agb3IgYEludGVnZXJgIChpbiBj aGFyIHJhbmdlKSBhcmd1bWVudHMgbGlrZSBgY29uY2F0YC4gSSBiZWxpZXZlIGl0IG1ha2VzIHNl bnNlIGZvciBjb25zaXN0ZW5jeSBhbmQgYWxzbyBiZWNhdXNlIGl0J3Mgbm90IHVuY29tbW9uIGZv ciBwcm90b2NvbHMgdG8gaGF2ZSBzb21lIGJ5dGUgYmFzZWQgc2VnbWVudHMsIGFuZCBJbnRlZ2Vy cyBhcmUgbW9yZSBjb252ZW5pZW50IHRoZXJlLg0KDQpUaGUgcHJvcG9zZWQgbWV0aG9kIGFsc28g YWNjZXB0IHZhcmlhYmxlIGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kgd2l0aCBgU3RyaW5nI2Nv bmNhdGAsIGBBcnJheSNwdXNoYCwgYEFycmF5I2FwcGVuZGAuDQoNClRoZSBwcm9wb3NlZCBtZXRo b2QgcmV0dXJucyBzZWxmLCBsaWtlIGBjb25jYXRgIGFuZCBvdGhlcnMuDQoNCiMjIyBZSklUIGNv bnNpZGVyYXRpb24NCg0KSSBjb25zdWx0ZWQgQG1heGltZWNiIGFib3V0IHRoaXMgcHJvcG9zYWws IGFuZCBhY2NvcmRpbmcgdG8gaGVyLCBhY2NlcHRpbmcgdmFyaWFibGUgYXJndW1lbnRzIG1ha2Vz IGl0IGhhcmRlciBmb3IgWUpJVCB0byBvcHRpbWl6ZS4NCkkgc3VzcGVjdCBjb25zaXN0ZW5jeSB3 aXRoIG90aGVyIEFQSXMgdHJ1bXBzIHRoZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uLCBidXQg SSB0aGluayBpdCdzIHdvcnRoIG1lbnRpb25pbmcuDQoNCg0KDQoNCg0KLS0gDQpodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5ydWJ5LWxh bmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1sZWF2ZUBt bC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1YnktbGFuZy5v cmcvbWFpbG1hbjMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1YnktbGFuZy5vcmcv