Index: src/js/v8natives.js |
diff --git a/src/js/v8natives.js b/src/js/v8natives.js |
index f57a89a9c0a57499ddcb1aa2e404f2a9672ad612..8a748a5ebf2ae24c2acdf685fac0dc73a0efd486 100644 |
--- a/src/js/v8natives.js |
+++ b/src/js/v8natives.js |
@@ -1236,81 +1236,11 @@ utils.InstallFunctions(GlobalNumber, DONT_ENUM, [ |
// ---------------------------------------------------------------------------- |
// Function |
-// ES6 9.2.3.2 Function.prototype.bind(thisArg , ...args) |
-function FunctionBind(this_arg) { // Length is 1. |
- if (!IS_CALLABLE(this)) throw MakeTypeError(kFunctionBind); |
- |
- var boundFunction = function () { |
- // Poison .arguments and .caller, but is otherwise not detectable. |
- "use strict"; |
- // This function must not use any object literals (Object, Array, RegExp), |
- // since the literals-array is being used to store the bound data. |
- if (!IS_UNDEFINED(new.target)) { |
- return %NewObjectFromBound(boundFunction); |
- } |
- var bindings = %BoundFunctionGetBindings(boundFunction); |
- |
- var argc = %_ArgumentsLength(); |
- if (argc == 0) { |
- return %Apply(bindings[0], bindings[1], bindings, 2, bindings.length - 2); |
- } |
- if (bindings.length === 2) { |
- return %Apply(bindings[0], bindings[1], arguments, 0, argc); |
- } |
- var bound_argc = bindings.length - 2; |
- var argv = new InternalArray(bound_argc + argc); |
- for (var i = 0; i < bound_argc; i++) { |
- argv[i] = bindings[i + 2]; |
- } |
- for (var j = 0; j < argc; j++) { |
- argv[i++] = %_Arguments(j); |
- } |
- return %Apply(bindings[0], bindings[1], argv, 0, bound_argc + argc); |
- }; |
- |
- var proto = %_GetPrototype(this); // in ES6 9.4.1.3 BoundFunctionCreate |
- |
- var new_length = 0; |
- if (ObjectGetOwnPropertyDescriptor(this, "length") !== UNDEFINED) { |
- var old_length = this.length; |
- if (IS_NUMBER(old_length)) { |
- var argc = %_ArgumentsLength(); |
- if (argc > 0) argc--; // Don't count the thisArg as parameter. |
- new_length = TO_INTEGER(old_length) - argc; |
- if (new_length < 0) new_length = 0; |
- } |
- } |
- |
- // This runtime function finds any remaining arguments on the stack, |
- // so we don't pass the arguments object. |
- var result = %FunctionBindArguments(boundFunction, this, this_arg, |
- new_length, proto); |
- |
- var name = this.name; |
- var bound_name = IS_STRING(name) ? name : ""; |
- %DefineDataPropertyUnchecked(result, "name", "bound " + bound_name, |
- DONT_ENUM | READ_ONLY); |
- |
- // We already have caller and arguments properties on functions, |
- // which are non-configurable. It therefore makes no sence to |
- // try to redefine these as defined by the spec. The spec says |
- // that bind should make these throw a TypeError if get or set |
- // is called and make them non-enumerable and non-configurable. |
- // To be consistent with our normal functions we leave this as it is. |
- // TODO(lrn): Do set these to be thrower. |
- return result; |
-} |
- |
- |
// ---------------------------------------------------------------------------- |
%AddNamedProperty(GlobalFunction.prototype, "constructor", GlobalFunction, |
DONT_ENUM); |
-utils.InstallFunctions(GlobalFunction.prototype, DONT_ENUM, [ |
- "bind", FunctionBind, |
-]); |
- |
// ---------------------------------------------------------------------------- |
// Iterator related spec functions. |