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

Unified Diff: src/assembler-re2k.cc

Issue 10830: * We want to be able to find atoms and character classes without advancing th... (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/assembler-re2k.cc
===================================================================
--- src/assembler-re2k.cc (revision 738)
+++ src/assembler-re2k.cc (working copy)
@@ -87,6 +87,14 @@
}
+void Re2kAssembler::AdvanceRegister(int index, int by) {
+ ASSERT(index >= 0);
+ Emit(BC_ADVANCE_REGISTER);
+ Emit(index);
+ Emit32(by);
+}
+
+
void Re2kAssembler::PopCurrentPosition() {
Emit(BC_POP_CP);
}
@@ -113,12 +121,6 @@
}
-void Re2kAssembler::FailIfWithin(int distance_from_end) {
- Emit(BC_FAIL_IF_WITHIN);
- Emit32(distance_from_end);
-}
-
-
void Re2kAssembler::Succeed() {
Emit(BC_SUCCEED);
}
@@ -150,9 +152,10 @@
}
-void Re2kAssembler::LoadCurrentChar(int cp_offset) {
+void Re2kAssembler::LoadCurrentChar(int cp_offset, Label* on_end) {
Emit(BC_LOAD_CURRENT_CHAR);
Emit32(cp_offset);
+ EmitOrLink(on_end);
}
@@ -170,19 +173,10 @@
}
-void Re2kAssembler::CheckEnd(Label* on_not_end) {
- Emit(BC_CHECK_END);
- EmitOrLink(on_not_end);
-}
-
-
-void Re2kAssembler::CheckNotEnd(Label* on_end) {
- Emit(BC_CHECK_NOT_END);
- EmitOrLink(on_end);
-}
-
-
void Re2kAssembler::CheckRange(uc16 start, uc16 end, Label* on_mismatch) {
+ if (start == end) {
+ CheckChar(start, on_mismatch);
+ }
Emit(BC_CHECK_RANGE);
Emit16(start);
Emit16(end);
@@ -199,25 +193,14 @@
void Re2kAssembler::CheckBackref(int capture_index,
- Label* on_mismatch,
- int cp_offset) {
+ Label* on_mismatch) {
Emit(BC_CHECK_BACKREF);
- Emit32(cp_offset);
+ Emit32(0);
Emit(capture_index);
EmitOrLink(on_mismatch);
}
-void Re2kAssembler::CheckNotBackref(int capture_index,
- Label* on_match,
- int cp_offset) {
- Emit(BC_CHECK_NOT_BACKREF);
- Emit32(cp_offset);
- Emit(capture_index);
- EmitOrLink(on_match);
-}
-
-
void Re2kAssembler::CheckRegister(int byte_code,
int reg_index,
uint16_t vs,
@@ -229,20 +212,70 @@
}
-void Re2kAssembler::CheckRegisterLt(int reg_index,
+void Re2kAssembler::CheckRegisterLT(int reg_index,
uint16_t vs,
Label* on_less_than) {
CheckRegister(BC_CHECK_REGISTER_LT, reg_index, vs, on_less_than);
}
-void Re2kAssembler::CheckRegisterGe(int reg_index,
+void Re2kAssembler::CheckRegisterGE(int reg_index,
uint16_t vs,
Label* on_greater_than_equal) {
CheckRegister(BC_CHECK_REGISTER_GE, reg_index, vs, on_greater_than_equal);
}
+void Re2kAssembler::LookupMap1(uc16 start, Label* bit_map, Label* on_zero) {
+ Emit(BC_LOOKUP_MAP1);
+ Emit16(start);
+ EmitOrLink(bit_map);
+ EmitOrLink(on_zero);
+}
+
+
+void Re2kAssembler::LookupMap2(uc16 start,
+ Label* half_nibble_map,
+ const Vector<Label*>& table) {
+ Emit(BC_LOOKUP_MAP2);
+ Emit16(start);
+ EmitOrLink(half_nibble_map);
+ ASSERT(table.length() > 0);
+ ASSERT(table.length() <= 4);
+ for (int i = 0; i < table.length(); i++) {
+ EmitOrLink(table[i]);
+ }
+}
+
+
+void Re2kAssembler::LookupMap8(uc16 start,
+ Label* byte_map,
+ const Vector<Label*>& table) {
+ Emit(BC_LOOKUP_MAP8);
+ Emit16(start);
+ EmitOrLink(byte_map);
+ ASSERT(table.length() > 0);
+ ASSERT(table.length() <= 256);
+ for (int i = 0; i < table.length(); i++) {
+ EmitOrLink(table[i]);
+ }
+}
+
+
+void Re2kAssembler::LookupHighMap8(byte start,
+ Label* byte_map,
+ const Vector<Label*>& table) {
+ Emit(BC_LOOKUP_HI_MAP8);
+ Emit(start);
+ EmitOrLink(byte_map);
+ ASSERT(table.length() > 0);
+ ASSERT(table.length() <= 256);
+ for (int i = 0; i < table.length(); i++) {
+ EmitOrLink(table[i]);
+ }
+}
+
+
int Re2kAssembler::length() {
return pc_;
}
« no previous file with comments | « src/assembler-re2k.h ('k') | src/bytecodes-re2k.h » ('j') | src/regexp-macro-assembler.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698