@@ -122,7 +122,7 @@ import '../target_implementation.dart' show TargetImplementation;
122
122
import '../uri_translator.dart' show UriTranslator;
123
123
124
124
import 'constant_evaluator.dart' as constants
125
- show EvaluationMode, transformLibraries;
125
+ show EvaluationMode, transformLibraries, transformProcedure ;
126
126
127
127
import 'kernel_constants.dart' show KernelConstantErrorReporter;
128
128
@@ -1092,26 +1092,7 @@ class KernelTarget extends TargetImplementation {
1092
1092
1093
1093
TypeEnvironment environment =
1094
1094
new TypeEnvironment (loader.coreTypes, loader.hierarchy);
1095
- constants.EvaluationMode evaluationMode;
1096
- // If nnbd is not enabled we will use weak evaluation mode. This is needed
1097
- // because the SDK might be agnostic and therefore needs to be weakened
1098
- // for legacy mode.
1099
- assert (
1100
- isExperimentEnabledGlobally (ExperimentalFlag .nonNullable) ||
1101
- loader.nnbdMode == NnbdMode .Weak ,
1102
- "Non-weak nnbd mode found without experiment enabled: "
1103
- "${loader .nnbdMode }." );
1104
- switch (loader.nnbdMode) {
1105
- case NnbdMode .Weak :
1106
- evaluationMode = constants.EvaluationMode .weak;
1107
- break ;
1108
- case NnbdMode .Strong :
1109
- evaluationMode = constants.EvaluationMode .strong;
1110
- break ;
1111
- case NnbdMode .Agnostic :
1112
- evaluationMode = constants.EvaluationMode .agnostic;
1113
- break ;
1114
- }
1095
+ constants.EvaluationMode evaluationMode = _getConstantEvaluationMode ();
1115
1096
1116
1097
constants.transformLibraries (
1117
1098
loader.libraries,
@@ -1141,11 +1122,52 @@ class KernelTarget extends TargetImplementation {
1141
1122
ChangedStructureNotifier get changedStructureNotifier => null ;
1142
1123
1143
1124
void runProcedureTransformations (Procedure procedure) {
1125
+ TypeEnvironment environment =
1126
+ new TypeEnvironment (loader.coreTypes, loader.hierarchy);
1127
+ constants.EvaluationMode evaluationMode = _getConstantEvaluationMode ();
1128
+
1129
+ constants.transformProcedure (
1130
+ procedure,
1131
+ backendTarget.constantsBackend (loader.coreTypes),
1132
+ environmentDefines,
1133
+ environment,
1134
+ new KernelConstantErrorReporter (loader),
1135
+ evaluationMode,
1136
+ desugarSets: ! backendTarget.supportsSetLiterals,
1137
+ enableTripleShift:
1138
+ isExperimentEnabledGlobally (ExperimentalFlag .tripleShift),
1139
+ errorOnUnevaluatedConstant: errorOnUnevaluatedConstant);
1140
+ ticker.logMs ("Evaluated constants" );
1141
+
1144
1142
backendTarget.performTransformationsOnProcedure (
1145
1143
loader.coreTypes, loader.hierarchy, procedure,
1146
1144
logger: (String msg) => ticker.logMs (msg));
1147
1145
}
1148
1146
1147
+ constants.EvaluationMode _getConstantEvaluationMode () {
1148
+ constants.EvaluationMode evaluationMode;
1149
+ // If nnbd is not enabled we will use weak evaluation mode. This is needed
1150
+ // because the SDK might be agnostic and therefore needs to be weakened
1151
+ // for legacy mode.
1152
+ assert (
1153
+ isExperimentEnabledGlobally (ExperimentalFlag .nonNullable) ||
1154
+ loader.nnbdMode == NnbdMode .Weak ,
1155
+ "Non-weak nnbd mode found without experiment enabled: "
1156
+ "${loader .nnbdMode }." );
1157
+ switch (loader.nnbdMode) {
1158
+ case NnbdMode .Weak :
1159
+ evaluationMode = constants.EvaluationMode .weak;
1160
+ break ;
1161
+ case NnbdMode .Strong :
1162
+ evaluationMode = constants.EvaluationMode .strong;
1163
+ break ;
1164
+ case NnbdMode .Agnostic :
1165
+ evaluationMode = constants.EvaluationMode .agnostic;
1166
+ break ;
1167
+ }
1168
+ return evaluationMode;
1169
+ }
1170
+
1149
1171
void verify () {
1150
1172
// TODO(ahe): How to handle errors.
1151
1173
verifyComponent (component);
0 commit comments