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

From: shevegen@...
Date: 2017-07-04 14:43:40 UTC
List: ruby-core #81899
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgc2hldmVnZW4gKFJvYmVydCBBLiBIZWls
ZXIpLgoKCkkgYWdyZWUgYXMgd2VsbCwgd291bGQgYmUgbmljZS4gTW9yZSB0aGFuIG9uZSB3YXkg
dG8gZG8gdGhpbmdzLiBTaG91bGQgYWxzbyBiZSB0aGUgc2FtZSBmb3IgLnN0YXJ0X3dpdGg/IGFu
ZCAuZW5kX3dpdGg/CgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
RmVhdHVyZSAjMTM3MTI6IFN0cmluZyNzdGFydF93aXRoPyB3aXRoIHJlZ2V4cApodHRwczovL2J1
Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTM3MTIjY2hhbmdlLTY1NjI4CgoqIEF1dGhvcjogbmFy
dXNlIChZdWkgTkFSVVNFKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBOb3JtYWwKKiBBc3Np
Z25lZTogCiogVGFyZ2V0IHZlcnNpb246IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tClN0cmluZyNzdGFydF93aXRoPyBzaG91bGQgcmVjZWl2ZSByZWdleHAuCgpXaGVu
IEkgd3JpdGUgYSBwYXJzZXIsIEkgd2FudCB0byBjaGVjayBhIHN0cmluZyBpcyBzdGFydCB3aXRo
IGEgcGF0dGVybiBvciBub3QuCkl0J3MganVzdCB0aGUgc2FtZSB0aGluZyB3aXRoIFtTdHJpbmdT
Y2FubmVyI21hdGNoXShodHRwczovL3J1YnktZG9jLm9yZy9zdGRsaWItMi40LjAvbGliZG9jL3N0
cnNjYW4vcmRvYy9TdHJpbmdTY2FubmVyLmh0bWwjbWV0aG9kLWktbWF0Y2gtM0YpCgpJZiBJIHdh
bnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgd2l0aCBub3JtYWwgc3RyaW5nIG1ldGhvZCwgaXQgbmVl
ZHMgdG8gd3JpdGUgbGlrZSBgL1xBI3tyZX0vLm1hdGNoKOKApilgLgpCdXQgaWYgcmUgaXMgYXJn
dW1lbnQsIGl0IG5lZWRzIHRvIGNyZWF0ZSBhIG5ldyB0ZW1wb3JhcnkgcmVnZXhwIGV2ZXJ5IHRp
bWUuCgpUaG91Z2ggd2UgaGF2ZSBhIHdvcmthcm91bmQgYXMgZm9sbG93cyBidXQgaXQncyBiaXQg
dHJpY2t5LgoKYGBgcnVieQoiZm9vICIucmluZGV4KC9mbysuLywgMCkKYGBgCgpBIHBhdGNoIGlz
IGZvbGxvd2luZzoKCmBgYGRpZmYKZGlmZiAtLWdpdCBhL3JlLmMgYi9yZS5jCmluZGV4IGQwYWEy
YTc5MmUuLmY2NzJiYTc1ZWMgMTAwNjQ0Ci0tLSBhL3JlLmMKKysrIGIvcmUuYwpAQCAtMTU4OCw2
ICsxNTg4LDg0IEBAIHJiX3JlZ19zZWFyY2goVkFMVUUgcmUsIFZBTFVFIHN0ciwgbG9uZyBwb3Ms
IGludCByZXZlcnNlKQogICAgIHJldHVybiByYl9yZWdfc2VhcmNoMChyZSwgc3RyLCBwb3MsIHJl
dmVyc2UsIDEpOwogfQogCitib29sCityYl9yZWdfc3RhcnRfd2l0aF9wKFZBTFVFIHJlLCBWQUxV
RSBzdHIpCit7CisgICAgbG9uZyBwb3MgPSAwOworICAgIGxvbmcgcmVzdWx0OworICAgIFZBTFVF
IG1hdGNoOworICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgcmVnaSwgKnJlZ3MgPSAmcmVnaTsKKyAg
ICByZWdleF90ICpyZWc7CisgICAgaW50IHRtcHJlZzsKKyAgICBvbmlnX2Vycm1zZ19idWZmZXIg
ZXJyID0gIiI7CisKKyAgICByZWcgPSByYl9yZWdfcHJlcGFyZV9yZTAocmUsIHN0ciwgZXJyKTsK
KyAgICB0bXByZWcgPSByZWcgIT0gUlJFR0VYUF9QVFIocmUpOworICAgIGlmICghdG1wcmVnKSBS
UkVHRVhQKHJlKS0+dXNlY250Kys7CisKKyAgICBtYXRjaCA9IHJiX2JhY2tyZWZfZ2V0KCk7Cisg
ICAgaWYgKCFOSUxfUChtYXRjaCkpIHsKKwlpZiAoRkxfVEVTVChtYXRjaCwgTUFUQ0hfQlVTWSkp
IHsKKwkgICAgbWF0Y2ggPSBRbmlsOworCX0KKwllbHNlIHsKKwkgICAgcmVncyA9IFJNQVRDSF9S
RUdTKG1hdGNoKTsKKwl9CisgICAgfQorICAgIGlmIChOSUxfUChtYXRjaCkpIHsKKwlNRU1aRVJP
KHJlZ3MsIHN0cnVjdCByZV9yZWdpc3RlcnMsIDEpOworICAgIH0KKyAgICByZXN1bHQgPSBvbmln
X21hdGNoKHJlZywKKwkJCSAoVUNoYXIqKShSU1RSSU5HX1BUUihzdHIpKSwKKwkJCSAoKFVDaGFy
KikoUlNUUklOR19QVFIoc3RyKSkgKyBSU1RSSU5HX0xFTihzdHIpKSwKKwkJCSAoVUNoYXIqKShS
U1RSSU5HX1BUUihzdHIpKSwKKwkJCSByZWdzLCBPTklHX09QVElPTl9OT05FKTsKKyAgICBpZiAo
IXRtcHJlZykgUlJFR0VYUChyZSktPnVzZWNudC0tOworICAgIGlmICh0bXByZWcpIHsKKwlpZiAo
UlJFR0VYUChyZSktPnVzZWNudCkgeworCSAgICBvbmlnX2ZyZWUocmVnKTsKKwl9CisJZWxzZSB7
CisJICAgIG9uaWdfZnJlZShSUkVHRVhQX1BUUihyZSkpOworCSAgICBSUkVHRVhQX1BUUihyZSkg
PSByZWc7CisJfQorICAgIH0KKyAgICBpZiAocmVzdWx0IDwgMCkgeworCWlmIChyZWdzID09ICZy
ZWdpKQorCSAgICBvbmlnX3JlZ2lvbl9mcmVlKHJlZ3MsIDApOworCWlmIChyZXN1bHQgPT0gT05J
R19NSVNNQVRDSCkgeworCSAgICByYl9iYWNrcmVmX3NldChRbmlsKTsKKwkgICAgcmV0dXJuIGZh
bHNlOworCX0KKwllbHNlIHsKKwkgICAgb25pZ19lcnJvcl9jb2RlX3RvX3N0cigoVUNoYXIqKWVy
ciwgKGludClyZXN1bHQpOworCSAgICByYl9yZWdfcmFpc2UoUlJFR0VYUF9TUkNfUFRSKHJlKSwg
UlJFR0VYUF9TUkNfTEVOKHJlKSwgZXJyLCByZSk7CisJfQorICAgIH0KKworICAgIGlmIChOSUxf
UChtYXRjaCkpIHsKKwlpbnQgZXJyOworCW1hdGNoID0gbWF0Y2hfYWxsb2MocmJfY01hdGNoKTsK
KwllcnIgPSByYl9yZWdfcmVnaW9uX2NvcHkoUk1BVENIX1JFR1MobWF0Y2gpLCByZWdzKTsKKwlv
bmlnX3JlZ2lvbl9mcmVlKHJlZ3MsIDApOworCWlmIChlcnIpIHJiX21lbWVycm9yKCk7CisgICAg
fQorICAgIGVsc2UgeworCUZMX1VOU0VUKG1hdGNoLCBGTF9UQUlOVCk7CisgICAgfQorCisgICAg
Uk1BVENIKG1hdGNoKS0+c3RyID0gcmJfc3RyX25ldzQoc3RyKTsKKyAgICBPQkpfSU5GRUNUKG1h
dGNoLCBzdHIpOworCisgICAgUk1BVENIKG1hdGNoKS0+cmVnZXhwID0gcmU7CisgICAgUk1BVENI
KG1hdGNoKS0+cm1hdGNoLT5jaGFyX29mZnNldF91cGRhdGVkID0gMDsKKyAgICByYl9iYWNrcmVm
X3NldChtYXRjaCk7CisKKyAgICBPQkpfSU5GRUNUKG1hdGNoLCByZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogVkFMVUUKIHJiX3JlZ19udGhfZGVmaW5lZChpbnQgbnRoLCBWQUxVRSBtYXRj
aCkKIHsKZGlmZiAtLWdpdCBhL3N0cmluZy5jIGIvc3RyaW5nLmMKaW5kZXggMDcyZjEzMjllZS4u
NjU0MmE0YWNiMSAxMDA2NDQKLS0tIGEvc3RyaW5nLmMKKysrIGIvc3RyaW5nLmMKQEAgLTkxMjYs
NiArOTEyNiw3IEBAIHJiX3N0cl9ycGFydGl0aW9uKFZBTFVFIHN0ciwgVkFMVUUgc2VwKQogCQkJ
CQlSU1RSSU5HX0xFTihzdHIpLXBvcy1SU1RSSU5HX0xFTihzZXApKSk7CiB9CiAKK2V4dGVybiBi
b29sIHJiX3JlZ19zdGFydF93aXRoX3AoVkFMVUUgcmUsIFZBTFVFIHN0cik7CiAvKgogICogIGNh
bGwtc2VxOgogICogICAgIHN0ci5zdGFydF93aXRoPyhbcHJlZml4ZXNdKykgICAtPiB0cnVlIG9y
IGZhbHNlCkBAIC05MTQ2LDExICs5MTQ3LDIwIEBAIHJiX3N0cl9zdGFydF93aXRoKGludCBhcmdj
LCBWQUxVRSAqYXJndiwgVkFMVUUgc3RyKQogCiAgICAgZm9yIChpPTA7IGk8YXJnYzsgaSsrKSB7
CiAJVkFMVUUgdG1wID0gYXJndltpXTsKLQlTdHJpbmdWYWx1ZSh0bXApOwotCXJiX2VuY19jaGVj
ayhzdHIsIHRtcCk7Ci0JaWYgKFJTVFJJTkdfTEVOKHN0cikgPCBSU1RSSU5HX0xFTih0bXApKSBj
b250aW51ZTsKLQlpZiAobWVtY21wKFJTVFJJTkdfUFRSKHN0ciksIFJTVFJJTkdfUFRSKHRtcCks
IFJTVFJJTkdfTEVOKHRtcCkpID09IDApCi0JICAgIHJldHVybiBRdHJ1ZTsKKwlzd2l0Y2ggKEJV
SUxUSU5fVFlQRSh0bXApKSB7CisJICBjYXNlIFRfUkVHRVhQOgorCSAgICB7CisJCWJvb2wgciA9
IHJiX3JlZ19zdGFydF93aXRoX3AodG1wLCBzdHIpOworCQlpZiAocikgcmV0dXJuIFF0cnVlOwor
CSAgICB9CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgU3RyaW5nVmFsdWUodG1wKTsK
KwkgICAgcmJfZW5jX2NoZWNrKHN0ciwgdG1wKTsKKwkgICAgaWYgKFJTVFJJTkdfTEVOKHN0cikg
PCBSU1RSSU5HX0xFTih0bXApKSBjb250aW51ZTsKKwkgICAgaWYgKG1lbWNtcChSU1RSSU5HX1BU
UihzdHIpLCBSU1RSSU5HX1BUUih0bXApLCBSU1RSSU5HX0xFTih0bXApKSA9PSAwKQorCQlyZXR1
cm4gUXRydWU7CisJfQogICAgIH0KICAgICByZXR1cm4gUWZhbHNlOwogfQpgYGAKCgoKLS0gCmh0
dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3Jl
LXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3Rz
LnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=

In This Thread

Prev Next