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

Unified Diff: src/interpreter-re2k.cc

Issue 11319: * Add support for positive lookahead assertions and negative... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/regexp2000/
Patch Set: Created 12 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
Index: src/interpreter-re2k.cc
===================================================================
--- src/interpreter-re2k.cc (revision 799)
+++ src/interpreter-re2k.cc (working copy)
@@ -77,8 +77,9 @@
int* registers,
int current) {
const byte* pc = code_base;
- int backtrack_stack[10000];
- int backtrack_stack_space = 10000;
+ static const int kBacktrackStackSize = 10000;
+ int backtrack_stack[kBacktrackStackSize];
+ int backtrack_stack_space = kBacktrackStackSize;
int* backtrack_sp = backtrack_stack;
int current_char = -1;
#ifdef DEBUG
@@ -124,6 +125,20 @@
registers[pc[1]] = current + Load32(pc + 2);
pc += BC_SET_REGISTER_TO_CP_LENGTH;
break;
+ BYTECODE(SET_CP_TO_REGISTER)
+ current = registers[pc[1]];
+ pc += BC_SET_CP_TO_REGISTER_LENGTH;
+ break;
+ BYTECODE(SET_REGISTER_TO_SP)
+ registers[pc[1]] = backtrack_sp - backtrack_stack;
+ pc += BC_SET_REGISTER_TO_SP_LENGTH;
+ break;
+ BYTECODE(SET_SP_TO_REGISTER)
+ backtrack_sp = backtrack_stack + registers[pc[1]];
+ backtrack_stack_space = kBacktrackStackSize -
+ (backtrack_sp - backtrack_stack);
+ pc += BC_SET_SP_TO_REGISTER_LENGTH;
+ break;
BYTECODE(POP_CP)
backtrack_stack_space++;
--backtrack_sp;
@@ -164,7 +179,7 @@
}
BYTECODE(CHECK_CHAR) {
int c = Load16(pc + 1);
- if (c != current_char) {
+ if (c == current_char) {
pc = code_base + Load32(pc + 3);
} else {
pc += BC_CHECK_CHAR_LENGTH;
@@ -173,7 +188,7 @@
}
BYTECODE(CHECK_NOT_CHAR) {
int c = Load16(pc + 1);
- if (c == current_char) {
+ if (c != current_char) {
pc = code_base + Load32(pc + 3);
} else {
pc += BC_CHECK_NOT_CHAR_LENGTH;

Powered by Google App Engine
This is Rietveld 408576698