From 1bdc8031fa102213ac14a61ca9e9f5ae77a468e6 Mon Sep 17 00:00:00 2001 From: "ager@chromium.org" Date: Wed, 23 Mar 2011 13:40:07 +0000 Subject: [PATCH] Introduce accessors on builtins instance and use them to avoid TLS access when getting builtins. R=vitalyr@chromium.org Review URL: http://codereview.chromium.org/6717018 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7327 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/builtins-arm.cc | 32 ++++++++-------- src/arm/code-stubs-arm.cc | 7 ++-- src/arm/codegen-arm.cc | 19 ++++----- src/arm/deoptimizer-arm.cc | 9 ++--- src/arm/full-codegen-arm.cc | 80 +++++++++++++++++--------------------- src/arm/lithium-codegen-arm.cc | 21 +++++----- src/arm/macro-assembler-arm.cc | 3 +- src/arm/stub-cache-arm.cc | 57 ++++++++++++--------------- src/arm/virtual-frame-arm.cc | 14 +++---- src/ast.cc | 8 ++-- src/bootstrapper.cc | 55 +++++++++++++------------- src/builtins.cc | 21 +++++++++- src/builtins.h | 13 ++++++- src/compiler.cc | 5 +-- src/debug.cc | 33 +++++++--------- src/factory.cc | 7 +--- src/frames.cc | 2 +- src/heap.cc | 4 +- src/hydrogen-instructions.h | 2 +- src/ia32/builtins-ia32.cc | 37 +++++++++--------- src/ia32/code-stubs-ia32.cc | 8 ++-- src/ia32/codegen-ia32.cc | 10 ++--- src/ia32/deoptimizer-ia32.cc | 8 ++-- src/ia32/full-codegen-ia32.cc | 83 ++++++++++++++++++---------------------- src/ia32/lithium-codegen-ia32.cc | 20 +++++----- src/ia32/macro-assembler-ia32.cc | 3 +- src/ia32/stub-cache-ia32.cc | 48 +++++++++++------------ src/ia32/virtual-frame-ia32.cc | 14 +++---- src/ic.cc | 14 +++---- src/ic.h | 42 ++++++++++---------- src/liveedit.cc | 7 ++-- src/log.cc | 4 +- src/mark-compact.cc | 8 ++-- src/objects-inl.h | 6 +-- src/objects.cc | 18 ++++----- src/runtime-profiler.cc | 2 +- src/runtime.cc | 17 ++++---- src/serialize.cc | 2 +- src/stub-cache.cc | 12 +++--- src/type-info.cc | 2 +- src/x64/builtins-x64.cc | 34 ++++++++-------- src/x64/code-stubs-x64.cc | 8 ++-- src/x64/codegen-x64.cc | 13 +++---- src/x64/deoptimizer-x64.cc | 11 +++--- src/x64/full-codegen-x64.cc | 80 +++++++++++++++++--------------------- src/x64/lithium-codegen-x64.cc | 20 +++++----- src/x64/macro-assembler-x64.h | 4 +- src/x64/stub-cache-x64.cc | 37 ++++++++---------- src/x64/virtual-frame-x64.cc | 14 +++---- test/cctest/test-alloc.cc | 4 +- test/cctest/test-debug.cc | 8 ++-- test/cctest/test-disasm-ia32.cc | 2 +- test/cctest/test-serialize.cc | 8 ++-- 53 files changed, 478 insertions(+), 522 deletions(-) diff --git a/src/arm/builtins-arm.cc b/src/arm/builtins-arm.cc index a10ba25..f401cfd 100644 --- a/src/arm/builtins-arm.cc +++ b/src/arm/builtins-arm.cc @@ -443,9 +443,9 @@ void Builtins::Generate_ArrayCode(MacroAssembler* masm) { // Jump to the generic array code if the specialized code cannot handle // the construction. __ bind(&generic_array_code); - Code* code = masm->isolate()->builtins()->builtin( - Builtins::ArrayCodeGeneric); - Handle array_code(code); + + Handle array_code = + masm->isolate()->builtins()->ArrayCodeGeneric(); __ Jump(array_code, RelocInfo::CODE_TARGET); } @@ -476,9 +476,8 @@ void Builtins::Generate_ArrayConstructCode(MacroAssembler* masm) { // Jump to the generic construct code in case the specialized code cannot // handle the construction. __ bind(&generic_constructor); - Code* code = masm->isolate()->builtins()->builtin( - Builtins::JSConstructStubGeneric); - Handle generic_construct_stub(code); + Handle generic_construct_stub = + masm->isolate()->builtins()->JSConstructStubGeneric(); __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET); } @@ -637,8 +636,8 @@ void Builtins::Generate_JSConstructCall(MacroAssembler* masm) { // Set expected number of arguments to zero (not changing r0). __ mov(r2, Operand(0, RelocInfo::NONE)); __ GetBuiltinEntry(r3, Builtins::CALL_NON_FUNCTION_AS_CONSTRUCTOR); - __ Jump(Handle(masm->isolate()->builtins()->builtin( - ArgumentsAdaptorTrampoline)), RelocInfo::CODE_TARGET); + __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), + RelocInfo::CODE_TARGET); } @@ -911,8 +910,8 @@ static void Generate_JSConstructStubHelper(MacroAssembler* masm, // r1: constructor function if (is_api_function) { __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); - Handle code = Handle( - isolate->builtins()->builtin(Builtins::HandleApiCallConstruct)); + Handle code = + masm->isolate()->builtins()->HandleApiCallConstruct(); ParameterCount expected(0); __ InvokeCode(code, expected, expected, RelocInfo::CODE_TARGET, CALL_FUNCTION); @@ -1046,8 +1045,8 @@ static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, // Invoke the code and pass argc as r0. __ mov(r0, Operand(r3)); if (is_construct) { - __ Call(Handle(masm->isolate()->builtins()->builtin( - Builtins::JSConstructCall)), RelocInfo::CODE_TARGET); + __ Call(masm->isolate()->builtins()->JSConstructCall(), + RelocInfo::CODE_TARGET); } else { ParameterCount actual(r0); __ InvokeFunction(r1, actual, CALL_FUNCTION); @@ -1339,8 +1338,8 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) { // Expected number of arguments is 0 for CALL_NON_FUNCTION. __ mov(r2, Operand(0, RelocInfo::NONE)); __ GetBuiltinEntry(r3, Builtins::CALL_NON_FUNCTION); - __ Jump(Handle(masm->isolate()->builtins()->builtin( - ArgumentsAdaptorTrampoline)), RelocInfo::CODE_TARGET); + __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), + RelocInfo::CODE_TARGET); __ bind(&function); } @@ -1355,8 +1354,9 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) { __ mov(r2, Operand(r2, ASR, kSmiTagSize)); __ ldr(r3, FieldMemOperand(r1, JSFunction::kCodeEntryOffset)); __ cmp(r2, r0); // Check formal and actual parameter counts. - __ Jump(Handle(masm->isolate()->builtins()->builtin( - ArgumentsAdaptorTrampoline)), RelocInfo::CODE_TARGET, ne); + __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), + RelocInfo::CODE_TARGET, + ne); ParameterCount expected(0); __ InvokeCode(r3, expected, expected, JUMP_FUNCTION); diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc index 8cdcfbb..c25d445 100644 --- a/src/arm/code-stubs-arm.cc +++ b/src/arm/code-stubs-arm.cc @@ -4496,11 +4496,11 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) { // r3: argc // r4: argv if (is_construct) { - ExternalReference construct_entry(Builtins::JSConstructEntryTrampoline, + ExternalReference construct_entry(Builtins::kJSConstructEntryTrampoline, isolate); __ mov(ip, Operand(construct_entry)); } else { - ExternalReference entry(Builtins::JSEntryTrampoline, isolate); + ExternalReference entry(Builtins::kJSEntryTrampoline, isolate); __ mov(ip, Operand(entry)); } __ ldr(ip, MemOperand(ip)); // deref address @@ -5399,8 +5399,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) { __ mov(r0, Operand(argc_)); // Setup the number of arguments. __ mov(r2, Operand(0, RelocInfo::NONE)); __ GetBuiltinEntry(r3, Builtins::CALL_NON_FUNCTION); - __ Jump(Handle(Isolate::Current()->builtins()->builtin( - Builtins::ArgumentsAdaptorTrampoline)), + __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), RelocInfo::CODE_TARGET); } diff --git a/src/arm/codegen-arm.cc b/src/arm/codegen-arm.cc index ffe6fff..91c4747 100644 --- a/src/arm/codegen-arm.cc +++ b/src/arm/codegen-arm.cc @@ -1787,7 +1787,7 @@ void CodeGenerator::CallApplyLazy(Expression* applicand, __ CompareObjectType(r0, r1, r2, JS_FUNCTION_TYPE); __ b(ne, &build_args); Handle apply_code( - Isolate::Current()->builtins()->builtin(Builtins::FunctionApply)); + Isolate::Current()->builtins()->builtin(Builtins::kFunctionApply)); __ ldr(r1, FieldMemOperand(r0, JSFunction::kCodeEntryOffset)); __ sub(r1, r1, Operand(Code::kHeaderSize - kHeapObjectTag)); __ cmp(r1, Operand(apply_code)); @@ -3632,7 +3632,7 @@ void CodeGenerator::VisitObjectLiteral(ObjectLiteral* node) { case ObjectLiteral::Property::COMPUTED: if (key->handle()->IsSymbol()) { Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::StoreIC_Initialize)); + Builtins::kStoreIC_Initialize)); Load(value); if (property->emit_store()) { frame_->PopToR0(); @@ -4461,7 +4461,7 @@ void CodeGenerator::VisitCallNew(CallNew* node) { // constructor invocation. CodeForSourcePosition(node->position()); Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::JSConstructCall)); + Builtins::kJSConstructCall)); frame_->CallCodeObject(ic, RelocInfo::CONSTRUCT_CALL, arg_count + 1); frame_->EmitPush(r0); @@ -6601,7 +6601,7 @@ void DeferredReferenceGetNamedValue::Generate() { // The rest of the instructions in the deferred code must be together. { Assembler::BlockConstPoolScope block_const_pool(masm_); Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::LoadIC_Initialize)); + Builtins::kLoadIC_Initialize)); RelocInfo::Mode mode = is_contextual_ ? RelocInfo::CODE_TARGET_CONTEXT : RelocInfo::CODE_TARGET; @@ -6678,7 +6678,7 @@ void DeferredReferenceGetKeyedValue::Generate() { { Assembler::BlockConstPoolScope block_const_pool(masm_); // Call keyed load IC. It has the arguments key and receiver in r0 and r1. Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Builtins::kKeyedLoadIC_Initialize)); __ Call(ic, RelocInfo::CODE_TARGET); // The call must be followed by a nop instruction to indicate that the // keyed load has been inlined. @@ -6742,8 +6742,9 @@ void DeferredReferenceSetKeyedValue::Generate() { // Call keyed store IC. It has the arguments value, key and receiver in r0, // r1 and r2. Handle ic(Isolate::Current()->builtins()->builtin( - (strict_mode_ == kStrictMode) ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + (strict_mode_ == kStrictMode) + ? Builtins::kKeyedStoreIC_Initialize_Strict + : Builtins::kKeyedStoreIC_Initialize)); __ Call(ic, RelocInfo::CODE_TARGET); // The call must be followed by a nop instruction to indicate that the // keyed store has been inlined. @@ -6797,8 +6798,8 @@ void DeferredReferenceSetNamedValue::Generate() { // Call keyed store IC. It has the arguments value, key and receiver in r0, // r1 and r2. Handle ic(Isolate::Current()->builtins()->builtin( - (strict_mode_ == kStrictMode) ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + (strict_mode_ == kStrictMode) ? Builtins::kStoreIC_Initialize_Strict + : Builtins::kStoreIC_Initialize)); __ Call(ic, RelocInfo::CODE_TARGET); // The call must be followed by a nop instruction to indicate that the // named store has been inlined. diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc index f1fde92..c354bad 100644 --- a/src/arm/deoptimizer-arm.cc +++ b/src/arm/deoptimizer-arm.cc @@ -106,7 +106,7 @@ void Deoptimizer::DeoptimizeFunction(JSFunction* function) { // Add the deoptimizing code to the list. DeoptimizingCodeListNode* node = new DeoptimizingCodeListNode(code); - DeoptimizerData* data = Isolate::Current()->deoptimizer_data(); + DeoptimizerData* data = code->GetIsolate()->deoptimizer_data(); node->set_next(data->deoptimizing_code_list_); data->deoptimizing_code_list_ = node; @@ -316,8 +316,7 @@ void Deoptimizer::DoComputeOsrOutputFrame() { optimized_code_->entry() + pc_offset); output_[0]->SetPc(pc); } - Code* continuation = Isolate::Current()->builtins()->builtin( - Builtins::NotifyOSR); + Code* continuation = isolate_->builtins()->builtin(Builtins::kNotifyOSR); output_[0]->SetContinuation( reinterpret_cast(continuation->entry())); @@ -496,8 +495,8 @@ void Deoptimizer::DoComputeFrame(TranslationIterator* iterator, if (is_topmost) { Builtins* builtins = isolate_->builtins(); Code* continuation = (bailout_type_ == EAGER) - ? builtins->builtin(Builtins::NotifyDeoptimized) - : builtins->builtin(Builtins::NotifyLazyDeoptimized); + ? builtins->builtin(Builtins::kNotifyDeoptimized) + : builtins->builtin(Builtins::kNotifyLazyDeoptimized); output_frame->SetContinuation( reinterpret_cast(continuation->entry())); } diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index 41c7973..088ba58 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -781,9 +781,9 @@ void FullCodeGenerator::EmitDeclaration(Variable* variable, prop->key()->AsLiteral()->handle()->IsSmi()); __ mov(r1, Operand(prop->key()->AsLiteral()->handle())); - Handle ic(isolate()->builtins()->builtin(is_strict_mode() - ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict() + : isolate()->builtins()->KeyedStoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); // Value in r0 is ignored (declarations are statements). } @@ -1186,8 +1186,8 @@ void FullCodeGenerator::EmitDynamicLoadFromSlotFastCase( ContextSlotOperandCheckExtensions(obj_proxy->var()->AsSlot(), slow)); __ mov(r0, Operand(key_literal->handle())); - Handle ic(isolate()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Handle ic = + isolate()->builtins()->KeyedLoadIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); __ jmp(done); } @@ -1253,8 +1253,7 @@ void FullCodeGenerator::EmitLoadGlobalSlotCheckExtensions( RelocInfo::Mode mode = (typeof_state == INSIDE_TYPEOF) ? RelocInfo::CODE_TARGET : RelocInfo::CODE_TARGET_CONTEXT; - Handle ic(isolate()->builtins()->builtin( - Builtins::LoadIC_Initialize)); + Handle ic = isolate()->builtins()->LoadIC_Initialize(); EmitCallIC(ic, mode); } @@ -1272,8 +1271,7 @@ void FullCodeGenerator::EmitVariableLoad(Variable* var) { // object (receiver) in r0. __ ldr(r0, GlobalObjectOperand()); __ mov(r2, Operand(var->name())); - Handle ic(isolate()->builtins()->builtin( - Builtins::LoadIC_Initialize)); + Handle ic = isolate()->builtins()->LoadIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET_CONTEXT); context()->Plug(r0); @@ -1332,8 +1330,7 @@ void FullCodeGenerator::EmitVariableLoad(Variable* var) { __ mov(r0, Operand(key_literal->handle())); // Call keyed load IC. It has arguments key and receiver in r0 and r1. - Handle ic(isolate()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Handle ic = isolate()->builtins()->KeyedLoadIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); context()->Plug(r0); } @@ -1442,8 +1439,7 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) { VisitForAccumulatorValue(value); __ mov(r2, Operand(key->handle())); __ ldr(r1, MemOperand(sp)); - Handle ic(isolate()->builtins()->builtin( - Builtins::StoreIC_Initialize)); + Handle ic = isolate()->builtins()->StoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); PrepareForBailoutForId(key->id(), NO_REGISTERS); } else { @@ -1698,8 +1694,7 @@ void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { Literal* key = prop->key()->AsLiteral(); __ mov(r2, Operand(key->handle())); // Call load IC. It has arguments receiver and property name r0 and r2. - Handle ic(isolate()->builtins()->builtin( - Builtins::LoadIC_Initialize)); + Handle ic = isolate()->builtins()->LoadIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); } @@ -1707,8 +1702,7 @@ void FullCodeGenerator::EmitNamedPropertyLoad(Property* prop) { void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) { SetSourcePosition(prop->position()); // Call keyed load IC. It has arguments key and receiver in r0 and r1. - Handle ic(isolate()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Handle ic = isolate()->builtins()->KeyedLoadIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); } @@ -1853,9 +1847,9 @@ void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_ast_id) { __ mov(r1, r0); __ pop(r0); // Restore value. __ mov(r2, Operand(prop->key()->AsLiteral()->handle())); - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->StoreIC_Initialize_Strict() + : isolate()->builtins()->StoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); break; } @@ -1876,9 +1870,9 @@ void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_ast_id) { __ pop(r2); } __ pop(r0); // Restore value. - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict() + : isolate()->builtins()->KeyedStoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); break; } @@ -1902,9 +1896,9 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var, // r2, and the global object in r1. __ mov(r2, Operand(var->name())); __ ldr(r1, GlobalObjectOperand()); - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->StoreIC_Initialize_Strict() + : isolate()->builtins()->StoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET_CONTEXT); } else if (op == Token::INIT_CONST) { @@ -2011,9 +2005,9 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { __ pop(r1); } - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->StoreIC_Initialize_Strict() + : isolate()->builtins()->StoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); // If the assignment ends an initialization block, revert to fast case. @@ -2057,9 +2051,9 @@ void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { __ pop(r2); } - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict() + : isolate()->builtins()->KeyedStoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); // If the assignment ends an initialization block, revert to fast case. @@ -2344,8 +2338,7 @@ void FullCodeGenerator::VisitCall(Call* expr) { // Record source code position for IC call. SetSourcePosition(prop->position()); - Handle ic(isolate()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Handle ic = isolate()->builtins()->KeyedLoadIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); __ ldr(r1, GlobalObjectOperand()); __ ldr(r1, FieldMemOperand(r1, GlobalObject::kGlobalReceiverOffset)); @@ -2413,8 +2406,8 @@ void FullCodeGenerator::VisitCallNew(CallNew* expr) { __ mov(r0, Operand(arg_count)); __ ldr(r1, MemOperand(sp, arg_count * kPointerSize)); - Handle construct_builtin(isolate()->builtins()->builtin( - Builtins::JSConstructCall)); + Handle construct_builtin = + isolate()->builtins()->JSConstructCall(); __ Call(construct_builtin, RelocInfo::CONSTRUCT_CALL); context()->Plug(r0); } @@ -3914,9 +3907,9 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { case NAMED_PROPERTY: { __ mov(r2, Operand(prop->key()->AsLiteral()->handle())); __ pop(r1); - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->StoreIC_Initialize_Strict() + : isolate()->builtins()->StoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); if (expr->is_postfix()) { @@ -3931,9 +3924,9 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { case KEYED_PROPERTY: { __ pop(r1); // Key. __ pop(r2); // Receiver. - Handle ic(isolate()->builtins()->builtin( - is_strict_mode() ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + Handle ic = is_strict_mode() + ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict() + : isolate()->builtins()->KeyedStoreIC_Initialize(); EmitCallIC(ic, RelocInfo::CODE_TARGET); PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); if (expr->is_postfix()) { @@ -3957,8 +3950,7 @@ void FullCodeGenerator::VisitForTypeofValue(Expression* expr) { Comment cmnt(masm_, "Global variable"); __ ldr(r0, GlobalObjectOperand()); __ mov(r2, Operand(proxy->name())); - Handle ic(isolate()->builtins()->builtin( - Builtins::LoadIC_Initialize)); + Handle ic = isolate()->builtins()->LoadIC_Initialize(); // Use a regular load, not a contextual load, to avoid a reference // error. EmitCallIC(ic, RelocInfo::CODE_TARGET); diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index 48a9f7f..cc93101 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -2209,8 +2209,7 @@ void LCodeGen::DoLoadNamedGeneric(LLoadNamedGeneric* instr) { // Name is always in r2. __ mov(r2, Operand(instr->name())); - Handle ic( - isolate()->builtins()->builtin(Builtins::LoadIC_Initialize)); + Handle ic = isolate()->builtins()->LoadIC_Initialize(); CallCode(ic, RelocInfo::CODE_TARGET, instr); } @@ -2341,8 +2340,7 @@ void LCodeGen::DoLoadKeyedGeneric(LLoadKeyedGeneric* instr) { ASSERT(ToRegister(instr->object()).is(r1)); ASSERT(ToRegister(instr->key()).is(r0)); - Handle ic(isolate()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Handle ic = isolate()->builtins()->KeyedLoadIC_Initialize(); CallCode(ic, RelocInfo::CODE_TARGET, instr); } @@ -2908,8 +2906,7 @@ void LCodeGen::DoCallNew(LCallNew* instr) { ASSERT(ToRegister(instr->InputAt(0)).is(r1)); ASSERT(ToRegister(instr->result()).is(r0)); - Handle builtin(isolate()->builtins()->builtin( - Builtins::JSConstructCall)); + Handle builtin = isolate()->builtins()->JSConstructCall(); __ mov(r0, Operand(instr->arity())); CallCode(builtin, RelocInfo::CONSTRUCT_CALL, instr); } @@ -2958,9 +2955,9 @@ void LCodeGen::DoStoreNamedGeneric(LStoreNamedGeneric* instr) { // Name is always in r2. __ mov(r2, Operand(instr->name())); - Handle ic(isolate()->builtins()->builtin( - info_->is_strict() ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + Handle ic = info_->is_strict() + ? isolate()->builtins()->StoreIC_Initialize_Strict() + : isolate()->builtins()->StoreIC_Initialize(); CallCode(ic, RelocInfo::CODE_TARGET, instr); } @@ -3013,9 +3010,9 @@ void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { ASSERT(ToRegister(instr->key()).is(r1)); ASSERT(ToRegister(instr->value()).is(r0)); - Handle ic(isolate()->builtins()->builtin( - info_->is_strict() ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + Handle ic = info_->is_strict() + ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict() + : isolate()->builtins()->KeyedStoreIC_Initialize(); CallCode(ic, RelocInfo::CODE_TARGET, instr); } diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc index 626c46f..3a1a8b6 100644 --- a/src/arm/macro-assembler-arm.cc +++ b/src/arm/macro-assembler-arm.cc @@ -903,8 +903,7 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected, } Handle adaptor = - Handle(Isolate::Current()->builtins()->builtin( - Builtins::ArgumentsAdaptorTrampoline)); + isolate()->builtins()->ArgumentsAdaptorTrampoline(); if (flag == CALL_FUNCTION) { if (call_wrapper != NULL) { call_wrapper->BeforeCall(CallSize(adaptor, RelocInfo::CODE_TARGET)); diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc index a29c6d6..30f1b38 100644 --- a/src/arm/stub-cache-arm.cc +++ b/src/arm/stub-cache-arm.cc @@ -211,7 +211,7 @@ void StubCache::GenerateProbe(MacroAssembler* masm, Register scratch, Register extra, Register extra2) { - Isolate* isolate = Isolate::Current(); + Isolate* isolate = masm->isolate(); Label miss; // Make sure that code is valid. The shifting code relies on the @@ -289,14 +289,15 @@ void StubCompiler::GenerateLoadGlobalFunctionPrototype(MacroAssembler* masm, void StubCompiler::GenerateDirectLoadGlobalFunctionPrototype( MacroAssembler* masm, int index, Register prototype, Label* miss) { + Isolate* isolate = masm->isolate(); // Check we're still in the same context. __ ldr(prototype, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_INDEX))); - __ Move(ip, Isolate::Current()->global()); + __ Move(ip, isolate->global()); __ cmp(prototype, ip); __ b(ne, miss); // Get the global function with the given index. - JSFunction* function = JSFunction::cast( - Isolate::Current()->global_context()->get(index)); + JSFunction* function = + JSFunction::cast(isolate->global_context()->get(index)); // Load its initial map. The global functions all have initial maps. __ Move(prototype, Handle(function->initial_map())); // Load the prototype from the initial map. @@ -511,9 +512,9 @@ void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) { ASSERT(kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC); Code* code = NULL; if (kind == Code::LOAD_IC) { - code = Isolate::Current()->builtins()->builtin(Builtins::LoadIC_Miss); + code = masm->isolate()->builtins()->builtin(Builtins::kLoadIC_Miss); } else { - code = Isolate::Current()->builtins()->builtin(Builtins::KeyedLoadIC_Miss); + code = masm->isolate()->builtins()->builtin(Builtins::kKeyedLoadIC_Miss); } Handle ic(code); @@ -952,7 +953,7 @@ static void StoreIntAsFloat(MacroAssembler* masm, Register fval, Register scratch1, Register scratch2) { - if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { + if (masm->isolate()->cpu_features()->IsSupported(VFP3)) { CpuFeatures::Scope scope(VFP3); __ vmov(s0, ival); __ add(scratch1, dst, Operand(wordoffset, LSL, 2)); @@ -1164,7 +1165,7 @@ Register StubCompiler::CheckPrototypes(JSObject* object, __ b(ne, miss); // Log the check depth. - LOG(Isolate::Current(), IntEvent("check-maps-depth", depth + 1)); + LOG(masm()->isolate(), IntEvent("check-maps-depth", depth + 1)); // Perform security check for access to the global object. ASSERT(holder->IsJSGlobalProxy() || !holder->IsAccessCheckNeeded()); @@ -1500,7 +1501,7 @@ void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell, MaybeObject* CallStubCompiler::GenerateMissBranch() { - MaybeObject* maybe_obj = Isolate::Current()->stub_cache()->ComputeCallMiss( + MaybeObject* maybe_obj = masm()->isolate()->stub_cache()->ComputeCallMiss( arguments().immediate(), kind_); Object* obj; if (!maybe_obj->ToObject(&obj)) return maybe_obj; @@ -2047,7 +2048,7 @@ MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object, // -- sp[argc * 4] : receiver // ----------------------------------- - if (!Isolate::Current()->cpu_features()->IsSupported(VFP3)) + if (!masm()->isolate()->cpu_features()->IsSupported(VFP3)) return HEAP->undefined_value(); CpuFeatures::Scope scope_vfp3(VFP3); @@ -2612,8 +2613,7 @@ MaybeObject* StoreStubCompiler::CompileStoreField(JSObject* object, r1, r2, r3, &miss); __ bind(&miss); - Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::StoreIC_Miss)); + Handle ic = masm()->isolate()->builtins()->StoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); // Return the generated code. @@ -2662,8 +2662,7 @@ MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object, // Handle store cache miss. __ bind(&miss); - Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::StoreIC_Miss)); + Handle ic = masm()->isolate()->builtins()->StoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); // Return the generated code. @@ -2712,8 +2711,7 @@ MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, // Handle store cache miss. __ bind(&miss); - Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::StoreIC_Miss)); + Handle ic = masm()->isolate()->builtins()->StoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); // Return the generated code. @@ -2757,8 +2755,7 @@ MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, // Handle store cache miss. __ bind(&miss); __ IncrementCounter(counters->named_store_global_inline_miss(), 1, r4, r3); - Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::StoreIC_Miss)); + Handle ic = masm()->isolate()->builtins()->StoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); // Return the generated code. @@ -3211,9 +3208,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, __ bind(&miss); __ DecrementCounter(counters->keyed_store_field(), 1, r3, r4); - Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::KeyedStoreIC_Miss)); - + Handle ic = masm()->isolate()->builtins()->KeyedStoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); // Return the generated code. @@ -3283,8 +3278,7 @@ MaybeObject* KeyedStoreStubCompiler::CompileStoreSpecialized( __ Ret(); __ bind(&miss); - Handle ic( - Isolate::Current()->builtins()->builtin(Builtins::KeyedStoreIC_Miss)); + Handle ic = masm()->isolate()->builtins()->KeyedStoreIC_Miss(); __ Jump(ic, RelocInfo::CODE_TARGET); // Return the generated code. @@ -3428,10 +3422,8 @@ MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) { // Jump to the generic stub in case the specialized code cannot handle the // construction. __ bind(&generic_stub_call); - Code* code = Isolate::Current()->builtins()->builtin( - Builtins::JSConstructStubGeneric); - Handle generic_construct_stub(code); - __ Jump(generic_construct_stub, RelocInfo::CODE_TARGET); + Handle code = masm()->isolate()->builtins()->JSConstructStubGeneric(); + __ Jump(code, RelocInfo::CODE_TARGET); // Return the generated code. return GetCode(); @@ -3518,7 +3510,7 @@ MaybeObject* ExternalArrayStubCompiler::CompileKeyedLoadStub( __ ldr(value, MemOperand(r3, key, LSL, 1)); break; case kExternalFloatArray: - if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { + if (masm()->isolate()->cpu_features()->IsSupported(VFP3)) { CpuFeatures::Scope scope(VFP3); __ add(r2, r3, Operand(key, LSL, 1)); __ vldr(s0, r2, 0); @@ -3557,7 +3549,7 @@ MaybeObject* ExternalArrayStubCompiler::CompileKeyedLoadStub( // Now we can use r0 for the result as key is not needed any more. __ mov(r0, r5); - if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { + if (masm()->isolate()->cpu_features()->IsSupported(VFP3)) { CpuFeatures::Scope scope(VFP3); __ vmov(s0, value); __ vcvt_f64_s32(d0, s0); @@ -3572,7 +3564,7 @@ MaybeObject* ExternalArrayStubCompiler::CompileKeyedLoadStub( // The test is different for unsigned int values. Since we need // the value to be in the range of a positive smi, we can't // handle either of the top two bits being set in the value. - if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { + if (masm()->isolate()->cpu_features()->IsSupported(VFP3)) { CpuFeatures::Scope scope(VFP3); Label box_int, done; __ tst(value, Operand(0xC0000000)); @@ -3636,7 +3628,7 @@ MaybeObject* ExternalArrayStubCompiler::CompileKeyedLoadStub( } else if (array_type == kExternalFloatArray) { // For the floating-point array type, we need to always allocate a // HeapNumber. - if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { + if (masm()->isolate()->cpu_features()->IsSupported(VFP3)) { CpuFeatures::Scope scope(VFP3); // Allocate a HeapNumber for the result. Don't use r0 and r1 as // AllocateHeapNumber clobbers all registers - also when jumping due to @@ -3829,10 +3821,9 @@ MaybeObject* ExternalArrayStubCompiler::CompileKeyedStoreStub( // The WebGL specification leaves the behavior of storing NaN and // +/-Infinity into integer arrays basically undefined. For more // reproducible behavior, convert these to zero. - if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { + if (masm()->isolate()->cpu_features()->IsSupported(VFP3)) { CpuFeatures::Scope scope(VFP3); - if (array_type == kExternalFloatArray) { // vldr requires offset to be a multiple of 4 so we can not // include -kHeapObjectTag into it. diff --git a/src/arm/virtual-frame-arm.cc b/src/arm/virtual-frame-arm.cc index c4919b8..a852d6e 100644 --- a/src/arm/virtual-frame-arm.cc +++ b/src/arm/virtual-frame-arm.cc @@ -322,7 +322,7 @@ void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id, void VirtualFrame::CallLoadIC(Handle name, RelocInfo::Mode mode) { Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::LoadIC_Initialize)); + Builtins::kLoadIC_Initialize)); PopToR0(); SpillAll(); __ mov(r2, Operand(name)); @@ -334,8 +334,8 @@ void VirtualFrame::CallStoreIC(Handle name, bool is_contextual, StrictModeFlag strict_mode) { Handle ic(Isolate::Current()->builtins()->builtin( - (strict_mode == kStrictMode) ? Builtins::StoreIC_Initialize_Strict - : Builtins::StoreIC_Initialize)); + (strict_mode == kStrictMode) ? Builtins::kStoreIC_Initialize_Strict + : Builtins::kStoreIC_Initialize)); PopToR0(); RelocInfo::Mode mode; if (is_contextual) { @@ -354,7 +354,7 @@ void VirtualFrame::CallStoreIC(Handle name, void VirtualFrame::CallKeyedLoadIC() { Handle ic(Isolate::Current()->builtins()->builtin( - Builtins::KeyedLoadIC_Initialize)); + Builtins::kKeyedLoadIC_Initialize)); PopToR1R0(); SpillAll(); CallCodeObject(ic, RelocInfo::CODE_TARGET, 0); @@ -363,8 +363,8 @@ void VirtualFrame::CallKeyedLoadIC() { void VirtualFrame::CallKeyedStoreIC(StrictModeFlag strict_mode) { Handle ic(Isolate::Current()->builtins()->builtin( - (strict_mode == kStrictMode) ? Builtins::KeyedStoreIC_Initialize_Strict - : Builtins::KeyedStoreIC_Initialize)); + (strict_mode == kStrictMode) ? Builtins::kKeyedStoreIC_Initialize_Strict + : Builtins::kKeyedStoreIC_Initialize)); PopToR1R0(); SpillAll(); EmitPop(r2); @@ -388,7 +388,7 @@ void VirtualFrame::CallCodeObject(Handle code, break; case Code::BUILTIN: ASSERT(*code == Isolate::Current()->builtins()->builtin( - Builtins::JSConstructCall)); + Builtins::kJSConstructCall)); break; default: UNREACHABLE(); diff --git a/src/ast.cc b/src/ast.cc index 3912773..8434357 100644 --- a/src/ast.cc +++ b/src/ast.cc @@ -527,12 +527,12 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) { // Record type feedback from the oracle in the AST. is_monomorphic_ = oracle->LoadIsMonomorphic(this); if (key()->IsPropertyName()) { - if (oracle->LoadIsBuiltin(this, Builtins::LoadIC_ArrayLength)) { + if (oracle->LoadIsBuiltin(this, Builtins::kLoadIC_ArrayLength)) { is_array_length_ = true; - } else if (oracle->LoadIsBuiltin(this, Builtins::LoadIC_StringLength)) { + } else if (oracle->LoadIsBuiltin(this, Builtins::kLoadIC_StringLength)) { is_string_length_ = true; } else if (oracle->LoadIsBuiltin(this, - Builtins::LoadIC_FunctionPrototype)) { + Builtins::kLoadIC_FunctionPrototype)) { is_function_prototype_ = true; } else { Literal* lit_key = key()->AsLiteral(); @@ -541,7 +541,7 @@ void Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) { ZoneMapList* types = oracle->LoadReceiverTypes(this, name); receiver_types_ = types; } - } else if (oracle->LoadIsBuiltin(this, Builtins::KeyedLoadIC_String)) { + } else if (oracle->LoadIsBuiltin(this, Builtins::kKeyedLoadIC_String)) { is_string_access_ = true; } else if (is_monomorphic_) { monomorphic_receiver_type_ = oracle->LoadMonomorphicReceiverType(this); diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 49699e9..e7c0554 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -445,7 +445,7 @@ Handle Genesis::CreateEmptyFunction() { // --- E m p t y --- Handle code = Handle(Isolate::Current()->builtins()->builtin( - Builtins::EmptyFunction)); + Builtins::kEmptyFunction)); empty_function->set_code(*code); empty_function->shared()->set_code(*code); Handle source = FACTORY->NewStringFromAscii(CStrVector("() {}")); @@ -587,9 +587,9 @@ void Genesis::CreateStrictModeFunctionMaps(Handle empty) { // Create the ThrowTypeError function instances. Handle arguments_throw = - CreateThrowTypeErrorFunction(Builtins::StrictFunctionArguments); + CreateThrowTypeErrorFunction(Builtins::kStrictFunctionArguments); Handle caller_throw = - CreateThrowTypeErrorFunction(Builtins::StrictFunctionCaller); + CreateThrowTypeErrorFunction(Builtins::kStrictFunctionCaller); // Complete the callback fixed arrays. arguments->set(0, *arguments_throw); @@ -673,7 +673,7 @@ Handle Genesis::CreateNewGlobals( if (js_global_template.is_null()) { Handle name = Handle(HEAP->empty_symbol()); Handle code = Handle(Isolate::Current()->builtins()->builtin( - Builtins::Illegal)); + Builtins::kIllegal)); js_global_function = FACTORY->NewFunction(name, JS_GLOBAL_OBJECT_TYPE, JSGlobalObject::kSize, code, true); @@ -707,7 +707,7 @@ Handle Genesis::CreateNewGlobals( if (global_template.IsEmpty()) { Handle name = Handle(HEAP->empty_symbol()); Handle code = Handle(Isolate::Current()->builtins()->builtin( - Builtins::Illegal)); + Builtins::kIllegal)); global_proxy_function = FACTORY->NewFunction(name, JS_GLOBAL_PROXY_TYPE, JSGlobalProxy::kSize, code, true); @@ -796,15 +796,15 @@ void Genesis::InitializeGlobal(Handle inner_global, // Install global Function object InstallFunction(global, "Function", JS_FUNCTION_TYPE, JSFunction::kSize, - empty_function, Builtins::Illegal, true); // ECMA native. + empty_function, Builtins::kIllegal, true); // ECMA native. { // --- A r r a y --- Handle array_function = InstallFunction(global, "Array", JS_ARRAY_TYPE, JSArray::kSize, Isolate::Current()->initial_object_prototype(), - Builtins::ArrayCode, true); + Builtins::kArrayCode, true); array_function->shared()->set_construct_stub( - Isolate::Current()->builtins()->builtin(Builtins::ArrayConstructCode)); + Isolate::Current()->builtins()->builtin(Builtins::kArrayConstructCode)); array_function->shared()->DontAdaptArguments(); // This seems a bit hackish, but we need to make sure Array.length @@ -832,7 +832,7 @@ void Genesis::InitializeGlobal(Handle inner_global, Handle number_fun = InstallFunction(global, "Number", JS_VALUE_TYPE, JSValue::kSize, Isolate::Current()->initial_object_prototype(), - Builtins::Illegal, true); + Builtins::kIllegal, true); global_context()->set_number_function(*number_fun); } @@ -840,7 +840,7 @@ void Genesis::InitializeGlobal(Handle inner_global, Handle boolean_fun = InstallFunction(global, "Boolean", JS_VALUE_TYPE, JSValue::kSize, Isolate::Current()->initial_object_prototype(), - Builtins::Illegal, true); + Builtins::kIllegal, true); global_context()->set_boolean_function(*boolean_fun); } @@ -848,9 +848,10 @@ void Genesis::InitializeGlobal(Handle inner_global, Handle string_fun = InstallFunction(global, "String", JS_VALUE_TYPE, JSValue::kSize, Isolate::Current()->initial_object_prototype(), - Builtins::Illegal, true); + Builtins::kIllegal, true); string_fun->shared()->set_construct_stub( - Isolate::Current()->builtins()->builtin(Builtins::StringConstructCode)); + Isolate::Current()->builtins()->builtin( + Builtins::kStringConstructCode)); global_context()->set_string_function(*string_fun); // Add 'length' property to strings. Handle string_descriptors = @@ -872,7 +873,7 @@ void Genesis::InitializeGlobal(Handle inner_global, Handle date_fun = InstallFunction(global, "Date", JS_VALUE_TYPE, JSValue::kSize, Isolate::Current()->initial_object_prototype(), - Builtins::Illegal, true); + Builtins::kIllegal, true); global_context()->set_date_function(*date_fun); } @@ -883,7 +884,7 @@ void Genesis::InitializeGlobal(Handle inner_global, Handle regexp_fun = InstallFunction(global, "RegExp", JS_REGEXP_TYPE, JSRegExp::kSize, Isolate::Current()->initial_object_prototype(), - Builtins::Illegal, true); + Builtins::kIllegal, true); global_context()->set_regexp_function(*regexp_fun); ASSERT(regexp_fun->has_initial_map()); @@ -968,7 +969,7 @@ void Genesis::InitializeGlobal(Handle inner_global, // class_name equals 'Arguments'. Handle symbol = FACTORY->LookupAsciiSymbol("Arguments"); Handle code = Handle( - Isolate::Current()->builtins()->builtin(Builtins::Illegal)); + Isolate::Current()->builtins()->builtin(Builtins::kIllegal)); Handle prototype = Handle( JSObject::cast(global_context()->object_function()->prototype())); @@ -1023,9 +1024,9 @@ void Genesis::InitializeGlobal(Handle inner_global, Handle caller = FACTORY->NewFixedArray(2, TENURED); Handle callee_throw = - CreateThrowTypeErrorFunction(Builtins::StrictArgumentsCallee); + CreateThrowTypeErrorFunction(Builtins::kStrictArgumentsCallee); Handle caller_throw = - CreateThrowTypeErrorFunction(Builtins::StrictArgumentsCaller); + CreateThrowTypeErrorFunction(Builtins::kStrictArgumentsCaller); // Install the ThrowTypeError functions. callee->set(0, *callee_throw); @@ -1088,7 +1089,7 @@ void Genesis::InitializeGlobal(Handle inner_global, { // --- context extension // Create a function for the context extension objects. Handle code = Handle( - Isolate::Current()->builtins()->builtin(Builtins::Illegal)); + Isolate::Current()->builtins()->builtin(Builtins::kIllegal)); Handle context_extension_fun = FACTORY->NewFunction(FACTORY->empty_symbol(), JS_CONTEXT_EXTENSION_OBJECT_TYPE, @@ -1106,7 +1107,7 @@ void Genesis::InitializeGlobal(Handle inner_global, // Setup the call-as-function delegate. Handle code = Handle(Isolate::Current()->builtins()->builtin( - Builtins::HandleApiCallAsFunction)); + Builtins::kHandleApiCallAsFunction)); Handle delegate = FACTORY->NewFunction(FACTORY->empty_symbol(), JS_OBJECT_TYPE, JSObject::kHeaderSize, code, true); @@ -1118,7 +1119,7 @@ void Genesis::InitializeGlobal(Handle inner_global, // Setup the call-as-constructor delegate. Handle code = Handle(Isolate::Current()->builtins()->builtin( - Builtins::HandleApiCallAsConstructor)); + Builtins::kHandleApiCallAsConstructor)); Handle delegate = FACTORY->NewFunction(FACTORY->empty_symbol(), JS_OBJECT_TYPE, JSObject::kHeaderSize, code, true); @@ -1251,7 +1252,7 @@ bool Genesis::InstallNatives() { // JavaScript builtins, a reference to the builtins object // (itself) and a reference to the global_context directly in the object. Handle code = Handle( - isolate->builtins()->builtin(Builtins::Illegal)); + isolate->builtins()->builtin(Builtins::kIllegal)); Handle builtins_fun = factory->NewFunction(factory->empty_symbol(), JS_BUILTINS_OBJECT_TYPE, JSBuiltinsObject::kSize, code, true); @@ -1296,7 +1297,7 @@ bool Genesis::InstallNatives() { Handle script_fun = InstallFunction(builtins, "Script", JS_VALUE_TYPE, JSValue::kSize, isolate->initial_object_prototype(), - Builtins::Illegal, false); + Builtins::kIllegal, false); Handle prototype = factory->NewJSObject(isolate->object_function(), TENURED); SetPrototype(script_fun, prototype); @@ -1421,7 +1422,7 @@ bool Genesis::InstallNatives() { InstallFunction(builtins, "OpaqueReference", JS_VALUE_TYPE, JSValue::kSize, isolate->initial_object_prototype(), - Builtins::Illegal, false); + Builtins::kIllegal, false); Handle prototype = factory->NewJSObject(isolate->object_function(), TENURED); SetPrototype(opaque_reference_fun, prototype); @@ -1443,14 +1444,14 @@ bool Genesis::InstallNatives() { JS_ARRAY_TYPE, JSArray::kSize, isolate->initial_object_prototype(), - Builtins::ArrayCode, + Builtins::kArrayCode, true); Handle prototype = factory->NewJSObject(isolate->object_function(), TENURED); SetPrototype(array_function, prototype); array_function->shared()->set_construct_stub( - isolate->builtins()->builtin(Builtins::ArrayConstructCode)); + isolate->builtins()->builtin(Builtins::kArrayConstructCode)); array_function->shared()->DontAdaptArguments(); // Make "length" magic on instances. @@ -1505,12 +1506,12 @@ bool Genesis::InstallNatives() { Handle call = InstallFunction(proto, "call", JS_OBJECT_TYPE, JSObject::kHeaderSize, Handle::null(), - Builtins::FunctionCall, + Builtins::kFunctionCall, false); Handle apply = InstallFunction(proto, "apply", JS_OBJECT_TYPE, JSObject::kHeaderSize, Handle::null(), - Builtins::FunctionApply, + Builtins::kFunctionApply, false); // Make sure that Function.prototype.call appears to be compiled. diff --git a/src/builtins.cc b/src/builtins.cc index 4604872..72f9d57 100644 --- a/src/builtins.cc +++ b/src/builtins.cc @@ -1576,7 +1576,7 @@ void Builtins::InitBuiltinFunctionTable() { functions->generator = FUNCTION_ADDR(Generate_##aname); \ functions->c_code = NULL; \ functions->s_name = #aname; \ - functions->name = aname; \ + functions->name = k##aname; \ functions->flags = Code::ComputeFlags(Code::kind, \ NOT_IN_LOOP, \ state, \ @@ -1685,4 +1685,23 @@ const char* Builtins::Lookup(byte* pc) { } +#define DEFINE_BUILTIN_ACCESSOR_C(name, ignore) \ +Handle Builtins::name() { \ + Code** code_address = \ + reinterpret_cast(builtin_address(k##name)); \ + return Handle(code_address); \ +} +#define DEFINE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ +Handle Builtins::name() { \ + Code** code_address = \ + reinterpret_cast(builtin_address(k##name)); \ + return Handle(code_address); \ +} +BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C) +BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A) +BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A) +#undef DEFINE_BUILTIN_ACCESSOR_C +#undef DEFINE_BUILTIN_ACCESSOR_A + + } } // namespace v8::internal diff --git a/src/builtins.h b/src/builtins.h index 4dd6111..bc0facb 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -260,8 +260,8 @@ class Builtins { const char* Lookup(byte* pc); enum Name { -#define DEF_ENUM_C(name, ignore) name, -#define DEF_ENUM_A(name, kind, state, extra) name, +#define DEF_ENUM_C(name, ignore) k##name, +#define DEF_ENUM_A(name, kind, state, extra) k##name, BUILTIN_LIST_C(DEF_ENUM_C) BUILTIN_LIST_A(DEF_ENUM_A) BUILTIN_LIST_DEBUG_A(DEF_ENUM_A) @@ -284,6 +284,15 @@ class Builtins { id_count }; +#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle name(); +#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ + Handle name(); + BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) + BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) + BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) +#undef DECLARE_BUILTIN_ACCESSOR_C +#undef DECLARE_BUILTIN_ACCESSOR_A + Code* builtin(Name name) { // Code::cast cannot be used here since we access builtins // during the marking phase of mark sweep. See IC::Clear. diff --git a/src/compiler.cc b/src/compiler.cc index 1ec4d0f..05048bf 100755 --- a/src/compiler.cc +++ b/src/compiler.cc @@ -710,8 +710,7 @@ Handle Compiler::BuildFunctionInfo(FunctionLiteral* literal, // Generate code if (FLAG_lazy && allow_lazy) { - Handle code( - info.isolate()->builtins()->builtin(Builtins::LazyCompile)); + Handle code = info.isolate()->builtins()->LazyCompile(); info.SetCode(code); } else { if (V8::UseCrankshaft()) { @@ -801,7 +800,7 @@ void Compiler::RecordFunctionCompilation(Logger::LogEventsAndTags tag, if (info->isolate()->logger()->is_logging() || CpuProfiler::is_profiling()) { Handle