Chromium Code Reviews| 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 part of js_backend; | 5 part of js_backend; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A function element that represents a closure call. The signature is copied | 8 * A function element that represents a closure call. The signature is copied |
| 9 * from the given element. | 9 * from the given element. |
| 10 */ | 10 */ |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 387 List<SourceString> names = selector.getOrderedNamedArguments(); | 387 List<SourceString> names = selector.getOrderedNamedArguments(); |
| 388 | 388 |
| 389 String invocationName = | 389 String invocationName = |
| 390 namer.instanceMethodInvocationName(member.getLibrary(), member.name, | 390 namer.instanceMethodInvocationName(member.getLibrary(), member.name, |
| 391 selector); | 391 selector); |
| 392 if (alreadyGenerated.contains(invocationName)) return; | 392 if (alreadyGenerated.contains(invocationName)) return; |
| 393 alreadyGenerated.add(invocationName); | 393 alreadyGenerated.add(invocationName); |
| 394 CodeBuffer buffer = new CodeBuffer(); | 394 CodeBuffer buffer = new CodeBuffer(); |
| 395 buffer.add('function('); | 395 buffer.add('function('); |
| 396 | 396 |
| 397 JavaScriptBackend backend = compiler.backend; | |
|
ahe
2012/11/13 18:41:26
Looks like this variable is only used once.
ngeoffray
2012/11/14 09:24:44
Yes, but I need the 'cast' to JavaScriptBackend.
| |
| 398 bool isInterceptorClass = | |
| 399 backend.isInterceptorClass(member.getEnclosingClass()); | |
| 400 | |
| 401 // If the method is in an interceptor class, we need to also pass | |
| 402 // the actual receiver. | |
| 403 int extraArgumentCount = isInterceptorClass ? 1 : 0; | |
| 404 | |
| 397 // The parameters that this stub takes. | 405 // The parameters that this stub takes. |
| 398 List<String> parametersBuffer = new List<String>(selector.argumentCount); | 406 List<String> parametersBuffer = |
| 407 new List<String>(selector.argumentCount + extraArgumentCount); | |
| 399 // The arguments that will be passed to the real method. | 408 // The arguments that will be passed to the real method. |
| 400 List<String> argumentsBuffer = new List<String>(parameters.parameterCount); | 409 List<String> argumentsBuffer = |
| 410 new List<String>(parameters.parameterCount + extraArgumentCount); | |
| 401 | 411 |
| 402 int count = 0; | 412 int count = 0; |
| 413 if (isInterceptorClass) { | |
| 414 count++; | |
| 415 // Use $ to avoid clashes with other parameter names. | |
|
floitsch
2012/11/13 18:20:01
Too brittle. Discuss with Erik how this should be
ngeoffray
2012/11/14 09:18:43
Note that this is not touched by the minifier. I c
floitsch
2012/11/14 10:06:33
1. It should go through the minifier (eventually).
ngeoffray
2012/11/14 10:10:58
It doesn't have to be an accident, just an interna
floitsch
2012/11/14 10:18:45
Yes. there are several possibilities. That's why I
floitsch
2012/11/14 12:01:26
As Erik suggests: this should work for now.
Please
| |
| 416 parametersBuffer[0] = r'$'; | |
| 417 argumentsBuffer[0] = r'$'; | |
| 418 } | |
| 419 | |
| 403 int indexOfLastOptionalArgumentInParameters = positionalArgumentCount - 1; | 420 int indexOfLastOptionalArgumentInParameters = positionalArgumentCount - 1; |
| 404 TreeElements elements = | 421 TreeElements elements = |
| 405 compiler.enqueuer.resolution.getCachedElements(member); | 422 compiler.enqueuer.resolution.getCachedElements(member); |
| 406 | 423 |
| 407 parameters.orderedForEachParameter((Element element) { | 424 parameters.orderedForEachParameter((Element element) { |
| 408 String jsName = JsNames.getValid(element.name.slowToString()); | 425 String jsName = JsNames.getValid(element.name.slowToString()); |
| 409 if (count < positionalArgumentCount) { | 426 if (count < positionalArgumentCount + extraArgumentCount) { |
| 410 parametersBuffer[count] = jsName; | 427 parametersBuffer[count] = jsName; |
| 411 argumentsBuffer[count] = jsName; | 428 argumentsBuffer[count] = jsName; |
| 412 } else { | 429 } else { |
| 413 int index = names.indexOf(element.name); | 430 int index = names.indexOf(element.name); |
| 414 if (index != -1) { | 431 if (index != -1) { |
| 415 indexOfLastOptionalArgumentInParameters = count; | 432 indexOfLastOptionalArgumentInParameters = count; |
| 416 // The order of the named arguments is not the same as the | 433 // The order of the named arguments is not the same as the |
| 417 // one in the real method (which is in Dart source order). | 434 // one in the real method (which is in Dart source order). |
| 418 argumentsBuffer[count] = jsName; | 435 argumentsBuffer[count] = jsName; |
| 419 parametersBuffer[selector.positionalArgumentCount + index] = jsName; | 436 parametersBuffer[selector.positionalArgumentCount + index] = jsName; |
| (...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1661 const String HOOKS_API_USAGE = """ | 1678 const String HOOKS_API_USAGE = """ |
| 1662 // Generated by dart2js, the Dart to JavaScript compiler. | 1679 // Generated by dart2js, the Dart to JavaScript compiler. |
| 1663 // The code supports the following hooks: | 1680 // The code supports the following hooks: |
| 1664 // dartPrint(message) - if this function is defined it is called | 1681 // dartPrint(message) - if this function is defined it is called |
| 1665 // instead of the Dart [print] method. | 1682 // instead of the Dart [print] method. |
| 1666 // dartMainRunner(main) - if this function is defined, the Dart [main] | 1683 // dartMainRunner(main) - if this function is defined, the Dart [main] |
| 1667 // method will not be invoked directly. | 1684 // method will not be invoked directly. |
| 1668 // Instead, a closure that will invoke [main] is | 1685 // Instead, a closure that will invoke [main] is |
| 1669 // passed to [dartMainRunner]. | 1686 // passed to [dartMainRunner]. |
| 1670 """; | 1687 """; |
| OLD | NEW |