Version 2.14.0-20.0.dev
Merge commit '6ec6fd7b4ad080a13e81acbef0214b4127d9c3f0' into 'dev'
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index aebbf7b..d6def19 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -922,18 +922,10 @@
@override
TypeInformation visitEqualsNull(ir.EqualsNull node) {
visit(node.expression);
- if (node.fileOffset < node.expression.fileOffset) {
- // Hack to detect `null == o`.
- // TODO(johnniwinther): Remove this after the new method invocation has
- // landed stably. This is only included to make the transition a no-op.
- KernelGlobalTypeInferenceElementData data = _memberData;
- data.setReceiverTypeMask(node, _closedWorld.abstractValueDomain.nullType);
- } else {
- // TODO(johnniwinther). This triggers the computation of the mask for the
- // receiver of the call to `==`, which doesn't happen in this case. Remove
- // this when the ssa builder recognized `== null` directly.
- _typeOfReceiver(node, node.expression);
- }
+ // TODO(johnniwinther). This triggers the computation of the mask for the
+ // receiver of the call to `==`, which doesn't happen in this case. Remove
+ // this when the ssa builder recognizes `== null` directly.
+ _typeOfReceiver(node, node.expression);
_potentiallyAddNullCheck(node, node.expression);
return _types.boolType;
}
@@ -986,7 +978,7 @@
TypeInformation rightType) {
// TODO(johnniwinther). This triggers the computation of the mask for the
// receiver of the call to `==`, which might not happen in this case. Remove
- // this when the ssa builder recognized `== null` directly.
+ // this when the ssa builder recognizes `== null` directly.
_typeOfReceiver(node, left);
bool leftIsNull = _types.isNull(leftType);
bool rightIsNull = _types.isNull(rightType);
@@ -1065,7 +1057,7 @@
receiver.variable.parent is ir.FunctionDeclaration) {
// TODO(johnniwinther). This triggers the computation of the mask for the
// receiver of the call to `call`. Remove this when the ssa builder
- // recognized local function invocation directly.
+ // recognizes local function invocation directly.
_typeOfReceiver(node, node.receiver);
// This is an invocation of a named local function.
return _handleLocalFunctionInvocation(
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index 803aed8..7fabac6 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -598,15 +598,6 @@
@override
void handleEqualsNull(ir.EqualsNull node, ir.DartType expressionType) {
- // TODO(johnniwinther): Remove this after the new method invocation has landed
- // stably. This is only included to make the transition a no-op.
- if (node.fileOffset < node.expression.fileOffset) {
- // Hack to detect `null == o`.
- expressionType = const ir.NullType();
- }
- ClassRelation relation = computeClassRelationFromType(expressionType);
- registerDynamicInvocation(
- expressionType, relation, ir.Name.equalsName, 1, const [], const []);
registerNullLiteral();
}
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index fd85772..224a793 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -1115,8 +1115,6 @@
return super.visitEqualsCall(node);
}
- // TODO(johnniwinther): Remove this after the new method invocation has landed
- // stably. This is only included to make the transition a no-op.
void handleEqualsNull(ir.EqualsNull node, ir.DartType expressionType) {}
@override
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 0051870..0520273 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -5284,28 +5284,8 @@
void visitEqualsNull(ir.EqualsNull node) {
node.expression.accept(this);
HInstruction receiverInstruction = pop();
-
- // Hack to detect `null == o`.
- // TODO(johnniwinther): Remove this after the new method invocation has
- // landed stably. This is only included to make the transition a no-op.
- if (node.fileOffset < node.expression.fileOffset) {
- _pushDynamicInvocation(
- node,
- new StaticType(
- _elementMap.commonElements.nullType, ClassRelation.subtype),
- _typeInferenceMap.receiverTypeOfInvocation(
- node, _abstractValueDomain),
- Selectors.equals,
- <HInstruction>[
- graph.addConstantNull(closedWorld),
- receiverInstruction
- ],
- const <DartType>[],
- _sourceInformationBuilder.buildCall(node.expression, node));
- } else {
- _handleEquals(node, node.expression, receiverInstruction,
- graph.addConstantNull(closedWorld));
- }
+ _handleEquals(node, node.expression, receiverInstruction,
+ graph.addConstantNull(closedWorld));
}
@override
diff --git a/pkg/compiler/test/codegen/builtin_equals_test.dart b/pkg/compiler/test/codegen/builtin_equals_test.dart
index d5281f8..c91d5d2 100644
--- a/pkg/compiler/test/codegen/builtin_equals_test.dart
+++ b/pkg/compiler/test/codegen/builtin_equals_test.dart
@@ -27,7 +27,9 @@
RegExp regexp = new RegExp('==');
Iterator<Match> matches = regexp.allMatches(generated).iterator;
- checkNumberOfMatches(matches, 4);
+ // `s == null` and `null == s` now both encoded as `s == null` allowing
+ // the second to be optimized away.
+ checkNumberOfMatches(matches, 3);
});
}
diff --git a/pkg/compiler/test/codegen/constant_folding_test.dart b/pkg/compiler/test/codegen/constant_folding_test.dart
index a3471c3..ee8d440 100644
--- a/pkg/compiler/test/codegen/constant_folding_test.dart
+++ b/pkg/compiler/test/codegen/constant_folding_test.dart
@@ -67,7 +67,7 @@
RegExp regexp = new RegExp(r'a == null');
Expect.isTrue(regexp.hasMatch(generated), 'No match found for ${regexp}');
- regexp = new RegExp(r'null == b');
+ regexp = new RegExp(r'b == null');
Expect.isTrue(regexp.hasMatch(generated), 'No match found for ${regexp}');
regexp = new RegExp(r'4 === c');
diff --git a/pkg/compiler/test/impact/data/expressions.dart b/pkg/compiler/test/impact/data/expressions.dart
index 6b4b041..2beebc8 100644
--- a/pkg/compiler/test/impact/data/expressions.dart
+++ b/pkg/compiler/test/impact/data/expressions.dart
@@ -364,13 +364,14 @@
type=[inst:JSString]*/
testThrow() => throw '';
-/*member: testIfNotNull:dynamic=[Object.==,foo],type=[inst:JSNull]*/
+/*member: testIfNotNull:
+ dynamic=[foo],
+ type=[inst:JSNull]
+*/
testIfNotNull(o) => o?.foo;
/*member: testTypedIfNotNull:
- dynamic=[
- Class.==,
- Class.field],
+ dynamic=[Class.field],
static=[
Rti._bind(1),
Rti._eval(1),
@@ -415,13 +416,22 @@
*/
testTypedIfNotNull(Class o) => o?.field;
-/*member: testIfNotNullSet:dynamic=[Object.==,foo=],type=[inst:JSBool,inst:JSNull]*/
+/*member: testIfNotNullSet:
+ dynamic=[foo=],
+ type=[
+ inst:JSBool,
+ inst:JSNull]
+*/
testIfNotNullSet(o) => o?.foo = true;
-/*member: testIfNull:dynamic=[Object.==],type=[inst:JSBool,inst:JSNull]*/
+/*member: testIfNull:type=[
+ inst:JSBool,
+ inst:JSNull]*/
testIfNull(o) => o ?? true;
-/*member: testSetIfNull:dynamic=[Object.==],type=[inst:JSBool,inst:JSNull]*/
+/*member: testSetIfNull:type=[
+ inst:JSBool,
+ inst:JSNull]*/
testSetIfNull(o) => o ??= true;
class Class {
diff --git a/pkg/compiler/test/impact/data/jsinterop_setter1.dart b/pkg/compiler/test/impact/data/jsinterop_setter1.dart
index 4042ca9..b2b6e34 100644
--- a/pkg/compiler/test/impact/data/jsinterop_setter1.dart
+++ b/pkg/compiler/test/impact/data/jsinterop_setter1.dart
@@ -68,9 +68,7 @@
external set foo(Function f);
/*member: _doStuff:
- dynamic=[
- File.==,
- File.name],
+ dynamic=[File.name],
static=[
Rti._bind(1),
Rti._eval(1),
diff --git a/pkg/compiler/test/impact/data/jsinterop_setter2.dart b/pkg/compiler/test/impact/data/jsinterop_setter2.dart
index d62e98f..82f71cb 100644
--- a/pkg/compiler/test/impact/data/jsinterop_setter2.dart
+++ b/pkg/compiler/test/impact/data/jsinterop_setter2.dart
@@ -75,9 +75,7 @@
external set foo(void Function(String, File) f);
/*member: _doStuff:
- dynamic=[
- File.==,
- File.name],
+ dynamic=[File.name],
static=[
Rti._bind(1),
Rti._eval(1),
diff --git a/pkg/compiler/test/impact/data/promotion.dart b/pkg/compiler/test/impact/data/promotion.dart
index 7aaba1c..713e6a0 100644
--- a/pkg/compiler/test/impact/data/promotion.dart
+++ b/pkg/compiler/test/impact/data/promotion.dart
@@ -197,7 +197,7 @@
cls.toString;
}
-/*member: dynamicToEquals:dynamic=[Object.==],type=[inst:JSNull]*/
+/*member: dynamicToEquals:type=[inst:JSNull]*/
dynamicToEquals(dynamic cls) {
cls == null;
}
diff --git a/pkg/compiler/test/impact/data/runtime_type.dart b/pkg/compiler/test/impact/data/runtime_type.dart
index 2c8dd9a..926936d 100644
--- a/pkg/compiler/test/impact/data/runtime_type.dart
+++ b/pkg/compiler/test/impact/data/runtime_type.dart
@@ -36,7 +36,6 @@
class Class1c<T> implements Class1a<T> {
/*member: Class1c.==:
dynamic=[
- Object.==,
Object.runtimeType,
Type.==,
this:Class1c.runtimeType],
@@ -52,7 +51,6 @@
class Class1d<T> implements Class1a<T> {
/*member: Class1d.==:
dynamic=[
- Object.==,
Object.runtimeType,
Type.==,
this:Class1d.runtimeType],
@@ -134,7 +132,6 @@
/*member: toString2:
dynamic=[
- Class2.==,
Class2.runtimeType,
toString(0)],
runtimeType=[string:Class2<int*>*],
@@ -247,7 +244,6 @@
/*member: toString4:
dynamic=[
Class2.runtimeType,
- Type.==,
Type.toString(0)],
runtimeType=[string:Class2<int*>*],
static=[
@@ -302,9 +298,7 @@
/*member: toString5:
dynamic=[
- Class2.==,
Class2.runtimeType,
- Type.==,
Type.toString(0)],
runtimeType=[string:Class2<int*>*],
static=[
@@ -359,7 +353,6 @@
/*member: toString6:
dynamic=[
- Class2.==,
Class2.runtimeType,
Type.toString(0)],
runtimeType=[string:Class2<int*>*],
@@ -467,9 +460,7 @@
/*member: equals1:
dynamic=[
- Class1a.==,
Class1a.runtimeType,
- Class1d.==,
Class1d.runtimeType,
Type.==],
runtimeType=[equals:Class1a<int*>*==Class1d<int*>*],
@@ -525,9 +516,7 @@
equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType;
/*member: almostEquals1:
- dynamic=[
- Class3.runtimeType,
- Type.==],
+ dynamic=[Class3.runtimeType],
runtimeType=[unknown:Class3*],
static=[
Rti._bind(1),
@@ -574,10 +563,7 @@
almostEquals1(Class3 a) => a.runtimeType == null;
/*member: almostEquals2:
- dynamic=[
- Class3.==,
- Class3.runtimeType,
- Type.==],
+ dynamic=[Class3.runtimeType],
runtimeType=[unknown:Class3*],
static=[
Rti._bind(1),
@@ -624,9 +610,7 @@
almostEquals2(Class3 a) => a?.runtimeType == null;
/*member: almostEquals3:
- dynamic=[
- Class3.runtimeType,
- Null.==],
+ dynamic=[Class3.runtimeType],
runtimeType=[unknown:Class3*],
static=[
Rti._bind(1),
@@ -673,10 +657,7 @@
almostEquals3(Class3 a) => null == a.runtimeType;
/*member: almostEquals4:
- dynamic=[
- Class3.==,
- Class3.runtimeType,
- Null.==],
+ dynamic=[Class3.runtimeType],
runtimeType=[unknown:Class3*],
static=[
Rti._bind(1),
@@ -773,7 +754,6 @@
/*member: almostEquals6:
dynamic=[
- Class3.==,
Class3.field,
Class3.runtimeType,
Type.==],
@@ -824,7 +804,6 @@
/*member: almostEquals7:
dynamic=[
- Class3.==,
Class3.field,
Class3.runtimeType,
Type.==],
@@ -875,7 +854,6 @@
/*member: almostEquals8:
dynamic=[
- Class3.==,
Class3.field,
Class3.runtimeType,
Type.==],
@@ -975,7 +953,6 @@
/*member: almostEquals10:
dynamic=[
- Class3.==,
Class3.field,
Class3.runtimeType,
Object.==],
@@ -1026,7 +1003,6 @@
/*member: almostEquals11:
dynamic=[
- Class3.==,
Class3.field,
Class3.runtimeType,
Object.==],
@@ -1077,7 +1053,6 @@
/*member: almostEquals12:
dynamic=[
- Class3.==,
Class3.field,
Class3.runtimeType,
Object.==],
@@ -1176,9 +1151,7 @@
/*member: almostToString2:
dynamic=[
- Class3.==,
Class3.runtimeType,
- Type.==,
Type.toString],
runtimeType=[unknown:Class3*],
static=[
@@ -1276,7 +1249,6 @@
/*member: almostToString4:
dynamic=[
- Class3.==,
Class3.runtimeType,
Type.noSuchMethod(1)],
runtimeType=[unknown:Class3*],
@@ -1376,7 +1348,6 @@
/*member: notEquals2:
dynamic=[
- Class3.==,
Class3.runtimeType,
Class4.runtimeType,
Type.==],
@@ -1429,7 +1400,6 @@
/*member: notEquals3:
dynamic=[
Class3.runtimeType,
- Class4.==,
Class4.runtimeType,
Type.==],
runtimeType=[equals:Class3*==Class4*],
@@ -1480,9 +1450,7 @@
/*member: notEquals4:
dynamic=[
- Class3.==,
Class3.runtimeType,
- Class4.==,
Class4.runtimeType,
Type.==],
runtimeType=[equals:Class3*==Class4*],
diff --git a/pkg/compiler/test/static_type/data/assert.dart b/pkg/compiler/test/static_type/data/assert.dart
index 39ecf52..cf39c87 100644
--- a/pkg/compiler/test/static_type/data/assert.dart
+++ b/pkg/compiler/test/static_type/data/assert.dart
@@ -20,25 +20,25 @@
}
assert1(Class c) {
- assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+ assert(/*Class*/ c != null);
/*Class*/ c.next;
}
assert2(Class c) {
- assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+ assert(/*Class*/ c == null);
/*Class*/ c.next;
}
assert3(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+ assert(/*Class*/ c != null);
if (/*bool*/ b) return;
/*Class*/ c.next;
}
assert4(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+ assert(/*Class*/ c == null);
if (/*bool*/ b) return;
/*Class*/ c.next;
}
diff --git a/pkg/compiler/test/static_type/data/assert_ea.dart b/pkg/compiler/test/static_type/data/assert_ea.dart
index e178bbc..4851158 100644
--- a/pkg/compiler/test/static_type/data/assert_ea.dart
+++ b/pkg/compiler/test/static_type/data/assert_ea.dart
@@ -20,25 +20,25 @@
}
assert1(Class c) {
- assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+ assert(/*Class*/ c != null);
/*Class*/ c.next;
}
assert2(Class c) {
- assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+ assert(/*Class*/ c == null);
/*Null*/ c.next;
}
assert3(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+ assert(/*Class*/ c != null);
if (/*bool*/ b) return;
/*Class*/ c.next;
}
assert4(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+ assert(/*Class*/ c == null);
if (/*bool*/ b) return;
/*Null*/ c.next;
}
diff --git a/pkg/compiler/test/static_type/data/do.dart b/pkg/compiler/test/static_type/data/do.dart
index 072fb39..7c1defa 100644
--- a/pkg/compiler/test/static_type/data/do.dart
+++ b/pkg/compiler/test/static_type/data/do.dart
@@ -22,7 +22,7 @@
/*Class*/ c.next;
}
c = 0;
- } while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null);
+ } while (/*dynamic*/ c != null);
/*dynamic*/ c.next;
}
}
@@ -32,7 +32,7 @@
/*Class*/ c.next;
do {
/*Class*/ c.next;
- } while (/*Class*/ c /*invoke: [Class]->bool*/ != null);
+ } while (/*Class*/ c != null);
/*Class*/ c.next;
}
}
diff --git a/pkg/compiler/test/static_type/data/for.dart b/pkg/compiler/test/static_type/data/for.dart
index 1128ac9..df400d8 100644
--- a/pkg/compiler/test/static_type/data/for.dart
+++ b/pkg/compiler/test/static_type/data/for.dart
@@ -19,7 +19,7 @@
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
for (/*Class*/ c.next;
- /*dynamic*/ c /*invoke: [dynamic]->bool*/ != null;
+ /*dynamic*/ c != null;
/*dynamic*/ c.next) {
/*dynamic*/ c.next;
if (/*dynamic*/ c is Class) {
@@ -35,7 +35,7 @@
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
for (/*Class*/ c.next;
- /*Class*/ c /*invoke: [Class]->bool*/ != null;
+ /*Class*/ c != null;
/*Class*/ c.next) {
/*Class*/ c.next;
}
diff --git a/pkg/compiler/test/static_type/data/issue42281.dart b/pkg/compiler/test/static_type/data/issue42281.dart
index c8d8fdf..efe3a5d 100644
--- a/pkg/compiler/test/static_type/data/issue42281.dart
+++ b/pkg/compiler/test/static_type/data/issue42281.dart
@@ -16,8 +16,8 @@
}
method1(Class c, Type type, [o]) {
- if (/*Class*/ c /*invoke: [Class]->bool*/ == null) {
- if (/*dynamic*/ o /*invoke: [dynamic]->bool*/ != null) {
+ if (/*Class*/ c == null) {
+ if (/*dynamic*/ o != null) {
c = new Class(String);
}
/*Class*/ c;
@@ -26,8 +26,8 @@
}
method2(Class c, Type type, [o]) {
- if (/*Class*/ c /*invoke: [Class]->bool*/ == null) {
- if (/*dynamic*/ o /*invoke: [dynamic]->bool*/ != null) {
+ if (/*Class*/ c == null) {
+ if (/*dynamic*/ o != null) {
c = new SubClass(String);
}
/*Class*/ c;
@@ -37,8 +37,8 @@
method3(Class c, Type type, [o]) {
if (/*Class*/ c is SubClass) {
- if (/*SubClass*/ c /*invoke: [SubClass]->bool*/ == null) {
- if (/*dynamic*/ o /*invoke: [dynamic]->bool*/ != null) {
+ if (/*SubClass*/ c == null) {
+ if (/*dynamic*/ o != null) {
c = new SubClass(String);
}
/*SubClass*/ c;
diff --git a/pkg/compiler/test/static_type/data/marker.options b/pkg/compiler/test/static_type/data/marker.options
index 3d9c6d9..478f33e 100644
--- a/pkg/compiler/test/static_type/data/marker.options
+++ b/pkg/compiler/test/static_type/data/marker.options
@@ -1,2 +1 @@
spec=pkg/compiler/test/static_type/static_type_test.dart
-prod=pkg/compiler/test/static_type/static_type_test.dart
diff --git a/pkg/compiler/test/static_type/data/null.dart b/pkg/compiler/test/static_type/data/null.dart
index 5fd9622..a421ef1 100644
--- a/pkg/compiler/test/static_type/data/null.dart
+++ b/pkg/compiler/test/static_type/data/null.dart
@@ -21,46 +21,46 @@
null1(dynamic c) {
/*dynamic*/ c.next;
- /*dynamic*/ c /*invoke: [dynamic]->bool*/ != null;
+ /*dynamic*/ c != null;
/*dynamic*/ c.next;
}
null2(dynamic c) {
/*dynamic*/ c.next;
- /*dynamic*/ c /*invoke: [dynamic]->bool*/ == null;
+ /*dynamic*/ c == null;
/*dynamic*/ c.next;
}
null3(dynamic c) {
- if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) return;
+ if (/*dynamic*/ c == null) return;
/*dynamic*/ c.next;
}
null4(dynamic c) {
- if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) return;
+ if (/*dynamic*/ c != null) return;
/*Null*/ c.next;
}
null5(dynamic c) {
- if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
+ if (/*dynamic*/ c != null) {
/*dynamic*/ c.next;
}
}
null6(dynamic c) {
- if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) {
+ if (/*dynamic*/ c == null) {
/*Null*/ c.next;
}
}
null7(dynamic c) {
- while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
+ while (/*dynamic*/ c != null) {
/*dynamic*/ c.next;
}
}
null8(dynamic c) {
- while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) {
+ while (/*dynamic*/ c == null) {
/*Null*/ c.next;
}
}
diff --git a/pkg/compiler/test/static_type/data/while.dart b/pkg/compiler/test/static_type/data/while.dart
index 671d6da..881015a 100644
--- a/pkg/compiler/test/static_type/data/while.dart
+++ b/pkg/compiler/test/static_type/data/while.dart
@@ -26,7 +26,7 @@
while1(dynamic c) {
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
- while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
+ while (/*dynamic*/ c != null) {
/*dynamic*/ c.next;
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
@@ -40,7 +40,7 @@
while2(dynamic c) {
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
- while (/*Class*/ c /*invoke: [Class]->bool*/ != null) {
+ while (/*Class*/ c != null) {
/*Class*/ c.next;
}
/*Class*/ c.next;
@@ -48,7 +48,7 @@
}
whileNext(Class c) {
- while (/*Class*/ c /*invoke: [Class]->bool*/ != null) {
+ while (/*Class*/ c != null) {
c = /*Class*/ c.next;
}
return /*Class*/ c;
@@ -56,7 +56,7 @@
whileNextGeneric(GenericClass<int> c) {
while (
- /*GenericClass<int>*/ c /*invoke: [GenericClass<int>]->bool*/ != null) {
+ /*GenericClass<int>*/ c != null) {
c = /*GenericClass<int>*/ c.next;
}
return /*GenericClass<int>*/ c;
@@ -80,7 +80,7 @@
whileNext2() {
bool b;
GenericClass<T> c;
- while (/*GenericClass<T>*/ c /*invoke: [GenericClass<T>]->bool*/ != null) {
+ while (/*GenericClass<T>*/ c != null) {
if (/*bool*/ b) {
GenericClass<T> next = /*GenericClass<T>*/ c.next;
c = /*GenericClass<T>*/ next;
@@ -94,7 +94,7 @@
whileNext3() {
bool b;
GenericClass<T> c;
- while (/*GenericClass<T>*/ c /*invoke: [GenericClass<T>]->bool*/ == null) {
+ while (/*GenericClass<T>*/ c == null) {
if (/*bool*/ b) {
GenericClass<T> next = /*Null*/ c.next;
c = /*GenericClass<T>*/ next;
diff --git a/pkg/compiler/test/static_type/static_type_test.dart b/pkg/compiler/test/static_type/static_type_test.dart
index fca7c8a..15cf87d 100644
--- a/pkg/compiler/test/static_type/static_type_test.dart
+++ b/pkg/compiler/test/static_type/static_type_test.dart
@@ -107,11 +107,6 @@
} else if (node is ir.EqualsCall) {
return '[${typeToText(node.left.accept(staticTypeCache))}]->'
'${typeToText(node.accept(staticTypeCache))}';
- } else if (node is ir.EqualsNull) {
- // TODO(johnniwinther): Remove this after the new method invocation has
- // landed stably. This is only included to make the transition a no-op.
- return '[${typeToText(node.expression.accept(staticTypeCache))}]->'
- '${typeToText(node.accept(staticTypeCache))}';
}
return null;
}
diff --git a/tools/VERSION b/tools/VERSION
index ca6b26c..0c01fa4 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 19
+PRERELEASE 20
PRERELEASE_PATCH 0
\ No newline at end of file