| 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 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  Loading... | 
| 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  Loading... | 
| 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 } | 
| OLD | NEW | 
|---|