OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 patch class Function { | 5 patch class Function { |
6 static _apply(List arguments, List names) | 6 static _apply(List arguments, List names) |
7 native "Function_apply"; | 7 native "Function_apply"; |
8 | 8 |
9 /* patch */ static apply(Function function, | 9 /* patch */ static apply(Function function, |
10 List positionalArguments, | 10 List positionalArguments, |
11 [Map<String,dynamic> namedArguments]) { | 11 [Map<String,dynamic> namedArguments]) { |
12 int numPositionalArguments = 1 + // Function is first implicit argument. | 12 int numPositionalArguments = 1 + // Function is first implicit argument. |
13 (positionalArguments != null ? positionalArguments.length : 0); | 13 (positionalArguments != null ? positionalArguments.length : 0); |
14 int numNamedArguments = namedArguments != null ? namedArguments.length : 0; | 14 int numNamedArguments = namedArguments != null ? namedArguments.length : 0; |
15 int numArguments = numPositionalArguments + numNamedArguments; | 15 int numArguments = numPositionalArguments + numNamedArguments; |
16 List arguments = new List(numArguments); | 16 List arguments = new List(numArguments); |
17 arguments[0] = function; | 17 arguments[0] = function; |
18 arguments.setRange(1, numPositionalArguments - 1, positionalArguments); | 18 arguments.setRange(1, numPositionalArguments, positionalArguments); |
19 List names = new List(numNamedArguments); | 19 List names = new List(numNamedArguments); |
20 int argumentIndex = numPositionalArguments; | 20 int argumentIndex = numPositionalArguments; |
21 int nameIndex = 0; | 21 int nameIndex = 0; |
22 if (numNamedArguments > 0) { | 22 if (numNamedArguments > 0) { |
23 namedArguments.forEach((name, value) { | 23 namedArguments.forEach((name, value) { |
24 arguments[argumentIndex++] = value; | 24 arguments[argumentIndex++] = value; |
25 names[nameIndex++] = name; | 25 names[nameIndex++] = name; |
26 }); | 26 }); |
27 } | 27 } |
28 return _apply(arguments, names); | 28 return _apply(arguments, names); |
29 } | 29 } |
30 } | 30 } |
OLD | NEW |