[ruby-core:118780] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"alanwu (Alan Wu) via ruby-core" <ruby-core@...>
Date:
2024-08-02 17:09:38 UTC
List:
ruby-core #118780
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYWxhbnd1IChBbGFuIFd1KS4NCg0KDQpM ZXQgbWUgcHJlc2VudCBhbiBhbHRlcm5hdGl2ZSBkZXNpZ24gdGhhdCBvbmx5IGFkZHMgb25lIG1l dGhvZC4gVGhlIG5hbWUgaXMNClN0cmluZyNhcHBlbmRfYXNfYnl0ZXMsIGFuZCB0aGUgbmFtZSBw cm92aWRlcyBhIGZyYW1pbmcgb2YgInJlaW50ZXJwcmV0YXRpb24iDQp0aGF0IGhlbHBzIHRvIGV4 cGxhaW4gdGhlIGJlaGF2aW9yIG9mIHRoZSBtZXRob2QuDQoNCmBgYA0KY2FsbC1zZXE6DQogIGFw cGVuZF9hc19ieXRlcygqb2JqZWN0cykgLT4gc2VsZg0KDQpJbnRlcnByZXQgYXJndW1lbnRzIGFz IGJ5dGVzIGFuZCBhcHBlbmQgdGhlbSB0byArc2VsZisgd2l0aG91dCBjaGFuZ2luZyB0aGUNCmVu Y29kaW5nIG9mICtzZWxmKy4NCg0KRm9yIGVhY2ggb2JqZWN0IHRoYXQgaXMgYSBTdHJpbmcsIGFw cGVuZCB0aGUgYnl0ZXMgb2YgdGhlIHN0cmluZyB0byArc2VsZisuIEZvcg0KZWFjaCBJbnRlZ2Vy IG9iamVjdCAraSssIGFwcGVuZCBhIGJ5dGUgdGhhdCBpcyB0aGUgYml0d2lzZSBBTkQgb2YgK2kr IGFuZA0KKzB4ZmYrLiBJZiBhbnkgb3RoZXIgdHlwZSBvZiBvYmplY3RzIGlzIGluICtvYmplY3Rz KywgbGVhdmUgK3NlbGYrIHVubW9kaWZpZWQNCmFuZCByYWlzZSBBcmd1bWVudEVycm9yLiBUaGlz IG1ldGhvZCBkb2VzIG5vdCBhdHRlbXB0IHRvIGltcGxpY2l0bHkgY29udmVydCBhbnkNCmFyZ3Vt ZW50cy4NCg0KRXhhbXBsZXM6DQoNCiAgN3pfc2lnbmF0dXJlID0gJycuYg0KICA3el9zaWduYXR1 cmUuYXBwZW5kX2J5dGVzKCc3eicsIDB4YmMsIDB4YWYsIDB4MjcsIDB4MWMpICM9PiAiN3pceEJD XHhBRidceDFDIg0KYGBgDQoNCkl0J3MgY2xlYXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoZSBtZXRo b2QgaGFzIGl0cyBvd24gaW50ZXJwcmV0YXRpb24gb2YNCmFyZ3VtZW50cy4gVGhhdCBnaXZlcyBh IGhpbnQgdGhhdCBpdCBkb2VzIHNvbWV0aGluZyB1bnVzdWFsLCBhcyBpdCBicmVha3MNCmF3YXkg ZnJvbSB0aGUgZGVmYXVsdCwgImJ5dGVzIHdpdGggYW4gZW5jb2RpbmciIHN0YW5jZSBvZiBzdHJp bmdzLiBJdCBhbHNvDQpncmFtbWF0aWNhbGx5IHN0YW5kcyBvdXQgZnJvbSBleGlzdGluZyBgKmJ5 dGUqYCBtZXRob2RzLCBhIHJlZmxlY3Rpb24gb2YgdGhlDQpkaWZmZXJlbmNlcyBpbiBiZWhhdmlv ci4NCg0KRm9yIHN0cmluZyBhcmd1bWVudHMsIGl0J3MgdGhlIHNhbWUgYXMgYGFwcGVuZF9ieXRl cyhTdHJpbmcpYCBmcm9tIGJ5cm9vdC4gRm9yDQppbnRlZ2VycywgdGhlIGBpICYgMHhmZmAgbWFz a2luZyBiZWhhdmlvciBjb21lcyBmcm9tIFN0cmluZyNzZXRieXRlLiBOb3RlIHRoYXQNCml0IG1h c2tzIHdpdGhvdXQgbWFraW5nIGNhbGxzLg0KDQpgYGBydWJ5DQogIC0xMjggJiAweGZmICAgICAg ICAgICAgICAgICAgICAgICAgICMgPT4gMTI4DQogICJ4Ii50YXB7IF8xLnNldGJ5dGUoMCwgLTEy OCl9LmJ5dGVzICMgPT4gWzEyOF0NCmBgYA0KDQpUaGlzIG1hc2tpbmcgaXMgaG93IGl0IGludGVy cHJldHMgYW4gaW50ZWdlciBhcyBhIGJ5dGUuDQoNClRoZSBtZXRob2QgZG9lcyBub3QgYWNjZXB0 IGFycmF5cyBmb3Igc2ltcGxpY2l0eSwgYXMgc3BsYXR0aW5nIGlzIGFscmVhZHkNCmF2YWlsYWJs ZSBhcyBhIGZsZXhpYmxlIG9wdGlvbiBmb3IgY2FsbGVycy4NCg0KSSB0aGluayB0aGlzIGRlc2ln biBzdHJpa2VzIGEgZ29vZCBiYWxhbmNlIGJldHdlZW4gdXNhYmlsaXR5LCBlZmZpY2llbmN5LCBh bmQNCmhvdyB3ZWxsIGNvbXBpbGVycyBjYW4gaGFuZGxlIGl0Lg0KDQoNCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJpbmcg bWV0aG9kIHRvIGFwcGVuZCBieXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVuY29kaW5nDQpodHRwczov L2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEwOTMzMg0KDQoqIEF1dGhv 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=