Include receiver method invocation receiver type in static type test
Change-Id: I61227e694ca2a19d268705e7a79ae0e696e3a79b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101524
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/tests/compiler/dart2js/static_type/data/assert.dart b/tests/compiler/dart2js/static_type/data/assert.dart
index 0f0057e..54f2a34 100644
--- a/tests/compiler/dart2js/static_type/data/assert.dart
+++ b/tests/compiler/dart2js/static_type/data/assert.dart
@@ -18,25 +18,25 @@
}
assert1(Class c) {
- assert(/*Class*/ c /*invoke: bool*/ != null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
/*Class*/ c.next;
}
assert2(Class c) {
- assert(/*Class*/ c /*invoke: bool*/ == null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
/*Class*/ c.next;
}
assert3(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: bool*/ != null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
if (/*bool*/ b) return;
/*Class*/ c.next;
}
assert4(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: bool*/ == null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
if (/*bool*/ b) return;
/*Class*/ c.next;
}
diff --git a/tests/compiler/dart2js/static_type/data/assert_ea.dart b/tests/compiler/dart2js/static_type/data/assert_ea.dart
index 9e6edbd..c28215d 100644
--- a/tests/compiler/dart2js/static_type/data/assert_ea.dart
+++ b/tests/compiler/dart2js/static_type/data/assert_ea.dart
@@ -18,25 +18,25 @@
}
assert1(Class c) {
- assert(/*Class*/ c /*invoke: bool*/ != null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
/*Class*/ c.next;
}
assert2(Class c) {
- assert(/*Class*/ c /*invoke: bool*/ == null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
/*Null*/ c.next;
}
assert3(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: bool*/ != null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
if (/*bool*/ b) return;
/*Class*/ c.next;
}
assert4(Class c) {
bool b;
- assert(/*Class*/ c /*invoke: bool*/ == null);
+ assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
if (/*bool*/ b) return;
/*Null*/ c.next;
}
diff --git a/tests/compiler/dart2js/static_type/data/cascade.dart b/tests/compiler/dart2js/static_type/data/cascade.dart
index 08c3e25..4f2f6a5 100644
--- a/tests/compiler/dart2js/static_type/data/cascade.dart
+++ b/tests/compiler/dart2js/static_type/data/cascade.dart
@@ -8,8 +8,8 @@
promotedCascade(dynamic value) {
if (/*dynamic*/ value is List<String>) {
- value =
- '[${(/*List<String>*/ value.. /*invoke: void*/ sort()). /*invoke: String*/ join(',')}]';
+ value = '[${(
+ /*List<String>*/ value.. /*invoke: [List<String>]->void*/ sort()). /*invoke: [List<String>]->String*/ join(',')}]';
}
return /*dynamic*/ value;
}
diff --git a/tests/compiler/dart2js/static_type/data/closure.dart b/tests/compiler/dart2js/static_type/data/closure.dart
index 0878854..f24f209 100644
--- a/tests/compiler/dart2js/static_type/data/closure.dart
+++ b/tests/compiler/dart2js/static_type/data/closure.dart
@@ -29,7 +29,7 @@
}
/*dynamic*/ c.next;
- /*invoke: Null*/ local();
+ /*invoke: [Null Function()]->Null*/ local();
/*dynamic*/ c.next;
}
}
@@ -42,7 +42,7 @@
}
/*Class*/ c.next;
- /*invoke: Null*/ local();
+ /*invoke: [Null Function()]->Null*/ local();
/*Class*/ c.next;
}
}
@@ -56,7 +56,7 @@
c = 0;
/*dynamic*/ c.next;
- /*invoke: Null*/ local();
+ /*invoke: [Null Function()]->Null*/ local();
/*dynamic*/ c.next;
}
}
@@ -69,7 +69,7 @@
}
/*Class*/ c.next;
- /*invoke: Null*/ local();
+ /*invoke: [Null Function()]->Null*/ local();
/*Class*/ c.next;
c = 0;
/*dynamic*/ c.next;
@@ -85,7 +85,7 @@
}
/*dynamic*/ c.next;
- /*invoke: Null*/ local();
+ /*invoke: [Null Function()]->Null*/ local();
/*dynamic*/ c.next;
c = 0;
/*dynamic*/ c.next;
@@ -101,7 +101,7 @@
}
/*dynamic*/ c.next;
- /*invoke: Null*/ local();
+ /*invoke: [Null Function()]->Null*/ local();
/*dynamic*/ c.next;
c = 0;
/*dynamic*/ c.next;
@@ -118,10 +118,11 @@
closure6(var x) {
var closure;
/*dynamic*/ x is B &&
- _returnTrue(closure = () => /*dynamic*/ x. /*invoke: dynamic*/ f());
+ _returnTrue(
+ closure = () => /*dynamic*/ x. /*invoke: [dynamic]->dynamic*/ f());
/*dynamic*/ x;
x = new A();
- /*dynamic*/ closure. /*invoke: dynamic*/ call();
+ /*dynamic*/ closure. /*invoke: [dynamic]->dynamic*/ call();
/*dynamic*/ x;
}
@@ -137,20 +138,20 @@
_closure7(C x) {
/*C*/ x is D && _returnTrue((() => /*C*/ x))
- ? /*D*/ x. /*invoke: dynamic*/ f()
+ ? /*D*/ x. /*invoke: [D]->dynamic*/ f()
: x = new C();
_returnTrue((() => /*C*/ x)) && /*C*/ x is D
- ? /*D*/ x. /*invoke: dynamic*/ f()
+ ? /*D*/ x. /*invoke: [D]->dynamic*/ f()
: x = new C();
(/*C*/ x is D && _returnTrue((() => /*C*/ x))) &&
(/*D*/ x is E && _returnTrue((() => /*C*/ x)))
- ? /*E*/ x. /*invoke: dynamic*/ g()
+ ? /*E*/ x. /*invoke: [E]->dynamic*/ g()
: x = new C();
(_returnTrue((() => /*C*/ x)) && /*C*/ x is E) &&
(_returnTrue((() => /*C*/ x)) && /*E*/ x is D)
- ? /*E*/ x. /*invoke: dynamic*/ g()
+ ? /*E*/ x. /*invoke: [E]->dynamic*/ g()
: x = new C();
}
diff --git a/tests/compiler/dart2js/static_type/data/do.dart b/tests/compiler/dart2js/static_type/data/do.dart
index 205480d..0d0952b 100644
--- a/tests/compiler/dart2js/static_type/data/do.dart
+++ b/tests/compiler/dart2js/static_type/data/do.dart
@@ -20,7 +20,7 @@
/*Class*/ c.next;
}
c = 0;
- } while (/*dynamic*/ c /*invoke: bool*/ != null);
+ } while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null);
/*dynamic*/ c.next;
}
}
@@ -30,7 +30,7 @@
/*Class*/ c.next;
do {
/*Class*/ c.next;
- } while (/*Class*/ c /*invoke: bool*/ != null);
+ } while (/*Class*/ c /*invoke: [Class]->bool*/ != null);
/*Class*/ c.next;
}
}
diff --git a/tests/compiler/dart2js/static_type/data/effectively_final.dart b/tests/compiler/dart2js/static_type/data/effectively_final.dart
index 58bd022..a50cdaf 100644
--- a/tests/compiler/dart2js/static_type/data/effectively_final.dart
+++ b/tests/compiler/dart2js/static_type/data/effectively_final.dart
@@ -11,14 +11,14 @@
effectivelyFinalList() {
dynamic c = [];
- /*List<dynamic>*/ c. /*invoke: void*/ add(null);
- /*List<dynamic>*/ c.length /*invoke: int*/ + 1;
+ /*List<dynamic>*/ c. /*invoke: [List<dynamic>]->void*/ add(null);
+ /*List<dynamic>*/ c.length /*invoke: [int]->int*/ + 1;
}
notEffectivelyFinalList() {
dynamic c = [];
- /*dynamic*/ c. /*invoke: dynamic*/ add(null);
- /*dynamic*/ c.length /*invoke: dynamic*/ + 1;
+ /*dynamic*/ c. /*invoke: [dynamic]->dynamic*/ add(null);
+ /*dynamic*/ c.length /*invoke: [dynamic]->dynamic*/ + 1;
c = null;
}
@@ -26,9 +26,9 @@
effectivelyFinalPromoted() {
dynamic c = _method1();
- /*num*/ c /*invoke: num*/ + 0;
+ /*num*/ c /*invoke: [num]->num*/ + 0;
if (/*num*/ c is int) {
- /*int*/ c /*invoke: int*/ + 1;
+ /*int*/ c /*invoke: [int]->int*/ + 1;
}
}
@@ -36,8 +36,8 @@
effectivelyFinalPromotedInvalid() {
dynamic c = _method2();
- /*String*/ c /*invoke: String*/ + '';
+ /*String*/ c /*invoke: [String]->String*/ + '';
if (/*String*/ c is int) {
- /*int*/ c /*invoke: int*/ + 1;
+ /*int*/ c /*invoke: [int]->int*/ + 1;
}
}
diff --git a/tests/compiler/dart2js/static_type/data/for.dart b/tests/compiler/dart2js/static_type/data/for.dart
index d755de9..3d4bb82 100644
--- a/tests/compiler/dart2js/static_type/data/for.dart
+++ b/tests/compiler/dart2js/static_type/data/for.dart
@@ -17,7 +17,7 @@
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
for (/*Class*/ c.next;
- /*dynamic*/ c /*invoke: bool*/ != null;
+ /*dynamic*/ c /*invoke: [dynamic]->bool*/ != null;
/*dynamic*/ c.next) {
/*dynamic*/ c.next;
if (/*dynamic*/ c is Class) {
@@ -33,7 +33,7 @@
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
for (/*Class*/ c.next;
- /*Class*/ c /*invoke: bool*/ != null;
+ /*Class*/ c /*invoke: [Class]->bool*/ != null;
/*Class*/ c.next) {
/*Class*/ c.next;
}
diff --git a/tests/compiler/dart2js/static_type/data/generic_method.dart b/tests/compiler/dart2js/static_type/data/generic_method.dart
index 99a2f17..8026b3c 100644
--- a/tests/compiler/dart2js/static_type/data/generic_method.dart
+++ b/tests/compiler/dart2js/static_type/data/generic_method.dart
@@ -19,16 +19,16 @@
genericMethod1(c) {
if (/*dynamic*/ c is Class1) {
- /*Class1*/ c. /*invoke: String*/ method('').length;
+ /*Class1*/ c. /*invoke: [Class1]->String*/ method('').length;
}
}
genericMethod2(c) {
if (/*dynamic*/ c is! Class1) return;
- /*Class1*/ c. /*invoke: dynamic*/ method('').length;
+ /*Class1*/ c. /*invoke: [Class1]->dynamic*/ method('').length;
}
genericMethod3() {
dynamic c = new Class2<int>();
- /*Class2<int>*/ c. /*invoke: int*/ method();
+ /*Class2<int>*/ c. /*invoke: [Class2<int>]->int*/ method();
}
diff --git a/tests/compiler/dart2js/static_type/data/null.dart b/tests/compiler/dart2js/static_type/data/null.dart
index c0b9386..dcbe522 100644
--- a/tests/compiler/dart2js/static_type/data/null.dart
+++ b/tests/compiler/dart2js/static_type/data/null.dart
@@ -19,46 +19,46 @@
null1(dynamic c) {
/*dynamic*/ c.next;
- /*dynamic*/ c /*invoke: bool*/ != null;
+ /*dynamic*/ c /*invoke: [dynamic]->bool*/ != null;
/*dynamic*/ c.next;
}
null2(dynamic c) {
/*dynamic*/ c.next;
- /*dynamic*/ c /*invoke: bool*/ == null;
+ /*dynamic*/ c /*invoke: [dynamic]->bool*/ == null;
/*dynamic*/ c.next;
}
null3(dynamic c) {
- if (/*dynamic*/ c /*invoke: bool*/ == null) return;
+ if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) return;
/*dynamic*/ c.next;
}
null4(dynamic c) {
- if (/*dynamic*/ c /*invoke: bool*/ != null) return;
+ if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) return;
/*Null*/ c.next;
}
null5(dynamic c) {
- if (/*dynamic*/ c /*invoke: bool*/ != null) {
+ if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
/*dynamic*/ c.next;
}
}
null6(dynamic c) {
- if (/*dynamic*/ c /*invoke: bool*/ == null) {
+ if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) {
/*Null*/ c.next;
}
}
null7(dynamic c) {
- while (/*dynamic*/ c /*invoke: bool*/ != null) {
+ while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
/*dynamic*/ c.next;
}
}
null8(dynamic c) {
- while (/*dynamic*/ c /*invoke: bool*/ == null) {
+ while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) {
/*Null*/ c.next;
}
}
diff --git a/tests/compiler/dart2js/static_type/data/null_access.dart b/tests/compiler/dart2js/static_type/data/null_access.dart
index de65e93..4c7735a 100644
--- a/tests/compiler/dart2js/static_type/data/null_access.dart
+++ b/tests/compiler/dart2js/static_type/data/null_access.dart
@@ -16,7 +16,7 @@
test1() {
const Class1 c = null;
- return /*Null*/ c. /*invoke: void*/ method1();
+ return /*Null*/ c. /*invoke: [Null]->void*/ method1();
}
class Class2<T> {
@@ -28,7 +28,7 @@
test2() {
const Class2<int> c = null;
// TODO(johnniwinther): Track the unreachable code properly.
- return /*Null*/ c. /*invoke: <bottom>*/ method2();
+ return /*Null*/ c. /*invoke: [Null]-><bottom>*/ method2();
}
class Class3<T> {
@@ -40,5 +40,5 @@
test3() {
const Class3<int> c = null;
// TODO(johnniwinther): Track the unreachable code properly.
- return /*Null*/ c. /*invoke: Class3<<bottom>>*/ method3();
+ return /*Null*/ c. /*invoke: [Null]->Class3<<bottom>>*/ method3();
}
diff --git a/tests/compiler/dart2js/static_type/data/while.dart b/tests/compiler/dart2js/static_type/data/while.dart
index e646074..b21dee0 100644
--- a/tests/compiler/dart2js/static_type/data/while.dart
+++ b/tests/compiler/dart2js/static_type/data/while.dart
@@ -16,15 +16,15 @@
whileNext(null);
whileNextGeneric(null);
new Class1<int>()
- .. /*invoke: dynamic*/ whileNext1()
- .. /*invoke: dynamic*/ whileNext2()
- .. /*invoke: dynamic*/ whileNext3();
+ .. /*invoke: [Class1<int>]->dynamic*/ whileNext1()
+ .. /*invoke: [Class1<int>]->dynamic*/ whileNext2()
+ .. /*invoke: [Class1<int>]->dynamic*/ whileNext3();
}
while1(dynamic c) {
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
- while (/*dynamic*/ c /*invoke: bool*/ != null) {
+ while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
/*dynamic*/ c.next;
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
@@ -38,7 +38,7 @@
while2(dynamic c) {
if (/*dynamic*/ c is Class) {
/*Class*/ c.next;
- while (/*Class*/ c /*invoke: bool*/ != null) {
+ while (/*Class*/ c /*invoke: [Class]->bool*/ != null) {
/*Class*/ c.next;
}
/*Class*/ c.next;
@@ -46,14 +46,15 @@
}
whileNext(Class c) {
- while (/*Class*/ c /*invoke: bool*/ != null) {
+ while (/*Class*/ c /*invoke: [Class]->bool*/ != null) {
c = /*Class*/ c.next;
}
return /*Class*/ c;
}
whileNextGeneric(GenericClass<int> c) {
- while (/*GenericClass<int>*/ c /*invoke: bool*/ != null) {
+ while (
+ /*GenericClass<int>*/ c /*invoke: [GenericClass<int>]->bool*/ != null) {
c = /*GenericClass<int>*/ c.next;
}
return /*GenericClass<int>*/ c;
@@ -77,7 +78,7 @@
whileNext2() {
bool b;
GenericClass<T> c;
- while (/*GenericClass<T>*/ c /*invoke: bool*/ != null) {
+ while (/*GenericClass<T>*/ c /*invoke: [GenericClass<T>]->bool*/ != null) {
if (/*bool*/ b) {
GenericClass<T> next = /*GenericClass<T>*/ c.next;
c = /*GenericClass<T>*/ next;
@@ -91,7 +92,7 @@
whileNext3() {
bool b;
GenericClass<T> c;
- while (/*GenericClass<T>*/ c /*invoke: bool*/ == null) {
+ while (/*GenericClass<T>*/ c /*invoke: [GenericClass<T>]->bool*/ == null) {
if (/*bool*/ b) {
GenericClass<T> next = /*Null*/ c.next;
c = /*GenericClass<T>*/ next;
diff --git a/tests/compiler/dart2js/static_type/static_type_test.dart b/tests/compiler/dart2js/static_type/static_type_test.dart
index 58ec517..369d14c 100644
--- a/tests/compiler/dart2js/static_type/static_type_test.dart
+++ b/tests/compiler/dart2js/static_type/static_type_test.dart
@@ -84,8 +84,11 @@
@override
String computeNodeValue(Id id, ir.TreeNode node) {
- if (node is ir.VariableGet || node is ir.MethodInvocation) {
+ if (node is ir.VariableGet) {
return typeToText(node.accept(staticTypeCache));
+ } else if (node is ir.MethodInvocation) {
+ return '[${typeToText(node.receiver.accept(staticTypeCache))}]->'
+ '${typeToText(node.accept(staticTypeCache))}';
}
return null;
}