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

Unified Diff: sdk/lib/_internal/compiler/implementation/constants/expressions.dart

Issue 614993002: Rename Constant to ConstantValue and ConstExp to ConstantExpression. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 6 years, 3 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
Index: sdk/lib/_internal/compiler/implementation/constants/expressions.dart
diff --git a/sdk/lib/_internal/compiler/implementation/constants/expressions.dart b/sdk/lib/_internal/compiler/implementation/constants/expressions.dart
index 8c3934e73a2dc080f1366a2443b4ede8c439a6aa..ab55c4539d5c0c736248703c0dd82bc18e12739a 100644
--- a/sdk/lib/_internal/compiler/implementation/constants/expressions.dart
+++ b/sdk/lib/_internal/compiler/implementation/constants/expressions.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library const_expression;
+library dart2js.constants.expressions;
import '../dart2jslib.dart' show assertDebugMode;
import '../dart_types.dart';
@@ -15,22 +15,22 @@ import 'values.dart';
/// An expression that is a compile-time constant.
///
-/// Whereas [Constant] represent a compile-time value, a [ConstExp]
-/// represents an expression for creating a constant.
+/// Whereas [ConstantValue] represent a compile-time value, a
+/// [ConstantExpression] represents an expression for creating a constant.
///
-/// There is no one-to-one mapping between [ConstExp] and [Constant], because
-/// different expressions can denote the same constant. For instance,
-/// multiple `const` constructors may be used to create the same object, and
-/// different `const` variables may hold the same value.
-abstract class ConstExp {
+/// There is no one-to-one mapping between [ConstantExpression] and
+/// [ConstantValue], because different expressions can denote the same constant.
+/// For instance, multiple `const` constructors may be used to create the same
+/// object, and different `const` variables may hold the same value.
+abstract class ConstantExpression {
/// Returns the value of this constant expression.
- Constant get value;
+ ConstantValue get value;
// TODO(johnniwinther): Unify precedence handled between constants, front-end
// and back-end.
int get precedence => 16;
- accept(ConstExpVisitor visitor);
+ accept(ConstantExpressionVisitor visitor);
String getText() {
ConstExpPrinter printer = new ConstExpPrinter();
@@ -39,54 +39,55 @@ abstract class ConstExp {
}
String toString() {
- assertDebugMode('Use ConstExp.getText() instead of ConstExp.toString()');
+ assertDebugMode('Use ConstantExpression.getText() instead of '
+ 'ConstantExpression.toString()');
return getText();
}
}
/// Boolean, int, double, string, or null constant.
-class PrimitiveConstExp extends ConstExp {
- final PrimitiveConstant value;
+class PrimitiveConstantExpression extends ConstantExpression {
+ final PrimitiveConstantValue value;
- PrimitiveConstExp(this.value) {
+ PrimitiveConstantExpression(this.value) {
assert(value != null);
}
- accept(ConstExpVisitor visitor) => visitor.visitPrimitive(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitPrimitive(this);
}
/// Literal list constant.
-class ListConstExp extends ConstExp {
- final ListConstant value;
+class ListConstantExpression extends ConstantExpression {
+ final ListConstantValue value;
final InterfaceType type;
- final List<ConstExp> values;
+ final List<ConstantExpression> values;
- ListConstExp(this.value, this.type, this.values);
+ ListConstantExpression(this.value, this.type, this.values);
- accept(ConstExpVisitor visitor) => visitor.visitList(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitList(this);
}
/// Literal map constant.
-class MapConstExp extends ConstExp {
- final MapConstant value;
+class MapConstantExpression extends ConstantExpression {
+ final MapConstantValue value;
final InterfaceType type;
- final List<ConstExp> keys;
- final List<ConstExp> values;
+ final List<ConstantExpression> keys;
+ final List<ConstantExpression> values;
- MapConstExp(this.value, this.type, this.keys, this.values);
+ MapConstantExpression(this.value, this.type, this.keys, this.values);
- accept(ConstExpVisitor visitor) => visitor.visitMap(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitMap(this);
}
/// Invocation of a const constructor.
-class ConstructorConstExp extends ConstExp {
- final Constant value;
+class ConstructedConstantExpresssion extends ConstantExpression {
+ final ConstantValue value;
final InterfaceType type;
final FunctionElement target;
final Selector selector;
- final List<ConstExp> arguments;
+ final List<ConstantExpression> arguments;
- ConstructorConstExp(this.value,
+ ConstructedConstantExpresssion(this.value,
this.type,
this.target,
this.selector,
@@ -94,75 +95,75 @@ class ConstructorConstExp extends ConstExp {
assert(type.element == target.enclosingClass);
}
- accept(ConstExpVisitor visitor) => visitor.visitConstructor(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitConstructor(this);
}
/// String literal with juxtaposition and/or interpolations.
// TODO(johnniwinther): Do we need this?
-class ConcatenateConstExp extends ConstExp {
- final StringConstant value;
- final List<ConstExp> arguments;
+class ConcatenateConstantExpression extends ConstantExpression {
+ final StringConstantValue value;
+ final List<ConstantExpression> arguments;
- ConcatenateConstExp(this.value, this.arguments);
+ ConcatenateConstantExpression(this.value, this.arguments);
- accept(ConstExpVisitor visitor) => visitor.visitConcatenate(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitConcatenate(this);
}
/// Symbol literal.
-class SymbolConstExp extends ConstExp {
- final ConstructedConstant value;
+class SymbolConstantExpression extends ConstantExpression {
+ final ConstructedConstantValue value;
final String name;
- SymbolConstExp(this.value, this.name);
+ SymbolConstantExpression(this.value, this.name);
- accept(ConstExpVisitor visitor) => visitor.visitSymbol(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitSymbol(this);
}
/// Type literal.
-class TypeConstExp extends ConstExp {
- final TypeConstant value;
+class TypeConstantExpression extends ConstantExpression {
+ final TypeConstantValue value;
/// Either [DynamicType] or a raw [GenericType].
final DartType type;
- TypeConstExp(this.value, this.type) {
+ TypeConstantExpression(this.value, this.type) {
assert(type is GenericType || type is DynamicType);
}
- accept(ConstExpVisitor visitor) => visitor.visitType(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitType(this);
}
-/// A constant local, top-level, or static variable.
-class VariableConstExp extends ConstExp {
- final Constant value;
+/// Reference to a constant local, top-level, or static variable.
+class VariableConstantExpression extends ConstantExpression {
+ final ConstantValue value;
final VariableElement element;
- VariableConstExp(this.value, this.element);
+ VariableConstantExpression(this.value, this.element);
- accept(ConstExpVisitor visitor) => visitor.visitVariable(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitVariable(this);
}
/// Reference to a top-level or static function.
-class FunctionConstExp extends ConstExp {
- final FunctionConstant value;
+class FunctionConstantExpression extends ConstantExpression {
+ final FunctionConstantValue value;
final FunctionElement element;
- FunctionConstExp(this.value, this.element);
+ FunctionConstantExpression(this.value, this.element);
- accept(ConstExpVisitor visitor) => visitor.visitFunction(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitFunction(this);
}
/// A constant binary expression like `a * b` or `identical(a, b)`.
-class BinaryConstExp extends ConstExp {
- final Constant value;
- final ConstExp left;
+class BinaryConstantExpression extends ConstantExpression {
+ final ConstantValue value;
+ final ConstantExpression left;
final String operator;
- final ConstExp right;
+ final ConstantExpression right;
- BinaryConstExp(this.value, this.left, this.operator, this.right) {
+ BinaryConstantExpression(this.value, this.left, this.operator, this.right) {
assert(PRECEDENCE_MAP[operator] != null);
}
- accept(ConstExpVisitor visitor) => visitor.visitBinary(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitBinary(this);
int get precedence => PRECEDENCE_MAP[operator];
@@ -191,16 +192,16 @@ class BinaryConstExp extends ConstExp {
}
/// A unary constant expression like `-a`.
-class UnaryConstExp extends ConstExp {
- final Constant value;
+class UnaryConstantExpression extends ConstantExpression {
+ final ConstantValue value;
final String operator;
- final ConstExp expression;
+ final ConstantExpression expression;
- UnaryConstExp(this.value, this.operator, this.expression) {
+ UnaryConstantExpression(this.value, this.operator, this.expression) {
assert(PRECEDENCE_MAP[operator] != null);
}
- accept(ConstExpVisitor visitor) => visitor.visitUnary(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitUnary(this);
int get precedence => PRECEDENCE_MAP[operator];
@@ -212,48 +213,54 @@ class UnaryConstExp extends ConstExp {
}
/// A constant conditional expression like `a ? b : c`.
-class ConditionalConstExp extends ConstExp {
- final Constant value;
- final ConstExp condition;
- final ConstExp trueExp;
- final ConstExp falseExp;
+class ConditionalConstantExpression extends ConstantExpression {
+ final ConstantValue value;
+ final ConstantExpression condition;
+ final ConstantExpression trueExp;
+ final ConstantExpression falseExp;
- ConditionalConstExp(this.value, this.condition, this.trueExp, this.falseExp);
+ ConditionalConstantExpression(this.value,
+ this.condition,
+ this.trueExp,
+ this.falseExp);
- accept(ConstExpVisitor visitor) => visitor.visitConditional(this);
+ accept(ConstantExpressionVisitor visitor) => visitor.visitConditional(this);
int get precedence => 3;
}
-abstract class ConstExpVisitor<T> {
- T visit(ConstExp constant) => constant.accept(this);
-
- T visitPrimitive(PrimitiveConstExp exp);
- T visitList(ListConstExp exp);
- T visitMap(MapConstExp exp);
- T visitConstructor(ConstructorConstExp exp);
- T visitConcatenate(ConcatenateConstExp exp);
- T visitSymbol(SymbolConstExp exp);
- T visitType(TypeConstExp exp);
- T visitVariable(VariableConstExp exp);
- T visitFunction(FunctionConstExp exp);
- T visitBinary(BinaryConstExp exp);
- T visitUnary(UnaryConstExp exp);
- T visitConditional(ConditionalConstExp exp);
+abstract class ConstantExpressionVisitor<T> {
+ T visit(ConstantExpression constant) => constant.accept(this);
+
+ T visitPrimitive(PrimitiveConstantExpression exp);
+ T visitList(ListConstantExpression exp);
+ T visitMap(MapConstantExpression exp);
+ T visitConstructor(ConstructedConstantExpresssion exp);
+ T visitConcatenate(ConcatenateConstantExpression exp);
+ T visitSymbol(SymbolConstantExpression exp);
+ T visitType(TypeConstantExpression exp);
+ T visitVariable(VariableConstantExpression exp);
+ T visitFunction(FunctionConstantExpression exp);
+ T visitBinary(BinaryConstantExpression exp);
+ T visitUnary(UnaryConstantExpression exp);
+ T visitConditional(ConditionalConstantExpression exp);
}
/// Represents the declaration of a constant [element] with value [expression].
+// TODO(johnniwinther): Where does this class belong?
class ConstDeclaration {
final VariableElement element;
- final ConstExp expression;
+ final ConstantExpression expression;
ConstDeclaration(this.element, this.expression);
}
-class ConstExpPrinter extends ConstExpVisitor {
+class ConstExpPrinter extends ConstantExpressionVisitor {
final StringBuffer sb = new StringBuffer();
- write(ConstExp parent, ConstExp child, {bool leftAssociative: true}) {
+ write(ConstantExpression parent,
+ ConstantExpression child,
+ {bool leftAssociative: true}) {
if (child.precedence < parent.precedence ||
!leftAssociative && child.precedence == parent.precedence) {
sb.write('(');
@@ -278,16 +285,16 @@ class ConstExpPrinter extends ConstExpVisitor {
sb.write('>');
}
- visitPrimitive(PrimitiveConstExp exp) {
+ visitPrimitive(PrimitiveConstantExpression exp) {
sb.write(exp.value.unparse());
}
- visitList(ListConstExp exp) {
+ visitList(ListConstantExpression exp) {
sb.write('const ');
writeTypeArguments(exp.type);
sb.write('[');
bool needsComma = false;
- for (ConstExp value in exp.values) {
+ for (ConstantExpression value in exp.values) {
if (needsComma) {
sb.write(', ');
}
@@ -297,7 +304,7 @@ class ConstExpPrinter extends ConstExpVisitor {
sb.write(']');
}
- visitMap(MapConstExp exp) {
+ visitMap(MapConstantExpression exp) {
sb.write('const ');
writeTypeArguments(exp.type);
sb.write('{');
@@ -312,7 +319,7 @@ class ConstExpPrinter extends ConstExpVisitor {
sb.write('}');
}
- visitConstructor(ConstructorConstExp exp) {
+ visitConstructor(ConstructedConstantExpresssion exp) {
sb.write('const ');
sb.write(exp.target.enclosingClass.name);
if (exp.target.name != '') {
@@ -343,20 +350,20 @@ class ConstExpPrinter extends ConstExpVisitor {
sb.write(')');
}
- visitConcatenate(ConcatenateConstExp exp) {
+ visitConcatenate(ConcatenateConstantExpression exp) {
sb.write(exp.value.unparse());
}
- visitSymbol(SymbolConstExp exp) {
+ visitSymbol(SymbolConstantExpression exp) {
sb.write('#');
sb.write(exp.name);
}
- visitType(TypeConstExp exp) {
+ visitType(TypeConstantExpression exp) {
sb.write(exp.type.name);
}
- visitVariable(VariableConstExp exp) {
+ visitVariable(VariableConstantExpression exp) {
if (exp.element.isStatic) {
sb.write(exp.element.enclosingClass.name);
sb.write('.');
@@ -364,7 +371,7 @@ class ConstExpPrinter extends ConstExpVisitor {
sb.write(exp.element.name);
}
- visitFunction(FunctionConstExp exp) {
+ visitFunction(FunctionConstantExpression exp) {
if (exp.element.isStatic) {
sb.write(exp.element.enclosingClass.name);
sb.write('.');
@@ -372,7 +379,7 @@ class ConstExpPrinter extends ConstExpVisitor {
sb.write(exp.element.name);
}
- visitBinary(BinaryConstExp exp) {
+ visitBinary(BinaryConstantExpression exp) {
if (exp.operator == 'identical') {
sb.write('identical(');
visit(exp.left);
@@ -388,12 +395,12 @@ class ConstExpPrinter extends ConstExpVisitor {
}
}
- visitUnary(UnaryConstExp exp) {
+ visitUnary(UnaryConstantExpression exp) {
sb.write(exp.operator);
write(exp, exp.expression);
}
- visitConditional(ConditionalConstExp exp) {
+ visitConditional(ConditionalConstantExpression exp) {
write(exp, exp.condition, leftAssociative: false);
sb.write(' ? ');
write(exp, exp.trueExp);

Powered by Google App Engine
This is Rietveld 408576698