Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Unified Diff: lib/compiler/implementation/js_backend/emitter.dart

Issue 10919316: Address Peter's comments on the new parameter specification implementation. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | lib/compiler/implementation/js_backend/namer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/compiler/implementation/js_backend/emitter.dart
===================================================================
--- lib/compiler/implementation/js_backend/emitter.dart (revision 12495)
+++ lib/compiler/implementation/js_backend/emitter.dart (working copy)
@@ -360,7 +360,7 @@
}
if (parameters.optionalParametersAreNamed
&& selector.namedArgumentCount == parameters.optionalParameterCount) {
- // If the selector has the same number of named arguments than
+ // If the selector has the same number of named arguments as
// the element, we don't need to add a stub. The call site will
// hit the method directly.
return;
@@ -379,42 +379,6 @@
// The arguments that will be passed to the real method.
List<String> argumentsBuffer = new List<String>(parameters.parameterCount);
- // TODO(5074): Update this comment once we remove support for
- // the deprecated parameter specification.
- // We fill the lists depending on the selector. For example,
- // take method foo:
- // foo(a, b, [c, d]);
- //
- // We may have multiple ways of calling foo:
- // (1) foo(1, 2, 3, 4)
- // (2) foo(1, 2);
- // (3) foo(1, 2, 3);
- // (4) foo(1, 2, c: 3);
- // (5) foo(1, 2, d: 4);
- // (6) foo(1, 2, c: 3, d: 4);
- // (7) foo(1, 2, d: 4, c: 3);
- //
- // What we generate at the call sites are:
- // (1) foo$4(1, 2, 3, 4)
- // (2) foo$2(1, 2);
- // (3) foo$3(1, 2, 3);
- // (4) foo$3$c(1, 2, 3);
- // (5) foo$3$d(1, 2, 4);
- // (6) foo$4$c$d(1, 2, 3, 4);
- // (7) foo$4$c$d(1, 2, 3, 4);
- //
- // The stubs we generate are (expressed in Dart):
- // (1) No stub generated, call is direct.
- // (2) foo$2(a, b) => foo$4(a, b, null, null)
- // (3) foo$3(a, b, c) => foo$4(a, b, c, null)
- // (4) foo$3$c(a, b, c) => foo$4(a, b, c, null);
- // (5) foo$3$d(a, b, d) => foo$4(a, b, null, d);
- // (6) foo$4$c$d(a, b, c, d) => foo$4(a, b, c, d);
- // (7) Same as (5).
- //
- // We need to generate a stub for (5) because the order of the
- // stub arguments and the real method may be different.
-
int count = 0;
int indexOfLastOptionalArgumentInParameters = positionalArgumentCount - 1;
TreeElements elements =
@@ -473,6 +437,41 @@
void addParameterStubs(FunctionElement member,
DefineMemberFunction defineInstanceMember) {
+ // TODO(5074): Update this comment once we remove support for
+ // the deprecated parameter specification.
+ // We fill the lists depending on the selector. For example,
+ // take method foo:
+ // foo(a, b, [c, d]);
+ //
+ // We may have multiple ways of calling foo:
+ // (1) foo(1, 2, 3, 4)
+ // (2) foo(1, 2);
+ // (3) foo(1, 2, 3);
+ // (4) foo(1, 2, c: 3);
+ // (5) foo(1, 2, d: 4);
+ // (6) foo(1, 2, c: 3, d: 4);
+ // (7) foo(1, 2, d: 4, c: 3);
+ //
+ // What we generate at the call sites are:
+ // (1) foo$4(1, 2, 3, 4)
+ // (2) foo$2(1, 2);
+ // (3) foo$3(1, 2, 3);
+ // (4) foo$3$c(1, 2, 3);
+ // (5) foo$3$d(1, 2, 4);
+ // (6) foo$4$c$d(1, 2, 3, 4);
+ // (7) foo$4$c$d(1, 2, 3, 4);
+ //
+ // The stubs we generate are (expressed in Dart):
+ // (1) No stub generated, call is direct.
+ // (2) foo$2(a, b) => foo$4(a, b, null, null)
+ // (3) foo$3(a, b, c) => foo$4(a, b, c, null)
+ // (4) foo$3$c(a, b, c) => foo$4(a, b, c, null);
+ // (5) foo$3$d(a, b, d) => foo$4(a, b, null, d);
+ // (6) foo$4$c$d(a, b, c, d) => foo$4(a, b, c, d);
+ // (7) Same as (5).
+ //
+ // We need to generate a stub for (5) because the order of the
+ // stub arguments and the real method may be different.
Set<Selector> selectors = compiler.codegenWorld.invokedNames[member.name];
if (selectors == null) return;
for (Selector selector in selectors) {
@@ -1056,7 +1055,7 @@
if (compiler.codegenWorld.instantiatedClasses.isEmpty()) return;
String noSuchMethodName =
- namer.instanceMethodNameByArity(Compiler.NO_SUCH_METHOD, 2);
+ namer.publicInstanceMethodNameByArity(Compiler.NO_SUCH_METHOD, 2);
// Keep track of the JavaScript names we've already added so we
// do not introduce duplicates (bad for code size).
« no previous file with comments | « no previous file | lib/compiler/implementation/js_backend/namer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698