Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 2e03cf5ca076a56d47f762c53c887140c8ba4c19..bfa5294b04e2cf7375f4deff2225c97ab2d937ef 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -2330,161 +2330,6 @@ void GetPropertyStub::GenerateAssembly( |
assembler.Return(var_result.value()); |
} |
-// static |
-compiler::Node* FastNewClosureStub::Generate(CodeStubAssembler* assembler, |
- compiler::Node* shared_info, |
- compiler::Node* context) { |
- typedef compiler::Node Node; |
- typedef compiler::CodeAssembler::Label Label; |
- typedef compiler::CodeAssembler::Variable Variable; |
- |
- Isolate* isolate = assembler->isolate(); |
- Factory* factory = assembler->isolate()->factory(); |
- assembler->IncrementCounter(isolate->counters()->fast_new_closure_total(), 1); |
- |
- // Create a new closure from the given function info in new space |
- Node* result = assembler->Allocate(JSFunction::kSize); |
- |
- // Calculate the index of the map we should install on the function based on |
- // the FunctionKind and LanguageMode of the function. |
- // Note: Must be kept in sync with Context::FunctionMapIndex |
- Node* compiler_hints = assembler->LoadObjectField( |
- shared_info, SharedFunctionInfo::kCompilerHintsOffset, |
- MachineType::Uint32()); |
- Node* is_strict = assembler->Word32And( |
- compiler_hints, |
- assembler->Int32Constant(1 << SharedFunctionInfo::kStrictModeBit)); |
- |
- Label if_normal(assembler), if_generator(assembler), if_async(assembler), |
- if_class_constructor(assembler), if_function_without_prototype(assembler), |
- load_map(assembler); |
- Variable map_index(assembler, MachineType::PointerRepresentation()); |
- |
- STATIC_ASSERT(FunctionKind::kNormalFunction == 0); |
- Node* is_not_normal = assembler->Word32And( |
- compiler_hints, |
- assembler->Int32Constant(SharedFunctionInfo::kAllFunctionKindBitsMask)); |
- assembler->GotoUnless(is_not_normal, &if_normal); |
- |
- Node* is_generator = assembler->Word32And( |
- compiler_hints, |
- assembler->Int32Constant(FunctionKind::kGeneratorFunction |
- << SharedFunctionInfo::kFunctionKindShift)); |
- assembler->GotoIf(is_generator, &if_generator); |
- |
- Node* is_async = assembler->Word32And( |
- compiler_hints, |
- assembler->Int32Constant(FunctionKind::kAsyncFunction |
- << SharedFunctionInfo::kFunctionKindShift)); |
- assembler->GotoIf(is_async, &if_async); |
- |
- Node* is_class_constructor = assembler->Word32And( |
- compiler_hints, |
- assembler->Int32Constant(FunctionKind::kClassConstructor |
- << SharedFunctionInfo::kFunctionKindShift)); |
- assembler->GotoIf(is_class_constructor, &if_class_constructor); |
- |
- if (FLAG_debug_code) { |
- // Function must be a function without a prototype. |
- CSA_ASSERT(assembler, assembler->Word32And( |
- compiler_hints, |
- assembler->Int32Constant( |
- (FunctionKind::kAccessorFunction | |
- FunctionKind::kArrowFunction | |
- FunctionKind::kConciseMethod) |
- << SharedFunctionInfo::kFunctionKindShift))); |
- } |
- assembler->Goto(&if_function_without_prototype); |
- |
- assembler->Bind(&if_normal); |
- { |
- map_index.Bind(assembler->SelectIntPtrConstant( |
- is_strict, Context::STRICT_FUNCTION_MAP_INDEX, |
- Context::SLOPPY_FUNCTION_MAP_INDEX)); |
- assembler->Goto(&load_map); |
- } |
- |
- assembler->Bind(&if_generator); |
- { |
- map_index.Bind(assembler->SelectIntPtrConstant( |
- is_strict, Context::STRICT_GENERATOR_FUNCTION_MAP_INDEX, |
- Context::SLOPPY_GENERATOR_FUNCTION_MAP_INDEX)); |
- assembler->Goto(&load_map); |
- } |
- |
- assembler->Bind(&if_async); |
- { |
- map_index.Bind(assembler->SelectIntPtrConstant( |
- is_strict, Context::STRICT_ASYNC_FUNCTION_MAP_INDEX, |
- Context::SLOPPY_ASYNC_FUNCTION_MAP_INDEX)); |
- assembler->Goto(&load_map); |
- } |
- |
- assembler->Bind(&if_class_constructor); |
- { |
- map_index.Bind( |
- assembler->IntPtrConstant(Context::CLASS_FUNCTION_MAP_INDEX)); |
- assembler->Goto(&load_map); |
- } |
- |
- assembler->Bind(&if_function_without_prototype); |
- { |
- map_index.Bind(assembler->IntPtrConstant( |
- Context::STRICT_FUNCTION_WITHOUT_PROTOTYPE_MAP_INDEX)); |
- assembler->Goto(&load_map); |
- } |
- |
- assembler->Bind(&load_map); |
- |
- // Get the function map in the current native context and set that |
- // as the map of the allocated object. |
- Node* native_context = assembler->LoadNativeContext(context); |
- Node* map_slot_value = |
- assembler->LoadFixedArrayElement(native_context, map_index.value()); |
- assembler->StoreMapNoWriteBarrier(result, map_slot_value); |
- |
- // Initialize the rest of the function. |
- Node* empty_fixed_array = |
- assembler->HeapConstant(factory->empty_fixed_array()); |
- Node* empty_literals_array = |
- assembler->HeapConstant(factory->empty_literals_array()); |
- assembler->StoreObjectFieldNoWriteBarrier(result, JSObject::kPropertiesOffset, |
- empty_fixed_array); |
- assembler->StoreObjectFieldNoWriteBarrier(result, JSObject::kElementsOffset, |
- empty_fixed_array); |
- assembler->StoreObjectFieldNoWriteBarrier(result, JSFunction::kLiteralsOffset, |
- empty_literals_array); |
- assembler->StoreObjectFieldNoWriteBarrier( |
- result, JSFunction::kPrototypeOrInitialMapOffset, |
- assembler->TheHoleConstant()); |
- assembler->StoreObjectFieldNoWriteBarrier( |
- result, JSFunction::kSharedFunctionInfoOffset, shared_info); |
- assembler->StoreObjectFieldNoWriteBarrier(result, JSFunction::kContextOffset, |
- context); |
- Handle<Code> lazy_builtin_handle( |
- assembler->isolate()->builtins()->builtin(Builtins::kCompileLazy)); |
- Node* lazy_builtin = assembler->HeapConstant(lazy_builtin_handle); |
- Node* lazy_builtin_entry = assembler->IntPtrAdd( |
- assembler->BitcastTaggedToWord(lazy_builtin), |
- assembler->IntPtrConstant(Code::kHeaderSize - kHeapObjectTag)); |
- assembler->StoreObjectFieldNoWriteBarrier( |
- result, JSFunction::kCodeEntryOffset, lazy_builtin_entry, |
- MachineType::PointerRepresentation()); |
- assembler->StoreObjectFieldNoWriteBarrier(result, |
- JSFunction::kNextFunctionLinkOffset, |
- assembler->UndefinedConstant()); |
- |
- return result; |
-} |
- |
-void FastNewClosureStub::GenerateAssembly( |
- compiler::CodeAssemblerState* state) const { |
- typedef compiler::Node Node; |
- CodeStubAssembler assembler(state); |
- Node* shared = assembler.Parameter(Descriptor::kSharedFunctionInfo); |
- Node* context = assembler.Parameter(Descriptor::kContext); |
- assembler.Return(Generate(&assembler, shared, context)); |
-} |
// static |
int FastNewFunctionContextStub::MaximumSlots() { |