From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.2 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 8BDC61F4B4 for ; Thu, 8 Apr 2021 23:36:45 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 9038F120B35; Fri, 9 Apr 2021 08:35:40 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id B530D1209DD for ; Fri, 9 Apr 2021 08:35:36 +0900 (JST) Received: by filterdrecv-canary-68ccf69d8b-qmv7j with SMTP id filterdrecv-canary-68ccf69d8b-qmv7j-14-606F9382-1F 2021-04-08 23:36:34.398208669 +0000 UTC m=+1233167.961887119 Received: from herokuapp.com (unknown) by ismtpd0136p1iad2.sendgrid.net (SG) with ESMTP id i1twzMbkREGryRTCMS2KRw for ; Thu, 08 Apr 2021 23:36:34.369 +0000 (UTC) Date: Thu, 08 Apr 2021 23:36:34 +0000 (UTC) From: duerst@it.aoyama.ac.jp Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 79370 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 17786 X-Redmine-Issue-Author: jzakiya X-Redmine-Sender: duerst X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-SG-EID: =?us-ascii?Q?uQY=2F2xNrNfHHTWbKn6MBvvzfU5Pqk9I4lnOVb0CFDuuu5JbWgzvVY8auHjw8a+?= =?us-ascii?Q?xzML4wShvsAsz4Q+0ZQC6PKola+9IwrQp2nXpVM?= =?us-ascii?Q?HP=2FnaOH4IN+bc8M=2FM79cAA8hAWyTO8F7BZ5eDB3?= =?us-ascii?Q?p3PN9QUfIx3BRbbJbEdD6d4c1Am1HgqOY24CrYx?= =?us-ascii?Q?clsaMYm4ryRX8nvIjtWfeABnkqvptciNMyePZZl?= =?us-ascii?Q?KfKbsv4G1kYukhhs4=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 103324 Subject: [ruby-core:103324] [Ruby master Feature#17786] Proposal: new "ends" keyword X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE3Nzg2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgZHVlcnN0IChNYXJ0aW4gRMO8cnN0KS4N Cg0KDQpTaW1pbGFyIHByb3Bvc2FscyBoYXZlIGJlZW4gbWFkZSBpbiB0aGUgcGFzdCwgc2VlIGUu Zy4gIzUwNTQsICMxMjI0MSAobWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBkYXRhIG9uIHRoZSBzZWNv bmQgb25lKS4NCg0Kanpha2l5YSAoSmFiYXJpIFpha2l5YSkgd3JvdGUgaW4gI25vdGUtNDoNCg0K PiBgYGANCj4gQS5jbGFzc19ldmFsIGRvDQo+ICAgZGVmaW5lX21ldGhvZCA6YiBkbw0KPiAgICAg YyBkbw0KPiAgICAgICBkIGRvDQo+ICAgICAgICAgZQ0KPiAgIGVuZHMNCj4gDQo+ICAgZGVmIGMN Cj4gICBlbmQNCj4gZW5kDQo+IGBgYA0KDQo+PiBTbyBpbiB5b3VyIGNvZGUgZXhhbXBsZSwgc3Rh cnRpbmcgYXQgdGhlIGJlZ2lubmluZyAob3V0ZXIgbW9zdCBsYXllcikgdGhlIHBhcnNlciBzdGFy dHMgY291bnRpbmcgaG93IG1hbnkgYGB0aGluZ3NgYCAobW9kdWxlfGNsYXNzfG1ldGhvZCBuYW1l cywgbG9vcHMsIGNvbmRpdGlvbmFscywgZXRjKSBhcmUgY3VycmVudGx5IG9wZW4gKGhhdmVu4oCZ dCBiZWVuIHJlc29sdmVkIGFzIHRlcm1pbmF0ZWQpLiBBdCBzb21lIHBvaW50LCBpdCBjb3VudHMg dGhlIGxhc3QgdGhpbmcgdGhhdCBuZWVkcyB0byBiZSByZXNvbHZlZC4gV2hlbiBpdCBlbmNvdW50 ZXJzIHRoZSBmaXJzdCBgYGVuZGBgIGl0IHRyaWVzIHRvIHJlc29sdmUgaXQgd2l0aCB0aGUgbGFz dCAoaGlnaGVzdCBjb3VudCkgYGB0aGluZ2BgIHRoYXTigJlzIHN0aWxsIG9wZW4uIEl0IHRoZW4g Y29udGludWVzIGJhY2tpbmcgdXAgdGhlIHRyZWUgY291bnQsIHVudGlsIGFsbCB0aGUgdW5yZXNv bHZlZCBgYHRoaW5nc2BgIGNvdW50IGlzIHplcm8uDQoNCj4gU28gaW4gdGhlIGJpZyBwaWN0dXJl LCB5b3UgZG9uJ3QgaGF2ZSB0byBjYXJlIG11Y2ggYWJvdXQgd2hhdCB0aGUgYGB0aGluZ2BgIGlz LCB5b3UganVzdCBoYXZlIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGhlcmUgYXJlLCBiZWNh dXNlIGFsbCB5b3UncmUgZ29pbmcgdG8gZmlyc3QgZG8gaXMgcHV0IHRoZSBzb3VyY2UgY29kZSBp biBlcXVpdmFsZW50IHN0YW5kYXJkIGZvcm1hdCB3aXRoIGV4cGFuZGVkIG91dCBgYGVuZGBgIHN0 YXRlbWVudHMsIHdoaWNoIGNhbiB0aGVuIGJlIHByb2Nlc3NlZCBhcyB1c3VhbC4NCg0KU28gaXMg YGRvYCBhIGBgdGhpbmdgYCwgb3Igbm90PyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgeW91IHRyZWF0 IHRocmVlIG9mIHRoZSBgZG9gcyBhcyBgYHRoaW5nc2BgLCBidXQgbm90IHRoZSBmb3J0aCBvbmUu IFdoeT8gWW91IHNheSB0byBjb3VudCBgYHRoaW5nc2BgIGRvd24gdG8gemVybywgYnV0IHdoeSBk aWQgeW91IG9ubHkgY291bnQgZG93biB0byBvbmU/IElmIGNvdW50aW5nIGRvd24gdG8gemVybywg aXQgbWVhbnMgeW91IGFyZSBiYWNrIGF0IHRoZSB0b3AgbGV2ZWwuIFRoYXQgbWVhbnMgdGhhdCBg ZW5kc2AgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGEgY2xhc3Mgb3IgbW9kdWxlIChvciBpbnNpZGUg YW55dGhpbmcgZWxzZSwgZm9yIHRoYXQgbWF0dGVyLCBleGNlcHQgbWF5YmUgZm9yIHt9IGJsb2Nr cywgaWYgdGhlc2UgYXJlIG5vdCBhIGBgdGhpbmdgYCkuIA0KDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpGZWF0dXJlICMxNzc4NjogUHJvcG9zYWw6IG5ldyAgImVu ZHMiIGtleXdvcmQNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNzc4NiNjaGFu Z2UtOTE0MTENCg0KKiBBdXRob3I6IGp6YWtpeWEgKEphYmFyaSBaYWtpeWEpDQoqIFN0YXR1czog T3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpJJ20gc3VibWl0dGluZyB0aGlzIGluIHRoZSBzYW1lIHNwaXJpdCB0aGF0IGBg ZW5kbGVzcyBtZXRob2RzYGAgd2FzLCB0byBwcm9tb3RlIGFuZCBwcm9kdWNlIG1vcmUgY29uY2lz ZSBhbmQgZWFzaWVyIHRvIHdyaXRlfHJlYWQgY29kZS4NCg0KKipQcm9wb3NhbCoqDQpUaGlzIGlz IGEgcHJvcG9zYWwgdG8gaW50cm9kdWNlIGEgbmV3IGtleXdvcmQgYGBlbmRzYGAgKG9yIGBgZW5k YWxsYGApIGFzIGEgdGVybWluYWwgcG9pbnQgdG8gcmVzb2x2ZSB0aGUgZW5kIG9mIG5lc3RlZCBg YGxvb3BzfGNvbmRpdGlvbmFsc2BgLg0KDQoqKldoeSoqDQpJdCdzIGEgY29tbW9uIGNvZGUgb2Nj dXJyZW5jZSB0byBoYXZlIG11bHRpcGxlIGxldmVscyBvZiBsb29wcyBhbmQvb3IgY29uZGl0aW9u YWxzLCB3aGljaCByZXF1aXJlIHNlcGFyYXRlIGBgZW5kYGAga2V5d29yZHMgdG8gZGVzaWduYXRl IHRoZWlyDQp0ZXJtaW5hdGlvbiBwb2ludHMuIFRoZSBgYGVuZGBgIHN0YXRlbWVudHMgdGhlbXNl bHZlcyBhcmUgbWVyZWx5IGZvciBzeW50YWN0aWMgcHVycG9zZXMuDQoNCkl0IHdvdWxkIGJlIGEg YmVuZWZpdCB0byBwcm9ncmFtbWVycywgYW5kIGNvZGUgcmVhZGVycywgdG8gYmUgYWJsZSB0byBw cm9kdWNlfHJlYWQgbW9yZSBjb25jaXNlIGNvZGUsIGJ5IHJlZHVjaW5nIHRoZSBgYGNvZGUgbm9p c2VgYCBvZiB0aGVzZQ0KbmVzdGVkIG11bHRpcGxlIGBgZW5kYGAga2V5d29yZHMgd2l0aCBhIHNo b3J0ZXJ8Y2xlYW5lciBzeW50YXguDQoNClRodXMsIEkgcHJvcG9zZSBjcmVhdGluZyB0aGUga2V5 d29yZCBgYGVuZHNgYCBhcyBhIHNob3J0ZXJ8Y2xlYW5lciBzeW50YXggdG8gcmVwbGFjZSBoYXZp bmcgdG8gd3JpdGUgbXVsdGlwbGUgYGBlbmRgYCBrZXl3b3Jkcy4NCg0KKipFeGFtcGxlKioNCg0K QmVsb3cgaXMgYW4gZXhhbXBsZSBvZiByZWFsIGNvZGUgd2hpY2ggcGVyZm9ybXMgbmVzdGVkIGxv b3BzLiBXaXRoICJzdGFuZGFyZGBgIGZvcm1hdCBpdCBsb29rcyBsaWtlIHRoaXMuDQoNCmBgYA0K ZGVmIHJlbmRlcihzY2VuZSwgaW1hZ2UsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpDQogIHNj cmVlbkhlaWdodC50aW1lcyBkbyB8eXwNCiAgICBzY3JlZW5XaWR0aC50aW1lcyBkbyB8eHwNCiAg ICAgIGNvbG9yID0gc2VsZi50cmFjZVJheSguLi4uKQ0KICAgICAgciwgZywgYiA9IENvbG9yLnRv RHJhd2luZ0NvbG9yKGNvbG9yKQ0KICAgICAgaW1hZ2Uuc2V0KHgsIHksIFN0dW1weUNvcmU6OlJH QkEuZnJvbV9yZ2IociwgZywgYikpDQogICAgZW5kIA0KICBlbmQgDQplbmQNCmBgYA0KDQpIb3dl dmVyLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBwYXJzZXIsIHRoZXNlIGFyZSBhbGwg bGVnYWx8ZXF1aXZhbGVudC4NCg0KYGBgDQpkZWYgcmVuZGVyKHNjZW5lLCBpbWFnZSwgc2NyZWVu V2lkdGgsIHNjcmVlbkhlaWdodCkNCiAgc2NyZWVuSGVpZ2h0LnRpbWVzIGRvIHx5fA0KICAgIHNj cmVlbldpZHRoLnRpbWVzIGRvIHx4fA0KICAgICAgY29sb3IgPSBzZWxmLnRyYWNlUmF5KC4uLi4p DQogICAgICByLCBnLCBiID0gQ29sb3IudG9EcmF3aW5nQ29sb3IoY29sb3IpDQogICAgICBpbWFn ZS5zZXQoeCwgeSwgU3R1bXB5Q29yZTo6UkdCQS5mcm9tX3JnYihyLCBnLCBiKSkNCiAgICBlbmQg ICAgIGVuZCAgICAgICAgIGVuZCAgICAgZW5kIGVuZCBlbmQNCiAgZW5kICAgICAgICAgZW5kICAg ICAgIGVuZA0KZW5kICAgICAgICAgICAgIGVuZCAgICAgZW5kDQpgYGANCg0KVGhpcyBwcm9wb3Nh bCB3b3VsZCBhbGxvdyB0aGlzIHR5cGUgb2YgY29kZSB0byBiZSB3cml0dG4gYXM6DQoNCmBgYA0K ZGVmIHJlbmRlcihzY2VuZSwgaW1hZ2UsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpDQogIHNj cmVlbkhlaWdodC50aW1lcyBkbyB8eXwNCiAgICBzY3JlZW5XaWR0aC50aW1lcyBkbyB8eHwNCiAg ICAgIGNvbG9yID0gc2VsZi50cmFjZVJheSguLi4uKQ0KICAgICAgciwgZywgYiA9IENvbG9yLnRv RHJhd2luZ0NvbG9yKGNvbG9yKQ0KICAgICAgaW1hZ2Uuc2V0KHgsIHksIFN0dW1weUNvcmU6OlJH QkEuZnJvbV9yZ2IociwgZywgYikpDQplbmRzDQpgYGANCioqUHJvcyoqDQoxKSBjb2RlIGNvbmNp c2VuZXNzDQoyKSBiZXR0ZXIgcmVhZGFiaWxpdHkNCjMpIG5vIHdoaXRlc3BhY2UgZGVwZW5kZW5j aWVzDQo0KSBubyBjb25mbGljdCB3aXRoIGxlZ2FjeSBjb2RlDQo1KSBhdHRyYWN0aWNlIHRvIHBl b3BsZSBjb21pbmcgZnJvbSBQeXRob258TmltLCBldCBhbA0KDQoqKkNvbnMqKg0KTm8gdGVjaG5p Y2FsIGltcGxlbWVudGF0aW9uIHJlc3RyaWN0aW9ucyBJIGNhbiB0aGluayBvZi4NCk1heWJlIGFs dGVybmF0aXZlIG5hbWUgKGVuZGFsbCk/DQoNClRoYW5rcyBmb3IgY29uc2lkZXJhdGlvbi4NCg0K DQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCg==