diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins-bigint.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins-bigint.cc | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/deps/v8/src/builtins/builtins-bigint.cc b/deps/v8/src/builtins/builtins-bigint.cc index fdbd3937d4..6c04c9dcb7 100644 --- a/deps/v8/src/builtins/builtins-bigint.cc +++ b/deps/v8/src/builtins/builtins-bigint.cc @@ -13,29 +13,28 @@ namespace internal { BUILTIN(BigIntConstructor) { HandleScope scope(isolate); - Handle<Object> value = args.atOrUndefined(isolate, 1); - - if (value->IsJSReceiver()) { - ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, value, - JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(value), - ToPrimitiveHint::kNumber)); - } - - if (value->IsNumber()) { - RETURN_RESULT_OR_FAILURE(isolate, BigInt::FromNumber(isolate, value)); - } else { - RETURN_RESULT_OR_FAILURE(isolate, BigInt::FromObject(isolate, value)); + if (args.new_target()->IsUndefined(isolate)) { // [[Call]] + Handle<Object> value = args.atOrUndefined(isolate, 1); + + if (value->IsJSReceiver()) { + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, value, + JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(value), + ToPrimitiveHint::kNumber)); + } + + if (value->IsNumber()) { + RETURN_RESULT_OR_FAILURE(isolate, BigInt::FromNumber(isolate, value)); + } else { + RETURN_RESULT_OR_FAILURE(isolate, BigInt::FromObject(isolate, value)); + } + } else { // [[Construct]] + THROW_NEW_ERROR_RETURN_FAILURE( + isolate, NewTypeError(MessageTemplate::kNotConstructor, + isolate->factory()->BigInt_string())); } } -BUILTIN(BigIntConstructor_ConstructStub) { - HandleScope scope(isolate); - THROW_NEW_ERROR_RETURN_FAILURE( - isolate, NewTypeError(MessageTemplate::kNotConstructor, - isolate->factory()->BigInt_string())); -} - BUILTIN(BigIntAsUintN) { HandleScope scope(isolate); Handle<Object> bits_obj = args.atOrUndefined(isolate, 1); |