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

Side by Side Diff: pkg/compiler/lib/src/universe/universe.dart

Issue 761983002: Support for map literals in cps js emitter (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 6 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 library universe; 5 library universe;
6 6
7 import '../elements/elements.dart'; 7 import '../elements/elements.dart';
8 import '../dart2jslib.dart'; 8 import '../dart2jslib.dart';
9 import '../dart_types.dart'; 9 import '../dart_types.dart';
10 import '../types/types.dart'; 10 import '../types/types.dart';
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 } 490 }
491 491
492 bool applies(Element element, World world) { 492 bool applies(Element element, World world) {
493 if (!sameNameHack(element, world)) return false; 493 if (!sameNameHack(element, world)) return false;
494 return appliesUnnamed(element, world); 494 return appliesUnnamed(element, world);
495 } 495 }
496 496
497 /** 497 /**
498 * Returns a `List` with the evaluated arguments in the normalized order. 498 * Returns a `List` with the evaluated arguments in the normalized order.
499 * 499 *
500 * [compileArgument] is a function that returns a compiled version
501 * of an argument located in [arguments].
502 *
503 * [compileDefaultValue] is a function that returns a compiled constant 500 * [compileDefaultValue] is a function that returns a compiled constant
504 * of an optional argument that is not in [arguments]. 501 * of an optional argument that is not in [compiledArguments].
505 * 502 *
506 * Precondition: `this.applies(element, world)`. 503 * Precondition: `this.applies(element, world)`.
507 * 504 *
508 * Invariant: [element] must be the implementation element. 505 * Invariant: [element] must be the implementation element.
509 */ 506 */
510 /*<S, T>*/ List/*<T>*/ makeArgumentsList( 507 /*<S, T>*/ List/*<T>*/ makeArgumentsList(
511 List/*<S>*/ arguments,
512 FunctionElement element, 508 FunctionElement element,
513 /*T*/ compileArgument(/*S*/ argument), 509 List/*<T>*/ compiledArguments,
514 /*T*/ compileDefaultValue(ParameterElement element)) { 510 /*T*/ compileDefaultValue(ParameterElement element)) {
515 assert(invariant(element, element.isImplementation)); 511 assert(invariant(element, element.isImplementation));
516 List/*<T>*/ result = new List(); 512 List/*<T>*/ result = new List();
517 FunctionSignature parameters = element.functionSignature; 513 FunctionSignature parameters = element.functionSignature;
518 int i = 0; 514 int i = 0;
519 parameters.forEachRequiredParameter((ParameterElement element) { 515 parameters.forEachRequiredParameter((ParameterElement element) {
520 result.add(compileArgument(arguments[i])); 516 result.add(compiledArguments[i]);
521 ++i; 517 ++i;
522 }); 518 });
523 519
524 if (!parameters.optionalParametersAreNamed) { 520 if (!parameters.optionalParametersAreNamed) {
525 parameters.forEachOptionalParameter((ParameterElement element) { 521 parameters.forEachOptionalParameter((ParameterElement element) {
526 if (i < arguments.length) { 522 if (i < compiledArguments.length) {
527 result.add(compileArgument(arguments[i])); 523 result.add(compiledArguments[i]);
528 ++i; 524 ++i;
529 } else { 525 } else {
530 result.add(compileDefaultValue(element)); 526 result.add(compileDefaultValue(element));
531 } 527 }
532 }); 528 });
533 } else { 529 } else {
534 // Visit named arguments and add them into a temporary list. 530 int offset = i;
535 List compiledNamedArguments = [];
536 for (; i < arguments.length; ++i) {
537 compiledNamedArguments.add(compileArgument(arguments[i]));
538 }
539 // Iterate over the optional parameters of the signature, and try to 531 // Iterate over the optional parameters of the signature, and try to
540 // find them in [compiledNamedArguments]. If found, we use the 532 // find them in [compiledNamedArguments]. If found, we use the
541 // value in the temporary list, otherwise the default value. 533 // value in the temporary list, otherwise the default value.
542 parameters.orderedOptionalParameters 534 parameters.orderedOptionalParameters
543 .forEach((ParameterElement element) { 535 .forEach((ParameterElement element) {
544 int foundIndex = namedArguments.indexOf(element.name); 536 int foundIndex = namedArguments.indexOf(element.name);
545 if (foundIndex != -1) { 537 if (foundIndex != -1) {
546 result.add(compiledNamedArguments[foundIndex]); 538 result.add(compiledArguments[offset + foundIndex]);
547 } else { 539 } else {
548 result.add(compileDefaultValue(element)); 540 result.add(compileDefaultValue(element));
549 } 541 }
550 }); 542 });
551 } 543 }
552 return result; 544 return result;
553 } 545 }
554 546
555 /// This is a version of [makeArgumentsList] that works for a `Link` 547 /// This is a version of [makeArgumentsList] that works for a `Link`
556 /// representation of arguments. 548 /// representation of arguments.
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
850 842
851 Selector extendIfReachesAll(Compiler compiler) { 843 Selector extendIfReachesAll(Compiler compiler) {
852 bool canReachAll = compiler.enabledInvokeOn 844 bool canReachAll = compiler.enabledInvokeOn
853 && mask.needsNoSuchMethodHandling(this, compiler.world); 845 && mask.needsNoSuchMethodHandling(this, compiler.world);
854 return canReachAll 846 return canReachAll
855 ? new TypedSelector( 847 ? new TypedSelector(
856 compiler.typesTask.dynamicType, this, compiler.world) 848 compiler.typesTask.dynamicType, this, compiler.world)
857 : this; 849 : this;
858 } 850 }
859 } 851 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/codegen/glue.dart ('k') | tests/compiler/dart2js/js_backend_cps_ir_literals.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698