Index: src/builtins.cc |
diff --git a/src/builtins.cc b/src/builtins.cc |
index c21166cac8cddf26ce4c9ff654f111b6c2aa0076..f24f96d600037e0a9094934d8908ea1b0ecfceef 100644 |
--- a/src/builtins.cc |
+++ b/src/builtins.cc |
@@ -1971,78 +1971,12 @@ |
} |
-// ES6 section 19.2.3.2 Function.prototype.bind ( thisArg, ...args ) |
-BUILTIN(FunctionPrototypeBind) { |
- HandleScope scope(isolate); |
- DCHECK_LE(1, args.length()); |
- if (!args.receiver()->IsCallable()) { |
- THROW_NEW_ERROR_RETURN_FAILURE( |
- isolate, NewTypeError(MessageTemplate::kFunctionBind)); |
- } |
- |
- // Allocate the bound function with the given {this_arg} and {args}. |
- Handle<JSReceiver> target = args.at<JSReceiver>(0); |
- Handle<Object> this_arg = isolate->factory()->undefined_value(); |
- ScopedVector<Handle<Object>> argv(std::max(0, args.length() - 2)); |
- if (args.length() > 1) { |
- this_arg = args.at<Object>(1); |
- for (int i = 2; i < args.length(); ++i) { |
- argv[i - 2] = args.at<Object>(i); |
- } |
- } |
- Handle<JSBoundFunction> function; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, function, |
- isolate->factory()->NewJSBoundFunction(target, this_arg, argv)); |
- |
- // TODO(bmeurer): Optimize the rest for the common cases where {target} is |
- // a function with some initial map or even a bound function. |
- // Setup the "length" property based on the "length" of the {target}. |
- Handle<Object> length(Smi::FromInt(0), isolate); |
- Maybe<bool> target_has_length = |
- JSReceiver::HasOwnProperty(target, isolate->factory()->length_string()); |
- if (!target_has_length.IsJust()) { |
- return isolate->heap()->exception(); |
- } else if (target_has_length.FromJust()) { |
- Handle<Object> target_length; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, target_length, |
- JSReceiver::GetProperty(target, isolate->factory()->length_string())); |
- if (target_length->IsNumber()) { |
- length = isolate->factory()->NewNumber(std::max( |
- 0.0, DoubleToInteger(target_length->Number()) - argv.length())); |
- } |
- } |
- function->set_length(*length); |
- |
- // Setup the "name" property based on the "name" of the {target}. |
- Handle<Object> target_name; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, target_name, |
- JSReceiver::GetProperty(target, isolate->factory()->name_string())); |
- Handle<String> name; |
- if (!target_name->IsString()) { |
- name = isolate->factory()->bound__string(); |
- } else { |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, name, Name::ToFunctionName(Handle<String>::cast(target_name))); |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, name, isolate->factory()->NewConsString( |
- isolate->factory()->bound__string(), name)); |
- } |
- function->set_name(*name); |
- return *function; |
-} |
- |
- |
// ES6 section 19.2.3.5 Function.prototype.toString ( ) |
BUILTIN(FunctionPrototypeToString) { |
HandleScope scope(isolate); |
Handle<Object> receiver = args.receiver(); |
- if (receiver->IsJSBoundFunction()) { |
- return *JSBoundFunction::ToString(Handle<JSBoundFunction>::cast(receiver)); |
- } else if (receiver->IsJSFunction()) { |
+ if (receiver->IsJSFunction()) { |
return *JSFunction::ToString(Handle<JSFunction>::cast(receiver)); |
} |
THROW_NEW_ERROR_RETURN_FAILURE( |