| Index: src/builtins.cc
|
| diff --git a/src/builtins.cc b/src/builtins.cc
|
| index 3e68ff3cc22d415e54a6aab8302e6d0e82650d3c..782d4141c933ec411a7db8d36692731aef8047fe 100644
|
| --- a/src/builtins.cc
|
| +++ b/src/builtins.cc
|
| @@ -1045,38 +1045,18 @@ static inline Object* FindHidden(Heap* heap,
|
| // overwritten with undefined. Note that holder and the arguments are
|
| // implicitly rewritten with the first object in the hidden prototype
|
| // chain that actually has the expected type.
|
| -static inline Object* TypeCheck(Heap* heap,
|
| - int argc,
|
| - Object** argv,
|
| +static inline Object* TypeCheck(Heap* heap, Object* recv,
|
| FunctionTemplateInfo* info) {
|
| - Object* recv = argv[0];
|
| // API calls are only supported with JSObject receivers.
|
| if (!recv->IsJSObject()) return heap->null_value();
|
| - Object* sig_obj = info->signature();
|
| - if (sig_obj->IsUndefined()) return recv;
|
| - SignatureInfo* sig = SignatureInfo::cast(sig_obj);
|
| + Object* recv_type = info->signature();
|
| + if (recv_type->IsUndefined()) return recv;
|
| // If necessary, check the receiver
|
| - Object* recv_type = sig->receiver();
|
| Object* holder = recv;
|
| if (!recv_type->IsUndefined()) {
|
| holder = FindHidden(heap, holder, FunctionTemplateInfo::cast(recv_type));
|
| if (holder == heap->null_value()) return heap->null_value();
|
| }
|
| - Object* args_obj = sig->args();
|
| - // If there is no argument signature we're done
|
| - if (args_obj->IsUndefined()) return holder;
|
| - FixedArray* args = FixedArray::cast(args_obj);
|
| - int length = args->length();
|
| - if (argc <= length) length = argc - 1;
|
| - for (int i = 0; i < length; i++) {
|
| - Object* argtype = args->get(i);
|
| - if (argtype->IsUndefined()) continue;
|
| - Object** arg = &argv[-1 - i];
|
| - Object* current = *arg;
|
| - current = FindHidden(heap, current, FunctionTemplateInfo::cast(argtype));
|
| - if (current == heap->null_value()) current = heap->undefined_value();
|
| - *arg = current;
|
| - }
|
| return holder;
|
| }
|
|
|
| @@ -1101,14 +1081,10 @@ MUST_USE_RESULT static Object* HandleApiCallHelper(
|
| fun_data, Handle<JSObject>::cast(args.receiver())));
|
| }
|
|
|
| - SharedFunctionInfo* shared = function->shared();
|
| - if (shared->strict_mode() == SLOPPY && !shared->native()) {
|
| - Object* recv = args[0];
|
| - DCHECK(!recv->IsNull());
|
| - if (recv->IsUndefined()) args[0] = function->global_proxy();
|
| - }
|
| + DCHECK(!args[0]->IsNull());
|
| + if (args[0]->IsUndefined()) args[0] = function->global_proxy();
|
|
|
| - Object* raw_holder = TypeCheck(heap, args.length(), &args[0], *fun_data);
|
| + Object* raw_holder = TypeCheck(heap, args[0], *fun_data);
|
|
|
| if (raw_holder->IsNull()) {
|
| // This function cannot be called with the given receiver. Abort!
|
|
|