[ruby-core:118543] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"matz (Yukihiro Matsumoto) via ruby-core" <ruby-core@...>
Date:
2024-07-11 05:06:39 UTC
List:
ruby-core #118543
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4NCg0KQXNzaWduZWUgc2V0IHRvIGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCg0KSSBhZ3JlZSB3 aXRoIGhhdmluZyBzdWNoIGEgbWV0aG9kLiBIb3dldmVyLCBJIGRpc2FncmVlIHdpdGggdGhlIG5h bWUgYGJ5dGVjb25jYXRgLiBTaW5jZSBvdGhlciBtZXRob2RzIHdpdGggYnl0ZSBwcmVmaXhlcyBo YXZlIHRoZSBiZWhhdmlvciBvZiBjb3VudGluZyB0aGUgaW5kZXggaW4gYnl0ZXMsIGJ1dCB0aGlz IG1ldGhvZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBpbmRleCwgYnV0IHdpdGggdGhlIGVu Y29kaW5nLg0KSWYgdGhpcyBtZXRob2Qgb25seSB3b3JrcyB3aXRoIGBCSU5BUllgIGVuY29kaW5n LCB0aGUgbmFtZSBtaWdodCBiZSBgYmluYXJ5X2NvbmNhdGAgb3IgYGJpbmNvbmNhdGAuIEluIHRo ZSBkZXZlbG9wZXJzJyBtZWV0aW5nLCBzb21lb25lIHByb3Bvc2VkIGBmb3JjZV9jb25jYXRgLg0K DQpNYXR6Lg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZl YXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJpbmcgbWV0aG9kIHRvIGFwcGVuZCBieXRlcyB3aGlsZSBw cmVzZXJ2aW5nIGVuY29kaW5nDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1 OTQjY2hhbmdlLTEwOTA2MQ0KDQoqIEF1dGhvcjogYnlyb290IChKZWFuIEJvdXNzaWVyKQ0KKiBT dGF0dXM6IE9wZW4NCiogQXNzaWduZWU6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMjIyBDb250ZXh0DQoNCldoZW4gd29y a2luZyB3aXRoIGJpbmFyeSBwcm90b2NvbHMgc3VjaCBhcyBgcHJvdG9idWZgIG9yIGBNZXNzYWdl UGFja2AsIHlvdSBtYXkgb2Z0ZW4gbmVlZCB0byBhc3NlbWJsZSBtdWx0aXBsZQ0Kc3RyaW5ncyBv ZiBkaWZmZXJlbnQgZW5jb2Rpbmc6DQoNCmBgYHJ1YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRs ZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUoYnVmKQ0KICAgIGJ1ZiA8PA0KICAgICAgMjU1 IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRpdGxlIDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6 ZSA8PCBib2R5DQogIGVuZA0KZW5kDQoNClBvc3QubmV3KCJIZWxsbyIsICJXb3JsZCIpLnNlcmlh bGl6ZSgic29tZWRhdGEiLmIpICMgPT4gInNvbWVkYXRhXHhGRlx4MDVIZWxsb1x4RkZceDA1V29y bGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0KDQpUaGUgcHJvYmxlbSBpbiB0aGUgYWJv dmUgY2FzZSwgaXMgdGhhdCBiZWNhdXNlIGBFbmNvZGluZzo6QVNDSUlfOEJJVGAgaXMgZGVjbGFy ZWQgYXMgQVNDSUkgY29tcGF0aWJsZSwNCmlmIG9uZSBvZiB0aGUgYXBwZW5kZWQgc3RyaW5nIGNv bnRhaW5zIGJ5dGVzIG91dHNpZGUgdGhlIEFTQ0lJIHJhbmdlLCBzdHJpbmcgaXMgYXV0b21hdGlj YWxseSBwcm9tb3RlZA0KdG8gYW5vdGhlciBlbmNvZGluZywgd2hpY2ggdGhlbiBsZWFkcyB0byBl bmNvZGluZyBpc3N1ZXM6DQoNCmBgYHJ1YnkNClBvc3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIp LnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gaW5jb21wYXRpYmxlIGNoYXJhY3RlciBlbmNv ZGluZ3M6IEFTQ0lJLThCSVQgYW5kIFVURi04IChFbmNvZGluZzo6Q29tcGF0aWJpbGl0eUVycm9y KQ0KYGBgDQoNCkluIG1hbnkgY2FzZXMsIHlvdSB3YW50IHRvIGFwcGVuZCB0byBhIFN0cmluZyB3 aXRob3V0IGNoYW5naW5nIHRoZSByZWNlaXZlcidzIGVuY29kaW5nLg0KDQpUaGUgaXNzdWUgaXNu J3QgZXhjbHVzaXZlIHRvIGJpbmFyeSBwcm90b2NvbHMgYW5kIGZvcm1hdHMsIGl0IGFsc28gaGFw cGVuIHdpdGggQVNDSUkgcHJvdG9jb2xzIHRoYXQgYWNjZXB0IGFyYml0cmFyeSBieXRlcyBpbmxp bmUsDQpsaWtlIFJlZGlzJ3MgUkVTUCBwcm90b2NvbCBvciBldmVuIEhUVFAvMS4xLg0KDQojIyMg UHJldmlvdXMgZGlzY3Vzc2lvbg0KDQpUaGVyZSB3YXMgYSBzaW1pbGFyIGZlYXR1cmUgcmVxdWVz dCBhIHdoaWxlIGFnbywgYnV0IGl0IHdhcyBhYmFuZG9uZWQ6IGh0dHBzOi8vYnVncy5ydWJ5LWxh bmcub3JnL2lzc3Vlcy8xNDk3NQ0KDQojIyMgRXhpc3Rpbmcgc29sdXRpb25zDQoNCllvdSBjYW4g b2YgY291cnNlIGFsd2F5cyBjYXN0IHRoZSBzdHJpbmdzIHlvdSBhcHBlbmQgdG8gYXZvaWQgdGhp cyBwcm9ibGVtOg0KDQpgYGBydWJ5DQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBk bw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYgPDwNCiAgICAgIDI1NSA8PCB0aXRsZS5i eXRlc2l6ZSA8PCB0aXRsZS5iIDw8DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5 LmINCiAgZW5kDQplbmQNCmBgYA0KDQpCdXQgdGhpcyBjYXVzZSBhIGxvdCBvZiBuZWVkbGVzcyBh bGxvY2F0aW9ucy4NCg0KWW91J2QgdGhpbmsgeW91IGNvdWxkIGFsc28gdXNlIGBieXRlc3BsaWNl YCwgYnV0IGl0IGFjdHVhbGx5IGhhcyB0aGUgc2FtZSBpc3N1ZToNCg0KYGBgcnVieQ0KUG9zdCA9 IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8NCiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAg YnVmIDw8IDI1NSA8PCB0aXRsZS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRl c2l6ZSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlKQ0KICAgIGJ1ZiA8PCAyNTUgPDwgYm9keS5ieXRl c2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgYm9keS5ieXRlc2l6ZSwgdGl0 bGUpDQogIGVuZA0KZW5kDQpQb3N0Lm5ldygiSOKCrGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUo InNvbWVkYXRhIi5iKSAjID0+ICdTdHJpbmcjYnl0ZXNwbGljZSc6IGluY29tcGF0aWJsZSBjaGFy YWN0ZXIgZW5jb2RpbmdzOiBCSU5BUlkgKEFTQ0lJLThCSVQpIGFuZCBVVEYtOCAoRW5jb2Rpbmc6 OkNvbXBhdGliaWxpdHlFcnJvcikNCmBgYA0KDQpBbmQgZXZlbiBpZiBpdCB3b3JrZWQsIGl0IHdv dWxkIGJlIHZlcnkgdW5lcmdvbm9taWMuDQoNCiMjIyBQcm9wb3NhbDogYSBgYnl0ZWNvbmNhdGAg bWV0aG9kDQoNCkEgc29sdXRpb24gdG8gdGhpcyB3b3VsZCBiZSB0byBhZGQgYSBuZXcgYGJ5dGVj b25jYXRgIG1ldGhvZCwgdGhhdCBjb3VsZCBiZSBzaGltZWQgYXM6DQoNCmBgYHJ1YnkNCmNsYXNz IFN0cmluZw0KICBkZWYgYnl0ZWNvbmNhdCgqc3RyaW5ncykNCiAgICBzdHJpbmdzLm1hcCEgZG8g fHN8DQogICAgICBpZiBzLmlzX2E/KFN0cmluZykgJiYgcy5lbmNvZGluZyAhPSBlbmNvZGluZw0K ICAgICAgICBzLmR1cC5mb3JjZV9lbmNvZGluZyhlbmNvZGluZykNCiAgICAgIGVsc2UNCiAgICAg ICAgcw0KICAgICAgZW5kDQogICAgZW5kDQogICAgY29uY2F0KCpzdHJpbmdzKQ0KICBlbmQNCmVu ZA0KDQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXpl KGJ1ZikNCiAgICBidWYuYnl0ZWNvbmNhdCgNCiAgICAgIDI1NSwgdGl0bGUuYnl0ZXNpemUsIHRp dGxlLA0KICAgICAgMjU1LCBib2R5LmJ5dGVzaXplLCBib2R5LA0KICAgICkNCiAgZW5kDQplbmQN Cg0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxkIikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikg IyA9PiAic29tZWRhdGFceEZGXGFIXHhFMlx4ODJceEFDbGxvXHhGRlx4MDZXXHhDM1x4QjRybGQi ICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0KDQpCdXQgb2YgY291cnNlIGEgYnVpbHRpbiBp bXBsZW1lbnRhdGlvbiB3b3VsZG4ndCBuZWVkIHRvIGR1cCB0aGUgYXJndW1lbnRzLg0KDQpMaWtl IG90aGVyIGBieXRlKmAgbWV0aG9kcywgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNh bGxlciB0byBlbnN1cmUgdGhlIHJlc3VsdGluZyBzdHJpbmcgaGFzIGEgdmFsaWQgZW5jb2Rpbmcs IG9yDQp0byBkZWFsIHdpdGggaXQgaWYgbm90Lg0KDQojIyMgTWV0aG9kIG5hbWUgYW5kIHNpZ25h dHVyZQ0KDQojIyMjIE5hbWUNCg0KVGhpcyBwcm9wb3NhbCBzdWdnZXN0cyBgU3RyaW5nI2J5dGVj b25jYXRgLCB0byBtaXJyb3IgYFN0cmluZyNjb25jYXRgLCBidXQgb3RoZXIgbmFtZXMgYXJlIHBv c3NpYmxlOg0KDQogIC0gYGJ5dGVhcHBlbmRgIChsaWtlIGBBcnJheSNhcHBlbmRgKQ0KICAtIGBi eXRlcHVzaGAgIChsaWtlIGBBcnJheSNwdXNoYCkNCg0KIyMjIyBTaWduYXR1cmUNCg0KVGhpcyBw cm9wb3NhbCBtYWtlcyBgYnl0ZWNvbmNhdGAgYWNjZXB0IGVpdGhlciBgU3RyaW5nYCBvciBgSW50 ZWdlcmAgKGluIGNoYXIgcmFuZ2UpIGFyZ3VtZW50cyBsaWtlIGBjb25jYXRgLiBJIGJlbGlldmUg aXQgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5IGFuZCBhbHNvIGJlY2F1c2UgaXQncyBub3Qg dW5jb21tb24gZm9yIHByb3RvY29scyB0byBoYXZlIHNvbWUgYnl0ZSBiYXNlZCBzZWdtZW50cywg YW5kIEludGVnZXJzIGFyZSBtb3JlIGNvbnZlbmllbnQgdGhlcmUuDQoNClRoZSBwcm9wb3NlZCBt ZXRob2QgYWxzbyBhY2NlcHQgdmFyaWFibGUgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeSB3aXRo IGBTdHJpbmcjY29uY2F0YCwgYEFycmF5I3B1c2hgLCBgQXJyYXkjYXBwZW5kYC4NCg0KVGhlIHBy b3Bvc2VkIG1ldGhvZCByZXR1cm5zIHNlbGYsIGxpa2UgYGNvbmNhdGAgYW5kIG90aGVycy4NCg0K IyMjIFlKSVQgY29uc2lkZXJhdGlvbg0KDQpJIGNvbnN1bHRlZCBAbWF4aW1lY2IgYWJvdXQgdGhp cyBwcm9wb3NhbCwgYW5kIGFjY29yZGluZyB0byBoZXIsIGFjY2VwdGluZyB2YXJpYWJsZSBhcmd1 bWVudHMgbWFrZXMgaXQgaGFyZGVyIGZvciBZSklUIHRvIG9wdGltaXplLg0KSSBzdXNwZWN0IGNv bnNpc3RlbmN5IHdpdGggb3RoZXIgQVBJcyB0cnVtcHMgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVy YXRpb24sIGJ1dCBJIHRoaW5rIGl0J3Mgd29ydGggbWVudGlvbmluZy4NCg0KDQoNCg0KDQotLSAN Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3Jl QG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1j b3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwu cnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=