diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins.cc | 69 |
1 files changed, 40 insertions, 29 deletions
diff --git a/deps/v8/src/builtins/builtins.cc b/deps/v8/src/builtins/builtins.cc index 8fb4844e37..4d5e83a9e0 100644 --- a/deps/v8/src/builtins/builtins.cc +++ b/deps/v8/src/builtins/builtins.cc @@ -10,6 +10,7 @@ #include "src/isolate.h" #include "src/macro-assembler.h" #include "src/objects-inl.h" +#include "src/visitors.h" namespace v8 { namespace internal { @@ -27,8 +28,9 @@ Builtins::~Builtins() {} void Builtins::TearDown() { initialized_ = false; } -void Builtins::IterateBuiltins(ObjectVisitor* v) { - v->VisitPointers(&builtins_[0], &builtins_[0] + builtin_count); +void Builtins::IterateBuiltins(RootVisitor* v) { + v->VisitRootPointers(Root::kBuiltins, &builtins_[0], + &builtins_[0] + builtin_count); } const char* Builtins::Lookup(byte* pc) { @@ -67,28 +69,6 @@ Handle<Code> Builtins::NewCloneShallowArray( return Handle<Code>::null(); } -Handle<Code> Builtins::NewCloneShallowObject(int length) { - switch (length) { - case 0: - return FastCloneShallowObject0(); - case 1: - return FastCloneShallowObject1(); - case 2: - return FastCloneShallowObject2(); - case 3: - return FastCloneShallowObject3(); - case 4: - return FastCloneShallowObject4(); - case 5: - return FastCloneShallowObject5(); - case 6: - return FastCloneShallowObject6(); - default: - UNREACHABLE(); - } - return Handle<Code>::null(); -} - Handle<Code> Builtins::NonPrimitiveToPrimitive(ToPrimitiveHint hint) { switch (hint) { case ToPrimitiveHint::kDefault: @@ -114,21 +94,46 @@ Handle<Code> Builtins::OrdinaryToPrimitive(OrdinaryToPrimitiveHint hint) { } // static +int Builtins::GetBuiltinParameterCount(Name name) { + switch (name) { +#define TFJ_CASE(Name, ParamCount, ...) \ + case k##Name: { \ + return ParamCount; \ + } + BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, TFJ_CASE, IGNORE_BUILTIN, + IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN) +#undef TFJ_CASE + default: + UNREACHABLE(); + return 0; + } +} + +// static Callable Builtins::CallableFor(Isolate* isolate, Name name) { + Handle<Code> code( + reinterpret_cast<Code**>(isolate->builtins()->builtin_address(name))); + CallDescriptors::Key key; switch (name) { -#define CASE(Name, ...) \ - case k##Name: { \ - Handle<Code> code(Code::cast(isolate->builtins()->builtins_[name])); \ - auto descriptor = Builtin_##Name##_InterfaceDescriptor(isolate); \ - return Callable(code, descriptor); \ +// This macro is deliberately crafted so as to emit very little code, +// in order to keep binary size of this function under control. +#define CASE(Name, ...) \ + case k##Name: { \ + key = Builtin_##Name##_InterfaceDescriptor::key(); \ + break; \ } BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, CASE, CASE, CASE, IGNORE_BUILTIN, IGNORE_BUILTIN) #undef CASE + case kConsoleAssert: { + return Callable(code, BuiltinDescriptor(isolate)); + } default: UNREACHABLE(); return Callable(Handle<Code>::null(), VoidDescriptor(isolate)); } + CallInterfaceDescriptor descriptor(isolate, key); + return Callable(code, descriptor); } // static @@ -222,6 +227,12 @@ bool Builtins::HasCppImplementation(int index) { BUILTIN_LIST_ALL(DEFINE_BUILTIN_ACCESSOR) #undef DEFINE_BUILTIN_ACCESSOR +Handle<Code> Builtins::JSConstructStubGeneric() { + return FLAG_harmony_restrict_constructor_return + ? JSConstructStubGenericRestrictedReturn() + : JSConstructStubGenericUnrestrictedReturn(); +} + // static bool Builtins::AllowDynamicFunction(Isolate* isolate, Handle<JSFunction> target, Handle<JSObject> target_global_proxy) { |