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

Unified Diff: src/assembler-re2k.h

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
« no previous file with comments | « no previous file | src/assembler-re2k.cc » ('j') | src/regexp-macro-assembler.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/assembler-re2k.h
===================================================================
--- src/assembler-re2k.h (revision 738)
+++ src/assembler-re2k.h (working copy)
@@ -35,55 +35,68 @@
void PushRegister(int index);
void SetRegisterToCurrentPosition(int index, int cp_offset = 0);
void SetRegister(int index, int value);
+ void AdvanceRegister(int index, int by);
void PopCurrentPosition();
void PopBacktrack();
void PopRegister(int index);
void Fail();
- void FailIfWithin(int distance_from_end);
void Succeed();
void Break(); // This instruction will cause a fatal VM error if hit.
- void Bind(Label* l); // binds an unbound label L to the current code position
+ void Bind(Label* l); // Binds an unbound label L to the current code posn.
- void AdvanceCP(int cp_offset = 1);
+ void AdvanceCP(int by);
void GoTo(Label* l);
- // Loads current char into a register.
- void LoadCurrentChar(int cp_offset = 0);
+ // Loads current char into a machine register. Jumps to the label if we
+ // reached the end of the subject string. Fall through otherwise.
+ void LoadCurrentChar(int cp_offset, Label* on_end);
// Checks current char register against a singleton.
void CheckChar(uc16 c, Label* on_mismatch);
void CheckNotChar(uc16 c, Label* on_match);
- // Checks current char register against the magic end-of-input symbol.
- void CheckEnd(Label* on_not_end);
- void CheckNotEnd(Label* on_end);
-
// Checks current char register against a range.
void CheckRange(uc16 start, uc16 end, Label* on_mismatch);
void CheckNotRange(uc16 start, uc16 end, Label* on_match);
- // Checks that the current char is in the range and that the corresponding bit
- // is set in the bitmap.
- void CheckBitmap(uc16 start, uc16 end, const byte* bits, Label* on_mismatch);
- void CheckNotBitmap(uc16 start, uc16 end, const byte* bits, Label* on_match);
-
// Checks current position (plus optional offset) for a match against a
// previous capture. Advances current position by the length of the capture
// iff it matches. The capture is stored in a given register and the
- // the register after.
- void CheckBackref(int capture_index, Label* on_mismatch, int cp_offset = 0);
- void CheckNotBackref(int capture_index, Label* on_match, int cp_offset = 0);
+ // the register after. If a register contains -1 then the other register
+ // mush always contain -1 and the on_mismatch label will never be called.
+ void CheckBackref(int capture_index, Label* on_mismatch);
- // Checks a register for equal, less than or equal, less than, greater than
- // or equal, greater than, not equal.
- void CheckRegisterLt(int reg_index, uint16_t vs, Label* on_less_than);
- void CheckRegisterGe(int reg_index, uint16_t vs, Label* on_greater_equal);
+ // Checks a register for strictly-less-than or greater-than-or-equal.
+ void CheckRegisterLT(int reg_index, uint16_t vs, Label* on_less_than);
+ void CheckRegisterGE(int reg_index, uint16_t vs, Label* on_greater_equal);
+ // Subtracts a 16 bit value from the current character, uses the result to
+ // look up in a bit array, uses the result of that decide whether to fall
+ // though (on 1) or jump to the on_zero label (on 0).
+ void LookupMap1(uc16 start, Label* bit_map, Label* on_zero);
+
+ // Subtracts a 16 bit value from the current character, uses the result to
+ // look up in a 2-bit array, uses the result of that to look up in a label
+ // table and jumps to the label.
+ void LookupMap2(uc16 start,
+ Label* half_nibble_map,
+ const Vector<Label*>& table);
+
+ // Subtracts a 16 bit value from the current character, uses the result to
+ // look up in a byte array, uses the result of that to look up in a label
+ // array and jumps to the label.
+ void LookupMap8(uc16 start, Label* byte_map, const Vector<Label*>& table);
+
+ // Takes the high byte of the current character, uses the result to
+ // look up in a byte array, uses the result of that to look up in a label
+ // array and jumps to the label.
+ void LookupHighMap8(byte start, Label* byte_map, const Vector<Label*>& table);
+
// Code and bitmap emission.
inline void Emit32(uint32_t x);
inline void Emit16(uint32_t x);
@@ -93,6 +106,7 @@
int length();
void Copy(Address a);
+ inline void EmitOrLink(Label* l);
private:
// Don't use this.
Re2kAssembler() { UNREACHABLE(); }
@@ -108,8 +122,6 @@
// True if the assembler owns the buffer, false if buffer is external.
bool own_buffer_;
-
- inline void EmitOrLink(Label* l);
};
« no previous file with comments | « no previous file | src/assembler-re2k.cc » ('j') | src/regexp-macro-assembler.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698