Index: src/factory.cc |
diff --git a/src/factory.cc b/src/factory.cc |
index 9fa1e12abe19253aad57c1e743863fd30ceac259..0c24c977ea71947bd320e381778d08c042387292 100644 |
--- a/src/factory.cc |
+++ b/src/factory.cc |
@@ -168,16 +168,21 @@ Handle<DeoptimizationOutputData> Factory::NewDeoptimizationOutputData( |
Handle<AccessorPair> Factory::NewAccessorPair() { |
- CALL_HEAP_FUNCTION(isolate(), |
- isolate()->heap()->AllocateAccessorPair(), |
- AccessorPair); |
+ Handle<AccessorPair> accessors = |
+ Handle<AccessorPair>::cast(NewStruct(ACCESSOR_PAIR_TYPE)); |
+ accessors->set_getter(*the_hole_value(), SKIP_WRITE_BARRIER); |
+ accessors->set_setter(*the_hole_value(), SKIP_WRITE_BARRIER); |
+ accessors->set_access_flags(Smi::FromInt(0), SKIP_WRITE_BARRIER); |
+ return accessors; |
} |
Handle<TypeFeedbackInfo> Factory::NewTypeFeedbackInfo() { |
- CALL_HEAP_FUNCTION(isolate(), |
- isolate()->heap()->AllocateTypeFeedbackInfo(), |
- TypeFeedbackInfo); |
+ Handle<TypeFeedbackInfo> info = |
+ Handle<TypeFeedbackInfo>::cast(NewStruct(TYPE_FEEDBACK_INFO_TYPE)); |
+ info->initialize_storage(); |
+ info->set_feedback_vector(*empty_fixed_array(), SKIP_WRITE_BARRIER); |
+ return info; |
} |
@@ -553,10 +558,12 @@ Handle<Symbol> Factory::NewPrivateSymbol() { |
Handle<Context> Factory::NewNativeContext() { |
- CALL_HEAP_FUNCTION( |
- isolate(), |
- isolate()->heap()->AllocateNativeContext(), |
- Context); |
+ Handle<FixedArray> array = NewFixedArray(Context::NATIVE_CONTEXT_SLOTS); |
+ array->set_map_no_write_barrier(*native_context_map()); |
+ Handle<Context> context = Handle<Context>::cast(array); |
+ context->set_js_array_maps(*undefined_value()); |
+ ASSERT(context->IsNativeContext()); |
+ return context; |
} |
@@ -570,10 +577,13 @@ Handle<Context> Factory::NewGlobalContext(Handle<JSFunction> function, |
Handle<Context> Factory::NewModuleContext(Handle<ScopeInfo> scope_info) { |
- CALL_HEAP_FUNCTION( |
- isolate(), |
- isolate()->heap()->AllocateModuleContext(*scope_info), |
- Context); |
+ Handle<FixedArray> array = |
+ NewFixedArray(scope_info->ContextLength(), TENURED); |
+ array->set_map_no_write_barrier(*module_context_map()); |
+ // Instance link will be set later. |
+ Handle<Context> context = Handle<Context>::cast(array); |
+ context->set_extension(Smi::FromInt(0)); |
+ return context; |
} |
@@ -1204,17 +1214,18 @@ Handle<JSFunction> Factory::NewFunctionWithoutPrototype(Handle<String> name, |
Handle<ScopeInfo> Factory::NewScopeInfo(int length) { |
- CALL_HEAP_FUNCTION( |
- isolate(), |
- isolate()->heap()->AllocateScopeInfo(length), |
- ScopeInfo); |
+ Handle<FixedArray> array = NewFixedArray(length, TENURED); |
+ array->set_map_no_write_barrier(*scope_info_map()); |
+ Handle<ScopeInfo> scope_info = Handle<ScopeInfo>::cast(array); |
+ return scope_info; |
} |
Handle<JSObject> Factory::NewExternal(void* value) { |
- CALL_HEAP_FUNCTION(isolate(), |
- isolate()->heap()->AllocateExternal(value), |
- JSObject); |
+ Handle<Foreign> foreign = NewForeign(static_cast<Address>(value)); |
+ Handle<JSObject> external = NewJSObjectFromMap(external_map()); |
+ external->SetInternalField(0, *foreign); |
+ return external; |
} |