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

From: nobu@...
Date: 2017-07-05 05:27:14 UTC
List: ruby-core #81911
SXNzdWUgIzEzNzEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9idSAoTm9idXlvc2hpIE5ha2FkYSku
CgoKV2lsbCB5b3UgbmVlZCBgJD9gIGFmdGVyIGBzdGFydF93aXRoPyhyZSlgPwoKLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxMzcxMjogU3RyaW5nI3N0
YXJ0X3dpdGg/IHdpdGggcmVnZXhwCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8x
MzcxMiNjaGFuZ2UtNjU2MzgKCiogQXV0aG9yOiBuYXJ1c2UgKFl1aSBOQVJVU0UpCiogU3RhdHVz
OiBPcGVuCiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVlOiAKKiBUYXJnZXQgdmVyc2lvbjog
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3RyaW5nI3N0YXJ0X3dp
dGg/IHNob3VsZCByZWNlaXZlIHJlZ2V4cC4KCldoZW4gSSB3cml0ZSBhIHBhcnNlciwgSSB3YW50
IHRvIGNoZWNrIGEgc3RyaW5nIGlzIHN0YXJ0IHdpdGggYSBwYXR0ZXJuIG9yIG5vdC4KSXQncyBq
dXN0IHRoZSBzYW1lIHRoaW5nIHdpdGggW1N0cmluZ1NjYW5uZXIjbWF0Y2hdKGh0dHBzOi8vcnVi
eS1kb2Mub3JnL3N0ZGxpYi0yLjQuMC9saWJkb2Mvc3Ryc2Nhbi9yZG9jL1N0cmluZ1NjYW5uZXIu
aHRtbCNtZXRob2QtaS1tYXRjaC0zRikKCklmIEkgd2FudCB0byBkbyB0aGUgc2FtZSB0aGluZyB3
aXRoIG5vcm1hbCBzdHJpbmcgbWV0aG9kLCBpdCBuZWVkcyB0byB3cml0ZSBsaWtlIGAvXEEje3Jl
fS8ubWF0Y2go4oCmKWAuCkJ1dCBpZiByZSBpcyBhcmd1bWVudCwgaXQgbmVlZHMgdG8gY3JlYXRl
IGEgbmV3IHRlbXBvcmFyeSByZWdleHAgZXZlcnkgdGltZS4KClRob3VnaCB3ZSBoYXZlIGEgd29y
a2Fyb3VuZCBhcyBmb2xsb3dzIGJ1dCBpdCdzIGJpdCB0cmlja3kuCgpgYGBydWJ5CiJmb28gIi5y
aW5kZXgoL2ZvKy4vLCAwKQpgYGAKCkEgcGF0Y2ggaXMgZm9sbG93aW5nOgoKYGBgZGlmZgpkaWZm
IC0tZ2l0IGEvcmUuYyBiL3JlLmMKaW5kZXggZDBhYTJhNzkyZS4uZjY3MmJhNzVlYyAxMDA2NDQK
LS0tIGEvcmUuYworKysgYi9yZS5jCkBAIC0xNTg4LDYgKzE1ODgsODQgQEAgcmJfcmVnX3NlYXJj
aChWQUxVRSByZSwgVkFMVUUgc3RyLCBsb25nIHBvcywgaW50IHJldmVyc2UpCiAgICAgcmV0dXJu
IHJiX3JlZ19zZWFyY2gwKHJlLCBzdHIsIHBvcywgcmV2ZXJzZSwgMSk7CiB9CiAKK2Jvb2wKK3Ji
X3JlZ19zdGFydF93aXRoX3AoVkFMVUUgcmUsIFZBTFVFIHN0cikKK3sKKyAgICBsb25nIHBvcyA9
IDA7CisgICAgbG9uZyByZXN1bHQ7CisgICAgVkFMVUUgbWF0Y2g7CisgICAgc3RydWN0IHJlX3Jl
Z2lzdGVycyByZWdpLCAqcmVncyA9ICZyZWdpOworICAgIHJlZ2V4X3QgKnJlZzsKKyAgICBpbnQg
dG1wcmVnOworICAgIG9uaWdfZXJybXNnX2J1ZmZlciBlcnIgPSAiIjsKKworICAgIHJlZyA9IHJi
X3JlZ19wcmVwYXJlX3JlMChyZSwgc3RyLCBlcnIpOworICAgIHRtcHJlZyA9IHJlZyAhPSBSUkVH
RVhQX1BUUihyZSk7CisgICAgaWYgKCF0bXByZWcpIFJSRUdFWFAocmUpLT51c2VjbnQrKzsKKwor
ICAgIG1hdGNoID0gcmJfYmFja3JlZl9nZXQoKTsKKyAgICBpZiAoIU5JTF9QKG1hdGNoKSkgewor
CWlmIChGTF9URVNUKG1hdGNoLCBNQVRDSF9CVVNZKSkgeworCSAgICBtYXRjaCA9IFFuaWw7CisJ
fQorCWVsc2UgeworCSAgICByZWdzID0gUk1BVENIX1JFR1MobWF0Y2gpOworCX0KKyAgICB9Cisg
ICAgaWYgKE5JTF9QKG1hdGNoKSkgeworCU1FTVpFUk8ocmVncywgc3RydWN0IHJlX3JlZ2lzdGVy
cywgMSk7CisgICAgfQorICAgIHJlc3VsdCA9IG9uaWdfbWF0Y2gocmVnLAorCQkJIChVQ2hhciop
KFJTVFJJTkdfUFRSKHN0cikpLAorCQkJICgoVUNoYXIqKShSU1RSSU5HX1BUUihzdHIpKSArIFJT
VFJJTkdfTEVOKHN0cikpLAorCQkJIChVQ2hhciopKFJTVFJJTkdfUFRSKHN0cikpLAorCQkJIHJl
Z3MsIE9OSUdfT1BUSU9OX05PTkUpOworICAgIGlmICghdG1wcmVnKSBSUkVHRVhQKHJlKS0+dXNl
Y250LS07CisgICAgaWYgKHRtcHJlZykgeworCWlmIChSUkVHRVhQKHJlKS0+dXNlY250KSB7CisJ
ICAgIG9uaWdfZnJlZShyZWcpOworCX0KKwllbHNlIHsKKwkgICAgb25pZ19mcmVlKFJSRUdFWFBf
UFRSKHJlKSk7CisJICAgIFJSRUdFWFBfUFRSKHJlKSA9IHJlZzsKKwl9CisgICAgfQorICAgIGlm
IChyZXN1bHQgPCAwKSB7CisJaWYgKHJlZ3MgPT0gJnJlZ2kpCisJICAgIG9uaWdfcmVnaW9uX2Zy
ZWUocmVncywgMCk7CisJaWYgKHJlc3VsdCA9PSBPTklHX01JU01BVENIKSB7CisJICAgIHJiX2Jh
Y2tyZWZfc2V0KFFuaWwpOworCSAgICByZXR1cm4gZmFsc2U7CisJfQorCWVsc2UgeworCSAgICBv
bmlnX2Vycm9yX2NvZGVfdG9fc3RyKChVQ2hhciopZXJyLCAoaW50KXJlc3VsdCk7CisJICAgIHJi
X3JlZ19yYWlzZShSUkVHRVhQX1NSQ19QVFIocmUpLCBSUkVHRVhQX1NSQ19MRU4ocmUpLCBlcnIs
IHJlKTsKKwl9CisgICAgfQorCisgICAgaWYgKE5JTF9QKG1hdGNoKSkgeworCWludCBlcnI7CisJ
bWF0Y2ggPSBtYXRjaF9hbGxvYyhyYl9jTWF0Y2gpOworCWVyciA9IHJiX3JlZ19yZWdpb25fY29w
eShSTUFUQ0hfUkVHUyhtYXRjaCksIHJlZ3MpOworCW9uaWdfcmVnaW9uX2ZyZWUocmVncywgMCk7
CisJaWYgKGVycikgcmJfbWVtZXJyb3IoKTsKKyAgICB9CisgICAgZWxzZSB7CisJRkxfVU5TRVQo
bWF0Y2gsIEZMX1RBSU5UKTsKKyAgICB9CisKKyAgICBSTUFUQ0gobWF0Y2gpLT5zdHIgPSByYl9z
dHJfbmV3NChzdHIpOworICAgIE9CSl9JTkZFQ1QobWF0Y2gsIHN0cik7CisKKyAgICBSTUFUQ0go
bWF0Y2gpLT5yZWdleHAgPSByZTsKKyAgICBSTUFUQ0gobWF0Y2gpLT5ybWF0Y2gtPmNoYXJfb2Zm
c2V0X3VwZGF0ZWQgPSAwOworICAgIHJiX2JhY2tyZWZfc2V0KG1hdGNoKTsKKworICAgIE9CSl9J
TkZFQ1QobWF0Y2gsIHJlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBWQUxVRQogcmJfcmVn
X250aF9kZWZpbmVkKGludCBudGgsIFZBTFVFIG1hdGNoKQogewpkaWZmIC0tZ2l0IGEvc3RyaW5n
LmMgYi9zdHJpbmcuYwppbmRleCAwNzJmMTMyOWVlLi42NTQyYTRhY2IxIDEwMDY0NAotLS0gYS9z
dHJpbmcuYworKysgYi9zdHJpbmcuYwpAQCAtOTEyNiw2ICs5MTI2LDcgQEAgcmJfc3RyX3JwYXJ0
aXRpb24oVkFMVUUgc3RyLCBWQUxVRSBzZXApCiAJCQkJCVJTVFJJTkdfTEVOKHN0ciktcG9zLVJT
VFJJTkdfTEVOKHNlcCkpKTsKIH0KIAorZXh0ZXJuIGJvb2wgcmJfcmVnX3N0YXJ0X3dpdGhfcChW
QUxVRSByZSwgVkFMVUUgc3RyKTsKIC8qCiAgKiAgY2FsbC1zZXE6CiAgKiAgICAgc3RyLnN0YXJ0
X3dpdGg/KFtwcmVmaXhlc10rKSAgIC0+IHRydWUgb3IgZmFsc2UKQEAgLTkxNDYsMTEgKzkxNDcs
MjAgQEAgcmJfc3RyX3N0YXJ0X3dpdGgoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBzdHIp
CiAKICAgICBmb3IgKGk9MDsgaTxhcmdjOyBpKyspIHsKIAlWQUxVRSB0bXAgPSBhcmd2W2ldOwot
CVN0cmluZ1ZhbHVlKHRtcCk7Ci0JcmJfZW5jX2NoZWNrKHN0ciwgdG1wKTsKLQlpZiAoUlNUUklO
R19MRU4oc3RyKSA8IFJTVFJJTkdfTEVOKHRtcCkpIGNvbnRpbnVlOwotCWlmIChtZW1jbXAoUlNU
UklOR19QVFIoc3RyKSwgUlNUUklOR19QVFIodG1wKSwgUlNUUklOR19MRU4odG1wKSkgPT0gMCkK
LQkgICAgcmV0dXJuIFF0cnVlOworCXN3aXRjaCAoQlVJTFRJTl9UWVBFKHRtcCkpIHsKKwkgIGNh
c2UgVF9SRUdFWFA6CisJICAgIHsKKwkJYm9vbCByID0gcmJfcmVnX3N0YXJ0X3dpdGhfcCh0bXAs
IHN0cik7CisJCWlmIChyKSByZXR1cm4gUXRydWU7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBk
ZWZhdWx0OgorCSAgICBTdHJpbmdWYWx1ZSh0bXApOworCSAgICByYl9lbmNfY2hlY2soc3RyLCB0
bXApOworCSAgICBpZiAoUlNUUklOR19MRU4oc3RyKSA8IFJTVFJJTkdfTEVOKHRtcCkpIGNvbnRp
bnVlOworCSAgICBpZiAobWVtY21wKFJTVFJJTkdfUFRSKHN0ciksIFJTVFJJTkdfUFRSKHRtcCks
IFJTVFJJTkdfTEVOKHRtcCkpID09IDApCisJCXJldHVybiBRdHJ1ZTsKKwl9CiAgICAgfQogICAg
IHJldHVybiBRZmFsc2U7CiB9CmBgYAoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcv
CgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1
YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21h
aWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==

In This Thread

Prev Next