Chromium Code Reviews| Index: src/v8natives.js |
| diff --git a/src/v8natives.js b/src/v8natives.js |
| index b2ea749c73030e82d4e7323ce9637f721dc593e7..f4b57702a50cf50623dce8de727a912ac10d8520 100644 |
| --- a/src/v8natives.js |
| +++ b/src/v8natives.js |
| @@ -1757,26 +1757,28 @@ function FunctionBind(this_arg) { // Length is 1. |
| } |
| -function NewFunction(arg1) { // length == 1 |
| - var n = %_ArgumentsLength(); |
| +// InternalArray, string, boolean -> Function |
|
Michael Starzinger
2013/05/15 12:32:02
nit: The signature is outdated, I think we can jus
|
| +function NewFunction(arguments, function_token) { |
| + var n = arguments.length; |
| var p = ''; |
| if (n > 1) { |
| - p = new InternalArray(n - 1); |
| - for (var i = 0; i < n - 1; i++) p[i] = %_Arguments(i); |
| - p = Join(p, n - 1, ',', NonStringToString); |
| + p = ToString(arguments[0]); |
| + for (var i = 1; i < n - 1; i++) { |
| + p += ',' + ToString(arguments[i]); |
| + } |
| // If the formal parameters string include ) - an illegal |
| // character - it may make the combined function expression |
| // compile. We avoid this problem by checking for this early on. |
| if (%_CallFunction(p, ')', StringIndexOf) != -1) { |
| - throw MakeSyntaxError('paren_in_arg_string',[]); |
| + throw MakeSyntaxError('paren_in_arg_string', []); |
| } |
| // If the formal parameters include an unbalanced block comment, the |
| // function must be rejected. Since JavaScript does not allow nested |
| // comments we can include a trailing block comment to catch this. |
| p += '\n/' + '**/'; |
| } |
| - var body = (n > 0) ? ToString(%_Arguments(n - 1)) : ''; |
| - var source = '(function(' + p + ') {\n' + body + '\n})'; |
| + var body = (n > 0) ? ToString(arguments[n - 1]) : ''; |
| + var source = '(' + function_token + '(' + p + ') {\n' + body + '\n})'; |
| var global_receiver = %GlobalReceiver(global); |
| var f = %_CallFunction(global_receiver, %CompileString(source, true)); |
| @@ -1786,12 +1788,17 @@ function NewFunction(arg1) { // length == 1 |
| } |
| +function FunctionConstructor(arg1) { // length == 1 |
| + return NewFunction(arguments, 'function'); |
| +} |
| + |
| + |
| // ---------------------------------------------------------------------------- |
| function SetUpFunction() { |
| %CheckIsBootstrapping(); |
| - %SetCode($Function, NewFunction); |
| + %SetCode($Function, FunctionConstructor); |
| %SetProperty($Function.prototype, "constructor", $Function, DONT_ENUM); |
| InstallFunctions($Function.prototype, DONT_ENUM, $Array( |