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

Unified Diff: pkg/compiler/lib/src/compile_time_constants.dart

Issue 2669703003: Refactor ConstantExpression/ConstantConstructor to use entities. (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/compiler/lib/src/constants/constant_constructors.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/compile_time_constants.dart
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index 82459f35510892723bc5fc52b7e57a535f2756b7..168544ac38f1809ec652b8f10e5addc2d1ad2ef1 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -10,12 +10,14 @@ import 'common.dart';
import 'compiler.dart' show Compiler;
import 'constant_system_dart.dart';
import 'constants/constant_system.dart';
+import 'constants/constructors.dart';
import 'constants/evaluation.dart';
import 'constants/expressions.dart';
import 'constants/values.dart';
import 'core_types.dart' show CommonElements;
import 'elements/resolution_types.dart';
import 'elements/elements.dart';
+import 'elements/entities.dart';
import 'elements/modelx.dart' show ConstantVariableMixin;
import 'resolution/operators.dart';
import 'resolution/tree_elements.dart' show TreeElements;
@@ -470,7 +472,7 @@ class CompileTimeConstantEvaluator extends Visitor<AstConstant> {
argumentExpressions.add(argument.expression);
argumentValues.add(argument.value);
}
- ResolutionDartType type = elements.getType(node);
+ ResolutionInterfaceType type = elements.getType(node);
return new AstConstant(
context,
node,
@@ -625,7 +627,10 @@ class CompileTimeConstantEvaluator extends Visitor<AstConstant> {
if (Elements.isClass(element) || Elements.isTypedef(element)) {
TypeDeclarationElement typeDeclarationElement = element;
ResolutionDartType type = typeDeclarationElement.rawType;
- return new AstConstant(element, node, new TypeConstantExpression(type),
+ return new AstConstant(
+ element,
+ node,
+ new TypeConstantExpression(type, typeDeclarationElement.name),
makeTypeConstant(type));
}
return signalNotCompileTimeConstant(node);
@@ -642,7 +647,7 @@ class CompileTimeConstantEvaluator extends Visitor<AstConstant> {
result = new AstConstant(
context,
send,
- new FunctionConstantExpression(function),
+ new FunctionConstantExpression(function, function.type),
new FunctionConstantValue(function, function.type));
} else if (Elements.isStaticOrTopLevelField(element)) {
ConstantExpression elementExpression;
@@ -652,10 +657,11 @@ class CompileTimeConstantEvaluator extends Visitor<AstConstant> {
elementExpression = handler.compileVariable(element);
}
if (elementExpression != null) {
+ FieldElement field = element;
result = new AstConstant(
context,
send,
- new VariableConstantExpression(element),
+ new FieldConstantExpression(field),
handler.getConstantValue(elementExpression));
}
} else if (Elements.isClass(element) || Elements.isTypedef(element)) {
@@ -664,7 +670,7 @@ class CompileTimeConstantEvaluator extends Visitor<AstConstant> {
result = new AstConstant(
context,
send,
- new TypeConstantExpression(elementType),
+ new TypeConstantExpression(elementType, element.name),
makeTypeConstant(elementType));
} else if (send.receiver != null) {
if (send.selector.asIdentifier().source == "length") {
@@ -681,13 +687,13 @@ class CompileTimeConstantEvaluator extends Visitor<AstConstant> {
} else if (!Elements.isUnresolved(element) &&
element.isVariable &&
element.isConst) {
- ConstantExpression variableExpression =
- handler.compileConstant(element);
+ LocalVariableElement local = element;
+ ConstantExpression variableExpression = handler.compileConstant(local);
if (variableExpression != null) {
result = new AstConstant(
context,
send,
- new VariableConstantExpression(element),
+ new LocalVariableConstantExpression(local),
handler.getConstantValue(variableExpression));
}
}
@@ -1264,8 +1270,8 @@ class ConstructorEvaluator extends CompileTimeConstantEvaluator {
new ConstructedConstantExpression(
type, targetConstructor, callStructure, arguments);
- Map<FieldElement, ConstantExpression> fields =
- expression.computeInstanceFields();
+ Map<FieldEntity, ConstantExpression> fields =
+ expression.computeInstanceFields(new _CompilerEnvironment(compiler));
fields.forEach((FieldElement field, ConstantExpression expression) {
ConstantValue value = expression.evaluate(
new _CompilerEnvironment(compiler), constantSystem);
@@ -1454,4 +1460,25 @@ class _CompilerEnvironment implements Environment {
String readFromEnvironment(String name) {
return compiler.fromEnvironment(name);
}
+
+ @override
+ ResolutionInterfaceType substByContext(
+ ResolutionInterfaceType base, ResolutionInterfaceType target) {
+ return base.substByContext(target);
+ }
+
+ @override
+ ConstantConstructor getConstructorConstant(ConstructorElement constructor) {
+ return constructor.constantConstructor;
+ }
+
+ @override
+ ConstantExpression getFieldConstant(FieldElement field) {
+ return field.constant;
+ }
+
+ @override
+ ConstantExpression getLocalConstant(LocalVariableElement local) {
+ return local.constant;
+ }
}
« no previous file with comments | « no previous file | pkg/compiler/lib/src/constants/constant_constructors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698