Index: src/jsregexp.h |
=================================================================== |
--- src/jsregexp.h (revision 1426) |
+++ src/jsregexp.h (working copy) |
@@ -51,7 +51,6 @@ |
// Parses the RegExp pattern and prepares the JSRegExp object with |
// generic data and choice of implementation - as well as what |
// the implementation wants to store in the data field. |
- // Returns false if compilation fails. |
static Handle<Object> Compile(Handle<JSRegExp> re, |
Handle<String> pattern, |
Handle<String> flags); |
@@ -60,45 +59,38 @@ |
// This function calls the garbage collector if necessary. |
static Handle<Object> Exec(Handle<JSRegExp> regexp, |
Handle<String> subject, |
- int index, |
- Handle<JSArray> lastMatchInfo); |
+ Handle<Object> index); |
// Call RegExp.prototyp.exec(string) in a loop. |
// Used by String.prototype.match and String.prototype.replace. |
// This function calls the garbage collector if necessary. |
static Handle<Object> ExecGlobal(Handle<JSRegExp> regexp, |
- Handle<String> subject, |
- Handle<JSArray> lastMatchInfo); |
+ Handle<String> subject); |
// Prepares a JSRegExp object with Irregexp-specific data. |
- static void IrregexpPrepare(Handle<JSRegExp> re, |
- Handle<String> pattern, |
- JSRegExp::Flags flags, |
- int capture_register_count); |
+ static Handle<Object> IrregexpPrepare(Handle<JSRegExp> re, |
+ Handle<String> pattern, |
+ JSRegExp::Flags flags); |
- static void AtomCompile(Handle<JSRegExp> re, |
- Handle<String> pattern, |
- JSRegExp::Flags flags, |
- Handle<String> match_pattern); |
+ static Handle<Object> AtomCompile(Handle<JSRegExp> re, |
+ Handle<String> pattern, |
+ JSRegExp::Flags flags, |
+ Handle<String> match_pattern); |
static Handle<Object> AtomExec(Handle<JSRegExp> regexp, |
Handle<String> subject, |
- int index, |
- Handle<JSArray> lastMatchInfo); |
+ Handle<Object> index); |
static Handle<Object> AtomExecGlobal(Handle<JSRegExp> regexp, |
- Handle<String> subject, |
- Handle<JSArray> lastMatchInfo); |
+ Handle<String> subject); |
// Execute an Irregexp bytecode pattern. |
static Handle<Object> IrregexpExec(Handle<JSRegExp> regexp, |
Handle<String> subject, |
- int index, |
- Handle<JSArray> lastMatchInfo); |
+ Handle<Object> index); |
static Handle<Object> IrregexpExecGlobal(Handle<JSRegExp> regexp, |
- Handle<String> subject, |
- Handle<JSArray> lastMatchInfo); |
+ Handle<String> subject); |
static void NewSpaceCollectionPrologue(); |
static void OldSpaceCollectionPrologue(); |
@@ -109,49 +101,26 @@ |
static Handle<String> StringToTwoByte(Handle<String> pattern); |
static Handle<String> CachedStringToTwoByte(Handle<String> pattern); |
- // Offsets in the lastMatchInfo array. |
- static const int kLastCaptureCount = 0; |
- static const int kLastSubject = 1; |
- static const int kLastInput = 2; |
- static const int kFirstCapture = 1; |
- static const int kLastMatchOverhead = 3; |
- static int GetCapture(FixedArray* array, int index) { |
- return Smi::cast(array->get(index + kFirstCapture))->value(); |
- } |
- static void SetLastCaptureCount(FixedArray* array, int to) { |
- array->set(kLastCaptureCount, Smi::FromInt(to)); |
- } |
- static void SetLastSubject(FixedArray* array, String* to) { |
- int capture_count = GetLastCaptureCount(array); |
- array->set(capture_count + kLastSubject, to); |
- } |
- static void SetLastInput(FixedArray* array, String* to) { |
- int capture_count = GetLastCaptureCount(array); |
- array->set(capture_count + kLastInput, to); |
- } |
- static void SetCapture(FixedArray* array, int index, int to) { |
- array->set(index + kFirstCapture, Smi::FromInt(to)); |
- } |
+ static const int kIrregexpImplementationIndex = 0; |
+ static const int kIrregexpNumberOfCapturesIndex = 1; |
+ static const int kIrregexpNumberOfRegistersIndex = 2; |
+ static const int kIrregexpCodeIndex = 3; |
+ static const int kIrregexpDataLength = 4; |
private: |
static String* last_ascii_string_; |
static String* two_byte_cached_string_; |
- static bool EnsureCompiledIrregexp(Handle<JSRegExp> re, bool is_ascii); |
+ static int IrregexpNumberOfCaptures(Handle<FixedArray> re); |
+ static int IrregexpNumberOfRegisters(Handle<FixedArray> re); |
+ static Handle<ByteArray> IrregexpByteCode(Handle<FixedArray> re); |
+ static Handle<Code> IrregexpNativeCode(Handle<FixedArray> re); |
- static int IrregexpMaxRegisterCount(FixedArray* re); |
- static void SetIrregexpMaxRegisterCount(FixedArray* re, int value); |
- static int IrregexpNumberOfCaptures(FixedArray* re); |
- static int IrregexpNumberOfRegisters(FixedArray* re); |
- static ByteArray* IrregexpByteCode(FixedArray* re, bool is_ascii); |
- static Code* IrregexpNativeCode(FixedArray* re, bool is_ascii); |
- |
// On a successful match, the result is a JSArray containing |
// captured positions. On a failure, the result is the null value. |
// Returns an empty handle in case of an exception. |
static Handle<Object> IrregexpExecOnce(Handle<FixedArray> regexp, |
int num_captures, |
- Handle<JSArray> lastMatchInfo, |
Handle<String> subject16, |
int previous_index, |
int* ovector, |
@@ -165,10 +134,6 @@ |
int character_position, |
int utf8_position); |
- // Used to access the lastMatchInfo array. |
- static int GetLastCaptureCount(FixedArray* array) { |
- return Smi::cast(array->get(kLastCaptureCount))->value(); |
- } |
// A one element cache of the last utf8_subject string and its length. The |
// subject JS String object is cached in the heap. We also cache a |
// translation between position and utf8 position. |
@@ -1354,26 +1319,12 @@ |
class RegExpEngine: public AllStatic { |
public: |
- struct CompilationResult { |
- explicit CompilationResult(const char* error_message) |
- : error_message(error_message), |
- code(Heap::the_hole_value()), |
- num_registers(0) {} |
- CompilationResult(Object* code, int registers) |
- : error_message(NULL), |
- code(code), |
- num_registers(registers) {} |
- const char* error_message; |
- Object* code; |
- int num_registers; |
- }; |
+ static Handle<FixedArray> Compile(RegExpCompileData* input, |
+ bool ignore_case, |
+ bool multiline, |
+ Handle<String> pattern, |
+ bool is_ascii); |
- static CompilationResult Compile(RegExpCompileData* input, |
- bool ignore_case, |
- bool multiline, |
- Handle<String> pattern, |
- bool is_ascii); |
- |
static void DotPrint(const char* label, RegExpNode* node, bool ignore_case); |
}; |