diff options
author | Bert Belder <bertbelder@gmail.com> | 2012-06-13 15:34:45 +0200 |
---|---|---|
committer | Bert Belder <bertbelder@gmail.com> | 2012-06-14 01:37:13 +0200 |
commit | 50464cd4f49e40f4fe792ff46a81052319a222e9 (patch) | |
tree | 1fe524b2e6c0eb3c459142cd27539f88e1a3f63c /deps/v8/src/regexp-macro-assembler.h | |
parent | 09be360a0fee2c7619bae8c4248f9ed3d79d1b30 (diff) | |
download | node-50464cd4f49e40f4fe792ff46a81052319a222e9.tar.gz |
v8: upgrade to v3.11.10
Diffstat (limited to 'deps/v8/src/regexp-macro-assembler.h')
-rw-r--r-- | deps/v8/src/regexp-macro-assembler.h | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/deps/v8/src/regexp-macro-assembler.h b/deps/v8/src/regexp-macro-assembler.h index 0314c707c..bcf36735c 100644 --- a/deps/v8/src/regexp-macro-assembler.h +++ b/deps/v8/src/regexp-macro-assembler.h @@ -1,4 +1,4 @@ -// Copyright 2008 the V8 project authors. All rights reserved. +// Copyright 2012 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -45,6 +45,11 @@ class RegExpMacroAssembler { static const int kMaxRegister = (1 << 16) - 1; static const int kMaxCPOffset = (1 << 15) - 1; static const int kMinCPOffset = -(1 << 15); + + static const int kTableSizeBits = 7; + static const int kTableSize = 1 << kTableSizeBits; + static const int kTableMask = kTableSize - 1; + enum IrregexpImplementation { kIA32Implementation, kARMImplementation, @@ -58,7 +63,7 @@ class RegExpMacroAssembler { kCheckStackLimit = true }; - RegExpMacroAssembler(); + explicit RegExpMacroAssembler(Zone* zone); virtual ~RegExpMacroAssembler(); // The maximal number of pushes between stack checks. Users must supply // kCheckStackLimit flag to push operations (instead of kNoStackLimitCheck) @@ -106,15 +111,22 @@ class RegExpMacroAssembler { virtual void CheckNotCharacterAfterAnd(unsigned c, unsigned and_with, Label* on_not_equal) = 0; - // Subtract a constant from the current character, then or with the given + // Subtract a constant from the current character, then and with the given // constant and then check for a match with c. virtual void CheckNotCharacterAfterMinusAnd(uc16 c, uc16 minus, uc16 and_with, Label* on_not_equal) = 0; - virtual void CheckNotRegistersEqual(int reg1, - int reg2, - Label* on_not_equal) = 0; + virtual void CheckCharacterInRange(uc16 from, + uc16 to, // Both inclusive. + Label* on_in_range) = 0; + virtual void CheckCharacterNotInRange(uc16 from, + uc16 to, // Both inclusive. + Label* on_not_in_range) = 0; + + // The current character (modulus the kTableSize) is looked up in the byte + // array, and if the found byte is non-zero, we jump to the on_bit_set label. + virtual void CheckBitInTable(Handle<ByteArray> table, Label* on_bit_set) = 0; // Checks whether the given offset from the current position is before // the end of the string. May overwrite the current character. @@ -158,7 +170,8 @@ class RegExpMacroAssembler { virtual void ReadStackPointerFromRegister(int reg) = 0; virtual void SetCurrentPositionFromEnd(int by) = 0; virtual void SetRegister(int register_index, int to) = 0; - virtual void Succeed() = 0; + // Return whether the matching (with a global regexp) will be restarted. + virtual bool Succeed() = 0; virtual void WriteCurrentPositionToRegister(int reg, int cp_offset) = 0; virtual void ClearRegisters(int reg_from, int reg_to) = 0; virtual void WriteStackPointerToRegister(int reg) = 0; @@ -167,8 +180,21 @@ class RegExpMacroAssembler { void set_slow_safe(bool ssc) { slow_safe_compiler_ = ssc; } bool slow_safe() { return slow_safe_compiler_; } + enum GlobalMode { NOT_GLOBAL, GLOBAL, GLOBAL_NO_ZERO_LENGTH_CHECK }; + // Set whether the regular expression has the global flag. Exiting due to + // a failure in a global regexp may still mean success overall. + inline void set_global_mode(GlobalMode mode) { global_mode_ = mode; } + inline bool global() { return global_mode_ != NOT_GLOBAL; } + inline bool global_with_zero_length_check() { + return global_mode_ == GLOBAL; + } + + Zone* zone() const { return zone_; } + private: bool slow_safe_compiler_; + bool global_mode_; + Zone* zone_; }; @@ -190,7 +216,7 @@ class NativeRegExpMacroAssembler: public RegExpMacroAssembler { // capture positions. enum Result { RETRY = -2, EXCEPTION = -1, FAILURE = 0, SUCCESS = 1 }; - NativeRegExpMacroAssembler(); + explicit NativeRegExpMacroAssembler(Zone* zone); virtual ~NativeRegExpMacroAssembler(); virtual bool CanReadUnaligned(); @@ -233,6 +259,7 @@ class NativeRegExpMacroAssembler: public RegExpMacroAssembler { const byte* input_start, const byte* input_end, int* output, + int output_size, Isolate* isolate); }; |