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

From: matthew@...
Date: 2017-07-05 10:11:18 UTC
List: ruby-core #81915
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgcGhsdWlkNjEgKE1hdHRoZXcgS2Vyd2lu
KS4KCgpFcmVnb24gKEJlbm9pdCBEYWxvemUpIHdyb3RlOgo+IAo+IEl0IG1pZ2h0IGJlIHF1aXRl
IHVzZWZ1bCB3aGVuIHBhcnNpbmcsIHRvIGF2b2lkIGRvaW5nIGEgc2Vjb25kIG1hdGNoIGp1c3Qg
dG8gZ2V0IGNhcHR1cmVzLgoKVGhhdCBjb3VsZCBkZXBlbmQgb24gd2hldGhlciBgJCZgLCBgJDFg
LCBgJDJgLCBldGMuIGFyZSBzZXQuICBJIGFzc3VtZWQgQG5vYnUgd2FzIG9ubHkgYXNraW5nIGFi
b3V0IGAkfmAgYmVjYXVzZSBhbGxvY2F0aW5nIGEgd2hvbGUgTWF0Y2hEYXRhIG9iamVjdCBpcyBo
ZWF2aWVyIHRoYW4ganVzdCBhbGxvY2F0aW5nIHNvbWUgc3RyaW5ncy4KCi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTM3MTI6IFN0cmluZyNzdGFydF93
aXRoPyB3aXRoIHJlZ2V4cApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTM3MTIj
Y2hhbmdlLTY1NjQzCgoqIEF1dGhvcjogbmFydXNlIChZdWkgTkFSVVNFKQoqIFN0YXR1czogT3Bl
bgoqIFByaW9yaXR5OiBOb3JtYWwKKiBBc3NpZ25lZTogCiogVGFyZ2V0IHZlcnNpb246IAotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN0cmluZyNzdGFydF93aXRoPyBz
aG91bGQgcmVjZWl2ZSByZWdleHAuCgpXaGVuIEkgd3JpdGUgYSBwYXJzZXIsIEkgd2FudCB0byBj
aGVjayBhIHN0cmluZyBpcyBzdGFydCB3aXRoIGEgcGF0dGVybiBvciBub3QuCkl0J3MganVzdCB0
aGUgc2FtZSB0aGluZyB3aXRoIFtTdHJpbmdTY2FubmVyI21hdGNoXShodHRwczovL3J1YnktZG9j
Lm9yZy9zdGRsaWItMi40LjAvbGliZG9jL3N0cnNjYW4vcmRvYy9TdHJpbmdTY2FubmVyLmh0bWwj
bWV0aG9kLWktbWF0Y2gtM0YpCgpJZiBJIHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgd2l0aCBu
b3JtYWwgc3RyaW5nIG1ldGhvZCwgaXQgbmVlZHMgdG8gd3JpdGUgbGlrZSBgL1xBI3tyZX0vLm1h
dGNoKOKApilgLgpCdXQgaWYgcmUgaXMgYXJndW1lbnQsIGl0IG5lZWRzIHRvIGNyZWF0ZSBhIG5l
dyB0ZW1wb3JhcnkgcmVnZXhwIGV2ZXJ5IHRpbWUuCgpUaG91Z2ggd2UgaGF2ZSBhIHdvcmthcm91
bmQgYXMgZm9sbG93cyBidXQgaXQncyBiaXQgdHJpY2t5LgoKYGBgcnVieQoiZm9vICIucmluZGV4
KC9mbysuLywgMCkKYGBgCgpBIHBhdGNoIGlzIGZvbGxvd2luZzoKCmBgYGRpZmYKZGlmZiAtLWdp
dCBhL3JlLmMgYi9yZS5jCmluZGV4IGQwYWEyYTc5MmUuLmY2NzJiYTc1ZWMgMTAwNjQ0Ci0tLSBh
L3JlLmMKKysrIGIvcmUuYwpAQCAtMTU4OCw2ICsxNTg4LDg0IEBAIHJiX3JlZ19zZWFyY2goVkFM
VUUgcmUsIFZBTFVFIHN0ciwgbG9uZyBwb3MsIGludCByZXZlcnNlKQogICAgIHJldHVybiByYl9y
ZWdfc2VhcmNoMChyZSwgc3RyLCBwb3MsIHJldmVyc2UsIDEpOwogfQogCitib29sCityYl9yZWdf
c3RhcnRfd2l0aF9wKFZBTFVFIHJlLCBWQUxVRSBzdHIpCit7CisgICAgbG9uZyBwb3MgPSAwOwor
ICAgIGxvbmcgcmVzdWx0OworICAgIFZBTFVFIG1hdGNoOworICAgIHN0cnVjdCByZV9yZWdpc3Rl
cnMgcmVnaSwgKnJlZ3MgPSAmcmVnaTsKKyAgICByZWdleF90ICpyZWc7CisgICAgaW50IHRtcHJl
ZzsKKyAgICBvbmlnX2Vycm1zZ19idWZmZXIgZXJyID0gIiI7CisKKyAgICByZWcgPSByYl9yZWdf
cHJlcGFyZV9yZTAocmUsIHN0ciwgZXJyKTsKKyAgICB0bXByZWcgPSByZWcgIT0gUlJFR0VYUF9Q
VFIocmUpOworICAgIGlmICghdG1wcmVnKSBSUkVHRVhQKHJlKS0+dXNlY250Kys7CisKKyAgICBt
YXRjaCA9IHJiX2JhY2tyZWZfZ2V0KCk7CisgICAgaWYgKCFOSUxfUChtYXRjaCkpIHsKKwlpZiAo
RkxfVEVTVChtYXRjaCwgTUFUQ0hfQlVTWSkpIHsKKwkgICAgbWF0Y2ggPSBRbmlsOworCX0KKwll
bHNlIHsKKwkgICAgcmVncyA9IFJNQVRDSF9SRUdTKG1hdGNoKTsKKwl9CisgICAgfQorICAgIGlm
IChOSUxfUChtYXRjaCkpIHsKKwlNRU1aRVJPKHJlZ3MsIHN0cnVjdCByZV9yZWdpc3RlcnMsIDEp
OworICAgIH0KKyAgICByZXN1bHQgPSBvbmlnX21hdGNoKHJlZywKKwkJCSAoVUNoYXIqKShSU1RS
SU5HX1BUUihzdHIpKSwKKwkJCSAoKFVDaGFyKikoUlNUUklOR19QVFIoc3RyKSkgKyBSU1RSSU5H
X0xFTihzdHIpKSwKKwkJCSAoVUNoYXIqKShSU1RSSU5HX1BUUihzdHIpKSwKKwkJCSByZWdzLCBP
TklHX09QVElPTl9OT05FKTsKKyAgICBpZiAoIXRtcHJlZykgUlJFR0VYUChyZSktPnVzZWNudC0t
OworICAgIGlmICh0bXByZWcpIHsKKwlpZiAoUlJFR0VYUChyZSktPnVzZWNudCkgeworCSAgICBv
bmlnX2ZyZWUocmVnKTsKKwl9CisJZWxzZSB7CisJICAgIG9uaWdfZnJlZShSUkVHRVhQX1BUUihy
ZSkpOworCSAgICBSUkVHRVhQX1BUUihyZSkgPSByZWc7CisJfQorICAgIH0KKyAgICBpZiAocmVz
dWx0IDwgMCkgeworCWlmIChyZWdzID09ICZyZWdpKQorCSAgICBvbmlnX3JlZ2lvbl9mcmVlKHJl
Z3MsIDApOworCWlmIChyZXN1bHQgPT0gT05JR19NSVNNQVRDSCkgeworCSAgICByYl9iYWNrcmVm
X3NldChRbmlsKTsKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKwllbHNlIHsKKwkgICAgb25pZ19l
cnJvcl9jb2RlX3RvX3N0cigoVUNoYXIqKWVyciwgKGludClyZXN1bHQpOworCSAgICByYl9yZWdf
cmFpc2UoUlJFR0VYUF9TUkNfUFRSKHJlKSwgUlJFR0VYUF9TUkNfTEVOKHJlKSwgZXJyLCByZSk7
CisJfQorICAgIH0KKworICAgIGlmIChOSUxfUChtYXRjaCkpIHsKKwlpbnQgZXJyOworCW1hdGNo
ID0gbWF0Y2hfYWxsb2MocmJfY01hdGNoKTsKKwllcnIgPSByYl9yZWdfcmVnaW9uX2NvcHkoUk1B
VENIX1JFR1MobWF0Y2gpLCByZWdzKTsKKwlvbmlnX3JlZ2lvbl9mcmVlKHJlZ3MsIDApOworCWlm
IChlcnIpIHJiX21lbWVycm9yKCk7CisgICAgfQorICAgIGVsc2UgeworCUZMX1VOU0VUKG1hdGNo
LCBGTF9UQUlOVCk7CisgICAgfQorCisgICAgUk1BVENIKG1hdGNoKS0+c3RyID0gcmJfc3RyX25l
dzQoc3RyKTsKKyAgICBPQkpfSU5GRUNUKG1hdGNoLCBzdHIpOworCisgICAgUk1BVENIKG1hdGNo
KS0+cmVnZXhwID0gcmU7CisgICAgUk1BVENIKG1hdGNoKS0+cm1hdGNoLT5jaGFyX29mZnNldF91
cGRhdGVkID0gMDsKKyAgICByYl9iYWNrcmVmX3NldChtYXRjaCk7CisKKyAgICBPQkpfSU5GRUNU
KG1hdGNoLCByZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogVkFMVUUKIHJiX3JlZ19udGhf
ZGVmaW5lZChpbnQgbnRoLCBWQUxVRSBtYXRjaCkKIHsKZGlmZiAtLWdpdCBhL3N0cmluZy5jIGIv
c3RyaW5nLmMKaW5kZXggMDcyZjEzMjllZS4uNjU0MmE0YWNiMSAxMDA2NDQKLS0tIGEvc3RyaW5n
LmMKKysrIGIvc3RyaW5nLmMKQEAgLTkxMjYsNiArOTEyNiw3IEBAIHJiX3N0cl9ycGFydGl0aW9u
KFZBTFVFIHN0ciwgVkFMVUUgc2VwKQogCQkJCQlSU1RSSU5HX0xFTihzdHIpLXBvcy1SU1RSSU5H
X0xFTihzZXApKSk7CiB9CiAKK2V4dGVybiBib29sIHJiX3JlZ19zdGFydF93aXRoX3AoVkFMVUUg
cmUsIFZBTFVFIHN0cik7CiAvKgogICogIGNhbGwtc2VxOgogICogICAgIHN0ci5zdGFydF93aXRo
PyhbcHJlZml4ZXNdKykgICAtPiB0cnVlIG9yIGZhbHNlCkBAIC05MTQ2LDExICs5MTQ3LDIwIEBA
IHJiX3N0cl9zdGFydF93aXRoKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgc3RyKQogCiAg
ICAgZm9yIChpPTA7IGk8YXJnYzsgaSsrKSB7CiAJVkFMVUUgdG1wID0gYXJndltpXTsKLQlTdHJp
bmdWYWx1ZSh0bXApOwotCXJiX2VuY19jaGVjayhzdHIsIHRtcCk7Ci0JaWYgKFJTVFJJTkdfTEVO
KHN0cikgPCBSU1RSSU5HX0xFTih0bXApKSBjb250aW51ZTsKLQlpZiAobWVtY21wKFJTVFJJTkdf
UFRSKHN0ciksIFJTVFJJTkdfUFRSKHRtcCksIFJTVFJJTkdfTEVOKHRtcCkpID09IDApCi0JICAg
IHJldHVybiBRdHJ1ZTsKKwlzd2l0Y2ggKEJVSUxUSU5fVFlQRSh0bXApKSB7CisJICBjYXNlIFRf
UkVHRVhQOgorCSAgICB7CisJCWJvb2wgciA9IHJiX3JlZ19zdGFydF93aXRoX3AodG1wLCBzdHIp
OworCQlpZiAocikgcmV0dXJuIFF0cnVlOworCSAgICB9CisJICAgIGJyZWFrOworCSAgZGVmYXVs
dDoKKwkgICAgU3RyaW5nVmFsdWUodG1wKTsKKwkgICAgcmJfZW5jX2NoZWNrKHN0ciwgdG1wKTsK
KwkgICAgaWYgKFJTVFJJTkdfTEVOKHN0cikgPCBSU1RSSU5HX0xFTih0bXApKSBjb250aW51ZTsK
KwkgICAgaWYgKG1lbWNtcChSU1RSSU5HX1BUUihzdHIpLCBSU1RSSU5HX1BUUih0bXApLCBSU1RS
SU5HX0xFTih0bXApKSA9PSAwKQorCQlyZXR1cm4gUXRydWU7CisJfQogICAgIH0KICAgICByZXR1
cm4gUWZhbHNlOwogfQpgYGAKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5z
dWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0
PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFu
L29wdGlvbnMvcnVieS1jb3JlPgo=

In This Thread

Prev Next