| Index: src/jsregexp.h
|
| ===================================================================
|
| --- src/jsregexp.h (revision 1374)
|
| +++ src/jsregexp.h (working copy)
|
| @@ -59,13 +59,15 @@
|
| // This function calls the garbage collector if necessary.
|
| static Handle<Object> Exec(Handle<JSRegExp> regexp,
|
| Handle<String> subject,
|
| - Handle<Object> index);
|
| + Smi* index,
|
| + Handle<JSArray> lastMatchInfo);
|
|
|
| // 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<String> subject,
|
| + Handle<JSArray> lastMatchInfo);
|
|
|
| // Prepares a JSRegExp object with Irregexp-specific data.
|
| static Handle<Object> IrregexpPrepare(Handle<JSRegExp> re,
|
| @@ -79,18 +81,22 @@
|
| Handle<String> match_pattern);
|
| static Handle<Object> AtomExec(Handle<JSRegExp> regexp,
|
| Handle<String> subject,
|
| - Handle<Object> index);
|
| + Smi* index,
|
| + Handle<JSArray> lastMatchInfo);
|
|
|
| static Handle<Object> AtomExecGlobal(Handle<JSRegExp> regexp,
|
| - Handle<String> subject);
|
| + Handle<String> subject,
|
| + Handle<JSArray> lastMatchInfo);
|
|
|
| // Execute an Irregexp bytecode pattern.
|
| static Handle<Object> IrregexpExec(Handle<JSRegExp> regexp,
|
| Handle<String> subject,
|
| - Handle<Object> index);
|
| + Smi* index,
|
| + Handle<JSArray> lastMatchInfo);
|
|
|
| static Handle<Object> IrregexpExecGlobal(Handle<JSRegExp> regexp,
|
| - Handle<String> subject);
|
| + Handle<String> subject,
|
| + Handle<JSArray> lastMatchInfo);
|
|
|
| static void NewSpaceCollectionPrologue();
|
| static void OldSpaceCollectionPrologue();
|
| @@ -107,6 +113,30 @@
|
| static const int kIrregexpCodeIndex = 3;
|
| static const int kIrregexpDataLength = 4;
|
|
|
| + // 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));
|
| + }
|
| +
|
| private:
|
| static String* last_ascii_string_;
|
| static String* two_byte_cached_string_;
|
| @@ -121,6 +151,7 @@
|
| // 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,
|
| @@ -134,6 +165,10 @@
|
| 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.
|
|
|