Index: src/builtins/builtins.cc |
diff --git a/src/builtins/builtins.cc b/src/builtins/builtins.cc |
index c7021029ec5a30a28d04bea03f5baec457a7773a..c43045104f7a2d90b4620e6a637cd17040a596ff 100644 |
--- a/src/builtins/builtins.cc |
+++ b/src/builtins/builtins.cc |
@@ -5,6 +5,7 @@ |
#include "src/builtins/builtins.h" |
#include "src/api.h" |
#include "src/assembler-inl.h" |
+#include "src/callable.h" |
#include "src/code-events.h" |
#include "src/compiler/code-assembler.h" |
#include "src/ic/ic-state.h" |
@@ -204,6 +205,23 @@ const char* Builtins::Lookup(byte* pc) { |
} |
// static |
+Callable Builtins::CallableFor(Isolate* isolate, Name name) { |
+ switch (name) { |
+#define CASE(Name, _, __, InterfaceDescriptor, ...) \ |
+ case k##Name: { \ |
+ Handle<Code> code(Code::cast(isolate->builtins()->builtins_[name])); \ |
+ auto descriptor = InterfaceDescriptor##Descriptor(isolate); \ |
+ return Callable(code, descriptor); \ |
+ } |
+ BUILTIN_LIST_TFS(CASE) |
+#undef CASE |
+ default: |
+ UNREACHABLE(); |
+ return Callable(Handle<Code>::null(), VoidDescriptor(isolate)); |
+ } |
+} |
+ |
+// static |
const char* Builtins::name(int index) { |
switch (index) { |
#define CASE(Name, ...) \ |