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

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

Issue 10540048: Implement 'as' operator. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: No entries in language.status, vm and dartc already implemented 'as'. Created 8 years, 6 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 f657bfcc4bbc28b8987838ea9aa22b6a44f0942a..005083d84bf46472956ab639673b09369597210d 100644
--- a/lib/compiler/implementation/ssa/nodes.dart
+++ b/lib/compiler/implementation/ssa/nodes.dart
@@ -1490,8 +1490,6 @@ class HSubtract extends HBinaryArithmetic {
* An [HSwitch] instruction has one input for the incoming
* value, and one input per constant that it can switch on.
* Its block has one successor per constant, and one for the default.
- * If the switch didn't have a default case, the last successor is
- * the join block.
*/
class HSwitch extends HControlFlow {
HSwitch(List<HInstruction> inputs) : super(inputs);
@@ -1499,6 +1497,11 @@ class HSwitch extends HControlFlow {
HConstant constant(int index) => inputs[index + 1];
HInstruction get expression() => inputs[0];
+ /**
+ * Provides the target to jump to if none of the constants match
+ * the expression. If the switch had no default case, this is the
+ * following join-block.
+ */
HBasicBlock get defaultTarget() => block.successors.last();
accept(HVisitor visitor) => visitor.visitSwitch(this);
@@ -1832,7 +1835,7 @@ class HNot extends HInstruction {
* value from the start, whereas [HLocalValue]s need to be initialized first.
*/
class HLocalValue extends HInstruction {
- HLocalValue(element) : super(<HInstruction>[]) {
+ HLocalValue(Element element) : super(<HInstruction>[]) {
sourceElement = element;
}
@@ -1845,7 +1848,7 @@ class HLocalValue extends HInstruction {
}
class HParameterValue extends HLocalValue {
- HParameterValue(element) : super(element);
+ HParameterValue(Element element) : super(element);
toString() => 'parameter ${sourceElement.name}';
accept(HVisitor visitor) => visitor.visitParameterValue(this);
@@ -2254,22 +2257,24 @@ class HTypeConversion extends HCheck {
static final int NO_CHECK = 0;
static final int CHECKED_MODE_CHECK = 1;
static final int ARGUMENT_TYPE_CHECK = 2;
+ static final int CAST_TYPE_CHECK = 3;
- HTypeConversion(HType type, HInstruction input)
- : this.internal(type, input, NO_CHECK);
- HTypeConversion.checkedModeCheck(HType type, HInstruction input)
- : this.internal(type, input, CHECKED_MODE_CHECK);
- HTypeConversion.argumentTypeCheck(HType type, HInstruction input)
- : this.internal(type, input, ARGUMENT_TYPE_CHECK);
-
- HTypeConversion.internal(this.type, HInstruction input, this.kind)
+ HTypeConversion(this.type, HInstruction input, [this.kind = NO_CHECK])
: super(<HInstruction>[input]) {
sourceElement = input.sourceElement;
}
+ HTypeConversion.checkedModeCheck(HType type, HInstruction input)
+ : this(type, input, CHECKED_MODE_CHECK);
+ HTypeConversion.argumentTypeCheck(HType type, HInstruction input)
+ : this(type, input, ARGUMENT_TYPE_CHECK);
+ HTypeConversion.castCheck(HType type, HInstruction input)
+ : this(type, intpu, CAST_TYPE_CHECK);
+
- bool isChecked() => kind != NO_CHECK;
- bool isCheckedModeCheck() => kind == CHECKED_MODE_CHECK;
- bool isArgumentTypeCheck() => kind == ARGUMENT_TYPE_CHECK;
+ bool get isChecked() => kind != NO_CHECK;
+ bool get isCheckedModeCheck() => kind == CHECKED_MODE_CHECK;
+ bool get isArgumentTypeCheck() => kind == ARGUMENT_TYPE_CHECK;
+ bool get isCastTypeCheck() => kind == CAST_TYPE_CHECK;
HType get guaranteedType() => type;

Powered by Google App Engine
This is Rietveld 408576698