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

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

Issue 1213833002: Use a FunctionSignature in CallStructure.signatureApplies (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/compiler/lib/src/resolution/constructors.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 dart2js.compile_time_constant_evaluator; 5 library dart2js.compile_time_constant_evaluator;
6 6
7 import 'constant_system_dart.dart'; 7 import 'constant_system_dart.dart';
8 import 'constants/constant_system.dart'; 8 import 'constants/constant_system.dart';
9 import 'constants/expressions.dart'; 9 import 'constants/expressions.dart';
10 import 'constants/values.dart'; 10 import 'constants/values.dart';
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 * Returns the normalized list of constant arguments that are passed to the 772 * Returns the normalized list of constant arguments that are passed to the
773 * constructor including both the concrete arguments and default values for 773 * constructor including both the concrete arguments and default values for
774 * omitted optional arguments. 774 * omitted optional arguments.
775 * 775 *
776 * Invariant: [target] must be an implementation element. 776 * Invariant: [target] must be an implementation element.
777 */ 777 */
778 List<AstConstant> evaluateArgumentsToConstructor( 778 List<AstConstant> evaluateArgumentsToConstructor(
779 Node node, 779 Node node,
780 CallStructure callStructure, 780 CallStructure callStructure,
781 Link<Node> arguments, 781 Link<Node> arguments,
782 FunctionElement target, 782 ConstructorElement target,
783 {AstConstant compileArgument(Node node)}) { 783 {AstConstant compileArgument(Node node)}) {
784 assert(invariant(node, target.isImplementation)); 784 assert(invariant(node, target.isImplementation));
785 785
786 AstConstant compileDefaultValue(VariableElement element) { 786 AstConstant compileDefaultValue(VariableElement element) {
787 ConstantExpression constant = handler.compileConstant(element); 787 ConstantExpression constant = handler.compileConstant(element);
788 return new AstConstant.fromDefaultValue( 788 return new AstConstant.fromDefaultValue(
789 element, constant, handler.getConstantValue(constant)); 789 element, constant, handler.getConstantValue(constant));
790 } 790 }
791 target.computeType(compiler); 791 target.computeType(compiler);
792 792
793 if (!callStructure.signatureApplies(target)) { 793 FunctionSignature signature = target.functionSignature;
794 if (!callStructure.signatureApplies(signature)) {
794 String name = Elements.constructorNameForDiagnostics( 795 String name = Elements.constructorNameForDiagnostics(
795 target.enclosingClass.name, target.name); 796 target.enclosingClass.name, target.name);
796 compiler.reportError( 797 compiler.reportError(
797 node, 798 node,
798 MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS, 799 MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS,
799 {'constructorName': name}); 800 {'constructorName': name});
800 801
801 return new List<AstConstant>.filled( 802 return new List<AstConstant>.filled(
802 target.functionSignature.parameterCount, 803 target.functionSignature.parameterCount,
803 new ErroneousAstConstant(context, node)); 804 new ErroneousAstConstant(context, node));
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 CallStructure callStructure, 1022 CallStructure callStructure,
1022 List<AstConstant> concreteArguments, 1023 List<AstConstant> concreteArguments,
1023 List<AstConstant> normalizedArguments) { 1024 List<AstConstant> normalizedArguments) {
1024 if (target.isRedirectingFactory) { 1025 if (target.isRedirectingFactory) {
1025 // This happens is case of cyclic redirection. 1026 // This happens is case of cyclic redirection.
1026 assert(invariant(node, compiler.compilationFailed, 1027 assert(invariant(node, compiler.compilationFailed,
1027 message: "makeConstructedConstant can only be called with the " 1028 message: "makeConstructedConstant can only be called with the "
1028 "effective target: $constructor")); 1029 "effective target: $constructor"));
1029 return new ErroneousAstConstant(context, node); 1030 return new ErroneousAstConstant(context, node);
1030 } 1031 }
1031 assert(invariant(node, callStructure.signatureApplies(constructor) || 1032 assert(invariant(
1032 compiler.compilationFailed, 1033 node,
1034 callStructure.signatureApplies(constructor.functionSignature) ||
1035 compiler.compilationFailed,
1033 message: "Call structure $callStructure does not apply to constructor " 1036 message: "Call structure $callStructure does not apply to constructor "
1034 "$constructor.")); 1037 "$constructor."));
1035 1038
1036 ConstructorEvaluator evaluator = new ConstructorEvaluator( 1039 ConstructorEvaluator evaluator = new ConstructorEvaluator(
1037 constructedType, target, handler, compiler); 1040 constructedType, target, handler, compiler);
1038 evaluator.evaluateConstructorFieldValues(normalizedArguments); 1041 evaluator.evaluateConstructorFieldValues(normalizedArguments);
1039 Map<FieldElement, AstConstant> fieldConstants = 1042 Map<FieldElement, AstConstant> fieldConstants =
1040 evaluator.buildFieldConstants(target.enclosingClass); 1043 evaluator.buildFieldConstants(target.enclosingClass);
1041 Map<FieldElement, ConstantValue> fieldValues = 1044 Map<FieldElement, ConstantValue> fieldValues =
1042 <FieldElement, ConstantValue>{}; 1045 <FieldElement, ConstantValue>{};
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 // TODO(johnniwinther): Return a [NonConstantValue] instead. 1333 // TODO(johnniwinther): Return a [NonConstantValue] instead.
1331 new ErroneousConstantExpression(), new NullConstantValue()); 1334 new ErroneousConstantExpression(), new NullConstantValue());
1332 } 1335 }
1333 1336
1334 // TODO(johnniwinther): Avoid the need for this hack. 1337 // TODO(johnniwinther): Avoid the need for this hack.
1335 TreeElements _analyzeElementEagerly(Compiler compiler, AstElement element) { 1338 TreeElements _analyzeElementEagerly(Compiler compiler, AstElement element) {
1336 WorldImpact worldImpact = compiler.analyzeElement(element.declaration); 1339 WorldImpact worldImpact = compiler.analyzeElement(element.declaration);
1337 compiler.enqueuer.resolution.applyImpact(element.declaration, worldImpact); 1340 compiler.enqueuer.resolution.applyImpact(element.declaration, worldImpact);
1338 return element.resolvedAst.elements; 1341 return element.resolvedAst.elements;
1339 } 1342 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/resolution/constructors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698