Index: pkg/compiler/lib/src/cps_ir/type_propagation.dart |
diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart |
index 631aaf2d4529da1be85c90e0c82c7f331c10e84e..a7bfb3fc5558de277bf898770965296fd0d719a5 100644 |
--- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart |
+++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart |
@@ -978,8 +978,7 @@ class TransformingVisitor extends LeafVisitor { |
CpsFragment cps = new CpsFragment(sourceInfo); |
cps.invokeBuiltin(BuiltinMethod.Push, |
list, |
- <Primitive>[addedItem], |
- receiverIsNotNull: listValue.isDefinitelyNotNull); |
+ <Primitive>[addedItem]); |
cps.invokeContinuation(cont, [cps.makeNull()]); |
replaceSubtree(node, cps.result); |
push(cps.result); |
@@ -1002,8 +1001,7 @@ class TransformingVisitor extends LeafVisitor { |
[list, fail.makeConstant(new IntConstantValue(-1))]); |
Primitive removedItem = cps.invokeBuiltin(BuiltinMethod.Pop, |
list, |
- <Primitive>[], |
- receiverIsNotNull: listValue.isDefinitelyNotNull); |
+ <Primitive>[]); |
cps.invokeContinuation(cont, [removedItem]); |
replaceSubtree(node, cps.result); |
push(cps.result); |
@@ -1027,8 +1025,7 @@ class TransformingVisitor extends LeafVisitor { |
CpsFragment cps = new CpsFragment(sourceInfo); |
cps.invokeBuiltin(BuiltinMethod.Push, |
list, |
- addedLiteral.values.map((ref) => ref.definition).toList(), |
- receiverIsNotNull: listValue.isDefinitelyNotNull); |
+ addedLiteral.values.map((ref) => ref.definition).toList()); |
cps.invokeContinuation(cont, [cps.makeNull()]); |
replaceSubtree(node, cps.result); |
push(cps.result); |
@@ -1476,7 +1473,6 @@ class TransformingVisitor extends LeafVisitor { |
if (specializeClosureCall(node)) return; |
AbstractValue receiver = getValue(node.receiver.definition); |
- node.receiverIsNotNull = receiver.isDefinitelyNotNull; |
if (node.receiverIsIntercepted && |
node.receiver.definition.sameValue(node.arguments[0].definition)) { |
@@ -1833,14 +1829,6 @@ class TransformingVisitor extends LeafVisitor { |
return null; |
} |
- void visitGetField(GetField node) { |
- node.objectIsNotNull = getValue(node.object.definition).isDefinitelyNotNull; |
- } |
- |
- void visitGetLength(GetLength node) { |
- node.objectIsNotNull = getValue(node.object.definition).isDefinitelyNotNull; |
- } |
- |
Primitive visitInterceptor(Interceptor node) { |
AbstractValue value = getValue(node.input.definition); |
// If the exact class of the input is known, replace with a constant |
@@ -2139,6 +2127,7 @@ class TypePropagationVisitor implements Visitor { |
void visitInvokeMethod(InvokeMethod node) { |
AbstractValue receiver = getValue(node.receiver.definition); |
+ node.receiverIsNotNull = receiver.isDefinitelyNotNull; |
if (receiver.isNothing) { |
return; // And come back later. |
} |
@@ -2443,6 +2432,7 @@ class TypePropagationVisitor implements Visitor { |
} |
void visitGetField(GetField node) { |
+ node.objectIsNotNull = getValue(node.object.definition).isDefinitelyNotNull; |
setValue(node, nonConstant(typeSystem.getFieldType(node.field))); |
} |
@@ -2488,6 +2478,7 @@ class TypePropagationVisitor implements Visitor { |
@override |
void visitGetLength(GetLength node) { |
AbstractValue input = getValue(node.object.definition); |
+ node.objectIsNotNull = getValue(node.object.definition).isDefinitelyNotNull; |
int length = typeSystem.getContainerLength(input.type); |
if (length != null) { |
// TODO(asgerf): Constant-folding the length might degrade the VM's |