| Index: src/factory.cc
|
| ===================================================================
|
| --- src/factory.cc (revision 9531)
|
| +++ src/factory.cc (working copy)
|
| @@ -234,7 +234,7 @@
|
|
|
|
|
| Handle<String> Factory::NewExternalStringFromAscii(
|
| - ExternalAsciiString::Resource* resource) {
|
| + const ExternalAsciiString::Resource* resource) {
|
| CALL_HEAP_FUNCTION(
|
| isolate(),
|
| isolate()->heap()->AllocateExternalStringFromAscii(resource),
|
| @@ -243,7 +243,7 @@
|
|
|
|
|
| Handle<String> Factory::NewExternalStringFromTwoByte(
|
| - ExternalTwoByteString::Resource* resource) {
|
| + const ExternalTwoByteString::Resource* resource) {
|
| CALL_HEAP_FUNCTION(
|
| isolate(),
|
| isolate()->heap()->AllocateExternalStringFromTwoByte(resource),
|
| @@ -404,10 +404,12 @@
|
| }
|
|
|
|
|
| -Handle<Map> Factory::NewMap(InstanceType type, int instance_size) {
|
| +Handle<Map> Factory::NewMap(InstanceType type,
|
| + int instance_size,
|
| + ElementsKind elements_kind) {
|
| CALL_HEAP_FUNCTION(
|
| isolate(),
|
| - isolate()->heap()->AllocateMap(type, instance_size),
|
| + isolate()->heap()->AllocateMap(type, instance_size, elements_kind),
|
| Map);
|
| }
|
|
|
| @@ -455,23 +457,11 @@
|
| }
|
|
|
|
|
| -Handle<Map> Factory::GetFastElementsMap(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(isolate(), src->GetFastElementsMap(), Map);
|
| -}
|
| -
|
| -
|
| -Handle<Map> Factory::GetSlowElementsMap(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(isolate(), src->GetSlowElementsMap(), Map);
|
| -}
|
| -
|
| -
|
| Handle<Map> Factory::GetElementsTransitionMap(
|
| - Handle<Map> src,
|
| - ElementsKind elements_kind,
|
| - bool safe_to_add_transition) {
|
| + Handle<JSObject> src,
|
| + ElementsKind elements_kind) {
|
| CALL_HEAP_FUNCTION(isolate(),
|
| - src->GetElementsTransitionMap(elements_kind,
|
| - safe_to_add_transition),
|
| + src->GetElementsTransitionMap(elements_kind),
|
| Map);
|
| }
|
|
|
| @@ -722,7 +712,12 @@
|
| if (force_initial_map ||
|
| type != JS_OBJECT_TYPE ||
|
| instance_size != JSObject::kHeaderSize) {
|
| - Handle<Map> initial_map = NewMap(type, instance_size);
|
| + ElementsKind default_elements_kind = FLAG_smi_only_arrays
|
| + ? FAST_SMI_ONLY_ELEMENTS
|
| + : FAST_ELEMENTS;
|
| + Handle<Map> initial_map = NewMap(type,
|
| + instance_size,
|
| + default_elements_kind);
|
| function->set_initial_map(*initial_map);
|
| initial_map->set_constructor(*function);
|
| }
|
| @@ -908,11 +903,26 @@
|
| Handle<JSArray> result =
|
| Handle<JSArray>::cast(NewJSObject(isolate()->array_function(),
|
| pretenure));
|
| - result->SetContent(*elements);
|
| + SetContent(result, elements);
|
| return result;
|
| }
|
|
|
|
|
| +void Factory::SetContent(Handle<JSArray> array,
|
| + Handle<FixedArray> elements) {
|
| + CALL_HEAP_FUNCTION_VOID(
|
| + isolate(),
|
| + array->SetContent(*elements));
|
| +}
|
| +
|
| +
|
| +void Factory::EnsureCanContainNonSmiElements(Handle<JSArray> array) {
|
| + CALL_HEAP_FUNCTION_VOID(
|
| + isolate(),
|
| + array->EnsureCanContainNonSmiElements());
|
| +}
|
| +
|
| +
|
| Handle<JSProxy> Factory::NewJSProxy(Handle<Object> handler,
|
| Handle<Object> prototype) {
|
| CALL_HEAP_FUNCTION(
|
| @@ -938,6 +948,13 @@
|
| }
|
|
|
|
|
| +void Factory::SetIdentityHash(Handle<JSObject> object, Object* hash) {
|
| + CALL_HEAP_FUNCTION_VOID(
|
| + isolate(),
|
| + object->SetIdentityHash(hash, ALLOW_CREATION));
|
| +}
|
| +
|
| +
|
| Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(
|
| Handle<String> name,
|
| int number_of_literals,
|
| @@ -990,6 +1007,12 @@
|
| }
|
|
|
|
|
| +Handle<String> Factory::Uint32ToString(uint32_t value) {
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->Uint32ToString(value), String);
|
| +}
|
| +
|
| +
|
| Handle<NumberDictionary> Factory::DictionaryAtNumberPut(
|
| Handle<NumberDictionary> dictionary,
|
| uint32_t key,
|
| @@ -1299,4 +1322,13 @@
|
| }
|
|
|
|
|
| +Handle<Object> Factory::GlobalConstantFor(Handle<String> name) {
|
| + Heap* h = isolate()->heap();
|
| + if (name->Equals(h->undefined_symbol())) return undefined_value();
|
| + if (name->Equals(h->nan_symbol())) return nan_value();
|
| + if (name->Equals(h->infinity_symbol())) return infinity_value();
|
| + return Handle<Object>::null();
|
| +}
|
| +
|
| +
|
| } } // namespace v8::internal
|
|
|