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

From: eregontp@...
Date: 2017-07-04 10:10:09 UTC
List: ruby-core #81898
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K
CgpBZ3JlZWQsIHRoaXMgd291bGQgYmUgZ3JlYXQgYW5kIGludHVpdGl2ZS4KCkkgd29uZGVyLCBj
b3VsZCB0aGUgc3ltbWV0cmljYWwgU3RyaW5nI2VuZF93aXRoPyBhbHNvIHdvcmsgd2l0aCBhIFJl
Z2V4cD8gKGhhdmluZyB0aGUgc2FtZSBlZmZlY3QgYXMgYSB0cmFpbGluZyBceiBpbiB0aGUgUmVn
ZXhwKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMx
MzcxMjogU3RyaW5nI3N0YXJ0X3dpdGg/IHdpdGggcmVnZXhwCmh0dHBzOi8vYnVncy5ydWJ5LWxh
bmcub3JnL2lzc3Vlcy8xMzcxMiNjaGFuZ2UtNjU2MjUKCiogQXV0aG9yOiBuYXJ1c2UgKFl1aSBO
QVJVU0UpCiogU3RhdHVzOiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVlOiAKKiBU
YXJnZXQgdmVyc2lvbjogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
U3RyaW5nI3N0YXJ0X3dpdGg/IHNob3VsZCByZWNlaXZlIHJlZ2V4cC4KCldoZW4gSSB3cml0ZSBh
IHBhcnNlciwgSSB3YW50IHRvIGNoZWNrIGEgc3RyaW5nIGlzIHN0YXJ0IHdpdGggYSBwYXR0ZXJu
IG9yIG5vdC4KSXQncyBqdXN0IHRoZSBzYW1lIHRoaW5nIHdpdGggW1N0cmluZ1NjYW5uZXIjbWF0
Y2hdKGh0dHBzOi8vcnVieS1kb2Mub3JnL3N0ZGxpYi0yLjQuMC9saWJkb2Mvc3Ryc2Nhbi9yZG9j
L1N0cmluZ1NjYW5uZXIuaHRtbCNtZXRob2QtaS1tYXRjaC0zRikKCklmIEkgd2FudCB0byBkbyB0
aGUgc2FtZSB0aGluZyB3aXRoIG5vcm1hbCBzdHJpbmcgbWV0aG9kLCBpdCBuZWVkcyB0byB3cml0
ZSBsaWtlIGAvXEEje3JlfS8ubWF0Y2go4oCmKWAuCkJ1dCBpZiByZSBpcyBhcmd1bWVudCwgaXQg
bmVlZHMgdG8gY3JlYXRlIGEgbmV3IHRlbXBvcmFyeSByZWdleHAgZXZlcnkgdGltZS4KClRob3Vn
aCB3ZSBoYXZlIGEgd29ya2Fyb3VuZCBhcyBmb2xsb3dzIGJ1dCBpdCdzIGJpdCB0cmlja3kuCgpg
YGBydWJ5CiJmb28gIi5yaW5kZXgoL2ZvKy4vLCAwKQpgYGAKCkEgcGF0Y2ggaXMgZm9sbG93aW5n
OgoKYGBgZGlmZgpkaWZmIC0tZ2l0IGEvcmUuYyBiL3JlLmMKaW5kZXggZDBhYTJhNzkyZS4uZjY3
MmJhNzVlYyAxMDA2NDQKLS0tIGEvcmUuYworKysgYi9yZS5jCkBAIC0xNTg4LDYgKzE1ODgsODQg
QEAgcmJfcmVnX3NlYXJjaChWQUxVRSByZSwgVkFMVUUgc3RyLCBsb25nIHBvcywgaW50IHJldmVy
c2UpCiAgICAgcmV0dXJuIHJiX3JlZ19zZWFyY2gwKHJlLCBzdHIsIHBvcywgcmV2ZXJzZSwgMSk7
CiB9CiAKK2Jvb2wKK3JiX3JlZ19zdGFydF93aXRoX3AoVkFMVUUgcmUsIFZBTFVFIHN0cikKK3sK
KyAgICBsb25nIHBvcyA9IDA7CisgICAgbG9uZyByZXN1bHQ7CisgICAgVkFMVUUgbWF0Y2g7Cisg
ICAgc3RydWN0IHJlX3JlZ2lzdGVycyByZWdpLCAqcmVncyA9ICZyZWdpOworICAgIHJlZ2V4X3Qg
KnJlZzsKKyAgICBpbnQgdG1wcmVnOworICAgIG9uaWdfZXJybXNnX2J1ZmZlciBlcnIgPSAiIjsK
KworICAgIHJlZyA9IHJiX3JlZ19wcmVwYXJlX3JlMChyZSwgc3RyLCBlcnIpOworICAgIHRtcHJl
ZyA9IHJlZyAhPSBSUkVHRVhQX1BUUihyZSk7CisgICAgaWYgKCF0bXByZWcpIFJSRUdFWFAocmUp
LT51c2VjbnQrKzsKKworICAgIG1hdGNoID0gcmJfYmFja3JlZl9nZXQoKTsKKyAgICBpZiAoIU5J
TF9QKG1hdGNoKSkgeworCWlmIChGTF9URVNUKG1hdGNoLCBNQVRDSF9CVVNZKSkgeworCSAgICBt
YXRjaCA9IFFuaWw7CisJfQorCWVsc2UgeworCSAgICByZWdzID0gUk1BVENIX1JFR1MobWF0Y2gp
OworCX0KKyAgICB9CisgICAgaWYgKE5JTF9QKG1hdGNoKSkgeworCU1FTVpFUk8ocmVncywgc3Ry
dWN0IHJlX3JlZ2lzdGVycywgMSk7CisgICAgfQorICAgIHJlc3VsdCA9IG9uaWdfbWF0Y2gocmVn
LAorCQkJIChVQ2hhciopKFJTVFJJTkdfUFRSKHN0cikpLAorCQkJICgoVUNoYXIqKShSU1RSSU5H
X1BUUihzdHIpKSArIFJTVFJJTkdfTEVOKHN0cikpLAorCQkJIChVQ2hhciopKFJTVFJJTkdfUFRS
KHN0cikpLAorCQkJIHJlZ3MsIE9OSUdfT1BUSU9OX05PTkUpOworICAgIGlmICghdG1wcmVnKSBS
UkVHRVhQKHJlKS0+dXNlY250LS07CisgICAgaWYgKHRtcHJlZykgeworCWlmIChSUkVHRVhQKHJl
KS0+dXNlY250KSB7CisJICAgIG9uaWdfZnJlZShyZWcpOworCX0KKwllbHNlIHsKKwkgICAgb25p
Z19mcmVlKFJSRUdFWFBfUFRSKHJlKSk7CisJICAgIFJSRUdFWFBfUFRSKHJlKSA9IHJlZzsKKwl9
CisgICAgfQorICAgIGlmIChyZXN1bHQgPCAwKSB7CisJaWYgKHJlZ3MgPT0gJnJlZ2kpCisJICAg
IG9uaWdfcmVnaW9uX2ZyZWUocmVncywgMCk7CisJaWYgKHJlc3VsdCA9PSBPTklHX01JU01BVENI
KSB7CisJICAgIHJiX2JhY2tyZWZfc2V0KFFuaWwpOworCSAgICByZXR1cm4gZmFsc2U7CisJfQor
CWVsc2UgeworCSAgICBvbmlnX2Vycm9yX2NvZGVfdG9fc3RyKChVQ2hhciopZXJyLCAoaW50KXJl
c3VsdCk7CisJICAgIHJiX3JlZ19yYWlzZShSUkVHRVhQX1NSQ19QVFIocmUpLCBSUkVHRVhQX1NS
Q19MRU4ocmUpLCBlcnIsIHJlKTsKKwl9CisgICAgfQorCisgICAgaWYgKE5JTF9QKG1hdGNoKSkg
eworCWludCBlcnI7CisJbWF0Y2ggPSBtYXRjaF9hbGxvYyhyYl9jTWF0Y2gpOworCWVyciA9IHJi
X3JlZ19yZWdpb25fY29weShSTUFUQ0hfUkVHUyhtYXRjaCksIHJlZ3MpOworCW9uaWdfcmVnaW9u
X2ZyZWUocmVncywgMCk7CisJaWYgKGVycikgcmJfbWVtZXJyb3IoKTsKKyAgICB9CisgICAgZWxz
ZSB7CisJRkxfVU5TRVQobWF0Y2gsIEZMX1RBSU5UKTsKKyAgICB9CisKKyAgICBSTUFUQ0gobWF0
Y2gpLT5zdHIgPSByYl9zdHJfbmV3NChzdHIpOworICAgIE9CSl9JTkZFQ1QobWF0Y2gsIHN0cik7
CisKKyAgICBSTUFUQ0gobWF0Y2gpLT5yZWdleHAgPSByZTsKKyAgICBSTUFUQ0gobWF0Y2gpLT5y
bWF0Y2gtPmNoYXJfb2Zmc2V0X3VwZGF0ZWQgPSAwOworICAgIHJiX2JhY2tyZWZfc2V0KG1hdGNo
KTsKKworICAgIE9CSl9JTkZFQ1QobWF0Y2gsIHJlKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CiBWQUxVRQogcmJfcmVnX250aF9kZWZpbmVkKGludCBudGgsIFZBTFVFIG1hdGNoKQogewpkaWZm
IC0tZ2l0IGEvc3RyaW5nLmMgYi9zdHJpbmcuYwppbmRleCAwNzJmMTMyOWVlLi42NTQyYTRhY2Ix
IDEwMDY0NAotLS0gYS9zdHJpbmcuYworKysgYi9zdHJpbmcuYwpAQCAtOTEyNiw2ICs5MTI2LDcg
QEAgcmJfc3RyX3JwYXJ0aXRpb24oVkFMVUUgc3RyLCBWQUxVRSBzZXApCiAJCQkJCVJTVFJJTkdf
TEVOKHN0ciktcG9zLVJTVFJJTkdfTEVOKHNlcCkpKTsKIH0KIAorZXh0ZXJuIGJvb2wgcmJfcmVn
X3N0YXJ0X3dpdGhfcChWQUxVRSByZSwgVkFMVUUgc3RyKTsKIC8qCiAgKiAgY2FsbC1zZXE6CiAg
KiAgICAgc3RyLnN0YXJ0X3dpdGg/KFtwcmVmaXhlc10rKSAgIC0+IHRydWUgb3IgZmFsc2UKQEAg
LTkxNDYsMTEgKzkxNDcsMjAgQEAgcmJfc3RyX3N0YXJ0X3dpdGgoaW50IGFyZ2MsIFZBTFVFICph
cmd2LCBWQUxVRSBzdHIpCiAKICAgICBmb3IgKGk9MDsgaTxhcmdjOyBpKyspIHsKIAlWQUxVRSB0
bXAgPSBhcmd2W2ldOwotCVN0cmluZ1ZhbHVlKHRtcCk7Ci0JcmJfZW5jX2NoZWNrKHN0ciwgdG1w
KTsKLQlpZiAoUlNUUklOR19MRU4oc3RyKSA8IFJTVFJJTkdfTEVOKHRtcCkpIGNvbnRpbnVlOwot
CWlmIChtZW1jbXAoUlNUUklOR19QVFIoc3RyKSwgUlNUUklOR19QVFIodG1wKSwgUlNUUklOR19M
RU4odG1wKSkgPT0gMCkKLQkgICAgcmV0dXJuIFF0cnVlOworCXN3aXRjaCAoQlVJTFRJTl9UWVBF
KHRtcCkpIHsKKwkgIGNhc2UgVF9SRUdFWFA6CisJICAgIHsKKwkJYm9vbCByID0gcmJfcmVnX3N0
YXJ0X3dpdGhfcCh0bXAsIHN0cik7CisJCWlmIChyKSByZXR1cm4gUXRydWU7CisJICAgIH0KKwkg
ICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICBTdHJpbmdWYWx1ZSh0bXApOworCSAgICByYl9l
bmNfY2hlY2soc3RyLCB0bXApOworCSAgICBpZiAoUlNUUklOR19MRU4oc3RyKSA8IFJTVFJJTkdf
TEVOKHRtcCkpIGNvbnRpbnVlOworCSAgICBpZiAobWVtY21wKFJTVFJJTkdfUFRSKHN0ciksIFJT
VFJJTkdfUFRSKHRtcCksIFJTVFJJTkdfTEVOKHRtcCkpID09IDApCisJCXJldHVybiBRdHJ1ZTsK
Kwl9CiAgICAgfQogICAgIHJldHVybiBRZmFsc2U7CiB9CmBgYAoKCgotLSAKaHR0cHM6Ly9idWdz
LnJ1YnktbGFuZy5vcmcvCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBy
dWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5n
Lm9yZy9jZ2ktYmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==

In This Thread

Prev Next