OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ | 5 #ifndef RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ |
6 #define RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ | 6 #define RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ |
7 | 7 |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/intermediate_language.h" | 9 #include "vm/intermediate_language.h" |
10 #include "vm/object.h" | 10 #include "vm/object.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 // throw the exception. | 25 // throw the exception. |
26 // FAILURE: Matching failed. | 26 // FAILURE: Matching failed. |
27 // SUCCESS: Matching succeeded, and the output array has been filled with | 27 // SUCCESS: Matching succeeded, and the output array has been filled with |
28 // capture positions. | 28 // capture positions. |
29 enum Result { RETRY = -2, EXCEPTION = -1, FAILURE = 0, SUCCESS = 1 }; | 29 enum Result { RETRY = -2, EXCEPTION = -1, FAILURE = 0, SUCCESS = 1 }; |
30 | 30 |
31 IRRegExpMacroAssembler(intptr_t specialization_cid, | 31 IRRegExpMacroAssembler(intptr_t specialization_cid, |
32 intptr_t capture_count, | 32 intptr_t capture_count, |
33 const ParsedFunction* parsed_function, | 33 const ParsedFunction* parsed_function, |
34 const ZoneGrowableArray<const ICData*>& ic_data_array, | 34 const ZoneGrowableArray<const ICData*>& ic_data_array, |
| 35 intptr_t osr_id, |
35 Zone* zone); | 36 Zone* zone); |
36 virtual ~IRRegExpMacroAssembler(); | 37 virtual ~IRRegExpMacroAssembler(); |
37 | 38 |
38 virtual bool CanReadUnaligned(); | 39 virtual bool CanReadUnaligned(); |
39 | 40 |
40 static RawArray* Execute(const RegExp& regexp, | 41 static RawArray* Execute(const RegExp& regexp, |
41 const String& input, | 42 const String& input, |
42 const Smi& start_offset, | 43 const Smi& start_offset, |
43 bool sticky, | 44 bool sticky, |
44 Zone* zone); | 45 Zone* zone); |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 // current position, into the current-character register. | 278 // current position, into the current-character register. |
278 void LoadCurrentCharacterUnchecked(intptr_t cp_offset, | 279 void LoadCurrentCharacterUnchecked(intptr_t cp_offset, |
279 intptr_t character_count); | 280 intptr_t character_count); |
280 | 281 |
281 // Returns the character within the passed string at the specified index. | 282 // Returns the character within the passed string at the specified index. |
282 Value* CharacterAt(LocalVariable* index); | 283 Value* CharacterAt(LocalVariable* index); |
283 | 284 |
284 // Load a number of characters starting from index in the pattern string. | 285 // Load a number of characters starting from index in the pattern string. |
285 Value* LoadCodeUnitsAt(LocalVariable* index, intptr_t character_count); | 286 Value* LoadCodeUnitsAt(LocalVariable* index, intptr_t character_count); |
286 | 287 |
287 // Check whether preemption has been requested. | 288 // Check whether preemption has been requested. Also serves as an OSR entry. |
288 void CheckPreemption(); | 289 void CheckPreemption(bool is_backtrack); |
289 | 290 |
290 // Byte size of chars in the string to match (decided by the Mode argument) | 291 // Byte size of chars in the string to match (decided by the Mode argument) |
291 inline intptr_t char_size() { return static_cast<int>(mode_); } | 292 inline intptr_t char_size() { return static_cast<int>(mode_); } |
292 | 293 |
293 // Equivalent to a conditional branch to the label, unless the label | 294 // Equivalent to a conditional branch to the label, unless the label |
294 // is NULL, in which case it is a conditional Backtrack. | 295 // is NULL, in which case it is a conditional Backtrack. |
295 void BranchOrBacktrack(ComparisonInstr* comparison, | 296 void BranchOrBacktrack(ComparisonInstr* comparison, |
296 BlockLabel* true_successor); | 297 BlockLabel* true_successor); |
297 | 298 |
298 // Set up all local variables and parameters. | 299 // Set up all local variables and parameters. |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 IdAllocator temp_id_; | 436 IdAllocator temp_id_; |
436 IdAllocator arg_id_; | 437 IdAllocator arg_id_; |
437 IdAllocator local_id_; | 438 IdAllocator local_id_; |
438 IdAllocator indirect_id_; | 439 IdAllocator indirect_id_; |
439 }; | 440 }; |
440 | 441 |
441 | 442 |
442 } // namespace dart | 443 } // namespace dart |
443 | 444 |
444 #endif // RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ | 445 #endif // RUNTIME_VM_REGEXP_ASSEMBLER_IR_H_ |
OLD | NEW |