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

From: duerst@...
Date: 2017-07-05 03:50:24 UTC
List: ruby-core #81910
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgZHVlcnN0IChNYXJ0aW4gRMO8cnN0KS4K
CgpzaHlvdWhlaSAoU2h5b3VoZWkgVXJhYmUpIHdyb3RlOgo+ICsxIGZvciBzdGFydF93aXRoPyBi
dXQgSSBoYXZlIG5vIHByYWN0aWNhbCB1c2FnZSBvZiBlbmRfd2l0aD8gc28gYSBiaXQgbmVnYXRp
dmUgYWJvdXQgdGhhdCBwYXJ0LiAgRG8gcGVvcGxlIHJlYWxseSBuZWVkIHJlZ2V4cCB2ZXJzaW9u
IG9mIC5lbmRfd2l0aD8KCkluIGFkZGl0aW9uLCBldmVuIGlmIHdlIGRvbid0IGhhdmUgYSBkaXJl
Y3QgdXNlIGNhc2UsIGl0J3MgdmVyeSBlYXN5IGZvciBzb21lYm9keSB0byB0cnkgb3V0LCBhbmQg
dGhlbiBzZW5kIGEgYnVnIHJlcG9ydCBoZXJlIGlmIGl0J3Mgbm90IGF2YWlsYWJsZS4gSSBrbm93
IHdlIGRvbid0IGFkZCBmdW5jdGlvbmFsaXR5IGp1c3QgYmVjYXVzZSAic29tZWJvZHkgZXZlbnR1
YWxseSBtYXkgbmVlZCBpdCIsIGJ1dCBpbiB0aGlzIGNhc2UsIGl0IHNlZW1zIHRvIGJlIGp1c3Rp
ZmllZCB0byBzdHJlYW1saW5lIHRoaW5ncy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KRmVhdHVyZSAjMTM3MTI6IFN0cmluZyNzdGFydF93aXRoPyB3aXRoIHJlZ2V4
cApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTM3MTIjY2hhbmdlLTY1NjM3Cgoq
IEF1dGhvcjogbmFydXNlIChZdWkgTkFSVVNFKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBO
b3JtYWwKKiBBc3NpZ25lZTogCiogVGFyZ2V0IHZlcnNpb246IAotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tClN0cmluZyNzdGFydF93aXRoPyBzaG91bGQgcmVjZWl2ZSBy
ZWdleHAuCgpXaGVuIEkgd3JpdGUgYSBwYXJzZXIsIEkgd2FudCB0byBjaGVjayBhIHN0cmluZyBp
cyBzdGFydCB3aXRoIGEgcGF0dGVybiBvciBub3QuCkl0J3MganVzdCB0aGUgc2FtZSB0aGluZyB3
aXRoIFtTdHJpbmdTY2FubmVyI21hdGNoXShodHRwczovL3J1YnktZG9jLm9yZy9zdGRsaWItMi40
LjAvbGliZG9jL3N0cnNjYW4vcmRvYy9TdHJpbmdTY2FubmVyLmh0bWwjbWV0aG9kLWktbWF0Y2gt
M0YpCgpJZiBJIHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgd2l0aCBub3JtYWwgc3RyaW5nIG1l
dGhvZCwgaXQgbmVlZHMgdG8gd3JpdGUgbGlrZSBgL1xBI3tyZX0vLm1hdGNoKOKApilgLgpCdXQg
aWYgcmUgaXMgYXJndW1lbnQsIGl0IG5lZWRzIHRvIGNyZWF0ZSBhIG5ldyB0ZW1wb3JhcnkgcmVn
ZXhwIGV2ZXJ5IHRpbWUuCgpUaG91Z2ggd2UgaGF2ZSBhIHdvcmthcm91bmQgYXMgZm9sbG93cyBi
dXQgaXQncyBiaXQgdHJpY2t5LgoKYGBgcnVieQoiZm9vICIucmluZGV4KC9mbysuLywgMCkKYGBg
CgpBIHBhdGNoIGlzIGZvbGxvd2luZzoKCmBgYGRpZmYKZGlmZiAtLWdpdCBhL3JlLmMgYi9yZS5j
CmluZGV4IGQwYWEyYTc5MmUuLmY2NzJiYTc1ZWMgMTAwNjQ0Ci0tLSBhL3JlLmMKKysrIGIvcmUu
YwpAQCAtMTU4OCw2ICsxNTg4LDg0IEBAIHJiX3JlZ19zZWFyY2goVkFMVUUgcmUsIFZBTFVFIHN0
ciwgbG9uZyBwb3MsIGludCByZXZlcnNlKQogICAgIHJldHVybiByYl9yZWdfc2VhcmNoMChyZSwg
c3RyLCBwb3MsIHJldmVyc2UsIDEpOwogfQogCitib29sCityYl9yZWdfc3RhcnRfd2l0aF9wKFZB
TFVFIHJlLCBWQUxVRSBzdHIpCit7CisgICAgbG9uZyBwb3MgPSAwOworICAgIGxvbmcgcmVzdWx0
OworICAgIFZBTFVFIG1hdGNoOworICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgcmVnaSwgKnJlZ3Mg
PSAmcmVnaTsKKyAgICByZWdleF90ICpyZWc7CisgICAgaW50IHRtcHJlZzsKKyAgICBvbmlnX2Vy
cm1zZ19idWZmZXIgZXJyID0gIiI7CisKKyAgICByZWcgPSByYl9yZWdfcHJlcGFyZV9yZTAocmUs
IHN0ciwgZXJyKTsKKyAgICB0bXByZWcgPSByZWcgIT0gUlJFR0VYUF9QVFIocmUpOworICAgIGlm
ICghdG1wcmVnKSBSUkVHRVhQKHJlKS0+dXNlY250Kys7CisKKyAgICBtYXRjaCA9IHJiX2JhY2ty
ZWZfZ2V0KCk7CisgICAgaWYgKCFOSUxfUChtYXRjaCkpIHsKKwlpZiAoRkxfVEVTVChtYXRjaCwg
TUFUQ0hfQlVTWSkpIHsKKwkgICAgbWF0Y2ggPSBRbmlsOworCX0KKwllbHNlIHsKKwkgICAgcmVn
cyA9IFJNQVRDSF9SRUdTKG1hdGNoKTsKKwl9CisgICAgfQorICAgIGlmIChOSUxfUChtYXRjaCkp
IHsKKwlNRU1aRVJPKHJlZ3MsIHN0cnVjdCByZV9yZWdpc3RlcnMsIDEpOworICAgIH0KKyAgICBy
ZXN1bHQgPSBvbmlnX21hdGNoKHJlZywKKwkJCSAoVUNoYXIqKShSU1RSSU5HX1BUUihzdHIpKSwK
KwkJCSAoKFVDaGFyKikoUlNUUklOR19QVFIoc3RyKSkgKyBSU1RSSU5HX0xFTihzdHIpKSwKKwkJ
CSAoVUNoYXIqKShSU1RSSU5HX1BUUihzdHIpKSwKKwkJCSByZWdzLCBPTklHX09QVElPTl9OT05F
KTsKKyAgICBpZiAoIXRtcHJlZykgUlJFR0VYUChyZSktPnVzZWNudC0tOworICAgIGlmICh0bXBy
ZWcpIHsKKwlpZiAoUlJFR0VYUChyZSktPnVzZWNudCkgeworCSAgICBvbmlnX2ZyZWUocmVnKTsK
Kwl9CisJZWxzZSB7CisJICAgIG9uaWdfZnJlZShSUkVHRVhQX1BUUihyZSkpOworCSAgICBSUkVH
RVhQX1BUUihyZSkgPSByZWc7CisJfQorICAgIH0KKyAgICBpZiAocmVzdWx0IDwgMCkgeworCWlm
IChyZWdzID09ICZyZWdpKQorCSAgICBvbmlnX3JlZ2lvbl9mcmVlKHJlZ3MsIDApOworCWlmIChy
ZXN1bHQgPT0gT05JR19NSVNNQVRDSCkgeworCSAgICByYl9iYWNrcmVmX3NldChRbmlsKTsKKwkg
ICAgcmV0dXJuIGZhbHNlOworCX0KKwllbHNlIHsKKwkgICAgb25pZ19lcnJvcl9jb2RlX3RvX3N0
cigoVUNoYXIqKWVyciwgKGludClyZXN1bHQpOworCSAgICByYl9yZWdfcmFpc2UoUlJFR0VYUF9T
UkNfUFRSKHJlKSwgUlJFR0VYUF9TUkNfTEVOKHJlKSwgZXJyLCByZSk7CisJfQorICAgIH0KKwor
ICAgIGlmIChOSUxfUChtYXRjaCkpIHsKKwlpbnQgZXJyOworCW1hdGNoID0gbWF0Y2hfYWxsb2Mo
cmJfY01hdGNoKTsKKwllcnIgPSByYl9yZWdfcmVnaW9uX2NvcHkoUk1BVENIX1JFR1MobWF0Y2gp
LCByZWdzKTsKKwlvbmlnX3JlZ2lvbl9mcmVlKHJlZ3MsIDApOworCWlmIChlcnIpIHJiX21lbWVy
cm9yKCk7CisgICAgfQorICAgIGVsc2UgeworCUZMX1VOU0VUKG1hdGNoLCBGTF9UQUlOVCk7Cisg
ICAgfQorCisgICAgUk1BVENIKG1hdGNoKS0+c3RyID0gcmJfc3RyX25ldzQoc3RyKTsKKyAgICBP
QkpfSU5GRUNUKG1hdGNoLCBzdHIpOworCisgICAgUk1BVENIKG1hdGNoKS0+cmVnZXhwID0gcmU7
CisgICAgUk1BVENIKG1hdGNoKS0+cm1hdGNoLT5jaGFyX29mZnNldF91cGRhdGVkID0gMDsKKyAg
ICByYl9iYWNrcmVmX3NldChtYXRjaCk7CisKKyAgICBPQkpfSU5GRUNUKG1hdGNoLCByZSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogVkFMVUUKIHJiX3JlZ19udGhfZGVmaW5lZChpbnQgbnRo
LCBWQUxVRSBtYXRjaCkKIHsKZGlmZiAtLWdpdCBhL3N0cmluZy5jIGIvc3RyaW5nLmMKaW5kZXgg
MDcyZjEzMjllZS4uNjU0MmE0YWNiMSAxMDA2NDQKLS0tIGEvc3RyaW5nLmMKKysrIGIvc3RyaW5n
LmMKQEAgLTkxMjYsNiArOTEyNiw3IEBAIHJiX3N0cl9ycGFydGl0aW9uKFZBTFVFIHN0ciwgVkFM
VUUgc2VwKQogCQkJCQlSU1RSSU5HX0xFTihzdHIpLXBvcy1SU1RSSU5HX0xFTihzZXApKSk7CiB9
CiAKK2V4dGVybiBib29sIHJiX3JlZ19zdGFydF93aXRoX3AoVkFMVUUgcmUsIFZBTFVFIHN0cik7
CiAvKgogICogIGNhbGwtc2VxOgogICogICAgIHN0ci5zdGFydF93aXRoPyhbcHJlZml4ZXNdKykg
ICAtPiB0cnVlIG9yIGZhbHNlCkBAIC05MTQ2LDExICs5MTQ3LDIwIEBAIHJiX3N0cl9zdGFydF93
aXRoKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgc3RyKQogCiAgICAgZm9yIChpPTA7IGk8
YXJnYzsgaSsrKSB7CiAJVkFMVUUgdG1wID0gYXJndltpXTsKLQlTdHJpbmdWYWx1ZSh0bXApOwot
CXJiX2VuY19jaGVjayhzdHIsIHRtcCk7Ci0JaWYgKFJTVFJJTkdfTEVOKHN0cikgPCBSU1RSSU5H
X0xFTih0bXApKSBjb250aW51ZTsKLQlpZiAobWVtY21wKFJTVFJJTkdfUFRSKHN0ciksIFJTVFJJ
TkdfUFRSKHRtcCksIFJTVFJJTkdfTEVOKHRtcCkpID09IDApCi0JICAgIHJldHVybiBRdHJ1ZTsK
Kwlzd2l0Y2ggKEJVSUxUSU5fVFlQRSh0bXApKSB7CisJICBjYXNlIFRfUkVHRVhQOgorCSAgICB7
CisJCWJvb2wgciA9IHJiX3JlZ19zdGFydF93aXRoX3AodG1wLCBzdHIpOworCQlpZiAocikgcmV0
dXJuIFF0cnVlOworCSAgICB9CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgU3RyaW5n
VmFsdWUodG1wKTsKKwkgICAgcmJfZW5jX2NoZWNrKHN0ciwgdG1wKTsKKwkgICAgaWYgKFJTVFJJ
TkdfTEVOKHN0cikgPCBSU1RSSU5HX0xFTih0bXApKSBjb250aW51ZTsKKwkgICAgaWYgKG1lbWNt
cChSU1RSSU5HX1BUUihzdHIpLCBSU1RSSU5HX1BUUih0bXApLCBSU1RSSU5HX0xFTih0bXApKSA9
PSAwKQorCQlyZXR1cm4gUXRydWU7CisJfQogICAgIH0KICAgICByZXR1cm4gUWZhbHNlOwogfQpg
YGAKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWls
dG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8
aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1j
b3JlPgo=

In This Thread

Prev Next