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

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

Issue 1170673002: Begin to compute constant expressions in resolution. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix BinaryConstantExpression.getKnownType Created 5 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/compiler.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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 if (expression != null) { 241 if (expression != null) {
242 initialVariableValues[element.declaration] = expression; 242 initialVariableValues[element.declaration] = expression;
243 } else { 243 } else {
244 assert(invariant(element, !isConst, 244 assert(invariant(element, !isConst,
245 message: "Variable $element does not compile to a constant.")); 245 message: "Variable $element does not compile to a constant."));
246 } 246 }
247 pendingVariables.remove(element); 247 pendingVariables.remove(element);
248 return expression; 248 return expression;
249 } 249 }
250 250
251 void cacheConstantValue(ConstantExpression expression, ConstantValue value) {
252 constantValueMap[expression] = value;
253 }
254
251 ConstantExpression compileNodeWithDefinitions(Node node, 255 ConstantExpression compileNodeWithDefinitions(Node node,
252 TreeElements definitions, 256 TreeElements definitions,
253 {bool isConst: true}) { 257 {bool isConst: true}) {
254 assert(node != null); 258 assert(node != null);
255 CompileTimeConstantEvaluator evaluator = new CompileTimeConstantEvaluator( 259 CompileTimeConstantEvaluator evaluator = new CompileTimeConstantEvaluator(
256 this, definitions, compiler, isConst: isConst); 260 this, definitions, compiler, isConst: isConst);
257 AstConstant constant = evaluator.evaluate(node); 261 AstConstant constant = evaluator.evaluate(node);
258 if (constant != null) { 262 if (constant != null) {
259 constantValueMap[constant.expression] = constant.value; 263 cacheConstantValue(constant.expression, constant.value);
260 return constant.expression; 264 return constant.expression;
261 } 265 }
262 return null; 266 return null;
263 } 267 }
264 268
265 ConstantValue getConstantValue(ConstantExpression expression) { 269 ConstantValue getConstantValue(ConstantExpression expression) {
266 return constantValueMap[expression]; 270 return constantValueMap[expression];
267 } 271 }
268 272
269 ConstantExpression compileNode(Node node, TreeElements elements, 273 ConstantExpression compileNode(Node node, TreeElements elements,
(...skipping 25 matching lines...) Expand all
295 : super(compiler, const DartConstantSystem()); 299 : super(compiler, const DartConstantSystem());
296 300
297 ConstantExpression getConstantForNode(Node node, TreeElements definitions) { 301 ConstantExpression getConstantForNode(Node node, TreeElements definitions) {
298 return definitions.getConstant(node); 302 return definitions.getConstant(node);
299 } 303 }
300 304
301 ConstantExpression compileNodeWithDefinitions(Node node, 305 ConstantExpression compileNodeWithDefinitions(Node node,
302 TreeElements definitions, 306 TreeElements definitions,
303 {bool isConst: true}) { 307 {bool isConst: true}) {
304 ConstantExpression constant = definitions.getConstant(node); 308 ConstantExpression constant = definitions.getConstant(node);
305 if (constant != null) { 309 if (constant != null && getConstantValue(constant) != null) {
306 return constant; 310 return constant;
307 } 311 }
308 constant = 312 constant =
309 super.compileNodeWithDefinitions(node, definitions, isConst: isConst); 313 super.compileNodeWithDefinitions(node, definitions, isConst: isConst);
310 if (constant != null) { 314 if (constant != null) {
311 definitions.setConstant(node, constant); 315 definitions.setConstant(node, constant);
312 } 316 }
313 return constant; 317 return constant;
314 } 318 }
315 } 319 }
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 // TODO(johnniwinther): Return a [NonConstantValue] instead. 1331 // TODO(johnniwinther): Return a [NonConstantValue] instead.
1328 new ErroneousConstantExpression(), new NullConstantValue()); 1332 new ErroneousConstantExpression(), new NullConstantValue());
1329 } 1333 }
1330 1334
1331 // TODO(johnniwinther): Avoid the need for this hack. 1335 // TODO(johnniwinther): Avoid the need for this hack.
1332 TreeElements _analyzeElementEagerly(Compiler compiler, AstElement element) { 1336 TreeElements _analyzeElementEagerly(Compiler compiler, AstElement element) {
1333 WorldImpact worldImpact = compiler.analyzeElement(element.declaration); 1337 WorldImpact worldImpact = compiler.analyzeElement(element.declaration);
1334 compiler.enqueuer.resolution.applyImpact(element.declaration, worldImpact); 1338 compiler.enqueuer.resolution.applyImpact(element.declaration, worldImpact);
1335 return element.resolvedAst.elements; 1339 return element.resolvedAst.elements;
1336 } 1340 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698