5 #ifndef V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_H_ 6 #define V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_H_ 8 #ifdef V8_INTERPRETED_REGEXP 10 #include "src/regexp/regexp-macro-assembler.h" 16 class RegExpMacroAssemblerIrregexp:
public RegExpMacroAssembler {
32 RegExpMacroAssemblerIrregexp(Isolate* isolate, Vector<byte> buffer,
34 virtual ~RegExpMacroAssemblerIrregexp();
36 virtual int stack_limit_slack() {
return 1; }
37 virtual bool CanReadUnaligned() {
return false; }
38 virtual void Bind(Label* label);
39 virtual void AdvanceCurrentPosition(
int by);
40 virtual void PopCurrentPosition();
41 virtual void PushCurrentPosition();
42 virtual void Backtrack();
43 virtual void GoTo(Label* label);
44 virtual void PushBacktrack(Label* label);
45 virtual bool Succeed();
47 virtual void PopRegister(
int register_index);
48 virtual void PushRegister(
int register_index,
49 StackCheckFlag check_stack_limit);
50 virtual void AdvanceRegister(
int reg,
int by);
51 virtual void SetCurrentPositionFromEnd(
int by);
52 virtual void SetRegister(
int register_index,
int to);
53 virtual void WriteCurrentPositionToRegister(
int reg,
int cp_offset);
54 virtual void ClearRegisters(
int reg_from,
int reg_to);
55 virtual void ReadCurrentPositionFromRegister(
int reg);
56 virtual void WriteStackPointerToRegister(
int reg);
57 virtual void ReadStackPointerFromRegister(
int reg);
58 virtual void LoadCurrentCharacter(
int cp_offset,
59 Label* on_end_of_input,
60 bool check_bounds =
true,
62 virtual void CheckCharacter(
unsigned c, Label* on_equal);
63 virtual void CheckCharacterAfterAnd(
unsigned c,
66 virtual void CheckCharacterGT(uc16 limit, Label* on_greater);
67 virtual void CheckCharacterLT(uc16 limit, Label* on_less);
68 virtual void CheckGreedyLoop(Label* on_tos_equals_current_position);
69 virtual void CheckAtStart(Label* on_at_start);
70 virtual void CheckNotAtStart(
int cp_offset, Label* on_not_at_start);
71 virtual void CheckNotCharacter(
unsigned c, Label* on_not_equal);
72 virtual void CheckNotCharacterAfterAnd(
unsigned c,
75 virtual void CheckNotCharacterAfterMinusAnd(uc16 c,
79 virtual void CheckCharacterInRange(uc16 from,
82 virtual void CheckCharacterNotInRange(uc16 from,
84 Label* on_not_in_range);
85 virtual void CheckBitInTable(Handle<ByteArray> table, Label* on_bit_set);
86 virtual void CheckNotBackReference(
int start_reg,
bool read_backward,
88 virtual void CheckNotBackReferenceIgnoreCase(
int start_reg,
89 bool read_backward,
bool unicode,
91 virtual void IfRegisterLT(
int register_index,
int comparand, Label* if_lt);
92 virtual void IfRegisterGE(
int register_index,
int comparand, Label* if_ge);
93 virtual void IfRegisterEqPos(
int register_index, Label* if_eq);
95 virtual IrregexpImplementation Implementation();
96 virtual Handle<HeapObject> GetCode(Handle<String> source);
101 inline void EmitOrLink(Label* label);
111 Vector<byte> buffer_;
118 int advance_current_start_;
119 int advance_current_offset_;
120 int advance_current_end_;
124 static const int kInvalidPC = -1;
126 DISALLOW_IMPLICIT_CONSTRUCTORS(RegExpMacroAssemblerIrregexp);
132 #endif // V8_INTERPRETED_REGEXP 134 #endif // V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_H_