OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_JSREGEXP_H_ | 5 #ifndef V8_JSREGEXP_H_ |
6 #define V8_JSREGEXP_H_ | 6 #define V8_JSREGEXP_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/assembler.h" | 9 #include "src/assembler.h" |
10 #include "src/zone-inl.h" | 10 #include "src/zone-inl.h" |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 uc16 to_; | 289 uc16 to_; |
290 }; | 290 }; |
291 | 291 |
292 | 292 |
293 // A set of unsigned integers that behaves especially well on small | 293 // A set of unsigned integers that behaves especially well on small |
294 // integers (< 32). May do zone-allocation. | 294 // integers (< 32). May do zone-allocation. |
295 class OutSet: public ZoneObject { | 295 class OutSet: public ZoneObject { |
296 public: | 296 public: |
297 OutSet() : first_(0), remaining_(NULL), successors_(NULL) { } | 297 OutSet() : first_(0), remaining_(NULL), successors_(NULL) { } |
298 OutSet* Extend(unsigned value, Zone* zone); | 298 OutSet* Extend(unsigned value, Zone* zone); |
299 bool Get(unsigned value); | 299 bool Get(unsigned value) const; |
300 static const unsigned kFirstLimit = 32; | 300 static const unsigned kFirstLimit = 32; |
301 | 301 |
302 private: | 302 private: |
303 // Destructively set a value in this set. In most cases you want | 303 // Destructively set a value in this set. In most cases you want |
304 // to use Extend instead to ensure that only one instance exists | 304 // to use Extend instead to ensure that only one instance exists |
305 // that contains the same values. | 305 // that contains the same values. |
306 void Set(unsigned value, Zone* zone); | 306 void Set(unsigned value, Zone* zone); |
307 | 307 |
308 // The successors are a list of sets that contain the same values | 308 // The successors are a list of sets that contain the same values |
309 // as this set and the one more value that is not present in this | 309 // as this set and the one more value that is not present in this |
(...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 void set_quick_check_performed(QuickCheckDetails* d) { | 1458 void set_quick_check_performed(QuickCheckDetails* d) { |
1459 quick_check_performed_ = *d; | 1459 quick_check_performed_ = *d; |
1460 } | 1460 } |
1461 void InvalidateCurrentCharacter(); | 1461 void InvalidateCurrentCharacter(); |
1462 void AdvanceCurrentPositionInTrace(int by, RegExpCompiler* compiler); | 1462 void AdvanceCurrentPositionInTrace(int by, RegExpCompiler* compiler); |
1463 | 1463 |
1464 private: | 1464 private: |
1465 int FindAffectedRegisters(OutSet* affected_registers, Zone* zone); | 1465 int FindAffectedRegisters(OutSet* affected_registers, Zone* zone); |
1466 void PerformDeferredActions(RegExpMacroAssembler* macro, | 1466 void PerformDeferredActions(RegExpMacroAssembler* macro, |
1467 int max_register, | 1467 int max_register, |
1468 OutSet& affected_registers, | 1468 const OutSet& affected_registers, |
1469 OutSet* registers_to_pop, | 1469 OutSet* registers_to_pop, |
1470 OutSet* registers_to_clear, | 1470 OutSet* registers_to_clear, |
1471 Zone* zone); | 1471 Zone* zone); |
1472 void RestoreAffectedRegisters(RegExpMacroAssembler* macro, | 1472 void RestoreAffectedRegisters(RegExpMacroAssembler* macro, |
1473 int max_register, | 1473 int max_register, |
1474 OutSet& registers_to_pop, | 1474 const OutSet& registers_to_pop, |
1475 OutSet& registers_to_clear); | 1475 const OutSet& registers_to_clear); |
1476 int cp_offset_; | 1476 int cp_offset_; |
1477 DeferredAction* actions_; | 1477 DeferredAction* actions_; |
1478 Label* backtrack_; | 1478 Label* backtrack_; |
1479 RegExpNode* stop_node_; | 1479 RegExpNode* stop_node_; |
1480 Label* loop_label_; | 1480 Label* loop_label_; |
1481 int characters_preloaded_; | 1481 int characters_preloaded_; |
1482 int bound_checked_up_to_; | 1482 int bound_checked_up_to_; |
1483 QuickCheckDetails quick_check_performed_; | 1483 QuickCheckDetails quick_check_performed_; |
1484 int flush_budget_; | 1484 int flush_budget_; |
1485 TriBool at_start_; | 1485 TriBool at_start_; |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1616 Handle<String> sample_subject, | 1616 Handle<String> sample_subject, |
1617 bool is_ascii, Zone* zone); | 1617 bool is_ascii, Zone* zone); |
1618 | 1618 |
1619 static void DotPrint(const char* label, RegExpNode* node, bool ignore_case); | 1619 static void DotPrint(const char* label, RegExpNode* node, bool ignore_case); |
1620 }; | 1620 }; |
1621 | 1621 |
1622 | 1622 |
1623 } } // namespace v8::internal | 1623 } } // namespace v8::internal |
1624 | 1624 |
1625 #endif // V8_JSREGEXP_H_ | 1625 #endif // V8_JSREGEXP_H_ |
OLD | NEW |