blob: ac76cfdb0674189906a59882c4183371ef5ae4fb [file] [log] [blame]
Steve Blocka7e24c12009-10-30 11:49:00 +00001// Copyright 2008 the V8 project authors. All rights reserved.
Ben Murdochb8a8cc12014-11-26 15:28:44 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Steve Blocka7e24c12009-10-30 11:49:00 +00004
5#ifndef V8_REGEXP_MACRO_ASSEMBLER_TRACER_H_
6#define V8_REGEXP_MACRO_ASSEMBLER_TRACER_H_
7
8namespace v8 {
9namespace internal {
10
11// Decorator on a RegExpMacroAssembler that write all calls.
12class RegExpMacroAssemblerTracer: public RegExpMacroAssembler {
13 public:
14 explicit RegExpMacroAssemblerTracer(RegExpMacroAssembler* assembler);
15 virtual ~RegExpMacroAssemblerTracer();
16 virtual int stack_limit_slack() { return assembler_->stack_limit_slack(); }
17 virtual bool CanReadUnaligned() { return assembler_->CanReadUnaligned(); }
18 virtual void AdvanceCurrentPosition(int by); // Signed cp change.
19 virtual void AdvanceRegister(int reg, int by); // r[reg] += by.
20 virtual void Backtrack();
21 virtual void Bind(Label* label);
22 virtual void CheckAtStart(Label* on_at_start);
Ben Murdochb8e0da22011-05-16 14:20:40 +010023 virtual void CheckCharacter(unsigned c, Label* on_equal);
24 virtual void CheckCharacterAfterAnd(unsigned c,
25 unsigned and_with,
Steve Blocka7e24c12009-10-30 11:49:00 +000026 Label* on_equal);
27 virtual void CheckCharacterGT(uc16 limit, Label* on_greater);
28 virtual void CheckCharacterLT(uc16 limit, Label* on_less);
Steve Blocka7e24c12009-10-30 11:49:00 +000029 virtual void CheckGreedyLoop(Label* on_tos_equals_current_position);
30 virtual void CheckNotAtStart(Label* on_not_at_start);
31 virtual void CheckNotBackReference(int start_reg, Label* on_no_match);
32 virtual void CheckNotBackReferenceIgnoreCase(int start_reg,
33 Label* on_no_match);
Ben Murdochb8e0da22011-05-16 14:20:40 +010034 virtual void CheckNotCharacter(unsigned c, Label* on_not_equal);
35 virtual void CheckNotCharacterAfterAnd(unsigned c,
36 unsigned and_with,
Steve Blocka7e24c12009-10-30 11:49:00 +000037 Label* on_not_equal);
38 virtual void CheckNotCharacterAfterMinusAnd(uc16 c,
39 uc16 minus,
40 uc16 and_with,
41 Label* on_not_equal);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000042 virtual void CheckCharacterInRange(uc16 from,
43 uc16 to,
44 Label* on_in_range);
45 virtual void CheckCharacterNotInRange(uc16 from,
46 uc16 to,
47 Label* on_not_in_range);
48 virtual void CheckBitInTable(Handle<ByteArray> table, Label* on_bit_set);
Steve Blocka7e24c12009-10-30 11:49:00 +000049 virtual bool CheckSpecialCharacterClass(uc16 type,
Steve Blocka7e24c12009-10-30 11:49:00 +000050 Label* on_no_match);
51 virtual void Fail();
Steve Block053d10c2011-06-13 19:13:29 +010052 virtual Handle<HeapObject> GetCode(Handle<String> source);
Steve Blocka7e24c12009-10-30 11:49:00 +000053 virtual void GoTo(Label* label);
54 virtual void IfRegisterGE(int reg, int comparand, Label* if_ge);
55 virtual void IfRegisterLT(int reg, int comparand, Label* if_lt);
56 virtual void IfRegisterEqPos(int reg, Label* if_eq);
57 virtual IrregexpImplementation Implementation();
58 virtual void LoadCurrentCharacter(int cp_offset,
59 Label* on_end_of_input,
60 bool check_bounds = true,
61 int characters = 1);
62 virtual void PopCurrentPosition();
63 virtual void PopRegister(int register_index);
64 virtual void PushBacktrack(Label* label);
65 virtual void PushCurrentPosition();
66 virtual void PushRegister(int register_index,
67 StackCheckFlag check_stack_limit);
68 virtual void ReadCurrentPositionFromRegister(int reg);
69 virtual void ReadStackPointerFromRegister(int reg);
Ben Murdochf87a2032010-10-22 12:50:53 +010070 virtual void SetCurrentPositionFromEnd(int by);
Steve Blocka7e24c12009-10-30 11:49:00 +000071 virtual void SetRegister(int register_index, int to);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000072 virtual bool Succeed();
Steve Blocka7e24c12009-10-30 11:49:00 +000073 virtual void WriteCurrentPositionToRegister(int reg, int cp_offset);
74 virtual void ClearRegisters(int reg_from, int reg_to);
75 virtual void WriteStackPointerToRegister(int reg);
Ben Murdoch589d6972011-11-30 16:04:58 +000076
Steve Blocka7e24c12009-10-30 11:49:00 +000077 private:
78 RegExpMacroAssembler* assembler_;
79};
80
81}} // namespace v8::internal
82
83#endif // V8_REGEXP_MACRO_ASSEMBLER_TRACER_H_