OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_CALL_INTERFACE_DESCRIPTOR_H_ | 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ |
6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ | 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 V(CountOp) \ | 77 V(CountOp) \ |
78 V(StringAdd) \ | 78 V(StringAdd) \ |
79 V(StringCompare) \ | 79 V(StringCompare) \ |
80 V(Keyed) \ | 80 V(Keyed) \ |
81 V(Named) \ | 81 V(Named) \ |
82 V(HasProperty) \ | 82 V(HasProperty) \ |
83 V(ForInFilter) \ | 83 V(ForInFilter) \ |
84 V(GetProperty) \ | 84 V(GetProperty) \ |
85 V(CallHandler) \ | 85 V(CallHandler) \ |
86 V(ArgumentAdaptor) \ | 86 V(ArgumentAdaptor) \ |
87 V(ApiCallbackWith0Args) \ | 87 V(ApiCallback) \ |
88 V(ApiCallbackWith1Args) \ | |
89 V(ApiCallbackWith2Args) \ | |
90 V(ApiCallbackWith3Args) \ | |
91 V(ApiCallbackWith4Args) \ | |
92 V(ApiCallbackWith5Args) \ | |
93 V(ApiCallbackWith6Args) \ | |
94 V(ApiCallbackWith7Args) \ | |
95 V(ApiGetter) \ | 88 V(ApiGetter) \ |
96 V(StoreGlobalViaContext) \ | 89 V(StoreGlobalViaContext) \ |
97 V(MathPowTagged) \ | 90 V(MathPowTagged) \ |
98 V(MathPowInteger) \ | 91 V(MathPowInteger) \ |
99 V(GrowArrayElements) \ | 92 V(GrowArrayElements) \ |
100 V(InterpreterDispatch) \ | 93 V(InterpreterDispatch) \ |
101 V(InterpreterPushArgsAndCall) \ | 94 V(InterpreterPushArgsAndCall) \ |
102 V(InterpreterPushArgsAndConstruct) \ | 95 V(InterpreterPushArgsAndConstruct) \ |
103 V(InterpreterPushArgsAndConstructArray) \ | 96 V(InterpreterPushArgsAndConstructArray) \ |
104 V(InterpreterCEntry) \ | 97 V(InterpreterCEntry) \ |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 | 737 |
745 | 738 |
746 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { | 739 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { |
747 public: | 740 public: |
748 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, | 741 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, |
749 kExpectedArgumentsCount) | 742 kExpectedArgumentsCount) |
750 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, | 743 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, |
751 CallInterfaceDescriptor) | 744 CallInterfaceDescriptor) |
752 }; | 745 }; |
753 | 746 |
754 // The ApiCallback*Descriptors have a lot of boilerplate. The superclass | 747 class ApiCallbackDescriptor : public CallInterfaceDescriptor { |
755 // ApiCallbackDescriptorBase contains all the logic, and the | |
756 // ApiCallbackWith*ArgsDescriptor merely instantiate these with a | |
757 // parameter for the number of args. | |
758 // | |
759 // The base class is not meant to be instantiated directly and has no | |
760 // public constructors to ensure this is so. | |
761 // | |
762 // The simplest usage for all the ApiCallback*Descriptors is probably | |
763 // ApiCallbackDescriptorBase::ForArgs(isolate, argc) | |
764 // | |
765 class ApiCallbackDescriptorBase : public CallInterfaceDescriptor { | |
766 public: | 748 public: |
767 DEFINE_PARAMETERS(kFunction, kCallData, kHolder, kApiFunctionAddress) | 749 DEFINE_PARAMETERS(kFunction, kCallData, kHolder, kApiFunctionAddress) |
768 static CallInterfaceDescriptor ForArgs(Isolate* isolate, int argc); | 750 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ApiCallbackDescriptor, |
769 | 751 CallInterfaceDescriptor) |
770 protected: | |
771 virtual int extra_args() const { return 0; } | |
772 ApiCallbackDescriptorBase(Isolate* isolate, CallDescriptors::Key key) | |
773 : CallInterfaceDescriptor(isolate, key) {} | |
774 void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override; | |
775 void InitializePlatformIndependent( | |
776 CallInterfaceDescriptorData* data) override; | |
777 }; | 752 }; |
778 | 753 |
779 class ApiCallbackWith0ArgsDescriptor : public ApiCallbackDescriptorBase { | |
780 public: | |
781 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
782 ApiCallbackWith0ArgsDescriptor, ApiCallbackDescriptorBase, 0) | |
783 }; | |
784 | |
785 class ApiCallbackWith1ArgsDescriptor : public ApiCallbackDescriptorBase { | |
786 public: | |
787 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
788 ApiCallbackWith1ArgsDescriptor, ApiCallbackDescriptorBase, 1) | |
789 }; | |
790 | |
791 class ApiCallbackWith2ArgsDescriptor : public ApiCallbackDescriptorBase { | |
792 public: | |
793 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
794 ApiCallbackWith2ArgsDescriptor, ApiCallbackDescriptorBase, 2) | |
795 }; | |
796 | |
797 class ApiCallbackWith3ArgsDescriptor : public ApiCallbackDescriptorBase { | |
798 public: | |
799 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
800 ApiCallbackWith3ArgsDescriptor, ApiCallbackDescriptorBase, 3) | |
801 }; | |
802 | |
803 class ApiCallbackWith4ArgsDescriptor : public ApiCallbackDescriptorBase { | |
804 public: | |
805 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
806 ApiCallbackWith4ArgsDescriptor, ApiCallbackDescriptorBase, 4) | |
807 }; | |
808 | |
809 class ApiCallbackWith5ArgsDescriptor : public ApiCallbackDescriptorBase { | |
810 public: | |
811 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
812 ApiCallbackWith5ArgsDescriptor, ApiCallbackDescriptorBase, 5) | |
813 }; | |
814 | |
815 class ApiCallbackWith6ArgsDescriptor : public ApiCallbackDescriptorBase { | |
816 public: | |
817 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
818 ApiCallbackWith6ArgsDescriptor, ApiCallbackDescriptorBase, 6) | |
819 }; | |
820 | |
821 class ApiCallbackWith7ArgsDescriptor : public ApiCallbackDescriptorBase { | |
822 public: | |
823 DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG( | |
824 ApiCallbackWith7ArgsDescriptor, ApiCallbackDescriptorBase, 7) | |
825 }; | |
826 | |
827 | |
828 class ApiGetterDescriptor : public CallInterfaceDescriptor { | 754 class ApiGetterDescriptor : public CallInterfaceDescriptor { |
829 public: | 755 public: |
830 DEFINE_PARAMETERS(kReceiver, kHolder, kCallback) | 756 DEFINE_PARAMETERS(kReceiver, kHolder, kCallback) |
831 DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) | 757 DECLARE_DESCRIPTOR(ApiGetterDescriptor, CallInterfaceDescriptor) |
832 | 758 |
833 static const Register ReceiverRegister(); | 759 static const Register ReceiverRegister(); |
834 static const Register HolderRegister(); | 760 static const Register HolderRegister(); |
835 static const Register CallbackRegister(); | 761 static const Register CallbackRegister(); |
836 }; | 762 }; |
837 | 763 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 } // namespace v8 | 849 } // namespace v8 |
924 | 850 |
925 | 851 |
926 #if V8_TARGET_ARCH_ARM64 | 852 #if V8_TARGET_ARCH_ARM64 |
927 #include "src/arm64/interface-descriptors-arm64.h" | 853 #include "src/arm64/interface-descriptors-arm64.h" |
928 #elif V8_TARGET_ARCH_ARM | 854 #elif V8_TARGET_ARCH_ARM |
929 #include "src/arm/interface-descriptors-arm.h" | 855 #include "src/arm/interface-descriptors-arm.h" |
930 #endif | 856 #endif |
931 | 857 |
932 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ | 858 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ |
OLD | NEW |