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

From: eregontp@...
Date: 2017-07-05 11:44:42 UTC
List: ruby-core #81917
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K
CgpwaGx1aWQ2MSAoTWF0dGhldyBLZXJ3aW4pIHdyb3RlOgo+IFRoYXQgY291bGQgZGVwZW5kIG9u
IHdoZXRoZXIgYCQmYCwgYCQxYCwgYCQyYCwgZXRjLiBhcmUgc2V0LiAgSSBhc3N1bWVkIEBub2J1
IHdhcyBvbmx5IGFza2luZyBhYm91dCBgJH5gIGJlY2F1c2UgYWxsb2NhdGluZyBhIHdob2xlIE1h
dGNoRGF0YSBvYmplY3QgaXMgaGVhdmllciB0aGFuIGp1c3QgYWxsb2NhdGluZyBzb21lIHN0cmlu
Z3MuCgokJiwgJDEsIGV0YyBhbHdheXMganVzdCByZWFkIGZyb20gJH4sIHNvIGl0J3MgdGhlIHNh
bWUgdGhpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1
cmUgIzEzNzEyOiBTdHJpbmcjc3RhcnRfd2l0aD8gd2l0aCByZWdleHAKaHR0cHM6Ly9idWdzLnJ1
YnktbGFuZy5vcmcvaXNzdWVzLzEzNzEyI2NoYW5nZS02NTY0NgoKKiBBdXRob3I6IG5hcnVzZSAo
WXVpIE5BUlVTRSkKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCiogQXNzaWduZWU6
IAoqIFRhcmdldCB2ZXJzaW9uOiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpTdHJpbmcjc3RhcnRfd2l0aD8gc2hvdWxkIHJlY2VpdmUgcmVnZXhwLgoKV2hlbiBJIHdy
aXRlIGEgcGFyc2VyLCBJIHdhbnQgdG8gY2hlY2sgYSBzdHJpbmcgaXMgc3RhcnQgd2l0aCBhIHBh
dHRlcm4gb3Igbm90LgpJdCdzIGp1c3QgdGhlIHNhbWUgdGhpbmcgd2l0aCBbU3RyaW5nU2Nhbm5l
ciNtYXRjaF0oaHR0cHM6Ly9ydWJ5LWRvYy5vcmcvc3RkbGliLTIuNC4wL2xpYmRvYy9zdHJzY2Fu
L3Jkb2MvU3RyaW5nU2Nhbm5lci5odG1sI21ldGhvZC1pLW1hdGNoLTNGKQoKSWYgSSB3YW50IHRv
IGRvIHRoZSBzYW1lIHRoaW5nIHdpdGggbm9ybWFsIHN0cmluZyBtZXRob2QsIGl0IG5lZWRzIHRv
IHdyaXRlIGxpa2UgYC9cQSN7cmV9Ly5tYXRjaCjigKYpYC4KQnV0IGlmIHJlIGlzIGFyZ3VtZW50
LCBpdCBuZWVkcyB0byBjcmVhdGUgYSBuZXcgdGVtcG9yYXJ5IHJlZ2V4cCBldmVyeSB0aW1lLgoK
VGhvdWdoIHdlIGhhdmUgYSB3b3JrYXJvdW5kIGFzIGZvbGxvd3MgYnV0IGl0J3MgYml0IHRyaWNr
eS4KCmBgYHJ1YnkKImZvbyAiLnJpbmRleCgvZm8rLi8sIDApCmBgYAoKQSBwYXRjaCBpcyBmb2xs
b3dpbmc6CgpgYGBkaWZmCmRpZmYgLS1naXQgYS9yZS5jIGIvcmUuYwppbmRleCBkMGFhMmE3OTJl
Li5mNjcyYmE3NWVjIDEwMDY0NAotLS0gYS9yZS5jCisrKyBiL3JlLmMKQEAgLTE1ODgsNiArMTU4
OCw4NCBAQCByYl9yZWdfc2VhcmNoKFZBTFVFIHJlLCBWQUxVRSBzdHIsIGxvbmcgcG9zLCBpbnQg
cmV2ZXJzZSkKICAgICByZXR1cm4gcmJfcmVnX3NlYXJjaDAocmUsIHN0ciwgcG9zLCByZXZlcnNl
LCAxKTsKIH0KIAorYm9vbAorcmJfcmVnX3N0YXJ0X3dpdGhfcChWQUxVRSByZSwgVkFMVUUgc3Ry
KQoreworICAgIGxvbmcgcG9zID0gMDsKKyAgICBsb25nIHJlc3VsdDsKKyAgICBWQUxVRSBtYXRj
aDsKKyAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzIHJlZ2ksICpyZWdzID0gJnJlZ2k7CisgICAgcmVn
ZXhfdCAqcmVnOworICAgIGludCB0bXByZWc7CisgICAgb25pZ19lcnJtc2dfYnVmZmVyIGVyciA9
ICIiOworCisgICAgcmVnID0gcmJfcmVnX3ByZXBhcmVfcmUwKHJlLCBzdHIsIGVycik7CisgICAg
dG1wcmVnID0gcmVnICE9IFJSRUdFWFBfUFRSKHJlKTsKKyAgICBpZiAoIXRtcHJlZykgUlJFR0VY
UChyZSktPnVzZWNudCsrOworCisgICAgbWF0Y2ggPSByYl9iYWNrcmVmX2dldCgpOworICAgIGlm
ICghTklMX1AobWF0Y2gpKSB7CisJaWYgKEZMX1RFU1QobWF0Y2gsIE1BVENIX0JVU1kpKSB7CisJ
ICAgIG1hdGNoID0gUW5pbDsKKwl9CisJZWxzZSB7CisJICAgIHJlZ3MgPSBSTUFUQ0hfUkVHUyht
YXRjaCk7CisJfQorICAgIH0KKyAgICBpZiAoTklMX1AobWF0Y2gpKSB7CisJTUVNWkVSTyhyZWdz
LCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzLCAxKTsKKyAgICB9CisgICAgcmVzdWx0ID0gb25pZ19tYXRj
aChyZWcsCisJCQkgKFVDaGFyKikoUlNUUklOR19QVFIoc3RyKSksCisJCQkgKChVQ2hhciopKFJT
VFJJTkdfUFRSKHN0cikpICsgUlNUUklOR19MRU4oc3RyKSksCisJCQkgKFVDaGFyKikoUlNUUklO
R19QVFIoc3RyKSksCisJCQkgcmVncywgT05JR19PUFRJT05fTk9ORSk7CisgICAgaWYgKCF0bXBy
ZWcpIFJSRUdFWFAocmUpLT51c2VjbnQtLTsKKyAgICBpZiAodG1wcmVnKSB7CisJaWYgKFJSRUdF
WFAocmUpLT51c2VjbnQpIHsKKwkgICAgb25pZ19mcmVlKHJlZyk7CisJfQorCWVsc2UgeworCSAg
ICBvbmlnX2ZyZWUoUlJFR0VYUF9QVFIocmUpKTsKKwkgICAgUlJFR0VYUF9QVFIocmUpID0gcmVn
OworCX0KKyAgICB9CisgICAgaWYgKHJlc3VsdCA8IDApIHsKKwlpZiAocmVncyA9PSAmcmVnaSkK
KwkgICAgb25pZ19yZWdpb25fZnJlZShyZWdzLCAwKTsKKwlpZiAocmVzdWx0ID09IE9OSUdfTUlT
TUFUQ0gpIHsKKwkgICAgcmJfYmFja3JlZl9zZXQoUW5pbCk7CisJICAgIHJldHVybiBmYWxzZTsK
Kwl9CisJZWxzZSB7CisJICAgIG9uaWdfZXJyb3JfY29kZV90b19zdHIoKFVDaGFyKillcnIsIChp
bnQpcmVzdWx0KTsKKwkgICAgcmJfcmVnX3JhaXNlKFJSRUdFWFBfU1JDX1BUUihyZSksIFJSRUdF
WFBfU1JDX0xFTihyZSksIGVyciwgcmUpOworCX0KKyAgICB9CisKKyAgICBpZiAoTklMX1AobWF0
Y2gpKSB7CisJaW50IGVycjsKKwltYXRjaCA9IG1hdGNoX2FsbG9jKHJiX2NNYXRjaCk7CisJZXJy
ID0gcmJfcmVnX3JlZ2lvbl9jb3B5KFJNQVRDSF9SRUdTKG1hdGNoKSwgcmVncyk7CisJb25pZ19y
ZWdpb25fZnJlZShyZWdzLCAwKTsKKwlpZiAoZXJyKSByYl9tZW1lcnJvcigpOworICAgIH0KKyAg
ICBlbHNlIHsKKwlGTF9VTlNFVChtYXRjaCwgRkxfVEFJTlQpOworICAgIH0KKworICAgIFJNQVRD
SChtYXRjaCktPnN0ciA9IHJiX3N0cl9uZXc0KHN0cik7CisgICAgT0JKX0lORkVDVChtYXRjaCwg
c3RyKTsKKworICAgIFJNQVRDSChtYXRjaCktPnJlZ2V4cCA9IHJlOworICAgIFJNQVRDSChtYXRj
aCktPnJtYXRjaC0+Y2hhcl9vZmZzZXRfdXBkYXRlZCA9IDA7CisgICAgcmJfYmFja3JlZl9zZXQo
bWF0Y2gpOworCisgICAgT0JKX0lORkVDVChtYXRjaCwgcmUpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIFZBTFVFCiByYl9yZWdfbnRoX2RlZmluZWQoaW50IG50aCwgVkFMVUUgbWF0Y2gpCiB7
CmRpZmYgLS1naXQgYS9zdHJpbmcuYyBiL3N0cmluZy5jCmluZGV4IDA3MmYxMzI5ZWUuLjY1NDJh
NGFjYjEgMTAwNjQ0Ci0tLSBhL3N0cmluZy5jCisrKyBiL3N0cmluZy5jCkBAIC05MTI2LDYgKzkx
MjYsNyBAQCByYl9zdHJfcnBhcnRpdGlvbihWQUxVRSBzdHIsIFZBTFVFIHNlcCkKIAkJCQkJUlNU
UklOR19MRU4oc3RyKS1wb3MtUlNUUklOR19MRU4oc2VwKSkpOwogfQogCitleHRlcm4gYm9vbCBy
Yl9yZWdfc3RhcnRfd2l0aF9wKFZBTFVFIHJlLCBWQUxVRSBzdHIpOwogLyoKICAqICBjYWxsLXNl
cToKICAqICAgICBzdHIuc3RhcnRfd2l0aD8oW3ByZWZpeGVzXSspICAgLT4gdHJ1ZSBvciBmYWxz
ZQpAQCAtOTE0NiwxMSArOTE0NywyMCBAQCByYl9zdHJfc3RhcnRfd2l0aChpbnQgYXJnYywgVkFM
VUUgKmFyZ3YsIFZBTFVFIHN0cikKIAogICAgIGZvciAoaT0wOyBpPGFyZ2M7IGkrKykgewogCVZB
TFVFIHRtcCA9IGFyZ3ZbaV07Ci0JU3RyaW5nVmFsdWUodG1wKTsKLQlyYl9lbmNfY2hlY2soc3Ry
LCB0bXApOwotCWlmIChSU1RSSU5HX0xFTihzdHIpIDwgUlNUUklOR19MRU4odG1wKSkgY29udGlu
dWU7Ci0JaWYgKG1lbWNtcChSU1RSSU5HX1BUUihzdHIpLCBSU1RSSU5HX1BUUih0bXApLCBSU1RS
SU5HX0xFTih0bXApKSA9PSAwKQotCSAgICByZXR1cm4gUXRydWU7CisJc3dpdGNoIChCVUlMVElO
X1RZUEUodG1wKSkgeworCSAgY2FzZSBUX1JFR0VYUDoKKwkgICAgeworCQlib29sIHIgPSByYl9y
ZWdfc3RhcnRfd2l0aF9wKHRtcCwgc3RyKTsKKwkJaWYgKHIpIHJldHVybiBRdHJ1ZTsKKwkgICAg
fQorCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIFN0cmluZ1ZhbHVlKHRtcCk7CisJICAg
IHJiX2VuY19jaGVjayhzdHIsIHRtcCk7CisJICAgIGlmIChSU1RSSU5HX0xFTihzdHIpIDwgUlNU
UklOR19MRU4odG1wKSkgY29udGludWU7CisJICAgIGlmIChtZW1jbXAoUlNUUklOR19QVFIoc3Ry
KSwgUlNUUklOR19QVFIodG1wKSwgUlNUUklOR19MRU4odG1wKSkgPT0gMCkKKwkJcmV0dXJuIFF0
cnVlOworCX0KICAgICB9CiAgICAgcmV0dXJuIFFmYWxzZTsKIH0KYGBgCgoKCi0tIApodHRwczov
L2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1
ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5
LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K

In This Thread

Prev Next