summaryrefslogtreecommitdiffstats
path: root/src/ast.cc
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-10-22 12:50:53 +0100
committerBen Murdoch <benm@google.com>2010-10-22 20:03:06 +0100
commitf87a203d89e1bbb6708282e0b64dbd13d59b723d (patch)
treed7658572059125113d4052a87e2e2c1251419c64 /src/ast.cc
parent0d5e116f6aee03185f237311a943491bb079a768 (diff)
downloadandroid_external_v8-f87a203d89e1bbb6708282e0b64dbd13d59b723d.tar.gz
android_external_v8-f87a203d89e1bbb6708282e0b64dbd13d59b723d.tar.bz2
android_external_v8-f87a203d89e1bbb6708282e0b64dbd13d59b723d.zip
Update V8 to r5675 as required by WebKit r70209
Change-Id: Ib10adb470d41ca8c109ead5fc893b880e18d489f
Diffstat (limited to 'src/ast.cc')
-rw-r--r--src/ast.cc49
1 files changed, 40 insertions, 9 deletions
diff --git a/src/ast.cc b/src/ast.cc
index f47dffd8..92f14961 100644
--- a/src/ast.cc
+++ b/src/ast.cc
@@ -398,39 +398,70 @@ Interval RegExpQuantifier::CaptureRegisters() {
}
-bool RegExpAssertion::IsAnchored() {
+bool RegExpAssertion::IsAnchoredAtStart() {
return type() == RegExpAssertion::START_OF_INPUT;
}
-bool RegExpAlternative::IsAnchored() {
+bool RegExpAssertion::IsAnchoredAtEnd() {
+ return type() == RegExpAssertion::END_OF_INPUT;
+}
+
+
+bool RegExpAlternative::IsAnchoredAtStart() {
ZoneList<RegExpTree*>* nodes = this->nodes();
for (int i = 0; i < nodes->length(); i++) {
RegExpTree* node = nodes->at(i);
- if (node->IsAnchored()) { return true; }
+ if (node->IsAnchoredAtStart()) { return true; }
+ if (node->max_match() > 0) { return false; }
+ }
+ return false;
+}
+
+
+bool RegExpAlternative::IsAnchoredAtEnd() {
+ ZoneList<RegExpTree*>* nodes = this->nodes();
+ for (int i = nodes->length() - 1; i >= 0; i--) {
+ RegExpTree* node = nodes->at(i);
+ if (node->IsAnchoredAtEnd()) { return true; }
if (node->max_match() > 0) { return false; }
}
return false;
}
-bool RegExpDisjunction::IsAnchored() {
+bool RegExpDisjunction::IsAnchoredAtStart() {
ZoneList<RegExpTree*>* alternatives = this->alternatives();
for (int i = 0; i < alternatives->length(); i++) {
- if (!alternatives->at(i)->IsAnchored())
+ if (!alternatives->at(i)->IsAnchoredAtStart())
return false;
}
return true;
}
-bool RegExpLookahead::IsAnchored() {
- return is_positive() && body()->IsAnchored();
+bool RegExpDisjunction::IsAnchoredAtEnd() {
+ ZoneList<RegExpTree*>* alternatives = this->alternatives();
+ for (int i = 0; i < alternatives->length(); i++) {
+ if (!alternatives->at(i)->IsAnchoredAtEnd())
+ return false;
+ }
+ return true;
+}
+
+
+bool RegExpLookahead::IsAnchoredAtStart() {
+ return is_positive() && body()->IsAnchoredAtStart();
+}
+
+
+bool RegExpCapture::IsAnchoredAtStart() {
+ return body()->IsAnchoredAtStart();
}
-bool RegExpCapture::IsAnchored() {
- return body()->IsAnchored();
+bool RegExpCapture::IsAnchoredAtEnd() {
+ return body()->IsAnchoredAtEnd();
}