Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: src/builtins.cc

Issue 1824993002: [builtins] Add support for JS builtins written in TurboFan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/builtins.h ('k') | src/compiler/code-stub-assembler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/builtins.h" 5 #include "src/builtins.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/api-natives.h" 9 #include "src/api-natives.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
11 #include "src/bootstrapper.h" 11 #include "src/bootstrapper.h"
12 #include "src/code-factory.h"
13 #include "src/compiler/code-stub-assembler.h"
12 #include "src/dateparser-inl.h" 14 #include "src/dateparser-inl.h"
13 #include "src/elements.h" 15 #include "src/elements.h"
14 #include "src/frames-inl.h" 16 #include "src/frames-inl.h"
15 #include "src/gdb-jit.h" 17 #include "src/gdb-jit.h"
16 #include "src/ic/handler-compiler.h" 18 #include "src/ic/handler-compiler.h"
17 #include "src/ic/ic.h" 19 #include "src/ic/ic.h"
18 #include "src/isolate-inl.h" 20 #include "src/isolate-inl.h"
19 #include "src/messages.h" 21 #include "src/messages.h"
20 #include "src/profiler/cpu-profiler.h" 22 #include "src/profiler/cpu-profiler.h"
21 #include "src/property-descriptor.h" 23 #include "src/property-descriptor.h"
(...skipping 1983 matching lines...) Expand 10 before | Expand all | Expand 10 after
2005 HandleScope scope(isolate); 2007 HandleScope scope(isolate);
2006 DCHECK_EQ(3, args.length()); 2008 DCHECK_EQ(3, args.length());
2007 Handle<Object> x = args.at<Object>(1); 2009 Handle<Object> x = args.at<Object>(1);
2008 Handle<Object> y = args.at<Object>(2); 2010 Handle<Object> y = args.at<Object>(2);
2009 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, x, Object::ToNumber(x)); 2011 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, x, Object::ToNumber(x));
2010 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, y, Object::ToNumber(y)); 2012 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, y, Object::ToNumber(y));
2011 int product = static_cast<int>(NumberToUint32(*x) * NumberToUint32(*y)); 2013 int product = static_cast<int>(NumberToUint32(*x) * NumberToUint32(*y));
2012 return *isolate->factory()->NewNumberFromInt(product); 2014 return *isolate->factory()->NewNumberFromInt(product);
2013 } 2015 }
2014 2016
2017 // ES6 section 20.2.2.32 Math.sqrt ( x )
2018 void Builtins::Generate_MathSqrt(compiler::CodeStubAssembler* assembler) {
2019 typedef compiler::CodeStubAssembler::Label Label;
2020 typedef compiler::Node Node;
2021 typedef compiler::CodeStubAssembler::Variable Variable;
2022
2023 Node* context = assembler->Parameter(4);
2024
2025 // Shared entry for the floating point sqrt.
2026 Label do_fsqrt(assembler);
2027 Variable var_fsqrt_x(assembler, MachineRepresentation::kFloat64);
2028
2029 // We might need to loop once due to the ToNumber conversion.
2030 Variable var_x(assembler, MachineRepresentation::kTagged);
2031 Label loop(assembler, &var_x);
2032 var_x.Bind(assembler->Parameter(1));
2033 assembler->Goto(&loop);
2034 assembler->Bind(&loop);
2035 {
2036 // Load the current {x} value.
2037 Node* x = var_x.value();
2038
2039 // Check if {x} is a Smi or a HeapObject.
2040 Label if_xissmi(assembler), if_xisnotsmi(assembler);
2041 assembler->Branch(assembler->WordIsSmi(x), &if_xissmi, &if_xisnotsmi);
2042
2043 assembler->Bind(&if_xissmi);
2044 {
2045 // Perform the floating point sqrt.
2046 var_fsqrt_x.Bind(assembler->SmiToFloat64(x));
2047 assembler->Goto(&do_fsqrt);
2048 }
2049
2050 assembler->Bind(&if_xisnotsmi);
2051 {
2052 // Load the map of {x}.
2053 Node* x_map = assembler->LoadMap(x);
2054
2055 // Check if {x} is a HeapNumber.
2056 Label if_xisnumber(assembler),
2057 if_xisnotnumber(assembler, Label::kDeferred);
2058 assembler->Branch(
2059 assembler->WordEqual(x_map, assembler->HeapNumberMapConstant()),
2060 &if_xisnumber, &if_xisnotnumber);
2061
2062 assembler->Bind(&if_xisnumber);
2063 {
2064 // Perform the floating point sqrt.
2065 var_fsqrt_x.Bind(assembler->LoadHeapNumberValue(x));
2066 assembler->Goto(&do_fsqrt);
2067 }
2068
2069 assembler->Bind(&if_xisnotnumber);
2070 {
2071 // Convert {x} to a Number first.
2072 Callable callable =
2073 CodeFactory::NonNumberToNumber(assembler->isolate());
2074 var_x.Bind(assembler->CallStub(callable, context, x));
2075 assembler->Goto(&loop);
2076 }
2077 }
2078 }
2079
2080 assembler->Bind(&do_fsqrt);
2081 {
2082 Node* x = var_fsqrt_x.value();
2083 Node* value = assembler->Float64Sqrt(x);
2084 Node* result = assembler->Allocate(HeapNumber::kSize,
2085 compiler::CodeStubAssembler::kNone);
2086 assembler->StoreMapNoWriteBarrier(result,
2087 assembler->HeapNumberMapConstant());
2088 assembler->StoreHeapNumberValue(result, value);
2089 assembler->Return(result);
2090 }
2091 }
2015 2092
2016 // ----------------------------------------------------------------------------- 2093 // -----------------------------------------------------------------------------
2017 // ES6 section 26.1 The Reflect Object 2094 // ES6 section 26.1 The Reflect Object
2018 2095
2019 2096
2020 // ES6 section 26.1.3 Reflect.defineProperty 2097 // ES6 section 26.1.3 Reflect.defineProperty
2021 BUILTIN(ReflectDefineProperty) { 2098 BUILTIN(ReflectDefineProperty) {
2022 HandleScope scope(isolate); 2099 HandleScope scope(isolate);
2023 DCHECK_EQ(4, args.length()); 2100 DCHECK_EQ(4, args.length());
2024 Handle<Object> target = args.at<Object>(1); 2101 Handle<Object> target = args.at<Object>(1);
(...skipping 2243 matching lines...) Expand 10 before | Expand all | Expand 10 after
4268 4345
4269 4346
4270 #define DEF_ENUM_C(name, ignore) FUNCTION_ADDR(Builtin_##name), 4347 #define DEF_ENUM_C(name, ignore) FUNCTION_ADDR(Builtin_##name),
4271 Address const Builtins::c_functions_[cfunction_count] = { 4348 Address const Builtins::c_functions_[cfunction_count] = {
4272 BUILTIN_LIST_C(DEF_ENUM_C) 4349 BUILTIN_LIST_C(DEF_ENUM_C)
4273 }; 4350 };
4274 #undef DEF_ENUM_C 4351 #undef DEF_ENUM_C
4275 4352
4276 4353
4277 struct BuiltinDesc { 4354 struct BuiltinDesc {
4355 Handle<Code> (*builder)(Isolate*, struct BuiltinDesc const*);
4278 byte* generator; 4356 byte* generator;
4279 byte* c_code; 4357 byte* c_code;
4280 const char* s_name; // name is only used for generating log information. 4358 const char* s_name; // name is only used for generating log information.
4281 int name; 4359 int name;
4282 Code::Flags flags; 4360 Code::Flags flags;
4283 BuiltinExtraArguments extra_args; 4361 BuiltinExtraArguments extra_args;
4362 int argc;
4284 }; 4363 };
4285 4364
4286 #define BUILTIN_FUNCTION_TABLE_INIT { V8_ONCE_INIT, {} } 4365 #define BUILTIN_FUNCTION_TABLE_INIT { V8_ONCE_INIT, {} }
4287 4366
4288 class BuiltinFunctionTable { 4367 class BuiltinFunctionTable {
4289 public: 4368 public:
4290 BuiltinDesc* functions() { 4369 BuiltinDesc* functions() {
4291 base::CallOnce(&once_, &Builtins::InitBuiltinFunctionTable); 4370 base::CallOnce(&once_, &Builtins::InitBuiltinFunctionTable);
4292 return functions_; 4371 return functions_;
4293 } 4372 }
4294 4373
4295 base::OnceType once_; 4374 base::OnceType once_;
4296 BuiltinDesc functions_[Builtins::builtin_count + 1]; 4375 BuiltinDesc functions_[Builtins::builtin_count + 1];
4297 4376
4298 friend class Builtins; 4377 friend class Builtins;
4299 }; 4378 };
4300 4379
4301 static BuiltinFunctionTable builtin_function_table = 4380 namespace {
4302 BUILTIN_FUNCTION_TABLE_INIT; 4381
4382 BuiltinFunctionTable builtin_function_table = BUILTIN_FUNCTION_TABLE_INIT;
4383
4384 Handle<Code> MacroAssemblerBuilder(Isolate* isolate,
4385 BuiltinDesc const* builtin_desc) {
4386 // For now we generate builtin adaptor code into a stack-allocated
4387 // buffer, before copying it into individual code objects. Be careful
4388 // with alignment, some platforms don't like unaligned code.
4389 #ifdef DEBUG
4390 // We can generate a lot of debug code on Arm64.
4391 const size_t buffer_size = 32 * KB;
4392 #elif V8_TARGET_ARCH_PPC64
4393 // 8 KB is insufficient on PPC64 when FLAG_debug_code is on.
4394 const size_t buffer_size = 10 * KB;
4395 #else
4396 const size_t buffer_size = 8 * KB;
4397 #endif
4398 union {
4399 int force_alignment;
4400 byte buffer[buffer_size]; // NOLINT(runtime/arrays)
4401 } u;
4402
4403 MacroAssembler masm(isolate, u.buffer, sizeof(u.buffer),
4404 CodeObjectRequired::kYes);
4405 // Generate the code/adaptor.
4406 typedef void (*Generator)(MacroAssembler*, int, BuiltinExtraArguments);
4407 Generator g = FUNCTION_CAST<Generator>(builtin_desc->generator);
4408 // We pass all arguments to the generator, but it may not use all of
4409 // them. This works because the first arguments are on top of the
4410 // stack.
4411 DCHECK(!masm.has_frame());
4412 g(&masm, builtin_desc->name, builtin_desc->extra_args);
4413 // Move the code into the object heap.
4414 CodeDesc desc;
4415 masm.GetCode(&desc);
4416 Code::Flags flags = builtin_desc->flags;
4417 return isolate->factory()->NewCode(desc, flags, masm.CodeObject());
4418 }
4419
4420 Handle<Code> CodeStubAssemblerBuilder(Isolate* isolate,
4421 BuiltinDesc const* builtin_desc) {
4422 Zone zone;
4423 compiler::CodeStubAssembler assembler(isolate, &zone, builtin_desc->argc,
4424 builtin_desc->flags,
4425 builtin_desc->s_name);
4426 // Generate the code/adaptor.
4427 typedef void (*Generator)(compiler::CodeStubAssembler*);
4428 Generator g = FUNCTION_CAST<Generator>(builtin_desc->generator);
4429 g(&assembler);
4430 return assembler.GenerateCode();
4431 }
4432
4433 } // namespace
4303 4434
4304 // Define array of pointers to generators and C builtin functions. 4435 // Define array of pointers to generators and C builtin functions.
4305 // We do this in a sort of roundabout way so that we can do the initialization 4436 // We do this in a sort of roundabout way so that we can do the initialization
4306 // within the lexical scope of Builtins:: and within a context where 4437 // within the lexical scope of Builtins:: and within a context where
4307 // Code::Flags names a non-abstract type. 4438 // Code::Flags names a non-abstract type.
4308 void Builtins::InitBuiltinFunctionTable() { 4439 void Builtins::InitBuiltinFunctionTable() {
4309 BuiltinDesc* functions = builtin_function_table.functions_; 4440 BuiltinDesc* functions = builtin_function_table.functions_;
4310 functions[builtin_count].generator = NULL; 4441 functions[builtin_count].builder = nullptr;
4311 functions[builtin_count].c_code = NULL; 4442 functions[builtin_count].generator = nullptr;
4312 functions[builtin_count].s_name = NULL; 4443 functions[builtin_count].c_code = nullptr;
4444 functions[builtin_count].s_name = nullptr;
4313 functions[builtin_count].name = builtin_count; 4445 functions[builtin_count].name = builtin_count;
4314 functions[builtin_count].flags = static_cast<Code::Flags>(0); 4446 functions[builtin_count].flags = static_cast<Code::Flags>(0);
4315 functions[builtin_count].extra_args = BuiltinExtraArguments::kNone; 4447 functions[builtin_count].extra_args = BuiltinExtraArguments::kNone;
4448 functions[builtin_count].argc = 0;
4316 4449
4317 #define DEF_FUNCTION_PTR_C(aname, aextra_args) \ 4450 #define DEF_FUNCTION_PTR_C(aname, aextra_args) \
4451 functions->builder = &MacroAssemblerBuilder; \
4318 functions->generator = FUNCTION_ADDR(Generate_Adaptor); \ 4452 functions->generator = FUNCTION_ADDR(Generate_Adaptor); \
4319 functions->c_code = FUNCTION_ADDR(Builtin_##aname); \ 4453 functions->c_code = FUNCTION_ADDR(Builtin_##aname); \
4320 functions->s_name = #aname; \ 4454 functions->s_name = #aname; \
4321 functions->name = c_##aname; \ 4455 functions->name = c_##aname; \
4322 functions->flags = Code::ComputeFlags(Code::BUILTIN); \ 4456 functions->flags = Code::ComputeFlags(Code::BUILTIN); \
4323 functions->extra_args = BuiltinExtraArguments::aextra_args; \ 4457 functions->extra_args = BuiltinExtraArguments::aextra_args; \
4458 functions->argc = 0; \
4324 ++functions; 4459 ++functions;
4325 4460
4326 #define DEF_FUNCTION_PTR_A(aname, kind, state, extra) \ 4461 #define DEF_FUNCTION_PTR_A(aname, kind, state, extra) \
4462 functions->builder = &MacroAssemblerBuilder; \
4327 functions->generator = FUNCTION_ADDR(Generate_##aname); \ 4463 functions->generator = FUNCTION_ADDR(Generate_##aname); \
4328 functions->c_code = NULL; \ 4464 functions->c_code = NULL; \
4329 functions->s_name = #aname; \ 4465 functions->s_name = #aname; \
4330 functions->name = k##aname; \ 4466 functions->name = k##aname; \
4331 functions->flags = Code::ComputeFlags(Code::kind, state, extra); \ 4467 functions->flags = Code::ComputeFlags(Code::kind, state, extra); \
4332 functions->extra_args = BuiltinExtraArguments::kNone; \ 4468 functions->extra_args = BuiltinExtraArguments::kNone; \
4469 functions->argc = 0; \
4470 ++functions;
4471
4472 #define DEF_FUNCTION_PTR_T(aname, aargc) \
4473 functions->builder = &CodeStubAssemblerBuilder; \
4474 functions->generator = FUNCTION_ADDR(Generate_##aname); \
4475 functions->c_code = NULL; \
4476 functions->s_name = #aname; \
4477 functions->name = k##aname; \
4478 functions->flags = \
4479 Code::ComputeFlags(Code::BUILTIN, UNINITIALIZED, kNoExtraICState); \
4480 functions->extra_args = BuiltinExtraArguments::kNone; \
4481 functions->argc = aargc; \
4333 ++functions; 4482 ++functions;
4334 4483
4335 #define DEF_FUNCTION_PTR_H(aname, kind) \ 4484 #define DEF_FUNCTION_PTR_H(aname, kind) \
4485 functions->builder = &MacroAssemblerBuilder; \
4336 functions->generator = FUNCTION_ADDR(Generate_##aname); \ 4486 functions->generator = FUNCTION_ADDR(Generate_##aname); \
4337 functions->c_code = NULL; \ 4487 functions->c_code = NULL; \
4338 functions->s_name = #aname; \ 4488 functions->s_name = #aname; \
4339 functions->name = k##aname; \ 4489 functions->name = k##aname; \
4340 functions->flags = Code::ComputeHandlerFlags(Code::kind); \ 4490 functions->flags = Code::ComputeHandlerFlags(Code::kind); \
4341 functions->extra_args = BuiltinExtraArguments::kNone; \ 4491 functions->extra_args = BuiltinExtraArguments::kNone; \
4492 functions->argc = 0; \
4342 ++functions; 4493 ++functions;
4343 4494
4344 BUILTIN_LIST_C(DEF_FUNCTION_PTR_C) 4495 BUILTIN_LIST_C(DEF_FUNCTION_PTR_C)
4345 BUILTIN_LIST_A(DEF_FUNCTION_PTR_A) 4496 BUILTIN_LIST_A(DEF_FUNCTION_PTR_A)
4497 BUILTIN_LIST_T(DEF_FUNCTION_PTR_T)
4346 BUILTIN_LIST_H(DEF_FUNCTION_PTR_H) 4498 BUILTIN_LIST_H(DEF_FUNCTION_PTR_H)
4347 BUILTIN_LIST_DEBUG_A(DEF_FUNCTION_PTR_A) 4499 BUILTIN_LIST_DEBUG_A(DEF_FUNCTION_PTR_A)
4348 4500
4349 #undef DEF_FUNCTION_PTR_C 4501 #undef DEF_FUNCTION_PTR_C
4350 #undef DEF_FUNCTION_PTR_A 4502 #undef DEF_FUNCTION_PTR_A
4503 #undef DEF_FUNCTION_PTR_H
4504 #undef DEF_FUNCTION_PTR_T
4351 } 4505 }
4352 4506
4353 4507
4354 void Builtins::SetUp(Isolate* isolate, bool create_heap_objects) { 4508 void Builtins::SetUp(Isolate* isolate, bool create_heap_objects) {
4355 DCHECK(!initialized_); 4509 DCHECK(!initialized_);
4356 4510
4357 // Create a scope for the handles in the builtins. 4511 // Create a scope for the handles in the builtins.
4358 HandleScope scope(isolate); 4512 HandleScope scope(isolate);
4359 4513
4360 const BuiltinDesc* functions = builtin_function_table.functions(); 4514 const BuiltinDesc* functions = builtin_function_table.functions();
4361 4515
4362 // For now we generate builtin adaptor code into a stack-allocated
4363 // buffer, before copying it into individual code objects. Be careful
4364 // with alignment, some platforms don't like unaligned code.
4365 #ifdef DEBUG
4366 // We can generate a lot of debug code on Arm64.
4367 const size_t buffer_size = 32*KB;
4368 #elif V8_TARGET_ARCH_PPC64
4369 // 8 KB is insufficient on PPC64 when FLAG_debug_code is on.
4370 const size_t buffer_size = 10 * KB;
4371 #else
4372 const size_t buffer_size = 8*KB;
4373 #endif
4374 union { int force_alignment; byte buffer[buffer_size]; } u;
4375
4376 // Traverse the list of builtins and generate an adaptor in a 4516 // Traverse the list of builtins and generate an adaptor in a
4377 // separate code object for each one. 4517 // separate code object for each one.
4378 for (int i = 0; i < builtin_count; i++) { 4518 for (int i = 0; i < builtin_count; i++) {
4379 if (create_heap_objects) { 4519 if (create_heap_objects) {
4380 MacroAssembler masm(isolate, u.buffer, sizeof u.buffer, 4520 Handle<Code> code = (*functions[i].builder)(isolate, functions + i);
4381 CodeObjectRequired::kYes);
4382 // Generate the code/adaptor.
4383 typedef void (*Generator)(MacroAssembler*, int, BuiltinExtraArguments);
4384 Generator g = FUNCTION_CAST<Generator>(functions[i].generator);
4385 // We pass all arguments to the generator, but it may not use all of
4386 // them. This works because the first arguments are on top of the
4387 // stack.
4388 DCHECK(!masm.has_frame());
4389 g(&masm, functions[i].name, functions[i].extra_args);
4390 // Move the code into the object heap.
4391 CodeDesc desc;
4392 masm.GetCode(&desc);
4393 Code::Flags flags = functions[i].flags;
4394 Handle<Code> code =
4395 isolate->factory()->NewCode(desc, flags, masm.CodeObject());
4396 // Log the event and add the code to the builtins array. 4521 // Log the event and add the code to the builtins array.
4397 PROFILE(isolate, 4522 PROFILE(isolate,
4398 CodeCreateEvent(Logger::BUILTIN_TAG, AbstractCode::cast(*code), 4523 CodeCreateEvent(Logger::BUILTIN_TAG, AbstractCode::cast(*code),
4399 functions[i].s_name)); 4524 functions[i].s_name));
4400 builtins_[i] = *code; 4525 builtins_[i] = *code;
4401 code->set_builtin_index(i); 4526 code->set_builtin_index(i);
4402 #ifdef ENABLE_DISASSEMBLER 4527 #ifdef ENABLE_DISASSEMBLER
4403 if (FLAG_print_builtin_code) { 4528 if (FLAG_print_builtin_code) {
4404 CodeTracer::Scope trace_scope(isolate->GetCodeTracer()); 4529 CodeTracer::Scope trace_scope(isolate->GetCodeTracer());
4405 OFStream os(trace_scope.file()); 4530 OFStream os(trace_scope.file());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
4459 Code** code_address = \ 4584 Code** code_address = \
4460 reinterpret_cast<Code**>(builtin_address(k##name)); \ 4585 reinterpret_cast<Code**>(builtin_address(k##name)); \
4461 return Handle<Code>(code_address); \ 4586 return Handle<Code>(code_address); \
4462 } 4587 }
4463 #define DEFINE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ 4588 #define DEFINE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
4464 Handle<Code> Builtins::name() { \ 4589 Handle<Code> Builtins::name() { \
4465 Code** code_address = \ 4590 Code** code_address = \
4466 reinterpret_cast<Code**>(builtin_address(k##name)); \ 4591 reinterpret_cast<Code**>(builtin_address(k##name)); \
4467 return Handle<Code>(code_address); \ 4592 return Handle<Code>(code_address); \
4468 } 4593 }
4594 #define DEFINE_BUILTIN_ACCESSOR_T(name, argc) \
4595 Handle<Code> Builtins::name() { \
4596 Code** code_address = reinterpret_cast<Code**>(builtin_address(k##name)); \
4597 return Handle<Code>(code_address); \
4598 }
4469 #define DEFINE_BUILTIN_ACCESSOR_H(name, kind) \ 4599 #define DEFINE_BUILTIN_ACCESSOR_H(name, kind) \
4470 Handle<Code> Builtins::name() { \ 4600 Handle<Code> Builtins::name() { \
4471 Code** code_address = \ 4601 Code** code_address = \
4472 reinterpret_cast<Code**>(builtin_address(k##name)); \ 4602 reinterpret_cast<Code**>(builtin_address(k##name)); \
4473 return Handle<Code>(code_address); \ 4603 return Handle<Code>(code_address); \
4474 } 4604 }
4475 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C) 4605 BUILTIN_LIST_C(DEFINE_BUILTIN_ACCESSOR_C)
4476 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A) 4606 BUILTIN_LIST_A(DEFINE_BUILTIN_ACCESSOR_A)
4607 BUILTIN_LIST_T(DEFINE_BUILTIN_ACCESSOR_T)
4477 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H) 4608 BUILTIN_LIST_H(DEFINE_BUILTIN_ACCESSOR_H)
4478 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A) 4609 BUILTIN_LIST_DEBUG_A(DEFINE_BUILTIN_ACCESSOR_A)
4479 #undef DEFINE_BUILTIN_ACCESSOR_C 4610 #undef DEFINE_BUILTIN_ACCESSOR_C
4480 #undef DEFINE_BUILTIN_ACCESSOR_A 4611 #undef DEFINE_BUILTIN_ACCESSOR_A
4481 4612 #undef DEFINE_BUILTIN_ACCESSOR_T
4613 #undef DEFINE_BUILTIN_ACCESSOR_H
4482 4614
4483 } // namespace internal 4615 } // namespace internal
4484 } // namespace v8 4616 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins.h ('k') | src/compiler/code-stub-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698