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

Unified Diff: lib/compiler/implementation/ssa/nodes.dart

Issue 10825386: Use JavaScript runtime semantics when constant folding. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove top-level constanst. Created 8 years, 4 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: lib/compiler/implementation/ssa/nodes.dart
diff --git a/lib/compiler/implementation/ssa/nodes.dart b/lib/compiler/implementation/ssa/nodes.dart
index 77b80e087fec3d1d4e154052a3886f5cdecb1f33..0f38c99282b43b673c6db0d02b79d1b4b00856c9 100644
--- a/lib/compiler/implementation/ssa/nodes.dart
+++ b/lib/compiler/implementation/ssa/nodes.dart
@@ -1457,7 +1457,7 @@ class HInvokeBinary extends HInvokeStatic {
HInstruction get left() => inputs[1];
HInstruction get right() => inputs[2];
- abstract BinaryOperation get operation();
+ abstract BinaryOperation operation(FoldingOperations foldingOperations);
abstract get builtin();
}
@@ -1515,7 +1515,7 @@ class HBinaryArithmetic extends HInvokeBinary {
}
// TODO(1603): The class should be marked as abstract.
- abstract BinaryOperation get operation();
+ abstract BinaryOperation operation(FoldingOperations foldingOperations);
}
class HAdd extends HBinaryArithmetic {
@@ -1523,7 +1523,8 @@ class HAdd extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitAdd(this);
- AddOperation get operation() => const AddOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.add;
int typeCode() => 5;
bool typeEquals(other) => other is HAdd;
bool dataEquals(HInstruction other) => true;
@@ -1545,7 +1546,8 @@ class HDivide extends HBinaryArithmetic {
return super.computeDesiredTypeForNonTargetInput(input);
}
- DivideOperation get operation() => const DivideOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.divide;
int typeCode() => 6;
bool typeEquals(other) => other is HDivide;
bool dataEquals(HInstruction other) => true;
@@ -1556,7 +1558,8 @@ class HModulo extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitModulo(this);
- ModuloOperation get operation() => const ModuloOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.modulo;
int typeCode() => 7;
bool typeEquals(other) => other is HModulo;
bool dataEquals(HInstruction other) => true;
@@ -1567,7 +1570,8 @@ class HMultiply extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitMultiply(this);
- MultiplyOperation get operation() => const MultiplyOperation();
+ BinaryOperation operation(FoldingOperations operations)
+ => operations.multiply;
int typeCode() => 8;
bool typeEquals(other) => other is HMultiply;
bool dataEquals(HInstruction other) => true;
@@ -1578,7 +1582,8 @@ class HSubtract extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitSubtract(this);
- SubtractOperation get operation() => const SubtractOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.subtract;
int typeCode() => 9;
bool typeEquals(other) => other is HSubtract;
bool dataEquals(HInstruction other) => true;
@@ -1612,8 +1617,8 @@ class HTruncatingDivide extends HBinaryArithmetic {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
- TruncatingDivideOperation get operation()
- => const TruncatingDivideOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.truncatingDivide;
int typeCode() => 10;
bool typeEquals(other) => other is HTruncatingDivide;
bool dataEquals(HInstruction other) => true;
@@ -1667,7 +1672,8 @@ class HShiftLeft extends HBinaryBitOp {
return count >= 0 && count <= 31;
}
- ShiftLeftOperation get operation() => const ShiftLeftOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.shiftLeft;
int typeCode() => 11;
bool typeEquals(other) => other is HShiftLeft;
bool dataEquals(HInstruction other) => true;
@@ -1681,7 +1687,8 @@ class HShiftRight extends HBinaryBitOp {
// Shift right cannot be mapped to the native operator easily.
bool get builtin() => false;
- ShiftRightOperation get operation() => const ShiftRightOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.shiftRight;
int typeCode() => 12;
bool typeEquals(other) => other is HShiftRight;
bool dataEquals(HInstruction other) => true;
@@ -1692,7 +1699,8 @@ class HBitOr extends HBinaryBitOp {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitBitOr(this);
- BitOrOperation get operation() => const BitOrOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.bitOr;
int typeCode() => 13;
bool typeEquals(other) => other is HBitOr;
bool dataEquals(HInstruction other) => true;
@@ -1703,7 +1711,8 @@ class HBitAnd extends HBinaryBitOp {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitBitAnd(this);
- BitAndOperation get operation() => const BitAndOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.bitAnd;
int typeCode() => 14;
bool typeEquals(other) => other is HBitAnd;
bool dataEquals(HInstruction other) => true;
@@ -1714,7 +1723,8 @@ class HBitXor extends HBinaryBitOp {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitBitXor(this);
- BitXorOperation get operation() => const BitXorOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.bitXor;
int typeCode() => 15;
bool typeEquals(other) => other is HBitXor;
bool dataEquals(HInstruction other) => true;
@@ -1757,14 +1767,15 @@ class HInvokeUnary extends HInvokeStatic {
HType get likelyType() => HType.NUMBER;
- abstract UnaryOperation get operation();
+ abstract UnaryOperation operation(FoldingOperations foldingOperations);
}
class HNegate extends HInvokeUnary {
HNegate(HStatic target, HInstruction input) : super(target, input);
accept(HVisitor visitor) => visitor.visitNegate(this);
- NegateOperation get operation() => const NegateOperation();
+ UnaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.negate;
int typeCode() => 16;
bool typeEquals(other) => other is HNegate;
bool dataEquals(HInstruction other) => true;
@@ -1790,7 +1801,8 @@ class HBitNot extends HInvokeUnary {
return HType.UNKNOWN;
}
- BitNotOperation get operation() => const BitNotOperation();
+ UnaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.bitNot;
int typeCode() => 17;
bool typeEquals(other) => other is HBitNot;
bool dataEquals(HInstruction other) => true;
@@ -2083,7 +2095,7 @@ class HRelational extends HInvokeBinary {
bool get builtin() => left.isNumber() && right.isNumber();
// TODO(1603): the class should be marked as abstract.
- abstract BinaryOperation get operation();
+ abstract BinaryOperation operation(FoldingOperations foldingOperations);
}
class HEquals extends HRelational {
@@ -2130,7 +2142,8 @@ class HEquals extends HRelational {
return HType.UNKNOWN;
}
- EqualsOperation get operation() => const EqualsOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.equal;
int typeCode() => 19;
bool typeEquals(other) => other is HEquals;
bool dataEquals(HInstruction other) => true;
@@ -2148,7 +2161,8 @@ class HIdentity extends HRelational {
// Note that the identity operator really does not care for its input types.
HType computeDesiredTypeForInput(HInstruction input) => HType.UNKNOWN;
- IdentityOperation get operation() => const IdentityOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.identity;
int typeCode() => 20;
bool typeEquals(other) => other is HIdentity;
bool dataEquals(HInstruction other) => true;
@@ -2159,7 +2173,8 @@ class HGreater extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitGreater(this);
- GreaterOperation get operation() => const GreaterOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.greater;
int typeCode() => 21;
bool typeEquals(other) => other is HGreater;
bool dataEquals(HInstruction other) => true;
@@ -2170,7 +2185,8 @@ class HGreaterEqual extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitGreaterEqual(this);
- GreaterEqualOperation get operation() => const GreaterEqualOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.greaterEqual;
int typeCode() => 22;
bool typeEquals(other) => other is HGreaterEqual;
bool dataEquals(HInstruction other) => true;
@@ -2181,7 +2197,8 @@ class HLess extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitLess(this);
- LessOperation get operation() => const LessOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.less;
int typeCode() => 23;
bool typeEquals(other) => other is HLess;
bool dataEquals(HInstruction other) => true;
@@ -2192,7 +2209,8 @@ class HLessEqual extends HRelational {
: super(target, left, right);
accept(HVisitor visitor) => visitor.visitLessEqual(this);
- LessEqualOperation get operation() => const LessEqualOperation();
+ BinaryOperation operation(FoldingOperations foldingOperations)
+ => foldingOperations.lessEqual;
int typeCode() => 24;
bool typeEquals(other) => other is HLessEqual;
bool dataEquals(HInstruction other) => true;

Powered by Google App Engine
This is Rietveld 408576698