[ruby-core:118825] [Ruby master Feature#20594] A new String method to append bytes while preserving encoding
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2024-08-10 01:30:10 UTC
List:
ruby-core #118825
SXNzdWUgIzIwNTk0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4NCg0K DQpBbGFuJ3MgcHJvcG9zYWwgbG9va3MgZ29vZCB0byBtZS4gSSBkb24ndCB0aGluayBpdCBpcyBS dWJ5IHRvIGRlc2lnbiBzdWNoIGFuIG9yZGluYXJ5IEFQSSB3aXRoIGV4dHJlbWUgY2FyZSBmb3Ig b3B0aW1pemF0aW9uLg0KDQpJbiBmYWN0LCB0aGUgc2FtZSBkZXNpZ24gYXMgQWxhbidzIHByb3Bv c2FsIHdhcyBkaXNjdXNzZWQgYXQgdGhlIGRldiBtZWV0aW5nIChzb3JyeSBpdCB3YXMgbm90IHdy aXR0ZW4gaW4gdGhlIG1lZXRpbmcgbG9nKS4gVGhlIG9uZSBkaWZmZXJlbmNlIGJldHdlZW4gaXQg YW5kIEFsYW4ncyBpcyB0aGF0IGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGhyb3duIGZvciBJbnRl Z2VycyBvdGhlciB0aGFuIDAuLjI1NSB1bnRpbCB3ZSBoYXZlIGEgY29udmluY2luZyB1c2UgY2Fz ZS4gSSBwZXJzb25hbGx5IHRoaW5rIGl0IGlzIHJlYXNvbmFibHkgY29udmluY2luZyB0aGF0IGl0 IGlzIHRoZSBzYW1lIGFzIGBzZXRieXRlYCwgdGhvdWdoLg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwNTk0OiBBIG5ldyBTdHJpbmcgbWV0 aG9kIHRvIGFwcGVuZCBieXRlcyB3aGlsZSBwcmVzZXJ2aW5nIGVuY29kaW5nDQpodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjA1OTQjY2hhbmdlLTEwOTM5Mg0KDQoqIEF1dGhvcjog Ynlyb290IChKZWFuIEJvdXNzaWVyKQ0KKiBTdGF0dXM6IE9wZW4NCiogQXNzaWduZWU6IGJ5cm9v dCAoSmVhbiBCb3Vzc2llcikNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCiMjIyBDb250ZXh0DQoNCldoZW4gd29ya2luZyB3aXRoIGJpbmFyeSBwcm90b2NvbHMgc3Vj aCBhcyBgcHJvdG9idWZgIG9yIGBNZXNzYWdlUGFja2AsIHlvdSBtYXkgb2Z0ZW4gbmVlZCB0byBh c3NlbWJsZSBtdWx0aXBsZQ0Kc3RyaW5ncyBvZiBkaWZmZXJlbnQgZW5jb2Rpbmc6DQoNCmBgYHJ1 YnkNClBvc3QgPSBTdHJ1Y3QubmV3KDp0aXRsZSwgOmJvZHkpIGRvDQogIGRlZiBzZXJpYWxpemUo YnVmKQ0KICAgIGJ1ZiA8PA0KICAgICAgMjU1IDw8IHRpdGxlLmJ5dGVzaXplIDw8IHRpdGxlIDw8 DQogICAgICAyNTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5DQogIGVuZA0KZW5kDQoNClBvc3Qu bmV3KCJIZWxsbyIsICJXb3JsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4gInNvbWVk YXRhXHhGRlx4MDVIZWxsb1x4RkZceDA1V29ybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBg YA0KDQpUaGUgcHJvYmxlbSBpbiB0aGUgYWJvdmUgY2FzZSwgaXMgdGhhdCBiZWNhdXNlIGBFbmNv ZGluZzo6QVNDSUlfOEJJVGAgaXMgZGVjbGFyZWQgYXMgQVNDSUkgY29tcGF0aWJsZSwNCmlmIG9u ZSBvZiB0aGUgYXBwZW5kZWQgc3RyaW5nIGNvbnRhaW5zIGJ5dGVzIG91dHNpZGUgdGhlIEFTQ0lJ IHJhbmdlLCBzdHJpbmcgaXMgYXV0b21hdGljYWxseSBwcm9tb3RlZA0KdG8gYW5vdGhlciBlbmNv ZGluZywgd2hpY2ggdGhlbiBsZWFkcyB0byBlbmNvZGluZyBpc3N1ZXM6DQoNCmBgYHJ1YnkNClBv c3QubmV3KCJI4oKsbGxvIiwgIlfDtHJsZCIpLnNlcmlhbGl6ZSgic29tZWRhdGEiLmIpICMgPT4g aW5jb21wYXRpYmxlIGNoYXJhY3RlciBlbmNvZGluZ3M6IEFTQ0lJLThCSVQgYW5kIFVURi04IChF bmNvZGluZzo6Q29tcGF0aWJpbGl0eUVycm9yKQ0KYGBgDQoNCkluIG1hbnkgY2FzZXMsIHlvdSB3 YW50IHRvIGFwcGVuZCB0byBhIFN0cmluZyB3aXRob3V0IGNoYW5naW5nIHRoZSByZWNlaXZlcidz IGVuY29kaW5nLg0KDQpUaGUgaXNzdWUgaXNuJ3QgZXhjbHVzaXZlIHRvIGJpbmFyeSBwcm90b2Nv bHMgYW5kIGZvcm1hdHMsIGl0IGFsc28gaGFwcGVuIHdpdGggQVNDSUkgcHJvdG9jb2xzIHRoYXQg YWNjZXB0IGFyYml0cmFyeSBieXRlcyBpbmxpbmUsDQpsaWtlIFJlZGlzJ3MgUkVTUCBwcm90b2Nv bCBvciBldmVuIEhUVFAvMS4xLg0KDQojIyMgUHJldmlvdXMgZGlzY3Vzc2lvbg0KDQpUaGVyZSB3 YXMgYSBzaW1pbGFyIGZlYXR1cmUgcmVxdWVzdCBhIHdoaWxlIGFnbywgYnV0IGl0IHdhcyBhYmFu ZG9uZWQ6IGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNDk3NQ0KDQojIyMgRXhp c3Rpbmcgc29sdXRpb25zDQoNCllvdSBjYW4gb2YgY291cnNlIGFsd2F5cyBjYXN0IHRoZSBzdHJp bmdzIHlvdSBhcHBlbmQgdG8gYXZvaWQgdGhpcyBwcm9ibGVtOg0KDQpgYGBydWJ5DQpQb3N0ID0g U3RydWN0Lm5ldyg6dGl0bGUsIDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBi dWYgPDwNCiAgICAgIDI1NSA8PCB0aXRsZS5ieXRlc2l6ZSA8PCB0aXRsZS5iIDw8DQogICAgICAy NTUgPDwgYm9keS5ieXRlc2l6ZSA8PCBib2R5LmINCiAgZW5kDQplbmQNCmBgYA0KDQpCdXQgdGhp cyBjYXVzZSBhIGxvdCBvZiBuZWVkbGVzcyBhbGxvY2F0aW9ucy4NCg0KWW91J2QgdGhpbmsgeW91 IGNvdWxkIGFsc28gdXNlIGBieXRlc3BsaWNlYCwgYnV0IGl0IGFjdHVhbGx5IGhhcyB0aGUgc2Ft ZSBpc3N1ZToNCg0KYGBgcnVieQ0KUG9zdCA9IFN0cnVjdC5uZXcoOnRpdGxlLCA6Ym9keSkgZG8N CiAgZGVmIHNlcmlhbGl6ZShidWYpDQogICAgYnVmIDw8IDI1NSA8PCB0aXRsZS5ieXRlc2l6ZQ0K ICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5ieXRlc2l6ZSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlKQ0K ICAgIGJ1ZiA8PCAyNTUgPDwgYm9keS5ieXRlc2l6ZQ0KICAgIGJ1Zi5ieXRlc3BsaWNlKGJ1Zi5i eXRlc2l6ZSwgYm9keS5ieXRlc2l6ZSwgdGl0bGUpDQogIGVuZA0KZW5kDQpQb3N0Lm5ldygiSOKC rGxsbyIsICJXw7RybGQiKS5zZXJpYWxpemUoInNvbWVkYXRhIi5iKSAjID0+ICdTdHJpbmcjYnl0 ZXNwbGljZSc6IGluY29tcGF0aWJsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzOiBCSU5BUlkgKEFTQ0lJ LThCSVQpIGFuZCBVVEYtOCAoRW5jb2Rpbmc6OkNvbXBhdGliaWxpdHlFcnJvcikNCmBgYA0KDQpB bmQgZXZlbiBpZiBpdCB3b3JrZWQsIGl0IHdvdWxkIGJlIHZlcnkgdW5lcmdvbm9taWMuDQoNCiMj IyBQcm9wb3NhbDogYSBgYnl0ZWNvbmNhdGAgbWV0aG9kDQoNCkEgc29sdXRpb24gdG8gdGhpcyB3 b3VsZCBiZSB0byBhZGQgYSBuZXcgYGJ5dGVjb25jYXRgIG1ldGhvZCwgdGhhdCBjb3VsZCBiZSBz aGltZWQgYXM6DQoNCmBgYHJ1YnkNCmNsYXNzIFN0cmluZw0KICBkZWYgYnl0ZWNvbmNhdCgqc3Ry aW5ncykNCiAgICBzdHJpbmdzLm1hcCEgZG8gfHN8DQogICAgICBpZiBzLmlzX2E/KFN0cmluZykg JiYgcy5lbmNvZGluZyAhPSBlbmNvZGluZw0KICAgICAgICBzLmR1cC5mb3JjZV9lbmNvZGluZyhl bmNvZGluZykNCiAgICAgIGVsc2UNCiAgICAgICAgcw0KICAgICAgZW5kDQogICAgZW5kDQogICAg Y29uY2F0KCpzdHJpbmdzKQ0KICBlbmQNCmVuZA0KDQpQb3N0ID0gU3RydWN0Lm5ldyg6dGl0bGUs IDpib2R5KSBkbw0KICBkZWYgc2VyaWFsaXplKGJ1ZikNCiAgICBidWYuYnl0ZWNvbmNhdCgNCiAg ICAgIDI1NSwgdGl0bGUuYnl0ZXNpemUsIHRpdGxlLA0KICAgICAgMjU1LCBib2R5LmJ5dGVzaXpl LCBib2R5LA0KICAgICkNCiAgZW5kDQplbmQNCg0KUG9zdC5uZXcoIkjigqxsbG8iLCAiV8O0cmxk Iikuc2VyaWFsaXplKCJzb21lZGF0YSIuYikgIyA9PiAic29tZWRhdGFceEZGXGFIXHhFMlx4ODJc eEFDbGxvXHhGRlx4MDZXXHhDM1x4QjRybGQiICM8RW5jb2Rpbmc6QVNDSUktOEJJVD4NCmBgYA0K DQpCdXQgb2YgY291cnNlIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiB3b3VsZG4ndCBuZWVkIHRv IGR1cCB0aGUgYXJndW1lbnRzLg0KDQpMaWtlIG90aGVyIGBieXRlKmAgbWV0aG9kcywgaXQncyB0 aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBlbnN1cmUgdGhlIHJlc3VsdGluZyBz dHJpbmcgaGFzIGEgdmFsaWQgZW5jb2RpbmcsIG9yDQp0byBkZWFsIHdpdGggaXQgaWYgbm90Lg0K DQojIyMgTWV0aG9kIG5hbWUgYW5kIHNpZ25hdHVyZQ0KDQojIyMjIE5hbWUNCg0KVGhpcyBwcm9w b3NhbCBzdWdnZXN0cyBgU3RyaW5nI2J5dGVjb25jYXRgLCB0byBtaXJyb3IgYFN0cmluZyNjb25j YXRgLCBidXQgb3RoZXIgbmFtZXMgYXJlIHBvc3NpYmxlOg0KDQogIC0gYGJ5dGVhcHBlbmRgIChs aWtlIGBBcnJheSNhcHBlbmRgKQ0KICAtIGBieXRlcHVzaGAgIChsaWtlIGBBcnJheSNwdXNoYCkN Cg0KIyMjIyBTaWduYXR1cmUNCg0KVGhpcyBwcm9wb3NhbCBtYWtlcyBgYnl0ZWNvbmNhdGAgYWNj ZXB0IGVpdGhlciBgU3RyaW5nYCBvciBgSW50ZWdlcmAgKGluIGNoYXIgcmFuZ2UpIGFyZ3VtZW50 cyBsaWtlIGBjb25jYXRgLiBJIGJlbGlldmUgaXQgbWFrZXMgc2Vuc2UgZm9yIGNvbnNpc3RlbmN5 IGFuZCBhbHNvIGJlY2F1c2UgaXQncyBub3QgdW5jb21tb24gZm9yIHByb3RvY29scyB0byBoYXZl IHNvbWUgYnl0ZSBiYXNlZCBzZWdtZW50cywgYW5kIEludGVnZXJzIGFyZSBtb3JlIGNvbnZlbmll bnQgdGhlcmUuDQoNClRoZSBwcm9wb3NlZCBtZXRob2QgYWxzbyBhY2NlcHQgdmFyaWFibGUgYXJn dW1lbnRzIGZvciBjb25zaXN0ZW5jeSB3aXRoIGBTdHJpbmcjY29uY2F0YCwgYEFycmF5I3B1c2hg LCBgQXJyYXkjYXBwZW5kYC4NCg0KVGhlIHByb3Bvc2VkIG1ldGhvZCByZXR1cm5zIHNlbGYsIGxp a2UgYGNvbmNhdGAgYW5kIG90aGVycy4NCg0KIyMjIFlKSVQgY29uc2lkZXJhdGlvbg0KDQpJIGNv bnN1bHRlZCBAbWF4aW1lY2IgYWJvdXQgdGhpcyBwcm9wb3NhbCwgYW5kIGFjY29yZGluZyB0byBo ZXIsIGFjY2VwdGluZyB2YXJpYWJsZSBhcmd1bWVudHMgbWFrZXMgaXQgaGFyZGVyIGZvciBZSklU IHRvIG9wdGltaXplLg0KSSBzdXNwZWN0IGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgQVBJcyB0cnVt cHMgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24sIGJ1dCBJIHRoaW5rIGl0J3Mgd29ydGgg bWVudGlvbmluZy4NCg0KDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29y ZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2Ny aWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1 YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9y dWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=