| Index: src/builtins.cc
 | 
| diff --git a/src/builtins.cc b/src/builtins.cc
 | 
| index de5817188d95db5b9c63cb773f8592b0e08ad5ab..0a1262ffa062ce602c026262c300c97d998e9074 100644
 | 
| --- a/src/builtins.cc
 | 
| +++ b/src/builtins.cc
 | 
| @@ -3523,22 +3523,33 @@ MUST_USE_RESULT MaybeHandle<Object> HandleApiCallHelper(
 | 
|      Isolate* isolate, BuiltinArguments<BuiltinExtraArguments::kTarget> args) {
 | 
|    HandleScope scope(isolate);
 | 
|    Handle<JSFunction> function = args.target();
 | 
| -  DCHECK(args.receiver()->IsJSReceiver());
 | 
| +  Handle<JSReceiver> receiver;
 | 
|    // TODO(ishell): turn this back to a DCHECK.
 | 
|    CHECK(function->shared()->IsApiFunction());
 | 
|  
 | 
|    Handle<FunctionTemplateInfo> fun_data(
 | 
|        function->shared()->get_api_func_data(), isolate);
 | 
|    if (is_construct) {
 | 
| -    ASSIGN_RETURN_ON_EXCEPTION(
 | 
| -        isolate, fun_data,
 | 
| -        ApiNatives::ConfigureInstance(isolate, fun_data,
 | 
| -                                      Handle<JSObject>::cast(args.receiver())),
 | 
| -        Object);
 | 
| +    DCHECK(args.receiver()->IsTheHole());
 | 
| +    if (fun_data->instance_template()->IsUndefined()) {
 | 
| +      v8::Local<ObjectTemplate> templ =
 | 
| +          ObjectTemplate::New(reinterpret_cast<v8::Isolate*>(isolate),
 | 
| +                              ToApiHandle<v8::FunctionTemplate>(fun_data));
 | 
| +      fun_data->set_instance_template(*Utils::OpenHandle(*templ));
 | 
| +    }
 | 
| +    Handle<ObjectTemplateInfo> instance_template(
 | 
| +        ObjectTemplateInfo::cast(fun_data->instance_template()), isolate);
 | 
| +    ASSIGN_RETURN_ON_EXCEPTION(isolate, receiver,
 | 
| +                               ApiNatives::InstantiateObject(instance_template),
 | 
| +                               Object);
 | 
| +    args[0] = *receiver;
 | 
| +    DCHECK_EQ(*receiver, *args.receiver());
 | 
| +  } else {
 | 
| +    DCHECK(args.receiver()->IsJSReceiver());
 | 
| +    receiver = args.at<JSReceiver>(0);
 | 
|    }
 | 
|  
 | 
|    if (!is_construct && !fun_data->accept_any_receiver()) {
 | 
| -    Handle<JSReceiver> receiver = args.at<JSReceiver>(0);
 | 
|      if (receiver->IsJSObject() && receiver->IsAccessCheckNeeded()) {
 | 
|        Handle<JSObject> js_receiver = Handle<JSObject>::cast(receiver);
 | 
|        if (!isolate->MayAccess(handle(isolate->context()), js_receiver)) {
 | 
| @@ -3548,7 +3559,7 @@ MUST_USE_RESULT MaybeHandle<Object> HandleApiCallHelper(
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  Object* raw_holder = fun_data->GetCompatibleReceiver(isolate, args[0]);
 | 
| +  Object* raw_holder = fun_data->GetCompatibleReceiver(isolate, *receiver);
 | 
|  
 | 
|    if (raw_holder->IsNull()) {
 | 
|      // This function cannot be called with the given receiver.  Abort!
 | 
| @@ -3592,7 +3603,7 @@ MUST_USE_RESULT MaybeHandle<Object> HandleApiCallHelper(
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  return scope.CloseAndEscape(args.receiver());
 | 
| +  return scope.CloseAndEscape(receiver);
 | 
|  }
 | 
|  
 | 
|  }  // namespace
 | 
| 
 |