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

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

Issue 1121233002: Add ConstantExpression.evaluate. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/compiler/lib/src/compiler.dart » ('j') | pkg/compiler/lib/src/compiler.dart » ('J')
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 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 AstConstant argument = evaluateConstant(link.head); 332 AstConstant argument = evaluateConstant(link.head);
333 if (argument == null) { 333 if (argument == null) {
334 return null; 334 return null;
335 } 335 }
336 argumentExpressions.add(argument.expression); 336 argumentExpressions.add(argument.expression);
337 argumentValues.add(argument.value); 337 argumentValues.add(argument.value);
338 } 338 }
339 DartType type = elements.getType(node); 339 DartType type = elements.getType(node);
340 return new AstConstant( 340 return new AstConstant(
341 context, node, new ListConstantExpression( 341 context, node, new ListConstantExpression(
342 new ListConstantValue(type, argumentValues), 342 constantSystem.createList(type, argumentValues),
343 type, 343 type,
344 argumentExpressions)); 344 argumentExpressions));
345 } 345 }
346 346
347 AstConstant visitLiteralMap(LiteralMap node) { 347 AstConstant visitLiteralMap(LiteralMap node) {
348 if (!node.isConst) { 348 if (!node.isConst) {
349 return signalNotCompileTimeConstant(node); 349 return signalNotCompileTimeConstant(node);
350 } 350 }
351 List<ConstantExpression> keyExpressions = <ConstantExpression>[]; 351 List<ConstantExpression> keyExpressions = <ConstantExpression>[];
352 List<ConstantValue> keyValues = <ConstantValue>[]; 352 List<ConstantValue> keyValues = <ConstantValue>[];
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 constantSystem.createString(new LiteralDartString(text))))]; 463 constantSystem.createString(new LiteralDartString(text))))];
464 AstConstant constant = makeConstructedConstant( 464 AstConstant constant = makeConstructedConstant(
465 compiler, handler, context, node, type, compiler.symbolConstructor, 465 compiler, handler, context, node, type, compiler.symbolConstructor,
466 CallStructure.ONE_ARG, 466 CallStructure.ONE_ARG,
467 arguments, arguments); 467 arguments, arguments);
468 return new AstConstant( 468 return new AstConstant(
469 context, node, new SymbolConstantExpression(constant.value, text)); 469 context, node, new SymbolConstantExpression(constant.value, text));
470 } 470 }
471 471
472 AstConstant makeTypeConstant(Node node, DartType elementType) { 472 AstConstant makeTypeConstant(Node node, DartType elementType) {
473 DartType constantType =
474 compiler.backend.typeImplementation.computeType(compiler);
475 return new AstConstant( 473 return new AstConstant(
476 context, node, new TypeConstantExpression( 474 context, node, new TypeConstantExpression(
477 new TypeConstantValue(elementType, constantType), 475 constantSystem.createType(compiler, elementType),
478 elementType)); 476 elementType));
479 } 477 }
480 478
481 /// Returns true if the prefix of the send resolves to a deferred import 479 /// Returns true if the prefix of the send resolves to a deferred import
482 /// prefix. 480 /// prefix.
483 bool isDeferredUse(Send send) { 481 bool isDeferredUse(Send send) {
484 if (send == null) return false; 482 if (send == null) return false;
485 return compiler.deferredLoadTask 483 return compiler.deferredLoadTask
486 .deferredPrefixElement(send, elements) != null; 484 .deferredPrefixElement(send, elements) != null;
487 } 485 }
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 ConstantValue get value => expression.value; 1153 ConstantValue get value => expression.value;
1156 1154
1157 String toString() => expression.toString(); 1155 String toString() => expression.toString();
1158 } 1156 }
1159 1157
1160 /// A synthetic constant used to recover from errors. 1158 /// A synthetic constant used to recover from errors.
1161 class ErroneousAstConstant extends AstConstant { 1159 class ErroneousAstConstant extends AstConstant {
1162 ErroneousAstConstant(Element element, Node node) 1160 ErroneousAstConstant(Element element, Node node)
1163 : super(element, node, new ErroneousConstantExpression()); 1161 : super(element, node, new ErroneousConstantExpression());
1164 } 1162 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/compiler.dart » ('j') | pkg/compiler/lib/src/compiler.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698