| Index: src/code-stubs-hydrogen.cc
|
| diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc
|
| index f66670bfe996f4d0bbcc62ef1b104667c3d65ce5..fca1e293f8c315f872a0a79143fa70838695d540 100644
|
| --- a/src/code-stubs-hydrogen.cc
|
| +++ b/src/code-stubs-hydrogen.cc
|
| @@ -1555,67 +1555,46 @@ HValue* CodeStubGraphBuilder<FastNewClosureStub>::BuildCodeStub() {
|
|
|
| AddIncrementCounter(counters->fast_new_closure_total());
|
|
|
| - IfBuilder optimize_now(this);
|
| - HInstruction* compile_hint = Add<HLoadNamedField>(
|
| - shared_info, static_cast<HValue*>(NULL), HObjectAccess::ForCompileHint());
|
| - HValue* hint_mask = Add<HConstant>(
|
| - static_cast<int32_t>(1 << SharedFunctionInfo::kOptimizeNextClosure));
|
| - HInstruction* optimize =
|
| - AddUncasted<HBitwise>(Token::BIT_AND, compile_hint, hint_mask);
|
| - optimize_now.If<HCompareNumericAndBranch>(optimize, hint_mask, Token::EQ);
|
| - optimize_now.Then();
|
| - {
|
| - Add<HPushArguments>(context(), shared_info, graph()->GetConstantFalse());
|
| - Push(Add<HCallRuntime>(isolate()->factory()->empty_string(),
|
| - Runtime::FunctionForId(Runtime::kNewClosure), 3));
|
| - }
|
| - optimize_now.Else();
|
| - {
|
| - // Create a new closure from the given function info in new space
|
| - HValue* size = Add<HConstant>(JSFunction::kSize);
|
| - HInstruction* js_function =
|
| - Add<HAllocate>(size, HType::JSObject(), NOT_TENURED, JS_FUNCTION_TYPE);
|
| -
|
| - int map_index = Context::FunctionMapIndex(casted_stub()->strict_mode(),
|
| - casted_stub()->kind());
|
| -
|
| - // Compute the function map in the current native context and set that
|
| - // as the map of the allocated object.
|
| - HInstruction* native_context = BuildGetNativeContext();
|
| - HInstruction* map_slot_value =
|
| - Add<HLoadNamedField>(native_context, static_cast<HValue*>(NULL),
|
| - HObjectAccess::ForContextSlot(map_index));
|
| - Add<HStoreNamedField>(js_function, HObjectAccess::ForMap(), map_slot_value);
|
| -
|
| - // Initialize the rest of the function.
|
| - Add<HStoreNamedField>(js_function, HObjectAccess::ForPropertiesPointer(),
|
| - empty_fixed_array);
|
| - Add<HStoreNamedField>(js_function, HObjectAccess::ForElementsPointer(),
|
| - empty_fixed_array);
|
| - Add<HStoreNamedField>(js_function, HObjectAccess::ForLiteralsPointer(),
|
| - empty_fixed_array);
|
| - Add<HStoreNamedField>(js_function,
|
| - HObjectAccess::ForPrototypeOrInitialMap(),
|
| - graph()->GetConstantHole());
|
| - Add<HStoreNamedField>(js_function,
|
| - HObjectAccess::ForSharedFunctionInfoPointer(),
|
| - shared_info);
|
| - Add<HStoreNamedField>(
|
| - js_function, HObjectAccess::ForFunctionContextPointer(), context());
|
| -
|
| - // Initialize the code pointer in the function to be the one
|
| - // found in the shared function info object.
|
| - // But first check if there is an optimized version for our context.
|
| - if (FLAG_cache_optimized_code) {
|
| - BuildInstallFromOptimizedCodeMap(js_function, shared_info,
|
| - native_context);
|
| - } else {
|
| - BuildInstallCode(js_function, shared_info);
|
| - }
|
| - Push(js_function);
|
| + // Create a new closure from the given function info in new space
|
| + HValue* size = Add<HConstant>(JSFunction::kSize);
|
| + HInstruction* js_function =
|
| + Add<HAllocate>(size, HType::JSObject(), NOT_TENURED, JS_FUNCTION_TYPE);
|
| +
|
| + int map_index = Context::FunctionMapIndex(casted_stub()->strict_mode(),
|
| + casted_stub()->kind());
|
| +
|
| + // Compute the function map in the current native context and set that
|
| + // as the map of the allocated object.
|
| + HInstruction* native_context = BuildGetNativeContext();
|
| + HInstruction* map_slot_value =
|
| + Add<HLoadNamedField>(native_context, static_cast<HValue*>(NULL),
|
| + HObjectAccess::ForContextSlot(map_index));
|
| + Add<HStoreNamedField>(js_function, HObjectAccess::ForMap(), map_slot_value);
|
| +
|
| + // Initialize the rest of the function.
|
| + Add<HStoreNamedField>(js_function, HObjectAccess::ForPropertiesPointer(),
|
| + empty_fixed_array);
|
| + Add<HStoreNamedField>(js_function, HObjectAccess::ForElementsPointer(),
|
| + empty_fixed_array);
|
| + Add<HStoreNamedField>(js_function, HObjectAccess::ForLiteralsPointer(),
|
| + empty_fixed_array);
|
| + Add<HStoreNamedField>(js_function, HObjectAccess::ForPrototypeOrInitialMap(),
|
| + graph()->GetConstantHole());
|
| + Add<HStoreNamedField>(
|
| + js_function, HObjectAccess::ForSharedFunctionInfoPointer(), shared_info);
|
| + Add<HStoreNamedField>(js_function, HObjectAccess::ForFunctionContextPointer(),
|
| + context());
|
| +
|
| + // Initialize the code pointer in the function to be the one
|
| + // found in the shared function info object.
|
| + // But first check if there is an optimized version for our context.
|
| + if (FLAG_cache_optimized_code) {
|
| + BuildInstallFromOptimizedCodeMap(js_function, shared_info, native_context);
|
| + } else {
|
| + BuildInstallCode(js_function, shared_info);
|
| }
|
| - optimize_now.End();
|
| - return Pop();
|
| +
|
| + return js_function;
|
| }
|
|
|
|
|
|
|