[ruby-core:81986] [Ruby trunk Feature#13712] String#start_with? with regexp

From: shevegen@...
Date: 2017-07-10 02:24:24 UTC
List: ruby-core #81986
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgc2hldmVnZW4gKFJvYmVydCBBLiBIZWls
ZXIpLgoKClNoeW91aGVpIFVyYWJlKSB3cm90ZToKCj4gKzEgZm9yIHN0YXJ0X3dpdGg/IGJ1dCBJ
IGhhdmUgbm8gcHJhY3RpY2FsIHVzYWdlIG9mIGVuZF93aXRoPyBzbyBhIGJpdCBuZWdhdGl2ZSBh
Ym91dAo+IHRoYXQgcGFydC4gRG8gcGVvcGxlIHJlYWxseSBuZWVkIHJlZ2V4cCB2ZXJzaW9uIG9m
IC5lbmRfd2l0aD8KCkkgZG8gbm90IGtub3cgaWYgdGhlIHVzZSBjYXNlIGZyZXF1ZW5jeSBpcyB0
aGUgc2FtZS4gUGVyaGFwcyB5b3UgYXJlIHJpZ2h0IHRoYXQgYW5jaG9yaW5nCm9yIC5zdGFydF93
aXRoPyBpcyBtb3JlIGZyZXF1ZW50IHRoYW4gLmVuZF93aXRoPywgdmlhIHJlZ2V4ZXMuCgpCdXQg
SSB0aGluayB0aGF0LCBldmVuIHdoZW4gdGhlcmUgaXMgYSBtdWNoIHNtYWxsZXIgdXNlIGNhc2Ug
Zm9yIC5lbmRfd2l0aD8gKGxldCdzIGp1c3QKYXNzdW1lIGl0IGZvciB0aGUgbW9tZW50KSwgSSB0
aGluayB0aGF0IGJvdGggLnN0YXJ0X3dpdGg/IGFuZCAuZW5kX3dpdGg/IHNob3VsZCBiZWhhdmUK
dGhlIHNhbWUuIE90aGVyd2lzZSBwZW9wbGUgbWF5IHRoZW4gYXNrICJ3aHkgZG9lcyAuc3RhcnRf
d2l0aD8gYWxsb3cgcmVnZXggaW5wdXQgYnV0Ci5lbmRfd2l0aD8gZG9lcyBub3Q/Ii4gOikKCkkg
dGhpbmsgaXQgbWF5IGJlIHVzZWZ1bCB0aG91Z2g/CgogICAgeCA9ICdhYmMgZGVmJwogICAgcHV0
cyAneWVwLCBlbmRzIHdpdGggZWl0aGVyIGUgb3IgZicgaWYgeC5lbmRfd2l0aD8gL2V8Zi8KCkF0
IHRoZSBsZWFzdCB0byBtZSBpdCBzZWVtcyB0byBiZSBtb3N0bHkgc3ltbWV0cmljYWwgdXNlIGNh
c2VzLCBldmVuIGlmIG9uZSBtYXkgCmJlIG1vcmUgcHJldmFsZW50IHRoYW4gdGhlIG90aGVycy4g
SSBndWVzcyB0aGUgcG9pbnQgbWF5IGJlIHRoYXQgaXQganVzdCBnaXZlcyBwZW9wbGUKbW9yZSBm
bGV4aWJpbGl0eSAtIGluIHRoZXNlIGNhc2VzLCBpZiB0aGV5IHdvdWxkIHJhdGhlciB3YW50IHRv
IHVzZSBhIHJlZ2V4cCB0aGFuCmEgc3RyaW5nLCB0aGV5IGNhbiBkbyBzby4KCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTM3MTI6IFN0cmluZyNzdGFy
dF93aXRoPyB3aXRoIHJlZ2V4cApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTM3
MTIjY2hhbmdlLTY1NzE2CgoqIEF1dGhvcjogbmFydXNlIChZdWkgTkFSVVNFKQoqIFN0YXR1czog
T3BlbgoqIFByaW9yaXR5OiBOb3JtYWwKKiBBc3NpZ25lZTogCiogVGFyZ2V0IHZlcnNpb246IAot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN0cmluZyNzdGFydF93aXRo
PyBzaG91bGQgcmVjZWl2ZSByZWdleHAuCgpXaGVuIEkgd3JpdGUgYSBwYXJzZXIsIEkgd2FudCB0
byBjaGVjayBhIHN0cmluZyBpcyBzdGFydCB3aXRoIGEgcGF0dGVybiBvciBub3QuCkl0J3MganVz
dCB0aGUgc2FtZSB0aGluZyB3aXRoIFtTdHJpbmdTY2FubmVyI21hdGNoXShodHRwczovL3J1Ynkt
ZG9jLm9yZy9zdGRsaWItMi40LjAvbGliZG9jL3N0cnNjYW4vcmRvYy9TdHJpbmdTY2FubmVyLmh0
bWwjbWV0aG9kLWktbWF0Y2gtM0YpCgpJZiBJIHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgd2l0
aCBub3JtYWwgc3RyaW5nIG1ldGhvZCwgaXQgbmVlZHMgdG8gd3JpdGUgbGlrZSBgL1xBI3tyZX0v
Lm1hdGNoKOKApilgLgpCdXQgaWYgcmUgaXMgYXJndW1lbnQsIGl0IG5lZWRzIHRvIGNyZWF0ZSBh
IG5ldyB0ZW1wb3JhcnkgcmVnZXhwIGV2ZXJ5IHRpbWUuCgpUaG91Z2ggd2UgaGF2ZSBhIHdvcmth
cm91bmQgYXMgZm9sbG93cyBidXQgaXQncyBiaXQgdHJpY2t5LgoKYGBgcnVieQoiZm9vICIucmlu
ZGV4KC9mbysuLywgMCkKYGBgCgpBIHBhdGNoIGlzIGZvbGxvd2luZzoKCmBgYGRpZmYKZGlmZiAt
LWdpdCBhL3JlLmMgYi9yZS5jCmluZGV4IGQwYWEyYTc5MmUuLmY2NzJiYTc1ZWMgMTAwNjQ0Ci0t
LSBhL3JlLmMKKysrIGIvcmUuYwpAQCAtMTU4OCw2ICsxNTg4LDg0IEBAIHJiX3JlZ19zZWFyY2go
VkFMVUUgcmUsIFZBTFVFIHN0ciwgbG9uZyBwb3MsIGludCByZXZlcnNlKQogICAgIHJldHVybiBy
Yl9yZWdfc2VhcmNoMChyZSwgc3RyLCBwb3MsIHJldmVyc2UsIDEpOwogfQogCitib29sCityYl9y
ZWdfc3RhcnRfd2l0aF9wKFZBTFVFIHJlLCBWQUxVRSBzdHIpCit7CisgICAgbG9uZyBwb3MgPSAw
OworICAgIGxvbmcgcmVzdWx0OworICAgIFZBTFVFIG1hdGNoOworICAgIHN0cnVjdCByZV9yZWdp
c3RlcnMgcmVnaSwgKnJlZ3MgPSAmcmVnaTsKKyAgICByZWdleF90ICpyZWc7CisgICAgaW50IHRt
cHJlZzsKKyAgICBvbmlnX2Vycm1zZ19idWZmZXIgZXJyID0gIiI7CisKKyAgICByZWcgPSByYl9y
ZWdfcHJlcGFyZV9yZTAocmUsIHN0ciwgZXJyKTsKKyAgICB0bXByZWcgPSByZWcgIT0gUlJFR0VY
UF9QVFIocmUpOworICAgIGlmICghdG1wcmVnKSBSUkVHRVhQKHJlKS0+dXNlY250Kys7CisKKyAg
ICBtYXRjaCA9IHJiX2JhY2tyZWZfZ2V0KCk7CisgICAgaWYgKCFOSUxfUChtYXRjaCkpIHsKKwlp
ZiAoRkxfVEVTVChtYXRjaCwgTUFUQ0hfQlVTWSkpIHsKKwkgICAgbWF0Y2ggPSBRbmlsOworCX0K
KwllbHNlIHsKKwkgICAgcmVncyA9IFJNQVRDSF9SRUdTKG1hdGNoKTsKKwl9CisgICAgfQorICAg
IGlmIChOSUxfUChtYXRjaCkpIHsKKwlNRU1aRVJPKHJlZ3MsIHN0cnVjdCByZV9yZWdpc3RlcnMs
IDEpOworICAgIH0KKyAgICByZXN1bHQgPSBvbmlnX21hdGNoKHJlZywKKwkJCSAoVUNoYXIqKShS
U1RSSU5HX1BUUihzdHIpKSwKKwkJCSAoKFVDaGFyKikoUlNUUklOR19QVFIoc3RyKSkgKyBSU1RS
SU5HX0xFTihzdHIpKSwKKwkJCSAoVUNoYXIqKShSU1RSSU5HX1BUUihzdHIpKSwKKwkJCSByZWdz
LCBPTklHX09QVElPTl9OT05FKTsKKyAgICBpZiAoIXRtcHJlZykgUlJFR0VYUChyZSktPnVzZWNu
dC0tOworICAgIGlmICh0bXByZWcpIHsKKwlpZiAoUlJFR0VYUChyZSktPnVzZWNudCkgeworCSAg
ICBvbmlnX2ZyZWUocmVnKTsKKwl9CisJZWxzZSB7CisJICAgIG9uaWdfZnJlZShSUkVHRVhQX1BU
UihyZSkpOworCSAgICBSUkVHRVhQX1BUUihyZSkgPSByZWc7CisJfQorICAgIH0KKyAgICBpZiAo
cmVzdWx0IDwgMCkgeworCWlmIChyZWdzID09ICZyZWdpKQorCSAgICBvbmlnX3JlZ2lvbl9mcmVl
KHJlZ3MsIDApOworCWlmIChyZXN1bHQgPT0gT05JR19NSVNNQVRDSCkgeworCSAgICByYl9iYWNr
cmVmX3NldChRbmlsKTsKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKwllbHNlIHsKKwkgICAgb25p
Z19lcnJvcl9jb2RlX3RvX3N0cigoVUNoYXIqKWVyciwgKGludClyZXN1bHQpOworCSAgICByYl9y
ZWdfcmFpc2UoUlJFR0VYUF9TUkNfUFRSKHJlKSwgUlJFR0VYUF9TUkNfTEVOKHJlKSwgZXJyLCBy
ZSk7CisJfQorICAgIH0KKworICAgIGlmIChOSUxfUChtYXRjaCkpIHsKKwlpbnQgZXJyOworCW1h
dGNoID0gbWF0Y2hfYWxsb2MocmJfY01hdGNoKTsKKwllcnIgPSByYl9yZWdfcmVnaW9uX2NvcHko
Uk1BVENIX1JFR1MobWF0Y2gpLCByZWdzKTsKKwlvbmlnX3JlZ2lvbl9mcmVlKHJlZ3MsIDApOwor
CWlmIChlcnIpIHJiX21lbWVycm9yKCk7CisgICAgfQorICAgIGVsc2UgeworCUZMX1VOU0VUKG1h
dGNoLCBGTF9UQUlOVCk7CisgICAgfQorCisgICAgUk1BVENIKG1hdGNoKS0+c3RyID0gcmJfc3Ry
X25ldzQoc3RyKTsKKyAgICBPQkpfSU5GRUNUKG1hdGNoLCBzdHIpOworCisgICAgUk1BVENIKG1h
dGNoKS0+cmVnZXhwID0gcmU7CisgICAgUk1BVENIKG1hdGNoKS0+cm1hdGNoLT5jaGFyX29mZnNl
dF91cGRhdGVkID0gMDsKKyAgICByYl9iYWNrcmVmX3NldChtYXRjaCk7CisKKyAgICBPQkpfSU5G
RUNUKG1hdGNoLCByZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogVkFMVUUKIHJiX3JlZ19u
dGhfZGVmaW5lZChpbnQgbnRoLCBWQUxVRSBtYXRjaCkKIHsKZGlmZiAtLWdpdCBhL3N0cmluZy5j
IGIvc3RyaW5nLmMKaW5kZXggMDcyZjEzMjllZS4uNjU0MmE0YWNiMSAxMDA2NDQKLS0tIGEvc3Ry
aW5nLmMKKysrIGIvc3RyaW5nLmMKQEAgLTkxMjYsNiArOTEyNiw3IEBAIHJiX3N0cl9ycGFydGl0
aW9uKFZBTFVFIHN0ciwgVkFMVUUgc2VwKQogCQkJCQlSU1RSSU5HX0xFTihzdHIpLXBvcy1SU1RS
SU5HX0xFTihzZXApKSk7CiB9CiAKK2V4dGVybiBib29sIHJiX3JlZ19zdGFydF93aXRoX3AoVkFM
VUUgcmUsIFZBTFVFIHN0cik7CiAvKgogICogIGNhbGwtc2VxOgogICogICAgIHN0ci5zdGFydF93
aXRoPyhbcHJlZml4ZXNdKykgICAtPiB0cnVlIG9yIGZhbHNlCkBAIC05MTQ2LDExICs5MTQ3LDIw
IEBAIHJiX3N0cl9zdGFydF93aXRoKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgc3RyKQog
CiAgICAgZm9yIChpPTA7IGk8YXJnYzsgaSsrKSB7CiAJVkFMVUUgdG1wID0gYXJndltpXTsKLQlT
dHJpbmdWYWx1ZSh0bXApOwotCXJiX2VuY19jaGVjayhzdHIsIHRtcCk7Ci0JaWYgKFJTVFJJTkdf
TEVOKHN0cikgPCBSU1RSSU5HX0xFTih0bXApKSBjb250aW51ZTsKLQlpZiAobWVtY21wKFJTVFJJ
TkdfUFRSKHN0ciksIFJTVFJJTkdfUFRSKHRtcCksIFJTVFJJTkdfTEVOKHRtcCkpID09IDApCi0J
ICAgIHJldHVybiBRdHJ1ZTsKKwlzd2l0Y2ggKEJVSUxUSU5fVFlQRSh0bXApKSB7CisJICBjYXNl
IFRfUkVHRVhQOgorCSAgICB7CisJCWJvb2wgciA9IHJiX3JlZ19zdGFydF93aXRoX3AodG1wLCBz
dHIpOworCQlpZiAocikgcmV0dXJuIFF0cnVlOworCSAgICB9CisJICAgIGJyZWFrOworCSAgZGVm
YXVsdDoKKwkgICAgU3RyaW5nVmFsdWUodG1wKTsKKwkgICAgcmJfZW5jX2NoZWNrKHN0ciwgdG1w
KTsKKwkgICAgaWYgKFJTVFJJTkdfTEVOKHN0cikgPCBSU1RSSU5HX0xFTih0bXApKSBjb250aW51
ZTsKKwkgICAgaWYgKG1lbWNtcChSU1RSSU5HX1BUUihzdHIpLCBSU1RSSU5HX1BUUih0bXApLCBS
U1RSSU5HX0xFTih0bXApKSA9PSAwKQorCQlyZXR1cm4gUXRydWU7CisJfQogICAgIH0KICAgICBy
ZXR1cm4gUWZhbHNlOwogfQpgYGAKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoK
VW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJq
ZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWls
bWFuL29wdGlvbnMvcnVieS1jb3JlPgo=

In This Thread

Prev Next