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

Unified Diff: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart

Issue 1057483004: Clean up handling of constants in the CPS backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | pkg/compiler/lib/src/use_unused_api.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
index e786e17a8bd25413cb9e335306f7ed8aae7a59ce..3591a4906b6f741ecee70cdb146d3ef0786e0c0a 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
@@ -551,32 +551,32 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
// Build(Literal(c), C) = C[let val x = Constant(c) in [], x]
ir.Primitive visitLiteralBool(ast.LiteralBool node) {
assert(irBuilder.isOpen);
- return translateConstant(node);
+ return irBuilder.buildBooleanConstant(node.value);
}
ir.Primitive visitLiteralDouble(ast.LiteralDouble node) {
assert(irBuilder.isOpen);
- return translateConstant(node);
+ return irBuilder.buildDoubleConstant(node.value);
}
ir.Primitive visitLiteralInt(ast.LiteralInt node) {
assert(irBuilder.isOpen);
- return translateConstant(node);
+ return irBuilder.buildIntegerConstant(node.value);
}
ir.Primitive visitLiteralNull(ast.LiteralNull node) {
assert(irBuilder.isOpen);
- return translateConstant(node);
+ return irBuilder.buildNullConstant();
}
ir.Primitive visitLiteralString(ast.LiteralString node) {
assert(irBuilder.isOpen);
- return translateConstant(node);
+ return irBuilder.buildDartStringConstant(node.dartString);
}
ConstantExpression getConstantForNode(ast.Node node) {
ConstantExpression constant =
- compiler.backend.constantCompilerTask.compileNode(node, elements);
+ compiler.backend.constants.getConstantForNode(node, elements);
assert(invariant(node, constant != null,
message: 'No constant computed for $node'));
return constant;
@@ -690,7 +690,7 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive handleConstantGet(
ast.Node node,
ConstantExpression constant, _) {
- return irBuilder.buildConstantLiteral(constant);
+ return irBuilder.buildConstant(constant);
}
/// If [node] is null, returns this.
@@ -715,7 +715,17 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.Send node,
ConstantExpression constant,
_) {
- return irBuilder.buildConstantLiteral(constant);
+ return irBuilder.buildConstant(constant);
+ }
+
+ @override
+ ir.Primitive visitLocalVariableGet(
+ ast.Send node,
+ LocalVariableElement element,
+ _) {
+ return element.isConst
+ ? irBuilder.buildConstant(getConstantForVariable(element))
+ : irBuilder.buildLocalVariableGet(element);
}
@override
@@ -723,9 +733,6 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.Send node,
LocalElement element,
_) {
- if (element.isConst) {
- return translateConstant(node);
- }
return irBuilder.buildLocalVariableGet(element);
}
@@ -738,15 +745,11 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
}
@override
- ir.Primitive handleStaticFieldGet(
- ast.Send node,
- FieldElement field,
- _) {
- if (field.isConst) {
- return translateConstant(node);
- }
- return irBuilder.buildStaticFieldGet(field,
- sourceInformation: sourceInformationBuilder.buildGet(node));
+ ir.Primitive handleStaticFieldGet(ast.Send node, FieldElement field, _) {
+ return field.isConst
+ ? irBuilder.buildConstant(getConstantForVariable(field))
+ : irBuilder.buildStaticFieldGet(field,
+ sourceInformation: sourceInformationBuilder.buildGet(node));
}
@override
@@ -758,7 +761,7 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
if (function.isForeign(compiler.backend)) {
return giveup(node, 'handleStaticFunctionGet: foreign: $function');
}
- return translateConstant(node);
+ return giveup(node, 'handleStaticFunctionGet: $function');
}
@override
@@ -1024,10 +1027,8 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.NodeList arguments,
CallStructure callStructure,
_) {
- return translateCallInvoke(
- irBuilder.buildConstantLiteral(constant),
- arguments,
- callStructure);
+ ir.Primitive target = irBuilder.buildConstant(constant);
+ return translateCallInvoke(target, arguments, callStructure);
}
@override
@@ -1099,6 +1100,9 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ast.NodeList arguments,
CallStructure callStructure,
_) {
+ if (getter.isForeign(compiler.backend)) {
+ return giveup(node, 'handleStaticGetterInvoke: foreign: $getter');
+ }
ir.Primitive target = irBuilder.buildStaticGetterGet(getter);
return irBuilder.buildCallInvocation(target,
callStructure,
@@ -1244,7 +1248,7 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
Selector operatorSelector =
new Selector.binaryOperator(operator.selectorName);
List<ir.Primitive> arguments =
- <ir.Primitive>[irBuilder.buildIntegerLiteral(1)];
+ <ir.Primitive>[irBuilder.buildIntegerConstant(1)];
arguments = normalizeDynamicArguments(
operatorSelector.callStructure, arguments);
ir.Primitive result =
@@ -1771,7 +1775,7 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
ir.Primitive translateConstant(ast.Node node) {
assert(irBuilder.isOpen);
- return irBuilder.buildConstantLiteral(getConstantForNode(node));
+ return irBuilder.buildConstant(getConstantForNode(node));
}
ir.Primitive visitThrow(ast.Throw node) {
@@ -2420,7 +2424,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
} else {
// Fields without an initializer default to null.
// This value will be overwritten below if an initializer is found.
- fieldValues[field] = irBuilder.buildNullLiteral();
+ fieldValues[field] = irBuilder.buildNullConstant();
}
}
});
@@ -2510,7 +2514,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
if (param.initializer != null) {
value = inlineExpression(target, param.initializer);
} else {
- value = irBuilder.buildNullLiteral();
+ value = irBuilder.buildNullConstant();
}
}
irBuilder.declareLocalVariable(param, initialValue: value);
@@ -2658,7 +2662,7 @@ class JsIrBuilderVisitor extends IrBuilderVisitor {
/// Creates a primitive for the default value of [parameter].
ir.Primitive translateDefaultValue(ParameterElement parameter) {
if (parameter.initializer == null) {
- return irBuilder.buildNullLiteral();
+ return irBuilder.buildNullConstant();
} else {
return inlineConstant(parameter.executableContext, parameter.initializer);
}
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart ('k') | pkg/compiler/lib/src/use_unused_api.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698