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

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

Issue 2033383002: Handle use of fromEnvironment from serialized data. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fixes Created 4 years, 6 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
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 'common.dart'; 7 import 'common.dart';
8 import 'common/resolution.dart' show Resolution; 8 import 'common/resolution.dart' show Resolution;
9 import 'common/tasks.dart' show CompilerTask, Measurer; 9 import 'common/tasks.dart' show CompilerTask, Measurer;
10 import 'compiler.dart' show Compiler; 10 import 'compiler.dart' show Compiler;
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 } 920 }
921 921
922 normalizedArguments = evaluateArgumentsToConstructor( 922 normalizedArguments = evaluateArgumentsToConstructor(
923 node, callStructure, arguments, implementation, 923 node, callStructure, arguments, implementation,
924 compileArgument: (node) => concreteArgumentMap[node]); 924 compileArgument: (node) => concreteArgumentMap[node]);
925 concreteArguments = concreteArgumentMap.values.toList(); 925 concreteArguments = concreteArgumentMap.values.toList();
926 } else { 926 } else {
927 assert(normalizedArguments != null); 927 assert(normalizedArguments != null);
928 concreteArguments = normalizedArguments; 928 concreteArguments = normalizedArguments;
929 } 929 }
930 930 if (constructor.isFromEnvironmentConstructor) {
931 if (constructor == compiler.intEnvironment ||
932 constructor == compiler.boolEnvironment ||
933 constructor == compiler.stringEnvironment) {
934 return createFromEnvironmentConstant(node, constructedType, constructor, 931 return createFromEnvironmentConstant(node, constructedType, constructor,
935 callStructure, normalizedArguments, concreteArguments); 932 callStructure, normalizedArguments, concreteArguments);
936 } else { 933 } else {
937 return makeConstructedConstant( 934 return makeConstructedConstant(
938 compiler, 935 compiler,
939 handler, 936 handler,
940 context, 937 context,
941 node, 938 node,
942 type, 939 type,
943 constructor, 940 constructor,
(...skipping 23 matching lines...) Expand all
967 964
968 if (!firstArgument.isString) { 965 if (!firstArgument.isString) {
969 DartType type = defaultValue.getType(coreTypes); 966 DartType type = defaultValue.getType(coreTypes);
970 reporter.reportErrorMessage( 967 reporter.reportErrorMessage(
971 normalizedArguments[0].node, 968 normalizedArguments[0].node,
972 MessageKind.NOT_ASSIGNABLE, 969 MessageKind.NOT_ASSIGNABLE,
973 {'fromType': type, 'toType': coreTypes.stringType}); 970 {'fromType': type, 'toType': coreTypes.stringType});
974 return null; 971 return null;
975 } 972 }
976 973
977 if (constructor == compiler.intEnvironment && 974 if (constructor.isIntFromEnvironmentConstructor &&
978 !(defaultValue.isNull || defaultValue.isInt)) { 975 !(defaultValue.isNull || defaultValue.isInt)) {
979 DartType type = defaultValue.getType(coreTypes); 976 DartType type = defaultValue.getType(coreTypes);
980 reporter.reportErrorMessage( 977 reporter.reportErrorMessage(
981 normalizedArguments[1].node, 978 normalizedArguments[1].node,
982 MessageKind.NOT_ASSIGNABLE, 979 MessageKind.NOT_ASSIGNABLE,
983 {'fromType': type, 'toType': coreTypes.intType}); 980 {'fromType': type, 'toType': coreTypes.intType});
984 return null; 981 return null;
985 } 982 }
986 983
987 if (constructor == compiler.boolEnvironment && 984 if (constructor.isBoolFromEnvironmentConstructor &&
988 !(defaultValue.isNull || defaultValue.isBool)) { 985 !(defaultValue.isNull || defaultValue.isBool)) {
989 DartType type = defaultValue.getType(coreTypes); 986 DartType type = defaultValue.getType(coreTypes);
990 reporter.reportErrorMessage( 987 reporter.reportErrorMessage(
991 normalizedArguments[1].node, 988 normalizedArguments[1].node,
992 MessageKind.NOT_ASSIGNABLE, 989 MessageKind.NOT_ASSIGNABLE,
993 {'fromType': type, 'toType': coreTypes.boolType}); 990 {'fromType': type, 'toType': coreTypes.boolType});
994 return null; 991 return null;
995 } 992 }
996 993
997 if (constructor == compiler.stringEnvironment && 994 if (constructor.isStringFromEnvironmentConstructor &&
998 !(defaultValue.isNull || defaultValue.isString)) { 995 !(defaultValue.isNull || defaultValue.isString)) {
999 DartType type = defaultValue.getType(coreTypes); 996 DartType type = defaultValue.getType(coreTypes);
1000 reporter.reportErrorMessage( 997 reporter.reportErrorMessage(
1001 normalizedArguments[1].node, 998 normalizedArguments[1].node,
1002 MessageKind.NOT_ASSIGNABLE, 999 MessageKind.NOT_ASSIGNABLE,
1003 {'fromType': type, 'toType': coreTypes.stringType}); 1000 {'fromType': type, 'toType': coreTypes.stringType});
1004 return null; 1001 return null;
1005 } 1002 }
1006 1003
1007 String name = firstArgument.primitiveValue.slowToString(); 1004 String name = firstArgument.primitiveValue.slowToString();
1008 String value = compiler.fromEnvironment(name); 1005 String value = compiler.fromEnvironment(name);
1009 1006
1010 AstConstant createEvaluatedConstant(ConstantValue value) { 1007 AstConstant createEvaluatedConstant(ConstantValue value) {
1011 ConstantExpression expression; 1008 ConstantExpression expression;
1012 ConstantExpression name = concreteArguments[0].expression; 1009 ConstantExpression name = concreteArguments[0].expression;
1013 ConstantExpression defaultValue; 1010 ConstantExpression defaultValue;
1014 if (concreteArguments.length > 1) { 1011 if (concreteArguments.length > 1) {
1015 defaultValue = concreteArguments[1].expression; 1012 defaultValue = concreteArguments[1].expression;
1016 } 1013 }
1017 if (constructor == compiler.intEnvironment) { 1014 if (constructor.isIntFromEnvironmentConstructor) {
1018 expression = 1015 expression =
1019 new IntFromEnvironmentConstantExpression(name, defaultValue); 1016 new IntFromEnvironmentConstantExpression(name, defaultValue);
1020 } else if (constructor == compiler.boolEnvironment) { 1017 } else if (constructor.isBoolFromEnvironmentConstructor) {
1021 expression = 1018 expression =
1022 new BoolFromEnvironmentConstantExpression(name, defaultValue); 1019 new BoolFromEnvironmentConstantExpression(name, defaultValue);
1023 } else if (constructor == compiler.stringEnvironment) { 1020 } else if (constructor.isStringFromEnvironmentConstructor) {
1024 expression = 1021 expression =
1025 new StringFromEnvironmentConstantExpression(name, defaultValue); 1022 new StringFromEnvironmentConstantExpression(name, defaultValue);
1026 } 1023 }
1027 assert(expression != null); 1024 assert(expression != null);
1028 return new AstConstant(context, node, expression, value); 1025 return new AstConstant(context, node, expression, value);
1029 } 1026 }
1030 1027
1031 if (value == null) { 1028 if (value == null) {
1032 return createEvaluatedConstant(defaultValue); 1029 return createEvaluatedConstant(defaultValue);
1033 } else if (constructor == compiler.intEnvironment) { 1030 } else if (constructor.isIntFromEnvironmentConstructor) {
1034 int number = int.parse(value, onError: (_) => null); 1031 int number = int.parse(value, onError: (_) => null);
1035 return createEvaluatedConstant( 1032 return createEvaluatedConstant(
1036 (number == null) ? defaultValue : constantSystem.createInt(number)); 1033 (number == null) ? defaultValue : constantSystem.createInt(number));
1037 } else if (constructor == compiler.boolEnvironment) { 1034 } else if (constructor.isBoolFromEnvironmentConstructor) {
1038 if (value == 'true') { 1035 if (value == 'true') {
1039 return createEvaluatedConstant(constantSystem.createBool(true)); 1036 return createEvaluatedConstant(constantSystem.createBool(true));
1040 } else if (value == 'false') { 1037 } else if (value == 'false') {
1041 return createEvaluatedConstant(constantSystem.createBool(false)); 1038 return createEvaluatedConstant(constantSystem.createBool(false));
1042 } else { 1039 } else {
1043 return createEvaluatedConstant(defaultValue); 1040 return createEvaluatedConstant(defaultValue);
1044 } 1041 }
1045 } else { 1042 } else {
1046 assert(constructor == compiler.stringEnvironment); 1043 assert(constructor.isStringFromEnvironmentConstructor);
1047 return createEvaluatedConstant( 1044 return createEvaluatedConstant(
1048 constantSystem.createString(new DartString.literal(value))); 1045 constantSystem.createString(new DartString.literal(value)));
1049 } 1046 }
1050 } 1047 }
1051 1048
1052 static AstConstant makeConstructedConstant( 1049 static AstConstant makeConstructedConstant(
1053 Compiler compiler, 1050 Compiler compiler,
1054 ConstantCompilerBase handler, 1051 ConstantCompilerBase handler,
1055 Element context, 1052 Element context,
1056 Node node, 1053 Node node,
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
1371 class _CompilerEnvironment implements Environment { 1368 class _CompilerEnvironment implements Environment {
1372 final Compiler compiler; 1369 final Compiler compiler;
1373 1370
1374 _CompilerEnvironment(this.compiler); 1371 _CompilerEnvironment(this.compiler);
1375 1372
1376 @override 1373 @override
1377 String readFromEnvironment(String name) { 1374 String readFromEnvironment(String name) {
1378 return compiler.fromEnvironment(name); 1375 return compiler.fromEnvironment(name);
1379 } 1376 }
1380 } 1377 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/compiler.dart » ('j') | pkg/compiler/lib/src/elements/common.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698