| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 #ifndef V8_BUILTINS_BUILTINS_H_ | 5 #ifndef V8_BUILTINS_BUILTINS_H_ |
| 6 #define V8_BUILTINS_BUILTINS_H_ | 6 #define V8_BUILTINS_BUILTINS_H_ |
| 7 | 7 |
| 8 #include "src/base/flags.h" | 8 #include "src/base/flags.h" |
| 9 #include "src/handles.h" | 9 #include "src/handles.h" |
| 10 | 10 |
| (...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 // Garbage collection support. | 562 // Garbage collection support. |
| 563 void IterateBuiltins(ObjectVisitor* v); | 563 void IterateBuiltins(ObjectVisitor* v); |
| 564 | 564 |
| 565 // Disassembler support. | 565 // Disassembler support. |
| 566 const char* Lookup(byte* pc); | 566 const char* Lookup(byte* pc); |
| 567 | 567 |
| 568 enum Name { | 568 enum Name { |
| 569 #define DEF_ENUM(Name, ...) k##Name, | 569 #define DEF_ENUM(Name, ...) k##Name, |
| 570 BUILTIN_LIST_ALL(DEF_ENUM) | 570 BUILTIN_LIST_ALL(DEF_ENUM) |
| 571 #undef DEF_ENUM | 571 #undef DEF_ENUM |
| 572 builtin_count | 572 BUILTIN_COUNT |
| 573 }; | 573 }; |
| 574 | 574 |
| 575 #define DECLARE_BUILTIN_ACCESSOR(Name, ...) Handle<Code> Name(); | 575 #define DECLARE_BUILTIN_ACCESSOR(Name, ...) Handle<Code> Name(); |
| 576 BUILTIN_LIST_ALL(DECLARE_BUILTIN_ACCESSOR) | 576 BUILTIN_LIST_ALL(DECLARE_BUILTIN_ACCESSOR) |
| 577 #undef DECLARE_BUILTIN_ACCESSOR | 577 #undef DECLARE_BUILTIN_ACCESSOR |
| 578 | 578 |
| 579 enum Kind { CPP, API, TFJ, TFS, ASM, ASH, DBG }; |
| 580 |
| 581 struct Descriptor { |
| 582 Name id; |
| 583 Kind kind; |
| 584 |
| 585 // For CPP and API functions, this is the C++ entry point. |
| 586 Address entry; |
| 587 |
| 588 // Note: These are always Code objects, but to conform with |
| 589 // IterateBuiltins(), we use an Object* here. |
| 590 Object* code; |
| 591 |
| 592 const char* debug_name; |
| 593 }; |
| 594 |
| 579 // Convenience wrappers. | 595 // Convenience wrappers. |
| 580 Handle<Code> CallFunction( | 596 Handle<Code> CallFunction( |
| 581 ConvertReceiverMode = ConvertReceiverMode::kAny, | 597 ConvertReceiverMode = ConvertReceiverMode::kAny, |
| 582 TailCallMode tail_call_mode = TailCallMode::kDisallow); | 598 TailCallMode tail_call_mode = TailCallMode::kDisallow); |
| 583 Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny, | 599 Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny, |
| 584 TailCallMode tail_call_mode = TailCallMode::kDisallow); | 600 TailCallMode tail_call_mode = TailCallMode::kDisallow); |
| 585 Handle<Code> CallBoundFunction(TailCallMode tail_call_mode); | 601 Handle<Code> CallBoundFunction(TailCallMode tail_call_mode); |
| 586 Handle<Code> NonPrimitiveToPrimitive( | 602 Handle<Code> NonPrimitiveToPrimitive( |
| 587 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); | 603 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); |
| 588 Handle<Code> OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint); | 604 Handle<Code> OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint); |
| 589 Handle<Code> InterpreterPushArgsAndCall( | 605 Handle<Code> InterpreterPushArgsAndCall( |
| 590 TailCallMode tail_call_mode, | 606 TailCallMode tail_call_mode, |
| 591 CallableType function_type = CallableType::kAny); | 607 CallableType function_type = CallableType::kAny); |
| 592 | 608 |
| 593 Code* builtin(Name name) { | 609 Code* builtin(Name name) { |
| 594 // Code::cast cannot be used here since we access builtins | 610 // Code::cast cannot be used here since we access builtins |
| 595 // during the marking phase of mark sweep. See IC::Clear. | 611 // during the marking phase of mark sweep. See IC::Clear. |
| 596 return reinterpret_cast<Code*>(builtins_[name]); | 612 return reinterpret_cast<Code*>(builtins_[name].code); |
| 597 } | 613 } |
| 598 | 614 |
| 599 Address builtin_address(Name name) { | 615 Address builtin_address(Name name) { |
| 600 return reinterpret_cast<Address>(&builtins_[name]); | 616 return reinterpret_cast<Address>(&builtins_[name].code); |
| 601 } | 617 } |
| 602 | 618 |
| 603 const char* name(int index); | 619 const char* name(int index); |
| 604 | 620 |
| 605 bool is_initialized() const { return initialized_; } | 621 bool is_initialized() const { return initialized_; } |
| 606 | 622 |
| 607 MUST_USE_RESULT static MaybeHandle<Object> InvokeApiFunction( | 623 MUST_USE_RESULT static MaybeHandle<Object> InvokeApiFunction( |
| 608 Isolate* isolate, bool is_construct, Handle<HeapObject> function, | 624 Isolate* isolate, bool is_construct, Handle<HeapObject> function, |
| 609 Handle<Object> receiver, int argc, Handle<Object> args[], | 625 Handle<Object> receiver, int argc, Handle<Object> args[], |
| 610 Handle<HeapObject> new_target); | 626 Handle<HeapObject> new_target); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 static void Generate_##Name(MacroAssembler* masm); | 660 static void Generate_##Name(MacroAssembler* masm); |
| 645 #define DECLARE_TF(Name, ...) \ | 661 #define DECLARE_TF(Name, ...) \ |
| 646 static void Generate_##Name(CodeStubAssembler* csasm); | 662 static void Generate_##Name(CodeStubAssembler* csasm); |
| 647 | 663 |
| 648 BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, DECLARE_TF, DECLARE_TF, | 664 BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, DECLARE_TF, DECLARE_TF, |
| 649 DECLARE_ASM, DECLARE_ASM, DECLARE_ASM) | 665 DECLARE_ASM, DECLARE_ASM, DECLARE_ASM) |
| 650 | 666 |
| 651 #undef DECLARE_ASM | 667 #undef DECLARE_ASM |
| 652 #undef DECLARE_TF | 668 #undef DECLARE_TF |
| 653 | 669 |
| 654 // Note: These are always Code objects, but to conform with | 670 Descriptor builtins_[BUILTIN_COUNT]; |
| 655 // IterateBuiltins() above which assumes Object**'s for the callback | |
| 656 // function f, we use an Object* array here. | |
| 657 Object* builtins_[builtin_count]; | |
| 658 bool initialized_; | 671 bool initialized_; |
| 659 | 672 |
| 660 friend class Isolate; | 673 friend class Isolate; |
| 661 | 674 |
| 662 DISALLOW_COPY_AND_ASSIGN(Builtins); | 675 DISALLOW_COPY_AND_ASSIGN(Builtins); |
| 663 }; | 676 }; |
| 664 | 677 |
| 665 } // namespace internal | 678 } // namespace internal |
| 666 } // namespace v8 | 679 } // namespace v8 |
| 667 | 680 |
| 668 #endif // V8_BUILTINS_BUILTINS_H_ | 681 #endif // V8_BUILTINS_BUILTINS_H_ |
| OLD | NEW |