Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1006)

Unified Diff: src/ast.cc

Issue 1418963009: Experimental support for RegExp lookbehind. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fixed test cases Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ast.h ('k') | src/bootstrapper.cc » ('j') | src/regexp/jsregexp.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast.cc
diff --git a/src/ast.cc b/src/ast.cc
index b5c6cf57ea417cf8a70e266ac83bf82e72d31734..ed9b8d7bc6b72a17e619061b3e67284fe7bfa136 100644
--- a/src/ast.cc
+++ b/src/ast.cc
@@ -850,7 +850,7 @@ Interval RegExpDisjunction::CaptureRegisters() {
}
-Interval RegExpLookahead::CaptureRegisters() {
+Interval RegExpLookaround::CaptureRegisters() {
return body()->CaptureRegisters();
}
@@ -918,8 +918,9 @@ bool RegExpDisjunction::IsAnchoredAtEnd() {
}
-bool RegExpLookahead::IsAnchoredAtStart() {
- return is_positive() && body()->IsAnchoredAtStart();
+bool RegExpLookaround::IsAnchoredAtStart() {
+ return is_positive() && read_direction() == READ_FORWARD &&
+ body()->IsAnchoredAtStart();
}
@@ -1068,8 +1069,10 @@ void* RegExpUnparser::VisitCapture(RegExpCapture* that, void* data) {
}
-void* RegExpUnparser::VisitLookahead(RegExpLookahead* that, void* data) {
- os_ << "(-> " << (that->is_positive() ? "+ " : "- ");
+void* RegExpUnparser::VisitLookaround(RegExpLookaround* that, void* data) {
+ os_ << "(";
+ os_ << (that->read_direction() == RegExpTree::READ_FORWARD ? "->" : "<-");
+ os_ << (that->is_positive() ? " + " : " - ");
that->body()->Accept(this, data);
os_ << ")";
return NULL;
@@ -1096,8 +1099,9 @@ std::ostream& RegExpTree::Print(std::ostream& os, Zone* zone) { // NOLINT
}
-RegExpDisjunction::RegExpDisjunction(ZoneList<RegExpTree*>* alternatives)
- : alternatives_(alternatives) {
+RegExpDisjunction::RegExpDisjunction(ZoneList<RegExpTree*>* alternatives,
+ ReadDirection read_direction)
+ : RegExpTree(read_direction), alternatives_(alternatives) {
DCHECK(alternatives->length() > 1);
RegExpTree* first_alternative = alternatives->at(0);
min_match_ = first_alternative->min_match();
@@ -1118,8 +1122,9 @@ static int IncreaseBy(int previous, int increase) {
}
}
-RegExpAlternative::RegExpAlternative(ZoneList<RegExpTree*>* nodes)
- : nodes_(nodes) {
+RegExpAlternative::RegExpAlternative(ZoneList<RegExpTree*>* nodes,
+ ReadDirection read_direction)
+ : RegExpTree(read_direction), nodes_(nodes) {
DCHECK(nodes->length() > 1);
min_match_ = 0;
max_match_ = 0;
« no previous file with comments | « src/ast.h ('k') | src/bootstrapper.cc » ('j') | src/regexp/jsregexp.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698