[ruby-core:118636] [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-19 08:07:09 UTC
List:
ruby-core #118636
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQpARGFuMDA0MiBJIGFscmVhZHkgYW5zd2VyZWQgeW91ciBzYW1lIHF1ZXN0aW9uIGluIFtG ZWF0dXJlICMyMDM5NF0uIFdoZXRoZXIgd2UgbGlrZSBpdCBvciBub3QgbmVpdGhlciBTdHJpbmdJ TyBub3IgSU86OkJ1ZmZlciBhcmUgZmFzdCwgY29tcGF0aWJsZSBhbmQgY29udmVuaWVudCBlbm91 Z2ggdG8gcmVwbGFjZSBgU3RyaW5nYCBmb3IgdGhlc2UgdXNlIGNhc2UuDQoNCklmIHlvdSBkb24n dCBiZWxpZXZlIG1lLCBJIGVuY291cmFnZSB5b3UgdG8gdHJ5IHVzaW5nIGVpdGhlciBpbiBodHRw czovL2dpdGh1Yi5jb20vU2hvcGlmeS9wcm90b2JvZXVmIG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9y ZWRpcy1yYi9yZWRpcy1jbGllbnQgKG9yIGFueSBvdGhlciBnZW0gb2YgeW91ciBjaG9pY2UpIGFu ZCBzZWUgaG93IHRoYXQgZ29lcy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KRmVhdHVyZSAjMjA1OTQ6IEEgbmV3IFN0cmluZyBtZXRob2QgdG8gYXBwZW5kIGJ5 dGVzIHdoaWxlIHByZXNlcnZpbmcgZW5jb2RpbmcNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3Jn L2lzc3Vlcy8yMDU5NCNjaGFuZ2UtMTA5MTYzDQoNCiogQXV0aG9yOiBieXJvb3QgKEplYW4gQm91 c3NpZXIpDQoqIFN0YXR1czogT3Blbg0KKiBBc3NpZ25lZTogYnlyb290IChKZWFuIEJvdXNzaWVy KQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyMjIENvbnRleHQN Cg0KV2hlbiB3b3JraW5nIHdpdGggYmluYXJ5IHByb3RvY29scyBzdWNoIGFzIGBwcm90b2J1ZmAg b3IgYE1lc3NhZ2VQYWNrYCwgeW91IG1heSBvZnRlbiBuZWVkIHRvIGFzc2VtYmxlIG11bHRpcGxl DQpzdHJpbmdzIG9mIGRpZmZlcmVudCBlbmNvZGluZzoNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVj dC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8 DQogICAgICAyNTUgPDwgdGl0bGUuYnl0ZXNpemUgPDwgdGl0bGUgPDwNCiAgICAgIDI1NSA8PCBi b2R5LmJ5dGVzaXplIDw8IGJvZHkNCiAgZW5kDQplbmQNCg0KUG9zdC5uZXcoIkhlbGxvIiwgIldv cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAic29tZWRhdGFceEZGXHgwNUhlbGxv XHhGRlx4MDVXb3JsZCIgIzxFbmNvZGluZzpBU0NJSS04QklUPg0KYGBgDQoNClRoZSBwcm9ibGVt IGluIHRoZSBhYm92ZSBjYXNlLCBpcyB0aGF0IGJlY2F1c2UgYEVuY29kaW5nOjpBU0NJSV84QklU YCBpcyBkZWNsYXJlZCBhcyBBU0NJSSBjb21wYXRpYmxlLA0KaWYgb25lIG9mIHRoZSBhcHBlbmRl ZCBzdHJpbmcgY29udGFpbnMgYnl0ZXMgb3V0c2lkZSB0aGUgQVNDSUkgcmFuZ2UsIHN0cmluZyBp cyBhdXRvbWF0aWNhbGx5IHByb21vdGVkDQp0byBhbm90aGVyIGVuY29kaW5nLCB3aGljaCB0aGVu IGxlYWRzIHRvIGVuY29kaW5nIGlzc3VlczoNCg0KYGBgcnVieQ0KUG9zdC5uZXcoIkjigqxsbG8i LCAiV8O0cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiBpbmNvbXBhdGlibGUgY2hh cmFjdGVyIGVuY29kaW5nczogQVNDSUktOEJJVCBhbmQgVVRGLTggKEVuY29kaW5nOjpDb21wYXRp YmlsaXR5RXJyb3IpDQpgYGANCg0KSW4gbWFueSBjYXNlcywgeW91IHdhbnQgdG8gYXBwZW5kIHRv IGEgU3RyaW5nIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHJlY2VpdmVyJ3MgZW5jb2RpbmcuDQoNClRo ZSBpc3N1ZSBpc24ndCBleGNsdXNpdmUgdG8gYmluYXJ5IHByb3RvY29scyBhbmQgZm9ybWF0cywg aXQgYWxzbyBoYXBwZW4gd2l0aCBBU0NJSSBwcm90b2NvbHMgdGhhdCBhY2NlcHQgYXJiaXRyYXJ5 IGJ5dGVzIGlubGluZSwNCmxpa2UgUmVkaXMncyBSRVNQIHByb3RvY29sIG9yIGV2ZW4gSFRUUC8x LjEuDQoNCiMjIyBQcmV2aW91cyBkaXNjdXNzaW9uDQoNClRoZXJlIHdhcyBhIHNpbWlsYXIgZmVh dHVyZSByZXF1ZXN0IGEgd2hpbGUgYWdvLCBidXQgaXQgd2FzIGFiYW5kb25lZDogaHR0cHM6Ly9i dWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE0OTc1DQoNCiMjIyBFeGlzdGluZyBzb2x1dGlvbnMN Cg0KWW91IGNhbiBvZiBjb3Vyc2UgYWx3YXlzIGNhc3QgdGhlIHN0cmluZ3MgeW91IGFwcGVuZCB0 byBhdm9pZCB0aGlzIHByb2JsZW06DQoNCmBgYHJ1YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRs ZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUoYnVmKQ0KICAgIGJ1ZiA8PA0KICAgICAgMjU1 IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRpdGxlLmIgPDwNCiAgICAgIDI1NSA8PCBib2R5LmJ5dGVz aXplIDw8IGJvZHkuYg0KICBlbmQNCmVuZA0KYGBgDQoNCkJ1dCB0aGlzIGNhdXNlIGEgbG90IG9m IG5lZWRsZXNzIGFsbG9jYXRpb25zLg0KDQpZb3UnZCB0aGluayB5b3UgY291bGQgYWxzbyB1c2Ug YGJ5dGVzcGxpY2VgLCBidXQgaXQgYWN0dWFsbHkgaGFzIHRoZSBzYW1lIGlzc3VlOg0KDQpgYGBy dWJ5DQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXpl KGJ1ZikNCiAgICBidWYgPDwgMjU1IDw8IHRpdGxlLmJ5dGVzaXplDQogICAgYnVmLmJ5dGVzcGxp Y2UoYnVmLmJ5dGVzaXplLCB0aXRsZS5ieXRlc2l6ZSwgdGl0bGUpDQogICAgYnVmIDw8IDI1NSA8 PCBib2R5LmJ5dGVzaXplDQogICAgYnVmLmJ5dGVzcGxpY2UoYnVmLmJ5dGVzaXplLCBib2R5LmJ5 dGVzaXplLCB0aXRsZSkNCiAgZW5kDQplbmQNClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIp LnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gJ1N0cmluZyNieXRlc3BsaWNlJzogaW5jb21w YXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3M6IEJJTkFSWSAoQVNDSUktOEJJVCkgYW5kIFVURi04 IChFbmNvZGluZzo6Q29tcGF0aWJpbGl0eUVycm9yKQ0KYGBgDQoNCkFuZCBldmVuIGlmIGl0IHdv cmtlZCwgaXQgd291bGQgYmUgdmVyeSB1bmVyZ29ub21pYy4NCg0KIyMjIFByb3Bvc2FsOiBhIGBi eXRlY29uY2F0YCBtZXRob2QNCg0KQSBzb2x1dGlvbiB0byB0aGlzIHdvdWxkIGJlIHRvIGFkZCBh IG5ldyBgYnl0ZWNvbmNhdGAgbWV0aG9kLCB0aGF0IGNvdWxkIGJlIHNoaW1lZCBhczoNCg0KYGBg cnVieQ0KY2xhc3MgU3RyaW5nDQogIGRlZiBieXRlY29uY2F0KCpzdHJpbmdzKQ0KICAgIHN0cmlu Z3MubWFwISBkbyB8c3wNCiAgICAgIGlmIHMuaXNfYT8oU3RyaW5nKSAmJiBzLmVuY29kaW5nICE9 IGVuY29kaW5nDQogICAgICAgIHMuZHVwLmZvcmNlX2VuY29kaW5nKGVuY29kaW5nKQ0KICAgICAg ZWxzZQ0KICAgICAgICBzDQogICAgICBlbmQNCiAgICBlbmQNCiAgICBjb25jYXQoKnN0cmluZ3Mp DQogIGVuZA0KZW5kDQoNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRl ZiBzZXJpYWxpemUoYnVmKQ0KICAgIGJ1Zi5ieXRlY29uY2F0KA0KICAgICAgMjU1LCB0aXRsZS5i eXRlc2l6ZSwgdGl0bGUsDQogICAgICAyNTUsIGJvZHkuYnl0ZXNpemUsIGJvZHksDQogICAgKQ0K ICBlbmQNCmVuZA0KDQpQb3N0Lm5ldygiSOKCrGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUoInNv bWVkYXRhIi5iKSAjID0+ICJzb21lZGF0YVx4RkZcYUhceEUyXHg4Mlx4QUNsbG9ceEZGXHgwNldc eEMzXHhCNHJsZCIgIzxFbmNvZGluZzpBU0NJSS04QklUPg0KYGBgDQoNCkJ1dCBvZiBjb3Vyc2Ug YSBidWlsdGluIGltcGxlbWVudGF0aW9uIHdvdWxkbid0IG5lZWQgdG8gZHVwIHRoZSBhcmd1bWVu dHMuDQoNCkxpa2Ugb3RoZXIgYGJ5dGUqYCBtZXRob2RzLCBpdCdzIHRoZSByZXNwb25zaWJpbGl0 eSBvZiB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGUgcmVzdWx0aW5nIHN0cmluZyBoYXMgYSB2YWxp ZCBlbmNvZGluZywgb3INCnRvIGRlYWwgd2l0aCBpdCBpZiBub3QuDQoNCiMjIyBNZXRob2QgbmFt ZSBhbmQgc2lnbmF0dXJlDQoNCiMjIyMgTmFtZQ0KDQpUaGlzIHByb3Bvc2FsIHN1Z2dlc3RzIGBT dHJpbmcjYnl0ZWNvbmNhdGAsIHRvIG1pcnJvciBgU3RyaW5nI2NvbmNhdGAsIGJ1dCBvdGhlciBu YW1lcyBhcmUgcG9zc2libGU6DQoNCiAgLSBgYnl0ZWFwcGVuZGAgKGxpa2UgYEFycmF5I2FwcGVu ZGApDQogIC0gYGJ5dGVwdXNoYCAgKGxpa2UgYEFycmF5I3B1c2hgKQ0KDQojIyMjIFNpZ25hdHVy ZQ0KDQpUaGlzIHByb3Bvc2FsIG1ha2VzIGBieXRlY29uY2F0YCBhY2NlcHQgZWl0aGVyIGBTdHJp bmdgIG9yIGBJbnRlZ2VyYCAoaW4gY2hhciByYW5nZSkgYXJndW1lbnRzIGxpa2UgYGNvbmNhdGAu IEkgYmVsaWV2ZSBpdCBtYWtlcyBzZW5zZSBmb3IgY29uc2lzdGVuY3kgYW5kIGFsc28gYmVjYXVz ZSBpdCdzIG5vdCB1bmNvbW1vbiBmb3IgcHJvdG9jb2xzIHRvIGhhdmUgc29tZSBieXRlIGJhc2Vk IHNlZ21lbnRzLCBhbmQgSW50ZWdlcnMgYXJlIG1vcmUgY29udmVuaWVudCB0aGVyZS4NCg0KVGhl IHByb3Bvc2VkIG1ldGhvZCBhbHNvIGFjY2VwdCB2YXJpYWJsZSBhcmd1bWVudHMgZm9yIGNvbnNp c3RlbmN5IHdpdGggYFN0cmluZyNjb25jYXRgLCBgQXJyYXkjcHVzaGAsIGBBcnJheSNhcHBlbmRg Lg0KDQpUaGUgcHJvcG9zZWQgbWV0aG9kIHJldHVybnMgc2VsZiwgbGlrZSBgY29uY2F0YCBhbmQg b3RoZXJzLg0KDQojIyMgWUpJVCBjb25zaWRlcmF0aW9uDQoNCkkgY29uc3VsdGVkIEBtYXhpbWVj YiBhYm91dCB0aGlzIHByb3Bvc2FsLCBhbmQgYWNjb3JkaW5nIHRvIGhlciwgYWNjZXB0aW5nIHZh cmlhYmxlIGFyZ3VtZW50cyBtYWtlcyBpdCBoYXJkZXIgZm9yIFlKSVQgdG8gb3B0aW1pemUuDQpJ IHN1c3BlY3QgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBBUElzIHRydW1wcyB0aGUgcGVyZm9ybWFu Y2UgY29uc2lkZXJhdGlvbiwgYnV0IEkgdGhpbmsgaXQncyB3b3J0aCBtZW50aW9uaW5nLg0KDQoN Cg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQogX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogcnVieS1jb3JlIG1haWxpbmcgbGlzdCAt LSBydWJ5LWNvcmVAbWwucnVieS1sYW5nLm9yZwogVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFp bCB0byBydWJ5LWNvcmUtbGVhdmVAbWwucnVieS1sYW5nLm9yZwogcnVieS1jb3JlIGluZm8gLS0g aHR0cHM6Ly9tbC5ydWJ5LWxhbmcub3JnL21haWxtYW4zL2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5 LWxhbmcub3JnLw==