Index: src/jsregexp.cc |
=================================================================== |
--- src/jsregexp.cc (revision 478) |
+++ src/jsregexp.cc (working copy) |
@@ -220,10 +220,11 @@ |
LOG(RegExpExecEvent(re, start_index, subject)); |
int value = Runtime::StringMatch(subject, needle, start_index); |
if (value == -1) return Factory::null_value(); |
- Handle<JSArray> result = Factory::NewJSArray(2); |
- SetElement(result, 0, Handle<Smi>(Smi::FromInt(value))); |
- SetElement(result, 1, Handle<Smi>(Smi::FromInt(value + needle->length()))); |
- return result; |
+ |
+ Handle<FixedArray> array = Factory::NewFixedArray(2); |
+ array->set(0, Smi::FromInt(value)); |
+ array->set(1, Smi::FromInt(value + needle->length())); |
+ return Factory::NewJSArrayWithElements(array); |
} |
@@ -244,14 +245,15 @@ |
if (value == -1) break; |
HandleScope scope; |
int end = value + needle_length; |
- Handle<JSArray> pair = Factory::NewJSArray(2); |
- SetElement(pair, 0, Handle<Smi>(Smi::FromInt(value))); |
- SetElement(pair, 1, Handle<Smi>(Smi::FromInt(end))); |
+ |
+ Handle<FixedArray> array = Factory::NewFixedArray(2); |
+ array->set(0, Smi::FromInt(value)); |
+ array->set(1, Smi::FromInt(end)); |
+ Handle<JSArray> pair = Factory::NewJSArrayWithElements(array); |
SetElement(result, match_count, pair); |
match_count++; |
index = end; |
- if (needle_length == 0) |
- index++; |
+ if (needle_length == 0) index++; |
} |
return result; |
} |
@@ -311,7 +313,6 @@ |
} |
ASSERT(code != NULL); |
- |
// Convert the return address to a ByteArray pointer. |
Handle<ByteArray> internal( |
ByteArray::FromDataStartAddress(reinterpret_cast<Address>(code))); |
@@ -368,14 +369,13 @@ |
return Handle<Object>(Top::Throw(*regexp_err)); |
} |
- Handle<JSArray> result = Factory::NewJSArray(2 * (num_captures+1)); |
- |
+ Handle<FixedArray> array = Factory::NewFixedArray(2 * (num_captures+1)); |
// The captures come in (start, end+1) pairs. |
for (int i = 0; i < 2 * (num_captures+1); i += 2) { |
- SetElement(result, i, Handle<Object>(Smi::FromInt(offsets_vector[i]))); |
- SetElement(result, i+1, Handle<Object>(Smi::FromInt(offsets_vector[i+1]))); |
+ array->set(i, Smi::FromInt(offsets_vector[i])); |
+ array->set(i+1, Smi::FromInt(offsets_vector[i+1])); |
} |
- return result; |
+ return Factory::NewJSArrayWithElements(array); |
} |
@@ -450,7 +450,7 @@ |
int previous_index = 0; |
- Handle<JSArray> result = Factory::NewJSArray(0); |
+ Handle<JSArray> result = Factory::NewJSArray(0); |
int i = 0; |
Handle<Object> matches; |