- Optimized JSArray allocation in runtime system by using NewJSArrayWithElements.
Review URL: http://codereview.chromium.org/7013 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@479 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
dc32c82ce9
commit
015af31d5f
@ -283,10 +283,12 @@ Handle<Object> Factory::NewReferenceError(Handle<String> message) {
|
||||
Handle<Object> Factory::NewError(const char* maker, const char* type,
|
||||
Vector< Handle<Object> > args) {
|
||||
HandleScope scope;
|
||||
Handle<JSArray> array = NewJSArray(args.length());
|
||||
for (int i = 0; i < args.length(); i++)
|
||||
SetElement(array, i, args[i]);
|
||||
Handle<Object> result = NewError(maker, type, array);
|
||||
Handle<FixedArray> array = Factory::NewFixedArray(args.length());
|
||||
for (int i = 0; i < args.length(); i++) {
|
||||
array->set(i, *args[i]);
|
||||
}
|
||||
Handle<JSArray> object = Factory::NewJSArrayWithElements(array);
|
||||
Handle<Object> result = NewError(maker, type, object);
|
||||
return result.EscapeFrom(&scope);
|
||||
}
|
||||
|
||||
|
@ -391,13 +391,8 @@ Handle<FixedArray> GetKeysInFixedArrayFor(Handle<JSObject> object) {
|
||||
|
||||
Handle<JSArray> GetKeysFor(Handle<JSObject> object) {
|
||||
Counters::for_in.Increment();
|
||||
|
||||
Handle<FixedArray> content = GetKeysInFixedArrayFor(object);
|
||||
|
||||
// Allocate the JSArray with the result.
|
||||
Handle<JSArray> obj = Factory::NewJSArray(content->length());
|
||||
Handle<JSArray>::cast(obj)->SetContent(*content);
|
||||
return Handle<JSArray>::cast(obj);
|
||||
Handle<FixedArray> elements = GetKeysInFixedArrayFor(object);
|
||||
return Factory::NewJSArrayWithElements(elements);
|
||||
}
|
||||
|
||||
|
||||
|
@ -220,10 +220,11 @@ Handle<Object> RegExpImpl::AtomExec(Handle<JSRegExp> re,
|
||||
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 @@ Handle<Object> RegExpImpl::AtomExecGlobal(Handle<JSRegExp> re,
|
||||
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 @@ Handle<Object> RegExpImpl::JsreCompile(Handle<JSRegExp> re,
|
||||
}
|
||||
|
||||
ASSERT(code != NULL);
|
||||
|
||||
// Convert the return address to a ByteArray pointer.
|
||||
Handle<ByteArray> internal(
|
||||
ByteArray::FromDataStartAddress(reinterpret_cast<Address>(code)));
|
||||
@ -368,14 +369,13 @@ Handle<Object> RegExpImpl::JsreExecOnce(Handle<JSRegExp> regexp,
|
||||
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 @@ Handle<Object> RegExpImpl::JsreExecGlobal(Handle<JSRegExp> regexp,
|
||||
|
||||
int previous_index = 0;
|
||||
|
||||
Handle<JSArray> result = Factory::NewJSArray(0);
|
||||
Handle<JSArray> result = Factory::NewJSArray(0);
|
||||
int i = 0;
|
||||
Handle<Object> matches;
|
||||
|
||||
|
@ -4695,7 +4695,6 @@ Object* JSObject::SetFastElement(uint32_t index, Object* value) {
|
||||
return SetElement(index, value);
|
||||
}
|
||||
|
||||
|
||||
Object* JSObject::SetElement(uint32_t index, Object* value) {
|
||||
// Check access rights if needed.
|
||||
if (IsAccessCheckNeeded() &&
|
||||
|
Loading…
Reference in New Issue
Block a user