| 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);
|
| };
|
|
|
|
|