[dart2js] Print powerset value in typemask toString methods.
We may find it useful later to add a more verbose stringification that
writes out the properties expressed by the powerset. For now, just
printing the int value is sufficient to debug e.g. test failures, and
it's relatively straightforward to manually convert an int to a set of
properties by looking at the definitions of the powerset domains.
Change-Id: I2397ffd83a6e86830f67c7f1ef811e33c0b7ff3c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/405567
Reviewed-by: Nate Biggs <natebiggs@google.com>
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
index 0f3f758..7711977 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/container_type_mask.dart
@@ -121,6 +121,7 @@
@override
String toString() {
- return 'Container($forwardTo, element: $elementType, length: $length)';
+ return 'Container($forwardTo, element: $elementType, length: $length, '
+ 'powerset: ${TypeMask.powersetToString(powerset)})';
}
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
index 610462b..8bf3baa 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/dictionary_type_mask.dart
@@ -143,7 +143,7 @@
@override
String toString() {
- return 'Dictionary($forwardTo, key: $keyType, '
- 'value: $valueType, map: $_typeMap)';
+ return 'Dictionary($forwardTo, key: $keyType, value: $valueType, '
+ 'map: $_typeMap, powerset: ${TypeMask.powersetToString(powerset)})';
}
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
index 269abac..27a556c 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/flat_type_mask.dart
@@ -879,6 +879,7 @@
if (isExact) 'exact=${base!.name}',
if (isSubclass) 'subclass=${base!.name}',
if (isSubtype) 'subtype=${base!.name}',
+ 'powerset=${TypeMask.powersetToString(powerset)}',
], '|');
buffer.write(']');
return buffer.toString();
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
index 250eb52..aa5004b 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/map_type_mask.dart
@@ -134,6 +134,7 @@
@override
String toString() {
- return 'Map($forwardTo, key: $keyType, value: $valueType)';
+ return 'Map($forwardTo, key: $keyType, value: $valueType, '
+ 'powerset: ${TypeMask.powersetToString(powerset)})';
}
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart
index 0591844..23566bf 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/record_type_mask.dart
@@ -445,7 +445,8 @@
@override
String toString() {
- return '[Record($shape, $types)]';
+ return '[Record($shape, $types, '
+ 'powerset: ${TypeMask.powersetToString(powerset)})]';
}
@override
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
index b72ad1c..c67084f 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/set_type_mask.dart
@@ -95,5 +95,7 @@
int get hashCode => Hashing.objectHash(elementType, super.hashCode);
@override
- String toString() => 'Set($forwardTo, element: $elementType)';
+ String toString() =>
+ 'Set($forwardTo, element: $elementType, '
+ 'powerset: ${TypeMask.powersetToString(powerset)})';
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
index f547e8c..f82c515 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/type_mask.dart
@@ -552,4 +552,6 @@
MemberHierarchyBuilder memberHierarchyBuilder,
JClosedWorld closedWorld,
);
+
+ static String powersetToString(Bitset powerset) => '$powerset';
}
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
index 96b579e..ce674a1 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/union_type_mask.dart
@@ -488,7 +488,8 @@
if (hasLateSentinel) 'sentinel',
...disjointMasks.map((TypeMask mask) => mask.toString()).toList()..sort(),
].join(", ");
- return 'Union($masksString)';
+ return 'Union($masksString, '
+ 'powerset: ${TypeMask.powersetToString(powerset)})';
}
@override
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
index 4b36866..376c89e 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/value_type_mask.dart
@@ -70,6 +70,7 @@
@override
String toString() {
- return 'Value($forwardTo, value: ${value.toDartText(null)})';
+ return 'Value($forwardTo, value: ${value.toDartText(null)}, '
+ 'powerset: ${TypeMask.powersetToString(powerset)})';
}
}
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
index 8872a2f..01da493 100644
--- a/pkg/compiler/test/dump_info/data/closures.dart
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -113,7 +113,7 @@
"children": [
"closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure"
],
- "inferredType": "[subclass=Closure]",
+ "inferredType": "[subclass=Closure|powerset=0]",
"code": "",
"type": "Type Function()"
},
@@ -132,7 +132,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -190,7 +190,7 @@
"outputUnit": "outputUnit/main",
"parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
"children": [],
- "inferredType": "[null|subclass=Closure]",
+ "inferredType": "[null|subclass=Closure|powerset=1]",
"code": "",
"type": "dynamic"
}],
@@ -229,7 +229,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=Class1]",
+ "inferredReturnType": "[exact=Class1|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes field)",
"inlinedCount": 0,
@@ -252,7 +252,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -286,11 +286,11 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=Class1]",
+ "inferredReturnType": "[exact=Class1|powerset=0]",
"parameters": [
{
"name": "funcField",
- "type": "[subclass=Closure]",
+ "type": "[subclass=Closure|powerset=0]",
"declaredType": "dynamic"
}
],
@@ -322,7 +322,7 @@
"external": false
},
"returnType": "Class1<#Afree>",
- "inferredReturnType": "[exact=Class1]",
+ "inferredReturnType": "[exact=Class1|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes field)",
"inlinedCount": 1,
@@ -359,7 +359,7 @@
"external": false
},
"returnType": "Class1<#Afree>",
- "inferredReturnType": "[exact=Class1]",
+ "inferredReturnType": "[exact=Class1|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -382,7 +382,7 @@
"external": false
},
"returnType": "Set<Class1.T>",
- "inferredReturnType": "[subclass=_LinkedHashSet]",
+ "inferredReturnType": "[subclass=_LinkedHashSet|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -413,7 +413,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
@@ -450,7 +450,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -473,7 +473,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -505,7 +505,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
@@ -542,7 +542,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -565,7 +565,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -621,7 +621,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -644,7 +644,7 @@
"external": false
},
"returnType": "Type Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -667,7 +667,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -748,7 +748,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -771,7 +771,7 @@
"external": false
},
"returnType": "Map<Class1.T,method6.S>",
- "inferredReturnType": "[exact=JsLinkedHashMap]",
+ "inferredReturnType": "[exact=JsLinkedHashMap|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -794,11 +794,11 @@
"external": false
},
"returnType": "Map<Class1.T,method6.S> Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [
{
"name": "o",
- "type": "[subclass=Closure]",
+ "type": "[subclass=Closure|powerset=0]",
"declaredType": "dynamic"
}
],
@@ -823,7 +823,7 @@
"external": false
},
"returnType": "String Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -846,7 +846,7 @@
"external": false
},
"returnType": "String",
- "inferredReturnType": "[exact=JSString]",
+ "inferredReturnType": "[exact=JSString|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes anything)",
"inlinedCount": 0,
@@ -888,7 +888,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
@@ -925,7 +925,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -948,7 +948,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1004,7 +1004,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1027,7 +1027,7 @@
"external": false
},
"returnType": "Type Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1050,7 +1050,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1131,7 +1131,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1154,7 +1154,7 @@
"external": false
},
"returnType": "Set<staticMethod4.S>",
- "inferredReturnType": "[subclass=_LinkedHashSet]",
+ "inferredReturnType": "[subclass=_LinkedHashSet|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1177,11 +1177,11 @@
"external": false
},
"returnType": "Set<staticMethod4.S> Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [
{
"name": "o",
- "type": "[subclass=Closure]",
+ "type": "[subclass=Closure|powerset=0]",
"declaredType": "dynamic"
}
],
@@ -1206,7 +1206,7 @@
"external": false
},
"returnType": "String Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1229,7 +1229,7 @@
"external": false
},
"returnType": "String",
- "inferredReturnType": "[exact=JSString]",
+ "inferredReturnType": "[exact=JSString|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes anything)",
"inlinedCount": 0,
@@ -1272,7 +1272,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
@@ -1310,7 +1310,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1333,7 +1333,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1389,7 +1389,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1412,7 +1412,7 @@
"external": false
},
"returnType": "Type Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1435,7 +1435,7 @@
"external": false
},
"returnType": "Type",
- "inferredReturnType": "[exact=_Type]",
+ "inferredReturnType": "[exact=_Type|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1516,7 +1516,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1539,7 +1539,7 @@
"external": false
},
"returnType": "Set<topLevelMethod4.S>",
- "inferredReturnType": "[subclass=_LinkedHashSet]",
+ "inferredReturnType": "[subclass=_LinkedHashSet|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1562,11 +1562,11 @@
"external": false
},
"returnType": "Set<topLevelMethod4.S> Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [
{
"name": "o",
- "type": "[subclass=Closure]",
+ "type": "[subclass=Closure|powerset=0]",
"declaredType": "dynamic"
}
],
@@ -1591,7 +1591,7 @@
"external": false
},
"returnType": "String Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1614,7 +1614,7 @@
"external": false
},
"returnType": "String",
- "inferredReturnType": "[exact=JSString]",
+ "inferredReturnType": "[exact=JSString|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes anything)",
"inlinedCount": 0,
@@ -1680,7 +1680,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1703,7 +1703,7 @@
"external": false
},
"returnType": "Null",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1726,7 +1726,7 @@
"external": false
},
"returnType": "Null",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1786,7 +1786,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1809,7 +1809,7 @@
"external": false
},
"returnType": "Null",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1832,7 +1832,7 @@
"external": false
},
"returnType": "dynamic Function()",
- "inferredReturnType": "[subclass=Closure]",
+ "inferredReturnType": "[subclass=Closure|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1905,7 +1905,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1928,7 +1928,7 @@
"external": false
},
"returnType": "int",
- "inferredReturnType": "[subclass=JSInt]",
+ "inferredReturnType": "[subclass=JSInt|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -1951,7 +1951,7 @@
"external": false
},
"returnType": "int",
- "inferredReturnType": "[exact=JSUInt31]",
+ "inferredReturnType": "[exact=JSUInt31|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -1974,7 +1974,7 @@
"external": false
},
"returnType": "int",
- "inferredReturnType": "[subclass=JSInt]",
+ "inferredReturnType": "[subclass=JSInt|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -2047,7 +2047,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -2070,7 +2070,7 @@
"external": false
},
"returnType": "int",
- "inferredReturnType": "[subclass=JSInt]",
+ "inferredReturnType": "[subclass=JSInt|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -2093,7 +2093,7 @@
"external": false
},
"returnType": "int",
- "inferredReturnType": "[exact=JSUInt31]",
+ "inferredReturnType": "[exact=JSUInt31|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -2116,7 +2116,7 @@
"external": false
},
"returnType": "int",
- "inferredReturnType": "[exact=JSUInt31]",
+ "inferredReturnType": "[exact=JSUInt31|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -2157,7 +2157,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
diff --git a/pkg/compiler/test/dump_info/data/deferred/lib.dart b/pkg/compiler/test/dump_info/data/deferred/lib.dart
index 95772c1..0343e19 100644
--- a/pkg/compiler/test/dump_info/data/deferred/lib.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/lib.dart
@@ -29,7 +29,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "Value([exact=JSString], value: \"\")",
+ "inferredReturnType": "Value([exact=JSString|powerset=0], value: \"\", powerset: 0)",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -54,11 +54,11 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null|subclass=Object]",
+ "inferredReturnType": "[null|subclass=Object|powerset=1]",
"parameters": [
{
"name": "x",
- "type": "[subclass=Closure]",
+ "type": "[subclass=Closure|powerset=0]",
"declaredType": "dynamic"
}
],
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 06c7e2b..ac37503 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -150,7 +150,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=_Future]",
+ "inferredReturnType": "[exact=_Future|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -173,11 +173,11 @@
"external": false
},
"returnType": "Null",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [
{
"name": "_#wc0#formal",
- "type": "[null|subclass=Object]",
+ "type": "[null|subclass=Object|powerset=1]",
"declaredType": "dynamic"
}
],
@@ -191,7 +191,7 @@
{"id":"function/dart:_js_helper::loadDeferredLibrary"},
{"id":"function/dart:_rti::_setArrayType"},
{"id":"function/dart:_rti::findType"},
- {"id":"function/dart:async::_Future.then","mask":"[exact=_Future]"},
+ {"id":"function/dart:async::_Future.then","mask":"[exact=_Future|powerset=0]"},
{"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"},
{"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"}]
*/
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
index 1b58548..f70af54 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
@@ -46,7 +46,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/main.dart b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
index 08a0aac..bca2dea 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
@@ -148,7 +148,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=_Future]",
+ "inferredReturnType": "[exact=_Future|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
diff --git a/pkg/compiler/test/dump_info/data/js_members.dart b/pkg/compiler/test/dump_info/data/js_members.dart
index 16795e1..15a73cc 100644
--- a/pkg/compiler/test/dump_info/data/js_members.dart
+++ b/pkg/compiler/test/dump_info/data/js_members.dart
@@ -180,11 +180,11 @@
"external": true
},
"returnType": "dynamic",
- "inferredReturnType": "[null|subclass=Object]",
+ "inferredReturnType": "[null|subclass=Object|powerset=1]",
"parameters": [
{
"name": "a",
- "type": "[exact=JSUInt31]",
+ "type": "[exact=JSUInt31|powerset=0]",
"declaredType": "dynamic"
}
],
@@ -210,11 +210,11 @@
"external": true
},
"returnType": "dynamic",
- "inferredReturnType": "[null|subclass=Object]",
+ "inferredReturnType": "[null|subclass=Object|powerset=1]",
"parameters": [
{
"name": "a",
- "type": "[null|exact=JSUInt31]",
+ "type": "[null|exact=JSUInt31|powerset=1]",
"declaredType": "dynamic"
}
],
@@ -240,16 +240,16 @@
"external": true
},
"returnType": "dynamic",
- "inferredReturnType": "[null|subclass=Object]",
+ "inferredReturnType": "[null|subclass=Object|powerset=1]",
"parameters": [
{
"name": "a",
- "type": "[exact=JSUInt31]",
+ "type": "[exact=JSUInt31|powerset=0]",
"declaredType": "dynamic"
},
{
"name": "b",
- "type": "[null|exact=JSUInt31]",
+ "type": "[null|exact=JSUInt31|powerset=1]",
"declaredType": "dynamic"
}
],
@@ -304,7 +304,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -314,11 +314,11 @@
}],
holding=[
{"id":"function/dart:_interceptors::getNativeInterceptor"},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject]"},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject]"},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singleArg","mask":"[subclass=LegacyJavaScriptObject]"},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject]"},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject]"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singleArg","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject|powerset=0]"},
{"id":"function/package:expect/expect.dart::Expect.equals"}]
*/
main() {
diff --git a/pkg/compiler/test/dump_info/data/members.dart b/pkg/compiler/test/dump_info/data/members.dart
index bd96f1f..43dc656 100644
--- a/pkg/compiler/test/dump_info/data/members.dart
+++ b/pkg/compiler/test/dump_info/data/members.dart
@@ -103,7 +103,7 @@
"outputUnit": "outputUnit/main",
"parent": "class/memory:sdk/tests/web/native/main.dart::C",
"children": [],
- "inferredType": "[exact=Error]",
+ "inferredType": "[exact=Error|powerset=0]",
"code": "",
"type": "dynamic"
}],
@@ -120,7 +120,7 @@
"outputUnit": "outputUnit/main",
"parent": "class/memory:sdk/tests/web/native/main.dart::C",
"children": [],
- "inferredType": "[subclass=JSPositiveInt]",
+ "inferredType": "[subclass=JSPositiveInt|powerset=0]",
"code": "$.C_counter = 0;\n",
"type": "int"
}]*/
@@ -134,7 +134,7 @@
"outputUnit": "outputUnit/main",
"parent": "class/memory:sdk/tests/web/native/main.dart::C",
"children": [],
- "inferredType": "[exact=JSBool]",
+ "inferredType": "[exact=JSBool|powerset=0]",
"code": "_lazy($, \"C_y\", \"$get$C_y\", () => {\n var t1 = $.C_counter + 1;\n $.C_counter = t1;\n return t1 === 4;\n });\n",
"type": "bool"
}],
@@ -162,7 +162,7 @@
"external": false
},
"returnType": "bool",
- "inferredReturnType": "[exact=JSBool]",
+ "inferredReturnType": "[exact=JSBool|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads static; writes static)",
"inlinedCount": 1,
@@ -190,11 +190,11 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=C]",
+ "inferredReturnType": "[exact=C|powerset=0]",
"parameters": [
{
"name": "message",
- "type": "[exact=Error]",
+ "type": "[exact=Error|powerset=0]",
"declaredType": "Object"
}
],
@@ -222,11 +222,11 @@
"external": false
},
"returnType": "C",
- "inferredReturnType": "[exact=C]",
+ "inferredReturnType": "[exact=C|powerset=0]",
"parameters": [
{
"name": "object",
- "type": "[exact=JSUInt31]",
+ "type": "[exact=JSUInt31|powerset=0]",
"declaredType": "dynamic"
}
],
@@ -260,7 +260,7 @@
"external": false
},
"returnType": "void",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
@@ -305,7 +305,7 @@
"outputUnit": "outputUnit/main",
"parent": "class/memory:sdk/tests/web/native/main.dart::A",
"children": [],
- "inferredType": "Value([exact=JSString], value: \"hello\")",
+ "inferredType": "Value([exact=JSString|powerset=0], value: \"hello\", powerset: 0)",
"code": "",
"type": "dynamic"
}]*/
@@ -326,7 +326,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[exact=A]",
+ "inferredReturnType": "[exact=A|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
@@ -345,7 +345,7 @@
"outputUnit": "outputUnit/main",
"parent": "library/memory:sdk/tests/web/native/main.dart::",
"children": [],
- "inferredType": "Container([exact=JSUnmodifiableArray], element: [exact=A], length: 1)",
+ "inferredType": "Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=A|powerset=0], length: 1, powerset: 0)",
"code": "",
"type": "List<A>"
}]*/
@@ -367,7 +367,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
diff --git a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
index 9df5df5..abf1786 100644
--- a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
+++ b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
@@ -131,11 +131,11 @@
"external": false
},
"returnType": "void",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [
{
"name": "t",
- "type": "[exact=JSUInt31]",
+ "type": "[exact=JSUInt31|powerset=0]",
"declaredType": "int"
}
],
@@ -219,11 +219,11 @@
"external": false
},
"returnType": "void",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [
{
"name": "t",
- "type": "Union([exact=JSString], [exact=JSUInt31])",
+ "type": "Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)",
"declaredType": "int"
}
],
@@ -306,7 +306,7 @@
"external": false
},
"returnType": "Subclass",
- "inferredReturnType": "[exact=Subclass]",
+ "inferredReturnType": "[exact=Subclass|powerset=0]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 1,
@@ -330,7 +330,7 @@
"external": false
},
"returnType": "void",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 1,
@@ -372,7 +372,7 @@
"external": false
},
"returnType": "dynamic",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads anything; writes anything)",
"inlinedCount": 0,
@@ -395,7 +395,7 @@
"external": false
},
"returnType": "void",
- "inferredReturnType": "[null]",
+ "inferredReturnType": "[null|powerset=1]",
"parameters": [],
"sideEffects": "SideEffects(reads nothing; writes nothing)",
"inlinedCount": 0,
diff --git a/pkg/compiler/test/inference/data/abstract_method.dart b/pkg/compiler/test/inference/data/abstract_method.dart
index a07fa65..316f22a 100644
--- a/pkg/compiler/test/inference/data/abstract_method.dart
+++ b/pkg/compiler/test/inference/data/abstract_method.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
abstractEquals();
}
@@ -11,10 +11,10 @@
// Call abstract method implemented by superclass.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
operator ==(_);
}
-/*member: abstractEquals:[exact=JSBool]*/
-abstractEquals() => Class1() /*invoke: [exact=Class1]*/ == Class1();
+/*member: abstractEquals:[exact=JSBool|powerset=0]*/
+abstractEquals() => Class1() /*invoke: [exact=Class1|powerset=0]*/ == Class1();
diff --git a/pkg/compiler/test/inference/data/abstract_mixin_override.dart b/pkg/compiler/test/inference/data/abstract_mixin_override.dart
index ec19ec6..bd1a30c 100644
--- a/pkg/compiler/test/inference/data/abstract_mixin_override.dart
+++ b/pkg/compiler/test/inference/data/abstract_mixin_override.dart
@@ -2,62 +2,74 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A1.:[exact=A1]*/
+/*member: A1.:[exact=A1|powerset=0]*/
class A1 {
- /*member: A1.foo:[null]*/
- void foo(/*[exact=JSUInt31]*/ x) => print(x);
+ /*member: A1.foo:[null|powerset=1]*/
+ void foo(/*[exact=JSUInt31|powerset=0]*/ x) => print(x);
}
-/*member: B1.:[exact=B1]*/
+/*member: B1.:[exact=B1|powerset=0]*/
class B1 extends A1 with M1 {}
-/*member: C1.:[exact=C1]*/
+/*member: C1.:[exact=C1|powerset=0]*/
class C1 with M1 {
- /*member: C1.foo:[null]*/
- void foo(/*[exact=JSUInt31]*/ x) => print(x);
+ /*member: C1.foo:[null|powerset=1]*/
+ void foo(/*[exact=JSUInt31|powerset=0]*/ x) => print(x);
}
mixin M1 {
void foo(x);
- /*member: M1.bar:[null]*/
- void bar(/*[exact=JSUInt31]*/ y) {
- /*invoke: [subtype=M1]*/
+ /*member: M1.bar:[null|powerset=1]*/
+ void bar(/*[exact=JSUInt31|powerset=0]*/ y) {
+ /*invoke: [subtype=M1|powerset=0]*/
foo(y);
}
}
-/*member: A2.:[exact=A2]*/
+/*member: A2.:[exact=A2|powerset=0]*/
class A2 {
- /*member: A2.foo:[null]*/
- void foo(/*[empty]*/ x) => print(x);
+ /*member: A2.foo:[null|powerset=1]*/
+ void foo(/*[empty|powerset=0]*/ x) => print(x);
}
-/*member: B2.:[exact=B2]*/
+/*member: B2.:[exact=B2|powerset=0]*/
class B2 extends A2 with M2 {}
-/*member: C2.:[exact=C2]*/
+/*member: C2.:[exact=C2|powerset=0]*/
class C2 with M2 {
- /*member: C2.foo:[null]*/
- void foo(/*Value([exact=JSString], value: "")*/ x) => print(x);
+ /*member: C2.foo:[null|powerset=1]*/
+ void foo(/*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ x) =>
+ print(x);
}
mixin M2 {
- /*member: M2.foo:[exact=JSUInt31]*/
- void foo(/*Value([exact=JSString], value: "")*/ x) => 5;
- /*member: M2.bar:[null]*/
- void bar(/*Value([exact=JSString], value: "")*/ y) {
- /*invoke: [subtype=M2]*/
+ /*member: M2.foo:[exact=JSUInt31|powerset=0]*/
+ void foo(/*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ x) =>
+ 5;
+ /*member: M2.bar:[null|powerset=1]*/
+ void bar(/*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ y) {
+ /*invoke: [subtype=M2|powerset=0]*/
foo(y);
}
}
-/*member: getB1:Union([exact=B1], [exact=C1])*/
-getB1(bool /*Value([exact=JSBool], value: false)*/ x) => x ? B1() : C1();
-/*member: getB2:Union([exact=B2], [exact=C2])*/
-getB2(bool /*Value([exact=JSBool], value: false)*/ x) => x ? B2() : C2();
+/*member: getB1:Union([exact=B1|powerset=0], [exact=C1|powerset=0], powerset: 0)*/
+getB1(bool /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) =>
+ x ? B1() : C1();
+/*member: getB2:Union([exact=B2|powerset=0], [exact=C2|powerset=0], powerset: 0)*/
+getB2(bool /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) =>
+ x ? B2() : C2();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- getB1(false). /*invoke: Union([exact=B1], [exact=C1])*/ bar(3);
- getB2(false). /*invoke: Union([exact=B2], [exact=C2])*/ bar("");
+ getB1(
+ false,
+ ). /*invoke: Union([exact=B1|powerset=0], [exact=C1|powerset=0], powerset: 0)*/ bar(
+ 3,
+ );
+ getB2(
+ false,
+ ). /*invoke: Union([exact=B2|powerset=0], [exact=C2|powerset=0], powerset: 0)*/ bar(
+ "",
+ );
}
diff --git a/pkg/compiler/test/inference/data/and_or.dart b/pkg/compiler/test/inference/data/and_or.dart
index 42bbd67..ef13741 100644
--- a/pkg/compiler/test/inference/data/and_or.dart
+++ b/pkg/compiler/test/inference/data/and_or.dart
@@ -2,64 +2,68 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: X.:[exact=X]*/
+/*member: X.:[exact=X|powerset=0]*/
class X {}
-/*member: returnDyn1:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn1() {
var a;
- ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) ||
- ((a = 'foo') /*invoke: Value([exact=JSString], value: "foo")*/ == true);
+ ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) ||
+ ((a = 'foo') /*invoke: Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ ==
+ true);
return a;
}
-/*member: returnDyn2:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn2() {
var a;
- ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) &&
- ((a = 'foo') /*invoke: Value([exact=JSString], value: "foo")*/ == true);
+ ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) &&
+ ((a = 'foo') /*invoke: Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ ==
+ true);
return a;
}
-/*member: returnDyn3:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn3:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn3() {
var a;
a = a == 54 ? 'foo' : 31;
return a;
}
-/*member: returnDyn4:Union([exact=JSUInt31], [exact=X])*/
+/*member: returnDyn4:Union([exact=JSUInt31|powerset=0], [exact=X|powerset=0], powerset: 0)*/
returnDyn4() {
var a;
- ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) ||
- ((a = X()) /*invoke: [exact=X]*/ == true);
+ ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) ||
+ ((a = X()) /*invoke: [exact=X|powerset=0]*/ == true);
return a;
}
-/*member: returnDyn5:Union([exact=JSUInt31], [exact=X])*/
+/*member: returnDyn5:Union([exact=JSUInt31|powerset=0], [exact=X|powerset=0], powerset: 0)*/
returnDyn5() {
var a;
- ((a = 52) /*invoke: [exact=JSUInt31]*/ == true) &&
- ((a = X()) /*invoke: [exact=X]*/ == true);
+ ((a = 52) /*invoke: [exact=JSUInt31|powerset=0]*/ == true) &&
+ ((a = X()) /*invoke: [exact=X|powerset=0]*/ == true);
return a;
}
-/*member: returnDyn6:Union([exact=JSString], [exact=X])*/
+/*member: returnDyn6:Union([exact=JSString|powerset=0], [exact=X|powerset=0], powerset: 0)*/
returnDyn6() {
var a;
a = a == 54 ? 'foo' : X();
return a;
}
-/*member: returnDyn7b:Union([exact=JSString], [exact=JSUInt31])*/
-returnDyn7b(/*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+/*member: returnDyn7b:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnDyn7b(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
return x;
}
-/*member: returnDyn7:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn7:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn7() {
dynamic a = "foo";
- if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+ if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
3) {
a = 52;
}
@@ -67,15 +71,17 @@
return a;
}
-/*member: returnDyn8:Union([exact=JSString], [exact=JSUInt31])*/
-returnDyn8(/*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+/*member: returnDyn8:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnDyn8(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
return x;
}
-/*member: test8:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: test8:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
test8() {
dynamic a = "foo";
- if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+ if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
3) {
a = 52;
}
@@ -83,35 +89,37 @@
if ((false && a is! String) || returnDyn8(a)) return a;
}
-/*member: returnDyn9:Union([exact=JSString], [exact=JSUInt31])*/
-returnDyn9(/*Union([exact=JSString], [exact=JSUInt31])*/ x) {
+/*member: returnDyn9:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnDyn9(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
return x;
}
-/*member: test9:[null]*/
+/*member: test9:[null|powerset=1]*/
test9() {
dynamic a = "foo";
- if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+ if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
3) {
a = 52;
}
if (!(a is bool && a is bool)) returnDyn9(a);
}
-/*member: returnString:[exact=JSString]*/
-returnString(/*[exact=JSString]*/ x) => x;
+/*member: returnString:[exact=JSString|powerset=0]*/
+returnString(/*[exact=JSString|powerset=0]*/ x) => x;
-/*member: test10:[null]*/
+/*member: test10:[null|powerset=1]*/
test10() {
dynamic a = "foo";
- if (a. /*Value([exact=JSString], value: "foo")*/ length /*invoke: [subclass=JSInt]*/ ==
+ if (a. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ length /*invoke: [subclass=JSInt|powerset=0]*/ ==
3) {
a = 52;
}
if (!(a is num) && a is String) returnString(a);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnDyn1();
returnDyn2();
diff --git a/pkg/compiler/test/inference/data/as.dart b/pkg/compiler/test/inference/data/as.dart
index 7b90268..119de21 100644
--- a/pkg/compiler/test/inference/data/as.dart
+++ b/pkg/compiler/test/inference/data/as.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
asIntWithString();
asIntWithNegative();
@@ -15,10 +15,12 @@
// As int of int and non-int types.
////////////////////////////////////////////////////////////////////////////////
-/*member: _asIntWithString:[exact=JSUInt31]*/
-_asIntWithString(/*Union([exact=JSString], [exact=JSUInt31])*/ o) => o as int;
+/*member: _asIntWithString:[exact=JSUInt31|powerset=0]*/
+_asIntWithString(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) => o as int;
-/*member: asIntWithString:[null]*/
+/*member: asIntWithString:[null|powerset=1]*/
asIntWithString() {
_asIntWithString(0);
_asIntWithString('');
@@ -28,10 +30,10 @@
// As int of known int and an unknown int types.
////////////////////////////////////////////////////////////////////////////////
-/*member: _asIntWithNegative:[subclass=JSInt]*/
-_asIntWithNegative(/*[subclass=JSInt]*/ o) => o as int;
+/*member: _asIntWithNegative:[subclass=JSInt|powerset=0]*/
+_asIntWithNegative(/*[subclass=JSInt|powerset=0]*/ o) => o as int;
-/*member: asIntWithNegative:[null]*/
+/*member: asIntWithNegative:[null|powerset=1]*/
asIntWithNegative() {
_asIntWithNegative(0);
_asIntWithNegative(-1);
@@ -41,10 +43,10 @@
// As int of 0.
////////////////////////////////////////////////////////////////////////////////
-/*member: _asIntOfZero:[exact=JSUInt31]*/
-_asIntOfZero(/*[exact=JSUInt31]*/ o) => o as int;
+/*member: _asIntOfZero:[exact=JSUInt31|powerset=0]*/
+_asIntOfZero(/*[exact=JSUInt31|powerset=0]*/ o) => o as int;
-/*member: asIntOfZero:[null]*/
+/*member: asIntOfZero:[null|powerset=1]*/
asIntOfZero() {
_asIntOfZero(0);
}
@@ -53,10 +55,10 @@
// As int of -1.
////////////////////////////////////////////////////////////////////////////////
-/*member: _asIntOfMinusOne:[subclass=JSInt]*/
-_asIntOfMinusOne(/*[subclass=JSInt]*/ o) => o as int;
+/*member: _asIntOfMinusOne:[subclass=JSInt|powerset=0]*/
+_asIntOfMinusOne(/*[subclass=JSInt|powerset=0]*/ o) => o as int;
-/*member: asIntOfMinusOne:[null]*/
+/*member: asIntOfMinusOne:[null|powerset=1]*/
asIntOfMinusOne() {
_asIntOfMinusOne(-1);
}
@@ -65,10 +67,12 @@
// As int of string.
////////////////////////////////////////////////////////////////////////////////
-/*member: _asIntOfString:[empty]*/
-_asIntOfString(/*Value([exact=JSString], value: "")*/ o) => o as int;
+/*member: _asIntOfString:[empty|powerset=0]*/
+_asIntOfString(
+ /*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ o,
+) => o as int;
-/*member: asIntOfString:[null]*/
+/*member: asIntOfString:[null|powerset=1]*/
asIntOfString() {
_asIntOfString('');
}
diff --git a/pkg/compiler/test/inference/data/assert.dart b/pkg/compiler/test/inference/data/assert.dart
index 8f470ae..2a56488 100644
--- a/pkg/compiler/test/inference/data/assert.dart
+++ b/pkg/compiler/test/inference/data/assert.dart
@@ -6,7 +6,7 @@
/// file 'assert_ea.dart' contains similar tests for when assertions are
/// _enabled_.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleAssert();
failingAssert();
@@ -22,7 +22,7 @@
// Simple assert statement known to be valid.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleAssert:[null]*/
+/*member: simpleAssert:[null|powerset=1]*/
simpleAssert() {
assert(true);
}
@@ -31,7 +31,7 @@
// Simple assert statement known to be invalid.
////////////////////////////////////////////////////////////////////////////////
-/*member: failingAssert:[exact=JSUInt31]*/
+/*member: failingAssert:[exact=JSUInt31|powerset=0]*/
failingAssert() {
assert(false);
return 0;
@@ -41,7 +41,7 @@
// Simple assert statement with message known to be valid.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleAssertWithMessage:[null]*/
+/*member: simpleAssertWithMessage:[null|powerset=1]*/
simpleAssertWithMessage() {
assert(true, 'foo');
}
@@ -50,14 +50,16 @@
// Assert statement that promotes a local.
////////////////////////////////////////////////////////////////////////////////
-/*member: _promoteLocalAssert:Union([exact=JSString], [exact=JSUInt31])*/
-_promoteLocalAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteLocalAssert:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_promoteLocalAssert(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
var local = o;
assert(local is int);
return local;
}
-/*member: promoteLocalAssert:[null]*/
+/*member: promoteLocalAssert:[null|powerset=1]*/
promoteLocalAssert() {
_promoteLocalAssert(0);
_promoteLocalAssert('');
@@ -67,13 +69,15 @@
// Assert statement that promotes a parameter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _promoteParameterAssert:Union([exact=JSString], [exact=JSUInt31])*/
-_promoteParameterAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteParameterAssert:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_promoteParameterAssert(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
assert(o is int);
return o;
}
-/*member: promoteParameterAssert:[null]*/
+/*member: promoteParameterAssert:[null|powerset=1]*/
promoteParameterAssert() {
_promoteParameterAssert(0);
_promoteParameterAssert('');
@@ -83,7 +87,7 @@
// Assert statement with an unreachable throw.
////////////////////////////////////////////////////////////////////////////////
-/*member: unreachableThrow:[exact=JSUInt31]*/
+/*member: unreachableThrow:[exact=JSUInt31|powerset=0]*/
unreachableThrow() {
assert(true, throw "unreachable");
return 0;
@@ -93,14 +97,14 @@
// Assert with a side effect in the message.
////////////////////////////////////////////////////////////////////////////////
-/*member: _messageWithSideEffect:[null]*/
-_messageWithSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithSideEffect:[null|powerset=1]*/
+_messageWithSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
var a;
assert(b, a = 42);
return a;
}
-/*member: messageWithSideEffect:[null]*/
+/*member: messageWithSideEffect:[null|powerset=1]*/
messageWithSideEffect() {
_messageWithSideEffect(true);
_messageWithSideEffect(false);
@@ -110,8 +114,8 @@
// Assert with a caught side effect in the message.
////////////////////////////////////////////////////////////////////////////////
-/*member: _messageWithCaughtSideEffect:[null]*/
-_messageWithCaughtSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithCaughtSideEffect:[null|powerset=1]*/
+_messageWithCaughtSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
var a;
try {
assert(b, a = 42);
@@ -119,7 +123,7 @@
return a;
}
-/*member: messageWithCaughtSideEffect:[null]*/
+/*member: messageWithCaughtSideEffect:[null|powerset=1]*/
messageWithCaughtSideEffect() {
_messageWithCaughtSideEffect(true);
_messageWithCaughtSideEffect(false);
diff --git a/pkg/compiler/test/inference/data/assert_ea.dart b/pkg/compiler/test/inference/data/assert_ea.dart
index 5faff4e..673d3be 100644
--- a/pkg/compiler/test/inference/data/assert_ea.dart
+++ b/pkg/compiler/test/inference/data/assert_ea.dart
@@ -6,7 +6,7 @@
/// file 'assert.dart' contains similar tests for when assertions are
/// _disabled_.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleAssert();
failingAssert();
@@ -22,7 +22,7 @@
// Simple assert statement known to be valid.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleAssert:[null]*/
+/*member: simpleAssert:[null|powerset=1]*/
simpleAssert() {
assert(true);
}
@@ -31,7 +31,7 @@
// Simple assert statement known to be invalid.
////////////////////////////////////////////////////////////////////////////////
-/*member: failingAssert:[exact=JSUInt31]*/
+/*member: failingAssert:[exact=JSUInt31|powerset=0]*/
failingAssert() {
assert(false);
return 0;
@@ -41,7 +41,7 @@
// Simple assert statement with message known to be valid.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleAssertWithMessage:[null]*/
+/*member: simpleAssertWithMessage:[null|powerset=1]*/
simpleAssertWithMessage() {
assert(true, 'foo');
}
@@ -50,14 +50,16 @@
// Assert statement that promotes a local.
////////////////////////////////////////////////////////////////////////////////
-/*member: _promoteLocalAssert:[exact=JSUInt31]*/
-_promoteLocalAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteLocalAssert:[exact=JSUInt31|powerset=0]*/
+_promoteLocalAssert(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
var local = o;
assert(local is int);
return local;
}
-/*member: promoteLocalAssert:[null]*/
+/*member: promoteLocalAssert:[null|powerset=1]*/
promoteLocalAssert() {
_promoteLocalAssert(0);
_promoteLocalAssert('');
@@ -67,13 +69,15 @@
// Assert statement that promotes a parameter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _promoteParameterAssert:[exact=JSUInt31]*/
-_promoteParameterAssert(/*Union([exact=JSString], [exact=JSUInt31])*/ o) {
+/*member: _promoteParameterAssert:[exact=JSUInt31|powerset=0]*/
+_promoteParameterAssert(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
assert(o is int);
return o;
}
-/*member: promoteParameterAssert:[null]*/
+/*member: promoteParameterAssert:[null|powerset=1]*/
promoteParameterAssert() {
_promoteParameterAssert(0);
_promoteParameterAssert('');
@@ -83,7 +87,7 @@
// Assert statement with an unreachable throw.
////////////////////////////////////////////////////////////////////////////////
-/*member: unreachableThrow:[exact=JSUInt31]*/
+/*member: unreachableThrow:[exact=JSUInt31|powerset=0]*/
unreachableThrow() {
assert(true, throw "unreachable");
return 0;
@@ -93,14 +97,14 @@
// Assert with a side effect in the message.
////////////////////////////////////////////////////////////////////////////////
-/*member: _messageWithSideEffect:[null]*/
-_messageWithSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithSideEffect:[null|powerset=1]*/
+_messageWithSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
var a;
assert(b, a = 42);
return a;
}
-/*member: messageWithSideEffect:[null]*/
+/*member: messageWithSideEffect:[null|powerset=1]*/
messageWithSideEffect() {
_messageWithSideEffect(true);
_messageWithSideEffect(false);
@@ -110,8 +114,8 @@
// Assert with a caught side effect in the message.
////////////////////////////////////////////////////////////////////////////////
-/*member: _messageWithCaughtSideEffect:[null|exact=JSUInt31]*/
-_messageWithCaughtSideEffect(/*[exact=JSBool]*/ b) {
+/*member: _messageWithCaughtSideEffect:[null|exact=JSUInt31|powerset=1]*/
+_messageWithCaughtSideEffect(/*[exact=JSBool|powerset=0]*/ b) {
var a;
try {
assert(b, a = 42);
@@ -119,7 +123,7 @@
return a;
}
-/*member: messageWithCaughtSideEffect:[null]*/
+/*member: messageWithCaughtSideEffect:[null|powerset=1]*/
messageWithCaughtSideEffect() {
_messageWithCaughtSideEffect(true);
_messageWithCaughtSideEffect(false);
diff --git a/pkg/compiler/test/inference/data/assert_initializer.dart b/pkg/compiler/test/inference/data/assert_initializer.dart
index 1561747..5adf56b 100644
--- a/pkg/compiler/test/inference/data/assert_initializer.dart
+++ b/pkg/compiler/test/inference/data/assert_initializer.dart
@@ -3,21 +3,23 @@
// BSD-style license that can be found in the LICENSE file.
class X {
- /*member: X.a:Union([exact=JSExtendableArray], [exact=JSString])*/
+ /*member: X.a:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
final dynamic a;
- /*member: X.:[exact=X]*/
- X(Object /*Union([exact=JSExtendableArray], [exact=JSString])*/ value)
- : assert(value is String),
+ /*member: X.:[exact=X|powerset=0]*/
+ X(
+ Object /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
+ value,
+ ) : assert(value is String),
a = value;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
X('a')
- . /*[exact=X]*/ a
- . /*Union([exact=JSExtendableArray], [exact=JSString])*/ length;
+ . /*[exact=X|powerset=0]*/ a
+ . /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/ length;
X([1])
- . /*[exact=X]*/ a
- . /*Union([exact=JSExtendableArray], [exact=JSString])*/ length;
+ . /*[exact=X|powerset=0]*/ a
+ . /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/ length;
}
diff --git a/pkg/compiler/test/inference/data/assert_initializer_ea.dart b/pkg/compiler/test/inference/data/assert_initializer_ea.dart
index ccf9261..a2432d1 100644
--- a/pkg/compiler/test/inference/data/assert_initializer_ea.dart
+++ b/pkg/compiler/test/inference/data/assert_initializer_ea.dart
@@ -3,17 +3,19 @@
// BSD-style license that can be found in the LICENSE file.
class X {
- /*member: X.a:[exact=JSString]*/
+ /*member: X.a:[exact=JSString|powerset=0]*/
final dynamic a;
- /*member: X.:[exact=X]*/
- X(Object /*Union([exact=JSExtendableArray], [exact=JSString])*/ value)
- : assert(value is String),
+ /*member: X.:[exact=X|powerset=0]*/
+ X(
+ Object /*Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
+ value,
+ ) : assert(value is String),
a = value;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- X('a'). /*[exact=X]*/ a. /*[exact=JSString]*/ length;
- X([1]). /*[exact=X]*/ a. /*[exact=JSString]*/ length;
+ X('a'). /*[exact=X|powerset=0]*/ a. /*[exact=JSString|powerset=0]*/ length;
+ X([1]). /*[exact=X|powerset=0]*/ a. /*[exact=JSString|powerset=0]*/ length;
}
diff --git a/pkg/compiler/test/inference/data/assert_message_throw.dart b/pkg/compiler/test/inference/data/assert_message_throw.dart
index 1115952..4fc92dd 100644
--- a/pkg/compiler/test/inference/data/assert_message_throw.dart
+++ b/pkg/compiler/test/inference/data/assert_message_throw.dart
@@ -6,8 +6,8 @@
/// file 'assert_message_throw_ea.dart' contains similar tests for when
/// assertions are _enabled_.
-/*member: main:[null]*/
-main(/*[null|subclass=Object]*/ args) {
+/*member: main:[null|powerset=1]*/
+main(/*[null|subclass=Object|powerset=1]*/ args) {
test0();
test1(args == null);
test2(args == null);
@@ -15,7 +15,7 @@
}
// Check that `throw` in the message is handled conditionally.
-/*member: test0:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: test0:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
test0() {
assert(true, throw "unreachable");
var list = [];
@@ -24,8 +24,8 @@
// Check that side-effects of the assert message is not included after the
// assert.
-/*member: test1:[null]*/
-test1(/*[exact=JSBool]*/ b) {
+/*member: test1:[null|powerset=1]*/
+test1(/*[exact=JSBool|powerset=0]*/ b) {
var a;
assert(b, a = 42);
return a;
@@ -33,8 +33,8 @@
// Check that side-effects of the assert message is included after the assert
// through the thrown exception.
-/*member: test2:[null]*/
-test2(/*[exact=JSBool]*/ b) {
+/*member: test2:[null|powerset=1]*/
+test2(/*[exact=JSBool|powerset=0]*/ b) {
var a;
try {
assert(b, a = 42);
@@ -43,8 +43,8 @@
}
// Check that type tests are preserved after the assert.
-/*member: test3:[null|subclass=Object]*/
-test3(/*[null|subclass=Object]*/ a) {
+/*member: test3:[null|subclass=Object|powerset=1]*/
+test3(/*[null|subclass=Object|powerset=1]*/ a) {
assert(a is int);
return a;
}
diff --git a/pkg/compiler/test/inference/data/assert_message_throw_ea.dart b/pkg/compiler/test/inference/data/assert_message_throw_ea.dart
index 72e4618..3001368 100644
--- a/pkg/compiler/test/inference/data/assert_message_throw_ea.dart
+++ b/pkg/compiler/test/inference/data/assert_message_throw_ea.dart
@@ -6,8 +6,8 @@
/// file 'assert_message_throw.dart' contains similar tests for when assertions
/// are _disabled_.
-/*member: main:[null]*/
-main(/*[null|subclass=Object]*/ args) {
+/*member: main:[null|powerset=1]*/
+main(/*[null|subclass=Object|powerset=1]*/ args) {
test0();
test1(args == null);
test2(args == null);
@@ -15,7 +15,7 @@
}
// Check that `throw` in the message is handled conditionally.
-/*member: test0:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: test0:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
test0() {
assert(true, throw "unreachable");
var list = [];
@@ -24,8 +24,8 @@
// Check that side-effects of the assert message is not included after the
// assert.
-/*member: test1:[null]*/
-test1(/*[exact=JSBool]*/ b) {
+/*member: test1:[null|powerset=1]*/
+test1(/*[exact=JSBool|powerset=0]*/ b) {
var a;
assert(b, a = 42);
return a;
@@ -33,8 +33,8 @@
// Check that side-effects of the assert message is included after the assert
// through the thrown exception.
-/*member: test2:[null|exact=JSUInt31]*/
-test2(/*[exact=JSBool]*/ b) {
+/*member: test2:[null|exact=JSUInt31|powerset=1]*/
+test2(/*[exact=JSBool|powerset=0]*/ b) {
var a;
try {
assert(b, a = 42);
@@ -43,8 +43,8 @@
}
// Check that type tests are preserved after the assert.
-/*member: test3:[subclass=JSInt]*/
-test3(/*[null|subclass=Object]*/ a) {
+/*member: test3:[subclass=JSInt|powerset=0]*/
+test3(/*[null|subclass=Object|powerset=1]*/ a) {
assert(a is int);
return a;
}
diff --git a/pkg/compiler/test/inference/data/assign_op.dart b/pkg/compiler/test/inference/data/assign_op.dart
index a0a20e5..610840c0 100644
--- a/pkg/compiler/test/inference/data/assign_op.dart
+++ b/pkg/compiler/test/inference/data/assign_op.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
assignPlus();
assignAnd();
@@ -16,78 +16,78 @@
////////////////////////////////////////////////////////////////////////////////
-/*member: assignPlus:[subclass=JSUInt32]*/
+/*member: assignPlus:[subclass=JSUInt32|powerset=0]*/
assignPlus() {
var i = 87;
- return i /*invoke: [exact=JSUInt31]*/ += 42;
+ return i /*invoke: [exact=JSUInt31|powerset=0]*/ += 42;
}
-/*member: assignAnd:[exact=JSUInt31]*/
+/*member: assignAnd:[exact=JSUInt31|powerset=0]*/
assignAnd() {
var i = 87;
- return i /*invoke: [exact=JSUInt31]*/ &= 42;
+ return i /*invoke: [exact=JSUInt31|powerset=0]*/ &= 42;
}
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:[subclass=JSPositiveInt]*/
+ /*member: Class1.field:[subclass=JSPositiveInt|powerset=0]*/
var field = 87;
}
-/*member: instanceAssignPlus:[subclass=JSPositiveInt]*/
+/*member: instanceAssignPlus:[subclass=JSPositiveInt|powerset=0]*/
instanceAssignPlus() {
var c = Class1();
- return c. /*[exact=Class1]*/ /*update: [exact=Class1]*/ field /*invoke: [subclass=JSPositiveInt]*/ +=
+ return c. /*[exact=Class1|powerset=0]*/ /*update: [exact=Class1|powerset=0]*/ field /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
42;
}
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:[exact=JSUInt31]*/
+ /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
var field = 87;
}
-/*member: instanceAssignAnd:[exact=JSUInt31]*/
+/*member: instanceAssignAnd:[exact=JSUInt31|powerset=0]*/
instanceAssignAnd() {
var c = Class2();
- return c. /*[exact=Class2]*/ /*update: [exact=Class2]*/ field /*invoke: [exact=JSUInt31]*/ &=
+ return c. /*[exact=Class2|powerset=0]*/ /*update: [exact=Class2|powerset=0]*/ field /*invoke: [exact=JSUInt31|powerset=0]*/ &=
42;
}
-/*member: assignIndexPlus:[subclass=JSPositiveInt]*/
+/*member: assignIndexPlus:[subclass=JSPositiveInt|powerset=0]*/
assignIndexPlus() {
var i = [87];
return i
- /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
- /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
- [0] /*invoke: [subclass=JSPositiveInt]*/ +=
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+ [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
42;
}
-/*member: assignIndexAnd:[exact=JSUInt31]*/
+/*member: assignIndexAnd:[exact=JSUInt31|powerset=0]*/
assignIndexAnd() {
var i = [87];
return i
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
- /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
- [0] /*invoke: [exact=JSUInt31]*/ &=
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
+ [0] /*invoke: [exact=JSUInt31|powerset=0]*/ &=
42;
}
-/*member: assignIndexInc:[subclass=JSPositiveInt]*/
+/*member: assignIndexInc:[subclass=JSPositiveInt|powerset=0]*/
assignIndexInc() {
var i = [87];
return i
- /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
- /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
- [0] /*invoke: [subclass=JSPositiveInt]*/ ++;
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+ [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
}
-/*member: assignIndexDec:[subclass=JSInt]*/
+/*member: assignIndexDec:[subclass=JSInt|powerset=0]*/
assignIndexDec() {
var i = [87];
- return /*invoke: [subclass=JSInt]*/ --i
- /*Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
- /*update: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
+ return /*invoke: [subclass=JSInt|powerset=0]*/ --i
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
[0];
}
diff --git a/pkg/compiler/test/inference/data/async_marker.dart b/pkg/compiler/test/inference/data/async_marker.dart
index 97a9464..8c73e76 100644
--- a/pkg/compiler/test/inference/data/async_marker.dart
+++ b/pkg/compiler/test/inference/data/async_marker.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
asyncMethod();
asyncMethodWithReturn();
@@ -10,16 +10,16 @@
syncStarMethod();
}
-/*member: asyncMethod:[exact=_Future]*/
+/*member: asyncMethod:[exact=_Future|powerset=0]*/
asyncMethod() async {}
-/*member: asyncMethodWithReturn:Union([exact=JSUInt31], [exact=_Future])*/
+/*member: asyncMethodWithReturn:Union([exact=JSUInt31|powerset=0], [exact=_Future|powerset=0], powerset: 0)*/
asyncMethodWithReturn() async {
return 0;
}
-/*member: asyncStarMethod:[exact=_ControllerStream]*/
+/*member: asyncStarMethod:[exact=_ControllerStream|powerset=0]*/
asyncStarMethod() async* {}
-/*member: syncStarMethod:[exact=_SyncStarIterable]*/
+/*member: syncStarMethod:[exact=_SyncStarIterable|powerset=0]*/
syncStarMethod() sync* {}
diff --git a/pkg/compiler/test/inference/data/await.dart b/pkg/compiler/test/inference/data/await.dart
index 96fcbc7..3966fd8 100644
--- a/pkg/compiler/test/inference/data/await.dart
+++ b/pkg/compiler/test/inference/data/await.dart
@@ -4,7 +4,7 @@
import 'dart:async';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
awaitOfFuture();
awaitOfFutureWithLocal();
@@ -17,19 +17,19 @@
// Await of Future.value.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method1a:[null]*/
-_method1a(/*[subclass=JSInt]*/ o) {}
+/*member: _method1a:[null|powerset=1]*/
+_method1a(/*[subclass=JSInt|powerset=0]*/ o) {}
-/*member: awaitOfFuture:[exact=_Future]*/
+/*member: awaitOfFuture:[exact=_Future|powerset=0]*/
awaitOfFuture() async {
var future = Future.value(0);
_method1a(await future);
}
-/*member: _method1b:[null]*/
-_method1b(/*[subclass=JSInt]*/ o) {}
+/*member: _method1b:[null|powerset=1]*/
+_method1b(/*[subclass=JSInt|powerset=0]*/ o) {}
-/*member: awaitOfFutureWithLocal:[exact=_Future]*/
+/*member: awaitOfFutureWithLocal:[exact=_Future|powerset=0]*/
awaitOfFutureWithLocal() async {
var future = Future.value(0);
var local = await future;
@@ -40,18 +40,18 @@
// Await of int.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method2a:[null]*/
-_method2a(/*[subclass=JSInt]*/ o) {}
+/*member: _method2a:[null|powerset=1]*/
+_method2a(/*[subclass=JSInt|powerset=0]*/ o) {}
-/*member: awaitOfInt:[exact=_Future]*/
+/*member: awaitOfInt:[exact=_Future|powerset=0]*/
awaitOfInt() async {
_method2a(await 0);
}
-/*member: _method2b:[null]*/
-_method2b(/*[subclass=JSInt]*/ o) {}
+/*member: _method2b:[null|powerset=1]*/
+_method2b(/*[subclass=JSInt|powerset=0]*/ o) {}
-/*member: awaitOfIntWithLocal:[exact=_Future]*/
+/*member: awaitOfIntWithLocal:[exact=_Future|powerset=0]*/
awaitOfIntWithLocal() async {
var local = await 0;
_method2b(local);
@@ -61,22 +61,22 @@
// Await for of Stream.fromIterable.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method3:[null]*/
+/*member: _method3:[null|powerset=1]*/
_method3(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
o,
) {}
-/*member: _method4:[null]*/
-_method4(/*[subclass=JSInt]*/ o) {}
+/*member: _method4:[null|powerset=1]*/
+_method4(/*[subclass=JSInt|powerset=0]*/ o) {}
-/*member: awaitForOfStream:[exact=_Future]*/
+/*member: awaitForOfStream:[exact=_Future|powerset=0]*/
awaitForOfStream() async {
var list = [0];
_method3(list);
var stream = Stream.fromIterable(list);
- /*current: [exact=_StreamIterator]*/
- /*moveNext: [exact=_StreamIterator]*/
+ /*current: [exact=_StreamIterator|powerset=0]*/
+ /*moveNext: [exact=_StreamIterator|powerset=0]*/
await for (var local in stream) {
_method4(local);
}
diff --git a/pkg/compiler/test/inference/data/break_continue.dart b/pkg/compiler/test/inference/data/break_continue.dart
index e03da61..91bfc64 100644
--- a/pkg/compiler/test/inference/data/break_continue.dart
+++ b/pkg/compiler/test/inference/data/break_continue.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
breakInWhile();
noBreakInWhile();
@@ -18,8 +18,8 @@
// A break statement in a while loop.
////////////////////////////////////////////////////////////////////////////////
-/*member: _breakInWhile:Union([exact=JSString], [exact=JSUInt31])*/
-_breakInWhile(/*[exact=JSBool]*/ b) {
+/*member: _breakInWhile:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_breakInWhile(/*[exact=JSBool|powerset=0]*/ b) {
dynamic local = 42;
while (b) {
if (b) {
@@ -31,7 +31,7 @@
return local;
}
-/*member: breakInWhile:[null]*/
+/*member: breakInWhile:[null|powerset=1]*/
breakInWhile() {
_breakInWhile(true);
_breakInWhile(false);
@@ -41,8 +41,8 @@
// The while loop above _without_ the break statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _noBreakInWhile:[exact=JSUInt31]*/
-_noBreakInWhile(/*[exact=JSBool]*/ b) {
+/*member: _noBreakInWhile:[exact=JSUInt31|powerset=0]*/
+_noBreakInWhile(/*[exact=JSBool|powerset=0]*/ b) {
dynamic local = 42;
while (b) {
if (b) {
@@ -53,7 +53,7 @@
return local;
}
-/*member: noBreakInWhile:[null]*/
+/*member: noBreakInWhile:[null|powerset=1]*/
noBreakInWhile() {
_noBreakInWhile(true);
_noBreakInWhile(false);
@@ -63,11 +63,12 @@
// A continue statement in a while loop.
////////////////////////////////////////////////////////////////////////////////
-/*member: _continueInWhile:Union([exact=JSString], [exact=JSUInt31])*/
-_continueInWhile(/*[exact=JSBool]*/ b) {
+/*member: _continueInWhile:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_continueInWhile(/*[exact=JSBool|powerset=0]*/ b) {
dynamic local = 42;
while (b) {
- local /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + null;
+ local /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +
+ null;
if (b) {
local = '';
continue;
@@ -77,7 +78,7 @@
return local;
}
-/*member: continueInWhile:[null]*/
+/*member: continueInWhile:[null|powerset=1]*/
continueInWhile() {
_continueInWhile(true);
_continueInWhile(false);
@@ -87,11 +88,11 @@
// The while loop above _without_ the continue statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _noContinueInWhile:[exact=JSUInt31]*/
-_noContinueInWhile(/*[exact=JSBool]*/ b) {
+/*member: _noContinueInWhile:[exact=JSUInt31|powerset=0]*/
+_noContinueInWhile(/*[exact=JSBool|powerset=0]*/ b) {
dynamic local = 42;
while (b) {
- local /*invoke: [exact=JSUInt31]*/ + null;
+ local /*invoke: [exact=JSUInt31|powerset=0]*/ + null;
if (b) {
local = '';
}
@@ -100,7 +101,7 @@
return local;
}
-/*member: noContinueInWhile:[null]*/
+/*member: noContinueInWhile:[null|powerset=1]*/
noContinueInWhile() {
_noContinueInWhile(true);
_noContinueInWhile(false);
@@ -110,8 +111,8 @@
// A conditional break statement in a labeled statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _breakInIf:Union([exact=JSString], [exact=JSUInt31])*/
-_breakInIf(/*[exact=JSBool]*/ b) {
+/*member: _breakInIf:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_breakInIf(/*[exact=JSBool|powerset=0]*/ b) {
dynamic local = 42;
label:
{
@@ -124,7 +125,7 @@
return local;
}
-/*member: breakInIf:[null]*/
+/*member: breakInIf:[null|powerset=1]*/
breakInIf() {
_breakInIf(true);
_breakInIf(false);
@@ -134,8 +135,8 @@
// The "labeled statement" above _without_ the break statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _noBreakInIf:[exact=JSUInt31]*/
-_noBreakInIf(/*[exact=JSBool]*/ b) {
+/*member: _noBreakInIf:[exact=JSUInt31|powerset=0]*/
+_noBreakInIf(/*[exact=JSBool|powerset=0]*/ b) {
dynamic local = 42;
{
local = '';
@@ -145,7 +146,7 @@
return local;
}
-/*member: noBreakInIf:[null]*/
+/*member: noBreakInIf:[null|powerset=1]*/
noBreakInIf() {
_noBreakInIf(true);
_noBreakInIf(false);
@@ -155,7 +156,7 @@
// An unconditional break statement in a labeled statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: breakInBlock:Value([exact=JSString], value: "")*/
+/*member: breakInBlock:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
breakInBlock() {
dynamic local = 42;
label:
@@ -171,7 +172,7 @@
// The "labeled statement" above _without_ the break statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: noBreakInBlock:Value([exact=JSBool], value: false)*/
+/*member: noBreakInBlock:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
noBreakInBlock() {
dynamic local = 42;
label:
diff --git a/pkg/compiler/test/inference/data/call_in_loop.dart b/pkg/compiler/test/inference/data/call_in_loop.dart
index b07d876..0e521c5 100644
--- a/pkg/compiler/test/inference/data/call_in_loop.dart
+++ b/pkg/compiler/test/inference/data/call_in_loop.dart
@@ -4,23 +4,23 @@
/// Regression test for [ClosureCallSiteTypeInformation] in loops.
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class<T> {
- /*member: Class.method:[null]*/
+ /*member: Class.method:[null|powerset=1]*/
method() {
- /*iterator: Container([exact=JSExtendableArray], element: [empty], length: 0)*/
- /*current: [exact=ArrayIterator]*/
- /*moveNext: [exact=ArrayIterator]*/
+ /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
+ /*current: [exact=ArrayIterator|powerset=0]*/
+ /*moveNext: [exact=ArrayIterator|powerset=0]*/
for (var a in []) {
- (T as dynamic) /*invoke: [exact=_Type]*/ (a);
- (Object as dynamic) /*invoke: [exact=_Type]*/ ();
- (this as dynamic) /*invoke: [exact=Class]*/ ();
- (1 as dynamic) /*invoke: [exact=JSUInt31]*/ ();
+ (T as dynamic) /*invoke: [exact=_Type|powerset=0]*/ (a);
+ (Object as dynamic) /*invoke: [exact=_Type|powerset=0]*/ ();
+ (this as dynamic) /*invoke: [exact=Class|powerset=0]*/ ();
+ (1 as dynamic) /*invoke: [exact=JSUInt31|powerset=0]*/ ();
}
}
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- Class(). /*invoke: [exact=Class]*/ method();
+ Class(). /*invoke: [exact=Class|powerset=0]*/ method();
}
diff --git a/pkg/compiler/test/inference/data/call_method_function_typed_value.dart b/pkg/compiler/test/inference/data/call_method_function_typed_value.dart
index ec90c7e..0063a63 100644
--- a/pkg/compiler/test/inference/data/call_method_function_typed_value.dart
+++ b/pkg/compiler/test/inference/data/call_method_function_typed_value.dart
@@ -6,26 +6,28 @@
import "package:expect/expect.dart";
-/*member: f:[subclass=JSInt]*/
+/*member: f:[subclass=JSInt|powerset=0]*/
int f(
int
- /*spec.[null|subclass=Object]*/
- /*prod.[subclass=JSInt]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[subclass=JSInt|powerset=0]*/
i,
-) => 2 /*invoke: [exact=JSUInt31]*/ * i;
+) => 2 /*invoke: [exact=JSUInt31|powerset=0]*/ * i;
typedef int IntToInt(int x);
-/*member: test:[null]*/
-test(/*[null|subclass=Object]*/ a, /*[subclass=Closure]*/ b) =>
- Expect.identical(a, b);
+/*member: test:[null|powerset=1]*/
+test(
+ /*[null|subclass=Object|powerset=1]*/ a,
+ /*[subclass=Closure|powerset=0]*/ b,
+) => Expect.identical(a, b);
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
// It is possible to use `.call` on a function-typed value (even though it is
// redundant). Similarly, it is possible to tear off `.call` on a
// function-typed value (but it is a no-op).
IntToInt f2 = f;
- test(f2. /*[subclass=Closure]*/ call, f);
+ test(f2. /*[subclass=Closure|powerset=0]*/ call, f);
}
diff --git a/pkg/compiler/test/inference/data/call_site.dart b/pkg/compiler/test/inference/data/call_site.dart
index 5337b22..1dfc929 100644
--- a/pkg/compiler/test/inference/data/call_site.dart
+++ b/pkg/compiler/test/inference/data/call_site.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
@@ -25,291 +25,301 @@
test19();
}
-/*member: A1.:[exact=A1]*/
+/*member: A1.:[exact=A1|powerset=0]*/
class A1 {
- /*member: A1.x1:Value([exact=JSString], value: "s")*/
- x1(/*Value([exact=JSString], value: "s")*/ p) => p;
+ /*member: A1.x1:Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/
+ x1(/*Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/ p) => p;
}
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
test1() {
- A1(). /*invoke: [exact=A1]*/ x1("s");
+ A1(). /*invoke: [exact=A1|powerset=0]*/ x1("s");
}
-/*member: A2.:[exact=A2]*/
+/*member: A2.:[exact=A2|powerset=0]*/
class A2 {
- /*member: A2.x2:[exact=JSUInt31]*/
- x2(/*[exact=JSUInt31]*/ p) => p;
+ /*member: A2.x2:[exact=JSUInt31|powerset=0]*/
+ x2(/*[exact=JSUInt31|powerset=0]*/ p) => p;
}
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
test2() {
- A2(). /*invoke: [exact=A2]*/ x2(1);
+ A2(). /*invoke: [exact=A2|powerset=0]*/ x2(1);
}
-/*member: A3.:[exact=A3]*/
+/*member: A3.:[exact=A3|powerset=0]*/
class A3 {
- /*member: A3.x3:[empty]*/
- x3(/*[subclass=JSInt]*/ p) => /*invoke: [exact=A3]*/
- x3(p /*invoke: [subclass=JSInt]*/ - 1);
+ /*member: A3.x3:[empty|powerset=0]*/
+ x3(/*[subclass=JSInt|powerset=0]*/ p) => /*invoke: [exact=A3|powerset=0]*/
+ x3(p /*invoke: [subclass=JSInt|powerset=0]*/ - 1);
}
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
test3() {
- A3(). /*invoke: [exact=A3]*/ x3(1);
+ A3(). /*invoke: [exact=A3|powerset=0]*/ x3(1);
}
-/*member: A4.:[exact=A4]*/
+/*member: A4.:[exact=A4|powerset=0]*/
class A4 {
- /*member: A4.x4:[empty]*/
- x4(/*[subclass=JSNumber]*/ p) => /*invoke: [exact=A4]*/
- x4(p /*invoke: [subclass=JSNumber]*/ - 1);
+ /*member: A4.x4:[empty|powerset=0]*/
+ x4(/*[subclass=JSNumber|powerset=0]*/ p) => /*invoke: [exact=A4|powerset=0]*/
+ x4(p /*invoke: [subclass=JSNumber|powerset=0]*/ - 1);
}
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
test4() {
- A4(). /*invoke: [exact=A4]*/ x4(1.5);
+ A4(). /*invoke: [exact=A4|powerset=0]*/ x4(1.5);
}
-/*member: A5.:[exact=A5]*/
+/*member: A5.:[exact=A5|powerset=0]*/
class A5 {
- /*member: A5.x5:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
- x5(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ p) => p;
+ /*member: A5.x5:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ x5(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+ ) => p;
}
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
test5() {
- A5(). /*invoke: [exact=A5]*/ x5(1);
- A5(). /*invoke: [exact=A5]*/ x5(1.5);
+ A5(). /*invoke: [exact=A5|powerset=0]*/ x5(1);
+ A5(). /*invoke: [exact=A5|powerset=0]*/ x5(1.5);
}
-/*member: A6.:[exact=A6]*/
+/*member: A6.:[exact=A6|powerset=0]*/
class A6 {
- /*member: A6.x6:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
- x6(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ p) => p;
+ /*member: A6.x6:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ x6(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+ ) => p;
}
-/*member: test6:[null]*/
+/*member: test6:[null|powerset=1]*/
test6() {
- A6(). /*invoke: [exact=A6]*/ x6(1.5);
- A6(). /*invoke: [exact=A6]*/ x6(1);
+ A6(). /*invoke: [exact=A6|powerset=0]*/ x6(1.5);
+ A6(). /*invoke: [exact=A6|powerset=0]*/ x6(1);
}
-/*member: A7.:[exact=A7]*/
+/*member: A7.:[exact=A7|powerset=0]*/
class A7 {
- /*member: A7.x7:[empty]*/
- x7(/*Union([exact=JSString], [exact=JSUInt31])*/ p) => /*invoke: [exact=A7]*/
- x7("x");
+ /*member: A7.x7:[empty|powerset=0]*/
+ x7(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+ ) => /*invoke: [exact=A7|powerset=0]*/ x7("x");
}
-/*member: test7:[null]*/
+/*member: test7:[null|powerset=1]*/
test7() {
- A7(). /*invoke: [exact=A7]*/ x7(1);
+ A7(). /*invoke: [exact=A7|powerset=0]*/ x7(1);
}
-/*member: A8.:[exact=A8]*/
+/*member: A8.:[exact=A8|powerset=0]*/
class A8 {
- /*member: A8.x8:[empty]*/
- x8(/*Union([exact=JSString], [exact=JsLinkedHashMap])*/ p) =>
- /*invoke: [exact=A8]*/ x8("x");
-}
-
-/*member: test8:[null]*/
-test8() {
- A8(). /*invoke: [exact=A8]*/ x8({});
-}
-
-/*member: A9.:[exact=A9]*/
-class A9 {
- /*member: A9.x9:[empty]*/
- x9(
- /*[exact=JSUInt31]*/ p1,
- /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
- /*Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/ p3,
+ /*member: A8.x8:[empty|powerset=0]*/
+ x8(
+ /*Union([exact=JSString|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/ p,
) =>
- /*invoke: [exact=A9]*/ x9(p1, "x", {});
+ /*invoke: [exact=A8|powerset=0]*/ x8("x");
}
-/*member: test9:[null]*/
+/*member: test8:[null|powerset=1]*/
+test8() {
+ A8(). /*invoke: [exact=A8|powerset=0]*/ x8({});
+}
+
+/*member: A9.:[exact=A9|powerset=0]*/
+class A9 {
+ /*member: A9.x9:[empty|powerset=0]*/
+ x9(
+ /*[exact=JSUInt31|powerset=0]*/ p1,
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p2,
+ /*Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/ p3,
+ ) =>
+ /*invoke: [exact=A9|powerset=0]*/ x9(p1, "x", {});
+}
+
+/*member: test9:[null|powerset=1]*/
test9() {
- A9(). /*invoke: [exact=A9]*/ x9(1, 2, 3);
+ A9(). /*invoke: [exact=A9|powerset=0]*/ x9(1, 2, 3);
}
-/*member: A10.:[exact=A10]*/
+/*member: A10.:[exact=A10|powerset=0]*/
class A10 {
- /*member: A10.x10:[empty]*/
+ /*member: A10.x10:[empty|powerset=0]*/
x10(
- /*[exact=JSUInt31]*/ p1,
- /*[exact=JSUInt31]*/ p2,
- ) => /*invoke: [exact=A10]*/ x10(p1, p2);
+ /*[exact=JSUInt31|powerset=0]*/ p1,
+ /*[exact=JSUInt31|powerset=0]*/ p2,
+ ) => /*invoke: [exact=A10|powerset=0]*/ x10(p1, p2);
}
-/*member: test10:[null]*/
+/*member: test10:[null|powerset=1]*/
test10() {
- A10(). /*invoke: [exact=A10]*/ x10(1, 2);
+ A10(). /*invoke: [exact=A10|powerset=0]*/ x10(1, 2);
}
-/*member: A11.:[exact=A11]*/
+/*member: A11.:[exact=A11|powerset=0]*/
class A11 {
- /*member: A11.x11:[empty]*/
+ /*member: A11.x11:[empty|powerset=0]*/
x11(
- /*[exact=JSUInt31]*/ p1,
- /*[exact=JSUInt31]*/ p2,
- ) => /*invoke: [exact=A11]*/ x11(p1, p2);
+ /*[exact=JSUInt31|powerset=0]*/ p1,
+ /*[exact=JSUInt31|powerset=0]*/ p2,
+ ) => /*invoke: [exact=A11|powerset=0]*/ x11(p1, p2);
}
-/*member: f11:[null]*/
-void f11(/*[null]*/ p) {
- p. /*invoke: [null]*/ x11("x", "y");
+/*member: f11:[null|powerset=1]*/
+void f11(/*[null|powerset=1]*/ p) {
+ p. /*invoke: [null|powerset=1]*/ x11("x", "y");
}
-/*member: test11:[null]*/
+/*member: test11:[null|powerset=1]*/
test11() {
f11(null);
- A11(). /*invoke: [exact=A11]*/ x11(1, 2);
+ A11(). /*invoke: [exact=A11|powerset=0]*/ x11(1, 2);
}
-/*member: A12.:[exact=A12]*/
+/*member: A12.:[exact=A12|powerset=0]*/
class A12 {
- /*member: A12.x12:[empty]*/
+ /*member: A12.x12:[empty|powerset=0]*/
x12(
- /*Union([exact=JSString], [exact=JSUInt31])*/ p1,
- /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p1,
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p2,
) =>
- /*invoke: [exact=A12]*/ x12(1, 2);
+ /*invoke: [exact=A12|powerset=0]*/ x12(1, 2);
}
-/*member: test12:[null]*/
+/*member: test12:[null|powerset=1]*/
test12() {
- A12(). /*invoke: [exact=A12]*/ x12("x", "y");
+ A12(). /*invoke: [exact=A12|powerset=0]*/ x12("x", "y");
}
-/*member: A13.:[exact=A13]*/
+/*member: A13.:[exact=A13|powerset=0]*/
class A13 {
- /*member: A13.x13:[exact=JSUInt31]*/
+ /*member: A13.x13:[exact=JSUInt31|powerset=0]*/
x13(
- /*Value([exact=JSString], value: "x")*/ p1, [
- /*[exact=JSUInt31]*/ p2 = 1,
+ /*Value([exact=JSString|powerset=0], value: "x", powerset: 0)*/ p1, [
+ /*[exact=JSUInt31|powerset=0]*/ p2 = 1,
]) => 1;
}
-/*member: test13:[null]*/
+/*member: test13:[null|powerset=1]*/
test13() {
- A13(). /*invoke: [exact=A13]*/ x13("x", 1);
- A13(). /*invoke: [exact=A13]*/ x13("x");
+ A13(). /*invoke: [exact=A13|powerset=0]*/ x13("x", 1);
+ A13(). /*invoke: [exact=A13|powerset=0]*/ x13("x");
}
-/*member: A14.:[exact=A14]*/
+/*member: A14.:[exact=A14|powerset=0]*/
class A14 {
- /*member: A14.x14:[exact=JSUInt31]*/
- x14(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ p) => 1;
+ /*member: A14.x14:[exact=JSUInt31|powerset=0]*/
+ x14(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p,
+ ) => 1;
}
-/*member: f14:[exact=JSUInt31]*/
-f14(/*[exact=A14]*/ p) => p. /*invoke: [exact=A14]*/ x14(2.2);
+/*member: f14:[exact=JSUInt31|powerset=0]*/
+f14(/*[exact=A14|powerset=0]*/ p) =>
+ p. /*invoke: [exact=A14|powerset=0]*/ x14(2.2);
-/*member: test14:[null]*/
+/*member: test14:[null|powerset=1]*/
test14() {
- A14(). /*invoke: [exact=A14]*/ x14(1);
+ A14(). /*invoke: [exact=A14|powerset=0]*/ x14(1);
f14(new A14());
}
-/*member: A15.:[exact=A15]*/
+/*member: A15.:[exact=A15|powerset=0]*/
class A15 {
- /*member: A15.x15:[exact=JSUInt31]*/
+ /*member: A15.x15:[exact=JSUInt31|powerset=0]*/
x15(
- /*[exact=JSUInt31]*/ p1, [
- /*Value([exact=JSString], value: "s")*/ p2 = "s",
+ /*[exact=JSUInt31|powerset=0]*/ p1, [
+ /*Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/ p2 = "s",
]) {
- p2. /*Value([exact=JSString], value: "s")*/ length;
+ p2. /*Value([exact=JSString|powerset=0], value: "s", powerset: 0)*/ length;
return 1;
}
}
-/*member: test15:[null]*/
+/*member: test15:[null|powerset=1]*/
test15() {
- A15(). /*invoke: [exact=A15]*/ x15(1);
+ A15(). /*invoke: [exact=A15|powerset=0]*/ x15(1);
}
-/*member: A16.:[exact=A16]*/
+/*member: A16.:[exact=A16|powerset=0]*/
class A16 {
- /*member: A16.x16:[exact=JSUInt31]*/
+ /*member: A16.x16:[exact=JSUInt31|powerset=0]*/
x16(
- /*Value([exact=JSString], value: "x")*/ p1, [
- /*[exact=JSBool]*/ p2 = true,
+ /*Value([exact=JSString|powerset=0], value: "x", powerset: 0)*/ p1, [
+ /*[exact=JSBool|powerset=0]*/ p2 = true,
]) => 1;
}
-/*member: f16:[empty]*/
-f16(/*[null]*/ p) => p. /*invoke: [null]*/ a("x");
+/*member: f16:[empty|powerset=0]*/
+f16(/*[null|powerset=1]*/ p) => p. /*invoke: [null|powerset=1]*/ a("x");
-/*member: test16:[null]*/
+/*member: test16:[null|powerset=1]*/
test16() {
- A16(). /*invoke: [exact=A16]*/ x16("x");
- A16(). /*invoke: [exact=A16]*/ x16("x", false);
+ A16(). /*invoke: [exact=A16|powerset=0]*/ x16("x");
+ A16(). /*invoke: [exact=A16|powerset=0]*/ x16("x", false);
f16(null);
}
-/*member: A17.:[exact=A17]*/
+/*member: A17.:[exact=A17|powerset=0]*/
class A17 {
- /*member: A17.x17:[exact=JSUInt31]*/
+ /*member: A17.x17:[exact=JSUInt31|powerset=0]*/
x17(
- /*[exact=JSUInt31]*/ p1, [
- /*[exact=JSUInt31]*/ p2 = 1,
- /*[exact=JSString]*/ p3 = "s",
+ /*[exact=JSUInt31|powerset=0]*/ p1, [
+ /*[exact=JSUInt31|powerset=0]*/ p2 = 1,
+ /*[exact=JSString|powerset=0]*/ p3 = "s",
]) => 1;
}
-/*member: test17:[null]*/
+/*member: test17:[null|powerset=1]*/
test17() {
- A17(). /*invoke: [exact=A17]*/ x17(1);
- A17(). /*invoke: [exact=A17]*/ x17(1, 2);
- A17(). /*invoke: [exact=A17]*/ x17(1, 2, "x");
+ A17(). /*invoke: [exact=A17|powerset=0]*/ x17(1);
+ A17(). /*invoke: [exact=A17|powerset=0]*/ x17(1, 2);
+ A17(). /*invoke: [exact=A17|powerset=0]*/ x17(1, 2, "x");
dynamic a = A17();
- a. /*invoke: [exact=A17]*/ x17(1, p2: 2);
+ a. /*invoke: [exact=A17|powerset=0]*/ x17(1, p2: 2);
dynamic b = A17();
- b. /*invoke: [exact=A17]*/ x17(1, p3: "x");
+ b. /*invoke: [exact=A17|powerset=0]*/ x17(1, p3: "x");
dynamic c = A17();
- c. /*invoke: [exact=A17]*/ x17(1, p3: "x", p2: 2);
+ c. /*invoke: [exact=A17|powerset=0]*/ x17(1, p3: "x", p2: 2);
dynamic d = A17();
- d. /*invoke: [exact=A17]*/ x17(1, p2: 2, p3: "x");
+ d. /*invoke: [exact=A17|powerset=0]*/ x17(1, p2: 2, p3: "x");
}
-/*member: A18.:[exact=A18]*/
+/*member: A18.:[exact=A18|powerset=0]*/
class A18 {
- /*member: A18.x18:[exact=JSUInt31]*/
+ /*member: A18.x18:[exact=JSUInt31|powerset=0]*/
x18(
- /*[exact=JSUInt31]*/ p1, [
- /*[exact=JSBool]*/ p2 = 1,
- /*[exact=JSNumNotInt]*/ p3 = "s",
+ /*[exact=JSUInt31|powerset=0]*/ p1, [
+ /*[exact=JSBool|powerset=0]*/ p2 = 1,
+ /*[exact=JSNumNotInt|powerset=0]*/ p3 = "s",
]) => 1;
}
-/*member: test18:[null]*/
+/*member: test18:[null|powerset=1]*/
test18() {
- A18(). /*invoke: [exact=A18]*/ x18(1, true, 1.1);
- A18(). /*invoke: [exact=A18]*/ x18(1, false, 2.2);
+ A18(). /*invoke: [exact=A18|powerset=0]*/ x18(1, true, 1.1);
+ A18(). /*invoke: [exact=A18|powerset=0]*/ x18(1, false, 2.2);
dynamic a = A18();
- a. /*invoke: [exact=A18]*/ x18(1, p3: 3.3, p2: true);
+ a. /*invoke: [exact=A18|powerset=0]*/ x18(1, p3: 3.3, p2: true);
dynamic b = A18();
- b. /*invoke: [exact=A18]*/ x18(1, p2: false, p3: 4.4);
+ b. /*invoke: [exact=A18|powerset=0]*/ x18(1, p2: false, p3: 4.4);
}
-/*member: A19.:[exact=A19]*/
+/*member: A19.:[exact=A19|powerset=0]*/
class A19 {
- /*member: A19.x19:[empty]*/
+ /*member: A19.x19:[empty|powerset=0]*/
x19(
- /*Union([exact=JSString], [exact=JSUInt31])*/ p1,
- /*Union([exact=JSString], [exact=JSUInt31])*/ p2,
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p1,
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ p2,
) =>
- /*invoke: [subclass=A19]*/ x19(p1, p2);
+ /*invoke: [subclass=A19|powerset=0]*/ x19(p1, p2);
}
-/*member: B19.:[exact=B19]*/
+/*member: B19.:[exact=B19|powerset=0]*/
class B19 extends A19 {}
-/*member: test19:[null]*/
+/*member: test19:[null|powerset=1]*/
test19() {
- B19(). /*invoke: [exact=B19]*/ x19("a", "b");
- A19(). /*invoke: [exact=A19]*/ x19(1, 2);
+ B19(). /*invoke: [exact=B19|powerset=0]*/ x19("a", "b");
+ A19(). /*invoke: [exact=A19|powerset=0]*/ x19(1, 2);
}
diff --git a/pkg/compiler/test/inference/data/catch.dart b/pkg/compiler/test/inference/data/catch.dart
index d87f53a..759b322 100644
--- a/pkg/compiler/test/inference/data/catch.dart
+++ b/pkg/compiler/test/inference/data/catch.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
catchUntyped();
catchTyped();
@@ -13,7 +13,7 @@
/// Untyped catch clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: catchUntyped:[subclass=Object]*/
+/*member: catchUntyped:[subclass=Object|powerset=0]*/
catchUntyped() {
dynamic local = 0;
try {} catch (e) {
@@ -26,7 +26,7 @@
/// Typed catch clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: catchTyped:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: catchTyped:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
catchTyped() {
dynamic local = 0;
try {} on String catch (e) {
@@ -39,7 +39,7 @@
/// Catch clause with stack trace.
////////////////////////////////////////////////////////////////////////////////
-/*member: catchStackTrace:[null|subclass=Object]*/
+/*member: catchStackTrace:[null|subclass=Object|powerset=1]*/
catchStackTrace() {
dynamic local = 0;
try {} catch (_, s) {
diff --git a/pkg/compiler/test/inference/data/closure.dart b/pkg/compiler/test/inference/data/closure.dart
index bc754a0..6d7337d 100644
--- a/pkg/compiler/test/inference/data/closure.dart
+++ b/pkg/compiler/test/inference/data/closure.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInClosure();
accessInClosure();
@@ -17,139 +17,139 @@
postfixInClosure();
}
-/*member: returnInClosure:[exact=JSUInt31]*/
+/*member: returnInClosure:[exact=JSUInt31|powerset=0]*/
returnInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[exact=JSUInt31]*/ () {
+ local(/*[exact=JSUInt31|powerset=0]*/ () {
return lines;
});
return lines;
}
-/*member: accessInClosure:[exact=JSUInt31]*/
+/*member: accessInClosure:[exact=JSUInt31|powerset=0]*/
accessInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[exact=JSBool]*/ () {
- return lines. /*[exact=JSUInt31]*/ isEven;
+ local(/*[exact=JSBool|powerset=0]*/ () {
+ return lines. /*[exact=JSUInt31|powerset=0]*/ isEven;
});
return lines;
}
-/*member: invokeInClosure:[exact=JSUInt31]*/
+/*member: invokeInClosure:[exact=JSUInt31|powerset=0]*/
invokeInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[subclass=JSNumber]*/ () {
- return lines. /*invoke: [exact=JSUInt31]*/ ceilToDouble();
+ local(/*[subclass=JSNumber|powerset=0]*/ () {
+ return lines. /*invoke: [exact=JSUInt31|powerset=0]*/ ceilToDouble();
});
return lines;
}
-/*member: operatorInClosure:[exact=JSUInt31]*/
+/*member: operatorInClosure:[exact=JSUInt31|powerset=0]*/
operatorInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[subclass=JSInt]*/ () {
- return lines /*invoke: [exact=JSUInt31]*/ - 42;
+ local(/*[subclass=JSInt|powerset=0]*/ () {
+ return lines /*invoke: [exact=JSUInt31|powerset=0]*/ - 42;
});
return lines;
}
-/*member: assignInClosure:[subclass=JSInt]*/
+/*member: assignInClosure:[subclass=JSInt|powerset=0]*/
assignInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[null]*/ () {
+ local(/*[null|powerset=1]*/ () {
lines = -42;
});
return lines;
}
-/*member: assignInTwoClosures:[subclass=JSInt]*/
+/*member: assignInTwoClosures:[subclass=JSInt|powerset=0]*/
assignInTwoClosures() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[null]*/ () {
+ local(/*[null|powerset=1]*/ () {
lines = -42;
});
- local(/*[null]*/ () {
+ local(/*[null|powerset=1]*/ () {
lines = -87;
});
return lines;
}
-/*member: accessAssignInClosure:[subclass=JSInt]*/
+/*member: accessAssignInClosure:[subclass=JSInt|powerset=0]*/
accessAssignInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[null]*/ () {
- lines = lines /*invoke: [subclass=JSInt]*/ - 42;
+ local(/*[null|powerset=1]*/ () {
+ lines = lines /*invoke: [subclass=JSInt|powerset=0]*/ - 42;
});
return lines;
}
-/*member: accessBeforeAssignInClosure:[exact=JSUInt31]*/
+/*member: accessBeforeAssignInClosure:[exact=JSUInt31|powerset=0]*/
accessBeforeAssignInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[null]*/ () {
- lines /*invoke: [exact=JSUInt31]*/ - 42;
+ local(/*[null|powerset=1]*/ () {
+ lines /*invoke: [exact=JSUInt31|powerset=0]*/ - 42;
lines = 42;
});
return lines;
}
-/*member: accessAfterAssignInClosure:[exact=JSUInt31]*/
+/*member: accessAfterAssignInClosure:[exact=JSUInt31|powerset=0]*/
accessAfterAssignInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[subclass=JSInt]*/ () {
+ local(/*[subclass=JSInt|powerset=0]*/ () {
lines = 42;
- return lines /*invoke: [exact=JSUInt31]*/ - 42;
+ return lines /*invoke: [exact=JSUInt31|powerset=0]*/ - 42;
});
return lines;
}
-/*member: compoundInClosure:[subclass=JSInt]*/
+/*member: compoundInClosure:[subclass=JSInt|powerset=0]*/
compoundInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[null]*/ () {
- lines /*invoke: [subclass=JSInt]*/ -= 42;
+ local(/*[null|powerset=1]*/ () {
+ lines /*invoke: [subclass=JSInt|powerset=0]*/ -= 42;
});
return lines;
}
-/*member: postfixInClosure:[subclass=JSPositiveInt]*/
+/*member: postfixInClosure:[subclass=JSPositiveInt|powerset=0]*/
postfixInClosure() {
- /*[null|subclass=Object]*/
- local(/*[subclass=Closure]*/ f) => f();
+ /*[null|subclass=Object|powerset=1]*/
+ local(/*[subclass=Closure|powerset=0]*/ f) => f();
int lines = 0;
- local(/*[null]*/ () {
- lines /*invoke: [subclass=JSPositiveInt]*/ ++;
+ local(/*[null|powerset=1]*/ () {
+ lines /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
});
return lines;
}
diff --git a/pkg/compiler/test/inference/data/closure2.dart b/pkg/compiler/test/inference/data/closure2.dart
index 37ff4dd..9dc3efc 100644
--- a/pkg/compiler/test/inference/data/closure2.dart
+++ b/pkg/compiler/test/inference/data/closure2.dart
@@ -2,78 +2,79 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: returnInt1:[exact=JSUInt31]*/
+/*member: returnInt1:[exact=JSUInt31|powerset=0]*/
returnInt1() {
var a = 42;
// ignore: unused_local_variable
- var f = /*[exact=JSUInt31]*/ () {
+ var f = /*[exact=JSUInt31|powerset=0]*/ () {
return a;
};
return a;
}
-/*member: returnDyn1:Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/
+/*member: returnDyn1:Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/
returnDyn1() {
dynamic a = 42;
// ignore: unused_local_variable
- var f = /*[null]*/ () {
+ var f = /*[null|powerset=1]*/ () {
a = {};
};
return a;
}
-/*member: returnInt2:[exact=JSUInt31]*/
+/*member: returnInt2:[exact=JSUInt31|powerset=0]*/
returnInt2() {
var a = 42;
// ignore: unused_local_variable
- var f = /*[null]*/ () {
+ var f = /*[null|powerset=1]*/ () {
a = 54;
};
return a;
}
-/*member: returnDyn2:Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/
+/*member: returnDyn2:Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/
returnDyn2() {
dynamic a = 42;
// ignore: unused_local_variable
- var f = /*[null]*/ () {
+ var f = /*[null|powerset=1]*/ () {
a = 54;
};
// ignore: unused_local_variable
- var g = /*[null]*/ () {
+ var g = /*[null|powerset=1]*/ () {
a = {};
};
return a;
}
-/*member: returnInt3:[exact=JSUInt31]*/
+/*member: returnInt3:[exact=JSUInt31|powerset=0]*/
returnInt3() {
var a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 53) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 53) {
// ignore: unused_local_variable
- var f = /*[exact=JSUInt31]*/ () {
+ var f = /*[exact=JSUInt31|powerset=0]*/ () {
return a;
};
}
return a;
}
-/*member: returnDyn3:Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/
+/*member: returnDyn3:Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/
returnDyn3() {
dynamic a = 42;
- if (a /*invoke: Union([exact=JSUInt31], [exact=JsLinkedHashMap])*/ == 53) {
+ if (a /*invoke: Union([exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 0)*/ ==
+ 53) {
// ignore: unused_local_variable
- var f = /*[null]*/ () {
+ var f = /*[null|powerset=1]*/ () {
a = {};
};
}
return a;
}
-/*member: returnInt4:[exact=JSUInt31]*/
+/*member: returnInt4:[exact=JSUInt31|powerset=0]*/
returnInt4() {
var a = 42;
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
g() {
return a;
}
@@ -81,11 +82,11 @@
return g();
}
-/*member: returnNum1:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: returnNum1:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnNum1() {
dynamic a = 42.5;
try {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
g() {
dynamic b = {};
b = 42;
@@ -97,16 +98,16 @@
return a;
}
-/*member: returnIntOrNull:[null|exact=JSUInt31]*/
+/*member: returnIntOrNull:[null|exact=JSUInt31|powerset=1]*/
returnIntOrNull() {
- /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
- /*current: [exact=ArrayIterator]*/
- /*moveNext: [exact=ArrayIterator]*/
+ /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
+ /*current: [exact=ArrayIterator|powerset=0]*/
+ /*moveNext: [exact=ArrayIterator|powerset=0]*/
for (
// ignore: unused_local_variable
var b in [42]) {
int? bar = 42;
- /*[null|exact=JSUInt31]*/
+ /*[null|exact=JSUInt31|powerset=1]*/
f() => bar;
bar = null;
return f();
@@ -114,17 +115,17 @@
return 42;
}
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.foo:[exact=A]*/
+ /*member: A.foo:[exact=A|powerset=0]*/
foo() {
- /*[exact=A]*/
+ /*[exact=A|powerset=0]*/
f() => this;
return f();
}
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt1();
returnDyn1();
@@ -135,5 +136,5 @@
returnInt4();
returnNum1();
returnIntOrNull();
- A(). /*invoke: [exact=A]*/ foo();
+ A(). /*invoke: [exact=A|powerset=0]*/ foo();
}
diff --git a/pkg/compiler/test/inference/data/closure_tracer.dart b/pkg/compiler/test/inference/data/closure_tracer.dart
index 0fab03e..0b23d5a 100644
--- a/pkg/compiler/test/inference/data/closure_tracer.dart
+++ b/pkg/compiler/test/inference/data/closure_tracer.dart
@@ -2,182 +2,185 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: testFunctionStatement:[null|exact=JSUInt31]*/
+/*member: testFunctionStatement:[null|exact=JSUInt31|powerset=1]*/
testFunctionStatement() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
closure(42);
return res;
}
-/*member: testFunctionExpression:[null|exact=JSUInt31]*/
+/*member: testFunctionExpression:[null|exact=JSUInt31|powerset=1]*/
testFunctionExpression() {
var res;
- var closure = /*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ a) => res = a;
+ var closure = /*[exact=JSUInt31|powerset=0]*/
+ (/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
closure(42);
return res;
}
-/*member: staticField:[null|subclass=Closure]*/
+/*member: staticField:[null|subclass=Closure|powerset=1]*/
var staticField;
-/*member: testStoredInStatic:[null|exact=JSUInt31]*/
+/*member: testStoredInStatic:[null|exact=JSUInt31|powerset=1]*/
testStoredInStatic() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
staticField = closure;
staticField(42);
return res;
}
class A {
- /*member: A.field:[subclass=Closure]*/
+ /*member: A.field:[subclass=Closure|powerset=0]*/
var field;
- /*member: A.:[exact=A]*/
- A(this. /*[subclass=Closure]*/ field);
+ /*member: A.:[exact=A|powerset=0]*/
+ A(this. /*[subclass=Closure|powerset=0]*/ field);
- /*member: A.foo:[exact=JSUInt31]*/
- static foo(/*[exact=JSUInt31]*/ a) => topLevel3 = a;
+ /*member: A.foo:[exact=JSUInt31|powerset=0]*/
+ static foo(/*[exact=JSUInt31|powerset=0]*/ a) => topLevel3 = a;
}
-/*member: testStoredInInstance:[null|exact=JSUInt31]*/
+/*member: testStoredInInstance:[null|exact=JSUInt31|powerset=1]*/
testStoredInInstance() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
var a = A(closure);
- a.field /*invoke: [exact=A]*/ (42);
+ a.field /*invoke: [exact=A|powerset=0]*/ (42);
return res;
}
-/*member: testStoredInMapOfList:[null|exact=JSUInt31]*/
+/*member: testStoredInMapOfList:[null|exact=JSUInt31|powerset=1]*/
testStoredInMapOfList() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
dynamic a = <dynamic>[closure];
dynamic b = <dynamic, dynamic>{'foo': 1};
b
- /*update: Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSUInt31]), map: {foo: [exact=JSUInt31], bar: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/
+ /*update: Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {foo: [exact=JSUInt31|powerset=0], bar: Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
['bar'] =
a;
b
- /*Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSUInt31]), map: {foo: [exact=JSUInt31], bar: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/
+ /*Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {foo: [exact=JSUInt31|powerset=0], bar: Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
['bar']
- /*Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ /*Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1)*/
[0](42);
return res;
}
-/*member: testStoredInListOfList:[null|exact=JSUInt31]*/
+/*member: testStoredInListOfList:[null|exact=JSUInt31|powerset=1]*/
testStoredInListOfList() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
dynamic a = <dynamic>[closure];
dynamic b = <dynamic>[0, 1, 2];
b
- /*update: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: 3)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 3, powerset: 0)*/
[1] =
a;
b
- /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: 3)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 3, powerset: 0)*/
[1]
- /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+ /*Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
[0](42);
return res;
}
-/*member: testStoredInListOfListUsingInsert:[null|exact=JSUInt31]*/
+/*member: testStoredInListOfListUsingInsert:[null|exact=JSUInt31|powerset=1]*/
testStoredInListOfListUsingInsert() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
dynamic a = <dynamic>[closure];
dynamic b = <dynamic>[0, 1, 2];
b.
- /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ /*invoke: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/
insert(1, a);
- b /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/ [1]
- /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+ b /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/ [1]
+ /*Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
[0](42);
return res;
}
-/*member: testStoredInListOfListUsingAdd:[null|exact=JSUInt31]*/
+/*member: testStoredInListOfListUsingAdd:[null|exact=JSUInt31|powerset=1]*/
testStoredInListOfListUsingAdd() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
dynamic a = <dynamic>[closure];
dynamic b = <dynamic>[0, 1, 2];
b.
- /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ /*invoke: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/
add(a);
b
- /*Container([exact=JSExtendableArray], element: Union([exact=JSExtendableArray], [exact=JSUInt31]), length: null)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: null, powerset: 0)*/
[3]
- /*Union([exact=JSExtendableArray], [exact=JSUInt31])*/
+ /*Union([exact=JSExtendableArray|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
[0](42);
return res;
}
-/*member: testStoredInRecord:[null|exact=JSUInt31]*/
+/*member: testStoredInRecord:[null|exact=JSUInt31|powerset=1]*/
testStoredInRecord() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
final a = (3, closure);
- a. /*[Record(RecordShape(2), [[exact=JSUInt31], [subclass=Closure]])]*/ $2(
+ a. /*[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [subclass=Closure|powerset=0]], powerset: 0)]*/ $2(
42,
);
return res;
}
-/*member: foo:[null]*/
-foo(/*[subclass=Closure]*/ closure) {
+/*member: foo:[null|powerset=1]*/
+foo(/*[subclass=Closure|powerset=0]*/ closure) {
closure(42);
}
-/*member: testPassedInParameter:[null|exact=JSUInt31]*/
+/*member: testPassedInParameter:[null|exact=JSUInt31|powerset=1]*/
testPassedInParameter() {
var res;
- /*[exact=JSUInt31]*/
- closure(/*[exact=JSUInt31]*/ a) => res = a;
+ /*[exact=JSUInt31|powerset=0]*/
+ closure(/*[exact=JSUInt31|powerset=0]*/ a) => res = a;
foo(closure);
return res;
}
-/*member: topLevel1:[null|exact=JSUInt31]*/
+/*member: topLevel1:[null|exact=JSUInt31|powerset=1]*/
var topLevel1;
-/*member: foo2:[exact=JSUInt31]*/
-foo2(/*[exact=JSUInt31]*/ a) => topLevel1 = a;
+/*member: foo2:[exact=JSUInt31|powerset=0]*/
+foo2(/*[exact=JSUInt31|powerset=0]*/ a) => topLevel1 = a;
-/*member: testStaticClosure1:[null|exact=JSUInt31]*/
+/*member: testStaticClosure1:[null|exact=JSUInt31|powerset=1]*/
testStaticClosure1() {
var a = foo2;
a(42);
return topLevel1;
}
-/*member: topLevel2:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: topLevel2:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
var topLevel2;
-/*member: bar:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-bar(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) => topLevel2 = a;
+/*member: bar:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+bar(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) => topLevel2 = a;
-/*member: testStaticClosure2:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testStaticClosure2:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
testStaticClosure2() {
var a = bar;
a(42);
@@ -186,24 +189,25 @@
return topLevel2;
}
-/*member: topLevel3:[null|exact=JSUInt31]*/
+/*member: topLevel3:[null|exact=JSUInt31|powerset=1]*/
var topLevel3;
-/*member: testStaticClosure3:[null|exact=JSUInt31]*/
+/*member: testStaticClosure3:[null|exact=JSUInt31|powerset=1]*/
testStaticClosure3() {
var a = A.foo;
a(42);
return topLevel3;
}
-/*member: topLevel4:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: topLevel4:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
var topLevel4;
-/*member: testStaticClosure4Helper:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-testStaticClosure4Helper(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) =>
- topLevel4 = a;
+/*member: testStaticClosure4Helper:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+testStaticClosure4Helper(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) => topLevel4 = a;
-/*member: testStaticClosure4:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testStaticClosure4:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
testStaticClosure4() {
var a = testStaticClosure4Helper;
// Test calling the static after tearing it off.
@@ -212,75 +216,96 @@
return topLevel4;
}
-/*member: bar1:[subclass=Closure]*/
+/*member: bar1:[subclass=Closure|powerset=0]*/
int Function(int, [int]) bar1(
- int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSInt]*/
+ int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSInt|powerset=0]*/
(
- int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
- int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ c = 17,
- ]) => a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSInt]*/ + c;
-/*member: bar2:[subclass=Closure]*/
-int Function(int, [int]) bar2(
- int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSInt]*/
- (
- int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
- int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ c = 17,
- ]) => a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSInt]*/ + c;
-/*member: bar3:[subclass=Closure]*/
-int Function(int, [int]) bar3(
- int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSPositiveInt]*/
- (int /*[exact=JSUInt31]*/ b, [int /*[exact=JSUInt31]*/ c = 17]) =>
- a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSUInt32]*/ + c;
-/*member: bar4:[subclass=Closure]*/
-num Function(int, [int]) bar4(
- int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSNumber]*/
- (
- int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
- dynamic /*[null|su
- bclass=Object]*/
- c,
- ]) => a /*invoke: [exact=JSUInt31]*/ + b /*invoke: [subclass=JSInt]*/ + c;
-/*member: bar5:[subclass=Closure]*/
-num Function(int, [int]) bar5(
- int /*[exact=JSUInt31]*/ a,
-) => /*[subclass=JSNumber]*/
- (
- int /*spec.[null|subclass=Object]*/ /*prod.[subclass=JSInt]*/ b, [
- num? /*spec.[null|subclass=Object]*/ /*prod.[null|subclass=JSNumber]*/ c,
+ int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+ b, [
+ int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+ c =
+ 17,
]) =>
- a /*invoke: [exact=JSUInt31]*/ +
- b /*invoke: [subclass=JSInt]*/ +
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+ b /*invoke: [subclass=JSInt|powerset=0]*/ +
+ c;
+/*member: bar2:[subclass=Closure|powerset=0]*/
+int Function(int, [int]) bar2(
+ int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSInt|powerset=0]*/
+ (
+ int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+ b, [
+ int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+ c =
+ 17,
+ ]) =>
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+ b /*invoke: [subclass=JSInt|powerset=0]*/ +
+ c;
+/*member: bar3:[subclass=Closure|powerset=0]*/
+int Function(int, [int]) bar3(
+ int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSPositiveInt|powerset=0]*/
+ (
+ int /*[exact=JSUInt31|powerset=0]*/ b, [
+ int /*[exact=JSUInt31|powerset=0]*/ c = 17,
+ ]) =>
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+ b /*invoke: [subclass=JSUInt32|powerset=0]*/ +
+ c;
+/*member: bar4:[subclass=Closure|powerset=0]*/
+num Function(int, [int]) bar4(
+ int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSNumber|powerset=0]*/
+ (
+ int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+ b, [
+ dynamic /*[null|subclass=Object|powerset=1]*/ c,
+ ]) =>
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+ b /*invoke: [subclass=JSInt|powerset=0]*/ +
+ c;
+/*member: bar5:[subclass=Closure|powerset=0]*/
+num Function(int, [int]) bar5(
+ int /*[exact=JSUInt31|powerset=0]*/ a,
+) => /*[subclass=JSNumber|powerset=0]*/
+ (
+ int /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[subclass=JSInt|powerset=0]*/
+ b, [
+ num? /*spec.[null|subclass=Object|powerset=1]*/ /*prod.[null|subclass=JSNumber|powerset=1]*/
+ c,
+ ]) =>
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ +
+ b /*invoke: [subclass=JSInt|powerset=0]*/ +
(c ?? 0);
-/*member: testFunctionApply:[null|subclass=Object]*/
+/*member: testFunctionApply:[null|subclass=Object|powerset=1]*/
testFunctionApply() {
return Function.apply(bar1(10), [20]);
}
-/*member: testFunctionApplyNoDefault:[null|subclass=Object]*/
+/*member: testFunctionApplyNoDefault:[null|subclass=Object|powerset=1]*/
testFunctionApplyNoDefault() {
Function.apply(bar4(10), [30]);
return Function.apply(bar5(10), [30]);
}
-/*member: testRecordFunctionApply:[null|subclass=Object]*/
+/*member: testRecordFunctionApply:[null|subclass=Object|powerset=1]*/
testRecordFunctionApply() {
final rec = (bar2(10), bar3(10));
- (rec. /*[Record(RecordShape(2), [[subclass=Closure], [subclass=Closure]])]*/ $2)(
+ (rec. /*[Record(RecordShape(2), [[subclass=Closure|powerset=0], [subclass=Closure|powerset=0]], powerset: 0)]*/ $2)(
2,
3,
);
return Function.apply(
- rec. /*[Record(RecordShape(2), [[subclass=Closure], [subclass=Closure]])]*/ $1,
+ rec. /*[Record(RecordShape(2), [[subclass=Closure|powerset=0], [subclass=Closure|powerset=0]], powerset: 0)]*/ $1,
[20],
);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
testFunctionStatement();
testFunctionExpression();
diff --git a/pkg/compiler/test/inference/data/closure_tracer_28919.dart b/pkg/compiler/test/inference/data/closure_tracer_28919.dart
index 766af9a..c37ea16 100644
--- a/pkg/compiler/test/inference/data/closure_tracer_28919.dart
+++ b/pkg/compiler/test/inference/data/closure_tracer_28919.dart
@@ -4,24 +4,24 @@
// Regression test for issue 28919.
-/*member: foo1:[null]*/
+/*member: foo1:[null|powerset=1]*/
foo1() {
final methods = [];
var res, sum;
for (
int i = 0;
- i /*invoke: [subclass=JSPositiveInt]*/ != 3;
- i /*invoke: [subclass=JSPositiveInt]*/ ++
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ != 3;
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++
) {
methods
- . /*invoke: Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ add(
- /*[null]*/ (int /*[exact=JSUInt31]*/ x) {
+ . /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/ add(
+ /*[null|powerset=1]*/ (int /*[exact=JSUInt31|powerset=0]*/ x) {
res = x;
- sum = x /*invoke: [exact=JSUInt31]*/ + i;
+ sum = x /*invoke: [exact=JSUInt31|powerset=0]*/ + i;
},
);
}
- methods /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ [0](
+ methods /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/ [0](
499,
);
probe1res(res);
@@ -29,61 +29,63 @@
probe1methods(methods);
}
-/*member: probe1res:[null|exact=JSUInt31]*/
-probe1res(/*[null|exact=JSUInt31]*/ x) => x;
+/*member: probe1res:[null|exact=JSUInt31|powerset=1]*/
+probe1res(/*[null|exact=JSUInt31|powerset=1]*/ x) => x;
-/*member: probe1sum:[null|subclass=JSPositiveInt]*/
-probe1sum(/*[null|subclass=JSPositiveInt]*/ x) => x;
+/*member: probe1sum:[null|subclass=JSPositiveInt|powerset=1]*/
+probe1sum(/*[null|subclass=JSPositiveInt|powerset=1]*/ x) => x;
-/*member: probe1methods:Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/
+/*member: probe1methods:Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/
probe1methods(
- /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: null)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: null, powerset: 0)*/ x,
) => x;
-/*member: nonContainer:[exact=JSExtendableArray]*/
-nonContainer(/*[exact=JSUInt31]*/ choice) {
- var m = choice /*invoke: [exact=JSUInt31]*/ == 0 ? [] : "<String>";
+/*member: nonContainer:[exact=JSExtendableArray|powerset=0]*/
+nonContainer(/*[exact=JSUInt31|powerset=0]*/ choice) {
+ var m = choice /*invoke: [exact=JSUInt31|powerset=0]*/ == 0 ? [] : "<String>";
if (m is! List) throw 123;
// The union then filter leaves us with a non-container type.
return m;
}
-/*member: foo2:[null]*/
-foo2(int /*[exact=JSUInt31]*/ choice) {
+/*member: foo2:[null|powerset=1]*/
+foo2(int /*[exact=JSUInt31|powerset=0]*/ choice) {
final methods = nonContainer(choice);
/// ignore: unused_local_variable
var res, sum;
for (
int i = 0;
- i /*invoke: [subclass=JSPositiveInt]*/ != 3;
- i /*invoke: [subclass=JSPositiveInt]*/ ++
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ != 3;
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++
) {
- methods. /*invoke: [exact=JSExtendableArray]*/ add(/*[null]*/ (
- int
- /*spec.[null|subclass=Object]*/
- /*prod.[subclass=JSInt]*/
- x,
- ) {
- res = x;
- sum = x /*invoke: [subclass=JSInt]*/ + i;
- });
+ methods. /*invoke: [exact=JSExtendableArray|powerset=0]*/ add(
+ /*[null|powerset=1]*/ (
+ int
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[subclass=JSInt|powerset=0]*/
+ x,
+ ) {
+ res = x;
+ sum = x /*invoke: [subclass=JSInt|powerset=0]*/ + i;
+ },
+ );
}
- methods /*[exact=JSExtendableArray]*/ [0](499);
+ methods /*[exact=JSExtendableArray|powerset=0]*/ [0](499);
probe2res(res);
probe2methods(methods);
}
-/*member: probe2res:[null|subclass=JSInt]*/
+/*member: probe2res:[null|subclass=JSInt|powerset=1]*/
probe2res(
- /*[null|subclass=JSInt]*/
+ /*[null|subclass=JSInt|powerset=1]*/
x,
) => x;
-/*member: probe2methods:[exact=JSExtendableArray]*/
-probe2methods(/*[exact=JSExtendableArray]*/ x) => x;
+/*member: probe2methods:[exact=JSExtendableArray|powerset=0]*/
+probe2methods(/*[exact=JSExtendableArray|powerset=0]*/ x) => x;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
foo1();
foo2(0);
diff --git a/pkg/compiler/test/inference/data/closurization_instance.dart b/pkg/compiler/test/inference/data/closurization_instance.dart
index a7ad3f7..9e90b9e 100644
--- a/pkg/compiler/test/inference/data/closurization_instance.dart
+++ b/pkg/compiler/test/inference/data/closurization_instance.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closurizedCallToString();
}
@@ -11,19 +11,19 @@
// Implicit/explicit .call on instance method tear-off.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class {
- /*member: Class.method:[exact=JSUInt31]*/
+ /*member: Class.method:[exact=JSUInt31|powerset=0]*/
method() => 42;
}
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
closurizedCallToString() {
var c = Class();
- var local = c. /*[exact=Class]*/ method;
- local. /*invoke: [subclass=Closure]*/ toString();
+ var local = c. /*[exact=Class|powerset=0]*/ method;
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local();
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local.call();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
diff --git a/pkg/compiler/test/inference/data/closurization_instance_call.dart b/pkg/compiler/test/inference/data/closurization_instance_call.dart
index 269d197..50148e1 100644
--- a/pkg/compiler/test/inference/data/closurization_instance_call.dart
+++ b/pkg/compiler/test/inference/data/closurization_instance_call.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closurizedCallToString();
}
@@ -12,23 +12,23 @@
// '.call' method in the closed world.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class {
- /*member: Class.call:Value([exact=JSBool], value: true)*/
+ /*member: Class.call:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
call() => true;
- /*member: Class.method:[exact=JSUInt31]*/
+ /*member: Class.method:[exact=JSUInt31|powerset=0]*/
method() => 42;
}
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
closurizedCallToString() {
var c = Class();
- c. /*invoke: [exact=Class]*/ call(); // Make `Class.call` live.
- var local = c. /*[exact=Class]*/ method;
- local. /*invoke: [subclass=Closure]*/ toString();
+ c. /*invoke: [exact=Class|powerset=0]*/ call(); // Make `Class.call` live.
+ var local = c. /*[exact=Class|powerset=0]*/ method;
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local();
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local.call();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
diff --git a/pkg/compiler/test/inference/data/closurization_local_call.dart b/pkg/compiler/test/inference/data/closurization_local_call.dart
index f752280..6f6c28a 100644
--- a/pkg/compiler/test/inference/data/closurization_local_call.dart
+++ b/pkg/compiler/test/inference/data/closurization_local_call.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closurizedCallToString();
}
@@ -12,20 +12,20 @@
// method in the closed world.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class {
- /*member: Class.call:Value([exact=JSBool], value: true)*/
+ /*member: Class.call:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
call() => true;
}
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
closurizedCallToString() {
var c = Class();
- c. /*invoke: [exact=Class]*/ call(); // Make `Class.call` live.
- var local = /*[exact=JSUInt31]*/ () => 42;
- local. /*invoke: [subclass=Closure]*/ toString();
+ c. /*invoke: [exact=Class|powerset=0]*/ call(); // Make `Class.call` live.
+ var local = /*[exact=JSUInt31|powerset=0]*/ () => 42;
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local();
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local.call();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
diff --git a/pkg/compiler/test/inference/data/closurization_static.dart b/pkg/compiler/test/inference/data/closurization_static.dart
index deea1db..f3b5fd0 100644
--- a/pkg/compiler/test/inference/data/closurization_static.dart
+++ b/pkg/compiler/test/inference/data/closurization_static.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closurizedCallToString();
}
@@ -11,15 +11,15 @@
// Implicit/explicit .call on static method tear-off.
////////////////////////////////////////////////////////////////////////////////
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
method() => 42;
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
closurizedCallToString() {
var local = method;
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local();
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local.call();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
diff --git a/pkg/compiler/test/inference/data/closurization_static_call.dart b/pkg/compiler/test/inference/data/closurization_static_call.dart
index ceed460..a0dba61 100644
--- a/pkg/compiler/test/inference/data/closurization_static_call.dart
+++ b/pkg/compiler/test/inference/data/closurization_static_call.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closurizedCallToString();
}
@@ -12,23 +12,23 @@
// '.call' method in the closed world.
////////////////////////////////////////////////////////////////////////////////
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
method() => 42;
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class {
- /*member: Class.call:Value([exact=JSBool], value: true)*/
+ /*member: Class.call:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
call() => true;
}
-/*member: closurizedCallToString:[exact=JSString]*/
+/*member: closurizedCallToString:[exact=JSString|powerset=0]*/
closurizedCallToString() {
var c = Class();
- c. /*invoke: [exact=Class]*/ call(); // Make `Class.call` live.
+ c. /*invoke: [exact=Class|powerset=0]*/ call(); // Make `Class.call` live.
var local = method;
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local();
- local. /*invoke: [subclass=Closure]*/ toString();
+ local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
local.call();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
diff --git a/pkg/compiler/test/inference/data/closurized_tear_off.dart b/pkg/compiler/test/inference/data/closurized_tear_off.dart
index d9de11b..3da4f2d 100644
--- a/pkg/compiler/test/inference/data/closurized_tear_off.dart
+++ b/pkg/compiler/test/inference/data/closurized_tear_off.dart
@@ -2,35 +2,36 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.foo:[exact=JSUInt31]*/
- foo(/*[null|subclass=Object]*/ a) => 3;
- /*member: A.bar:[exact=MappedListIterable]*/
+ /*member: A.foo:[exact=JSUInt31|powerset=0]*/
+ foo(/*[null|subclass=Object|powerset=1]*/ a) => 3;
+ /*member: A.bar:[exact=MappedListIterable|powerset=0]*/
bar(
- /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 10)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 10, powerset: 0)*/ x,
) => x
- . /*invoke: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 10)*/ map(
- /*[subclass=A]*/ foo,
+ . /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 10, powerset: 0)*/ map(
+ /*[subclass=A|powerset=0]*/ foo,
);
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:[exact=JSUInt31]*/
- foo(/*[null|subclass=Object]*/ b) {
+ /*member: B.foo:[exact=JSUInt31|powerset=0]*/
+ foo(/*[null|subclass=Object|powerset=1]*/ b) {
b.abs();
return 4;
}
}
-/*member: getA:[subclass=A]*/
-getA(bool /*Value([exact=JSBool], value: false)*/ x) => x ? A() : B();
+/*member: getA:[subclass=A|powerset=0]*/
+getA(bool /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) =>
+ x ? A() : B();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- getA(false). /*invoke: [subclass=A]*/ bar(
- List. /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 10)*/ generate(
+ getA(false). /*invoke: [subclass=A|powerset=0]*/ bar(
+ List. /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 10, powerset: 0)*/ generate(
10,
(i) => i,
),
diff --git a/pkg/compiler/test/inference/data/conditional.dart b/pkg/compiler/test/inference/data/conditional.dart
index e8af4fe..92e2189 100644
--- a/pkg/compiler/test/inference/data/conditional.dart
+++ b/pkg/compiler/test/inference/data/conditional.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleConditional();
simpleConditionalTrue();
@@ -19,10 +19,10 @@
/// Simple conditional with unknown condition value.
////////////////////////////////////////////////////////////////////////////////
-/*member: _simpleConditional:Union([exact=JSString], [exact=JSUInt31])*/
-_simpleConditional(/*[exact=JSBool]*/ c) => c ? '' : 0;
+/*member: _simpleConditional:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_simpleConditional(/*[exact=JSBool|powerset=0]*/ c) => c ? '' : 0;
-/*member: simpleConditional:[null]*/
+/*member: simpleConditional:[null|powerset=1]*/
simpleConditional() {
_simpleConditional(true);
_simpleConditional(false);
@@ -32,10 +32,12 @@
/// Simple conditional with unknown condition value.
////////////////////////////////////////////////////////////////////////////////
-/*member: _simpleConditionalTrue:Union([exact=JSString], [exact=JSUInt31])*/
-_simpleConditionalTrue(/*Value([exact=JSBool], value: true)*/ c) => c ? '' : 0;
+/*member: _simpleConditionalTrue:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_simpleConditionalTrue(
+ /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ c,
+) => c ? '' : 0;
-/*member: simpleConditionalTrue:[null]*/
+/*member: simpleConditionalTrue:[null|powerset=1]*/
simpleConditionalTrue() {
_simpleConditionalTrue(true);
}
@@ -44,11 +46,12 @@
/// Simple conditional with unknown condition value.
////////////////////////////////////////////////////////////////////////////////
-/*member: _simpleConditionalFalse:Union([exact=JSString], [exact=JSUInt31])*/
-_simpleConditionalFalse(/*Value([exact=JSBool], value: false)*/ c) =>
- c ? '' : 0;
+/*member: _simpleConditionalFalse:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_simpleConditionalFalse(
+ /*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ c,
+) => c ? '' : 0;
-/*member: simpleConditionalFalse:[null]*/
+/*member: simpleConditionalFalse:[null|powerset=1]*/
simpleConditionalFalse() {
_simpleConditionalFalse(false);
}
@@ -56,11 +59,11 @@
////////////////////////////////////////////////////////////////////////////////
/// Conditional with an is test.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIs:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIs(/*[null|exact=JSUInt31]*/ o) =>
- o is int ? o. /*invoke: [exact=JSUInt31]*/ abs() : '';
+/*member: _conditionalIs:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIs(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+ o is int ? o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs() : '';
-/*member: conditionalIs:[null]*/
+/*member: conditionalIs:[null|powerset=1]*/
conditionalIs() {
_conditionalIs(null);
_conditionalIs(1);
@@ -69,11 +72,11 @@
////////////////////////////////////////////////////////////////////////////////
/// Conditional with an is `int` test known to be true.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIsInt:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIsInt(/*[exact=JSUInt31]*/ o) =>
- o is int ? o. /*invoke: [exact=JSUInt31]*/ abs() : '';
+/*member: _conditionalIsInt:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIsInt(/*[exact=JSUInt31|powerset=0]*/ o) =>
+ o is int ? o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs() : '';
-/*member: conditionalIsInt:[null]*/
+/*member: conditionalIsInt:[null|powerset=1]*/
conditionalIsInt() {
_conditionalIsInt(1);
}
@@ -81,11 +84,11 @@
////////////////////////////////////////////////////////////////////////////////
/// Conditional with an is-not test.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIsNot:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIsNot(/*[null|exact=JSUInt31]*/ o) =>
- o is! int ? '' : o. /*invoke: [exact=JSUInt31]*/ abs();
+/*member: _conditionalIsNot:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIsNot(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+ o is! int ? '' : o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
-/*member: conditionalIsNot:[null]*/
+/*member: conditionalIsNot:[null|powerset=1]*/
conditionalIsNot() {
_conditionalIsNot(null);
_conditionalIsNot(1);
@@ -94,11 +97,11 @@
////////////////////////////////////////////////////////////////////////////////
/// Conditional with an is-not `int` test known to be false.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalIsNotInt:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalIsNotInt(/*[exact=JSUInt31]*/ o) =>
- o is! int ? '' : o. /*invoke: [exact=JSUInt31]*/ abs();
+/*member: _conditionalIsNotInt:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalIsNotInt(/*[exact=JSUInt31|powerset=0]*/ o) =>
+ o is! int ? '' : o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
-/*member: conditionalIsNotInt:[null]*/
+/*member: conditionalIsNotInt:[null|powerset=1]*/
conditionalIsNotInt() {
_conditionalIsNotInt(1);
}
@@ -106,11 +109,11 @@
////////////////////////////////////////////////////////////////////////////////
/// Conditional with an is test.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalNull:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalNull(/*[null|exact=JSUInt31]*/ o) =>
- o == null ? '' : o. /*invoke: [exact=JSUInt31]*/ abs();
+/*member: _conditionalNull:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalNull(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+ o == null ? '' : o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
-/*member: conditionalNull:[null]*/
+/*member: conditionalNull:[null|powerset=1]*/
conditionalNull() {
_conditionalNull(null);
_conditionalNull(1);
@@ -119,11 +122,11 @@
////////////////////////////////////////////////////////////////////////////////
/// Conditional with an is `int` test known to be true.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalNotNull:Union([exact=JSString], [subclass=JSPositiveInt])*/
-_conditionalNotNull(/*[null|exact=JSUInt31]*/ o) =>
- o != null ? o. /*invoke: [exact=JSUInt31]*/ abs() : '';
+/*member: _conditionalNotNull:Union([exact=JSString|powerset=0], [subclass=JSPositiveInt|powerset=0], powerset: 0)*/
+_conditionalNotNull(/*[null|exact=JSUInt31|powerset=1]*/ o) =>
+ o != null ? o. /*invoke: [exact=JSUInt31|powerset=0]*/ abs() : '';
-/*member: conditionalNotNull:[null]*/
+/*member: conditionalNotNull:[null|powerset=1]*/
conditionalNotNull() {
_conditionalNotNull(null);
_conditionalNotNull(1);
diff --git a/pkg/compiler/test/inference/data/const_closure.dart b/pkg/compiler/test/inference/data/const_closure.dart
index ca22d2e..d94cee0 100644
--- a/pkg/compiler/test/inference/data/const_closure.dart
+++ b/pkg/compiler/test/inference/data/const_closure.dart
@@ -2,13 +2,13 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method1:[exact=JSUInt31]*/
+/*member: method1:[exact=JSUInt31|powerset=0]*/
method1() {
return 42;
}
-/*member: method2:[exact=JSUInt31]*/
-method2(/*[exact=JSUInt31]*/ a) {
+/*member: method2:[exact=JSUInt31|powerset=0]*/
+method2(/*[exact=JSUInt31|powerset=0]*/ a) {
// Called only via [foo2] with a small integer.
return a;
}
@@ -17,17 +17,17 @@
const foo2 = method2;
-/*member: returnInt1:[null|subclass=Object]*/
+/*member: returnInt1:[null|subclass=Object|powerset=1]*/
returnInt1() {
return foo1();
}
-/*member: returnInt2:[null|subclass=Object]*/
+/*member: returnInt2:[null|subclass=Object|powerset=1]*/
returnInt2() {
return foo2(54);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt1();
returnInt2();
diff --git a/pkg/compiler/test/inference/data/const_closure2.dart b/pkg/compiler/test/inference/data/const_closure2.dart
index 5a45b05..e178a5b 100644
--- a/pkg/compiler/test/inference/data/const_closure2.dart
+++ b/pkg/compiler/test/inference/data/const_closure2.dart
@@ -2,20 +2,24 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: method:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
// Called via [foo] with integer then double.
-method(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) {
+method(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) {
return a;
}
const foo = method;
-/*member: returnNum:[null|subclass=Object]*/
-returnNum(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ x) {
+/*member: returnNum:[null|subclass=Object|powerset=1]*/
+returnNum(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
return foo(x);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnNum(10);
returnNum(10.5);
diff --git a/pkg/compiler/test/inference/data/const_closure3.dart b/pkg/compiler/test/inference/data/const_closure3.dart
index 31bcc35..e9a2994 100644
--- a/pkg/compiler/test/inference/data/const_closure3.dart
+++ b/pkg/compiler/test/inference/data/const_closure3.dart
@@ -2,20 +2,20 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
// Called only via [foo2] with a small integer.
-method(/*[exact=JSUInt31]*/ a) {
+method(/*[exact=JSUInt31|powerset=0]*/ a) {
return a;
}
const foo = method;
-/*member: returnInt:[null|subclass=Object]*/
+/*member: returnInt:[null|subclass=Object|powerset=1]*/
returnInt() {
return foo(54);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt();
}
diff --git a/pkg/compiler/test/inference/data/const_closure4.dart b/pkg/compiler/test/inference/data/const_closure4.dart
index 5a45b05..e178a5b 100644
--- a/pkg/compiler/test/inference/data/const_closure4.dart
+++ b/pkg/compiler/test/inference/data/const_closure4.dart
@@ -2,20 +2,24 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: method:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
// Called via [foo] with integer then double.
-method(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) {
+method(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) {
return a;
}
const foo = method;
-/*member: returnNum:[null|subclass=Object]*/
-returnNum(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ x) {
+/*member: returnNum:[null|subclass=Object|powerset=1]*/
+returnNum(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) {
return foo(x);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnNum(10);
returnNum(10.5);
diff --git a/pkg/compiler/test/inference/data/const_closure5.dart b/pkg/compiler/test/inference/data/const_closure5.dart
index 0877631..26b5533 100644
--- a/pkg/compiler/test/inference/data/const_closure5.dart
+++ b/pkg/compiler/test/inference/data/const_closure5.dart
@@ -2,20 +2,22 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: method:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
// Called only via [foo2] with a small integer.
-method(/*Union([exact=JSNumNotInt], [exact=JSUInt31])*/ a) {
+method(
+ /*Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ a,
+) {
return a;
}
const foo = method;
-/*member: returnInt:[null|subclass=Object]*/
+/*member: returnInt:[null|subclass=Object|powerset=1]*/
returnInt() {
return foo(54);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt();
method(55.2);
diff --git a/pkg/compiler/test/inference/data/const_closure_default.dart b/pkg/compiler/test/inference/data/const_closure_default.dart
index bd33b03..2fc77ba 100644
--- a/pkg/compiler/test/inference/data/const_closure_default.dart
+++ b/pkg/compiler/test/inference/data/const_closure_default.dart
@@ -4,43 +4,43 @@
// [defaultFn_i] is called only via [foo_i]'s default value with a small integer.
-/*member: defaultFn1:[exact=JSUInt31]*/
-defaultFn1(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn1:[exact=JSUInt31|powerset=0]*/
+defaultFn1(/*[exact=JSUInt31|powerset=0]*/ a) => a;
-/*member: defaultFn2:[exact=JSUInt31]*/
-defaultFn2(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn2:[exact=JSUInt31|powerset=0]*/
+defaultFn2(/*[exact=JSUInt31|powerset=0]*/ a) => a;
-/*member: defaultFn3:[exact=JSUInt31]*/
-defaultFn3(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn3:[exact=JSUInt31|powerset=0]*/
+defaultFn3(/*[exact=JSUInt31|powerset=0]*/ a) => a;
-/*member: defaultFn4:[exact=JSUInt31]*/
-defaultFn4(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn4:[exact=JSUInt31|powerset=0]*/
+defaultFn4(/*[exact=JSUInt31|powerset=0]*/ a) => a;
-/*member: defaultFn5:[exact=JSUInt31]*/
-defaultFn5(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn5:[exact=JSUInt31|powerset=0]*/
+defaultFn5(/*[exact=JSUInt31|powerset=0]*/ a) => a;
-/*member: defaultFn6:[exact=JSUInt31]*/
-defaultFn6(/*[exact=JSUInt31]*/ a) => a;
+/*member: defaultFn6:[exact=JSUInt31|powerset=0]*/
+defaultFn6(/*[exact=JSUInt31|powerset=0]*/ a) => a;
-/*member: foo1:[null|subclass=Object]*/
-foo1([/*[subclass=Closure]*/ fn = defaultFn1]) => fn(54);
+/*member: foo1:[null|subclass=Object|powerset=1]*/
+foo1([/*[subclass=Closure|powerset=0]*/ fn = defaultFn1]) => fn(54);
-/*member: foo2:[null|subclass=Object]*/
-foo2({/*[subclass=Closure]*/ fn = defaultFn2}) => fn(54);
+/*member: foo2:[null|subclass=Object|powerset=1]*/
+foo2({/*[subclass=Closure|powerset=0]*/ fn = defaultFn2}) => fn(54);
-/*member: foo3:[null|subclass=Object]*/
-foo3([/*[subclass=Closure]*/ fn = defaultFn3]) => fn(54);
+/*member: foo3:[null|subclass=Object|powerset=1]*/
+foo3([/*[subclass=Closure|powerset=0]*/ fn = defaultFn3]) => fn(54);
-/*member: foo4:[null|subclass=Object]*/
-foo4({/*[subclass=Closure]*/ fn = defaultFn4}) => fn(54);
+/*member: foo4:[null|subclass=Object|powerset=1]*/
+foo4({/*[subclass=Closure|powerset=0]*/ fn = defaultFn4}) => fn(54);
-/*member: foo5:[null|subclass=Object]*/
-foo5([/*[null|subclass=Object]*/ fn = defaultFn5]) => fn(54);
+/*member: foo5:[null|subclass=Object|powerset=1]*/
+foo5([/*[null|subclass=Object|powerset=1]*/ fn = defaultFn5]) => fn(54);
-/*member: foo6:[null|subclass=Object]*/
-foo6({/*[null|subclass=Object]*/ fn = defaultFn6}) => fn(54);
+/*member: foo6:[null|subclass=Object|powerset=1]*/
+foo6({/*[null|subclass=Object|powerset=1]*/ fn = defaultFn6}) => fn(54);
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
// Direct calls.
foo1();
diff --git a/pkg/compiler/test/inference/data/container_mask_equal.dart b/pkg/compiler/test/inference/data/container_mask_equal.dart
index 59d548d..4bbbed1 100644
--- a/pkg/compiler/test/inference/data/container_mask_equal.dart
+++ b/pkg/compiler/test/inference/data/container_mask_equal.dart
@@ -7,25 +7,25 @@
import 'dart:typed_data';
-/*member: method1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: method1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
method1() => [0];
-/*member: method2:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+/*member: method2:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
method2() => [1, 2];
-/*member: method3:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 1)*/
+/*member: method3:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
method3() => Uint8List(1);
-/*member: method4:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 2)*/
+/*member: method4:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
method4() => Uint8List(2);
-/*member: method1or2:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
-method1or2(/*[exact=JSBool]*/ c) => c ? method1() : method2();
+/*member: method1or2:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
+method1or2(/*[exact=JSBool|powerset=0]*/ c) => c ? method1() : method2();
-/*member: method3or4:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: null)*/
-method3or4(/*[exact=JSBool]*/ c) => c ? method3() : method4();
+/*member: method3or4:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
+method3or4(/*[exact=JSBool|powerset=0]*/ c) => c ? method3() : method4();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
method1or2(true);
method1or2(false);
diff --git a/pkg/compiler/test/inference/data/default_value.dart b/pkg/compiler/test/inference/data/default_value.dart
index a9c6f46..a485020 100644
--- a/pkg/compiler/test/inference/data/default_value.dart
+++ b/pkg/compiler/test/inference/data/default_value.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
positionalWithoutDefaultOnLocal();
positionalWithNullDefaultOnLocal();
@@ -12,38 +12,40 @@
positionalWithOneDefaultOnStatic();
}
-/*member: positionalWithoutDefaultOnLocal:[null]*/
+/*member: positionalWithoutDefaultOnLocal:[null|powerset=1]*/
positionalWithoutDefaultOnLocal() {
- /*[null]*/
- local([/*[null]*/ parameter]) => parameter;
+ /*[null|powerset=1]*/
+ local([/*[null|powerset=1]*/ parameter]) => parameter;
return local();
}
-/*member: positionalWithNullDefaultOnLocal:[null]*/
+/*member: positionalWithNullDefaultOnLocal:[null|powerset=1]*/
positionalWithNullDefaultOnLocal() {
- /*[null]*/
- local([/*[null]*/ parameter = null]) => parameter;
+ /*[null|powerset=1]*/
+ local([/*[null|powerset=1]*/ parameter = null]) => parameter;
return local();
}
-/*member: positionalWithOneDefaultOnLocal:[exact=JSUInt31]*/
+/*member: positionalWithOneDefaultOnLocal:[exact=JSUInt31|powerset=0]*/
positionalWithOneDefaultOnLocal() {
- /*[exact=JSUInt31]*/
- local([/*[exact=JSUInt31]*/ parameter = 1]) => parameter;
+ /*[exact=JSUInt31|powerset=0]*/
+ local([/*[exact=JSUInt31|powerset=0]*/ parameter = 1]) => parameter;
return local();
}
-/*member: positionalWithoutDefaultOnStatic:[null]*/
-positionalWithoutDefaultOnStatic([/*[null]*/ parameter]) {
+/*member: positionalWithoutDefaultOnStatic:[null|powerset=1]*/
+positionalWithoutDefaultOnStatic([/*[null|powerset=1]*/ parameter]) {
return parameter;
}
-/*member: positionalWithNullDefaultOnStatic:[null]*/
-positionalWithNullDefaultOnStatic([/*[null]*/ parameter = null]) {
+/*member: positionalWithNullDefaultOnStatic:[null|powerset=1]*/
+positionalWithNullDefaultOnStatic([/*[null|powerset=1]*/ parameter = null]) {
return parameter;
}
-/*member: positionalWithOneDefaultOnStatic:[exact=JSUInt31]*/
-positionalWithOneDefaultOnStatic([/*[exact=JSUInt31]*/ parameter = 1]) {
+/*member: positionalWithOneDefaultOnStatic:[exact=JSUInt31|powerset=0]*/
+positionalWithOneDefaultOnStatic([
+ /*[exact=JSUInt31|powerset=0]*/ parameter = 1,
+]) {
return parameter;
}
diff --git a/pkg/compiler/test/inference/data/deferred_load.dart b/pkg/compiler/test/inference/data/deferred_load.dart
index e6c371e..2c8babb 100644
--- a/pkg/compiler/test/inference/data/deferred_load.dart
+++ b/pkg/compiler/test/inference/data/deferred_load.dart
@@ -4,10 +4,10 @@
import 'package:expect/expect.dart' deferred as expect;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
callLoadLibrary();
}
-/*member: callLoadLibrary:[exact=_Future]*/
+/*member: callLoadLibrary:[exact=_Future|powerset=0]*/
callLoadLibrary() => expect.loadLibrary();
diff --git a/pkg/compiler/test/inference/data/deferred_load_get.dart b/pkg/compiler/test/inference/data/deferred_load_get.dart
index 27a7a3a..8d7c40e 100644
--- a/pkg/compiler/test/inference/data/deferred_load_get.dart
+++ b/pkg/compiler/test/inference/data/deferred_load_get.dart
@@ -6,12 +6,12 @@
// Synthetic getter added by kernel.
-/*member: _#loadLibrary_expect:[exact=_Future]*/
+/*member: _#loadLibrary_expect:[exact=_Future|powerset=0]*/
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
tearOffLoadLibrary();
}
-/*member: tearOffLoadLibrary:[subclass=Closure]*/
+/*member: tearOffLoadLibrary:[subclass=Closure|powerset=0]*/
tearOffLoadLibrary() => expect.loadLibrary;
diff --git a/pkg/compiler/test/inference/data/dictionary_types.dart b/pkg/compiler/test/inference/data/dictionary_types.dart
index 464ec76..fd41375 100644
--- a/pkg/compiler/test/inference/data/dictionary_types.dart
+++ b/pkg/compiler/test/inference/data/dictionary_types.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
@@ -11,7 +11,7 @@
test5();
}
-/*member: dictionaryA1:Map([exact=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/
+/*member: dictionaryA1:Map([exact=JsLinkedHashMap|powerset=0], key: [null|subclass=Object|powerset=1], value: [null|subclass=Object|powerset=1], powerset: 0)*/
dynamic dictionaryA1 = {
'string': "aString",
'int': 42,
@@ -19,7 +19,7 @@
'list': [],
};
-/*member: dictionaryB1:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+/*member: dictionaryB1:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
dynamic dictionaryB1 = {
'string': "aString",
'int': 42,
@@ -27,48 +27,48 @@
'list': [],
};
-/*member: otherDict1:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
+/*member: otherDict1:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {stringTwo: Value([exact=JSString|powerset=0], value: "anotherString", powerset: 0), intTwo: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
dynamic otherDict1 = {'stringTwo': "anotherString", 'intTwo': 84};
-/*member: int1:[exact=JSUInt31]*/
+/*member: int1:[exact=JSUInt31|powerset=0]*/
dynamic int1 = 0;
-/*member: anotherInt1:[exact=JSUInt31]*/
+/*member: anotherInt1:[exact=JSUInt31|powerset=0]*/
dynamic anotherInt1 = 0;
-/*member: nullOrInt1:[null|exact=JSUInt31]*/
+/*member: nullOrInt1:[null|exact=JSUInt31|powerset=1]*/
dynamic nullOrInt1 = 0;
-/*member: dynamic1:[null|subclass=Object]*/
+/*member: dynamic1:[null|subclass=Object|powerset=1]*/
dynamic dynamic1 = 0;
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
test1() {
dictionaryA1
- . /*invoke: Map([exact=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/ addAll(
+ . /*invoke: Map([exact=JsLinkedHashMap|powerset=0], key: [null|subclass=Object|powerset=1], value: [null|subclass=Object|powerset=1], powerset: 0)*/ addAll(
otherDict1,
);
dictionaryB1
- . /*invoke: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/ addAll(
+ . /*invoke: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/ addAll(
{'stringTwo': "anotherString", 'intTwo': 84},
);
int1 =
dictionaryB1
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
['int'];
anotherInt1 =
otherDict1
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {stringTwo: Value([exact=JSString], value: "anotherString"), intTwo: [exact=JSUInt31]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {stringTwo: Value([exact=JSString|powerset=0], value: "anotherString", powerset: 0), intTwo: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
['intTwo'];
dynamic1 =
- dictionaryA1 /*Map([exact=JsLinkedHashMap], key: [null|subclass=Object], value: [null|subclass=Object])*/ ['int'];
+ dictionaryA1 /*Map([exact=JsLinkedHashMap|powerset=0], key: [null|subclass=Object|powerset=1], value: [null|subclass=Object|powerset=1], powerset: 0)*/ ['int'];
nullOrInt1 =
dictionaryB1
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), stringTwo: Value([null|exact=JSString], value: "anotherString"), intTwo: [null|exact=JSUInt31]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0), stringTwo: Value([null|exact=JSString|powerset=1], value: "anotherString", powerset: 1), intTwo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
['intTwo'];
}
-/*member: dictionaryA2:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+/*member: dictionaryA2:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
dynamic dictionaryA2 = {
'string': "aString",
'int': 42,
@@ -76,161 +76,161 @@
'list': [],
};
-/*member: dictionaryB2:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), intTwo: [exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+/*member: dictionaryB2:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [exact=JSUInt31|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
dynamic dictionaryB2 = {'string': "aString", 'intTwo': 42, 'list': []};
-/*member: nullOrInt2:[null|exact=JSUInt31]*/
+/*member: nullOrInt2:[null|exact=JSUInt31|powerset=1]*/
dynamic nullOrInt2 = 0;
-/*member: aString2:[exact=JSString]*/
+/*member: aString2:[exact=JSString|powerset=0]*/
dynamic aString2 = "";
-/*member: doubleOrNull2:[null|exact=JSNumNotInt]*/
+/*member: doubleOrNull2:[null|exact=JSNumNotInt|powerset=1]*/
dynamic doubleOrNull2 = 22.2;
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
test2() {
var union =
dictionaryA2
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
['foo']
? dictionaryA2
: dictionaryB2;
nullOrInt2 =
union
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSNumNotInt], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {int: [null|exact=JSUInt31|powerset=1], double: [null|exact=JSNumNotInt|powerset=1], string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [null|exact=JSUInt31|powerset=1], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
['intTwo'];
aString2 =
union
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSNumNotInt], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {int: [null|exact=JSUInt31|powerset=1], double: [null|exact=JSNumNotInt|powerset=1], string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [null|exact=JSUInt31|powerset=1], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
['string'];
doubleOrNull2 =
union
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {int: [null|exact=JSUInt31], double: [null|exact=JSNumNotInt], string: Value([exact=JSString], value: "aString"), intTwo: [null|exact=JSUInt31], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {int: [null|exact=JSUInt31|powerset=1], double: [null|exact=JSNumNotInt|powerset=1], string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), intTwo: [null|exact=JSUInt31|powerset=1], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
['double'];
}
-/*member: dictionary3:Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+/*member: dictionary3:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
dynamic dictionary3 = {
'string': "aString",
'int': 42,
'double': 21.5,
'list': [],
};
-/*member: keyD3:Value([exact=JSString], value: "double")*/
+/*member: keyD3:Value([exact=JSString|powerset=0], value: "double", powerset: 0)*/
dynamic keyD3 = 'double';
-/*member: keyI3:Value([exact=JSString], value: "int")*/
+/*member: keyI3:Value([exact=JSString|powerset=0], value: "int", powerset: 0)*/
dynamic keyI3 = 'int';
-/*member: keyN3:Value([exact=JSString], value: "notFoundInMap")*/
+/*member: keyN3:Value([exact=JSString|powerset=0], value: "notFoundInMap", powerset: 0)*/
dynamic keyN3 = 'notFoundInMap';
-/*member: knownDouble3:[exact=JSNumNotInt]*/
+/*member: knownDouble3:[exact=JSNumNotInt|powerset=0]*/
dynamic knownDouble3 = 42.2;
-/*member: intOrNull3:[null|exact=JSUInt31]*/
+/*member: intOrNull3:[null|exact=JSUInt31|powerset=1]*/
dynamic intOrNull3 =
dictionary3
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
[keyI3];
-/*member: justNull3:[null]*/
+/*member: justNull3:[null|powerset=1]*/
dynamic justNull3 =
dictionary3
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
[keyN3];
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
test3() {
knownDouble3 =
dictionary3
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString], [exact=JSUInt31]), map: {string: Value([exact=JSString], value: "aString"), int: [exact=JSUInt31], double: [exact=JSNumNotInt], list: Container([exact=JSExtendableArray], element: [empty], length: 0)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {string: Value([exact=JSString|powerset=0], value: "aString", powerset: 0), int: [exact=JSUInt31|powerset=0], double: [exact=JSNumNotInt|powerset=0], list: Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)}, powerset: 0)*/
[keyD3];
// ignore: unused_local_variable
var x = [intOrNull3, justNull3];
}
class A4 {
- /*member: A4.:[exact=A4]*/
+ /*member: A4.:[exact=A4|powerset=0]*/
A4();
- /*member: A4.foo4:[exact=JSUInt31]*/
+ /*member: A4.foo4:[exact=JSUInt31|powerset=0]*/
foo4(
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ value,
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {anInt: [exact=JSUInt31|powerset=0], aString: Value([exact=JSString|powerset=0], value: "theString", powerset: 0)}, powerset: 0)*/ value,
) {
- return value /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ ['anInt'];
+ return value /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {anInt: [exact=JSUInt31|powerset=0], aString: Value([exact=JSString|powerset=0], value: "theString", powerset: 0)}, powerset: 0)*/ ['anInt'];
}
}
class B4 {
- /*member: B4.:[exact=B4]*/
+ /*member: B4.:[exact=B4|powerset=0]*/
B4();
- /*member: B4.foo4:[exact=JSUInt31]*/
+ /*member: B4.foo4:[exact=JSUInt31|powerset=0]*/
foo4(
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSString], [exact=JSUInt31]), map: {anInt: [exact=JSUInt31], aString: Value([exact=JSString], value: "theString")})*/ value,
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), map: {anInt: [exact=JSUInt31|powerset=0], aString: Value([exact=JSString|powerset=0], value: "theString", powerset: 0)}, powerset: 0)*/ value,
) {
return 0;
}
}
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
test4() {
var dictionary = {'anInt': 42, 'aString': "theString"};
var it;
if ([true, false]
- /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/
[0]) {
it = A4();
} else {
it = B4();
}
print(
- it. /*invoke: Union([exact=A4], [exact=B4])*/ foo4(
+ it. /*invoke: Union([exact=A4|powerset=0], [exact=B4|powerset=0], powerset: 0)*/ foo4(
dictionary,
- ) /*invoke: [exact=JSUInt31]*/ +
+ ) /*invoke: [exact=JSUInt31|powerset=0]*/ +
2,
);
}
-/*member: dict5:Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+/*member: dict5:Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
dynamic dict5 = makeMap5([1, 2]);
-/*member: notInt5:[null|subclass=Object]*/
+/*member: notInt5:[null|subclass=Object|powerset=1]*/
dynamic notInt5 = 0;
-/*member: alsoNotInt5:[null|subclass=Object]*/
+/*member: alsoNotInt5:[null|subclass=Object|powerset=1]*/
dynamic alsoNotInt5 = 0;
-/*member: makeMap5:Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+/*member: makeMap5:Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 0)*/
makeMap5(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/ values,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/ values,
) {
return {
'moo':
values
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
[0],
'boo':
values
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
[1],
};
}
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
test5() {
dict5
- /*update: Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+ /*update: Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
['goo'] =
42;
var closure =
- /*Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+ /*Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
() => dict5;
notInt5 = closure()['boo'];
alsoNotInt5 =
dict5
- /*Map([null|exact=JsLinkedHashMap], key: [exact=JSString], value: [null|subclass=Object])*/
+ /*Map([null|exact=JsLinkedHashMap|powerset=1], key: [exact=JSString|powerset=0], value: [null|subclass=Object|powerset=1], powerset: 1)*/
['goo'];
print("$notInt5 and $alsoNotInt5.");
}
diff --git a/pkg/compiler/test/inference/data/do.dart b/pkg/compiler/test/inference/data/do.dart
index 3ca816d..6d4bc51 100644
--- a/pkg/compiler/test/inference/data/do.dart
+++ b/pkg/compiler/test/inference/data/do.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleDo();
doNull();
@@ -16,24 +16,24 @@
/// Simple int based do-while loop.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleDo:[null]*/
+/*member: simpleDo:[null|powerset=1]*/
simpleDo() {
var i = 0;
do {
- i = i /*invoke: [subclass=JSPositiveInt]*/ + 1;
- } while (i /*invoke: [subclass=JSPositiveInt]*/ < 10);
- i. /*invoke: [subclass=JSPositiveInt]*/ abs();
+ i = i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ + 1;
+ } while (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10);
+ i. /*invoke: [subclass=JSPositiveInt|powerset=0]*/ abs();
}
////////////////////////////////////////////////////////////////////////////////
/// Do-while loop with null test.
////////////////////////////////////////////////////////////////////////////////
-/*member: doNull:[exact=JSString]*/
+/*member: doNull:[exact=JSString|powerset=0]*/
doNull() {
var o;
do {
- o = o. /*invoke: [null|exact=JSString]*/ toString();
+ o = o. /*invoke: [null|exact=JSString|powerset=1]*/ toString();
} while (o == null);
return o;
}
@@ -42,12 +42,12 @@
/// Do-while loop with not-null test.
////////////////////////////////////////////////////////////////////////////////
-/*member: doNotNull:[exact=JSString]*/
+/*member: doNotNull:[exact=JSString|powerset=0]*/
doNotNull() {
var o = '';
do {
- o = o. /*invoke: [exact=JSString]*/ toString();
- } while (o /*invoke: [exact=JSString]*/ != null);
+ o = o. /*invoke: [exact=JSString|powerset=0]*/ toString();
+ } while (o /*invoke: [exact=JSString|powerset=0]*/ != null);
return o;
}
@@ -55,12 +55,12 @@
/// Do-while loop with null test known to be false.
////////////////////////////////////////////////////////////////////////////////
-/*member: doNullFalse:[exact=JSString]*/
+/*member: doNullFalse:[exact=JSString|powerset=0]*/
doNullFalse() {
var o = '';
do {
- o = o. /*invoke: [exact=JSString]*/ toString();
- } while (o /*invoke: [exact=JSString]*/ == null);
+ o = o. /*invoke: [exact=JSString|powerset=0]*/ toString();
+ } while (o /*invoke: [exact=JSString|powerset=0]*/ == null);
return o;
}
@@ -68,11 +68,11 @@
/// Do-while loop with not-null test known to be true.
////////////////////////////////////////////////////////////////////////////////
-/*member: doNotNullTrue:[exact=JSString]*/
+/*member: doNotNullTrue:[exact=JSString|powerset=0]*/
doNotNullTrue() {
var o = null;
do {
- o = o. /*invoke: [null|exact=JSString]*/ toString();
+ o = o. /*invoke: [null|exact=JSString|powerset=1]*/ toString();
} while (o != null);
return o;
}
@@ -81,31 +81,31 @@
/// Do-while loop with not-null test that mixes field accesses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:[null|exact=Class2]*/
+ /*member: Class1.field:[null|exact=Class2|powerset=1]*/
var field;
}
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:[null|exact=Class1]*/
+ /*member: Class2.field:[null|exact=Class1|powerset=1]*/
var field;
}
-/*member: _doUnion:Union(null, [exact=Class1], [exact=Class2])*/
-_doUnion(/*[exact=Class1]*/ o) {
+/*member: _doUnion:Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/
+_doUnion(/*[exact=Class1|powerset=0]*/ o) {
do {
- o = o. /*Union(null, [exact=Class1], [exact=Class2])*/ field;
+ o = o. /*Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ field;
} while (o != null);
return o;
}
-/*member: doUnion:[null]*/
+/*member: doUnion:[null|powerset=1]*/
doUnion() {
var c1 = Class1();
var c2 = Class2();
- c1. /*update: [exact=Class1]*/ field = c2;
- c2. /*update: [exact=Class2]*/ field = c1;
+ c1. /*update: [exact=Class1|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class2|powerset=0]*/ field = c1;
_doUnion(c1);
}
diff --git a/pkg/compiler/test/inference/data/enum.dart b/pkg/compiler/test/inference/data/enum.dart
index 04ba330..f4a9e47 100644
--- a/pkg/compiler/test/inference/data/enum.dart
+++ b/pkg/compiler/test/inference/data/enum.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
enumValue();
enumIndex();
@@ -17,7 +17,7 @@
enum Enum1 { a }
-/*member: enumValue:[exact=Enum1]*/
+/*member: enumValue:[exact=Enum1|powerset=0]*/
enumValue() => Enum1.a;
////////////////////////////////////////////////////////////////////////////////
@@ -26,8 +26,8 @@
enum Enum2 { a }
-/*member: enumIndex:[exact=JSUInt31]*/
-enumIndex() => Enum2.a. /*[exact=Enum2]*/ index;
+/*member: enumIndex:[exact=JSUInt31|powerset=0]*/
+enumIndex() => Enum2.a. /*[exact=Enum2|powerset=0]*/ index;
////////////////////////////////////////////////////////////////////////////////
/// Access an enum 'values' property.
@@ -35,7 +35,7 @@
enum Enum3 { a, b }
-/*member: enumValues:Container([exact=JSUnmodifiableArray], element: [exact=Enum3], length: 2)*/
+/*member: enumValues:Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=Enum3|powerset=0], length: 2, powerset: 0)*/
enumValues() => Enum3.values;
////////////////////////////////////////////////////////////////////////////////
@@ -44,9 +44,9 @@
enum Enum4 { a }
-/*member: enumToString1:[exact=JSString]*/
+/*member: enumToString1:[exact=JSString|powerset=0]*/
enumToString1() {
- return Enum4.a. /*invoke: [exact=Enum4]*/ toString();
+ return Enum4.a. /*invoke: [exact=Enum4|powerset=0]*/ toString();
}
////////////////////////////////////////////////////////////////////////////////
@@ -55,8 +55,8 @@
enum Enum5 { a, b }
-/*member: enumToString2:[exact=JSString]*/
+/*member: enumToString2:[exact=JSString|powerset=0]*/
enumToString2() {
- Enum5.b. /*invoke: [exact=Enum5]*/ toString();
- return Enum5.a. /*invoke: [exact=Enum5]*/ toString();
+ Enum5.b. /*invoke: [exact=Enum5|powerset=0]*/ toString();
+ return Enum5.a. /*invoke: [exact=Enum5|powerset=0]*/ toString();
}
diff --git a/pkg/compiler/test/inference/data/expose_this.dart b/pkg/compiler/test/inference/data/expose_this.dart
index 40e4bcf..c5e94ad 100644
--- a/pkg/compiler/test/inference/data/expose_this.dart
+++ b/pkg/compiler/test/inference/data/expose_this.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
exposeThis1();
exposeThis2();
@@ -17,24 +17,24 @@
// Expose this through a top level method invocation.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method1:[null]*/
-_method1(/*[exact=Class1]*/ o) {}
+/*member: _method1:[null|powerset=1]*/
+_method1(/*[exact=Class1|powerset=0]*/ o) {}
class Class1 {
// The inferred type of the field includes `null` because `this` has been
// exposed before its initialization.
- /*member: Class1.field:[null|exact=JSUInt31]*/
+ /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class1.:[exact=Class1]*/
+ /*member: Class1.:[exact=Class1|powerset=0]*/
Class1() {
_method1(this);
- /*update: [exact=Class1]*/
+ /*update: [exact=Class1|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
exposeThis1() => Class1();
////////////////////////////////////////////////////////////////////////////////
@@ -42,22 +42,22 @@
////////////////////////////////////////////////////////////////////////////////
class Class2 {
- /*member: Class2.field:[null|exact=JSUInt31]*/
+ /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class2.:[exact=Class2]*/
+ /*member: Class2.:[exact=Class2|powerset=0]*/
Class2() {
- /*invoke: [exact=Class2]*/
+ /*invoke: [exact=Class2|powerset=0]*/
method();
- /*update: [exact=Class2]*/
+ /*update: [exact=Class2|powerset=0]*/
field = 42;
}
- /*member: Class2.method:[null]*/
+ /*member: Class2.method:[null|powerset=1]*/
method() {}
}
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
exposeThis2() => Class2();
////////////////////////////////////////////////////////////////////////////////
@@ -65,40 +65,40 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- /*member: Class3.field:[exact=JSUInt31]*/
+ /*member: Class3.field:[exact=JSUInt31|powerset=0]*/
var field;
- /*member: Class3.:[exact=Class3]*/
+ /*member: Class3.:[exact=Class3|powerset=0]*/
Class3() {
this;
- /*update: [exact=Class3]*/
+ /*update: [exact=Class3|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis3:[exact=Class3]*/
+/*member: exposeThis3:[exact=Class3|powerset=0]*/
exposeThis3() => Class3();
////////////////////////////////////////////////////////////////////////////////
// Expose this through a static field assignment.
////////////////////////////////////////////////////////////////////////////////
-/*member: field1:[null|exact=Class4]*/
+/*member: field1:[null|exact=Class4|powerset=1]*/
var field1;
class Class4 {
- /*member: Class4.field:[null|exact=JSUInt31]*/
+ /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class4.:[exact=Class4]*/
+ /*member: Class4.:[exact=Class4|powerset=0]*/
Class4() {
field1 = this;
- /*update: [exact=Class4]*/
+ /*update: [exact=Class4|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
exposeThis4() => Class4();
////////////////////////////////////////////////////////////////////////////////
@@ -106,18 +106,18 @@
////////////////////////////////////////////////////////////////////////////////
class Class5 {
- /*member: Class5.field:[null|exact=JSUInt31]*/
+ /*member: Class5.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class5.:[exact=Class5]*/
- Class5(/*[null]*/ o) {
- o. /*update: [null]*/ field5 = this;
- /*update: [exact=Class5]*/
+ /*member: Class5.:[exact=Class5|powerset=0]*/
+ Class5(/*[null|powerset=1]*/ o) {
+ o. /*update: [null|powerset=1]*/ field5 = this;
+ /*update: [exact=Class5|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis5:[exact=Class5]*/
+/*member: exposeThis5:[exact=Class5|powerset=0]*/
exposeThis5() => Class5(null);
////////////////////////////////////////////////////////////////////////////////
@@ -125,20 +125,20 @@
////////////////////////////////////////////////////////////////////////////////
class Class6 {
- /*member: Class6.field:[null|exact=JSUInt31]*/
+ /*member: Class6.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class6.:[exact=Class6]*/
+ /*member: Class6.:[exact=Class6|powerset=0]*/
Class6() {
// ignore: UNUSED_LOCAL_VARIABLE
var o;
o = this;
- /*update: [exact=Class6]*/
+ /*update: [exact=Class6|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis6:[exact=Class6]*/
+/*member: exposeThis6:[exact=Class6|powerset=0]*/
exposeThis6() => Class6();
////////////////////////////////////////////////////////////////////////////////
@@ -146,17 +146,17 @@
////////////////////////////////////////////////////////////////////////////////
class Class7 {
- /*member: Class7.field:[null|exact=JSUInt31]*/
+ /*member: Class7.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class7.:[exact=Class7]*/
+ /*member: Class7.:[exact=Class7|powerset=0]*/
Class7() {
// ignore: UNUSED_LOCAL_VARIABLE
var o = this;
- /*update: [exact=Class7]*/
+ /*update: [exact=Class7|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis7:[exact=Class7]*/
+/*member: exposeThis7:[exact=Class7|powerset=0]*/
exposeThis7() => Class7();
diff --git a/pkg/compiler/test/inference/data/expose_this_closure.dart b/pkg/compiler/test/inference/data/expose_this_closure.dart
index 9fabc5b..4494b28 100644
--- a/pkg/compiler/test/inference/data/expose_this_closure.dart
+++ b/pkg/compiler/test/inference/data/expose_this_closure.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
exposeThis1();
exposeThis2();
@@ -17,16 +17,16 @@
class Class1 {
// The inferred type of the field does _not_ include `null` because `this`
// is _not_ been exposed.
- /*member: Class1.field1:[exact=JSUInt31]*/
+ /*member: Class1.field1:[exact=JSUInt31|powerset=0]*/
var field1;
- /*member: Class1.field2:[exact=JSUInt31]*/
+ /*member: Class1.field2:[exact=JSUInt31|powerset=0]*/
var field2;
- /*member: Class1.:[exact=Class1]*/
+ /*member: Class1.:[exact=Class1|powerset=0]*/
Class1() : field1 = 42, field2 = 87;
}
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
exposeThis1() => Class1();
////////////////////////////////////////////////////////////////////////////////
@@ -34,21 +34,21 @@
////////////////////////////////////////////////////////////////////////////////
class Class2 {
- /*member: Class2.field1:[exact=JSUInt31]*/
+ /*member: Class2.field1:[exact=JSUInt31|powerset=0]*/
var field1;
- /*member: Class2.field2:[exact=JSUInt31]*/
+ /*member: Class2.field2:[exact=JSUInt31|powerset=0]*/
var field2;
- /*member: Class2.:[exact=Class2]*/
+ /*member: Class2.:[exact=Class2|powerset=0]*/
Class2() {
- /*update: [exact=Class2]*/
+ /*update: [exact=Class2|powerset=0]*/
field1 = 42;
- /*update: [exact=Class2]*/
+ /*update: [exact=Class2|powerset=0]*/
field2 = 87;
}
}
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
exposeThis2() => Class2();
////////////////////////////////////////////////////////////////////////////////
@@ -56,21 +56,21 @@
////////////////////////////////////////////////////////////////////////////////
class Class4 {
- /*member: Class4.field1:[exact=JSUInt31]*/
+ /*member: Class4.field1:[exact=JSUInt31|powerset=0]*/
var field1;
- /*member: Class4.field2:[exact=JSUInt31]*/
+ /*member: Class4.field2:[exact=JSUInt31|powerset=0]*/
var field2;
- /*member: Class4.:[exact=Class4]*/
+ /*member: Class4.:[exact=Class4|powerset=0]*/
Class4() : field1 = 42, field2 = 87 {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
() {
return 42;
};
}
}
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
exposeThis4() => Class4();
////////////////////////////////////////////////////////////////////////////////
@@ -78,23 +78,23 @@
////////////////////////////////////////////////////////////////////////////////
class Class5 {
- /*member: Class5.field1:[exact=JSUInt31]*/
+ /*member: Class5.field1:[exact=JSUInt31|powerset=0]*/
var field1;
- /*member: Class5.field2:[null|exact=JSUInt31]*/
+ /*member: Class5.field2:[null|exact=JSUInt31|powerset=1]*/
var field2;
- /*member: Class5.:[exact=Class5]*/
+ /*member: Class5.:[exact=Class5|powerset=0]*/
Class5() {
- /*update: [exact=Class5]*/
+ /*update: [exact=Class5|powerset=0]*/
field1 = 42;
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
() {
return 42;
};
- /*update: [exact=Class5]*/
+ /*update: [exact=Class5|powerset=0]*/
field2 = 87;
}
}
-/*member: exposeThis5:[exact=Class5]*/
+/*member: exposeThis5:[exact=Class5|powerset=0]*/
exposeThis5() => Class5();
diff --git a/pkg/compiler/test/inference/data/expose_this_field.dart b/pkg/compiler/test/inference/data/expose_this_field.dart
index 120bb8e..4d2709e 100644
--- a/pkg/compiler/test/inference/data/expose_this_field.dart
+++ b/pkg/compiler/test/inference/data/expose_this_field.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
exposeThis1();
exposeThis2();
@@ -20,17 +20,17 @@
class Class1 {
// The inferred type of the field does _not_ include `null` because it has
// _not_ been read before its initialization.
- /*member: Class1.field:[exact=JSUInt31]*/
+ /*member: Class1.field:[exact=JSUInt31|powerset=0]*/
var field;
- /*member: Class1.:[exact=Class1]*/
+ /*member: Class1.:[exact=Class1|powerset=0]*/
Class1() {
- /*update: [exact=Class1]*/
+ /*update: [exact=Class1|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
exposeThis1() => Class1();
////////////////////////////////////////////////////////////////////////////////
@@ -40,17 +40,17 @@
class Class2 {
// The inferred type of the field includes `null` because it has been read
// before its initialization.
- /*member: Class2.field:[null]*/
+ /*member: Class2.field:[null|powerset=1]*/
var field;
- /*member: Class2.:[exact=Class2]*/
+ /*member: Class2.:[exact=Class2|powerset=0]*/
Class2() {
- /*update: [exact=Class2]*/
- field = /*[exact=Class2]*/ field;
+ /*update: [exact=Class2|powerset=0]*/
+ field = /*[exact=Class2|powerset=0]*/ field;
}
}
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
exposeThis2() => Class2();
////////////////////////////////////////////////////////////////////////////////
@@ -58,19 +58,19 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- /*member: Class3.field:[null|exact=JSUInt31]*/
+ /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class3.:[exact=Class3]*/
+ /*member: Class3.:[exact=Class3|powerset=0]*/
Class3() {
- /*update: [exact=Class3]*/
- field = /*[exact=Class3]*/ field;
- /*update: [exact=Class3]*/
+ /*update: [exact=Class3|powerset=0]*/
+ field = /*[exact=Class3|powerset=0]*/ field;
+ /*update: [exact=Class3|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis3:[exact=Class3]*/
+/*member: exposeThis3:[exact=Class3|powerset=0]*/
exposeThis3() => Class3();
////////////////////////////////////////////////////////////////////////////////
@@ -78,19 +78,19 @@
////////////////////////////////////////////////////////////////////////////////
class Class4 {
- /*member: Class4.field:[null|exact=JSUInt31]*/
+ /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class4.:[exact=Class4]*/
+ /*member: Class4.:[exact=Class4|powerset=0]*/
Class4() {
// ignore: UNUSED_LOCAL_VARIABLE
- var o = /*[exact=Class4]*/ field;
- /*update: [exact=Class4]*/
+ var o = /*[exact=Class4|powerset=0]*/ field;
+ /*update: [exact=Class4|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
exposeThis4() => Class4();
////////////////////////////////////////////////////////////////////////////////
@@ -98,19 +98,19 @@
////////////////////////////////////////////////////////////////////////////////
class Class5 {
- /*member: Class5.field:[null|subclass=JSPositiveInt]*/
+ /*member: Class5.field:[null|subclass=JSPositiveInt|powerset=1]*/
var field;
- /*member: Class5.:[exact=Class5]*/
+ /*member: Class5.:[exact=Class5|powerset=0]*/
Class5() {
- /*[exact=Class5]*/ /*update: [exact=Class5]*/
- field /*invoke: [null|subclass=JSPositiveInt]*/ ++;
- /*update: [exact=Class5]*/
+ /*[exact=Class5|powerset=0]*/ /*update: [exact=Class5|powerset=0]*/
+ field /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
+ /*update: [exact=Class5|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis5:[exact=Class5]*/
+/*member: exposeThis5:[exact=Class5|powerset=0]*/
exposeThis5() => Class5();
////////////////////////////////////////////////////////////////////////////////
@@ -118,19 +118,19 @@
////////////////////////////////////////////////////////////////////////////////
class Class6 {
- /*member: Class6.field:[subclass=JSPositiveInt]*/
+ /*member: Class6.field:[subclass=JSPositiveInt|powerset=0]*/
var field;
- /*member: Class6.:[exact=Class6]*/
+ /*member: Class6.:[exact=Class6|powerset=0]*/
Class6() {
- /*update: [exact=Class6]*/
+ /*update: [exact=Class6|powerset=0]*/
field = 42;
- /*[exact=Class6]*/ /*update: [exact=Class6]*/
- field /*invoke: [subclass=JSPositiveInt]*/ ++;
+ /*[exact=Class6|powerset=0]*/ /*update: [exact=Class6|powerset=0]*/
+ field /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
}
}
-/*member: exposeThis6:[exact=Class6]*/
+/*member: exposeThis6:[exact=Class6|powerset=0]*/
exposeThis6() => Class6();
////////////////////////////////////////////////////////////////////////////////
@@ -138,24 +138,24 @@
////////////////////////////////////////////////////////////////////////////////
class Class7 {
- /*member: Class7.field1:[null|exact=JSUInt31]*/
+ /*member: Class7.field1:[null|exact=JSUInt31|powerset=1]*/
var field1;
- /*member: Class7.field2:[null|exact=JSUInt31]*/
+ /*member: Class7.field2:[null|exact=JSUInt31|powerset=1]*/
var field2;
- /*member: Class7.:[exact=Class7]*/
+ /*member: Class7.:[exact=Class7|powerset=0]*/
Class7() {
// ignore: UNUSED_LOCAL_VARIABLE
- var o1 = /*[exact=Class7]*/ field1;
+ var o1 = /*[exact=Class7|powerset=0]*/ field1;
// ignore: UNUSED_LOCAL_VARIABLE
- var o2 = /*[exact=Class7]*/ field2;
- /*update: [exact=Class7]*/
+ var o2 = /*[exact=Class7|powerset=0]*/ field2;
+ /*update: [exact=Class7|powerset=0]*/
field1 = 42;
- /*update: [exact=Class7]*/
+ /*update: [exact=Class7|powerset=0]*/
field2 = 87;
}
}
-/*member: exposeThis7:[exact=Class7]*/
+/*member: exposeThis7:[exact=Class7|powerset=0]*/
exposeThis7() => Class7();
diff --git a/pkg/compiler/test/inference/data/expose_this_mask.dart b/pkg/compiler/test/inference/data/expose_this_mask.dart
index 88560c1..2f0cefa 100644
--- a/pkg/compiler/test/inference/data/expose_this_mask.dart
+++ b/pkg/compiler/test/inference/data/expose_this_mask.dart
@@ -5,7 +5,7 @@
/// Check that exposure of this is correctly restricted through the receiver
/// mask.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
otherGetter();
otherMethod();
@@ -23,27 +23,27 @@
////////////////////////////////////////////////////////////////////////////////
class Class1 {
- /*member: Class1.field1a:[exact=JSUInt31]*/
+ /*member: Class1.field1a:[exact=JSUInt31|powerset=0]*/
var field1a;
- /*member: Class1.field1b:[exact=JSUInt31]*/
+ /*member: Class1.field1b:[exact=JSUInt31|powerset=0]*/
var field1b;
- /*member: Class1.:[exact=Class1]*/
+ /*member: Class1.:[exact=Class1|powerset=0]*/
Class1() : field1a = 42 {
- /*update: [exact=Class1]*/
- field1b = /*[exact=Class1]*/ field1a;
+ /*update: [exact=Class1|powerset=0]*/
+ field1b = /*[exact=Class1|powerset=0]*/ field1a;
}
}
-/*member: OtherClass1.:[exact=OtherClass1]*/
+/*member: OtherClass1.:[exact=OtherClass1|powerset=0]*/
class OtherClass1 {
- /*member: OtherClass1.field1a:[null]*/
+ /*member: OtherClass1.field1a:[null|powerset=1]*/
get field1a => null;
}
-/*member: otherGetter:[null]*/
+/*member: otherGetter:[null|powerset=1]*/
otherGetter() {
- OtherClass1(). /*[exact=OtherClass1]*/ field1a;
+ OtherClass1(). /*[exact=OtherClass1|powerset=0]*/ field1a;
Class1();
}
@@ -52,27 +52,27 @@
////////////////////////////////////////////////////////////////////////////////
class Class2 {
- /*member: Class2.field2a:[exact=JSUInt31]*/
+ /*member: Class2.field2a:[exact=JSUInt31|powerset=0]*/
var field2a;
- /*member: Class2.field2b:[exact=JSUInt31]*/
+ /*member: Class2.field2b:[exact=JSUInt31|powerset=0]*/
var field2b;
- /*member: Class2.:[exact=Class2]*/
+ /*member: Class2.:[exact=Class2|powerset=0]*/
Class2() : field2a = 42 {
- /*update: [exact=Class2]*/
- field2b = /*[exact=Class2]*/ field2a;
+ /*update: [exact=Class2|powerset=0]*/
+ field2b = /*[exact=Class2|powerset=0]*/ field2a;
}
}
-/*member: OtherClass2.:[exact=OtherClass2]*/
+/*member: OtherClass2.:[exact=OtherClass2|powerset=0]*/
class OtherClass2 {
- /*member: OtherClass2.field2a:[null]*/
+ /*member: OtherClass2.field2a:[null|powerset=1]*/
field2a() {}
}
-/*member: otherMethod:[null]*/
+/*member: otherMethod:[null|powerset=1]*/
otherMethod() {
- OtherClass2(). /*[exact=OtherClass2]*/ field2a;
+ OtherClass2(). /*[exact=OtherClass2|powerset=0]*/ field2a;
Class2();
}
@@ -81,25 +81,25 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- /*member: Class3.field3a:[exact=JSUInt31]*/
+ /*member: Class3.field3a:[exact=JSUInt31|powerset=0]*/
var field3a;
- /*member: Class3.field3b:[exact=JSUInt31]*/
+ /*member: Class3.field3b:[exact=JSUInt31|powerset=0]*/
var field3b;
- /*member: Class3.:[exact=Class3]*/
+ /*member: Class3.:[exact=Class3|powerset=0]*/
Class3() : field3a = 42 {
- /*update: [exact=Class3]*/
- field3b = /*[exact=Class3]*/ field3a;
+ /*update: [exact=Class3|powerset=0]*/
+ field3b = /*[exact=Class3|powerset=0]*/ field3a;
}
}
-/*member: OtherClass3.:[exact=OtherClass3]*/
+/*member: OtherClass3.:[exact=OtherClass3|powerset=0]*/
class OtherClass3 {
- /*member: OtherClass3.field3a:[null]*/
+ /*member: OtherClass3.field3a:[null|powerset=1]*/
var field3a;
}
-/*member: otherField:[null]*/
+/*member: otherField:[null|powerset=1]*/
otherField() {
OtherClass3();
Class3();
@@ -109,26 +109,26 @@
// Read a field when a field in the superclass has the same name.
////////////////////////////////////////////////////////////////////////////////
-/*member: SuperClass5.:[exact=SuperClass5]*/
+/*member: SuperClass5.:[exact=SuperClass5|powerset=0]*/
class SuperClass5 {
- /*member: SuperClass5.field5a:[null|exact=JSUInt31]*/
+ /*member: SuperClass5.field5a:[null|exact=JSUInt31|powerset=1]*/
var field5a;
}
class Class5 extends SuperClass5 {
- /*member: Class5.field5a:[null|exact=JSUInt31]*/
+ /*member: Class5.field5a:[null|exact=JSUInt31|powerset=1]*/
var field5a;
- /*member: Class5.field5b:[null|exact=JSUInt31]*/
+ /*member: Class5.field5b:[null|exact=JSUInt31|powerset=1]*/
var field5b;
- /*member: Class5.:[exact=Class5]*/
+ /*member: Class5.:[exact=Class5|powerset=0]*/
Class5() : field5a = 42 {
- /*update: [exact=Class5]*/
- field5b = /*[exact=Class5]*/ field5a;
+ /*update: [exact=Class5|powerset=0]*/
+ field5b = /*[exact=Class5|powerset=0]*/ field5a;
}
}
-/*member: superclassField:[null]*/
+/*member: superclassField:[null|powerset=1]*/
superclassField() {
SuperClass5();
Class5();
@@ -139,27 +139,27 @@
////////////////////////////////////////////////////////////////////////////////
class Class4 {
- /*member: Class4.field4a:[null|exact=JSUInt31]*/
+ /*member: Class4.field4a:[null|exact=JSUInt31|powerset=1]*/
var field4a;
- /*member: Class4.field4b:[null|exact=JSUInt31]*/
+ /*member: Class4.field4b:[null|exact=JSUInt31|powerset=1]*/
var field4b;
- /*member: Class4.:[exact=Class4]*/
+ /*member: Class4.:[exact=Class4|powerset=0]*/
Class4() : field4a = 42 {
- /*update: [subclass=Class4]*/
- field4b = /*[subclass=Class4]*/ field4a;
+ /*update: [subclass=Class4|powerset=0]*/
+ field4b = /*[subclass=Class4|powerset=0]*/ field4a;
}
}
class SubClass4 extends Class4 {
- /*member: SubClass4.field4a:[null|exact=JSUInt31]*/
+ /*member: SubClass4.field4a:[null|exact=JSUInt31|powerset=1]*/
var field4a;
- /*member: SubClass4.:[exact=SubClass4]*/
+ /*member: SubClass4.:[exact=SubClass4|powerset=0]*/
SubClass4() : field4a = 42;
}
-/*member: subclassFieldRead:[null]*/
+/*member: subclassFieldRead:[null|powerset=1]*/
subclassFieldRead() {
Class4();
SubClass4();
@@ -170,33 +170,33 @@
////////////////////////////////////////////////////////////////////////////////
class Class6 {
- /*member: Class6.field6a:[exact=JSUInt31]*/
+ /*member: Class6.field6a:[exact=JSUInt31|powerset=0]*/
var field6a;
- /*member: Class6.field6b:[null|exact=JSUInt31]*/
+ /*member: Class6.field6b:[null|exact=JSUInt31|powerset=1]*/
var field6b;
- /*member: Class6.:[exact=Class6]*/
+ /*member: Class6.:[exact=Class6|powerset=0]*/
Class6() : field6a = 42 {
- /*update: [subclass=Class6]*/
- field6b = /*[subclass=Class6]*/ field6a;
+ /*update: [subclass=Class6|powerset=0]*/
+ field6b = /*[subclass=Class6|powerset=0]*/ field6a;
}
}
class SubClass6 extends Class6 {
- /*member: SubClass6.field6b:[null|exact=JSUInt31]*/
+ /*member: SubClass6.field6b:[null|exact=JSUInt31|powerset=1]*/
var field6b;
- /*member: SubClass6.:[exact=SubClass6]*/
+ /*member: SubClass6.:[exact=SubClass6|powerset=0]*/
SubClass6() : field6b = 42;
- /*member: SubClass6.access:[null|exact=JSUInt31]*/
+ /*member: SubClass6.access:[null|exact=JSUInt31|powerset=1]*/
get access => super.field6b;
}
-/*member: subclassFieldWrite:[null|exact=JSUInt31]*/
+/*member: subclassFieldWrite:[null|exact=JSUInt31|powerset=1]*/
subclassFieldWrite() {
Class6();
- return SubClass6(). /*[exact=SubClass6]*/ access;
+ return SubClass6(). /*[exact=SubClass6|powerset=0]*/ access;
}
////////////////////////////////////////////////////////////////////////////////
@@ -205,37 +205,37 @@
////////////////////////////////////////////////////////////////////////////////
class Class9 {
- /*member: Class9.field9a:[exact=JSUInt31]*/
+ /*member: Class9.field9a:[exact=JSUInt31|powerset=0]*/
var field9a;
- /*member: Class9.field9b:[null|exact=JSUInt31]*/
+ /*member: Class9.field9b:[null|exact=JSUInt31|powerset=1]*/
var field9b;
- /*member: Class9.:[exact=Class9]*/
+ /*member: Class9.:[exact=Class9|powerset=0]*/
Class9() : field9a = 42 {
- /*update: [subclass=Class9]*/
- field9b = /*[subclass=Class9]*/ field9a;
+ /*update: [subclass=Class9|powerset=0]*/
+ field9b = /*[subclass=Class9|powerset=0]*/ field9a;
}
}
class SubClass9a extends Class9 {
- /*member: SubClass9a.field9b:[null|exact=JSUInt31]*/
+ /*member: SubClass9a.field9b:[null|exact=JSUInt31|powerset=1]*/
var field9b;
- /*member: SubClass9a.:[exact=SubClass9a]*/
+ /*member: SubClass9a.:[exact=SubClass9a|powerset=0]*/
SubClass9a() : field9b = 42;
- /*member: SubClass9a.access:[null|exact=JSUInt31]*/
+ /*member: SubClass9a.access:[null|exact=JSUInt31|powerset=1]*/
get access => super.field9b;
}
-/*member: SubClass9b.:[exact=SubClass9b]*/
+/*member: SubClass9b.:[exact=SubClass9b|powerset=0]*/
class SubClass9b extends Class9 {}
-/*member: subclassesFieldWrite:[null|exact=JSUInt31]*/
+/*member: subclassesFieldWrite:[null|exact=JSUInt31|powerset=1]*/
subclassesFieldWrite() {
Class9();
SubClass9b();
- return SubClass9a(). /*[exact=SubClass9a]*/ access;
+ return SubClass9a(). /*[exact=SubClass9a|powerset=0]*/ access;
}
////////////////////////////////////////////////////////////////////////////////
@@ -243,26 +243,28 @@
////////////////////////////////////////////////////////////////////////////////
class Class7 {
- /*member: Class7.field7a:[exact=JSUInt31]*/
+ /*member: Class7.field7a:[exact=JSUInt31|powerset=0]*/
var field7a;
- /*member: Class7.field7b:[null|exact=JSUInt31]*/
+ /*member: Class7.field7b:[null|exact=JSUInt31|powerset=1]*/
var field7b;
- /*member: Class7.:[exact=Class7]*/
+ /*member: Class7.:[exact=Class7|powerset=0]*/
Class7() : field7a = 42 {
- field7b /*invoke: [subclass=Class7]*/ (/*[subclass=Class7]*/ field7a);
+ field7b /*invoke: [subclass=Class7|powerset=0]*/ (
+ /*[subclass=Class7|powerset=0]*/ field7a,
+ );
}
}
class SubClass7 extends Class7 {
- /*member: SubClass7.field7b:[null|exact=JSUInt31]*/
+ /*member: SubClass7.field7b:[null|exact=JSUInt31|powerset=1]*/
var field7b;
- /*member: SubClass7.:[exact=SubClass7]*/
+ /*member: SubClass7.:[exact=SubClass7|powerset=0]*/
SubClass7() : field7b = 42;
}
-/*member: subclassFieldInvoke:[null]*/
+/*member: subclassFieldInvoke:[null|powerset=1]*/
subclassFieldInvoke() {
Class7();
SubClass7();
@@ -273,34 +275,34 @@
////////////////////////////////////////////////////////////////////////////////
abstract class Class8 {
- /*member: Class8.field8:[null|exact=JSUInt31]*/
+ /*member: Class8.field8:[null|exact=JSUInt31|powerset=1]*/
var field8;
- /*member: Class8.:[subclass=Class8]*/
+ /*member: Class8.:[subclass=Class8|powerset=0]*/
Class8() {
- /*invoke: [subclass=Class8]*/
+ /*invoke: [subclass=Class8|powerset=0]*/
method8();
}
method8();
}
-/*member: SubClass8a.:[exact=SubClass8a]*/
+/*member: SubClass8a.:[exact=SubClass8a|powerset=0]*/
class SubClass8a extends Class8 {
- /*member: SubClass8a.method8:[null]*/
+ /*member: SubClass8a.method8:[null|powerset=1]*/
method8() {
- /*update: [exact=SubClass8a]*/
+ /*update: [exact=SubClass8a|powerset=0]*/
field8 = 42;
}
}
-/*member: SubClass8b.:[exact=SubClass8b]*/
+/*member: SubClass8b.:[exact=SubClass8b|powerset=0]*/
class SubClass8b extends Class8 {
- /*member: SubClass8b.method8:[null]*/
+ /*member: SubClass8b.method8:[null|powerset=1]*/
method8() {}
}
-/*member: subclassFieldSet:[null]*/
+/*member: subclassFieldSet:[null|powerset=1]*/
subclassFieldSet() {
SubClass8a();
SubClass8b();
diff --git a/pkg/compiler/test/inference/data/expose_this_super.dart b/pkg/compiler/test/inference/data/expose_this_super.dart
index d021ae4..5c57e4d 100644
--- a/pkg/compiler/test/inference/data/expose_this_super.dart
+++ b/pkg/compiler/test/inference/data/expose_this_super.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
exposeThis1();
exposeThis2();
@@ -14,102 +14,102 @@
// Expose this through super invocation.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super1.:[exact=Class1]*/
+/*member: Super1.:[exact=Class1|powerset=0]*/
abstract class Super1 {
- /*member: Super1.method:[null]*/
+ /*member: Super1.method:[null|powerset=1]*/
method() {}
}
class Class1 extends Super1 {
// The inferred type of the field includes `null` because `this` has been
// exposed before its initialization.
- /*member: Class1.field:[null|exact=JSUInt31]*/
+ /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class1.:[exact=Class1]*/
+ /*member: Class1.:[exact=Class1|powerset=0]*/
Class1() {
super.method();
- /*update: [exact=Class1]*/
+ /*update: [exact=Class1|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis1:[exact=Class1]*/
+/*member: exposeThis1:[exact=Class1|powerset=0]*/
exposeThis1() => Class1();
////////////////////////////////////////////////////////////////////////////////
// Expose this through super access.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super2.:[exact=Class2]*/
+/*member: Super2.:[exact=Class2|powerset=0]*/
abstract class Super2 {
- /*member: Super2.getter:[null]*/
+ /*member: Super2.getter:[null|powerset=1]*/
get getter => null;
}
class Class2 extends Super2 {
- /*member: Class2.field:[null|exact=JSUInt31]*/
+ /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class2.:[exact=Class2]*/
+ /*member: Class2.:[exact=Class2|powerset=0]*/
Class2() {
super.getter;
- /*update: [exact=Class2]*/
+ /*update: [exact=Class2|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis2:[exact=Class2]*/
+/*member: exposeThis2:[exact=Class2|powerset=0]*/
exposeThis2() => Class2();
////////////////////////////////////////////////////////////////////////////////
// Expose this through super access.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super3.:[exact=Class3]*/
+/*member: Super3.:[exact=Class3|powerset=0]*/
abstract class Super3 {
- set setter(/*[null]*/ o) {}
+ set setter(/*[null|powerset=1]*/ o) {}
}
class Class3 extends Super3 {
- /*member: Class3.field:[null|exact=JSUInt31]*/
+ /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class3.:[exact=Class3]*/
+ /*member: Class3.:[exact=Class3|powerset=0]*/
Class3() {
super.setter = null;
- /*update: [exact=Class3]*/
+ /*update: [exact=Class3|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis3:[exact=Class3]*/
+/*member: exposeThis3:[exact=Class3|powerset=0]*/
exposeThis3() => Class3();
////////////////////////////////////////////////////////////////////////////////
// Expose this in the constructor of a super class.
////////////////////////////////////////////////////////////////////////////////
-/*member: field4:[null|exact=Class4]*/
+/*member: field4:[null|exact=Class4|powerset=1]*/
var field4;
abstract class Super4 {
- /*member: Super4.:[exact=Class4]*/
+ /*member: Super4.:[exact=Class4|powerset=0]*/
Super4() {
field4 = this;
}
}
class Class4 extends Super4 {
- /*member: Class4.field:[null|exact=JSUInt31]*/
+ /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class4.:[exact=Class4]*/
+ /*member: Class4.:[exact=Class4|powerset=0]*/
Class4() {
- /*update: [exact=Class4]*/
+ /*update: [exact=Class4|powerset=0]*/
field = 42;
}
}
-/*member: exposeThis4:[exact=Class4]*/
+/*member: exposeThis4:[exact=Class4|powerset=0]*/
exposeThis4() => Class4();
diff --git a/pkg/compiler/test/inference/data/factory.dart b/pkg/compiler/test/inference/data/factory.dart
index da7f9a2..f91b6cd 100644
--- a/pkg/compiler/test/inference/data/factory.dart
+++ b/pkg/compiler/test/inference/data/factory.dart
@@ -3,33 +3,33 @@
// BSD-style license that can be found in the LICENSE file.
class A {
- /*member: A.generative:[exact=A]*/
+ /*member: A.generative:[exact=A|powerset=0]*/
A.generative();
factory A.redirect() = B;
- /*member: A.fact:[exact=C]*/
+ /*member: A.fact:[exact=C|powerset=0]*/
factory A.fact() => C();
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B implements A {}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C implements A {}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
createGenerative();
createRedirecting();
createFactory();
}
-/*member: createGenerative:[exact=A]*/
+/*member: createGenerative:[exact=A|powerset=0]*/
createGenerative() => A.generative();
-/*member: createRedirecting:[exact=B]*/
+/*member: createRedirecting:[exact=B|powerset=0]*/
createRedirecting() => A.redirect();
-/*member: createFactory:[exact=C]*/
+/*member: createFactory:[exact=C|powerset=0]*/
createFactory() => A.fact();
diff --git a/pkg/compiler/test/inference/data/field_type.dart b/pkg/compiler/test/inference/data/field_type.dart
index a542ceb..f2417c4 100644
--- a/pkg/compiler/test/inference/data/field_type.dart
+++ b/pkg/compiler/test/inference/data/field_type.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
@@ -36,314 +36,315 @@
test30();
}
-/*member: A1.:[exact=A1]*/
+/*member: A1.:[exact=A1|powerset=0]*/
class A1 {
- /*member: A1.f1:[null]*/
+ /*member: A1.f1:[null|powerset=1]*/
int? f1;
}
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
test1() {
A1();
}
-/*member: A2.:[exact=A2]*/
+/*member: A2.:[exact=A2|powerset=0]*/
class A2 {
- /*member: A2.f2a:[null]*/
+ /*member: A2.f2a:[null|powerset=1]*/
int? f2a;
- /*member: A2.f2b:[exact=JSUInt31]*/
+ /*member: A2.f2b:[exact=JSUInt31|powerset=0]*/
int f2b = 1;
}
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
test2() {
A2();
}
class A3 {
- /*member: A3.f3a:[exact=JSUInt31]*/
+ /*member: A3.f3a:[exact=JSUInt31|powerset=0]*/
int f3a;
- /*member: A3.f3b:[null|exact=JSUInt31]*/
+ /*member: A3.f3b:[null|exact=JSUInt31|powerset=1]*/
int? f3b;
- /*member: A3.:[exact=A3]*/
+ /*member: A3.:[exact=A3|powerset=0]*/
A3() : f3a = 1;
}
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
test3() {
- A3(). /*update: [exact=A3]*/ f3b = 2;
+ A3(). /*update: [exact=A3|powerset=0]*/ f3b = 2;
}
class A4 {
- /*member: A4.f4a:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: A4.f4a:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f4a;
- /*member: A4.f4b:Value([null|exact=JSString], value: "a")*/
+ /*member: A4.f4b:Value([null|exact=JSString|powerset=1], value: "a", powerset: 1)*/
dynamic f4b;
- /*member: A4.:[exact=A4]*/
+ /*member: A4.:[exact=A4|powerset=0]*/
A4() : f4a = 1;
}
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
test4() {
A4 a = A4();
- a. /*update: [exact=A4]*/ f4a = "a";
- a. /*update: [exact=A4]*/ f4b = "a";
+ a. /*update: [exact=A4|powerset=0]*/ f4a = "a";
+ a. /*update: [exact=A4|powerset=0]*/ f4b = "a";
}
class A5 {
- /*member: A5.f5a:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: A5.f5a:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f5a = 1;
- /*member: A5.f5b:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: A5.f5b:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f5b = 1;
- /*member: A5.:[exact=A5]*/
- A5(/*[exact=JSBool]*/ x) {
- /*update: [exact=A5]*/
+ /*member: A5.:[exact=A5|powerset=0]*/
+ A5(/*[exact=JSBool|powerset=0]*/ x) {
+ /*update: [exact=A5|powerset=0]*/
f5a = "1";
if (x) {
- /*update: [exact=A5]*/
+ /*update: [exact=A5|powerset=0]*/
f5b = "1";
} else {
- /*update: [exact=A5]*/
+ /*update: [exact=A5|powerset=0]*/
f5b = "2";
}
}
}
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
test5() {
A5(true);
A5(false);
}
class A6 {
- /*member: A6.f6a:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: A6.f6a:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f6a = 1;
- /*member: A6.f6b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+ /*member: A6.f6b:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f6b = 1;
- /*member: A6.:[exact=A6]*/
- A6(/*[exact=JSBool]*/ x) {
- /*update: [exact=A6]*/
+ /*member: A6.:[exact=A6|powerset=0]*/
+ A6(/*[exact=JSBool|powerset=0]*/ x) {
+ /*update: [exact=A6|powerset=0]*/
f6a = "1";
if (x) {
- /*update: [exact=A6]*/
+ /*update: [exact=A6|powerset=0]*/
f6b = "1";
} else {
- /*update: [exact=A6]*/
+ /*update: [exact=A6|powerset=0]*/
f6b = "2";
}
if (x) {
- /*update: [exact=A6]*/
+ /*update: [exact=A6|powerset=0]*/
f6b = [];
} else {
- /*update: [exact=A6]*/
+ /*update: [exact=A6|powerset=0]*/
f6b = [];
}
}
}
-/*member: test6:[null]*/
+/*member: test6:[null|powerset=1]*/
test6() {
A6(true);
A6(false);
}
class A7 {
- /*member: A7.f7a:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+ /*member: A7.f7a:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f7a = 1;
- /*member: A7.f7b:Union([exact=JSExtendableArray], [exact=JSString], [exact=JSUInt31])*/
+ /*member: A7.f7b:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic f7b = 1;
- /*member: A7.:[exact=A7]*/
- A7(/*[exact=JSBool]*/ x) {
- /*update: [exact=A7]*/
+ /*member: A7.:[exact=A7|powerset=0]*/
+ A7(/*[exact=JSBool|powerset=0]*/ x) {
+ /*update: [exact=A7|powerset=0]*/
f7a = "1";
if (x) {
- /*update: [exact=A7]*/
+ /*update: [exact=A7|powerset=0]*/
f7b = "1";
} else {
- /*update: [exact=A7]*/
+ /*update: [exact=A7|powerset=0]*/
f7b = "2";
}
if (x) {
- /*update: [exact=A7]*/
+ /*update: [exact=A7|powerset=0]*/
f7a = [];
- /*update: [exact=A7]*/
+ /*update: [exact=A7|powerset=0]*/
f7b = [];
} else {
- /*update: [exact=A7]*/
+ /*update: [exact=A7|powerset=0]*/
f7b = [];
}
}
}
-/*member: test7:[null]*/
+/*member: test7:[null|powerset=1]*/
test7() {
A7(true);
A7(false);
}
class A8 {
- /*member: A8.f8:Value([null|exact=JSString], value: "1")*/
+ /*member: A8.f8:Value([null|exact=JSString|powerset=1], value: "1", powerset: 1)*/
dynamic f8;
- /*member: A8.:[exact=A8]*/
- A8(/*[exact=JSBool]*/ x) {
+ /*member: A8.:[exact=A8|powerset=0]*/
+ A8(/*[exact=JSBool|powerset=0]*/ x) {
if (x) {
- /*update: [exact=A8]*/
+ /*update: [exact=A8|powerset=0]*/
f8 = "1";
} else {}
}
}
-/*member: test8:[null]*/
+/*member: test8:[null|powerset=1]*/
test8() {
A8(true);
A8(false);
}
class A9 {
- /*member: A9.f9:Value([null|exact=JSString], value: "1")*/
+ /*member: A9.f9:Value([null|exact=JSString|powerset=1], value: "1", powerset: 1)*/
dynamic f9;
- /*member: A9.:[exact=A9]*/
- A9(/*[exact=JSBool]*/ x) {
+ /*member: A9.:[exact=A9|powerset=0]*/
+ A9(/*[exact=JSBool|powerset=0]*/ x) {
if (x) {
} else {
- /*update: [exact=A9]*/
+ /*update: [exact=A9|powerset=0]*/
f9 = "1";
}
}
}
-/*member: test9:[null]*/
+/*member: test9:[null|powerset=1]*/
test9() {
A9(true);
A9(false);
}
class A10 {
- /*member: A10.f10:[exact=JSUInt31]*/
+ /*member: A10.f10:[exact=JSUInt31|powerset=0]*/
int? f10;
- /*member: A10.:[exact=A10]*/
+ /*member: A10.:[exact=A10|powerset=0]*/
A10() {
- /*update: [exact=A10]*/
+ /*update: [exact=A10|powerset=0]*/
f10 = 1;
}
- /*member: A10.m10:[subclass=JSUInt32]*/
- m10() => /*[exact=A10]*/ f10! /*invoke: [exact=JSUInt31]*/ + 1;
+ /*member: A10.m10:[subclass=JSUInt32|powerset=0]*/
+ m10() => /*[exact=A10|powerset=0]*/
+ f10! /*invoke: [exact=JSUInt31|powerset=0]*/ + 1;
}
-/*member: f10:[null]*/
-void f10(/*[null]*/ x) {
- x. /*update: [null]*/ f10 = "2";
+/*member: f10:[null|powerset=1]*/
+void f10(/*[null|powerset=1]*/ x) {
+ x. /*update: [null|powerset=1]*/ f10 = "2";
}
-/*member: test10:[null]*/
+/*member: test10:[null|powerset=1]*/
test10() {
A10? a;
f10(a);
a = A10();
- a. /*invoke: [exact=A10]*/ m10();
+ a. /*invoke: [exact=A10|powerset=0]*/ m10();
}
-/*member: S11.:[exact=S11]*/
+/*member: S11.:[exact=S11|powerset=0]*/
class S11 {
- /*member: S11.fs11:[exact=JSUInt31]*/
+ /*member: S11.fs11:[exact=JSUInt31|powerset=0]*/
int fs11 = 1;
- /*member: S11.ms11:[null]*/
+ /*member: S11.ms11:[null|powerset=1]*/
ms11() {
- /*update: [exact=A11]*/
+ /*update: [exact=A11|powerset=0]*/
fs11 = 1;
}
}
-/*member: A11.:[exact=A11]*/
+/*member: A11.:[exact=A11|powerset=0]*/
class A11 extends S11 {
- /*member: A11.m11:[null]*/
+ /*member: A11.m11:[null|powerset=1]*/
m11() {
- /*invoke: [exact=A11]*/
+ /*invoke: [exact=A11|powerset=0]*/
ms11();
}
}
-/*member: test11:[null]*/
+/*member: test11:[null|powerset=1]*/
test11() {
A11 a = A11();
- a. /*invoke: [exact=A11]*/ m11();
+ a. /*invoke: [exact=A11|powerset=0]*/ m11();
}
class S12 {
- /*member: S12.fs12:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: S12.fs12:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic fs12 = 1;
- /*member: S12.:[exact=S12]*/
+ /*member: S12.:[exact=S12|powerset=0]*/
S12() {
- /*update: [exact=A12]*/
+ /*update: [exact=A12|powerset=0]*/
fs12 = "2";
}
}
-/*member: A12.:[exact=A12]*/
+/*member: A12.:[exact=A12|powerset=0]*/
class A12 extends S12 {}
-/*member: test12:[null]*/
+/*member: test12:[null|powerset=1]*/
test12() {
A12();
}
class S13 {
- /*member: S13.fs13:[exact=JSUInt31]*/
+ /*member: S13.fs13:[exact=JSUInt31|powerset=0]*/
int? fs13;
- /*member: S13.:[exact=S13]*/
+ /*member: S13.:[exact=S13|powerset=0]*/
S13() {
- /*update: [exact=A13]*/
+ /*update: [exact=A13|powerset=0]*/
fs13 = 1;
}
}
class A13 extends S13 {
- /*member: A13.:[exact=A13]*/
+ /*member: A13.:[exact=A13|powerset=0]*/
A13() {
- /*update: [exact=A13]*/
+ /*update: [exact=A13|powerset=0]*/
fs13 = 1;
}
}
-/*member: test13:[null]*/
+/*member: test13:[null|powerset=1]*/
test13() {
A13();
}
class A14 {
- /*member: A14.f14:[exact=JSUInt31]*/
+ /*member: A14.f14:[exact=JSUInt31|powerset=0]*/
var f14;
- /*member: A14.:[exact=A14]*/
+ /*member: A14.:[exact=A14|powerset=0]*/
A14() {
- /*update: [exact=A14]*/
+ /*update: [exact=A14|powerset=0]*/
f14 = 1;
}
- /*member: A14.other:[exact=A14]*/
+ /*member: A14.other:[exact=A14|powerset=0]*/
A14.other() {
- /*update: [exact=A14]*/
+ /*update: [exact=A14|powerset=0]*/
f14 = 2;
}
}
-/*member: test14:[null]*/
+/*member: test14:[null|powerset=1]*/
test14() {
// ignore: unused_local_variable
A14 a = A14();
@@ -351,23 +352,23 @@
}
class A15 {
- /*member: A15.f15:Union([exact=JSExtendableArray], [exact=JSString])*/
+ /*member: A15.f15:Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
var f15;
- /*member: A15.:[exact=A15]*/
+ /*member: A15.:[exact=A15|powerset=0]*/
A15() {
- /*update: [exact=A15]*/
+ /*update: [exact=A15|powerset=0]*/
f15 = "1";
}
- /*member: A15.other:[exact=A15]*/
+ /*member: A15.other:[exact=A15|powerset=0]*/
A15.other() {
- /*update: [exact=A15]*/
+ /*update: [exact=A15|powerset=0]*/
f15 = [];
}
}
-/*member: test15:[null]*/
+/*member: test15:[null|powerset=1]*/
test15() {
// ignore: unused_local_variable
A15 a = A15();
@@ -378,35 +379,36 @@
// TODO(johnniwinther): Investigate why these include `null`. The ast version
// didn't.
- /*member: A16.f16:Union(null, [exact=JSString], [exact=JSUInt31])*/
+ /*member: A16.f16:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
var f16;
- /*member: A16.:[exact=A16]*/
+ /*member: A16.:[exact=A16|powerset=0]*/
A16() {
- /*update: [exact=A16]*/
+ /*update: [exact=A16|powerset=0]*/
f16 = "1";
}
- /*member: A16.other:[exact=A16]*/
+ /*member: A16.other:[exact=A16|powerset=0]*/
A16.other() : f16 = 1 {}
}
-/*member: test16:[null]*/
+/*member: test16:[null|powerset=1]*/
test16() {
// ignore: unused_local_variable
A16 a = A16();
a = A16.other();
}
-/*member: g17:[exact=JSUInt31]*/
-g17([/*[exact=A17]*/ p]) => p. /*update: [exact=A17]*/ f17 = 1;
+/*member: g17:[exact=JSUInt31|powerset=0]*/
+g17([/*[exact=A17|powerset=0]*/ p]) =>
+ p. /*update: [exact=A17|powerset=0]*/ f17 = 1;
class A17 {
- /*member: A17.f17:[null|exact=JSUInt31]*/
+ /*member: A17.f17:[null|exact=JSUInt31|powerset=1]*/
var f17;
- /*member: A17.:[exact=A17]*/
- A17(/*[exact=JSBool]*/ x) {
+ /*member: A17.:[exact=A17|powerset=0]*/
+ A17(/*[exact=JSBool|powerset=0]*/ x) {
var a;
if (x) {
a = this;
@@ -417,94 +419,94 @@
}
}
-/*member: test17:[null]*/
+/*member: test17:[null|powerset=1]*/
test17() {
A17(true);
A17(false);
}
class A18 {
- /*member: A18.f18a:[exact=JSUInt31]*/
+ /*member: A18.f18a:[exact=JSUInt31|powerset=0]*/
var f18a;
- /*member: A18.f18b:Value([exact=JSString], value: "1")*/
+ /*member: A18.f18b:Value([exact=JSString|powerset=0], value: "1", powerset: 0)*/
var f18b;
- /*member: A18.f18c:Union(null, [exact=A18], [exact=JSUInt31])*/
+ /*member: A18.f18c:Union(null, [exact=A18|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
var f18c;
- /*member: A18.:[exact=A18]*/
- A18(/*[exact=JSBool]*/ x) {
- /*update: [exact=A18]*/
+ /*member: A18.:[exact=A18|powerset=0]*/
+ A18(/*[exact=JSBool|powerset=0]*/ x) {
+ /*update: [exact=A18|powerset=0]*/
f18a = 1;
var a;
if (x) {
- /*update: [exact=A18]*/
+ /*update: [exact=A18|powerset=0]*/
f18b = "1";
a = this;
} else {
a = 1;
- /*update: [exact=A18]*/
+ /*update: [exact=A18|powerset=0]*/
f18b = "1";
}
- /*update: [exact=A18]*/
+ /*update: [exact=A18|powerset=0]*/
f18c = a;
}
}
-/*member: test18:[null]*/
+/*member: test18:[null|powerset=1]*/
test18() {
A18(true);
A18(false);
}
class A19 {
- /*member: A19.f19a:[exact=JSUInt31]*/
+ /*member: A19.f19a:[exact=JSUInt31|powerset=0]*/
var f19a;
- /*member: A19.f19b:Value([exact=JSString], value: "1")*/
+ /*member: A19.f19b:Value([exact=JSString|powerset=0], value: "1", powerset: 0)*/
var f19b;
- /*member: A19.f19c:Union(null, [exact=A19], [exact=JSUInt31])*/
+ /*member: A19.f19c:Union(null, [exact=A19|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
var f19c;
- /*member: A19.:[exact=A19]*/
- A19(/*[exact=JSBool]*/ x) {
- /*update: [exact=A19]*/
+ /*member: A19.:[exact=A19|powerset=0]*/
+ A19(/*[exact=JSBool|powerset=0]*/ x) {
+ /*update: [exact=A19|powerset=0]*/
f19a = 1;
var a;
if (x) {
- /*update: [exact=A19]*/
+ /*update: [exact=A19|powerset=0]*/
f19b = "1";
a = this;
} else {
a = 1;
- /*update: [exact=A19]*/
+ /*update: [exact=A19|powerset=0]*/
f19b = "1";
}
- /*update: [exact=A19]*/
+ /*update: [exact=A19|powerset=0]*/
f19c = a;
a();
}
}
-/*member: test19:[null]*/
+/*member: test19:[null|powerset=1]*/
test19() {
A19(true);
A19(false);
}
class A20 {
- /*member: A20.f20:[null]*/
+ /*member: A20.f20:[null|powerset=1]*/
var f20;
- /*member: A20.:[exact=A20]*/
+ /*member: A20.:[exact=A20|powerset=0]*/
A20() {
dynamic a = this;
- /*iterator: [exact=A20]*/
- /*current: [empty]*/
- /*moveNext: [empty]*/
- for ( /*update: [exact=A20]*/ f20 in a) {}
+ /*iterator: [exact=A20|powerset=0]*/
+ /*current: [empty|powerset=0]*/
+ /*moveNext: [empty|powerset=0]*/
+ for ( /*update: [exact=A20|powerset=0]*/ f20 in a) {}
}
get iterator => this;
@@ -514,296 +516,297 @@
bool moveNext() => false;
}
-/*member: test20:[null]*/
+/*member: test20:[null|powerset=1]*/
test20() {
A20();
}
class A20b extends Iterable implements Iterator {
- /*member: A20b.f20b:[null|exact=JSUInt31]*/
+ /*member: A20b.f20b:[null|exact=JSUInt31|powerset=1]*/
var f20b;
- /*member: A20b.:[exact=A20b]*/
+ /*member: A20b.:[exact=A20b|powerset=0]*/
A20b() {
dynamic a = this;
- /*iterator: [exact=A20b]*/
- /*current: [exact=A20b]*/
- /*moveNext: [exact=A20b]*/
- for ( /*update: [exact=A20b]*/ f20b in a) {}
+ /*iterator: [exact=A20b|powerset=0]*/
+ /*current: [exact=A20b|powerset=0]*/
+ /*moveNext: [exact=A20b|powerset=0]*/
+ for ( /*update: [exact=A20b|powerset=0]*/ f20b in a) {}
}
- /*member: A20b.iterator:[exact=A20b]*/
+ /*member: A20b.iterator:[exact=A20b|powerset=0]*/
@override
get iterator => this;
- /*member: A20b.current:[exact=JSUInt31]*/
+ /*member: A20b.current:[exact=JSUInt31|powerset=0]*/
@override
get current => 42;
- /*member: A20b.moveNext:Value([exact=JSBool], value: false)*/
+ /*member: A20b.moveNext:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
@override
bool moveNext() => false;
}
-/*member: test20b:[null]*/
+/*member: test20b:[null|powerset=1]*/
test20b() {
A20b();
}
class A22 {
- /*member: A22.f22a:[exact=JSUInt31]*/
+ /*member: A22.f22a:[exact=JSUInt31|powerset=0]*/
var f22a;
- /*member: A22.f22b:[exact=JSUInt31]*/
+ /*member: A22.f22b:[exact=JSUInt31|powerset=0]*/
var f22b;
- /*member: A22.f22c:Value([null|exact=JSString], value: "foo")*/
+ /*member: A22.f22c:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
var f22c;
- /*member: A22.:[exact=A22]*/
+ /*member: A22.:[exact=A22|powerset=0]*/
A22() {
- /*update: [exact=A22]*/
+ /*update: [exact=A22|powerset=0]*/
f22a = 42;
- /*update: [exact=A22]*/
- f22b = /*[exact=A22]*/
+ /*update: [exact=A22|powerset=0]*/
+ f22b = /*[exact=A22|powerset=0]*/
f22a == null
? 42
- : /*[exact=A22]*/ f22c == null
+ : /*[exact=A22|powerset=0]*/ f22c == null
? 41
: 43;
- /*update: [exact=A22]*/
+ /*update: [exact=A22|powerset=0]*/
f22c = 'foo';
}
}
-/*member: test22:[null]*/
+/*member: test22:[null|powerset=1]*/
test22() {
A22();
}
class A23 {
- /*member: A23.f23a:[null|exact=JSUInt31]*/
+ /*member: A23.f23a:[null|exact=JSUInt31|powerset=1]*/
int? f23a = 42;
- /*member: A23.f23b:[null|exact=JSUInt31]*/
+ /*member: A23.f23b:[null|exact=JSUInt31|powerset=1]*/
int? f23b = 42;
- /*member: A23.f23c:[null|exact=JSUInt31]*/
+ /*member: A23.f23c:[null|exact=JSUInt31|powerset=1]*/
int? f23c = 42;
- /*member: A23.f23d:[null|exact=JSUInt31]*/
+ /*member: A23.f23d:[null|exact=JSUInt31|powerset=1]*/
int? f23d = 42;
- /*member: A23.:[exact=A23]*/
+ /*member: A23.:[exact=A23|powerset=0]*/
A23() {
// Test string interpolation.
- '${ /*update: [exact=A23]*/ f23a = null}';
+ '${ /*update: [exact=A23|powerset=0]*/ f23a = null}';
// Test string juxtaposition.
''
- '${ /*update: [exact=A23]*/ f23b = null}';
+ '${ /*update: [exact=A23|powerset=0]*/ f23b = null}';
// Test list literal.
- [/*update: [exact=A23]*/ f23c = null];
+ [/*update: [exact=A23|powerset=0]*/ f23c = null];
// Test map literal.
// ignore: unused_local_variable
- var c = {'foo': /*update: [exact=A23]*/ f23d = null};
+ var c = {'foo': /*update: [exact=A23|powerset=0]*/ f23d = null};
}
}
-/*member: test23:[null]*/
+/*member: test23:[null|powerset=1]*/
test23() {
A23();
}
class A24 {
- /*member: A24.f24a:[subclass=JSPositiveInt]*/
+ /*member: A24.f24a:[subclass=JSPositiveInt|powerset=0]*/
var f24a = 42;
- /*member: A24.f24b:[subclass=JSPositiveInt]*/
+ /*member: A24.f24b:[subclass=JSPositiveInt|powerset=0]*/
var f24b = 42;
- /*member: A24.f24c:[exact=JSUInt31]*/
+ /*member: A24.f24c:[exact=JSUInt31|powerset=0]*/
var f24c = 42;
- /*member: A24.f24d:[exact=JSUInt31]*/
+ /*member: A24.f24d:[exact=JSUInt31|powerset=0]*/
final f24d;
- /*member: A24.f24e:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+ /*member: A24.f24e:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
var f24e;
- /*member: A24.f24f:Value([null|exact=JSString], value: "foo")*/
+ /*member: A24.f24f:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
var f24f = null;
- /*member: A24.:[exact=A24]*/
+ /*member: A24.:[exact=A24|powerset=0]*/
A24() : f24d = 42 {
- /*[subclass=A24]*/ /*update: [subclass=A24]*/
- f24a /*invoke: [subclass=JSPositiveInt]*/ ++;
- /*[subclass=A24]*/ /*update: [subclass=A24]*/
- f24b /*invoke: [subclass=JSPositiveInt]*/ += 42;
+ /*[subclass=A24|powerset=0]*/ /*update: [subclass=A24|powerset=0]*/
+ f24a /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
+ /*[subclass=A24|powerset=0]*/ /*update: [subclass=A24|powerset=0]*/
+ f24b /*invoke: [subclass=JSPositiveInt|powerset=0]*/ += 42;
var f24f = 'foo';
- this. /*update: [subclass=A24]*/ f24f = f24f;
+ this. /*update: [subclass=A24|powerset=0]*/ f24f = f24f;
}
- /*member: A24.foo:[exact=A24]*/
- A24.foo(/*[subclass=A24]*/ other)
- : f24c = other. /*[subclass=A24]*/ f24c,
- f24d = other. /*[subclass=A24]*/ f24d,
- f24e = other. /*invoke: [subclass=A24]*/ bar24();
+ /*member: A24.foo:[exact=A24|powerset=0]*/
+ A24.foo(/*[subclass=A24|powerset=0]*/ other)
+ : f24c = other. /*[subclass=A24|powerset=0]*/ f24c,
+ f24d = other. /*[subclass=A24|powerset=0]*/ f24d,
+ f24e = other. /*invoke: [subclass=A24|powerset=0]*/ bar24();
- /*member: A24.+:Value([exact=JSString], value: "foo")*/
- operator +(/*[empty]*/ other) => 'foo';
+ /*member: A24.+:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
+ operator +(/*[empty|powerset=0]*/ other) => 'foo';
- /*member: A24.bar24:[exact=JSNumNotInt]*/
+ /*member: A24.bar24:[exact=JSNumNotInt|powerset=0]*/
bar24() => 42.5;
}
-/*member: B24.:[exact=B24]*/
+/*member: B24.:[exact=B24|powerset=0]*/
class B24 extends A24 {
- /*member: B24.bar24:[exact=JSUInt31]*/
+ /*member: B24.bar24:[exact=JSUInt31|powerset=0]*/
@override
bar24() => 42;
}
-/*member: test24:[null]*/
+/*member: test24:[null|powerset=1]*/
test24() {
A24();
A24.foo(new A24());
A24.foo(new B24());
}
-/*member: A25.:[exact=A25]*/
+/*member: A25.:[exact=A25|powerset=0]*/
class A25 {
- /*member: A25.f25:[exact=JSUInt31]*/
+ /*member: A25.f25:[exact=JSUInt31|powerset=0]*/
var f25 = 42;
}
-/*member: B25.:[exact=B25]*/
+/*member: B25.:[exact=B25|powerset=0]*/
class B25 {
- /*member: B25.f25:Value([exact=JSString], value: "42")*/
+ /*member: B25.f25:Value([exact=JSString|powerset=0], value: "42", powerset: 0)*/
var f25 = '42';
}
-/*member: test25:[null]*/
+/*member: test25:[null|powerset=1]*/
test25() {
B25();
- A25(). /*update: [exact=A25]*/ f25 = A25(). /*[exact=A25]*/ f25;
+ A25(). /*update: [exact=A25|powerset=0]*/ f25 =
+ A25(). /*[exact=A25|powerset=0]*/ f25;
}
-/*member: A26.:[exact=A26]*/
+/*member: A26.:[exact=A26|powerset=0]*/
class A26 {
- /*member: A26.f26:[subclass=JSPositiveInt]*/
+ /*member: A26.f26:[subclass=JSPositiveInt|powerset=0]*/
var f26 = 42;
}
-/*member: B26.:[exact=B26]*/
+/*member: B26.:[exact=B26|powerset=0]*/
class B26 {
- /*member: B26.f26:[exact=JSUInt31]*/
+ /*member: B26.f26:[exact=JSUInt31|powerset=0]*/
var f26 = 54;
}
-/*member: test26:[null]*/
+/*member: test26:[null|powerset=1]*/
test26() {
- A26(). /*update: [exact=A26]*/ f26 =
+ A26(). /*update: [exact=A26|powerset=0]*/ f26 =
<dynamic>[new B26(), A26()]
- /*Container([exact=JSExtendableArray], element: Union([exact=A26], [exact=B26]), length: 2)*/
- [0]. /*Union([exact=A26], [exact=B26])*/ f26 /*invoke: [subclass=JSPositiveInt]*/ +
+ /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=A26|powerset=0], [exact=B26|powerset=0], powerset: 0), length: 2, powerset: 0)*/
+ [0]. /*Union([exact=A26|powerset=0], [exact=B26|powerset=0], powerset: 0)*/ f26 /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +
42;
}
class A27 {
- /*member: A27.f27a:[exact=JSUInt31]*/
+ /*member: A27.f27a:[exact=JSUInt31|powerset=0]*/
var f27a;
- /*member: A27.f27b:[null|exact=JSUInt31]*/
+ /*member: A27.f27b:[null|exact=JSUInt31|powerset=1]*/
var f27b;
- /*member: A27.:[exact=A27]*/
+ /*member: A27.:[exact=A27|powerset=0]*/
A27() {
- this. /*update: [subclass=A27]*/ f27a = 42;
- this. /*update: [subclass=A27]*/ f27b = 42;
+ this. /*update: [subclass=A27|powerset=0]*/ f27a = 42;
+ this. /*update: [subclass=A27|powerset=0]*/ f27b = 42;
}
}
-/*member: B27.:[exact=B27]*/
+/*member: B27.:[exact=B27|powerset=0]*/
class B27 extends A27 {
@override
- set f27b(/*[null|exact=JSUInt31]*/ value) {}
+ set f27b(/*[null|exact=JSUInt31|powerset=1]*/ value) {}
}
-/*member: test27:[null]*/
+/*member: test27:[null|powerset=1]*/
test27() {
A27();
B27();
}
class A28 {
- /*member: A28.f28a:[exact=JSUInt31]*/
+ /*member: A28.f28a:[exact=JSUInt31|powerset=0]*/
var f28a;
- /*member: A28.f28b:[null|exact=JSUInt31]*/
+ /*member: A28.f28b:[null|exact=JSUInt31|powerset=1]*/
var f28b;
- /*member: A28.:[exact=A28]*/
- A28(/*[exact=JSUInt31]*/ x) {
- this. /*update: [exact=A28]*/ f28a = x;
- if (x /*invoke: [exact=JSUInt31]*/ == 0) return;
- this. /*update: [exact=A28]*/ f28b = x;
+ /*member: A28.:[exact=A28|powerset=0]*/
+ A28(/*[exact=JSUInt31|powerset=0]*/ x) {
+ this. /*update: [exact=A28|powerset=0]*/ f28a = x;
+ if (x /*invoke: [exact=JSUInt31|powerset=0]*/ == 0) return;
+ this. /*update: [exact=A28|powerset=0]*/ f28b = x;
}
}
-/*member: test28:[null]*/
+/*member: test28:[null|powerset=1]*/
test28() {
A28(0);
A28(1);
}
class A29 {
- /*member: A29.f29a:[exact=JSUInt31]*/
+ /*member: A29.f29a:[exact=JSUInt31|powerset=0]*/
var f29a;
- /*member: A29.f29b:[null|exact=JSUInt31]*/
+ /*member: A29.f29b:[null|exact=JSUInt31|powerset=1]*/
var f29b;
- /*member: A29.:[exact=A29]*/
- A29(/*[exact=JSUInt31]*/ x) {
- this. /*update: [exact=A29]*/ f29a = x;
- if (x /*invoke: [exact=JSUInt31]*/ == 0) {
+ /*member: A29.:[exact=A29|powerset=0]*/
+ A29(/*[exact=JSUInt31|powerset=0]*/ x) {
+ this. /*update: [exact=A29|powerset=0]*/ f29a = x;
+ if (x /*invoke: [exact=JSUInt31|powerset=0]*/ == 0) {
} else {
return;
}
- this. /*update: [exact=A29]*/ f29b = x;
+ this. /*update: [exact=A29|powerset=0]*/ f29b = x;
}
}
-/*member: test29:[null]*/
+/*member: test29:[null|powerset=1]*/
test29() {
A29(0);
A29(1);
}
class A30 {
- /*member: A30.f30a:[exact=JSUInt31]*/
+ /*member: A30.f30a:[exact=JSUInt31|powerset=0]*/
var f30a;
- /*member: A30.f30b:[exact=JSUInt31]*/
+ /*member: A30.f30b:[exact=JSUInt31|powerset=0]*/
var f30b;
- /*member: A30.f30c:[null|exact=JSUInt31]*/
+ /*member: A30.f30c:[null|exact=JSUInt31|powerset=1]*/
var f30c;
- /*member: A30.:[exact=A30]*/
- A30(/*[exact=JSUInt31]*/ x) {
- this. /*update: [exact=A30]*/ f30a = x;
- if (x /*invoke: [exact=JSUInt31]*/ == 0) {
- this. /*update: [exact=A30]*/ f30b = 1;
+ /*member: A30.:[exact=A30|powerset=0]*/
+ A30(/*[exact=JSUInt31|powerset=0]*/ x) {
+ this. /*update: [exact=A30|powerset=0]*/ f30a = x;
+ if (x /*invoke: [exact=JSUInt31|powerset=0]*/ == 0) {
+ this. /*update: [exact=A30|powerset=0]*/ f30b = 1;
} else {
- this. /*update: [exact=A30]*/ f30b = x;
+ this. /*update: [exact=A30|powerset=0]*/ f30b = x;
return;
}
- this. /*update: [exact=A30]*/ f30c = x;
+ this. /*update: [exact=A30|powerset=0]*/ f30c = x;
}
}
-/*member: test30:[null]*/
+/*member: test30:[null|powerset=1]*/
test30() {
A30(0);
A30(1);
diff --git a/pkg/compiler/test/inference/data/fields.dart b/pkg/compiler/test/inference/data/fields.dart
index bd3c5fa..5741529 100644
--- a/pkg/compiler/test/inference/data/fields.dart
+++ b/pkg/compiler/test/inference/data/fields.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
fieldGetUnset();
fieldGetUnsetInitialized();
@@ -14,50 +14,50 @@
/// Get an uninitialized field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- var /*member: Class1.field:[null]*/ field;
+ var /*member: Class1.field:[null|powerset=1]*/ field;
}
-/*member: fieldGetUnset:[null]*/
-fieldGetUnset() => Class1(). /*[exact=Class1]*/ field;
+/*member: fieldGetUnset:[null|powerset=1]*/
+fieldGetUnset() => Class1(). /*[exact=Class1|powerset=0]*/ field;
////////////////////////////////////////////////////////////////////////////////
/// Get a field initialized to `null`.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- var /*member: Class4.field:[null]*/ field = null;
+ var /*member: Class4.field:[null|powerset=1]*/ field = null;
}
-/*member: fieldGetUnsetInitialized:[null]*/
-fieldGetUnsetInitialized() => Class4(). /*[exact=Class4]*/ field;
+/*member: fieldGetUnsetInitialized:[null|powerset=1]*/
+fieldGetUnsetInitialized() => Class4(). /*[exact=Class4|powerset=0]*/ field;
////////////////////////////////////////////////////////////////////////////////
/// Set an uninitialized field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- var /*member: Class2.field:[null|exact=JSUInt31]*/ field;
+ var /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/ field;
}
-/*member: fieldSet:[null]*/
+/*member: fieldSet:[null|powerset=1]*/
fieldSet() {
- Class2(). /*update: [exact=Class2]*/ field = 0;
+ Class2(). /*update: [exact=Class2|powerset=0]*/ field = 0;
}
////////////////////////////////////////////////////////////////////////////////
/// Return the setting of an uninitialized field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- var /*member: Class3.field:[null|exact=JSUInt31]*/ field;
+ var /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/ field;
}
-/*member: fieldSetReturn:[exact=JSUInt31]*/
+/*member: fieldSetReturn:[exact=JSUInt31|powerset=0]*/
fieldSetReturn() {
- return Class3(). /*update: [exact=Class3]*/ field = 0;
+ return Class3(). /*update: [exact=Class3|powerset=0]*/ field = 0;
}
diff --git a/pkg/compiler/test/inference/data/final_field.dart b/pkg/compiler/test/inference/data/final_field.dart
index d2e4767..5570239 100644
--- a/pkg/compiler/test/inference/data/final_field.dart
+++ b/pkg/compiler/test/inference/data/final_field.dart
@@ -3,40 +3,40 @@
// BSD-style license that can be found in the LICENSE file.
class A {
- /*member: A.intField:[exact=JSUInt31]*/
+ /*member: A.intField:[exact=JSUInt31|powerset=0]*/
final intField;
- /*member: A.giveUpField1:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: A.giveUpField1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
final giveUpField1;
- /*member: A.giveUpField2:Union([exact=A], [exact=JSString])*/
+ /*member: A.giveUpField2:Union([exact=A|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
final giveUpField2;
- /*member: A.fieldParameter:[exact=JSUInt31]*/
+ /*member: A.fieldParameter:[exact=JSUInt31|powerset=0]*/
final fieldParameter;
- /*member: A.:[exact=A]*/
+ /*member: A.:[exact=A|powerset=0]*/
A()
: intField = 42,
giveUpField1 = 'foo',
giveUpField2 = 'foo',
fieldParameter = 54;
- /*member: A.bar:[exact=A]*/
+ /*member: A.bar:[exact=A|powerset=0]*/
A.bar()
: intField = 54,
giveUpField1 = 42,
giveUpField2 = A(),
fieldParameter = 87;
- /*member: A.foo:[exact=A]*/
- A.foo(this. /*[exact=JSUInt31]*/ fieldParameter)
+ /*member: A.foo:[exact=A|powerset=0]*/
+ A.foo(this. /*[exact=JSUInt31|powerset=0]*/ fieldParameter)
: intField = 87,
giveUpField1 = 42,
giveUpField2 = 'foo';
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
A();
A.bar();
diff --git a/pkg/compiler/test/inference/data/final_field2.dart b/pkg/compiler/test/inference/data/final_field2.dart
index 288749d..a2326f9 100644
--- a/pkg/compiler/test/inference/data/final_field2.dart
+++ b/pkg/compiler/test/inference/data/final_field2.dart
@@ -6,19 +6,19 @@
// inferring types for fields.
class A {
- /*member: A.intField:[exact=JSUInt31]*/
+ /*member: A.intField:[exact=JSUInt31|powerset=0]*/
final intField;
- /*member: A.stringField:Value([exact=JSString], value: "foo")*/
+ /*member: A.stringField:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
final stringField;
- /*member: A.:[exact=A]*/
+ /*member: A.:[exact=A|powerset=0]*/
A() : intField = 42, stringField = 'foo';
A.bar() : intField = 'bar', stringField = 42;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
A();
}
diff --git a/pkg/compiler/test/inference/data/final_field3.dart b/pkg/compiler/test/inference/data/final_field3.dart
index bd84d33..ee2597e 100644
--- a/pkg/compiler/test/inference/data/final_field3.dart
+++ b/pkg/compiler/test/inference/data/final_field3.dart
@@ -5,17 +5,19 @@
// Test that we are analyzing field parameters correctly.
class A {
- /*member: A.dynamicField:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: A.dynamicField:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
final dynamicField;
- /*member: A.:[exact=A]*/
+ /*member: A.:[exact=A|powerset=0]*/
A() : dynamicField = 42;
- /*member: A.bar:[exact=A]*/
- A.bar(this. /*Value([exact=JSString], value: "foo")*/ dynamicField);
+ /*member: A.bar:[exact=A|powerset=0]*/
+ A.bar(
+ this. /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ dynamicField,
+ );
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
A();
A.bar('foo');
diff --git a/pkg/compiler/test/inference/data/finalized_type_variable.dart b/pkg/compiler/test/inference/data/finalized_type_variable.dart
index 3361624..881181e 100644
--- a/pkg/compiler/test/inference/data/finalized_type_variable.dart
+++ b/pkg/compiler/test/inference/data/finalized_type_variable.dart
@@ -2,80 +2,86 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: AppView.:[subclass=AppView]*/
+/*member: AppView.:[subclass=AppView|powerset=0]*/
abstract class AppView<T> {
- /*member: AppView.ctx:Union(null, [exact=CardComponent2], [exact=CardComponent])*/
+ /*member: AppView.ctx:Union(null, [exact=CardComponent2|powerset=0], [exact=CardComponent|powerset=0], powerset: 1)*/
T? ctx;
}
-/*member: CardComponent.:[exact=CardComponent]*/
+/*member: CardComponent.:[exact=CardComponent|powerset=0]*/
class CardComponent {
- /*member: CardComponent.title:Value([null|exact=JSString], value: "foo")*/
+ /*member: CardComponent.title:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
String? title;
}
-/*member: ViewCardComponent.:[exact=ViewCardComponent]*/
+/*member: ViewCardComponent.:[exact=ViewCardComponent|powerset=0]*/
class ViewCardComponent extends AppView<CardComponent> {
- /*member: ViewCardComponent._title:Value([null|exact=JSString], value: "foo")*/
+ /*member: ViewCardComponent._title:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
var _title;
@pragma('dart2js:noInline')
- set ng_title(String /*Value([exact=JSString], value: "foo")*/ value) {
- if ( /*invoke: [exact=ViewCardComponent]*/ checkBinding(
- /*[exact=ViewCardComponent]*/ _title,
+ set ng_title(
+ String /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
+ value,
+ ) {
+ if ( /*invoke: [exact=ViewCardComponent|powerset=0]*/ checkBinding(
+ /*[exact=ViewCardComponent|powerset=0]*/ _title,
value,
)) {
- /*[exact=ViewCardComponent]*/
- ctx!. /*update: [exact=CardComponent]*/ title = value;
- /*update: [exact=ViewCardComponent]*/
+ /*[exact=ViewCardComponent|powerset=0]*/
+ ctx!. /*update: [exact=CardComponent|powerset=0]*/ title = value;
+ /*update: [exact=ViewCardComponent|powerset=0]*/
_title = value;
}
}
- /*member: ViewCardComponent.checkBinding:Value([exact=JSBool], value: true)*/
+ /*member: ViewCardComponent.checkBinding:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
checkBinding(
- /*Value([null|exact=JSString], value: "foo")*/ a,
- /*Value([exact=JSString], value: "foo")*/ b,
+ /*Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/ a,
+ /*Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/ b,
) => true;
}
-/*member: CardComponent2.:[exact=CardComponent2]*/
+/*member: CardComponent2.:[exact=CardComponent2|powerset=0]*/
class CardComponent2 {
- /*member: CardComponent2.title:Value([null|exact=JSString], value: "bar")*/
+ /*member: CardComponent2.title:Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)*/
String? title;
}
-/*member: ViewCardComponent2.:[exact=ViewCardComponent2]*/
+/*member: ViewCardComponent2.:[exact=ViewCardComponent2|powerset=0]*/
class ViewCardComponent2 extends AppView<CardComponent2> {
- /*member: ViewCardComponent2._title:Value([null|exact=JSString], value: "bar")*/
+ /*member: ViewCardComponent2._title:Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)*/
var _title;
@pragma('dart2js:noInline')
- set ng_title(String /*Value([exact=JSString], value: "bar")*/ value) {
- if ( /*invoke: [exact=ViewCardComponent2]*/ checkBinding(
- /*[exact=ViewCardComponent2]*/ _title,
+ set ng_title(
+ String /*Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
+ value,
+ ) {
+ if ( /*invoke: [exact=ViewCardComponent2|powerset=0]*/ checkBinding(
+ /*[exact=ViewCardComponent2|powerset=0]*/ _title,
value,
)) {
- /*[exact=ViewCardComponent2]*/
- ctx!. /*update: [exact=CardComponent2]*/ title = value;
- /*update: [exact=ViewCardComponent2]*/
+ /*[exact=ViewCardComponent2|powerset=0]*/
+ ctx!. /*update: [exact=CardComponent2|powerset=0]*/ title = value;
+ /*update: [exact=ViewCardComponent2|powerset=0]*/
_title = value;
}
}
- /*member: ViewCardComponent2.checkBinding:Value([exact=JSBool], value: true)*/
+ /*member: ViewCardComponent2.checkBinding:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
checkBinding(
- /*Value([null|exact=JSString], value: "bar")*/ a,
- /*Value([exact=JSString], value: "bar")*/ b,
+ /*Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)*/ a,
+ /*Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/ b,
) => true;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
var c1 = ViewCardComponent();
- c1. /*update: [exact=ViewCardComponent]*/ ctx = CardComponent();
- c1. /*update: [exact=ViewCardComponent]*/ ng_title = 'foo';
+ c1. /*update: [exact=ViewCardComponent|powerset=0]*/ ctx = CardComponent();
+ c1. /*update: [exact=ViewCardComponent|powerset=0]*/ ng_title = 'foo';
var c2 = ViewCardComponent2();
- c2. /*update: [exact=ViewCardComponent2]*/ ctx = CardComponent2();
- c2. /*update: [exact=ViewCardComponent2]*/ ng_title = 'bar';
+ c2. /*update: [exact=ViewCardComponent2|powerset=0]*/ ctx = CardComponent2();
+ c2. /*update: [exact=ViewCardComponent2|powerset=0]*/ ng_title = 'bar';
}
diff --git a/pkg/compiler/test/inference/data/for.dart b/pkg/compiler/test/inference/data/for.dart
index 7cbbe36..6340b08 100644
--- a/pkg/compiler/test/inference/data/for.dart
+++ b/pkg/compiler/test/inference/data/for.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleFor();
forNull();
@@ -18,14 +18,14 @@
/// Simple int based for loop.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleFor:[null]*/
+/*member: simpleFor:[null|powerset=1]*/
simpleFor() {
for (
var i = 0;
- i /*invoke: [subclass=JSPositiveInt]*/ < 10;
- i = i /*invoke: [subclass=JSPositiveInt]*/ + 1
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10;
+ i = i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ + 1
) {
- i. /*invoke: [subclass=JSPositiveInt]*/ abs();
+ i. /*invoke: [subclass=JSPositiveInt|powerset=0]*/ abs();
}
}
@@ -33,10 +33,10 @@
/// For loop with null test.
////////////////////////////////////////////////////////////////////////////////
-/*member: forNull:[null]*/
+/*member: forNull:[null|powerset=1]*/
forNull() {
var local;
- for (var o; o == null; o = o. /*invoke: [null]*/ toString()) {
+ for (var o; o == null; o = o. /*invoke: [null|powerset=1]*/ toString()) {
local = o;
}
return local;
@@ -46,13 +46,13 @@
/// For loop with not-null test.
////////////////////////////////////////////////////////////////////////////////
-/*member: forNotNull:[null|exact=JSString]*/
+/*member: forNotNull:[null|exact=JSString|powerset=1]*/
forNotNull() {
var local;
for (
var o = '';
- o /*invoke: [exact=JSString]*/ != null;
- o = o. /*invoke: [exact=JSString]*/ toString()
+ o /*invoke: [exact=JSString|powerset=0]*/ != null;
+ o = o. /*invoke: [exact=JSString|powerset=0]*/ toString()
) {
local = o;
}
@@ -63,13 +63,13 @@
/// For loop with null test known to be false.
////////////////////////////////////////////////////////////////////////////////
-/*member: forNullFalse:[null]*/
+/*member: forNullFalse:[null|powerset=1]*/
forNullFalse() {
var local;
for (
var o = '';
- o /*invoke: [exact=JSString]*/ == null;
- o = o. /*invoke: [empty]*/ toString()
+ o /*invoke: [exact=JSString|powerset=0]*/ == null;
+ o = o. /*invoke: [empty|powerset=0]*/ toString()
) {
local = o;
}
@@ -80,10 +80,14 @@
/// For loop with not-null test known to be true.
////////////////////////////////////////////////////////////////////////////////
-/*member: forNotNullTrue:[null]*/
+/*member: forNotNullTrue:[null|powerset=1]*/
forNotNullTrue() {
var local;
- for (var o = null; o != null; o = o. /*invoke: [empty]*/ toString()) {
+ for (
+ var o = null;
+ o != null;
+ o = o. /*invoke: [empty|powerset=0]*/ toString()
+ ) {
local = o;
}
return local;
@@ -93,34 +97,34 @@
/// For loop with not-null test that mixes field accesses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:[null|exact=Class2]*/
+ /*member: Class1.field:[null|exact=Class2|powerset=1]*/
var field;
}
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:[null|exact=Class1]*/
+ /*member: Class2.field:[null|exact=Class1|powerset=1]*/
var field;
}
-/*member: _forUnion:Union(null, [exact=Class1], [exact=Class2])*/
-_forUnion(/*[exact=Class1]*/ o) {
+/*member: _forUnion:Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/
+_forUnion(/*[exact=Class1|powerset=0]*/ o) {
for (
;
- o = o. /*Union(null, [exact=Class1], [exact=Class2])*/ field;
+ o = o. /*Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ field;
o != null
) {}
return o;
}
-/*member: forUnion:[null]*/
+/*member: forUnion:[null|powerset=1]*/
forUnion() {
var c1 = Class1();
var c2 = Class2();
- c1. /*update: [exact=Class1]*/ field = c2;
- c2. /*update: [exact=Class2]*/ field = c1;
+ c1. /*update: [exact=Class1|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class2|powerset=0]*/ field = c1;
_forUnion(c1);
}
@@ -128,30 +132,30 @@
/// For loop with is test that mixes field accesses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.field:[null|exact=Class4]*/
+ /*member: Class3.field:[null|exact=Class4|powerset=1]*/
var field;
}
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- /*member: Class4.field:[null|exact=Class3]*/
+ /*member: Class4.field:[null|exact=Class3|powerset=1]*/
var field;
}
-/*member: _forIs:Union(null, [exact=Class3], [exact=Class4])*/
-_forIs(/*[exact=Class3]*/ o) {
- for (; o is Class3; o = o. /*[exact=Class3]*/ field) {}
+/*member: _forIs:Union(null, [exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 1)*/
+_forIs(/*[exact=Class3|powerset=0]*/ o) {
+ for (; o is Class3; o = o. /*[exact=Class3|powerset=0]*/ field) {}
return o;
}
-/*member: forIs:[null]*/
+/*member: forIs:[null|powerset=1]*/
forIs() {
var c1 = Class3();
var c2 = Class4();
- c1. /*update: [exact=Class3]*/ field = c2;
- c2. /*update: [exact=Class4]*/ field = c1;
+ c1. /*update: [exact=Class3|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class4|powerset=0]*/ field = c1;
_forIs(c1);
}
@@ -159,33 +163,33 @@
/// For loop with is-not test that mixes field accesses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
class Class5 {
- /*member: Class5.field:[null|exact=Class6]*/
+ /*member: Class5.field:[null|exact=Class6|powerset=1]*/
var field;
}
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
class Class6 {
- /*member: Class6.field:[null|exact=Class5]*/
+ /*member: Class6.field:[null|exact=Class5|powerset=1]*/
var field;
}
-/*member: _forIsNot:Union(null, [exact=Class5], [exact=Class6])*/
-_forIsNot(/*[exact=Class5]*/ o) {
+/*member: _forIsNot:Union(null, [exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 1)*/
+_forIsNot(/*[exact=Class5|powerset=0]*/ o) {
for (
;
o is! Class6;
- o = o. /*Union(null, [exact=Class5], [exact=Class6])*/ field
+ o = o. /*Union(null, [exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 1)*/ field
) {}
return o;
}
-/*member: forIsNot:[null]*/
+/*member: forIsNot:[null|powerset=1]*/
forIsNot() {
var c1 = Class5();
var c2 = Class6();
- c1. /*update: [exact=Class5]*/ field = c2;
- c2. /*update: [exact=Class6]*/ field = c1;
+ c1. /*update: [exact=Class5|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class6|powerset=0]*/ field = c1;
_forIsNot(c1);
}
diff --git a/pkg/compiler/test/inference/data/for_in.dart b/pkg/compiler/test/inference/data/for_in.dart
index 4a902c0..faebc1a 100644
--- a/pkg/compiler/test/inference/data/for_in.dart
+++ b/pkg/compiler/test/inference/data/for_in.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
forInDirect();
forInReturn();
@@ -14,11 +14,11 @@
// For-in loop directly on a list literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: forInDirect:[null]*/
+/*member: forInDirect:[null|powerset=1]*/
forInDirect() {
- /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
- /*current: [exact=ArrayIterator]*/
- /*moveNext: [exact=ArrayIterator]*/
+ /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
+ /*current: [exact=ArrayIterator|powerset=0]*/
+ /*moveNext: [exact=ArrayIterator|powerset=0]*/
for (var a in [1, 2, 3]) {
print(a);
}
@@ -28,11 +28,11 @@
// Return element from a for-in loop on a list literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: forInReturn:[null|subclass=JSInt]*/
+/*member: forInReturn:[null|subclass=JSInt|powerset=1]*/
forInReturn() {
- /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
- /*current: [exact=ArrayIterator]*/
- /*moveNext: [exact=ArrayIterator]*/
+ /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
+ /*current: [exact=ArrayIterator|powerset=0]*/
+ /*moveNext: [exact=ArrayIterator|powerset=0]*/
for (var a in [1, 2, 3]) {
// TODO(johnniwinther): We should know the type of [a] here.
return a;
@@ -43,20 +43,20 @@
// Return element from a for-in loop on known list type.
////////////////////////////////////////////////////////////////////////////////
-/*member: _forInReturn:[null|subclass=Object]*/
+/*member: _forInReturn:[null|subclass=Object|powerset=1]*/
_forInReturn(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ list,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ list,
) {
- /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
- /*current: [exact=ArrayIterator]*/
- /*moveNext: [exact=ArrayIterator]*/
+ /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
+ /*current: [exact=ArrayIterator|powerset=0]*/
+ /*moveNext: [exact=ArrayIterator|powerset=0]*/
for (var a in list) {
// TODO(johnniwinther): We should know the type of [a] here.
return a;
}
}
-/*member: forInReturnMulti:[null]*/
+/*member: forInReturnMulti:[null|powerset=1]*/
forInReturnMulti() {
_forInReturn([1, 2]);
_forInReturn([1, 2, 3]);
@@ -67,16 +67,16 @@
// loop on known list type.
////////////////////////////////////////////////////////////////////////////////
-/*member: forInReturnNonNull:[subclass=JSInt]*/
+/*member: forInReturnNonNull:[subclass=JSInt|powerset=0]*/
forInReturnNonNull() {
- /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
- /*current: [exact=ArrayIterator]*/
- /*moveNext: [exact=ArrayIterator]*/
+ /*iterator: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
+ /*current: [exact=ArrayIterator|powerset=0]*/
+ /*moveNext: [exact=ArrayIterator|powerset=0]*/
for (var a in [1, 2, 3]) {
// TODO(johnniwinther): We should know the type of [a] here. Even if [a] has
// type `dynamic`.
- a. /*[subclass=JSInt]*/ isEven;
- a. /*[subclass=JSInt]*/ isEven;
+ a. /*[subclass=JSInt|powerset=0]*/ isEven;
+ a. /*[subclass=JSInt|powerset=0]*/ isEven;
return a;
}
return 0;
diff --git a/pkg/compiler/test/inference/data/foreign.dart b/pkg/compiler/test/inference/data/foreign.dart
index c01baa9..9cd5add 100644
--- a/pkg/compiler/test/inference/data/foreign.dart
+++ b/pkg/compiler/test/inference/data/foreign.dart
@@ -8,7 +8,7 @@
/// ignore: IMPORT_INTERNAL_LIBRARY, UNUSED_IMPORT
import 'dart:_interceptors';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
jsCallInt();
jsCallEmpty();
@@ -18,17 +18,17 @@
jsStringConcat();
}
-/*member: jsCallEmpty:[null|subclass=Object]*/
+/*member: jsCallEmpty:[null|subclass=Object|powerset=1]*/
jsCallEmpty() => JS('', '#', 0);
-/*member: jsCallInt:[subclass=JSInt]*/
+/*member: jsCallInt:[subclass=JSInt|powerset=0]*/
jsCallInt() => JS('int', '#', 0);
-/*member: jsCallVoid:[null|subclass=Object]*/
+/*member: jsCallVoid:[null|subclass=Object|powerset=1]*/
jsCallVoid() => JS('void', '#', 0);
-/*member: jsCallUnion:Union([exact=JSString], [subclass=JSInt])*/
+/*member: jsCallUnion:Union([exact=JSString|powerset=0], [subclass=JSInt|powerset=0], powerset: 0)*/
jsCallUnion() => JS('int|String', '#', 0);
-/*member: jsStringConcat:[exact=JSString]*/
+/*member: jsStringConcat:[exact=JSString|powerset=0]*/
jsStringConcat() => JS_STRING_CONCAT('a', 'b');
diff --git a/pkg/compiler/test/inference/data/general.dart b/pkg/compiler/test/inference/data/general.dart
index 2bf826e..10b4d4b 100644
--- a/pkg/compiler/test/inference/data/general.dart
+++ b/pkg/compiler/test/inference/data/general.dart
@@ -2,107 +2,109 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: returnNum1:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-returnNum1(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnNum1:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnNum1(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
if (a)
return 1;
else
return 2.5;
}
-/*member: returnNum2:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-returnNum2(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnNum2:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnNum2(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
if (a)
return 1.4;
else
return 2;
}
-/*member: returnInt1:[exact=JSUInt31]*/
-returnInt1(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnInt1:[exact=JSUInt31|powerset=0]*/
+returnInt1(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
if (a)
return 1;
else
return 2;
}
-/*member: returnDouble:[exact=JSNumNotInt]*/
-returnDouble(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnDouble:[exact=JSNumNotInt|powerset=0]*/
+returnDouble(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
if (a)
return 1.5;
else
return 2.5;
}
-/*member: returnGiveUp:Union([exact=JSString], [exact=JSUInt31])*/
-returnGiveUp(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnGiveUp:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+returnGiveUp(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
if (a)
return 1;
else
return 'foo';
}
-/*member: returnInt2:[exact=JSUInt31]*/
+/*member: returnInt2:[exact=JSUInt31|powerset=0]*/
returnInt2() {
var a = 42;
- return a /*invoke: [exact=JSUInt31]*/ ++;
+ return a /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
}
-/*member: returnInt5:[subclass=JSUInt32]*/
+/*member: returnInt5:[subclass=JSUInt32|powerset=0]*/
returnInt5() {
var a = 42;
- return /*invoke: [exact=JSUInt31]*/ ++a;
+ return /*invoke: [exact=JSUInt31|powerset=0]*/ ++a;
}
-/*member: returnInt6:[subclass=JSUInt32]*/
+/*member: returnInt6:[subclass=JSUInt32|powerset=0]*/
returnInt6() {
var a = 42;
- a /*invoke: [exact=JSUInt31]*/ ++;
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
return a;
}
-/*member: returnIntOrNull:[null|exact=JSUInt31]*/
-returnIntOrNull(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnIntOrNull:[null|exact=JSUInt31|powerset=1]*/
+returnIntOrNull(
+ /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a,
+) {
if (a) return 42;
}
-/*member: returnInt3:[exact=JSUInt31]*/
-returnInt3(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: returnInt3:[exact=JSUInt31|powerset=0]*/
+returnInt3(/*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a) {
if (a) return 42;
throw 42;
}
-/*member: returnInt4:[exact=JSUInt31]*/
+/*member: returnInt4:[exact=JSUInt31|powerset=0]*/
returnInt4() {
return (42);
}
-/*member: returnInt7:[subclass=JSPositiveInt]*/
+/*member: returnInt7:[subclass=JSPositiveInt|powerset=0]*/
returnInt7() {
- return 42. /*invoke: [exact=JSUInt31]*/ abs();
+ return 42. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
}
-/*member: returnInt8:[subclass=JSPositiveInt]*/
+/*member: returnInt8:[subclass=JSPositiveInt|powerset=0]*/
returnInt8() {
- return 42. /*invoke: [exact=JSUInt31]*/ remainder(54);
+ return 42. /*invoke: [exact=JSUInt31|powerset=0]*/ remainder(54);
}
-/*member: returnEmpty1:[empty]*/
+/*member: returnEmpty1:[empty|powerset=0]*/
returnEmpty1() {
// Ensure that we don't intrinsify a wrong call to [int.remainder].
dynamic a = 42;
- return a. /*invoke: [exact=JSUInt31]*/ remainder();
+ return a. /*invoke: [exact=JSUInt31|powerset=0]*/ remainder();
}
-/*member: returnEmpty2:[empty]*/
+/*member: returnEmpty2:[empty|powerset=0]*/
returnEmpty2() {
// Ensure that we don't intrinsify a wrong call to [int.abs].
dynamic a = 42;
- return a. /*invoke: [exact=JSUInt31]*/ abs(42);
+ return a. /*invoke: [exact=JSUInt31|powerset=0]*/ abs(42);
}
-/*member: testIsCheck1:[subclass=JSInt]*/
-testIsCheck1(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck1:[subclass=JSInt|powerset=0]*/
+testIsCheck1(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) {
return a;
} else {
@@ -110,8 +112,8 @@
}
}
-/*member: testIsCheck2:[subclass=JSInt]*/
-testIsCheck2(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck2:[subclass=JSInt|powerset=0]*/
+testIsCheck2(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is! int) {
return 0;
} else {
@@ -119,8 +121,8 @@
}
}
-/*member: testIsCheck3:[null|subclass=JSInt]*/
-testIsCheck3(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck3:[null|subclass=JSInt|powerset=1]*/
+testIsCheck3(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is! int) {
print('hello');
} else {
@@ -128,8 +130,8 @@
}
}
-/*member: testIsCheck4:[subclass=JSInt]*/
-testIsCheck4(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck4:[subclass=JSInt|powerset=0]*/
+testIsCheck4(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) {
return a;
} else {
@@ -137,8 +139,8 @@
}
}
-/*member: testIsCheck5:[subclass=JSInt]*/
-testIsCheck5(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck5:[subclass=JSInt|powerset=0]*/
+testIsCheck5(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is! int) {
return 42;
} else {
@@ -146,8 +148,8 @@
}
}
-/*member: testIsCheck6:[null|subclass=Object]*/
-testIsCheck6(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck6:[null|subclass=Object|powerset=1]*/
+testIsCheck6(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is! int) {
return a;
} else {
@@ -155,8 +157,8 @@
}
}
-/*member: testIsCheck7:[subclass=JSInt]*/
-testIsCheck7(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck7:[subclass=JSInt|powerset=0]*/
+testIsCheck7(/*[null|subclass=Object|powerset=1]*/ a) {
if (a == 'foo' && a is int) {
return a;
} else {
@@ -164,8 +166,8 @@
}
}
-/*member: testIsCheck8:[null|subclass=Object]*/
-testIsCheck8(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck8:[null|subclass=Object|powerset=1]*/
+testIsCheck8(/*[null|subclass=Object|powerset=1]*/ a) {
if (a == 'foo' || a is int) {
return a;
} else {
@@ -173,36 +175,36 @@
}
}
-/*member: testIsCheck9:[subclass=JSInt]*/
-testIsCheck9(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck9:[subclass=JSInt|powerset=0]*/
+testIsCheck9(/*[null|subclass=Object|powerset=1]*/ a) {
return a is int ? a : 42;
}
-/*member: testIsCheck10:[null|subclass=Object]*/
-testIsCheck10(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck10:[null|subclass=Object|powerset=1]*/
+testIsCheck10(/*[null|subclass=Object|powerset=1]*/ a) {
return a is! int ? a : 42;
}
-/*member: testIsCheck11:[subclass=JSInt]*/
-testIsCheck11(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck11:[subclass=JSInt|powerset=0]*/
+testIsCheck11(/*[null|subclass=Object|powerset=1]*/ a) {
return a is! int ? 42 : a;
}
-/*member: testIsCheck12:[null|subclass=Object]*/
-testIsCheck12(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck12:[null|subclass=Object|powerset=1]*/
+testIsCheck12(/*[null|subclass=Object|powerset=1]*/ a) {
return a is int ? 42 : a;
}
-/*member: testIsCheck13:[subclass=JSInt]*/
-testIsCheck13(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck13:[subclass=JSInt|powerset=0]*/
+testIsCheck13(/*[null|subclass=Object|powerset=1]*/ a) {
while (a is int) {
return a;
}
return 42;
}
-/*member: testIsCheck14:[null|subclass=Object]*/
-testIsCheck14(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck14:[null|subclass=Object|powerset=1]*/
+testIsCheck14(/*[null|subclass=Object|powerset=1]*/ a) {
while (a is! int) {
return 42;
}
@@ -210,8 +212,8 @@
}
// TODO(29309): Change to [subclass=JSInt] when 29309 is fixed.
-/*member: testIsCheck15:[null|subclass=Object]*/
-testIsCheck15(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck15:[null|subclass=Object|powerset=1]*/
+testIsCheck15(/*[null|subclass=Object|powerset=1]*/ a) {
dynamic c = 42;
do {
if (a) return c;
@@ -220,8 +222,8 @@
return 42;
}
-/*member: testIsCheck16:[null|subclass=Object]*/
-testIsCheck16(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck16:[null|subclass=Object|powerset=1]*/
+testIsCheck16(/*[null|subclass=Object|powerset=1]*/ a) {
dynamic c = 42;
do {
if (a) return c;
@@ -230,8 +232,8 @@
return 42;
}
-/*member: testIsCheck17:[subclass=JSInt]*/
-testIsCheck17(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck17:[subclass=JSInt|powerset=0]*/
+testIsCheck17(/*[null|subclass=Object|powerset=1]*/ a) {
dynamic c = 42;
for (; c is int;) {
if (a) return c;
@@ -240,8 +242,8 @@
return 42;
}
-/*member: testIsCheck18:[null|subclass=Object]*/
-testIsCheck18(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck18:[null|subclass=Object|powerset=1]*/
+testIsCheck18(/*[null|subclass=Object|powerset=1]*/ a) {
dynamic c = 42;
for (; c is int;) {
if (a) return c;
@@ -250,8 +252,8 @@
return c;
}
-/*member: testIsCheck19:[null|subclass=Object]*/
-testIsCheck19(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck19:[null|subclass=Object|powerset=1]*/
+testIsCheck19(/*[null|subclass=Object|powerset=1]*/ a) {
dynamic c = 42;
for (; c is! int;) {
if (a) return c;
@@ -260,7 +262,7 @@
return 42;
}
-/*member: testIsCheck20:[exact=JSUInt31]*/
+/*member: testIsCheck20:[exact=JSUInt31|powerset=0]*/
testIsCheck20() {
var c = topLevelGetter();
if (c != null && c is! bool && c is! int) {
@@ -272,8 +274,8 @@
}
}
-/*member: testIsCheck21:Union([subclass=JSArray], [subclass=JSInt])*/
-testIsCheck21(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck21:Union([subclass=JSArray|powerset=0], [subclass=JSInt|powerset=0], powerset: 0)*/
+testIsCheck21(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int || a is List) {
return a;
} else {
@@ -281,31 +283,31 @@
}
}
-/*member: testIsCheck22:Union([subclass=JSArray], [subclass=JSInt])*/
-testIsCheck22(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck22:Union([subclass=JSArray|powerset=0], [subclass=JSInt|powerset=0], powerset: 0)*/
+testIsCheck22(/*[null|subclass=Object|powerset=1]*/ a) {
return (a is int || a is List) ? a : 42;
}
-/*member: testIsCheck23:[subclass=JSInt]*/
-testIsCheck23(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck23:[subclass=JSInt|powerset=0]*/
+testIsCheck23(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is! int) throw 'foo';
return a;
}
-/*member: testIsCheck24:[subclass=JSInt]*/
-testIsCheck24(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck24:[subclass=JSInt|powerset=0]*/
+testIsCheck24(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is! int) return 42;
return a;
}
-/*member: testIsCheck25:[null|subclass=Object]*/
-testIsCheck25(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck25:[null|subclass=Object|powerset=1]*/
+testIsCheck25(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) throw 'foo';
return a;
}
-/*member: testIsCheck26:[subclass=JSInt]*/
-testIsCheck26(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck26:[subclass=JSInt|powerset=0]*/
+testIsCheck26(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) {
} else {
throw 42;
@@ -313,8 +315,8 @@
return a;
}
-/*member: testIsCheck27:[subclass=JSInt]*/
-testIsCheck27(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck27:[subclass=JSInt|powerset=0]*/
+testIsCheck27(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) {
} else {
return 42;
@@ -322,21 +324,21 @@
return a;
}
-/*member: testIsCheck28:[null|subclass=Object]*/
-testIsCheck28(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck28:[null|subclass=Object|powerset=1]*/
+testIsCheck28(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) {
} else {}
return a;
}
-/*member: testIsCheck29:[null|subclass=Object]*/
-testIsCheck29(/*[null|subclass=Object]*/ a) {
+/*member: testIsCheck29:[null|subclass=Object|powerset=1]*/
+testIsCheck29(/*[null|subclass=Object|powerset=1]*/ a) {
if (a is int) {}
return a;
}
-/*member: testIf1:[null|exact=JSUInt31]*/
-testIf1(/*[null|subclass=Object]*/ a) {
+/*member: testIf1:[null|exact=JSUInt31|powerset=1]*/
+testIf1(/*[null|subclass=Object|powerset=1]*/ a) {
var c = null;
if (a) {
c = 10;
@@ -344,8 +346,8 @@
return c;
}
-/*member: testIf2:[null|exact=JSUInt31]*/
-testIf2(/*[null|subclass=Object]*/ a) {
+/*member: testIf2:[null|exact=JSUInt31|powerset=1]*/
+testIf2(/*[null|subclass=Object|powerset=1]*/ a) {
var c = null;
if (a) {
} else {
@@ -354,12 +356,12 @@
return c;
}
-/*member: returnAsString:[exact=JSString]*/
+/*member: returnAsString:[exact=JSString|powerset=0]*/
returnAsString() {
return topLevelGetter() as String;
}
-/*member: returnIntAsNum:[exact=JSUInt31]*/
+/*member: returnIntAsNum:[exact=JSUInt31|powerset=0]*/
returnIntAsNum() {
dynamic a = 0;
return a as num;
@@ -367,24 +369,28 @@
typedef int Foo();
-/*member: returnAsTypedef:[subclass=Closure]*/
+/*member: returnAsTypedef:[subclass=Closure|powerset=0]*/
returnAsTypedef() {
return topLevelGetter() as Foo;
}
-/*member: testDeadCode:[exact=JSUInt31]*/
+/*member: testDeadCode:[exact=JSUInt31|powerset=0]*/
testDeadCode() {
return 42;
// ignore: dead_code
return 'foo';
}
-/*member: testLabeledIf:[null|exact=JSUInt31]*/
-testLabeledIf(/*Value([exact=JSBool], value: true)*/ a) {
+/*member: testLabeledIf:[null|exact=JSUInt31|powerset=1]*/
+testLabeledIf(
+ /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ a,
+) {
var c;
L1:
- if (a /*invoke: Value([exact=JSBool], value: true)*/ > 1) {
- if (a /*invoke: Value([exact=JSBool], value: true)*/ == 2) {
+ if (a /*invoke: Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ >
+ 1) {
+ if (a /*invoke: Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ ==
+ 2) {
break L1;
}
c = 42;
@@ -394,7 +400,7 @@
return c;
}
-/*member: testSwitch1:Union(null, [exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testSwitch1:Union(null, [exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
testSwitch1() {
var a = null;
switch (topLevelGetter) {
@@ -408,7 +414,7 @@
return a;
}
-/*member: testSwitch2:[exact=JSUInt31]*/
+/*member: testSwitch2:[exact=JSUInt31|powerset=0]*/
testSwitch2() {
var a = null;
switch (topLevelGetter) {
@@ -424,14 +430,16 @@
return a;
}
-/*member: testSwitch3:Union(null, [exact=JSString], [subclass=JSNumber])*/
+/*member: testSwitch3:Union(null, [exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 1)*/
testSwitch3() {
dynamic a = 42;
var b;
switch (topLevelGetter) {
L1:
case 1:
- b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 42;
+ b =
+ a /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +
+ 42;
break;
case 2:
a = 'foo';
@@ -440,7 +448,7 @@
return b;
}
-/*member: testSwitch4:[exact=JSUInt31]*/
+/*member: testSwitch4:[exact=JSUInt31|powerset=0]*/
testSwitch4() {
switch (topLevelGetter) {
case 1:
@@ -451,7 +459,7 @@
return 42;
}
-/*member: testSwitch5:[exact=JSUInt31]*/
+/*member: testSwitch5:[exact=JSUInt31|powerset=0]*/
testSwitch5() {
switch (topLevelGetter) {
case 1:
@@ -461,13 +469,16 @@
}
}
-/*member: testContinue1:Union(null, [exact=JSString], [subclass=JSNumber])*/
+/*member: testContinue1:Union(null, [exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 1)*/
testContinue1() {
dynamic a = 42;
var b;
while (true) {
- b = a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ + 54;
- if (b /*invoke: Union([exact=JSString], [subclass=JSNumber])*/ == 42)
+ b =
+ a /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +
+ 54;
+ if (b /*invoke: Union([exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 0)*/ ==
+ 42)
continue;
a = 'foo';
}
@@ -475,25 +486,25 @@
return b;
}
-/*member: testBreak1:Union(null, [exact=JSString], [subclass=JSUInt32])*/
+/*member: testBreak1:Union(null, [exact=JSString|powerset=0], [subclass=JSUInt32|powerset=0], powerset: 1)*/
testBreak1() {
var a = 42;
var b;
while (true) {
- b = a /*invoke: [exact=JSUInt31]*/ + 54;
- if (b /*invoke: [subclass=JSUInt32]*/ == 42) break;
+ b = a /*invoke: [exact=JSUInt31|powerset=0]*/ + 54;
+ if (b /*invoke: [subclass=JSUInt32|powerset=0]*/ == 42) break;
b = 'foo';
}
return b;
}
-/*member: testContinue2:Union(null, [exact=JSString], [subclass=JSUInt32])*/
+/*member: testContinue2:Union(null, [exact=JSString|powerset=0], [subclass=JSUInt32|powerset=0], powerset: 1)*/
testContinue2() {
var a = 42;
var b;
while (true) {
- b = a /*invoke: [exact=JSUInt31]*/ + 54;
- if (b /*invoke: [subclass=JSUInt32]*/ == 42) {
+ b = a /*invoke: [exact=JSUInt31|powerset=0]*/ + 54;
+ if (b /*invoke: [subclass=JSUInt32|powerset=0]*/ == 42) {
b = 'foo';
continue;
}
@@ -502,13 +513,13 @@
return b;
}
-/*member: testBreak2:[null|subclass=JSUInt32]*/
+/*member: testBreak2:[null|subclass=JSUInt32|powerset=1]*/
testBreak2() {
dynamic a = 42;
var b;
while (true) {
- b = a /*invoke: [exact=JSUInt31]*/ + 54;
- if (b /*invoke: [subclass=JSUInt32]*/ == 42) {
+ b = a /*invoke: [exact=JSUInt31|powerset=0]*/ + 54;
+ if (b /*invoke: [subclass=JSUInt32|powerset=0]*/ == 42) {
a = 'foo';
break;
}
@@ -516,25 +527,25 @@
return b;
}
-/*member: testReturnElementOfConstList1:[exact=JSUInt31]*/
+/*member: testReturnElementOfConstList1:[exact=JSUInt31|powerset=0]*/
testReturnElementOfConstList1() {
return const [
42,
- ] /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [0];
+ ] /*Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ [0];
}
-/*member: testReturnElementOfConstList2:[exact=JSUInt31]*/
+/*member: testReturnElementOfConstList2:[exact=JSUInt31|powerset=0]*/
testReturnElementOfConstList2() {
- return topLevelConstList /*Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/ [0];
+ return topLevelConstList /*Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ [0];
}
-/*member: testReturnItselfOrInt:[exact=JSUInt31]*/
-testReturnItselfOrInt(/*[null|subclass=Object]*/ a) {
+/*member: testReturnItselfOrInt:[exact=JSUInt31|powerset=0]*/
+testReturnItselfOrInt(/*[null|subclass=Object|powerset=1]*/ a) {
if (a) return 42;
return testReturnItselfOrInt(a);
}
-/*member: testDoWhile1:Value([exact=JSString], value: "foo")*/
+/*member: testDoWhile1:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
testDoWhile1() {
dynamic a = 42;
do {
@@ -544,7 +555,7 @@
return a;
}
-/*member: testDoWhile2:[null]*/
+/*member: testDoWhile2:[null|powerset=1]*/
testDoWhile2() {
dynamic a = 42;
do {
@@ -556,10 +567,11 @@
return a;
}
-/*member: _#flag:[exact=_Cell]*/
-late bool /*Value([exact=JSBool], value: true)*/ /*update: [exact=_Cell]*/ flag;
+/*member: _#flag:[exact=_Cell|powerset=0]*/
+late bool /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ /*update: [exact=_Cell|powerset=0]*/
+flag;
-/*member: testDoWhile3:Value([exact=JSBool], value: false)*/
+/*member: testDoWhile3:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
testDoWhile3() {
dynamic a = 42;
do {
@@ -571,7 +583,7 @@
return a;
}
-/*member: testDoWhile4:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: testDoWhile4:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
testDoWhile4() {
dynamic a = 'foo';
do {
@@ -582,261 +594,269 @@
return a;
}
-/*member: testSpecialization1:[subclass=Object]*/
+/*member: testSpecialization1:[subclass=Object|powerset=0]*/
testSpecialization1() {
var a = topLevelGetter();
a - 42;
return a;
}
-/*member: testSpecialization2:[null|subclass=Object]*/
+/*member: testSpecialization2:[null|subclass=Object|powerset=1]*/
testSpecialization2() {
var a = topLevelGetter();
// Make [a] a captured variable. This should disable receiver
// specialization on [a].
(
- /*[exact=JSString]*/
+ /*[exact=JSString|powerset=0]*/
() => a.toString())();
a - 42;
return a;
}
-/*member: testSpecialization3:[null|exact=JSUInt31]*/
+/*member: testSpecialization3:[null|exact=JSUInt31|powerset=1]*/
testSpecialization3() {
var a = returnDynamic() ? null : 42;
- a. /*invoke: [null|exact=JSUInt31]*/ toString();
+ a. /*invoke: [null|exact=JSUInt31|powerset=1]*/ toString();
// Test that calling an [Object] method on [a] will not lead to
// infer that [a] is not null;
return a;
}
-/*member: testReturnNull1:[null]*/
-testReturnNull1(/*[null|subclass=Object]*/ a) {
+/*member: testReturnNull1:[null|powerset=1]*/
+testReturnNull1(/*[null|subclass=Object|powerset=1]*/ a) {
if (a == null) return a;
return null;
}
-/*member: testReturnNull2:[null]*/
-testReturnNull2(/*[null|subclass=Object]*/ a) {
+/*member: testReturnNull2:[null|powerset=1]*/
+testReturnNull2(/*[null|subclass=Object|powerset=1]*/ a) {
if (a != null) return null;
return a;
}
-/*member: testReturnNull3:[subclass=Object]*/
-testReturnNull3(/*[null|subclass=Object]*/ a) {
+/*member: testReturnNull3:[subclass=Object|powerset=0]*/
+testReturnNull3(/*[null|subclass=Object|powerset=1]*/ a) {
if (a == null) return 42;
return a;
}
-/*member: testReturnNull4:[null]*/
+/*member: testReturnNull4:[null|powerset=1]*/
testReturnNull4() {
var a = topLevelGetter();
if (a == null) return a;
return null;
}
-/*member: testReturnNull5:[null]*/
+/*member: testReturnNull5:[null|powerset=1]*/
testReturnNull5() {
var a = topLevelGetter();
if (a != null) return null;
return a;
}
-/*member: testReturnNull6:[subclass=Object]*/
+/*member: testReturnNull6:[subclass=Object|powerset=0]*/
testReturnNull6() {
var a = topLevelGetter();
if (a == null) return 42;
return a;
}
-/*member: testReturnNotEquals:[exact=JSBool]*/
+/*member: testReturnNotEquals:[exact=JSBool|powerset=0]*/
testReturnNotEquals() {
- return A() /*invoke: [exact=A]*/ != 54;
+ return A() /*invoke: [exact=A|powerset=0]*/ != 54;
}
-/*member: testReturnInvokeDynamicGetter:[null|subclass=Object]*/
-testReturnInvokeDynamicGetter() => A().myFactory /*invoke: [exact=A]*/ ();
+/*member: testReturnInvokeDynamicGetter:[null|subclass=Object|powerset=1]*/
+testReturnInvokeDynamicGetter() =>
+ A().myFactory /*invoke: [exact=A|powerset=0]*/ ();
-/*member: topLevelConstList:Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: topLevelConstList:Container([exact=JSUnmodifiableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
var topLevelConstList = const [42];
-/*member: topLevelGetter:[exact=JSUInt31]*/
+/*member: topLevelGetter:[exact=JSUInt31|powerset=0]*/
get topLevelGetter => 42;
-/*member: returnDynamic:[null|subclass=Object]*/
+/*member: returnDynamic:[null|subclass=Object|powerset=1]*/
returnDynamic() => topLevelGetter(42);
-/*member: returnTopLevelGetter:[exact=JSUInt31]*/
+/*member: returnTopLevelGetter:[exact=JSUInt31|powerset=0]*/
returnTopLevelGetter() => topLevelGetter;
class A {
factory A() = A.generative;
- /*member: A.generative:[exact=A]*/
+ /*member: A.generative:[exact=A|powerset=0]*/
A.generative();
- /*member: A.==:[exact=JSBool]*/
- operator ==(/*Union([exact=JSString], [exact=JSUInt31])*/ other) =>
- 42 as dynamic;
+ /*member: A.==:[exact=JSBool|powerset=0]*/
+ operator ==(
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ other,
+ ) => 42 as dynamic;
- /*member: A.myField:[exact=JSUInt31]*/
+ /*member: A.myField:[exact=JSUInt31|powerset=0]*/
get myField => 42;
- set myField(/*[subclass=JSUInt32]*/ a) {}
+ set myField(/*[subclass=JSUInt32|powerset=0]*/ a) {}
- /*member: A.returnInt1:[subclass=JSUInt32]*/
- returnInt1() => /*invoke: [exact=JSUInt31]*/
- ++ /*[subclass=A]*/ /*update: [subclass=A]*/ myField;
+ /*member: A.returnInt1:[subclass=JSUInt32|powerset=0]*/
+ returnInt1() => /*invoke: [exact=JSUInt31|powerset=0]*/
+ ++ /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ myField;
- /*member: A.returnInt2:[subclass=JSUInt32]*/
- returnInt2() => /*invoke: [exact=JSUInt31]*/
- ++this. /*[subclass=A]*/ /*update: [subclass=A]*/ myField;
+ /*member: A.returnInt2:[subclass=JSUInt32|powerset=0]*/
+ returnInt2() => /*invoke: [exact=JSUInt31|powerset=0]*/
+ ++this
+ . /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ myField;
- /*member: A.returnInt3:[subclass=JSUInt32]*/
+ /*member: A.returnInt3:[subclass=JSUInt32|powerset=0]*/
returnInt3() =>
- this. /*[subclass=A]*/ /*update: [subclass=A]*/ myField /*invoke: [exact=JSUInt31]*/ +=
+ this. /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ myField /*invoke: [exact=JSUInt31|powerset=0]*/ +=
42;
- /*member: A.returnInt4:[subclass=JSUInt32]*/
- returnInt4() => /*[subclass=A]*/ /*update: [subclass=A]*/
- myField /*invoke: [exact=JSUInt31]*/ += 42;
+ /*member: A.returnInt4:[subclass=JSUInt32|powerset=0]*/
+ returnInt4() => /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/
+ myField /*invoke: [exact=JSUInt31|powerset=0]*/ += 42;
- /*member: A.[]:[exact=JSUInt31]*/
- operator [](/*[exact=JSUInt31]*/ index) => 42;
+ /*member: A.[]:[exact=JSUInt31|powerset=0]*/
+ operator [](/*[exact=JSUInt31|powerset=0]*/ index) => 42;
- /*member: A.[]=:[null]*/
- operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {}
+ /*member: A.[]=:[null|powerset=1]*/
+ operator []=(
+ /*[exact=JSUInt31|powerset=0]*/ index,
+ /*[subclass=JSUInt32|powerset=0]*/ value,
+ ) {}
- /*member: A.returnInt5:[subclass=JSUInt32]*/
- returnInt5() => /*invoke: [exact=JSUInt31]*/
- ++this /*[subclass=A]*/ /*update: [subclass=A]*/ [0];
+ /*member: A.returnInt5:[subclass=JSUInt32|powerset=0]*/
+ returnInt5() => /*invoke: [exact=JSUInt31|powerset=0]*/
+ ++this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [0];
- /*member: A.returnInt6:[subclass=JSUInt32]*/
+ /*member: A.returnInt6:[subclass=JSUInt32|powerset=0]*/
returnInt6() =>
- this /*[subclass=A]*/ /*update: [subclass=A]*/ [0] /*invoke: [exact=JSUInt31]*/ +=
+ this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [0] /*invoke: [exact=JSUInt31|powerset=0]*/ +=
1;
- /*member: A.myFactory:[subclass=Closure]*/
- get myFactory => /*[exact=JSUInt31]*/ () => 42;
+ /*member: A.myFactory:[subclass=Closure|powerset=0]*/
+ get myFactory => /*[exact=JSUInt31|powerset=0]*/ () => 42;
}
class B extends A {
- /*member: B.:[exact=B]*/
+ /*member: B.:[exact=B|powerset=0]*/
B() : super.generative();
- /*member: B.returnInt1:[subclass=JSUInt32]*/
- returnInt1() => /*invoke: [exact=JSUInt31]*/
- ++new A(). /*[exact=A]*/ /*update: [exact=A]*/ myField;
+ /*member: B.returnInt1:[subclass=JSUInt32|powerset=0]*/
+ returnInt1() => /*invoke: [exact=JSUInt31|powerset=0]*/
+ ++new A()
+ . /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ myField;
- /*member: B.returnInt2:[subclass=JSUInt32]*/
+ /*member: B.returnInt2:[subclass=JSUInt32|powerset=0]*/
returnInt2() =>
- A(). /*[exact=A]*/ /*update: [exact=A]*/ myField /*invoke: [exact=JSUInt31]*/ +=
+ A(). /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ myField /*invoke: [exact=JSUInt31|powerset=0]*/ +=
4;
- /*member: B.returnInt3:[subclass=JSUInt32]*/
- returnInt3() => /*invoke: [exact=JSUInt31]*/
- ++new A() /*[exact=A]*/ /*update: [exact=A]*/ [0];
+ /*member: B.returnInt3:[subclass=JSUInt32|powerset=0]*/
+ returnInt3() => /*invoke: [exact=JSUInt31|powerset=0]*/
+ ++new A() /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ [0];
- /*member: B.returnInt4:[subclass=JSUInt32]*/
+ /*member: B.returnInt4:[subclass=JSUInt32|powerset=0]*/
returnInt4() =>
- A() /*[exact=A]*/ /*update: [exact=A]*/ [0] /*invoke: [exact=JSUInt31]*/ +=
+ A() /*[exact=A|powerset=0]*/ /*update: [exact=A|powerset=0]*/ [0] /*invoke: [exact=JSUInt31|powerset=0]*/ +=
42;
- /*member: B.returnInt5:[subclass=JSUInt32]*/
- returnInt5() => /*invoke: [exact=JSUInt31]*/ ++super.myField;
+ /*member: B.returnInt5:[subclass=JSUInt32|powerset=0]*/
+ returnInt5() => /*invoke: [exact=JSUInt31|powerset=0]*/ ++super.myField;
- /*member: B.returnInt6:[subclass=JSUInt32]*/
- returnInt6() => super.myField /*invoke: [exact=JSUInt31]*/ += 4;
+ /*member: B.returnInt6:[subclass=JSUInt32|powerset=0]*/
+ returnInt6() => super.myField /*invoke: [exact=JSUInt31|powerset=0]*/ += 4;
- /*member: B.returnInt7:[subclass=JSUInt32]*/
- returnInt7() => /*invoke: [exact=JSUInt31]*/ ++super[0];
+ /*member: B.returnInt7:[subclass=JSUInt32|powerset=0]*/
+ returnInt7() => /*invoke: [exact=JSUInt31|powerset=0]*/ ++super[0];
- /*member: B.returnInt8:[subclass=JSUInt32]*/
- returnInt8() => super[0] /*invoke: [exact=JSUInt31]*/ += 54;
+ /*member: B.returnInt8:[subclass=JSUInt32|powerset=0]*/
+ returnInt8() => super[0] /*invoke: [exact=JSUInt31|powerset=0]*/ += 54;
- /*member: B.returnInt9:[exact=JSUInt31]*/
+ /*member: B.returnInt9:[exact=JSUInt31|powerset=0]*/
returnInt9() => super.myField;
}
class C {
- /*member: C.myField:[subclass=JSPositiveInt]*/
+ /*member: C.myField:[subclass=JSPositiveInt|powerset=0]*/
var myField = 42;
- /*member: C.:[exact=C]*/
+ /*member: C.:[exact=C|powerset=0]*/
C();
- /*member: C.returnInt1:[subclass=JSPositiveInt]*/
- returnInt1() => /*invoke: [subclass=JSPositiveInt]*/
- ++ /*update: [exact=C]*/ /*[exact=C]*/ myField;
+ /*member: C.returnInt1:[subclass=JSPositiveInt|powerset=0]*/
+ returnInt1() => /*invoke: [subclass=JSPositiveInt|powerset=0]*/
+ ++ /*update: [exact=C|powerset=0]*/ /*[exact=C|powerset=0]*/ myField;
- /*member: C.returnInt2:[subclass=JSPositiveInt]*/
- returnInt2() => /*invoke: [subclass=JSPositiveInt]*/
- ++this. /*[exact=C]*/ /*update: [exact=C]*/ myField;
+ /*member: C.returnInt2:[subclass=JSPositiveInt|powerset=0]*/
+ returnInt2() => /*invoke: [subclass=JSPositiveInt|powerset=0]*/
+ ++this. /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ myField;
- /*member: C.returnInt3:[subclass=JSPositiveInt]*/
+ /*member: C.returnInt3:[subclass=JSPositiveInt|powerset=0]*/
returnInt3() =>
- this. /*[exact=C]*/ /*update: [exact=C]*/ myField /*invoke: [subclass=JSPositiveInt]*/ +=
+ this. /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ myField /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
42;
- /*member: C.returnInt4:[subclass=JSPositiveInt]*/
- returnInt4() => /*[exact=C]*/ /*update: [exact=C]*/
- myField /*invoke: [subclass=JSPositiveInt]*/ += 42;
+ /*member: C.returnInt4:[subclass=JSPositiveInt|powerset=0]*/
+ returnInt4() => /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/
+ myField /*invoke: [subclass=JSPositiveInt|powerset=0]*/ += 42;
- /*member: C.[]:[subclass=JSPositiveInt]*/
- operator [](/*[exact=JSUInt31]*/ index) => /*[exact=C]*/ myField;
+ /*member: C.[]:[subclass=JSPositiveInt|powerset=0]*/
+ operator [](/*[exact=JSUInt31|powerset=0]*/ index) => /*[exact=C|powerset=0]*/
+ myField;
- /*member: C.[]=:[null]*/
+ /*member: C.[]=:[null|powerset=1]*/
operator []=(
- /*[exact=JSUInt31]*/ index,
- /*[subclass=JSPositiveInt]*/ value,
+ /*[exact=JSUInt31|powerset=0]*/ index,
+ /*[subclass=JSPositiveInt|powerset=0]*/ value,
) {}
- /*member: C.returnInt5:[subclass=JSPositiveInt]*/
- returnInt5() => /*invoke: [subclass=JSPositiveInt]*/
- ++this /*[exact=C]*/ /*update: [exact=C]*/ [0];
+ /*member: C.returnInt5:[subclass=JSPositiveInt|powerset=0]*/
+ returnInt5() => /*invoke: [subclass=JSPositiveInt|powerset=0]*/
+ ++this /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ [0];
- /*member: C.returnInt6:[subclass=JSPositiveInt]*/
+ /*member: C.returnInt6:[subclass=JSPositiveInt|powerset=0]*/
returnInt6() =>
- this /*[exact=C]*/ /*update: [exact=C]*/ [0] /*invoke: [subclass=JSPositiveInt]*/ +=
+ this /*[exact=C|powerset=0]*/ /*update: [exact=C|powerset=0]*/ [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ +=
1;
}
-/*member: testCascade1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+/*member: testCascade1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
testCascade1() {
return [1, 2, 3]
- .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ add(
+ .. /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ add(
4,
)
- .. /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ add(
+ .. /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ add(
5,
);
}
-/*member: testCascade2:[exact=CascadeHelper]*/
+/*member: testCascade2:[exact=CascadeHelper|powerset=0]*/
testCascade2() {
return CascadeHelper()
- .. /*update: [exact=CascadeHelper]*/ a = "hello"
- .. /*update: [exact=CascadeHelper]*/ b = 42
- .. /*[exact=CascadeHelper]*/ i /*invoke: [subclass=JSPositiveInt]*/ /*update: [exact=CascadeHelper]*/ +=
+ .. /*update: [exact=CascadeHelper|powerset=0]*/ a = "hello"
+ .. /*update: [exact=CascadeHelper|powerset=0]*/ b = 42
+ .. /*[exact=CascadeHelper|powerset=0]*/ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ /*update: [exact=CascadeHelper|powerset=0]*/ +=
1;
}
-/*member: CascadeHelper.:[exact=CascadeHelper]*/
+/*member: CascadeHelper.:[exact=CascadeHelper|powerset=0]*/
class CascadeHelper {
- /*member: CascadeHelper.a:Value([null|exact=JSString], value: "hello")*/
+ /*member: CascadeHelper.a:Value([null|exact=JSString|powerset=1], value: "hello", powerset: 1)*/
var a;
- /*member: CascadeHelper.b:[null|exact=JSUInt31]*/
+ /*member: CascadeHelper.b:[null|exact=JSUInt31|powerset=1]*/
var b;
- /*member: CascadeHelper.i:[subclass=JSPositiveInt]*/
+ /*member: CascadeHelper.i:[subclass=JSPositiveInt|powerset=0]*/
var i = 0;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
// Ensure a function class is being instantiated.
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
() => 42;
returnNum1(true);
returnNum2(true);
@@ -904,33 +924,33 @@
testDoWhile2();
testDoWhile3();
testDoWhile4();
- A() /*invoke: [subclass=A]*/ == null;
+ A() /*invoke: [subclass=A|powerset=0]*/ == null;
A()
- .. /*invoke: [exact=A]*/ returnInt1()
- .. /*invoke: [exact=A]*/ returnInt2()
- .. /*invoke: [exact=A]*/ returnInt3()
- .. /*invoke: [exact=A]*/ returnInt4()
- .. /*invoke: [exact=A]*/ returnInt5()
- .. /*invoke: [exact=A]*/ returnInt6();
+ .. /*invoke: [exact=A|powerset=0]*/ returnInt1()
+ .. /*invoke: [exact=A|powerset=0]*/ returnInt2()
+ .. /*invoke: [exact=A|powerset=0]*/ returnInt3()
+ .. /*invoke: [exact=A|powerset=0]*/ returnInt4()
+ .. /*invoke: [exact=A|powerset=0]*/ returnInt5()
+ .. /*invoke: [exact=A|powerset=0]*/ returnInt6();
B()
- .. /*invoke: [exact=B]*/ returnInt1()
- .. /*invoke: [exact=B]*/ returnInt2()
- .. /*invoke: [exact=B]*/ returnInt3()
- .. /*invoke: [exact=B]*/ returnInt4()
- .. /*invoke: [exact=B]*/ returnInt5()
- .. /*invoke: [exact=B]*/ returnInt6()
- .. /*invoke: [exact=B]*/ returnInt7()
- .. /*invoke: [exact=B]*/ returnInt8()
- .. /*invoke: [exact=B]*/ returnInt9();
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt1()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt2()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt3()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt4()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt5()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt6()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt7()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt8()
+ .. /*invoke: [exact=B|powerset=0]*/ returnInt9();
C()
- .. /*invoke: [exact=C]*/ returnInt1()
- .. /*invoke: [exact=C]*/ returnInt2()
- .. /*invoke: [exact=C]*/ returnInt3()
- .. /*invoke: [exact=C]*/ returnInt4()
- .. /*invoke: [exact=C]*/ returnInt5()
- .. /*invoke: [exact=C]*/ returnInt6();
+ .. /*invoke: [exact=C|powerset=0]*/ returnInt1()
+ .. /*invoke: [exact=C|powerset=0]*/ returnInt2()
+ .. /*invoke: [exact=C|powerset=0]*/ returnInt3()
+ .. /*invoke: [exact=C|powerset=0]*/ returnInt4()
+ .. /*invoke: [exact=C|powerset=0]*/ returnInt5()
+ .. /*invoke: [exact=C|powerset=0]*/ returnInt6();
testReturnElementOfConstList1();
testReturnElementOfConstList2();
testReturnItselfOrInt(topLevelGetter());
diff --git a/pkg/compiler/test/inference/data/general6.dart b/pkg/compiler/test/inference/data/general6.dart
index 7fc90d9..3e726d1 100644
--- a/pkg/compiler/test/inference/data/general6.dart
+++ b/pkg/compiler/test/inference/data/general6.dart
@@ -2,14 +2,14 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:[exact=JSUInt31]*/
+/*member: foo:[exact=JSUInt31|powerset=0]*/
foo() {
var a = [1, 2, 3];
return a
- . /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/ first;
+ . /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/ first;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
foo();
}
diff --git a/pkg/compiler/test/inference/data/general7.dart b/pkg/compiler/test/inference/data/general7.dart
index bd8da3f3..a805b9d 100644
--- a/pkg/compiler/test/inference/data/general7.dart
+++ b/pkg/compiler/test/inference/data/general7.dart
@@ -6,10 +6,10 @@
/// file 'general7_ea.dart' contains similar tests for when assertions are
/// _enabled_.
-/*member: foo:[null]*/
-foo(/*[exact=JSUInt31]*/ x, [/*[null]*/ y]) => y;
+/*member: foo:[null|powerset=1]*/
+foo(/*[exact=JSUInt31|powerset=0]*/ x, [/*[null|powerset=1]*/ y]) => y;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
assert(foo('Hi', true), foo(true));
foo(1);
diff --git a/pkg/compiler/test/inference/data/general7_ea.dart b/pkg/compiler/test/inference/data/general7_ea.dart
index f23f8ee..0617d45 100644
--- a/pkg/compiler/test/inference/data/general7_ea.dart
+++ b/pkg/compiler/test/inference/data/general7_ea.dart
@@ -6,13 +6,13 @@
/// file 'general7.dart' contains similar tests for when assertions are
/// _disabled_.
-/*member: foo:Value([null|exact=JSBool], value: true)*/
+/*member: foo:Value([null|exact=JSBool|powerset=1], value: true, powerset: 1)*/
foo(
- /*Union([exact=JSBool], [exact=JSString], [exact=JSUInt31])*/ x, [
- /*Value([null|exact=JSBool], value: true)*/ y,
+ /*Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x, [
+ /*Value([null|exact=JSBool|powerset=1], value: true, powerset: 1)*/ y,
]) => y;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
assert(foo('Hi', true), foo(true));
foo(1);
diff --git a/pkg/compiler/test/inference/data/general8a.dart b/pkg/compiler/test/inference/data/general8a.dart
index 8f3815a..e215eba 100644
--- a/pkg/compiler/test/inference/data/general8a.dart
+++ b/pkg/compiler/test/inference/data/general8a.dart
@@ -2,13 +2,13 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:Value([exact=JSBool], value: false)*/
-foo(/*Value([exact=JSBool], value: false)*/ x) {
+/*member: foo:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
+foo(/*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) {
return x;
}
-/*member: bar:[null]*/
-bar(/*Value([exact=JSBool], value: false)*/ x) {
+/*member: bar:[null|powerset=1]*/
+bar(/*Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/ x) {
if (x) {
print("aaa");
} else {
@@ -16,7 +16,7 @@
}
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
bar(foo(false));
bar(foo(foo(false)));
diff --git a/pkg/compiler/test/inference/data/general8b.dart b/pkg/compiler/test/inference/data/general8b.dart
index b3d447e..710dd80 100644
--- a/pkg/compiler/test/inference/data/general8b.dart
+++ b/pkg/compiler/test/inference/data/general8b.dart
@@ -2,14 +2,14 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:[exact=JSBool]*/
-foo(/*[exact=JSUInt31]*/ x) {
- if (x /*invoke: [exact=JSUInt31]*/ > 3) return true;
+/*member: foo:[exact=JSBool|powerset=0]*/
+foo(/*[exact=JSUInt31|powerset=0]*/ x) {
+ if (x /*invoke: [exact=JSUInt31|powerset=0]*/ > 3) return true;
return false;
}
-/*member: bar:[null]*/
-bar(/*[exact=JSBool]*/ x) {
+/*member: bar:[null|powerset=1]*/
+bar(/*[exact=JSBool|powerset=0]*/ x) {
if (x) {
print("aaa");
} else {
@@ -17,7 +17,7 @@
}
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
bar(foo(5));
bar(foo(6));
diff --git a/pkg/compiler/test/inference/data/global_field_closure.dart b/pkg/compiler/test/inference/data/global_field_closure.dart
index 616c6f1..71f0dfc 100644
--- a/pkg/compiler/test/inference/data/global_field_closure.dart
+++ b/pkg/compiler/test/inference/data/global_field_closure.dart
@@ -2,34 +2,34 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method1:[exact=JSUInt31]*/
+/*member: method1:[exact=JSUInt31|powerset=0]*/
method1() {
return 42;
}
-/*member: method2:[exact=JSUInt31]*/
+/*member: method2:[exact=JSUInt31|powerset=0]*/
// Called only via [foo2] with a small integer.
-method2(/*[exact=JSUInt31]*/ a) {
+method2(/*[exact=JSUInt31|powerset=0]*/ a) {
return a;
}
-/*member: foo1:[subclass=Closure]*/
+/*member: foo1:[subclass=Closure|powerset=0]*/
var foo1 = method1;
-/*member: foo2:[subclass=Closure]*/
+/*member: foo2:[subclass=Closure|powerset=0]*/
var foo2 = method2;
-/*member: returnInt1:[null|subclass=Object]*/
+/*member: returnInt1:[null|subclass=Object|powerset=1]*/
returnInt1() {
return foo1();
}
-/*member: returnInt2:[null|subclass=Object]*/
+/*member: returnInt2:[null|subclass=Object|powerset=1]*/
returnInt2() {
return foo2(54);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt1();
returnInt2();
diff --git a/pkg/compiler/test/inference/data/global_field_closure2.dart b/pkg/compiler/test/inference/data/global_field_closure2.dart
index 42991dc..68c802a 100644
--- a/pkg/compiler/test/inference/data/global_field_closure2.dart
+++ b/pkg/compiler/test/inference/data/global_field_closure2.dart
@@ -2,21 +2,21 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: method:[exact=JSUInt31]*/
+/*member: method:[exact=JSUInt31|powerset=0]*/
// Called only via [foo] with a small integer.
-method(/*[exact=JSUInt31]*/ a) {
+method(/*[exact=JSUInt31|powerset=0]*/ a) {
return a;
}
-/*member: foo:[subclass=Closure]*/
+/*member: foo:[subclass=Closure|powerset=0]*/
var foo = method;
-/*member: returnInt:[null|subclass=Object]*/
+/*member: returnInt:[null|subclass=Object|powerset=1]*/
returnInt() {
return foo(54);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt();
}
diff --git a/pkg/compiler/test/inference/data/if.dart b/pkg/compiler/test/inference/data/if.dart
index ecb1a6f..b488749 100644
--- a/pkg/compiler/test/inference/data/if.dart
+++ b/pkg/compiler/test/inference/data/if.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleIfThen();
simpleIfThenElse();
@@ -12,13 +12,13 @@
// Test if-then statement
////////////////////////////////////////////////////////////////////////////////
-/*member: _simpleIfThen:[null|exact=JSUInt31]*/
-_simpleIfThen(/*[exact=JSBool]*/ c) {
+/*member: _simpleIfThen:[null|exact=JSUInt31|powerset=1]*/
+_simpleIfThen(/*[exact=JSBool|powerset=0]*/ c) {
if (c) return 1;
return null;
}
-/*member: simpleIfThen:[null]*/
+/*member: simpleIfThen:[null|powerset=1]*/
simpleIfThen() {
_simpleIfThen(true);
_simpleIfThen(false);
@@ -28,15 +28,15 @@
// Test if-then-else statement
////////////////////////////////////////////////////////////////////////////////
-/*member: _simpleIfThenElse:[null|exact=JSUInt31]*/
-_simpleIfThenElse(/*[exact=JSBool]*/ c) {
+/*member: _simpleIfThenElse:[null|exact=JSUInt31|powerset=1]*/
+_simpleIfThenElse(/*[exact=JSBool|powerset=0]*/ c) {
if (c)
return 1;
else
return null;
}
-/*member: simpleIfThenElse:[null]*/
+/*member: simpleIfThenElse:[null|powerset=1]*/
simpleIfThenElse() {
_simpleIfThenElse(true);
_simpleIfThenElse(false);
diff --git a/pkg/compiler/test/inference/data/if_null.dart b/pkg/compiler/test/inference/data/if_null.dart
index ecd22f5..8d95daa 100644
--- a/pkg/compiler/test/inference/data/if_null.dart
+++ b/pkg/compiler/test/inference/data/if_null.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
ifNull();
ifNotNullInvoke();
@@ -13,10 +13,10 @@
// If-null on parameter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _ifNull:[exact=JSUInt31]*/
-_ifNull(/*[null|exact=JSUInt31]*/ o) => o ?? 0;
+/*member: _ifNull:[exact=JSUInt31|powerset=0]*/
+_ifNull(/*[null|exact=JSUInt31|powerset=1]*/ o) => o ?? 0;
-/*member: ifNull:[null]*/
+/*member: ifNull:[null|powerset=1]*/
ifNull() {
_ifNull(null);
_ifNull(0);
@@ -26,15 +26,15 @@
// If-not-null access on parameter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _ifNotNullInvoke:[null|exact=JSBool]*/
-_ifNotNullInvoke(/*[null|exact=JSUInt31]*/ o) {
+/*member: _ifNotNullInvoke:[null|exact=JSBool|powerset=1]*/
+_ifNotNullInvoke(/*[null|exact=JSUInt31|powerset=1]*/ o) {
return o
?.
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
isEven;
}
-/*member: ifNotNullInvoke:[null]*/
+/*member: ifNotNullInvoke:[null|powerset=1]*/
ifNotNullInvoke() {
_ifNotNullInvoke(null);
_ifNotNullInvoke(0);
@@ -44,12 +44,12 @@
// As above but unconditional access.
////////////////////////////////////////////////////////////////////////////////
-/*member: _notIfNotNullInvoke:[exact=JSBool]*/
-_notIfNotNullInvoke(/*[null|exact=JSUInt31]*/ o) {
- return o. /*[null|exact=JSUInt31]*/ isEven;
+/*member: _notIfNotNullInvoke:[exact=JSBool|powerset=0]*/
+_notIfNotNullInvoke(/*[null|exact=JSUInt31|powerset=1]*/ o) {
+ return o. /*[null|exact=JSUInt31|powerset=1]*/ isEven;
}
-/*member: notIfNotNullInvoke:[null]*/
+/*member: notIfNotNullInvoke:[null|powerset=1]*/
notIfNotNullInvoke() {
_notIfNotNullInvoke(null);
_notIfNotNullInvoke(0);
diff --git a/pkg/compiler/test/inference/data/index.dart b/pkg/compiler/test/inference/data/index.dart
index ff1d39e..c0c0b14 100644
--- a/pkg/compiler/test/inference/data/index.dart
+++ b/pkg/compiler/test/inference/data/index.dart
@@ -6,11 +6,11 @@
// Lookup into a singleton list.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexSingle:[exact=JSUInt31]*/
+/*member: listIndexSingle:[exact=JSUInt31|powerset=0]*/
listIndexSingle() {
var list = [0];
return list
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
[0];
}
@@ -18,11 +18,11 @@
// Lookup into a list with multiple elements.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexMultiple:[exact=JSUInt31]*/
+/*member: listIndexMultiple:[exact=JSUInt31|powerset=0]*/
listIndexMultiple() {
var list = [0, 1, 2, 3];
return list
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 4)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 4, powerset: 0)*/
[2];
}
@@ -30,11 +30,11 @@
// Lookup into a list with an out-of-range index.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexBad:[exact=JSUInt31]*/
+/*member: listIndexBad:[exact=JSUInt31|powerset=0]*/
listIndexBad() {
var list = [0, 1];
return list
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
[3];
}
@@ -42,11 +42,11 @@
// Lookup into a list with mixed element types.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexMixed:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: listIndexMixed:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
listIndexMixed() {
var list = [0, ''];
return list
- /*Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 2, powerset: 0)*/
[0];
}
@@ -54,11 +54,11 @@
// Lookup into a singleton map.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapLookupSingle:[null|exact=JSUInt31]*/
+/*member: mapLookupSingle:[null|exact=JSUInt31|powerset=1]*/
mapLookupSingle() {
var map = {0: 1};
return map
- /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[0];
}
@@ -66,11 +66,11 @@
// Lookup into a map with multiple entries.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapLookupMultiple:[null|exact=JSUInt31]*/
+/*member: mapLookupMultiple:[null|exact=JSUInt31|powerset=1]*/
mapLookupMultiple() {
var map = {0: 1, 2: 3, 4: 5};
return map
- /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[2];
}
@@ -78,11 +78,11 @@
// Lookup into a map with a missing key.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapLookupMissing:[null|exact=JSUInt31]*/
+/*member: mapLookupMissing:[null|exact=JSUInt31|powerset=1]*/
mapLookupMissing() {
var map = {0: 1};
return map
- /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[2];
}
@@ -90,11 +90,11 @@
// Lookup into a map with mixed key types.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapLookupMixedKeys:[null|exact=JSUInt31]*/
+/*member: mapLookupMixedKeys:[null|exact=JSUInt31|powerset=1]*/
mapLookupMixedKeys() {
var map = {0: 1, '': 2};
return map
- /*Map([exact=JsLinkedHashMap], key: Union([exact=JSString], [exact=JSUInt31]), value: [null|exact=JSUInt31])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[''];
}
@@ -102,11 +102,11 @@
// Lookup into a map with mixed value types.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapLookupMixedValues:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: mapLookupMixedValues:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
mapLookupMixedValues() {
var map = {0: 1, 2: ''};
return map
- /*Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: Union(null, [exact=JSString], [exact=JSUInt31]))*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1), powerset: 0)*/
[2];
}
@@ -114,11 +114,11 @@
// Lookup into a singleton map with String keys.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryLookupSingle:Value([exact=JSString], value: "bar")*/
+/*member: dictionaryLookupSingle:Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
dictionaryLookupSingle() {
var map = {'foo': 'bar'};
return map
- /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: Value([null|exact=JSString], value: "bar"), map: {foo: Value([exact=JSString], value: "bar")})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1), map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0)}, powerset: 0)*/
['foo'];
}
@@ -126,11 +126,11 @@
// Lookup into a map with String keys.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryLookupMultiple:Value([exact=JSString], value: "boz")*/
+/*member: dictionaryLookupMultiple:Value([exact=JSString|powerset=0], value: "boz", powerset: 0)*/
dictionaryLookupMultiple() {
var map = {'foo': 'bar', 'baz': 'boz'};
return map
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSString], map: {foo: Value([exact=JSString], value: "bar"), baz: Value([exact=JSString], value: "boz")})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSString|powerset=1], map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0), baz: Value([exact=JSString|powerset=0], value: "boz", powerset: 0)}, powerset: 0)*/
['baz'];
}
@@ -138,11 +138,11 @@
// Lookup into a map with String keys with a missing key.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryLookupMissing:[null]*/
+/*member: dictionaryLookupMissing:[null|powerset=1]*/
dictionaryLookupMissing() {
var map = {'foo': 'bar', 'baz': 'boz'};
return map
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSString], map: {foo: Value([exact=JSString], value: "bar"), baz: Value([exact=JSString], value: "boz")})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSString|powerset=1], map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0), baz: Value([exact=JSString|powerset=0], value: "boz", powerset: 0)}, powerset: 0)*/
['unknown'];
}
@@ -150,11 +150,11 @@
// Lookup into a string-to-int map.
////////////////////////////////////////////////////////////////////////////////
-/*member: intDictionaryLookupSingle:[exact=JSUInt31]*/
+/*member: intDictionaryLookupSingle:[exact=JSUInt31|powerset=0]*/
intDictionaryLookupSingle() {
var map = {'foo': 0};
return map
- /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: [null|exact=JSUInt31], map: {foo: [exact=JSUInt31]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {foo: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
['foo'];
}
@@ -162,32 +162,32 @@
// Index access on custom class.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.[]:[exact=JSUInt31]*/
- operator [](/*[exact=JSUInt31]*/ index) => index;
+ /*member: Class1.[]:[exact=JSUInt31|powerset=0]*/
+ operator [](/*[exact=JSUInt31|powerset=0]*/ index) => index;
}
-/*member: customIndex:[exact=JSUInt31]*/
-customIndex() => Class1() /*[exact=Class1]*/ [42];
+/*member: customIndex:[exact=JSUInt31|powerset=0]*/
+customIndex() => Class1() /*[exact=Class1|powerset=0]*/ [42];
////////////////////////////////////////////////////////////////////////////////
// Index access on custom class through `this`.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.[]:[exact=JSUInt31]*/
- operator [](/*[exact=JSUInt31]*/ index) => index;
+ /*member: Class2.[]:[exact=JSUInt31|powerset=0]*/
+ operator [](/*[exact=JSUInt31|powerset=0]*/ index) => index;
- /*member: Class2.method:[exact=JSUInt31]*/
- method() => this /*[exact=Class2]*/ [42];
+ /*member: Class2.method:[exact=JSUInt31|powerset=0]*/
+ method() => this /*[exact=Class2|powerset=0]*/ [42];
}
-/*member: customIndexThis:[exact=JSUInt31]*/
-customIndexThis() => Class2(). /*invoke: [exact=Class2]*/ method();
+/*member: customIndexThis:[exact=JSUInt31|powerset=0]*/
+customIndexThis() => Class2(). /*invoke: [exact=Class2|powerset=0]*/ method();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
listIndexSingle();
listIndexMultiple();
diff --git a/pkg/compiler/test/inference/data/index_call.dart b/pkg/compiler/test/inference/data/index_call.dart
index 3f4c53a..09d201e 100644
--- a/pkg/compiler/test/inference/data/index_call.dart
+++ b/pkg/compiler/test/inference/data/index_call.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
listIndexCall();
listIndexExplicitCall();
@@ -13,78 +13,83 @@
multiMapListIndexCall();
}
-/*member: listIndexCall:[null|subclass=Object]*/
+/*member: listIndexCall:[null|subclass=Object|powerset=1]*/
listIndexCall() {
- var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ a}) => a;
+ var closure = /*[exact=JSUInt31|powerset=0]*/
+ ({/*[exact=JSUInt31|powerset=0]*/ a}) => a;
var a = [closure];
- return a /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/ [0](
+ return a /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/ [0](
a: 0,
);
}
-/*member: listIndexExplicitCall:[null|subclass=Object]*/
+/*member: listIndexExplicitCall:[null|subclass=Object|powerset=1]*/
listIndexExplicitCall() {
- var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ b}) => b;
+ var closure = /*[exact=JSUInt31|powerset=0]*/
+ ({/*[exact=JSUInt31|powerset=0]*/ b}) => b;
var a = [closure];
- return a /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/ [0]
+ return a /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/ [0]
.call(b: 0);
}
-/*member: multiListIndex:[subclass=JSPositiveInt]*/
+/*member: multiListIndex:[subclass=JSPositiveInt|powerset=0]*/
multiListIndex() {
var a = [
[0],
];
return a
- /*Container([exact=JSExtendableArray], element: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1), length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0), length: 1, powerset: 0)*/
[0]
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
[0]
- . /*invoke: [exact=JSUInt31]*/ abs();
+ . /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
}
-/*member: multiListIndexCall:[null|subclass=Object]*/
+/*member: multiListIndexCall:[null|subclass=Object|powerset=1]*/
multiListIndexCall() {
- var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ c}) => c;
+ var closure = /*[exact=JSUInt31|powerset=0]*/
+ ({/*[exact=JSUInt31|powerset=0]*/ c}) => c;
var a = [
[closure],
];
return a
- /*Container([exact=JSExtendableArray], element: Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1), length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0), length: 1, powerset: 0)*/
[0]
- /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/
[0](c: 0);
}
-/*member: multiMapIndex:[subclass=JSPositiveInt]*/
+/*member: multiMapIndex:[subclass=JSPositiveInt|powerset=0]*/
multiMapIndex() {
var a = {
'a': {'b': 0},
};
- return a /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Dictionary([null|exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]}), map: {a: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]})})*/ ['a']!
- /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|exact=JSUInt31], map: {b: [exact=JSUInt31]})*/
+ return a /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "a", powerset: 0), value: Dictionary([null|exact=JsLinkedHashMap|powerset=1], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {b: [exact=JSUInt31|powerset=0]}, powerset: 1), map: {a: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {b: [exact=JSUInt31|powerset=0]}, powerset: 0)}, powerset: 0)*/ ['a']!
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {b: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
['b']!
- . /*invoke: [exact=JSUInt31]*/ abs();
+ . /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
}
-/*member: multiMapIndexCall:[null|subclass=Object]*/
+/*member: multiMapIndexCall:[null|subclass=Object|powerset=1]*/
multiMapIndexCall() {
- var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ d}) => d;
+ var closure = /*[exact=JSUInt31|powerset=0]*/
+ ({/*[exact=JSUInt31|powerset=0]*/ d}) => d;
var a = {
'a': {'b': closure},
};
- return a /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Dictionary([null|exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]}), map: {a: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]})})*/ ['a']!
- /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "b"), value: [null|subclass=Closure], map: {b: [subclass=Closure]})*/
+ return a /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "a", powerset: 0), value: Dictionary([null|exact=JsLinkedHashMap|powerset=1], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {b: [subclass=Closure|powerset=0]}, powerset: 1), map: {a: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {b: [subclass=Closure|powerset=0]}, powerset: 0)}, powerset: 0)*/ ['a']!
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "b", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {b: [subclass=Closure|powerset=0]}, powerset: 0)*/
['b']!(d: 0);
}
-/*member: multiMapListIndexCall:[null|subclass=Object]*/
+/*member: multiMapListIndexCall:[null|subclass=Object|powerset=1]*/
multiMapListIndexCall() {
- var closure = /*[exact=JSUInt31]*/ ({/*[exact=JSUInt31]*/ d}) => d;
+ var closure = /*[exact=JSUInt31|powerset=0]*/
+ ({/*[exact=JSUInt31|powerset=0]*/ d}) => d;
var a = {
'a': [closure],
};
- return a /*Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "a"), value: Container([null|exact=JSExtendableArray], element: [subclass=Closure], length: 1), map: {a: Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)})*/ ['a']!
- /*Container([exact=JSExtendableArray], element: [subclass=Closure], length: 1)*/
+ return a /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "a", powerset: 0), value: Container([null|exact=JSExtendableArray|powerset=1], element: [subclass=Closure|powerset=0], length: 1, powerset: 1), map: {a: Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)}, powerset: 0)*/ ['a']!
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=Closure|powerset=0], length: 1, powerset: 0)*/
[0](d: 0);
}
diff --git a/pkg/compiler/test/inference/data/index_postfix.dart b/pkg/compiler/test/inference/data/index_postfix.dart
index 4c91c51..3202eee 100644
--- a/pkg/compiler/test/inference/data/index_postfix.dart
+++ b/pkg/compiler/test/inference/data/index_postfix.dart
@@ -2,47 +2,50 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
listIndexPostfixIncrement();
listIndexPostfixDecrement();
superIndexPostfixIncrement();
}
-/*member: listIndexPostfixIncrement:[subclass=JSPositiveInt]*/
+/*member: listIndexPostfixIncrement:[subclass=JSPositiveInt|powerset=0]*/
listIndexPostfixIncrement() {
var list = [0];
return list
- /*Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
- /*update: Container([exact=JSExtendableArray], element: [subclass=JSPositiveInt], length: 1)*/
- [0] /*invoke: [subclass=JSPositiveInt]*/ ++;
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSPositiveInt|powerset=0], length: 1, powerset: 0)*/
+ [0] /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
}
-/*member: listIndexPostfixDecrement:[subclass=JSInt]*/
+/*member: listIndexPostfixDecrement:[subclass=JSInt|powerset=0]*/
listIndexPostfixDecrement() {
var list = [0];
return list
- /*Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
- /*update: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: 1)*/
- [0] /*invoke: [subclass=JSInt]*/ --;
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: 1, powerset: 0)*/
+ [0] /*invoke: [subclass=JSInt|powerset=0]*/ --;
}
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
class Super1 {
- /*member: Super1.[]:[exact=JSUInt31]*/
- operator [](/*[exact=JSUInt31]*/ index) => 42;
+ /*member: Super1.[]:[exact=JSUInt31|powerset=0]*/
+ operator [](/*[exact=JSUInt31|powerset=0]*/ index) => 42;
- /*member: Super1.[]=:[null]*/
- operator []=(/*[exact=JSUInt31]*/ index, /*[subclass=JSUInt32]*/ value) {}
+ /*member: Super1.[]=:[null|powerset=1]*/
+ operator []=(
+ /*[exact=JSUInt31|powerset=0]*/ index,
+ /*[subclass=JSUInt32|powerset=0]*/ value,
+ ) {}
}
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 extends Super1 {
- /*member: Class1.method:[exact=JSUInt31]*/
- method() => super[0] /*invoke: [exact=JSUInt31]*/ ++;
+ /*member: Class1.method:[exact=JSUInt31|powerset=0]*/
+ method() => super[0] /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
}
-/*member: superIndexPostfixIncrement:[null]*/
+/*member: superIndexPostfixIncrement:[null|powerset=1]*/
superIndexPostfixIncrement() {
- Class1(). /*invoke: [exact=Class1]*/ method();
+ Class1(). /*invoke: [exact=Class1|powerset=0]*/ method();
}
diff --git a/pkg/compiler/test/inference/data/index_set.dart b/pkg/compiler/test/inference/data/index_set.dart
index b0427a6..312a6da 100644
--- a/pkg/compiler/test/inference/data/index_set.dart
+++ b/pkg/compiler/test/inference/data/index_set.dart
@@ -6,11 +6,11 @@
// Update to a singleton list.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexSetSingle:[exact=JSUInt31]*/
+/*member: listIndexSetSingle:[exact=JSUInt31|powerset=0]*/
listIndexSetSingle() {
var list = [0];
return list
- /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
[0] =
42;
}
@@ -19,11 +19,11 @@
// Update to a list with multiple elements.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexSetMultiple:[exact=JSUInt31]*/
+/*member: listIndexSetMultiple:[exact=JSUInt31|powerset=0]*/
listIndexSetMultiple() {
var list = [0, 1, 2, 3];
return list
- /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 4)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 4, powerset: 0)*/
[2] =
42;
}
@@ -32,11 +32,11 @@
// Update to a list with an out-of-range index.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexSetBad:[exact=JSUInt31]*/
+/*member: listIndexSetBad:[exact=JSUInt31|powerset=0]*/
listIndexSetBad() {
var list = [0, 1];
return list
- /*update: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
[3] =
42;
}
@@ -45,11 +45,11 @@
// Update to a list with mixed element types.
////////////////////////////////////////////////////////////////////////////////
-/*member: listIndexSetMixed:[exact=JSUInt31]*/
+/*member: listIndexSetMixed:[exact=JSUInt31|powerset=0]*/
listIndexSetMixed() {
dynamic list = [''];
return list
- /*update: Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 1)*/
+ /*update: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 1, powerset: 0)*/
[0] =
42;
}
@@ -58,11 +58,11 @@
// Update to a empty map.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapUpdateEmpty:[exact=JSUInt31]*/
+/*member: mapUpdateEmpty:[exact=JSUInt31|powerset=0]*/
mapUpdateEmpty() {
var map = {};
return map
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[0] =
42;
}
@@ -71,11 +71,11 @@
// Update to a singleton map.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapUpdateSingle:[exact=JSUInt31]*/
+/*member: mapUpdateSingle:[exact=JSUInt31|powerset=0]*/
mapUpdateSingle() {
var map = {0: 1};
return map
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[0] =
42;
}
@@ -84,11 +84,11 @@
// Update to a map with multiple entries.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapUpdateMultiple:[exact=JSUInt31]*/
+/*member: mapUpdateMultiple:[exact=JSUInt31|powerset=0]*/
mapUpdateMultiple() {
var map = {0: 1, 2: 3, 4: 5};
return map
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[2] =
42;
}
@@ -97,11 +97,11 @@
// Update to a map with a missing key.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapUpdateMissing:[exact=JSUInt31]*/
+/*member: mapUpdateMissing:[exact=JSUInt31|powerset=0]*/
mapUpdateMissing() {
var map = {0: 1};
return map
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSUInt31])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[2] =
42;
}
@@ -110,11 +110,11 @@
// Update to a map with mixed key types.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapUpdateMixedKeys:[exact=JSUInt31]*/
+/*member: mapUpdateMixedKeys:[exact=JSUInt31|powerset=0]*/
mapUpdateMixedKeys() {
dynamic map = {'': 2};
return map
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSUInt31])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSUInt31|powerset=1], powerset: 0)*/
[0] =
42;
}
@@ -123,11 +123,11 @@
// Update to a map with mixed value types.
////////////////////////////////////////////////////////////////////////////////
-/*member: mapUpdateMixedValues:[exact=JSUInt31]*/
+/*member: mapUpdateMixedValues:[exact=JSUInt31|powerset=0]*/
mapUpdateMixedValues() {
dynamic map = {2: ''};
return map
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSString])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSString|powerset=1], powerset: 0)*/
[2] =
42;
}
@@ -136,11 +136,11 @@
// Update to an empty map with String keys.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryUpdateEmpty:Value([exact=JSString], value: "bar")*/
+/*member: dictionaryUpdateEmpty:Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
dictionaryUpdateEmpty() {
var map = {};
return map
- /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: Value([null|exact=JSString], value: "bar"), map: {foo: Value([null|exact=JSString], value: "bar")})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1), map: {foo: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1)}, powerset: 0)*/
['foo'] =
'bar';
}
@@ -149,11 +149,11 @@
// Update to a singleton map with String keys with a new value.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryUpdateSingle:Value([exact=JSString], value: "boz")*/
+/*member: dictionaryUpdateSingle:Value([exact=JSString|powerset=0], value: "boz", powerset: 0)*/
dictionaryUpdateSingle() {
var map = {'foo': 'bar'};
return map
- /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: [null|exact=JSString], map: {foo: [exact=JSString]})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: [null|exact=JSString|powerset=1], map: {foo: [exact=JSString|powerset=0]}, powerset: 0)*/
['foo'] =
'boz';
}
@@ -162,11 +162,11 @@
// Update to a singleton map with String keys with the same value.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryReUpdateSingle:Value([exact=JSString], value: "bar")*/
+/*member: dictionaryReUpdateSingle:Value([exact=JSString|powerset=0], value: "bar", powerset: 0)*/
dictionaryReUpdateSingle() {
var map = {'foo': 'bar'};
return map
- /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: Value([null|exact=JSString], value: "bar"), map: {foo: Value([exact=JSString], value: "bar")})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: Value([null|exact=JSString|powerset=1], value: "bar", powerset: 1), map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0)}, powerset: 0)*/
['foo'] =
'bar';
}
@@ -175,11 +175,11 @@
// Update to a map with String keys.
////////////////////////////////////////////////////////////////////////////////
-/*member: dictionaryUpdateMultiple:Value([exact=JSString], value: "boz")*/
+/*member: dictionaryUpdateMultiple:Value([exact=JSString|powerset=0], value: "boz", powerset: 0)*/
dictionaryUpdateMultiple() {
var map = {'foo': 'bar'};
return map
- /*update: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSString], map: {foo: Value([exact=JSString], value: "bar"), baz: Value([null|exact=JSString], value: "boz")})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSString|powerset=1], map: {foo: Value([exact=JSString|powerset=0], value: "bar", powerset: 0), baz: Value([null|exact=JSString|powerset=1], value: "boz", powerset: 1)}, powerset: 0)*/
['baz'] =
'boz';
}
@@ -188,16 +188,16 @@
// Update to a string-to-int map.
////////////////////////////////////////////////////////////////////////////////
-/*member: intDictionaryUpdateSingle:[exact=JSUInt31]*/
+/*member: intDictionaryUpdateSingle:[exact=JSUInt31|powerset=0]*/
intDictionaryUpdateSingle() {
var map = {};
return map
- /*update: Dictionary([exact=JsLinkedHashMap], key: Value([exact=JSString], value: "foo"), value: [null|exact=JSUInt31], map: {foo: [null|exact=JSUInt31]})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "foo", powerset: 0), value: [null|exact=JSUInt31|powerset=1], map: {foo: [null|exact=JSUInt31|powerset=1]}, powerset: 0)*/
['foo'] =
0;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
listIndexSetSingle();
listIndexSetMultiple();
diff --git a/pkg/compiler/test/inference/data/init_get.dart b/pkg/compiler/test/inference/data/init_get.dart
index adae6e3..d9c2926 100644
--- a/pkg/compiler/test/inference/data/init_get.dart
+++ b/pkg/compiler/test/inference/data/init_get.dart
@@ -2,10 +2,10 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: getter:[exact=JSUInt31]*/
+/*member: getter:[exact=JSUInt31|powerset=0]*/
get getter => 42;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
getGetter();
getGetterInFinalField();
@@ -20,53 +20,53 @@
// Access a top level getter directly.
////////////////////////////////////////////////////////////////////////////////
-/*member: getGetter:[exact=JSUInt31]*/
+/*member: getGetter:[exact=JSUInt31|powerset=0]*/
getGetter() => getter;
////////////////////////////////////////////////////////////////////////////////
// Access a top level getter in a final instance field initializer.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:[exact=JSUInt31]*/
+ /*member: Class1.field:[exact=JSUInt31|powerset=0]*/
final field = getter;
}
-/*member: getGetterInFinalField:[exact=JSUInt31]*/
-getGetterInFinalField() => Class1(). /*[exact=Class1]*/ field;
+/*member: getGetterInFinalField:[exact=JSUInt31|powerset=0]*/
+getGetterInFinalField() => Class1(). /*[exact=Class1|powerset=0]*/ field;
////////////////////////////////////////////////////////////////////////////////
// Access a top level getter in a non-final instance field initializer.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:[exact=JSUInt31]*/
+ /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
var field = getter;
}
-/*member: getGetterInField:[exact=JSUInt31]*/
-getGetterInField() => Class2(). /*[exact=Class2]*/ field;
+/*member: getGetterInField:[exact=JSUInt31|powerset=0]*/
+getGetterInField() => Class2(). /*[exact=Class2|powerset=0]*/ field;
////////////////////////////////////////////////////////////////////////////////
// Access a top level getter in a final top level field initializer.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field1:[null|exact=JSUInt31]*/
+/*member: _field1:[null|exact=JSUInt31|powerset=1]*/
final _field1 = getter;
-/*member: getGetterInFinalTopLevelField:[null|exact=JSUInt31]*/
+/*member: getGetterInFinalTopLevelField:[null|exact=JSUInt31|powerset=1]*/
getGetterInFinalTopLevelField() => _field1;
////////////////////////////////////////////////////////////////////////////////
// Access a top level getter in a non-final top level field initializer.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field2:[null|exact=JSUInt31]*/
+/*member: _field2:[null|exact=JSUInt31|powerset=1]*/
var _field2 = getter;
-/*member: getGetterInTopLevelField:[null|exact=JSUInt31]*/
+/*member: getGetterInTopLevelField:[null|exact=JSUInt31|powerset=1]*/
getGetterInTopLevelField() => _field2;
////////////////////////////////////////////////////////////////////////////////
@@ -74,11 +74,11 @@
////////////////////////////////////////////////////////////////////////////////
abstract class Class3 {
- /*member: Class3.field:[null|exact=JSUInt31]*/
+ /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
static final field = getter;
}
-/*member: getGetterInFinalStaticField:[null|exact=JSUInt31]*/
+/*member: getGetterInFinalStaticField:[null|exact=JSUInt31|powerset=1]*/
getGetterInFinalStaticField() => Class3.field;
////////////////////////////////////////////////////////////////////////////////
@@ -86,9 +86,9 @@
////////////////////////////////////////////////////////////////////////////////
abstract class Class4 {
- /*member: Class4.field:[null|exact=JSUInt31]*/
+ /*member: Class4.field:[null|exact=JSUInt31|powerset=1]*/
static var field = getter;
}
-/*member: getGetterInStaticField:[null|exact=JSUInt31]*/
+/*member: getGetterInStaticField:[null|exact=JSUInt31|powerset=1]*/
getGetterInStaticField() => Class4.field;
diff --git a/pkg/compiler/test/inference/data/initializer.dart b/pkg/compiler/test/inference/data/initializer.dart
index 8fab986..af17e41 100644
--- a/pkg/compiler/test/inference/data/initializer.dart
+++ b/pkg/compiler/test/inference/data/initializer.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
initializingFormal();
fieldInitializer();
@@ -15,14 +15,14 @@
////////////////////////////////////////////////////////////////////////////////
class Class1 {
- /*member: Class1.field:[exact=JSUInt31]*/
+ /*member: Class1.field:[exact=JSUInt31|powerset=0]*/
var field;
- /*member: Class1.:[exact=Class1]*/
- Class1(this. /*[exact=JSUInt31]*/ field);
+ /*member: Class1.:[exact=Class1|powerset=0]*/
+ Class1(this. /*[exact=JSUInt31|powerset=0]*/ field);
}
-/*member: initializingFormal:[exact=Class1]*/
+/*member: initializingFormal:[exact=Class1|powerset=0]*/
initializingFormal() => Class1(0);
////////////////////////////////////////////////////////////////////////////////
@@ -30,14 +30,14 @@
////////////////////////////////////////////////////////////////////////////////
class Class2 {
- /*member: Class2.field:[exact=JSUInt31]*/
+ /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
var field;
- /*member: Class2.:[exact=Class2]*/
- Class2(/*[exact=JSUInt31]*/ field) : this.field = field;
+ /*member: Class2.:[exact=Class2|powerset=0]*/
+ Class2(/*[exact=JSUInt31|powerset=0]*/ field) : this.field = field;
}
-/*member: fieldInitializer:[exact=Class2]*/
+/*member: fieldInitializer:[exact=Class2|powerset=0]*/
fieldInitializer() => Class2(0);
////////////////////////////////////////////////////////////////////////////////
@@ -45,17 +45,17 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- /*member: Class3.field:[exact=JSUInt31]*/
+ /*member: Class3.field:[exact=JSUInt31|powerset=0]*/
var field;
- /*member: Class3._:[exact=Class3]*/
- Class3._(this. /*[exact=JSUInt31]*/ field);
+ /*member: Class3._:[exact=Class3|powerset=0]*/
+ Class3._(this. /*[exact=JSUInt31|powerset=0]*/ field);
- /*member: Class3.:[exact=Class3]*/
- Class3(/*[exact=JSUInt31]*/ field) : this._(field);
+ /*member: Class3.:[exact=Class3|powerset=0]*/
+ Class3(/*[exact=JSUInt31|powerset=0]*/ field) : this._(field);
}
-/*member: thisInitializer:[exact=Class3]*/
+/*member: thisInitializer:[exact=Class3|powerset=0]*/
thisInitializer() => Class3(0);
////////////////////////////////////////////////////////////////////////////////
@@ -63,17 +63,17 @@
////////////////////////////////////////////////////////////////////////////////
abstract class SuperClass4 {
- /*member: SuperClass4.field:[exact=JSUInt31]*/
+ /*member: SuperClass4.field:[exact=JSUInt31|powerset=0]*/
var field;
- /*member: SuperClass4.:[exact=Class4]*/
- SuperClass4(this. /*[exact=JSUInt31]*/ field);
+ /*member: SuperClass4.:[exact=Class4|powerset=0]*/
+ SuperClass4(this. /*[exact=JSUInt31|powerset=0]*/ field);
}
class Class4 extends SuperClass4 {
- /*member: Class4.:[exact=Class4]*/
- Class4(/*[exact=JSUInt31]*/ field) : super(field);
+ /*member: Class4.:[exact=Class4|powerset=0]*/
+ Class4(/*[exact=JSUInt31|powerset=0]*/ field) : super(field);
}
-/*member: superInitializer:[exact=Class4]*/
+/*member: superInitializer:[exact=Class4|powerset=0]*/
superInitializer() => Class4(0);
diff --git a/pkg/compiler/test/inference/data/instance.dart b/pkg/compiler/test/inference/data/instance.dart
index a305aca..13a4cd3 100644
--- a/pkg/compiler/test/inference/data/instance.dart
+++ b/pkg/compiler/test/inference/data/instance.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
thisExact();
thisSubclass();
@@ -17,104 +17,104 @@
/// Return `this` of a class with no subclasses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.method:[exact=Class1]*/
+ /*member: Class1.method:[exact=Class1|powerset=0]*/
method() => this;
}
-/*member: thisExact:[exact=Class1]*/
-thisExact() => Class1(). /*invoke: [exact=Class1]*/ method();
+/*member: thisExact:[exact=Class1|powerset=0]*/
+thisExact() => Class1(). /*invoke: [exact=Class1|powerset=0]*/ method();
////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class with an instantiated subclass.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2a.:[exact=Class2a]*/
+/*member: Class2a.:[exact=Class2a|powerset=0]*/
class Class2a {
- /*member: Class2a.method:[subclass=Class2a]*/
+ /*member: Class2a.method:[subclass=Class2a|powerset=0]*/
method() => this;
}
-/*member: Class2b.:[exact=Class2b]*/
+/*member: Class2b.:[exact=Class2b|powerset=0]*/
class Class2b extends Class2a {}
-/*member: thisSubclass:[subclass=Class2a]*/
+/*member: thisSubclass:[subclass=Class2a|powerset=0]*/
thisSubclass() {
Class2b();
- return Class2a(). /*invoke: [exact=Class2a]*/ method();
+ return Class2a(). /*invoke: [exact=Class2a|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class with no instantiated subclasses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3a.:[exact=Class3a]*/
+/*member: Class3a.:[exact=Class3a|powerset=0]*/
class Class3a {
- /*member: Class3a.method:[exact=Class3a]*/
+ /*member: Class3a.method:[exact=Class3a|powerset=0]*/
method() => this;
}
class Class3b extends Class3a {}
-/*member: thisSubclassExact:[exact=Class3a]*/
+/*member: thisSubclassExact:[exact=Class3a|powerset=0]*/
thisSubclassExact() {
- return Class3a(). /*invoke: [exact=Class3a]*/ method();
+ return Class3a(). /*invoke: [exact=Class3a|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class that is mixed into an instantiated class.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4a.:[exact=Class4a]*/
+/*member: Class4a.:[exact=Class4a|powerset=0]*/
mixin class Class4a {
- /*member: Class4a.method:[subtype=Class4a]*/
+ /*member: Class4a.method:[subtype=Class4a|powerset=0]*/
method() => this;
}
-/*member: Class4b.:[exact=Class4b]*/
+/*member: Class4b.:[exact=Class4b|powerset=0]*/
class Class4b extends Object with Class4a {}
-/*member: thisSubtype:[subtype=Class4a]*/
+/*member: thisSubtype:[subtype=Class4a|powerset=0]*/
thisSubtype() {
Class4b();
- return Class4a(). /*invoke: [exact=Class4a]*/ method();
+ return Class4a(). /*invoke: [exact=Class4a|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a class that is mixed into an uninstantiated class.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class5a.:[exact=Class5a]*/
+/*member: Class5a.:[exact=Class5a|powerset=0]*/
mixin class Class5a {
- /*member: Class5a.method:[exact=Class5a]*/
+ /*member: Class5a.method:[exact=Class5a|powerset=0]*/
method() => this;
}
class Class5b extends Object with Class5a {}
-/*member: thisSubtypeExact:[exact=Class5a]*/
+/*member: thisSubtypeExact:[exact=Class5a|powerset=0]*/
thisSubtypeExact() {
- return Class5a(). /*invoke: [exact=Class5a]*/ method();
+ return Class5a(). /*invoke: [exact=Class5a|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
/// Return `this` of a mixed in class that is itself instantiated.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class6a.:[exact=Class6a]*/
+/*member: Class6a.:[exact=Class6a|powerset=0]*/
mixin class Class6a {
- /*member: Class6a.method:[subtype=Class6a]*/
+ /*member: Class6a.method:[subtype=Class6a|powerset=0]*/
method() => this;
}
-/*member: Class6b.:[exact=Class6b]*/
+/*member: Class6b.:[exact=Class6b|powerset=0]*/
class Class6b extends Object with Class6a {}
-/*member: thisSubtypeMixedIn:[subtype=Class6a]*/
+/*member: thisSubtypeMixedIn:[subtype=Class6a|powerset=0]*/
thisSubtypeMixedIn() {
Class6a();
- return Class6b(). /*invoke: [exact=Class6b]*/ method();
+ return Class6b(). /*invoke: [exact=Class6b|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
@@ -122,14 +122,14 @@
////////////////////////////////////////////////////////////////////////////////
mixin Class7a {
- /*member: Class7a.method:[exact=Class7b]*/
+ /*member: Class7a.method:[exact=Class7b|powerset=0]*/
method() => this;
}
-/*member: Class7b.:[exact=Class7b]*/
+/*member: Class7b.:[exact=Class7b|powerset=0]*/
class Class7b extends Object with Class7a {}
-/*member: thisSubtypeExactMixedIn:[exact=Class7b]*/
+/*member: thisSubtypeExactMixedIn:[exact=Class7b|powerset=0]*/
thisSubtypeExactMixedIn() {
- return Class7b(). /*invoke: [exact=Class7b]*/ method();
+ return Class7b(). /*invoke: [exact=Class7b|powerset=0]*/ method();
}
diff --git a/pkg/compiler/test/inference/data/issue13354.dart b/pkg/compiler/test/inference/data/issue13354.dart
index 5a9049a..3c07a25 100644
--- a/pkg/compiler/test/inference/data/issue13354.dart
+++ b/pkg/compiler/test/inference/data/issue13354.dart
@@ -4,26 +4,26 @@
// Regression test for issue 13354.
-/*member: bar:[exact=JSUInt31]*/
+/*member: bar:[exact=JSUInt31|powerset=0]*/
bar() => 42;
-/*member: baz:[subclass=Closure]*/
+/*member: baz:[subclass=Closure|powerset=0]*/
baz() => bar;
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.foo:[exact=JSUInt31]*/
+ /*member: A.foo:[exact=JSUInt31|powerset=0]*/
foo() => 42;
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:[subclass=Closure]*/
+ /*member: B.foo:[subclass=Closure|powerset=0]*/
foo() => super.foo;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
baz();
- B(). /*invoke: [exact=B]*/ foo();
+ B(). /*invoke: [exact=B|powerset=0]*/ foo();
}
diff --git a/pkg/compiler/test/inference/data/issue48304.dart b/pkg/compiler/test/inference/data/issue48304.dart
index dc77fc3..376725d 100644
--- a/pkg/compiler/test/inference/data/issue48304.dart
+++ b/pkg/compiler/test/inference/data/issue48304.dart
@@ -6,29 +6,37 @@
call<T>();
}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C implements B {
- /*member: C.call:[null]*/
+ /*member: C.call:[null|powerset=1]*/
call<T>() => print(T);
}
abstract class A {}
class Wrapper {
- /*member: Wrapper.:[exact=Wrapper]*/
- Wrapper(this. /*[exact=C]*/ b, this. /*[exact=C]*/ call);
- /*member: Wrapper.b:[exact=C]*/
+ /*member: Wrapper.:[exact=Wrapper|powerset=0]*/
+ Wrapper(
+ this. /*[exact=C|powerset=0]*/ b,
+ this. /*[exact=C|powerset=0]*/ call,
+ );
+ /*member: Wrapper.b:[exact=C|powerset=0]*/
final B b;
- /*member: Wrapper.call:[exact=C]*/
+ /*member: Wrapper.call:[exact=C|powerset=0]*/
final B call;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
B b = C();
- b/*invoke: [exact=C]*/ <A>();
- Wrapper(b, b).b<A> /*invoke: [exact=Wrapper]*/ ();
- (Wrapper(b, b). /*[exact=Wrapper]*/ b)<A> /*invoke: [exact=C]*/ ();
- Wrapper(b, b).call<A> /*invoke: [exact=Wrapper]*/ ();
- (Wrapper(b, b). /*[exact=Wrapper]*/ call)<A> /*invoke: [exact=C]*/ ();
+ b/*invoke: [exact=C|powerset=0]*/ <A>();
+ Wrapper(b, b).b<A> /*invoke: [exact=Wrapper|powerset=0]*/ ();
+ (Wrapper(
+ b,
+ b,
+ ). /*[exact=Wrapper|powerset=0]*/ b)<A> /*invoke: [exact=C|powerset=0]*/ ();
+ Wrapper(b, b).call<A> /*invoke: [exact=Wrapper|powerset=0]*/ ();
+ (Wrapper(b, b). /*[exact=Wrapper|powerset=0]*/ call)<
+ A
+ > /*invoke: [exact=C|powerset=0]*/ ();
}
diff --git a/pkg/compiler/test/inference/data/issue_46770.dart b/pkg/compiler/test/inference/data/issue_46770.dart
index 739bd53..deedd96 100644
--- a/pkg/compiler/test/inference/data/issue_46770.dart
+++ b/pkg/compiler/test/inference/data/issue_46770.dart
@@ -6,37 +6,39 @@
void m1();
}
-/*member: L1.:[exact=L1]*/
+/*member: L1.:[exact=L1|powerset=0]*/
class L1 implements L {
@pragma('dart2js:noInline')
- /*member: L1.m1:[null]*/
+ /*member: L1.m1:[null|powerset=1]*/
void m1() => print("L1");
}
-/*member: L2.:[exact=L2]*/
+/*member: L2.:[exact=L2|powerset=0]*/
class L2 implements L {
@pragma('dart2js:noInline')
- /*member: L2.m1:[null]*/
+ /*member: L2.m1:[null|powerset=1]*/
void m1() => print("L2");
}
-/*member: L3.:[exact=L3]*/
+/*member: L3.:[exact=L3|powerset=0]*/
class L3 implements L {
@pragma('dart2js:noInline')
- /*member: L3.m1:[null]*/
+ /*member: L3.m1:[null|powerset=1]*/
void m1() => print("L3");
}
-/*member: cTrue:[exact=JSBool]*/
+/*member: cTrue:[exact=JSBool|powerset=0]*/
bool cTrue = confuse(true);
-/*member: value:[exact=JSUInt31]*/
+/*member: value:[exact=JSUInt31|powerset=0]*/
int value = confuse(1);
@pragma('dart2js:noInline')
-/*member: confuse:Union([exact=JSBool], [exact=JSUInt31])*/
-confuse(/*Union([exact=JSBool], [exact=JSUInt31])*/ x) => x;
+/*member: confuse:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+confuse(
+ /*Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ x,
+) => x;
-/*member: test1:Union(null, [exact=L2], [exact=L3])*/
+/*member: test1:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test1() {
L? sourceInfo = L1();
switch (value) {
@@ -51,11 +53,12 @@
return null;
}
- sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test2:Union([exact=L1], [exact=L2], [exact=L3])*/
+/*member: test2:Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/
test2() {
L? sourceInfo = L1();
switch (value) {
@@ -70,11 +73,12 @@
// Do nothing
}
- sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test3:Union(null, [exact=L2], [exact=L3])*/
+/*member: test3:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test3() {
L? sourceInfo = L1();
switchTarget:
@@ -90,11 +94,12 @@
return null;
}
- sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test4:Union(null, [exact=L1], [exact=L3])*/
+/*member: test4:Union(null, [exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test4() {
L sourceInfo = L1();
switch (value) {
@@ -107,18 +112,20 @@
break;
otherCase:
case 2:
- sourceInfo. /*invoke: Union([exact=L1], [exact=L2])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], powerset: 0)*/ m1();
sourceInfo = L1();
break;
default:
return null;
}
- sourceInfo. /*invoke: Union([exact=L1], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test5:Union(null, [exact=L1], [exact=L2], [exact=L3])*/
+/*member: test5:Union(null, [exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test5() {
L sourceInfo = L1();
switch (value) {
@@ -136,11 +143,12 @@
return null;
}
- sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test6:Union(null, [exact=L2], [exact=L3])*/
+/*member: test6:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test6() {
L sourceInfo = L1();
switch (value) {
@@ -159,11 +167,12 @@
return null;
}
- sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test7:[null|exact=L3]*/
+/*member: test7:[null|exact=L3|powerset=1]*/
test7() {
L? sourceInfo = L1();
switch (value) {
@@ -178,11 +187,11 @@
return null;
}
- sourceInfo. /*invoke: [exact=L3]*/ m1();
+ sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
return sourceInfo;
}
-/*member: test8:[null|exact=L3]*/
+/*member: test8:[null|exact=L3|powerset=1]*/
test8() {
L? sourceInfo = L1();
switch (value) {
@@ -197,11 +206,11 @@
return null;
}
- sourceInfo. /*invoke: [exact=L3]*/ m1();
+ sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
return sourceInfo;
}
-/*member: test9:[null|exact=L3]*/
+/*member: test9:[null|exact=L3|powerset=1]*/
test9() {
L? sourceInfo = L1();
switch (value) {
@@ -216,11 +225,11 @@
return null;
}
- sourceInfo. /*invoke: [exact=L3]*/ m1();
+ sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
return sourceInfo;
}
-/*member: test10:Union(null, [exact=L1], [exact=L2], [exact=L3])*/
+/*member: test10:Union(null, [exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test10() {
L sourceInfo = L1();
try {
@@ -239,11 +248,12 @@
// Do nothing
}
- sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test11:[null|exact=L3]*/
+/*member: test11:[null|exact=L3|powerset=1]*/
test11() {
L sourceInfo = L1();
switch (value) {
@@ -257,11 +267,11 @@
default:
return null;
}
- sourceInfo. /*invoke: [exact=L3]*/ m1();
+ sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
return sourceInfo;
}
-/*member: test12:Union(null, [exact=L1], [exact=L3])*/
+/*member: test12:Union(null, [exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test12() {
L? sourceInfo = L1();
switch (value) {
@@ -276,11 +286,12 @@
// Do nothing
}
- sourceInfo. /*invoke: Union([exact=L1], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test13:Union(null, [exact=L2], [exact=L3])*/
+/*member: test13:Union(null, [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test13() {
L? sourceInfo = L1();
switch (value) {
@@ -295,11 +306,12 @@
sourceInfo = L2();
}
- sourceInfo. /*invoke: Union([exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test14:Union(null, [exact=L1], [exact=L2], [exact=L3])*/
+/*member: test14:Union(null, [exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 1)*/
test14() {
L sourceInfo = L1();
whileLabel:
@@ -315,14 +327,15 @@
default:
return null;
}
- sourceInfo. /*invoke: [exact=L3]*/ m1();
+ sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
break;
}
- sourceInfo. /*invoke: Union([exact=L1], [exact=L2], [exact=L3])*/ m1();
+ sourceInfo
+ . /*invoke: Union([exact=L1|powerset=0], [exact=L2|powerset=0], [exact=L3|powerset=0], powerset: 0)*/ m1();
return sourceInfo;
}
-/*member: test15:[null|exact=L3]*/
+/*member: test15:[null|exact=L3|powerset=1]*/
test15() {
L sourceInfo = L1();
switch (value) {
@@ -340,11 +353,11 @@
return null;
}
- sourceInfo. /*invoke: [exact=L3]*/ m1();
+ sourceInfo. /*invoke: [exact=L3|powerset=0]*/ m1();
return sourceInfo;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
diff --git a/pkg/compiler/test/inference/data/issue_48571.dart b/pkg/compiler/test/inference/data/issue_48571.dart
index 4acccc8..0204637 100644
--- a/pkg/compiler/test/inference/data/issue_48571.dart
+++ b/pkg/compiler/test/inference/data/issue_48571.dart
@@ -2,77 +2,77 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: Base.:[subclass=Base]*/
+/*member: Base.:[subclass=Base|powerset=0]*/
abstract class Base {}
-/*member: Child1.:[exact=Child1]*/
+/*member: Child1.:[exact=Child1|powerset=0]*/
class Child1 extends Base {}
-/*member: Child2.:[exact=Child2]*/
+/*member: Child2.:[exact=Child2|powerset=0]*/
class Child2 extends Base {}
-/*member: trivial:Value([exact=JSBool], value: true)*/
-bool trivial(/*[exact=JSBool]*/ x) => true;
+/*member: trivial:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
+bool trivial(/*[exact=JSBool|powerset=0]*/ x) => true;
-/*member: either:Union([exact=Child1], [exact=Child2])*/
+/*member: either:Union([exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 0)*/
Base either =
DateTime.now()
- . /*[exact=DateTime]*/ millisecondsSinceEpoch /*invoke: [subclass=JSInt]*/ >
+ . /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch /*invoke: [subclass=JSInt|powerset=0]*/ >
0
? Child2()
: Child1();
-/*member: test1:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test1:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
test1() {
Base child = either;
if (trivial(child is Child1 && true)) return child;
return null;
}
-/*member: test2:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test2:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
test2() {
Base child = either;
if (child is Child1 || trivial(child is Child1 && true)) return child;
return null;
}
-/*member: test3:[null|exact=Child2]*/
+/*member: test3:[null|exact=Child2|powerset=1]*/
test3() {
Base child = either;
if (trivial(child is Child1 && true) && child is Child2) return child;
return null;
}
-/*member: test4:[null|exact=Child2]*/
+/*member: test4:[null|exact=Child2|powerset=1]*/
test4() {
Base child = either;
if (child is Child2 && trivial(child is Child1 && true)) return child;
return null;
}
-/*member: test5:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test5:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
test5() {
Base child = either;
- if ((child is Child1 && true) /*invoke: [exact=JSBool]*/ == false)
+ if ((child is Child1 && true) /*invoke: [exact=JSBool|powerset=0]*/ == false)
return child;
return null;
}
-/*member: test6:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test6:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
test6() {
Base child = either;
if (trivial(child is Child1 ? false : true)) return child;
return null;
}
-/*member: test7:Union(null, [exact=Child1], [exact=Child2])*/
+/*member: test7:Union(null, [exact=Child1|powerset=0], [exact=Child2|powerset=0], powerset: 1)*/
test7() {
Base child = either;
if (trivial(trivial(child is Child1 && true))) return child;
return null;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
diff --git a/pkg/compiler/test/inference/data/issue_52170.dart b/pkg/compiler/test/inference/data/issue_52170.dart
index de3870c..8303588 100644
--- a/pkg/compiler/test/inference/data/issue_52170.dart
+++ b/pkg/compiler/test/inference/data/issue_52170.dart
@@ -2,16 +2,16 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: getInt:[exact=JSUInt31]*/
+/*member: getInt:[exact=JSUInt31|powerset=0]*/
int get getInt => 42;
-/*member: foo:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: foo:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
foo() {
dynamic local = 3;
for (
int i = 0;
- i /*invoke: [subclass=JSPositiveInt]*/ < 10;
- i /*invoke: [subclass=JSPositiveInt]*/ ++
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10;
+ i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++
) {
switch (getInt) {
case 42:
@@ -19,14 +19,14 @@
default:
local = 'hello';
}
- if (i /*invoke: [subclass=JSPositiveInt]*/ > 5) {
+ if (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ > 5) {
return local;
}
}
return null;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
foo();
}
diff --git a/pkg/compiler/test/inference/data/issue_53944.dart b/pkg/compiler/test/inference/data/issue_53944.dart
index ec66229..034787a 100644
--- a/pkg/compiler/test/inference/data/issue_53944.dart
+++ b/pkg/compiler/test/inference/data/issue_53944.dart
@@ -4,51 +4,55 @@
// Make sure first and last selectors properly update types.
-/*member: testUnchangedFirst:[null]*/
-void testUnchangedFirst(/*Value([exact=JSBool], value: true)*/ x) {}
+/*member: testUnchangedFirst:[null|powerset=1]*/
+void testUnchangedFirst(
+ /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ x,
+) {}
-/*member: testFirst1:[null]*/
-void testFirst1(/*[exact=JSBool]*/ x) {}
+/*member: testFirst1:[null|powerset=1]*/
+void testFirst1(/*[exact=JSBool|powerset=0]*/ x) {}
-/*member: testFirst2:[null]*/
-void testFirst2(/*[exact=JSBool]*/ x) {}
+/*member: testFirst2:[null|powerset=1]*/
+void testFirst2(/*[exact=JSBool|powerset=0]*/ x) {}
-/*member: testUnchangedLast:[null]*/
-void testUnchangedLast(/*Value([exact=JSBool], value: true)*/ x) {}
+/*member: testUnchangedLast:[null|powerset=1]*/
+void testUnchangedLast(
+ /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ x,
+) {}
-/*member: testLast1:[null]*/
-void testLast1(/*[exact=JSBool]*/ x) {}
+/*member: testLast1:[null|powerset=1]*/
+void testLast1(/*[exact=JSBool|powerset=0]*/ x) {}
-/*member: testLast2:[null]*/
-void testLast2(/*[exact=JSBool]*/ x) {}
+/*member: testLast2:[null|powerset=1]*/
+void testLast2(/*[exact=JSBool|powerset=0]*/ x) {}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
final List<Object> x = [true, true];
testFirst1(
- x. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+ x. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
);
- x. /*update: Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first =
+ x. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first =
false;
testFirst2(
- x. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+ x. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
);
final List<Object> y = [true, true];
testLast1(
- y. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+ y. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
);
- y. /*update: Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ last =
+ y. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ last =
false;
testLast2(
- y. /*Container([exact=JSExtendableArray], element: [exact=JSBool], length: 2)*/ first,
+ y. /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSBool|powerset=0], length: 2, powerset: 0)*/ first,
);
final List<Object> z = [true, true];
testUnchangedFirst(
- z. /*Container([exact=JSExtendableArray], element: Value([exact=JSBool], value: true), length: 2)*/ first,
+ z. /*Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSBool|powerset=0], value: true, powerset: 0), length: 2, powerset: 0)*/ first,
);
testUnchangedLast(
- z. /*Container([exact=JSExtendableArray], element: Value([exact=JSBool], value: true), length: 2)*/ last,
+ z. /*Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSBool|powerset=0], value: true, powerset: 0), length: 2, powerset: 0)*/ last,
);
}
diff --git a/pkg/compiler/test/inference/data/js_interop.dart b/pkg/compiler/test/inference/data/js_interop.dart
index ce6a004..355c946 100644
--- a/pkg/compiler/test/inference/data/js_interop.dart
+++ b/pkg/compiler/test/inference/data/js_interop.dart
@@ -7,7 +7,7 @@
import 'package:js/js.dart';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
anonymousClass();
jsInteropClass();
@@ -16,37 +16,37 @@
@JS()
@anonymous
class Class1 {
- /*member: Class1.:[null|subclass=Object]*/
+ /*member: Class1.:[null|subclass=Object|powerset=1]*/
external factory Class1({
- /*[exact=JSUInt31]*/ a,
- /*Value([exact=JSString], value: "")*/ b,
+ /*[exact=JSUInt31|powerset=0]*/ a,
+ /*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ b,
});
}
-/*member: anonymousClass:[subclass=LegacyJavaScriptObject]*/
+/*member: anonymousClass:[subclass=LegacyJavaScriptObject|powerset=0]*/
anonymousClass() => Class1(a: 1, b: '');
@JS()
class JsInteropClass {
- /*member: JsInteropClass.:[null|subclass=Object]*/
+ /*member: JsInteropClass.:[null|subclass=Object|powerset=1]*/
external JsInteropClass();
- /*member: JsInteropClass.getter:[null|subclass=Object]*/
+ /*member: JsInteropClass.getter:[null|subclass=Object|powerset=1]*/
external int get getter;
- external void set setter(int /*[subclass=JSInt]*/ value);
+ external void set setter(int /*[subclass=JSInt|powerset=0]*/ value);
- /*member: JsInteropClass.method:[null|subclass=Object]*/
- external int method(int /*[exact=JSUInt31]*/ a);
+ /*member: JsInteropClass.method:[null|subclass=Object|powerset=1]*/
+ external int method(int /*[exact=JSUInt31|powerset=0]*/ a);
}
-/*member: jsInteropClass:[subclass=JSInt]*/
+/*member: jsInteropClass:[subclass=JSInt|powerset=0]*/
jsInteropClass() {
JsInteropClass cls = JsInteropClass();
- return cls. /*update: [exact=JsInteropClass]*/ setter =
- cls. /*[exact=JsInteropClass]*/ getter /*invoke: [subclass=JSInt]*/ +
- cls. /*invoke: [exact=JsInteropClass]*/ method(
+ return cls. /*update: [exact=JsInteropClass|powerset=0]*/ setter =
+ cls. /*[exact=JsInteropClass|powerset=0]*/ getter /*invoke: [subclass=JSInt|powerset=0]*/ +
+ cls. /*invoke: [exact=JsInteropClass|powerset=0]*/ method(
0,
- ) /*invoke: [subclass=JSInt]*/ +
+ ) /*invoke: [subclass=JSInt|powerset=0]*/ +
10;
}
diff --git a/pkg/compiler/test/inference/data/late_field.dart b/pkg/compiler/test/inference/data/late_field.dart
index 2038243..1f85282 100644
--- a/pkg/compiler/test/inference/data/late_field.dart
+++ b/pkg/compiler/test/inference/data/late_field.dart
@@ -4,18 +4,19 @@
import 'package:compiler/src/util/testing.dart';
-/*member: Foo.:[exact=Foo]*/
+/*member: Foo.:[exact=Foo|powerset=0]*/
class Foo {
- /*member: Foo._#Foo#x#AI:[sentinel|exact=JSUInt31]*/
- /*member: Foo.x:[exact=JSUInt31]*/
- late int /*[exact=Foo]*/ /*update: [exact=Foo]*/ x = 42;
+ /*member: Foo._#Foo#x#AI:[sentinel|exact=JSUInt31|powerset=2]*/
+ /*member: Foo.x:[exact=JSUInt31|powerset=0]*/
+ late int /*[exact=Foo|powerset=0]*/ /*update: [exact=Foo|powerset=0]*/ x = 42;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
makeLive(test(Foo()));
}
@pragma('dart2js:noInline')
-/*member: test:[exact=JSUInt31]*/
-int test(Foo /*[exact=Foo]*/ foo) => foo. /*[exact=Foo]*/ x;
+/*member: test:[exact=JSUInt31|powerset=0]*/
+int test(Foo /*[exact=Foo|powerset=0]*/ foo) =>
+ foo. /*[exact=Foo|powerset=0]*/ x;
diff --git a/pkg/compiler/test/inference/data/list.dart b/pkg/compiler/test/inference/data/list.dart
index e77b765..0eb8a7f 100644
--- a/pkg/compiler/test/inference/data/list.dart
+++ b/pkg/compiler/test/inference/data/list.dart
@@ -4,7 +4,7 @@
import 'dart:typed_data';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
emptyList();
nullList();
@@ -28,65 +28,65 @@
newUint8List();
}
-/*member: emptyList:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: emptyList:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
emptyList() => [];
-/*member: constList:Container([exact=JSUnmodifiableArray], element: [empty], length: 0)*/
+/*member: constList:Container([exact=JSUnmodifiableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
constList() => const [];
-/*member: nullList:Container([exact=JSExtendableArray], element: [null], length: 1)*/
+/*member: nullList:Container([exact=JSExtendableArray|powerset=0], element: [null|powerset=1], length: 1, powerset: 0)*/
nullList() => [null];
-/*member: constNullList:Container([exact=JSUnmodifiableArray], element: [null], length: 1)*/
+/*member: constNullList:Container([exact=JSUnmodifiableArray|powerset=0], element: [null|powerset=1], length: 1, powerset: 0)*/
constNullList() => const [null];
-/*member: intList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
+/*member: intList:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 3, powerset: 0)*/
intList() => [1, 2, 3];
-/*member: newFilledList:Container([exact=JSFixedArray], element: Value([exact=JSString], value: ""), length: 3)*/
+/*member: newFilledList:Container([exact=JSFixedArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "", powerset: 0), length: 3, powerset: 0)*/
newFilledList() => List.filled(3, '');
-/*member: newFilledGrowableList:Container([exact=JSExtendableArray], element: Value([exact=JSString], value: ""), length: 3)*/
+/*member: newFilledGrowableList:Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "", powerset: 0), length: 3, powerset: 0)*/
newFilledGrowableList() => List.filled(3, '', growable: true);
-/*member: newFloat32x4List:[exact=NativeFloat32x4List]*/
+/*member: newFloat32x4List:[exact=NativeFloat32x4List|powerset=0]*/
newFloat32x4List() => Float32x4List(4);
-/*member: newInt32x4List:[exact=NativeInt32x4List]*/
+/*member: newInt32x4List:[exact=NativeInt32x4List|powerset=0]*/
newInt32x4List() => Int32x4List(5);
-/*member: newFloat64x2List:[exact=NativeFloat64x2List]*/
+/*member: newFloat64x2List:[exact=NativeFloat64x2List|powerset=0]*/
newFloat64x2List() => Float64x2List(6);
-/*member: newFloat32List:Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 7)*/
+/*member: newFloat32List:Container([exact=NativeFloat32List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 7, powerset: 0)*/
newFloat32List() => Float32List(7);
-/*member: newFloat64List:Container([exact=NativeFloat64List], element: [subclass=JSNumber], length: 8)*/
+/*member: newFloat64List:Container([exact=NativeFloat64List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 8, powerset: 0)*/
newFloat64List() => Float64List(8);
-/*member: newInt16List:Container([exact=NativeInt16List], element: [subclass=JSInt], length: 9)*/
+/*member: newInt16List:Container([exact=NativeInt16List|powerset=0], element: [subclass=JSInt|powerset=0], length: 9, powerset: 0)*/
newInt16List() => Int16List(9);
////////////////////////////////////////////////////////////////////////////////
// Create a Int32List using an unchanged non-final top-level field as length.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field1:[exact=JSUInt31]*/
+/*member: _field1:[exact=JSUInt31|powerset=0]*/
var _field1 = 10;
-/*member: newInt32List:Container([exact=NativeInt32List], element: [subclass=JSInt], length: 10)*/
+/*member: newInt32List:Container([exact=NativeInt32List|powerset=0], element: [subclass=JSInt|powerset=0], length: 10, powerset: 0)*/
newInt32List() => Int32List(_field1);
////////////////////////////////////////////////////////////////////////////////
// Create a Int32List using a changed non-final top-level field as length.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field1b:[subclass=JSPositiveInt]*/
+/*member: _field1b:[subclass=JSPositiveInt|powerset=0]*/
var _field1b = 10;
-/*member: newInt32List2:Container([exact=NativeInt32List], element: [subclass=JSInt], length: null)*/
+/*member: newInt32List2:Container([exact=NativeInt32List|powerset=0], element: [subclass=JSInt|powerset=0], length: null, powerset: 0)*/
newInt32List2() {
- _field1b /*invoke: [subclass=JSPositiveInt]*/ ++;
+ _field1b /*invoke: [subclass=JSPositiveInt|powerset=0]*/ ++;
return Int32List(_field1b);
}
@@ -94,10 +94,10 @@
// Create a Int8List using a final top-level field as length.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field2:[exact=JSUInt31]*/
+/*member: _field2:[exact=JSUInt31|powerset=0]*/
final _field2 = 11;
-/*member: newInt8List:Container([exact=NativeInt8List], element: [subclass=JSInt], length: 11)*/
+/*member: newInt8List:Container([exact=NativeInt8List|powerset=0], element: [subclass=JSInt|powerset=0], length: 11, powerset: 0)*/
newInt8List() => Int8List(_field2);
////////////////////////////////////////////////////////////////////////////////
@@ -106,21 +106,21 @@
const _field3 = 12;
-/*member: newUint16List:Container([exact=NativeUint16List], element: [exact=JSUInt31], length: 12)*/
+/*member: newUint16List:Container([exact=NativeUint16List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 12, powerset: 0)*/
newUint16List() => Uint16List(_field3);
////////////////////////////////////////////////////////////////////////////////
// Create a Uint32List using a parenthesized literal int as length.
////////////////////////////////////////////////////////////////////////////////
-/*member: newUint32List:Container([exact=NativeUint32List], element: [subclass=JSUInt32], length: 13)*/
+/*member: newUint32List:Container([exact=NativeUint32List|powerset=0], element: [subclass=JSUInt32|powerset=0], length: 13, powerset: 0)*/
newUint32List() => Uint32List((13));
////////////////////////////////////////////////////////////////////////////////
// Create a Uint8ClampedList using a constant multiplication as length.
////////////////////////////////////////////////////////////////////////////////
-/*member: newUint8ClampedList:Container([exact=NativeUint8ClampedList], element: [exact=JSUInt31], length: 14)*/
+/*member: newUint8ClampedList:Container([exact=NativeUint8ClampedList|powerset=0], element: [exact=JSUInt31|powerset=0], length: 14, powerset: 0)*/
newUint8ClampedList() => Uint8ClampedList(2 * 7);
////////////////////////////////////////////////////////////////////////////////
@@ -131,5 +131,5 @@
static const field = 15;
}
-/*member: newUint8List:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 15)*/
+/*member: newUint8List:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 15, powerset: 0)*/
newUint8List() => Uint8List(Class1.field);
diff --git a/pkg/compiler/test/inference/data/list2.dart b/pkg/compiler/test/inference/data/list2.dart
index aa0d4df..5df3d41 100644
--- a/pkg/compiler/test/inference/data/list2.dart
+++ b/pkg/compiler/test/inference/data/list2.dart
@@ -2,10 +2,10 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
boolFlag = !boolFlag;
- data. /*invoke: Container([exact=JSExtendableArray], element: [subclass=JSInt], length: null)*/ add(
+ data. /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: null, powerset: 0)*/ add(
100,
);
@@ -35,109 +35,111 @@
];
}
-/*member: boolFlag:[exact=JSBool]*/
+/*member: boolFlag:[exact=JSBool|powerset=0]*/
bool boolFlag = true;
-/*member: data:Container([exact=JSExtendableArray], element: [subclass=JSInt], length: null)*/
+/*member: data:Container([exact=JSExtendableArray|powerset=0], element: [subclass=JSInt|powerset=0], length: null, powerset: 0)*/
List<int> data = [-1, 1];
// -------- List.empty --------
-/*member: listEmptyDefault:Container([exact=JSFixedArray], element: [empty], length: 0)*/
+/*member: listEmptyDefault:Container([exact=JSFixedArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
get listEmptyDefault => List<int>.empty();
-/*member: listEmptyGrowable:Container([exact=JSExtendableArray], element: [empty], length: 0)*/
+/*member: listEmptyGrowable:Container([exact=JSExtendableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
get listEmptyGrowable => List<int>.empty(growable: true);
-/*member: listEmptyFixed:Container([exact=JSFixedArray], element: [empty], length: 0)*/
+/*member: listEmptyFixed:Container([exact=JSFixedArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
get listEmptyFixed => List<int>.empty(growable: false);
-/*member: listEmptyEither:Container([subclass=JSMutableArray], element: [empty], length: 0)*/
+/*member: listEmptyEither:Container([subclass=JSMutableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)*/
get listEmptyEither => List<int>.empty(growable: boolFlag);
// -------- List.filled --------
-/*member: listFilledDefault:Container([exact=JSFixedArray], element: Value([exact=JSString], value: "x"), length: 5)*/
+/*member: listFilledDefault:Container([exact=JSFixedArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "x", powerset: 0), length: 5, powerset: 0)*/
get listFilledDefault => List.filled(5, 'x');
-/*member: listFilledGrowable:Container([exact=JSExtendableArray], element: Value([exact=JSString], value: "g"), length: 5)*/
+/*member: listFilledGrowable:Container([exact=JSExtendableArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "g", powerset: 0), length: 5, powerset: 0)*/
get listFilledGrowable => List.filled(5, 'g', growable: true);
-/*member: listFilledFixed:Container([exact=JSFixedArray], element: Value([exact=JSString], value: "f"), length: 5)*/
+/*member: listFilledFixed:Container([exact=JSFixedArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "f", powerset: 0), length: 5, powerset: 0)*/
get listFilledFixed => List.filled(5, 'f', growable: false);
-/*member: listFilledEither:Container([subclass=JSMutableArray], element: Value([exact=JSString], value: "e"), length: 5)*/
+/*member: listFilledEither:Container([subclass=JSMutableArray|powerset=0], element: Value([exact=JSString|powerset=0], value: "e", powerset: 0), length: 5, powerset: 0)*/
get listFilledEither => List.filled(5, 'e', growable: boolFlag);
// -------- List.generate --------
-/*member: listGenerateDefault:Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateDefault:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
get listGenerateDefault =>
- List. /*update: Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/ generate(
+ List. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/ generate(
8,
(i) => 'x$i',
);
-/*member: listGenerateGrowable:Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateGrowable:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
get listGenerateGrowable =>
- List. /*update: Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/ generate(
+ List. /*update: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/ generate(
8,
(i) => 'g$i',
growable: true,
);
-/*member: listGenerateFixed:Container([exact=JSFixedArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateFixed:Container([exact=JSFixedArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
get listGenerateFixed =>
- List. /*update: Container([exact=JSFixedArray], element: [exact=JSString], length: 8)*/ generate(
+ List. /*update: Container([exact=JSFixedArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/ generate(
8,
(i) => 'f$i',
growable: false,
);
-/*member: listGenerateEither:Container([subclass=JSMutableArray], element: [exact=JSString], length: 8)*/
+/*member: listGenerateEither:Container([subclass=JSMutableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
get listGenerateEither => List.generate(
8,
- /*[exact=JSString]*/ (/*[subclass=JSPositiveInt]*/ i) => 'e$i',
+ /*[exact=JSString|powerset=0]*/ (/*[subclass=JSPositiveInt|powerset=0]*/ i) =>
+ 'e$i',
growable: boolFlag,
);
-/*member: listGenerateBigClosure:Container([exact=JSExtendableArray], element: [exact=JSString], length: 8)*/
-get listGenerateBigClosure =>
- List.generate(8, /*[exact=JSString]*/ (/*[subclass=JSPositiveInt]*/ i) {
- if (i /*invoke: [subclass=JSPositiveInt]*/ == 1) return 'one';
- if (i /*invoke: [subclass=JSPositiveInt]*/ == 2) return 'two';
- return '$i';
- });
+/*member: listGenerateBigClosure:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSString|powerset=0], length: 8, powerset: 0)*/
+get listGenerateBigClosure => List.generate(8, /*[exact=JSString|powerset=0]*/ (
+ /*[subclass=JSPositiveInt|powerset=0]*/ i,
+) {
+ if (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ == 1) return 'one';
+ if (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ == 2) return 'two';
+ return '$i';
+});
// -------- List.of --------
-/*member: listOfDefault:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfDefault:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listOfDefault => List.of(data);
-/*member: listOfGrowable:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfGrowable:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listOfGrowable => List.of(data, growable: true);
-/*member: listOfFixed:Container([exact=JSFixedArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfFixed:Container([exact=JSFixedArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listOfFixed => List.of(data, growable: false);
-/*member: listOfEither:Container([subclass=JSMutableArray], element: [null|subclass=Object], length: null)*/
+/*member: listOfEither:Container([subclass=JSMutableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listOfEither => List.of(data, growable: boolFlag);
// -------- List.from --------
-/*member: listFromDefault:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromDefault:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listFromDefault => List.from(data);
-/*member: listFromGrowable:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromGrowable:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listFromGrowable => List.from(data, growable: true);
-/*member: listFromFixed:Container([exact=JSFixedArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromFixed:Container([exact=JSFixedArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listFromFixed => List.from(data, growable: false);
-/*member: listFromEither:Container([subclass=JSMutableArray], element: [null|subclass=Object], length: null)*/
+/*member: listFromEither:Container([subclass=JSMutableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
get listFromEither => List.from(data, growable: boolFlag);
// -------- List.unmodifiable --------
-/*member: listUnmodifiable:[exact=JSUnmodifiableArray]*/
+/*member: listUnmodifiable:[exact=JSUnmodifiableArray|powerset=0]*/
get listUnmodifiable => List.unmodifiable(data);
diff --git a/pkg/compiler/test/inference/data/list_huge.dart b/pkg/compiler/test/inference/data/list_huge.dart
index 574748a..121cc94 100644
--- a/pkg/compiler/test/inference/data/list_huge.dart
+++ b/pkg/compiler/test/inference/data/list_huge.dart
@@ -4,7 +4,7 @@
// Test for Container type for Lists with huge or negative sizes.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
hugeList1();
hugeList2();
@@ -12,35 +12,35 @@
hugeList4();
}
-/*member: thing:[null]*/
+/*member: thing:[null|powerset=1]*/
dynamic thing;
-/*member: _huge1:[subclass=JSPositiveInt]*/
+/*member: _huge1:[subclass=JSPositiveInt|powerset=0]*/
final _huge1 = 5000000000;
-/*member: hugeList1:Container([exact=JSFixedArray], element: [null], length: null)*/
+/*member: hugeList1:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: null, powerset: 0)*/
hugeList1() => List.filled(_huge1, thing);
const _huge2a = 10000000000 * 10000000000;
-/*member: _huge2b:[subclass=JSPositiveInt]*/
+/*member: _huge2b:[subclass=JSPositiveInt|powerset=0]*/
final _huge2b = _huge2a;
-/*member: hugeList2:Container([exact=JSFixedArray], element: [null], length: null)*/
+/*member: hugeList2:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: null, powerset: 0)*/
hugeList2() => List.filled(_huge2b, thing);
const _huge3a = -10000000;
-/*member: _huge3b:[subclass=JSInt]*/
+/*member: _huge3b:[subclass=JSInt|powerset=0]*/
final _huge3b = _huge3a;
-/*member: hugeList3:Container([exact=JSFixedArray], element: [null], length: null)*/
+/*member: hugeList3:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: null, powerset: 0)*/
hugeList3() => List.filled(_huge3b, thing);
// 'Small' limits are still tracked.
-/*member: _huge4:[exact=JSUInt31]*/
+/*member: _huge4:[exact=JSUInt31|powerset=0]*/
final _huge4 = 10000000;
-/*member: hugeList4:Container([exact=JSFixedArray], element: [null], length: 10000000)*/
+/*member: hugeList4:Container([exact=JSFixedArray|powerset=0], element: [null|powerset=1], length: 10000000, powerset: 0)*/
hugeList4() => List.filled(_huge4, thing);
diff --git a/pkg/compiler/test/inference/data/list_js.dart b/pkg/compiler/test/inference/data/list_js.dart
index 6d6f634..eac453b 100644
--- a/pkg/compiler/test/inference/data/list_js.dart
+++ b/pkg/compiler/test/inference/data/list_js.dart
@@ -7,7 +7,7 @@
/// ignore: IMPORT_INTERNAL_LIBRARY
import 'dart:_foreign_helper' show JS;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
@@ -15,50 +15,50 @@
test4();
}
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
test1() {
var list = [42];
JS('', '#', list); // '#' is by default a no-op.
witness1(list);
}
-/*member: witness1:[null]*/
+/*member: witness1:[null|powerset=1]*/
witness1(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
) {}
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
test2() {
var list = [42];
JS('effects:all;depends:all', '#', list);
witness2(list);
}
-/*member: witness2:[null]*/
+/*member: witness2:[null|powerset=1]*/
witness2(
- /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
) {}
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
test3() {
var list = [42];
JS('', '#.slice(0)', list);
witness3(list);
}
-/*member: witness3:[null]*/
+/*member: witness3:[null|powerset=1]*/
witness3(
- /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
) {}
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
test4() {
var list = [42];
JS('effects:none;depends:all', '#.slice(0)', list);
witness4(list);
}
-/*member: witness4:[null]*/
+/*member: witness4:[null|powerset=1]*/
witness4(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
) {}
diff --git a/pkg/compiler/test/inference/data/list_tracer2.dart b/pkg/compiler/test/inference/data/list_tracer2.dart
index 2736f0b..4509066 100644
--- a/pkg/compiler/test/inference/data/list_tracer2.dart
+++ b/pkg/compiler/test/inference/data/list_tracer2.dart
@@ -5,14 +5,14 @@
// We used to always nullify the element type of a list we are tracing in
// the presence of a fixed length list constructor call.
-/*member: myList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: myList:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
var myList = [42];
-/*member: main:[exact=JSUInt31]*/
+/*member: main:[exact=JSUInt31|powerset=0]*/
main() {
/// ignore: unused_local_variable
var a = List.filled(42, null);
return myList
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
[0];
}
diff --git a/pkg/compiler/test/inference/data/list_tracer3.dart b/pkg/compiler/test/inference/data/list_tracer3.dart
index d324890..eaddcd2 100644
--- a/pkg/compiler/test/inference/data/list_tracer3.dart
+++ b/pkg/compiler/test/inference/data/list_tracer3.dart
@@ -5,20 +5,21 @@
// We used to always nullify the element type of a list we are tracing in
// the presence of a fixed length list constructor call.
-/*member: myList:Container([exact=JSExtendableArray], element: Union([exact=JSString], [subclass=JSNumber]), length: null)*/
+/*member: myList:Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 0), length: null, powerset: 0)*/
var myList = [];
-/*member: otherList:Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+/*member: otherList:Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 2, powerset: 0)*/
var otherList = ['foo', 42];
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
dynamic a =
otherList
- /*Container([exact=JSExtendableArray], element: Union([exact=JSString], [exact=JSUInt31]), length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), length: 2, powerset: 0)*/
[0];
- a /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ += 54;
+ a /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ +=
+ 54;
myList.
- /*invoke: Container([exact=JSExtendableArray], element: Union([exact=JSString], [subclass=JSNumber]), length: null)*/
+ /*invoke: Container([exact=JSExtendableArray|powerset=0], element: Union([exact=JSString|powerset=0], [subclass=JSNumber|powerset=0], powerset: 0), length: null, powerset: 0)*/
add(a);
}
diff --git a/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart b/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart
index 4f5d20b..9741b1f 100644
--- a/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart
+++ b/pkg/compiler/test/inference/data/list_tracer_typed_data_length.dart
@@ -7,22 +7,22 @@
// TODO(johnniwinther): Fix inference for spec mode. List elements should not be
// [empty].
-/*member: myList:Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
+/*member: myList:Container([exact=NativeFloat32List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 42, powerset: 0)*/
var myList = Float32List(42);
-/*member: myOtherList:Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
+/*member: myOtherList:Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 32, powerset: 0)*/
var myOtherList = Uint8List(32);
-/*member: main:[subclass=JSNumber]*/
+/*member: main:[subclass=JSNumber|powerset=0]*/
main() {
// ignore: unused_local_variable
var a = Float32List(9);
return myList
- /*Container([exact=NativeFloat32List], element: [subclass=JSNumber], length: 42)*/
+ /*Container([exact=NativeFloat32List|powerset=0], element: [subclass=JSNumber|powerset=0], length: 42, powerset: 0)*/
[0]
- /*invoke: [subclass=JSNumber]*/
+ /*invoke: [subclass=JSNumber|powerset=0]*/
+
myOtherList
- /*Container([exact=NativeUint8List], element: [exact=JSUInt31], length: 32)*/
+ /*Container([exact=NativeUint8List|powerset=0], element: [exact=JSUInt31|powerset=0], length: 32, powerset: 0)*/
[0];
}
diff --git a/pkg/compiler/test/inference/data/local_functions.dart b/pkg/compiler/test/inference/data/local_functions.dart
index ce22d73..630866d 100644
--- a/pkg/compiler/test/inference/data/local_functions.dart
+++ b/pkg/compiler/test/inference/data/local_functions.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
namedLocalFunctionInvoke();
unnamedLocalFunctionInvoke();
@@ -21,9 +21,9 @@
// Invocation of a named local function.
////////////////////////////////////////////////////////////////////////////////
-/*member: namedLocalFunctionInvoke:[exact=JSUInt31]*/
+/*member: namedLocalFunctionInvoke:[exact=JSUInt31|powerset=0]*/
namedLocalFunctionInvoke() {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
local() => 0;
return local();
}
@@ -32,9 +32,9 @@
// Invocation of an unnamed local function.
////////////////////////////////////////////////////////////////////////////////
-/*member: unnamedLocalFunctionInvoke:[subclass=JSInt]*/
+/*member: unnamedLocalFunctionInvoke:[subclass=JSInt|powerset=0]*/
unnamedLocalFunctionInvoke() {
- var local = /*[exact=JSUInt31]*/ () => 0;
+ var local = /*[exact=JSUInt31|powerset=0]*/ () => 0;
return local();
}
@@ -42,9 +42,9 @@
// Access of a named local function.
////////////////////////////////////////////////////////////////////////////////
-/*member: namedLocalFunctionGet:[subclass=Closure]*/
+/*member: namedLocalFunctionGet:[subclass=Closure|powerset=0]*/
namedLocalFunctionGet() {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
local() => 0;
return local;
}
@@ -53,9 +53,9 @@
// Call a named local function recursively.
////////////////////////////////////////////////////////////////////////////////
-/*member: recursiveLocalFunction:[subclass=Closure]*/
+/*member: recursiveLocalFunction:[subclass=Closure|powerset=0]*/
recursiveLocalFunction() {
- /*[subclass=Closure]*/
+ /*[subclass=Closure|powerset=0]*/
local() => local;
return local();
}
@@ -64,11 +64,11 @@
// Call a named local function with a missing argument.
////////////////////////////////////////////////////////////////////////////////
-/*member: namedLocalFunctionInvokeMissingArgument:[null|subclass=Object]*/
+/*member: namedLocalFunctionInvokeMissingArgument:[null|subclass=Object|powerset=1]*/
@pragma('dart2js:disableFinal')
namedLocalFunctionInvokeMissingArgument() {
- /*[exact=JSUInt31]*/
- local(/*[empty]*/ x) => 0;
+ /*[exact=JSUInt31|powerset=0]*/
+ local(/*[empty|powerset=0]*/ x) => 0;
dynamic b = local;
return b();
}
@@ -77,10 +77,10 @@
// Call a named local function with an extra argument.
////////////////////////////////////////////////////////////////////////////////
-/*member: namedLocalFunctionInvokeExtraArgument:[null|subclass=Object]*/
+/*member: namedLocalFunctionInvokeExtraArgument:[null|subclass=Object|powerset=1]*/
@pragma('dart2js:disableFinal')
namedLocalFunctionInvokeExtraArgument() {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
local() => 0;
dynamic b = local;
return b(0);
@@ -90,10 +90,10 @@
// Call a named local function with an extra named argument.
////////////////////////////////////////////////////////////////////////////////
-/*member: namedLocalFunctionInvokeExtraNamedArgument:[null|subclass=Object]*/
+/*member: namedLocalFunctionInvokeExtraNamedArgument:[null|subclass=Object|powerset=1]*/
@pragma('dart2js:disableFinal')
namedLocalFunctionInvokeExtraNamedArgument() {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
local() => 0;
dynamic b = local;
return b(a: 0);
@@ -103,40 +103,40 @@
// Implicit .call on a local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: closureToString:[exact=JSString]*/
+/*member: closureToString:[exact=JSString|powerset=0]*/
closureToString() {
- var local = /*[null]*/ () {};
+ var local = /*[null|powerset=1]*/ () {};
local();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
////////////////////////////////////////////////////////////////////////////////
// Explicit .call on a local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: closureCallToString:[exact=JSString]*/
+/*member: closureCallToString:[exact=JSString|powerset=0]*/
closureCallToString() {
- var local = /*[null]*/ () {};
+ var local = /*[null|powerset=1]*/ () {};
local.call();
- return local. /*invoke: [subclass=Closure]*/ toString();
+ return local. /*invoke: [subclass=Closure|powerset=0]*/ toString();
}
////////////////////////////////////////////////////////////////////////////////
// Operator == on the result of a parameter invocation.
////////////////////////////////////////////////////////////////////////////////
-/*member: _callCompare:[subclass=Closure]*/
-_callCompare(int /*[subclass=Closure]*/ compare({a, b})) {
- compare(a: 0, b: 1) /*invoke: [subclass=JSInt]*/ == 0;
+/*member: _callCompare:[subclass=Closure|powerset=0]*/
+_callCompare(int /*[subclass=Closure|powerset=0]*/ compare({a, b})) {
+ compare(a: 0, b: 1) /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
return compare;
}
-/*member: callCompare:[null]*/
+/*member: callCompare:[null|powerset=1]*/
callCompare() {
_callCompare(
- /*[subclass=JSInt]*/
- ({/*[exact=JSUInt31]*/ a, /*[exact=JSUInt31]*/ b}) =>
- a /*invoke: [exact=JSUInt31]*/ - b,
+ /*[subclass=JSInt|powerset=0]*/
+ ({/*[exact=JSUInt31|powerset=0]*/ a, /*[exact=JSUInt31|powerset=0]*/ b}) =>
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ - b,
);
}
@@ -144,19 +144,21 @@
// Invocation on the result of a parameter invocation.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.method1:[null]*/
+ /*member: Class1.method1:[null|powerset=1]*/
method1() {}
}
-/*member: _callClosure:[subclass=Closure]*/
-_callClosure(/*[subclass=Closure]*/ f({c})) {
+/*member: _callClosure:[subclass=Closure|powerset=0]*/
+_callClosure(/*[subclass=Closure|powerset=0]*/ f({c})) {
f(c: Class1()).method1();
return f;
}
-/*member: callClosure:[null]*/
+/*member: callClosure:[null|powerset=1]*/
callClosure() {
- _callClosure(/*[exact=Class1]*/ ({/*[exact=Class1]*/ c}) => c);
+ _callClosure(
+ /*[exact=Class1|powerset=0]*/ ({/*[exact=Class1|powerset=0]*/ c}) => c,
+ );
}
diff --git a/pkg/compiler/test/inference/data/local_functions_call.dart b/pkg/compiler/test/inference/data/local_functions_call.dart
index 42cc5b10..43f5db4 100644
--- a/pkg/compiler/test/inference/data/local_functions_call.dart
+++ b/pkg/compiler/test/inference/data/local_functions_call.dart
@@ -6,7 +6,7 @@
// with a different expectancy because the closed world contains less '.call'
// methods.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closureCallToString();
}
@@ -15,12 +15,12 @@
// Explicit .call on a local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: closureCallToString:[exact=JSString]*/
+/*member: closureCallToString:[exact=JSString|powerset=0]*/
closureCallToString() {
- var local = /*[null]*/ () {};
+ var local = /*[null|powerset=1]*/ () {};
local.call();
return local
.
- /*invoke: [subclass=Closure]*/
+ /*invoke: [subclass=Closure|powerset=0]*/
toString();
}
diff --git a/pkg/compiler/test/inference/data/locals.dart b/pkg/compiler/test/inference/data/locals.dart
index b6f096d..5cd7f7d 100644
--- a/pkg/compiler/test/inference/data/locals.dart
+++ b/pkg/compiler/test/inference/data/locals.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
uninitializedLocal();
initializedLocal();
@@ -15,63 +15,63 @@
complexAssignmentLocal();
}
-/*member: uninitializedLocal:[null]*/
+/*member: uninitializedLocal:[null|powerset=1]*/
uninitializedLocal() {
var local;
return local;
}
-/*member: initializedLocal:[exact=JSUInt31]*/
+/*member: initializedLocal:[exact=JSUInt31|powerset=0]*/
initializedLocal() {
var local = 0;
return local;
}
-/*member: updatedLocal:[exact=JSUInt31]*/
+/*member: updatedLocal:[exact=JSUInt31|powerset=0]*/
updatedLocal() {
var local2;
local2 = 0;
return local2;
}
-/*member: invokeLocal:[null]*/
+/*member: invokeLocal:[null|powerset=1]*/
invokeLocal() {
var local2 = 0;
- local2. /*invoke: [exact=JSUInt31]*/ toString();
+ local2. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
return null;
}
-/*member: postfixLocal:[null]*/
+/*member: postfixLocal:[null|powerset=1]*/
postfixLocal() {
// ignore: UNUSED_LOCAL_VARIABLE
var local2 = 0;
- local2 /*invoke: [exact=JSUInt31]*/ ++;
+ local2 /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
return null;
}
-/*member: postfixLocalUsed:[exact=JSUInt31]*/
+/*member: postfixLocalUsed:[exact=JSUInt31|powerset=0]*/
postfixLocalUsed() {
var local2 = 0;
- return local2 /*invoke: [exact=JSUInt31]*/ ++;
+ return local2 /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
}
-/*member: prefixLocal:[null]*/
+/*member: prefixLocal:[null|powerset=1]*/
prefixLocal() {
// ignore: UNUSED_LOCAL_VARIABLE
var local2 = 0;
- /*invoke: [exact=JSUInt31]*/
+ /*invoke: [exact=JSUInt31|powerset=0]*/
++local2;
return null;
}
-/*member: prefixLocalUsed:[subclass=JSUInt32]*/
+/*member: prefixLocalUsed:[subclass=JSUInt32|powerset=0]*/
prefixLocalUsed() {
var local2 = 0;
- return /*invoke: [exact=JSUInt31]*/ ++local2;
+ return /*invoke: [exact=JSUInt31|powerset=0]*/ ++local2;
}
-/*member: complexAssignmentLocal:[subclass=JSUInt32]*/
+/*member: complexAssignmentLocal:[subclass=JSUInt32|powerset=0]*/
complexAssignmentLocal() {
var local2 = 0;
- return local2 /*invoke: [exact=JSUInt31]*/ += 42;
+ return local2 /*invoke: [exact=JSUInt31|powerset=0]*/ += 42;
}
diff --git a/pkg/compiler/test/inference/data/locals_trust.dart b/pkg/compiler/test/inference/data/locals_trust.dart
index 86f3c0c..2a77ae8 100644
--- a/pkg/compiler/test/inference/data/locals_trust.dart
+++ b/pkg/compiler/test/inference/data/locals_trust.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
trustLocals();
trustFunctions();
@@ -13,15 +13,17 @@
// Test that we trust the explicit type of a local.
////////////////////////////////////////////////////////////////////////////////
-/*member: _trustLocals:[exact=JSBool]*/
-_trustLocals(int Function(int)? /*[null|subclass=Closure]*/ f) {
+/*member: _trustLocals:[exact=JSBool|powerset=0]*/
+_trustLocals(int Function(int)? /*[null|subclass=Closure|powerset=1]*/ f) {
int c = f!(0);
- return c /*invoke: [subclass=JSInt]*/ == 0;
+ return c /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
}
-/*member: trustLocals:[null]*/
+/*member: trustLocals:[null|powerset=1]*/
trustLocals() {
- _trustLocals(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o);
+ _trustLocals(
+ /*[exact=JSUInt31|powerset=0]*/ (/*[exact=JSUInt31|powerset=0]*/ o) => o,
+ );
_trustLocals(null);
}
@@ -29,16 +31,18 @@
// Test that we infer the type of a dynamic local from the type of the function.
////////////////////////////////////////////////////////////////////////////////
-/*member: _trustFunctions:[exact=JSBool]*/
-_trustFunctions(int Function(int)? /*[null|subclass=Closure]*/ f) {
+/*member: _trustFunctions:[exact=JSBool|powerset=0]*/
+_trustFunctions(int Function(int)? /*[null|subclass=Closure|powerset=1]*/ f) {
dynamic c = f!(0);
c = f(0);
- return c /*invoke: [subclass=JSInt]*/ == 0;
+ return c /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
}
-/*member: trustFunctions:[null]*/
+/*member: trustFunctions:[null|powerset=1]*/
trustFunctions() {
- _trustFunctions(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o);
+ _trustFunctions(
+ /*[exact=JSUInt31|powerset=0]*/ (/*[exact=JSUInt31|powerset=0]*/ o) => o,
+ );
_trustFunctions(null);
}
@@ -46,14 +50,18 @@
// Test that we infer the type of a 'var' local from the type of the function.
////////////////////////////////////////////////////////////////////////////////
-/*member: _inferFromFunctions:[exact=JSBool]*/
-_inferFromFunctions(int Function(int)? /*[null|subclass=Closure]*/ f) {
+/*member: _inferFromFunctions:[exact=JSBool|powerset=0]*/
+_inferFromFunctions(
+ int Function(int)? /*[null|subclass=Closure|powerset=1]*/ f,
+) {
var c = f!(0);
- return c /*invoke: [subclass=JSInt]*/ == 0;
+ return c /*invoke: [subclass=JSInt|powerset=0]*/ == 0;
}
-/*member: inferFromFunctions:[null]*/
+/*member: inferFromFunctions:[null|powerset=1]*/
inferFromFunctions() {
- _inferFromFunctions(/*[exact=JSUInt31]*/ (/*[exact=JSUInt31]*/ o) => o);
+ _inferFromFunctions(
+ /*[exact=JSUInt31|powerset=0]*/ (/*[exact=JSUInt31|powerset=0]*/ o) => o,
+ );
_inferFromFunctions(null);
}
diff --git a/pkg/compiler/test/inference/data/logical.dart b/pkg/compiler/test/inference/data/logical.dart
index 556f12b..31eead1 100644
--- a/pkg/compiler/test/inference/data/logical.dart
+++ b/pkg/compiler/test/inference/data/logical.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnTrue();
returnFalse();
@@ -43,24 +43,24 @@
/// Return `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnTrue:Value([exact=JSBool], value: true)*/
+/*member: returnTrue:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnTrue() => true;
////////////////////////////////////////////////////////////////////////////////
/// Return `false`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnFalse:Value([exact=JSBool], value: false)*/
+/*member: returnFalse:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
returnFalse() => false;
////////////////////////////////////////////////////////////////////////////////
/// Return negation of a boolean value.
////////////////////////////////////////////////////////////////////////////////
-/*member: _returnNot:[exact=JSBool]*/
-_returnNot(/*[exact=JSBool]*/ o) => !o;
+/*member: _returnNot:[exact=JSBool|powerset=0]*/
+_returnNot(/*[exact=JSBool|powerset=0]*/ o) => !o;
-/*member: returnNot:[null]*/
+/*member: returnNot:[null|powerset=1]*/
returnNot() {
_returnNot(true);
_returnNot(false);
@@ -70,30 +70,30 @@
/// Return negation of `false`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotFalse:Value([exact=JSBool], value: true)*/
+/*member: returnNotFalse:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnNotFalse() => !false;
////////////////////////////////////////////////////////////////////////////////
/// Return negation of `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotTrue:Value([exact=JSBool], value: false)*/
+/*member: returnNotTrue:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
returnNotTrue() => !true;
////////////////////////////////////////////////////////////////////////////////
/// Return negation of `null`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotOfNull:[exact=JSBool]*/
+/*member: returnNotOfNull:[exact=JSBool|powerset=0]*/
returnNotOfNull() => !(null as dynamic);
////////////////////////////////////////////////////////////////////////////////
/// Return value of an is test.
////////////////////////////////////////////////////////////////////////////////
-/*member: _returnIs:[exact=JSBool]*/
-_returnIs(/*[null|exact=JSUInt31]*/ o) => o is int;
+/*member: _returnIs:[exact=JSBool|powerset=0]*/
+_returnIs(/*[null|exact=JSUInt31|powerset=1]*/ o) => o is int;
-/*member: returnIs:[null]*/
+/*member: returnIs:[null|powerset=1]*/
returnIs() {
_returnIs(null);
_returnIs(1);
@@ -102,22 +102,22 @@
////////////////////////////////////////////////////////////////////////////////
/// Return value of an is `int` test known to be true.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnIsOneInt:Value([exact=JSBool], value: true)*/
+/*member: returnIsOneInt:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnIsOneInt() => 1 is int;
////////////////////////////////////////////////////////////////////////////////
/// Return value of an is `int` test known to be false.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnIsNullInt:Value([exact=JSBool], value: false)*/
+/*member: returnIsNullInt:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
returnIsNullInt() => null is int;
////////////////////////////////////////////////////////////////////////////////
/// Return value of a negated is test.
////////////////////////////////////////////////////////////////////////////////
-/*member: _returnNotIs:[exact=JSBool]*/
-_returnNotIs(/*[null|exact=JSUInt31]*/ o) => o is! int;
+/*member: _returnNotIs:[exact=JSBool|powerset=0]*/
+_returnNotIs(/*[null|exact=JSUInt31|powerset=1]*/ o) => o is! int;
-/*member: returnNotIs:[null]*/
+/*member: returnNotIs:[null|powerset=1]*/
returnNotIs() {
_returnNotIs(null);
_returnNotIs(1);
@@ -126,23 +126,26 @@
////////////////////////////////////////////////////////////////////////////////
/// Return value of a negated is `int` test known to be false.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotIsOneInt:Value([exact=JSBool], value: false)*/
+/*member: returnNotIsOneInt:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
returnNotIsOneInt() => 1 is! int;
////////////////////////////////////////////////////////////////////////////////
/// Return value of a negated is `int` test known to be true.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnNotIsNullInt:Value([exact=JSBool], value: true)*/
+/*member: returnNotIsNullInt:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnNotIsNullInt() => null is! int;
////////////////////////////////////////////////////////////////////////////////
/// Return logical and of booleans values.
////////////////////////////////////////////////////////////////////////////////
-/*member: _returnLogicalAnd:[exact=JSBool]*/
-_returnLogicalAnd(/*[exact=JSBool]*/ a, /*[exact=JSBool]*/ b) => a && b;
+/*member: _returnLogicalAnd:[exact=JSBool|powerset=0]*/
+_returnLogicalAnd(
+ /*[exact=JSBool|powerset=0]*/ a,
+ /*[exact=JSBool|powerset=0]*/ b,
+) => a && b;
-/*member: returnLogicalAnd:[null]*/
+/*member: returnLogicalAnd:[null|powerset=1]*/
returnLogicalAnd() {
_returnLogicalAnd(true, true);
_returnLogicalAnd(false, false);
@@ -152,14 +155,14 @@
/// Return logical and of `true` && `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnLogicalAndTrueTrue:Value([exact=JSBool], value: true)*/
+/*member: returnLogicalAndTrueTrue:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnLogicalAndTrueTrue() => true && true;
////////////////////////////////////////////////////////////////////////////////
/// Return logical and of `false` && `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnLogicalAndFalseTrue:Value([exact=JSBool], value: false)*/
+/*member: returnLogicalAndFalseTrue:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
/// ignore: dead_code
returnLogicalAndFalseTrue() => false && true;
@@ -167,25 +170,25 @@
/// Return logical and of `null` && `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnLogicalAndNullTrue:[exact=JSBool]*/
+/*member: returnLogicalAndNullTrue:[exact=JSBool|powerset=0]*/
returnLogicalAndNullTrue() => (null as dynamic) && true;
////////////////////////////////////////////////////////////////////////////////
/// Return logical and of is test and use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:Value([exact=JSBool], value: true)*/
+ /*member: Class1.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalAndIs:[exact=JSBool]*/
-_returnLogicalAndIs(/*[null|exact=Class1]*/ o) {
- return o is Class1 && o. /*[exact=Class1]*/ field;
+/*member: _returnLogicalAndIs:[exact=JSBool|powerset=0]*/
+_returnLogicalAndIs(/*[null|exact=Class1|powerset=1]*/ o) {
+ return o is Class1 && o. /*[exact=Class1|powerset=0]*/ field;
}
-/*member: returnLogicalAndIs:[null]*/
+/*member: returnLogicalAndIs:[null|powerset=1]*/
returnLogicalAndIs() {
_returnLogicalAndIs(new Class1());
_returnLogicalAndIs(null);
@@ -195,20 +198,20 @@
/// Return logical and of is-not test and use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:Value([exact=JSBool], value: true)*/
+ /*member: Class2.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalAndIsNot:[exact=JSBool]*/
-_returnLogicalAndIsNot(/*[null|exact=Class2]*/ o) {
+/*member: _returnLogicalAndIsNot:[exact=JSBool|powerset=0]*/
+_returnLogicalAndIsNot(/*[null|exact=Class2|powerset=1]*/ o) {
// TODO(johnniwinther): Use negative type knowledge to show that the receiver
// is [null].
- return o is! Class2 && o. /*[null|exact=Class2]*/ field;
+ return o is! Class2 && o. /*[null|exact=Class2|powerset=1]*/ field;
}
-/*member: returnLogicalAndIsNot:[null]*/
+/*member: returnLogicalAndIsNot:[null|powerset=1]*/
returnLogicalAndIsNot() {
_returnLogicalAndIsNot(new Class2());
_returnLogicalAndIsNot(null);
@@ -218,18 +221,18 @@
/// Return logical and of null test and use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.field:Value([exact=JSBool], value: true)*/
+ /*member: Class3.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalAndNull:[exact=JSBool]*/
-_returnLogicalAndNull(/*[null|exact=Class3]*/ o) {
- return o == null && o. /*[null]*/ field;
+/*member: _returnLogicalAndNull:[exact=JSBool|powerset=0]*/
+_returnLogicalAndNull(/*[null|exact=Class3|powerset=1]*/ o) {
+ return o == null && o. /*[null|powerset=1]*/ field;
}
-/*member: returnLogicalAndNull:[null]*/
+/*member: returnLogicalAndNull:[null|powerset=1]*/
returnLogicalAndNull() {
_returnLogicalAndNull(new Class3());
_returnLogicalAndNull(null);
@@ -239,18 +242,18 @@
/// Return logical and of not null test and use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- /*member: Class4.field:Value([exact=JSBool], value: true)*/
+ /*member: Class4.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalAndNotNull:[exact=JSBool]*/
-_returnLogicalAndNotNull(/*[null|exact=Class4]*/ o) {
- return o != null && o. /*[exact=Class4]*/ field;
+/*member: _returnLogicalAndNotNull:[exact=JSBool|powerset=0]*/
+_returnLogicalAndNotNull(/*[null|exact=Class4|powerset=1]*/ o) {
+ return o != null && o. /*[exact=Class4|powerset=0]*/ field;
}
-/*member: returnLogicalAndNotNull:[null]*/
+/*member: returnLogicalAndNotNull:[null|powerset=1]*/
returnLogicalAndNotNull() {
_returnLogicalAndNotNull(new Class4());
_returnLogicalAndNotNull(null);
@@ -260,10 +263,13 @@
/// Return logical or of booleans values.
////////////////////////////////////////////////////////////////////////////////
-/*member: _returnLogicalOr:[exact=JSBool]*/
-_returnLogicalOr(/*[exact=JSBool]*/ a, /*[exact=JSBool]*/ b) => a || b;
+/*member: _returnLogicalOr:[exact=JSBool|powerset=0]*/
+_returnLogicalOr(
+ /*[exact=JSBool|powerset=0]*/ a,
+ /*[exact=JSBool|powerset=0]*/ b,
+) => a || b;
-/*member: returnLogicalOr:[null]*/
+/*member: returnLogicalOr:[null|powerset=1]*/
returnLogicalOr() {
_returnLogicalOr(true, true);
_returnLogicalOr(false, false);
@@ -273,41 +279,41 @@
/// Return logical or of `false` || `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnLogicalOrFalseTrue:Value([exact=JSBool], value: true)*/
+/*member: returnLogicalOrFalseTrue:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnLogicalOrFalseTrue() => false || true;
////////////////////////////////////////////////////////////////////////////////
/// Return logical or of `false` || `false`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnLogicalOrFalseFalse:Value([exact=JSBool], value: false)*/
+/*member: returnLogicalOrFalseFalse:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
returnLogicalOrFalseFalse() => false || false;
////////////////////////////////////////////////////////////////////////////////
/// Return logical or of `null` || `true`.
////////////////////////////////////////////////////////////////////////////////
-/*member: returnLogicalOrNullTrue:[exact=JSBool]*/
+/*member: returnLogicalOrNullTrue:[exact=JSBool|powerset=0]*/
returnLogicalOrNullTrue() => (null as dynamic) || true;
////////////////////////////////////////////////////////////////////////////////
/// Return logical or of is test or use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
class Class5 {
- /*member: Class5.field:Value([exact=JSBool], value: true)*/
+ /*member: Class5.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalOrIs:[exact=JSBool]*/
-_returnLogicalOrIs(/*[null|exact=Class5]*/ o) {
+/*member: _returnLogicalOrIs:[exact=JSBool|powerset=0]*/
+_returnLogicalOrIs(/*[null|exact=Class5|powerset=1]*/ o) {
// TODO(johnniwinther): Use negative type knowledge to show that the receiver
// is [null].
- return o is Class5 || o. /*[null|exact=Class5]*/ field;
+ return o is Class5 || o. /*[null|exact=Class5|powerset=1]*/ field;
}
-/*member: returnLogicalOrIs:[null]*/
+/*member: returnLogicalOrIs:[null|powerset=1]*/
returnLogicalOrIs() {
_returnLogicalOrIs(new Class5());
_returnLogicalOrIs(null);
@@ -317,18 +323,18 @@
/// Return logical or of is-not test or use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
class Class6 {
- /*member: Class6.field:Value([exact=JSBool], value: true)*/
+ /*member: Class6.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalOrIsNot:[exact=JSBool]*/
-_returnLogicalOrIsNot(/*[null|exact=Class6]*/ o) {
- return o is! Class6 || o. /*[exact=Class6]*/ field;
+/*member: _returnLogicalOrIsNot:[exact=JSBool|powerset=0]*/
+_returnLogicalOrIsNot(/*[null|exact=Class6|powerset=1]*/ o) {
+ return o is! Class6 || o. /*[exact=Class6|powerset=0]*/ field;
}
-/*member: returnLogicalOrIsNot:[null]*/
+/*member: returnLogicalOrIsNot:[null|powerset=1]*/
returnLogicalOrIsNot() {
_returnLogicalOrIsNot(new Class6());
_returnLogicalOrIsNot(null);
@@ -338,18 +344,18 @@
/// Return logical or of null test or use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
class Class7 {
- /*member: Class7.field:Value([exact=JSBool], value: true)*/
+ /*member: Class7.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalOrNull:[exact=JSBool]*/
-_returnLogicalOrNull(/*[null|exact=Class7]*/ o) {
- return o == null || o. /*[exact=Class7]*/ field;
+/*member: _returnLogicalOrNull:[exact=JSBool|powerset=0]*/
+_returnLogicalOrNull(/*[null|exact=Class7|powerset=1]*/ o) {
+ return o == null || o. /*[exact=Class7|powerset=0]*/ field;
}
-/*member: returnLogicalOrNull:[null]*/
+/*member: returnLogicalOrNull:[null|powerset=1]*/
returnLogicalOrNull() {
_returnLogicalOrNull(new Class7());
_returnLogicalOrNull(null);
@@ -359,18 +365,18 @@
/// Return logical or of not null test or use.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
class Class8 {
- /*member: Class8.field:Value([exact=JSBool], value: true)*/
+ /*member: Class8.field:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
final bool field = true;
}
-/*member: _returnLogicalOrNotNull:[exact=JSBool]*/
-_returnLogicalOrNotNull(/*[null|exact=Class8]*/ o) {
- return o != null || o. /*[null]*/ field;
+/*member: _returnLogicalOrNotNull:[exact=JSBool|powerset=0]*/
+_returnLogicalOrNotNull(/*[null|exact=Class8|powerset=1]*/ o) {
+ return o != null || o. /*[null|powerset=1]*/ field;
}
-/*member: returnLogicalOrNotNull:[null]*/
+/*member: returnLogicalOrNotNull:[null|powerset=1]*/
returnLogicalOrNotNull() {
_returnLogicalOrNotNull(new Class8());
_returnLogicalOrNotNull(null);
diff --git a/pkg/compiler/test/inference/data/logical_if.dart b/pkg/compiler/test/inference/data/logical_if.dart
index 50a69ae..1ba4c64 100644
--- a/pkg/compiler/test/inference/data/logical_if.dart
+++ b/pkg/compiler/test/inference/data/logical_if.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
promotedIfThen();
promotedIfThenElse();
@@ -30,17 +30,19 @@
// Test if-then statement with is-test
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {}
-/*member: _promotedIfThen:[null]*/
-_promotedIfThen(/*Union([exact=Class1], [exact=JSUInt31])*/ o) {
+/*member: _promotedIfThen:[null|powerset=1]*/
+_promotedIfThen(
+ /*Union([exact=Class1|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
if (o is Class1) {
- o. /*invoke: [exact=Class1]*/ toString();
+ o. /*invoke: [exact=Class1|powerset=0]*/ toString();
}
}
-/*member: promotedIfThen:[null]*/
+/*member: promotedIfThen:[null|powerset=1]*/
promotedIfThen() {
_promotedIfThen(0);
_promotedIfThen(new Class1());
@@ -50,21 +52,23 @@
// Test if-then-else statement with is-test
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {}
-/*member: _promotedIfThenElse:[null]*/
-_promotedIfThenElse(/*Union([exact=Class2], [exact=JSUInt31])*/ o) {
+/*member: _promotedIfThenElse:[null|powerset=1]*/
+_promotedIfThenElse(
+ /*Union([exact=Class2|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
if (o is Class2) {
- o. /*invoke: [exact=Class2]*/ toString();
+ o. /*invoke: [exact=Class2|powerset=0]*/ toString();
} else {
// TODO(johnniwinther): Use negative type knowledge to show that the
// receiver must be [exact=JSUInt31].
- o. /*invoke: Union([exact=Class2], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class2|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
}
}
-/*member: promotedIfThenElse:[null]*/
+/*member: promotedIfThenElse:[null|powerset=1]*/
promotedIfThenElse() {
_promotedIfThenElse(0);
_promotedIfThenElse(new Class2());
@@ -74,19 +78,21 @@
// Test if-then-else statement with negated is-test
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {}
-/*member: _promotedNotIfThenElse:[null]*/
-_promotedNotIfThenElse(/*Union([exact=Class3], [exact=JSUInt31])*/ o) {
+/*member: _promotedNotIfThenElse:[null|powerset=1]*/
+_promotedNotIfThenElse(
+ /*Union([exact=Class3|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
if (o is! Class3) {
- o. /*invoke: Union([exact=Class3], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class3|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
} else {
- o. /*invoke: [exact=Class3]*/ toString();
+ o. /*invoke: [exact=Class3|powerset=0]*/ toString();
}
}
-/*member: promotedNotIfThenElse:[null]*/
+/*member: promotedNotIfThenElse:[null|powerset=1]*/
promotedNotIfThenElse() {
_promotedNotIfThenElse(0);
_promotedNotIfThenElse(new Class3());
@@ -96,20 +102,20 @@
// Test if-then statement with is-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {}
-/*member: _promotedAndIfThen:[null]*/
+/*member: _promotedAndIfThen:[null|powerset=1]*/
_promotedAndIfThen(
- /*Union([exact=Class4], [exact=JSUInt31])*/ o,
- /*[exact=JSBool]*/ c,
+ /*Union([exact=Class4|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
) {
if (o is Class4 && c) {
- o. /*invoke: [exact=Class4]*/ toString();
+ o. /*invoke: [exact=Class4|powerset=0]*/ toString();
}
}
-/*member: promotedAndIfThen:[null]*/
+/*member: promotedAndIfThen:[null|powerset=1]*/
promotedAndIfThen() {
_promotedAndIfThen(0, true);
_promotedAndIfThen(new Class4(), false);
@@ -119,24 +125,24 @@
// Test if-then-else statement with is-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
class Class5 {}
-/*member: _promotedAndIfThenElse:[null]*/
+/*member: _promotedAndIfThenElse:[null|powerset=1]*/
_promotedAndIfThenElse(
- /*Union([exact=Class5], [exact=JSUInt31])*/ o,
- /*[exact=JSBool]*/ c,
+ /*Union([exact=Class5|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
) {
if (o is Class5 && c) {
- o. /*invoke: [exact=Class5]*/ toString();
+ o. /*invoke: [exact=Class5|powerset=0]*/ toString();
} else {
// TODO(johnniwinther): Use negative type knowledge to show that the
// receiver must be [exact=JSUInt31].
- o. /*invoke: Union([exact=Class5], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class5|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
}
}
-/*member: promotedAndIfThenElse:[null]*/
+/*member: promotedAndIfThenElse:[null|powerset=1]*/
promotedAndIfThenElse() {
_promotedAndIfThenElse(0, true);
_promotedAndIfThenElse(new Class5(), false);
@@ -146,22 +152,22 @@
// Test if-then-else statement with negated is-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
class Class6 {}
-/*member: _promotedNotAndIfThenElse:[null]*/
+/*member: _promotedNotAndIfThenElse:[null|powerset=1]*/
_promotedNotAndIfThenElse(
- /*Union([exact=Class6], [exact=JSUInt31])*/ o,
- /*[exact=JSBool]*/ c,
+ /*Union([exact=Class6|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
) {
if (o is! Class6 && c) {
- o. /*invoke: Union([exact=Class6], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class6|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
} else {
- o. /*invoke: Union([exact=Class6], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class6|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
}
}
-/*member: promotedNotAndIfThenElse:[null]*/
+/*member: promotedNotAndIfThenElse:[null|powerset=1]*/
promotedNotAndIfThenElse() {
_promotedNotAndIfThenElse(0, true);
_promotedNotAndIfThenElse(new Class6(), false);
@@ -171,20 +177,20 @@
// Test if-then statement with is-test in ||
////////////////////////////////////////////////////////////////////////////////
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
class Class7 {}
-/*member: _promotedOrIfThen:[null]*/
+/*member: _promotedOrIfThen:[null|powerset=1]*/
_promotedOrIfThen(
- /*Union([exact=Class7], [exact=JSUInt31])*/ o,
- /*[exact=JSBool]*/ c,
+ /*Union([exact=Class7|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
) {
if (o is Class7 || c) {
- o. /*invoke: Union([exact=Class7], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class7|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
}
}
-/*member: promotedOrIfThen:[null]*/
+/*member: promotedOrIfThen:[null|powerset=1]*/
promotedOrIfThen() {
_promotedOrIfThen(0, true);
_promotedOrIfThen(new Class7(), false);
@@ -194,24 +200,24 @@
// Test if-then-else statement with is-test in ||
////////////////////////////////////////////////////////////////////////////////
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
class Class8 {}
-/*member: _promotedOrIfThenElse:[null]*/
+/*member: _promotedOrIfThenElse:[null|powerset=1]*/
_promotedOrIfThenElse(
- /*Union([exact=Class8], [exact=JSUInt31])*/ o,
- /*[exact=JSBool]*/ c,
+ /*Union([exact=Class8|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
) {
if (o is Class8 || c) {
- o. /*invoke: Union([exact=Class8], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class8|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
} else {
// TODO(johnniwinther): Use negative type knowledge to show that the
// receiver must be [exact=JSUInt31].
- o. /*invoke: Union([exact=Class8], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class8|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
}
}
-/*member: promotedOrIfThenElse:[null]*/
+/*member: promotedOrIfThenElse:[null|powerset=1]*/
promotedOrIfThenElse() {
_promotedOrIfThenElse(0, true);
_promotedOrIfThenElse(new Class8(), false);
@@ -221,22 +227,22 @@
// Test if-then-else statement with negated is-test in ||
////////////////////////////////////////////////////////////////////////////////
-/*member: Class9.:[exact=Class9]*/
+/*member: Class9.:[exact=Class9|powerset=0]*/
class Class9 {}
-/*member: _promotedNotOrIfThenElse:[null]*/
+/*member: _promotedNotOrIfThenElse:[null|powerset=1]*/
_promotedNotOrIfThenElse(
- /*Union([exact=Class9], [exact=JSUInt31])*/ o,
- /*[exact=JSBool]*/ c,
+ /*Union([exact=Class9|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
) {
if (o is! Class9 || c) {
- o. /*invoke: Union([exact=Class9], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class9|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
} else {
- o. /*invoke: [exact=Class9]*/ toString();
+ o. /*invoke: [exact=Class9|powerset=0]*/ toString();
}
}
-/*member: promotedNotOrIfThenElse:[null]*/
+/*member: promotedNotOrIfThenElse:[null|powerset=1]*/
promotedNotOrIfThenElse() {
_promotedNotOrIfThenElse(0, true);
_promotedNotOrIfThenElse(new Class9(), false);
@@ -246,20 +252,22 @@
// Test if-then statement with doubly negated is-test
////////////////////////////////////////////////////////////////////////////////
-/*member: Class10.:[exact=Class10]*/
+/*member: Class10.:[exact=Class10|powerset=0]*/
class Class10 {}
-/*member: _promotedNotNotIfThen:[null]*/
-_promotedNotNotIfThen(/*Union([exact=Class10], [exact=JSUInt31])*/ o) {
+/*member: _promotedNotNotIfThen:[null|powerset=1]*/
+_promotedNotNotIfThen(
+ /*Union([exact=Class10|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
if (!(o is! Class10)) {
o
.
- /*invoke: [exact=Class10]*/
+ /*invoke: [exact=Class10|powerset=0]*/
toString();
}
}
-/*member: promotedNotNotIfThen:[null]*/
+/*member: promotedNotNotIfThen:[null|powerset=1]*/
promotedNotNotIfThen() {
_promotedNotNotIfThen(0);
_promotedNotNotIfThen(new Class10());
@@ -269,24 +277,26 @@
// Test if-then-else statement with negated is-test in parentheses
////////////////////////////////////////////////////////////////////////////////
-/*member: Class11.:[exact=Class11]*/
+/*member: Class11.:[exact=Class11|powerset=0]*/
class Class11 {}
-/*member: _promotedParenNotIfThenElse:[null]*/
-_promotedParenNotIfThenElse(/*Union([exact=Class11], [exact=JSUInt31])*/ o) {
+/*member: _promotedParenNotIfThenElse:[null|powerset=1]*/
+_promotedParenNotIfThenElse(
+ /*Union([exact=Class11|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ o,
+) {
if (!(o is Class11)) {
// TODO(johnniwinther): Use negative type knowledge to show that the
// receiver must be [exact=JSUInt31].
- o. /*invoke: Union([exact=Class11], [exact=JSUInt31])*/ toString();
+ o. /*invoke: Union([exact=Class11|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ toString();
} else {
o
.
- /*invoke: [exact=Class11]*/
+ /*invoke: [exact=Class11|powerset=0]*/
toString();
}
}
-/*member: promotedParenNotIfThenElse:[null]*/
+/*member: promotedParenNotIfThenElse:[null|powerset=1]*/
promotedParenNotIfThenElse() {
_promotedParenNotIfThenElse(0);
_promotedParenNotIfThenElse(new Class11());
@@ -296,14 +306,14 @@
// Test if-then statement with null-test
////////////////////////////////////////////////////////////////////////////////
-/*member: _nullIfThen:[null]*/
-_nullIfThen(/*[null|exact=JSUInt31]*/ o) {
+/*member: _nullIfThen:[null|powerset=1]*/
+_nullIfThen(/*[null|exact=JSUInt31|powerset=1]*/ o) {
if (o == null) {
- o. /*invoke: [null]*/ toString();
+ o. /*invoke: [null|powerset=1]*/ toString();
}
}
-/*member: nullIfThen:[null]*/
+/*member: nullIfThen:[null|powerset=1]*/
nullIfThen() {
_nullIfThen(0);
_nullIfThen(null);
@@ -313,16 +323,16 @@
// Test if-then-else statement null-test
////////////////////////////////////////////////////////////////////////////////
-/*member: _nullIfThenElse:[null]*/
-_nullIfThenElse(/*[null|exact=JSUInt31]*/ o) {
+/*member: _nullIfThenElse:[null|powerset=1]*/
+_nullIfThenElse(/*[null|exact=JSUInt31|powerset=1]*/ o) {
if (o == null) {
- o. /*invoke: [null]*/ toString();
+ o. /*invoke: [null|powerset=1]*/ toString();
} else {
- o. /*invoke: [exact=JSUInt31]*/ toString();
+ o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
}
}
-/*member: nullIfThenElse:[null]*/
+/*member: nullIfThenElse:[null|powerset=1]*/
nullIfThenElse() {
_nullIfThenElse(0);
_nullIfThenElse(null);
@@ -332,14 +342,14 @@
// Test if-then statement with negated null-test
////////////////////////////////////////////////////////////////////////////////
-/*member: _notNullIfThen:[null]*/
-_notNullIfThen(/*[null|exact=JSUInt31]*/ o) {
+/*member: _notNullIfThen:[null|powerset=1]*/
+_notNullIfThen(/*[null|exact=JSUInt31|powerset=1]*/ o) {
if (o != null) {
- o. /*invoke: [exact=JSUInt31]*/ toString();
+ o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
}
}
-/*member: notNullIfThen:[null]*/
+/*member: notNullIfThen:[null|powerset=1]*/
notNullIfThen() {
_notNullIfThen(0);
_notNullIfThen(null);
@@ -349,16 +359,16 @@
// Test if-then-else statement with negated null-test
////////////////////////////////////////////////////////////////////////////////
-/*member: _notNullIfThenElse:[null]*/
-_notNullIfThenElse(/*[null|exact=JSUInt31]*/ o) {
+/*member: _notNullIfThenElse:[null|powerset=1]*/
+_notNullIfThenElse(/*[null|exact=JSUInt31|powerset=1]*/ o) {
if (o != null) {
- o. /*invoke: [exact=JSUInt31]*/ toString();
+ o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
} else {
- o. /*invoke: [null]*/ toString();
+ o. /*invoke: [null|powerset=1]*/ toString();
}
}
-/*member: notNullIfThenElse:[null]*/
+/*member: notNullIfThenElse:[null|powerset=1]*/
notNullIfThenElse() {
_notNullIfThenElse(0);
_notNullIfThenElse(null);
@@ -368,14 +378,17 @@
// Test if-then statement with null-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: _nullAndIfThen:[null]*/
-_nullAndIfThen(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _nullAndIfThen:[null|powerset=1]*/
+_nullAndIfThen(
+ /*[null|exact=JSUInt31|powerset=1]*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
+) {
if (o == null && c) {
- o. /*invoke: [null]*/ toString();
+ o. /*invoke: [null|powerset=1]*/ toString();
}
}
-/*member: nullAndIfThen:[null]*/
+/*member: nullAndIfThen:[null|powerset=1]*/
nullAndIfThen() {
_nullAndIfThen(0, true);
_nullAndIfThen(null, false);
@@ -385,16 +398,19 @@
// Test if-then-else statement null-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: _nullAndIfThenElse:[null]*/
-_nullAndIfThenElse(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _nullAndIfThenElse:[null|powerset=1]*/
+_nullAndIfThenElse(
+ /*[null|exact=JSUInt31|powerset=1]*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
+) {
if (o == null && c) {
- o. /*invoke: [null]*/ toString();
+ o. /*invoke: [null|powerset=1]*/ toString();
} else {
- o. /*invoke: [null|exact=JSUInt31]*/ toString();
+ o. /*invoke: [null|exact=JSUInt31|powerset=1]*/ toString();
}
}
-/*member: nullAndIfThenElse:[null]*/
+/*member: nullAndIfThenElse:[null|powerset=1]*/
nullAndIfThenElse() {
_nullAndIfThenElse(0, true);
_nullAndIfThenElse(null, false);
@@ -404,14 +420,17 @@
// Test if-then statement with negated null-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: _notNullAndIfThen:[null]*/
-_notNullAndIfThen(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _notNullAndIfThen:[null|powerset=1]*/
+_notNullAndIfThen(
+ /*[null|exact=JSUInt31|powerset=1]*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
+) {
if (o != null && c) {
- o. /*invoke: [exact=JSUInt31]*/ toString();
+ o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
}
}
-/*member: notNullAndIfThen:[null]*/
+/*member: notNullAndIfThen:[null|powerset=1]*/
notNullAndIfThen() {
_notNullAndIfThen(0, true);
_notNullAndIfThen(null, false);
@@ -421,16 +440,19 @@
// Test if-then-else statement with negated null-test in &&
////////////////////////////////////////////////////////////////////////////////
-/*member: _notNullAndIfThenElse:[null]*/
-_notNullAndIfThenElse(/*[null|exact=JSUInt31]*/ o, /*[exact=JSBool]*/ c) {
+/*member: _notNullAndIfThenElse:[null|powerset=1]*/
+_notNullAndIfThenElse(
+ /*[null|exact=JSUInt31|powerset=1]*/ o,
+ /*[exact=JSBool|powerset=0]*/ c,
+) {
if (o != null && c) {
- o. /*invoke: [exact=JSUInt31]*/ toString();
+ o. /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
} else {
- o. /*invoke: [null|exact=JSUInt31]*/ toString();
+ o. /*invoke: [null|exact=JSUInt31|powerset=1]*/ toString();
}
}
-/*member: notNullAndIfThenElse:[null]*/
+/*member: notNullAndIfThenElse:[null|powerset=1]*/
notNullAndIfThenElse() {
_notNullAndIfThenElse(0, true);
_notNullAndIfThenElse(null, false);
diff --git a/pkg/compiler/test/inference/data/map.dart b/pkg/compiler/test/inference/data/map.dart
index bef703b..2ddaa9a 100644
--- a/pkg/compiler/test/inference/data/map.dart
+++ b/pkg/compiler/test/inference/data/map.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
emptyMap();
nullMap();
@@ -14,26 +14,26 @@
constIntStringMap();
}
-/*member: emptyMap:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: emptyMap:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
emptyMap() => {};
-/*member: constMap:Dictionary([subclass=ConstantMap], key: [empty], value: [null], map: {})*/
+/*member: constMap:Dictionary([subclass=ConstantMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
constMap() => const {};
-/*member: nullMap:Map([subclass=JsLinkedHashMap], key: [null], value: [null])*/
+/*member: nullMap:Map([subclass=JsLinkedHashMap|powerset=0], key: [null|powerset=1], value: [null|powerset=1], powerset: 0)*/
nullMap() => {null: null};
-/*member: constNullMap:Map([subclass=ConstantMap], key: [null], value: [null])*/
+/*member: constNullMap:Map([subclass=ConstantMap|powerset=0], key: [null|powerset=1], value: [null|powerset=1], powerset: 0)*/
constNullMap() => const {null: null};
-/*member: stringIntMap:Dictionary([subclass=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSUInt31], map: {a: [exact=JSUInt31], b: [exact=JSUInt31], c: [exact=JSUInt31]})*/
+/*member: stringIntMap:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSUInt31|powerset=1], map: {a: [exact=JSUInt31|powerset=0], b: [exact=JSUInt31|powerset=0], c: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
stringIntMap() => {'a': 1, 'b': 2, 'c': 3};
-/*member: intStringMap:Map([subclass=JsLinkedHashMap], key: [exact=JSUInt31], value: [null|exact=JSString])*/
+/*member: intStringMap:Map([subclass=JsLinkedHashMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSString|powerset=1], powerset: 0)*/
intStringMap() => {1: 'a', 2: 'b', 3: 'c'};
-/*member: constStringIntMap:Dictionary([subclass=ConstantMap], key: [exact=JSString], value: [null|exact=JSUInt31], map: {a: [exact=JSUInt31], b: [exact=JSUInt31], c: [exact=JSUInt31]})*/
+/*member: constStringIntMap:Dictionary([subclass=ConstantMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSUInt31|powerset=1], map: {a: [exact=JSUInt31|powerset=0], b: [exact=JSUInt31|powerset=0], c: [exact=JSUInt31|powerset=0]}, powerset: 0)*/
constStringIntMap() => const {'a': 1, 'b': 2, 'c': 3};
-/*member: constIntStringMap:Map([subclass=ConstantMap], key: [exact=JSUInt31], value: [null|exact=JSString])*/
+/*member: constIntStringMap:Map([subclass=ConstantMap|powerset=0], key: [exact=JSUInt31|powerset=0], value: [null|exact=JSString|powerset=1], powerset: 0)*/
constIntStringMap() => const {1: 'a', 2: 'b', 3: 'c'};
diff --git a/pkg/compiler/test/inference/data/map_tracer_const.dart b/pkg/compiler/test/inference/data/map_tracer_const.dart
index 7c8433d..45e50ba 100644
--- a/pkg/compiler/test/inference/data/map_tracer_const.dart
+++ b/pkg/compiler/test/inference/data/map_tracer_const.dart
@@ -2,11 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: closure:[exact=JSUInt31]*/
+/*member: closure:[exact=JSUInt31|powerset=0]*/
int closure(
int
- /*spec.Union([exact=JSNumNotInt], [exact=JSUInt31])*/
- /*prod.[exact=JSUInt31]*/
+ /*spec.Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ /*prod.[exact=JSUInt31|powerset=0]*/
x,
) {
return x;
@@ -15,18 +15,18 @@
class A {
static const DEFAULT = const {'fun': closure};
- /*member: A.map:Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+ /*member: A.map:Dictionary([subclass=ConstantMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "fun", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {fun: [subclass=Closure|powerset=0]}, powerset: 0)*/
final map;
- /*member: A.:[exact=A]*/
- A([/*[null]*/ maparg]) : map = maparg == null ? DEFAULT : maparg;
+ /*member: A.:[exact=A|powerset=0]*/
+ A([/*[null|powerset=1]*/ maparg]) : map = maparg == null ? DEFAULT : maparg;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
var a = A();
- a. /*[exact=A]*/ map
- /*Dictionary([subclass=ConstantMap], key: Value([exact=JSString], value: "fun"), value: [null|subclass=Closure], map: {fun: [subclass=Closure]})*/
+ a. /*[exact=A|powerset=0]*/ map
+ /*Dictionary([subclass=ConstantMap|powerset=0], key: Value([exact=JSString|powerset=0], value: "fun", powerset: 0), value: [null|subclass=Closure|powerset=1], map: {fun: [subclass=Closure|powerset=0]}, powerset: 0)*/
['fun'](3.3);
print(closure(22));
}
diff --git a/pkg/compiler/test/inference/data/map_tracer_keys.dart b/pkg/compiler/test/inference/data/map_tracer_keys.dart
index 0e410fa..971437a 100644
--- a/pkg/compiler/test/inference/data/map_tracer_keys.dart
+++ b/pkg/compiler/test/inference/data/map_tracer_keys.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
@@ -12,197 +12,197 @@
test6();
}
-/*member: aDouble1:[null|exact=JSNumNotInt]*/
+/*member: aDouble1:[null|exact=JSNumNotInt|powerset=1]*/
dynamic aDouble1 = 42.5;
-/*member: aList1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
dynamic aList1 = [42];
-/*member: consume1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
consume1(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
) => x;
-/*member: test1:[null]*/
+/*member: test1:[null|powerset=1]*/
test1() {
var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
theMap
- /*update: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [null|exact=JSNumNotInt]})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [null|exact=JSNumNotInt|powerset=1]}, powerset: 0)*/
['d'] =
5.5;
- /*iterator: [exact=LinkedHashMapKeysIterable]*/
- /*current: [exact=LinkedHashMapKeyIterator]*/
- /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+ /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+ /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+ /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
for (var key
in theMap
.
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [null|exact=JSNumNotInt]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [null|exact=JSNumNotInt|powerset=1]}, powerset: 0)*/
keys) {
aDouble1 =
theMap
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [null|exact=JSNumNotInt]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [null|exact=JSNumNotInt|powerset=1]}, powerset: 0)*/
[key];
}
// We have to reference it somewhere, so that it always gets resolved.
consume1(aList1);
}
-/*member: aDouble2:[null|exact=JSNumNotInt]*/
+/*member: aDouble2:[null|exact=JSNumNotInt|powerset=1]*/
dynamic aDouble2 = 42.5;
-/*member: aList2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: aList2:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
dynamic aList2 = [42];
-/*member: consume2:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: consume2:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
consume2(
- /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
) => x;
-/*member: test2:[null]*/
+/*member: test2:[null|powerset=1]*/
test2() {
dynamic theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4};
theMap
- /*update: Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt])*/
+ /*update: Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
[aList2] =
5.5;
- /*iterator: [exact=LinkedHashMapKeysIterable]*/
- /*current: [exact=LinkedHashMapKeyIterator]*/
- /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+ /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+ /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+ /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
for (var key
in theMap
.
- /*Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
keys) {
aDouble2 =
theMap
- /*Map([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
[key];
}
// We have to reference it somewhere, so that it always gets resolved.
consume2(aList2);
}
-/*member: aDouble3:Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt])*/
+/*member: aDouble3:Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1)*/
dynamic aDouble3 = 42.5;
-/*member: aList3:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList3:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
dynamic aList3 = [42];
-/*member: consume3:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume3:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
consume3(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
) => x;
-/*member: test3:[null]*/
+/*member: test3:[null|powerset=1]*/
test3() {
dynamic theMap = <dynamic, dynamic>{'a': 2.2, 'b': 3.3, 'c': 4.4};
theMap
- /*update: Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([null|exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+ /*update: Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([null|exact=JSExtendableArray|powerset=1], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
['d'] =
aList3;
- /*iterator: [exact=LinkedHashMapKeysIterable]*/
- /*current: [exact=LinkedHashMapKeyIterator]*/
- /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+ /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+ /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+ /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
for (var key
in theMap
.
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([null|exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([null|exact=JSExtendableArray|powerset=1], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
keys) {
aDouble3 =
theMap
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([null|exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([null|exact=JSExtendableArray|powerset=1], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 1)}, powerset: 0)*/
[key];
}
// We have to reference it somewhere, so that it always gets resolved.
consume3(aList3);
}
-/*member: aDouble4:[null|exact=JSNumNotInt]*/
+/*member: aDouble4:[null|exact=JSNumNotInt|powerset=1]*/
dynamic aDouble4 = 42.5;
-/*member: aList4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList4:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
dynamic aList4 = [42];
-/*member: consume4:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume4:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
consume4(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
) => x;
-/*member: test4:[null]*/
+/*member: test4:[null|powerset=1]*/
test4() {
var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, 'd': 5.5};
- /*iterator: [exact=LinkedHashMapKeysIterable]*/
- /*current: [exact=LinkedHashMapKeyIterator]*/
- /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+ /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+ /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+ /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
for (var key
in theMap
.
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [exact=JSNumNotInt]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [exact=JSNumNotInt|powerset=0]}, powerset: 0)*/
keys) {
aDouble4 =
theMap
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: [null|exact=JSNumNotInt], map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: [exact=JSNumNotInt]})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: [null|exact=JSNumNotInt|powerset=1], map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: [exact=JSNumNotInt|powerset=0]}, powerset: 0)*/
[key];
}
// We have to reference it somewhere, so that it always gets resolved.
consume4(aList4);
}
-/*member: aDouble5:[null|exact=JSNumNotInt]*/
+/*member: aDouble5:[null|exact=JSNumNotInt|powerset=1]*/
dynamic aDouble5 = 42.5;
-/*member: aList5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: aList5:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
dynamic aList5 = [42];
-/*member: consume5:Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/
+/*member: consume5:Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/
consume5(
- /*Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [null|subclass=Object|powerset=1], length: null, powerset: 0)*/ x,
) => x;
-/*member: test5:[null]*/
+/*member: test5:[null|powerset=1]*/
test5() {
var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, aList5: 5.5};
- /*iterator: [exact=LinkedHashMapKeysIterable]*/
- /*current: [exact=LinkedHashMapKeyIterator]*/
- /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+ /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+ /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+ /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
for (var key
in theMap
.
- /*Map([exact=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSNumNotInt])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0), value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
keys) {
aDouble5 =
theMap
- /*Map([exact=JsLinkedHashMap], key: Union([exact=JSExtendableArray], [exact=JSString]), value: [null|exact=JSNumNotInt])*/
+ /*Map([exact=JsLinkedHashMap|powerset=0], key: Union([exact=JSExtendableArray|powerset=0], [exact=JSString|powerset=0], powerset: 0), value: [null|exact=JSNumNotInt|powerset=1], powerset: 0)*/
[key];
}
// We have to reference it somewhere, so that it always gets resolved.
consume5(aList5);
}
-/*member: aDouble6:Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt])*/
+/*member: aDouble6:Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1)*/
dynamic aDouble6 = 42.5;
-/*member: aList6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: aList6:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
dynamic aList6 = [42];
-/*member: consume6:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/
+/*member: consume6:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/
consume6(
- /*Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)*/ x,
+ /*Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)*/ x,
) => x;
-/*member: test6:[null]*/
+/*member: test6:[null|powerset=1]*/
test6() {
var theMap = {'a': 2.2, 'b': 3.3, 'c': 4.4, 'd': aList6};
- /*iterator: [exact=LinkedHashMapKeysIterable]*/
- /*current: [exact=LinkedHashMapKeyIterator]*/
- /*moveNext: [exact=LinkedHashMapKeyIterator]*/
+ /*iterator: [exact=LinkedHashMapKeysIterable|powerset=0]*/
+ /*current: [exact=LinkedHashMapKeyIterator|powerset=0]*/
+ /*moveNext: [exact=LinkedHashMapKeyIterator|powerset=0]*/
for (var key
in theMap
.
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)}, powerset: 0)*/
keys) {
aDouble6 =
theMap
- /*Dictionary([exact=JsLinkedHashMap], key: [exact=JSString], value: Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt]), map: {a: [exact=JSNumNotInt], b: [exact=JSNumNotInt], c: [exact=JSNumNotInt], d: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 1)})*/
+ /*Dictionary([exact=JsLinkedHashMap|powerset=0], key: [exact=JSString|powerset=0], value: Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], powerset: 1), map: {a: [exact=JSNumNotInt|powerset=0], b: [exact=JSNumNotInt|powerset=0], c: [exact=JSNumNotInt|powerset=0], d: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 1, powerset: 0)}, powerset: 0)*/
[key];
}
// We have to reference it somewhere, so that it always gets resolved.
diff --git a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart
index 106d905..bb9aac3 100644
--- a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart
+++ b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/lib.dart
@@ -4,33 +4,36 @@
class _SECRET {
const _SECRET();
- /*member: _SECRET.toString:Value([exact=JSString], value: "SECRET!")*/
+ /*member: _SECRET.toString:Value([exact=JSString|powerset=0], value: "SECRET!", powerset: 0)*/
@override
String toString() => "SECRET!";
}
class C {
- /*member: C.x:[exact=JSUInt31]*/
+ /*member: C.x:[exact=JSUInt31|powerset=0]*/
final int x;
- /*member: C.y:Union([exact=JSString], [exact=_SECRET])*/
+ /*member: C.y:Union([exact=JSString|powerset=0], [exact=_SECRET|powerset=0], powerset: 0)*/
final y;
- /*member: C.a:[exact=C]*/
+ /*member: C.a:[exact=C|powerset=0]*/
C.a(
- int /*[exact=JSUInt31]*/ x, [
- var /*Union([exact=JSString], [exact=_SECRET])*/ b = const _SECRET(),
+ int /*[exact=JSUInt31|powerset=0]*/ x, [
+ var /*Union([exact=JSString|powerset=0], [exact=_SECRET|powerset=0], powerset: 0)*/ b =
+ const _SECRET(),
]) : this.x = x,
this.y = b;
- /*member: C.b:[exact=C]*/
+ /*member: C.b:[exact=C|powerset=0]*/
C.b(
- int /*[exact=JSUInt31]*/ x, {
- var /*Union([exact=JSString], [exact=_SECRET])*/ b = const _SECRET(),
+ int /*[exact=JSUInt31|powerset=0]*/ x, {
+ var /*Union([exact=JSString|powerset=0], [exact=_SECRET|powerset=0], powerset: 0)*/ b =
+ const _SECRET(),
}) : this.x = x,
this.y = b;
- /*member: C.toString:[exact=JSString]*/
+ /*member: C.toString:[exact=JSString|powerset=0]*/
@override
- String toString() => "C(${ /*[exact=D]*/ x},${ /*[exact=D]*/ y})";
+ String toString() =>
+ "C(${ /*[exact=D|powerset=0]*/ x},${ /*[exact=D|powerset=0]*/ y})";
}
diff --git a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart
index f4145a6..6426ce7 100644
--- a/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart
+++ b/pkg/compiler/test/inference/data/mixin_constructor_default_parameter_values/main.dart
@@ -10,21 +10,21 @@
import 'lib.dart';
mixin Mixin {
- /*member: Mixin.foo:[exact=JSString]*/
+ /*member: Mixin.foo:[exact=JSString|powerset=0]*/
String get foo => "Mixin:$this";
}
// ignore: MIXIN_HAS_NO_CONSTRUCTORS
class D = C with Mixin;
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
// ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
- print(new D.a(42). /*[exact=D]*/ foo);
+ print(new D.a(42). /*[exact=D|powerset=0]*/ foo);
// ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
- print(new D.b(42). /*[exact=D]*/ foo);
+ print(new D.b(42). /*[exact=D|powerset=0]*/ foo);
// ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
- print(new D.a(42, "overt"). /*[exact=D]*/ foo);
+ print(new D.a(42, "overt"). /*[exact=D|powerset=0]*/ foo);
// ignore: NEW_WITH_UNDEFINED_CONSTRUCTOR
- print(new D.b(42, b: "odvert"). /*[exact=D]*/ foo);
+ print(new D.b(42, b: "odvert"). /*[exact=D|powerset=0]*/ foo);
}
diff --git a/pkg/compiler/test/inference/data/narrowing.dart b/pkg/compiler/test/inference/data/narrowing.dart
index f173338..8994681 100644
--- a/pkg/compiler/test/inference/data/narrowing.dart
+++ b/pkg/compiler/test/inference/data/narrowing.dart
@@ -5,115 +5,117 @@
/// Regression test for Issue #33761: is-checks and null-checks were assumed to
/// be true even in nested non-condition contexts.
-/*member: argIsNonNull1:[null]*/
-argIsNonNull1(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull1:[null|powerset=1]*/
+argIsNonNull1(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull1:[null]*/
+/*member: nonNull1:[null|powerset=1]*/
void nonNull1() {
var x = 1;
- if (x /*invoke: [subclass=JSInt]*/ == null) return;
+ if (x /*invoke: [subclass=JSInt|powerset=0]*/ == null) return;
argIsNonNull1(x);
}
-/*member: argIsNonNull2:[null]*/
-argIsNonNull2(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull2:[null|powerset=1]*/
+argIsNonNull2(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull2:[null]*/
+/*member: nonNull2:[null|powerset=1]*/
void nonNull2() {
var x = 1;
- if ((x /*invoke: [subclass=JSInt]*/ == null) /*invoke: [exact=JSBool]*/ ==
+ if ((x /*invoke: [subclass=JSInt|powerset=0]*/ ==
+ null) /*invoke: [exact=JSBool|powerset=0]*/ ==
true)
return;
argIsNonNull2(x);
}
-/*member: argIsNonNull3:[null]*/
-argIsNonNull3(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull3:[null|powerset=1]*/
+argIsNonNull3(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull3:[null]*/
+/*member: nonNull3:[null|powerset=1]*/
void nonNull3() {
var x = 1;
- if ((x /*invoke: [subclass=JSInt]*/ == null) /*invoke: [exact=JSBool]*/ !=
+ if ((x /*invoke: [subclass=JSInt|powerset=0]*/ ==
+ null) /*invoke: [exact=JSBool|powerset=0]*/ !=
false)
return;
argIsNonNull3(x);
}
-/*member: argIsNonNull4:[null]*/
-argIsNonNull4(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull4:[null|powerset=1]*/
+argIsNonNull4(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: discard:Value([exact=JSBool], value: false)*/
-discard(/*[exact=JSBool]*/ x) => false;
+/*member: discard:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
+discard(/*[exact=JSBool|powerset=0]*/ x) => false;
-/*member: nonNull4:[null]*/
+/*member: nonNull4:[null|powerset=1]*/
void nonNull4() {
var x = 1;
- if (discard(x /*invoke: [subclass=JSInt]*/ != null)) return;
+ if (discard(x /*invoke: [subclass=JSInt|powerset=0]*/ != null)) return;
argIsNonNull4(x);
}
-/*member: argIsNonNull5:[null]*/
-argIsNonNull5(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull5:[null|powerset=1]*/
+argIsNonNull5(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull5:[null]*/
+/*member: nonNull5:[null|powerset=1]*/
void nonNull5() {
var x = 1;
- if (x /*invoke: [subclass=JSInt]*/ != null ? false : false) return;
+ if (x /*invoke: [subclass=JSInt|powerset=0]*/ != null ? false : false) return;
argIsNonNull5(x);
}
-/*member: argIsNonNull6:[null]*/
-argIsNonNull6(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull6:[null|powerset=1]*/
+argIsNonNull6(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull6:[null]*/
+/*member: nonNull6:[null|powerset=1]*/
void nonNull6() {
var x = 1;
- if (( /*[exact=JSBool]*/ (/*[exact=JSBool]*/ y) => y && false)(
- x /*invoke: [subclass=JSInt]*/ != null,
- ))
+ if (( /*[exact=JSBool|powerset=0]*/ (/*[exact=JSBool|powerset=0]*/ y) =>
+ y && false)(x /*invoke: [subclass=JSInt|powerset=0]*/ != null))
return;
argIsNonNull6(x);
}
-/*member: argIsNonNull7:[null]*/
-argIsNonNull7(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull7:[null|powerset=1]*/
+argIsNonNull7(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull7:[null]*/
+/*member: nonNull7:[null|powerset=1]*/
void nonNull7() {
var f = false;
var x = 1;
- if (f ? (throw x /*invoke: [subclass=JSInt]*/ != null) : false) return;
+ if (f ? (throw x /*invoke: [subclass=JSInt|powerset=0]*/ != null) : false)
+ return;
argIsNonNull7(x);
}
-/*member: argIsNonNull8:[null]*/
-argIsNonNull8(/*[exact=JSUInt31]*/ x) {
+/*member: argIsNonNull8:[null|powerset=1]*/
+argIsNonNull8(/*[exact=JSUInt31|powerset=0]*/ x) {
print('>> is null: ${x == null}');
}
-/*member: nonNull8:[null]*/
+/*member: nonNull8:[null|powerset=1]*/
void nonNull8() {
var f = false;
var x = 1;
- if (f ?? (x /*invoke: [subclass=JSInt]*/ != null)) return;
+ if (f ?? (x /*invoke: [subclass=JSInt|powerset=0]*/ != null)) return;
argIsNonNull8(x);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
nonNull1();
nonNull2();
diff --git a/pkg/compiler/test/inference/data/native.dart b/pkg/compiler/test/inference/data/native.dart
index 61e2cc8..f3f0439 100644
--- a/pkg/compiler/test/inference/data/native.dart
+++ b/pkg/compiler/test/inference/data/native.dart
@@ -2,12 +2,12 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
nativeMethod();
}
-/*member: nativeMethod:[null|subclass=Object]*/
+/*member: nativeMethod:[null|subclass=Object|powerset=1]*/
nativeMethod()
// ignore: NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
native;
diff --git a/pkg/compiler/test/inference/data/native2.dart b/pkg/compiler/test/inference/data/native2.dart
index 3f568ec..7eeb616 100644
--- a/pkg/compiler/test/inference/data/native2.dart
+++ b/pkg/compiler/test/inference/data/native2.dart
@@ -6,16 +6,16 @@
import 'dart:_foreign_helper' as foreign show JS;
import 'dart:html';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
createElement();
createRectangle();
}
-/*member: createElement:[subclass=Element]*/
+/*member: createElement:[subclass=Element|powerset=0]*/
Element createElement()
// ignore: NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
native;
-/*member: createRectangle:[subclass=DomRectReadOnly]*/
+/*member: createRectangle:[subclass=DomRectReadOnly|powerset=0]*/
createRectangle() => foreign.JS('Rectangle', "#", null);
diff --git a/pkg/compiler/test/inference/data/native3.dart b/pkg/compiler/test/inference/data/native3.dart
index f4f1161..50d3b1c 100644
--- a/pkg/compiler/test/inference/data/native3.dart
+++ b/pkg/compiler/test/inference/data/native3.dart
@@ -4,12 +4,12 @@
import 'dart:html';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
createRectangle();
}
-/*member: createRectangle:[subclass=DomRectReadOnly]*/
+/*member: createRectangle:[subclass=DomRectReadOnly|powerset=0]*/
Rectangle createRectangle()
// ignore: NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE
native;
diff --git a/pkg/compiler/test/inference/data/new.dart b/pkg/compiler/test/inference/data/new.dart
index 233955c8..c849388 100644
--- a/pkg/compiler/test/inference/data/new.dart
+++ b/pkg/compiler/test/inference/data/new.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
generativeConstructorCall();
factoryConstructorCall2();
@@ -21,10 +21,10 @@
/// Call default constructor of a field-less class.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {}
-/*member: generativeConstructorCall:[exact=Class1]*/
+/*member: generativeConstructorCall:[exact=Class1|powerset=0]*/
generativeConstructorCall() => Class1();
////////////////////////////////////////////////////////////////////////////////
@@ -32,13 +32,13 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- /*member: Class3.:[exact=Class3]*/
+ /*member: Class3.:[exact=Class3|powerset=0]*/
factory Class3() => Class3.named();
- /*member: Class3.named:[exact=Class3]*/
+ /*member: Class3.named:[exact=Class3|powerset=0]*/
Class3.named();
}
-/*member: factoryConstructorCall2:[exact=Class3]*/
+/*member: factoryConstructorCall2:[exact=Class3|powerset=0]*/
factoryConstructorCall2() => Class3();
////////////////////////////////////////////////////////////////////////////////
@@ -46,14 +46,14 @@
////////////////////////////////////////////////////////////////////////////////
class Class4a {
- /*member: Class4a.:[exact=Class4b]*/
+ /*member: Class4a.:[exact=Class4b|powerset=0]*/
factory Class4a() => Class4b();
}
-/*member: Class4b.:[exact=Class4b]*/
+/*member: Class4b.:[exact=Class4b|powerset=0]*/
class Class4b implements Class4a {}
-/*member: factoryConstructorCall3:[exact=Class4b]*/
+/*member: factoryConstructorCall3:[exact=Class4b|powerset=0]*/
factoryConstructorCall3() => Class4a();
////////////////////////////////////////////////////////////////////////////////
@@ -61,13 +61,13 @@
////////////////////////////////////////////////////////////////////////////////
class Class5 {
- final /*member: Class5.field:[exact=JSUInt31]*/ field;
+ final /*member: Class5.field:[exact=JSUInt31|powerset=0]*/ field;
- /*member: Class5.:[exact=Class5]*/
- Class5(this. /*[exact=JSUInt31]*/ field);
+ /*member: Class5.:[exact=Class5|powerset=0]*/
+ Class5(this. /*[exact=JSUInt31|powerset=0]*/ field);
}
-/*member: classWithFinalFieldInitializer:[exact=Class5]*/
+/*member: classWithFinalFieldInitializer:[exact=Class5|powerset=0]*/
classWithFinalFieldInitializer() => Class5(0);
////////////////////////////////////////////////////////////////////////////////
@@ -75,13 +75,13 @@
////////////////////////////////////////////////////////////////////////////////
class Class6 {
- var /*member: Class6.field:[exact=JSUInt31]*/ field;
+ var /*member: Class6.field:[exact=JSUInt31|powerset=0]*/ field;
- /*member: Class6.:[exact=Class6]*/
- Class6(this. /*[exact=JSUInt31]*/ field);
+ /*member: Class6.:[exact=Class6|powerset=0]*/
+ Class6(this. /*[exact=JSUInt31|powerset=0]*/ field);
}
-/*member: classWithNonFinalFieldInitializer:[exact=Class6]*/
+/*member: classWithNonFinalFieldInitializer:[exact=Class6|powerset=0]*/
classWithNonFinalFieldInitializer() => Class6(0);
////////////////////////////////////////////////////////////////////////////////
@@ -89,13 +89,13 @@
////////////////////////////////////////////////////////////////////////////////
class Class7 {
- var /*member: Class7.field:[exact=JSUInt31]*/ field;
+ var /*member: Class7.field:[exact=JSUInt31|powerset=0]*/ field;
- /*member: Class7.:[exact=Class7]*/
- Class7(/*[exact=JSUInt31]*/ value) : this.field = value;
+ /*member: Class7.:[exact=Class7|powerset=0]*/
+ Class7(/*[exact=JSUInt31|powerset=0]*/ value) : this.field = value;
}
-/*member: classWithExplicitFieldInitializer:[exact=Class7]*/
+/*member: classWithExplicitFieldInitializer:[exact=Class7|powerset=0]*/
classWithExplicitFieldInitializer() => Class7(0);
////////////////////////////////////////////////////////////////////////////////
@@ -103,15 +103,15 @@
////////////////////////////////////////////////////////////////////////////////
class Class8 {
- var /*member: Class8.field:[exact=JSUInt31]*/ field;
+ var /*member: Class8.field:[exact=JSUInt31|powerset=0]*/ field;
- /*member: Class8.:[exact=Class8]*/
- Class8(/*[exact=JSUInt31]*/ value) {
- this. /*update: [exact=Class8]*/ field = value;
+ /*member: Class8.:[exact=Class8|powerset=0]*/
+ Class8(/*[exact=JSUInt31|powerset=0]*/ value) {
+ this. /*update: [exact=Class8|powerset=0]*/ field = value;
}
}
-/*member: classWithFieldInitializerInBody:[exact=Class8]*/
+/*member: classWithFieldInitializerInBody:[exact=Class8|powerset=0]*/
classWithFieldInitializerInBody() => Class8(0);
////////////////////////////////////////////////////////////////////////////////
@@ -120,13 +120,13 @@
////////////////////////////////////////////////////////////////////////////////
class Class9 {
- var /*member: Class9.field:[null]*/ field = null;
+ var /*member: Class9.field:[null|powerset=1]*/ field = null;
- /*member: Class9.:[exact=Class9]*/
+ /*member: Class9.:[exact=Class9|powerset=0]*/
Class9() {}
}
-/*member: classWithNullNoFieldInitializerInBody:[exact=Class9]*/
+/*member: classWithNullNoFieldInitializerInBody:[exact=Class9|powerset=0]*/
classWithNullNoFieldInitializerInBody() => Class9();
////////////////////////////////////////////////////////////////////////////////
@@ -135,15 +135,15 @@
////////////////////////////////////////////////////////////////////////////////
class Class10 {
- var /*member: Class10.field:[exact=JSUInt31]*/ field = null;
+ var /*member: Class10.field:[exact=JSUInt31|powerset=0]*/ field = null;
- /*member: Class10.:[exact=Class10]*/
- Class10(/*[exact=JSUInt31]*/ value) {
- this. /*update: [exact=Class10]*/ field = value;
+ /*member: Class10.:[exact=Class10|powerset=0]*/
+ Class10(/*[exact=JSUInt31|powerset=0]*/ value) {
+ this. /*update: [exact=Class10|powerset=0]*/ field = value;
}
}
-/*member: classWithNullFieldInitializerInBody:[exact=Class10]*/
+/*member: classWithNullFieldInitializerInBody:[exact=Class10|powerset=0]*/
classWithNullFieldInitializerInBody() => Class10(0);
////////////////////////////////////////////////////////////////////////////////
@@ -152,18 +152,18 @@
////////////////////////////////////////////////////////////////////////////////
class Class11 {
- var /*member: Class11.field:[null|exact=JSUInt31]*/ field = null;
+ var /*member: Class11.field:[null|exact=JSUInt31|powerset=1]*/ field = null;
- /*member: Class11.a:[exact=Class11]*/
- Class11.a(/*[exact=JSUInt31]*/ value) {
- this. /*update: [exact=Class11]*/ field = value;
+ /*member: Class11.a:[exact=Class11|powerset=0]*/
+ Class11.a(/*[exact=JSUInt31|powerset=0]*/ value) {
+ this. /*update: [exact=Class11|powerset=0]*/ field = value;
}
- /*member: Class11.b:[exact=Class11]*/
+ /*member: Class11.b:[exact=Class11|powerset=0]*/
Class11.b() {}
}
-/*member: classWithNullMaybeFieldInitializerInBody:[exact=Class11]*/
+/*member: classWithNullMaybeFieldInitializerInBody:[exact=Class11|powerset=0]*/
classWithNullMaybeFieldInitializerInBody() {
Class11.a(0);
return Class11.b();
@@ -174,13 +174,13 @@
////////////////////////////////////////////////////////////////////////////////
class Class12 {
- final /*member: Class12.field:[null]*/ field = null;
+ final /*member: Class12.field:[null|powerset=1]*/ field = null;
- /*member: Class12.:[exact=Class12]*/
+ /*member: Class12.:[exact=Class12|powerset=0]*/
Class12();
}
-/*member: classWithNullFinalFieldInitializer:[exact=Class12]*/
+/*member: classWithNullFinalFieldInitializer:[exact=Class12|powerset=0]*/
classWithNullFinalFieldInitializer() {
return Class12();
}
diff --git a/pkg/compiler/test/inference/data/no_such_method.dart b/pkg/compiler/test/inference/data/no_such_method.dart
index 867c36a..fe36531 100644
--- a/pkg/compiler/test/inference/data/no_such_method.dart
+++ b/pkg/compiler/test/inference/data/no_such_method.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
missingGetter();
missingMethod();
@@ -14,119 +14,125 @@
// Access missing getter.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.noSuchMethod:[exact=JSUInt31]*/
+ /*member: Class1.noSuchMethod:[exact=JSUInt31|powerset=0]*/
noSuchMethod(
Invocation
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
_,
) => 42;
- /*member: Class1.method:[exact=JSUInt31]*/
+ /*member: Class1.method:[exact=JSUInt31|powerset=0]*/
method() {
dynamic a = this;
- return a. /*[exact=Class1]*/ missingGetter;
+ return a. /*[exact=Class1|powerset=0]*/ missingGetter;
}
}
-/*member: missingGetter:[exact=JSUInt31]*/
-missingGetter() => Class1(). /*invoke: [exact=Class1]*/ method();
+/*member: missingGetter:[exact=JSUInt31|powerset=0]*/
+missingGetter() => Class1(). /*invoke: [exact=Class1|powerset=0]*/ method();
////////////////////////////////////////////////////////////////////////////////
// Invoke missing method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.noSuchMethod:[exact=JSUInt31]*/
+ /*member: Class2.noSuchMethod:[exact=JSUInt31|powerset=0]*/
noSuchMethod(
Invocation
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
_,
) => 42;
- /*member: Class2.method:[exact=JSUInt31]*/
+ /*member: Class2.method:[exact=JSUInt31|powerset=0]*/
method() {
dynamic a = this;
- return a. /*invoke: [exact=Class2]*/ missingMethod();
+ return a. /*invoke: [exact=Class2|powerset=0]*/ missingMethod();
}
}
-/*member: missingMethod:[exact=JSUInt31]*/
-missingMethod() => Class2(). /*invoke: [exact=Class2]*/ method();
+/*member: missingMethod:[exact=JSUInt31|powerset=0]*/
+missingMethod() => Class2(). /*invoke: [exact=Class2|powerset=0]*/ method();
////////////////////////////////////////////////////////////////////////////////
// Pass closure to missing method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.noSuchMethod:[null|subclass=Object]*/
+ /*member: Class3.noSuchMethod:[null|subclass=Object|powerset=1]*/
noSuchMethod(
Invocation
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
invocation,
) {
return invocation
.
- /*[exact=JSInvocationMirror]*/
+ /*[exact=JSInvocationMirror|powerset=0]*/
positionalArguments
.
- /*[exact=JSUnmodifiableArray]*/
+ /*[exact=JSUnmodifiableArray|powerset=0]*/
first;
}
- /*member: Class3.method:[null|subclass=Object]*/
+ /*member: Class3.method:[null|subclass=Object|powerset=1]*/
method() {
dynamic a = this;
- return a. /*invoke: [exact=Class3]*/ missingMethod(
- /*[null]*/ (/*[null|subclass=Object]*/ parameter) {},
+ return a. /*invoke: [exact=Class3|powerset=0]*/ missingMethod(
+ /*[null|powerset=1]*/ (
+ /*[null|subclass=Object|powerset=1]*/ parameter,
+ ) {},
)(0);
}
}
-/*member: closureThroughMissingMethod:[null|subclass=Object]*/
-closureThroughMissingMethod() => Class3(). /*invoke: [exact=Class3]*/ method();
+/*member: closureThroughMissingMethod:[null|subclass=Object|powerset=1]*/
+closureThroughMissingMethod() =>
+ Class3(). /*invoke: [exact=Class3|powerset=0]*/ method();
////////////////////////////////////////////////////////////////////////////////
// Pass closure to missing setter.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- /*member: Class4.field:[null|subclass=Object]*/
+ /*member: Class4.field:[null|subclass=Object|powerset=1]*/
var field;
- /*member: Class4.noSuchMethod:[null]*/
+ /*member: Class4.noSuchMethod:[null|powerset=1]*/
noSuchMethod(
Invocation
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
invocation,
) {
- this. /*update: [exact=Class4]*/ field =
+ this. /*update: [exact=Class4|powerset=0]*/ field =
invocation
.
- /*[exact=JSInvocationMirror]*/
+ /*[exact=JSInvocationMirror|powerset=0]*/
positionalArguments
.
- /*[exact=JSUnmodifiableArray]*/
+ /*[exact=JSUnmodifiableArray|powerset=0]*/
first;
return null;
}
- /*member: Class4.method:[null]*/
+ /*member: Class4.method:[null|powerset=1]*/
method() {
dynamic a = this;
- a. /*update: [exact=Class4]*/ missingSetter =
- /*[null]*/ (/*[null|subclass=Object]*/ parameter) {};
- a. /*invoke: [exact=Class4]*/ field(0);
+ a. /*update: [exact=Class4|powerset=0]*/ missingSetter =
+ /*[null|powerset=1]*/ (
+ /*[null|subclass=Object|powerset=1]*/ parameter,
+ ) {};
+ a. /*invoke: [exact=Class4|powerset=0]*/ field(0);
}
}
-/*member: closureThroughMissingSetter:[null]*/
-closureThroughMissingSetter() => Class4(). /*invoke: [exact=Class4]*/ method();
+/*member: closureThroughMissingSetter:[null|powerset=1]*/
+closureThroughMissingSetter() =>
+ Class4(). /*invoke: [exact=Class4|powerset=0]*/ method();
diff --git a/pkg/compiler/test/inference/data/no_such_method1.dart b/pkg/compiler/test/inference/data/no_such_method1.dart
index a141d24..e0f52dd 100644
--- a/pkg/compiler/test/inference/data/no_such_method1.dart
+++ b/pkg/compiler/test/inference/data/no_such_method1.dart
@@ -2,60 +2,60 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.noSuchMethod:[exact=JSUInt31]*/
+ /*member: A.noSuchMethod:[exact=JSUInt31|powerset=0]*/
noSuchMethod(
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
im,
) => 42;
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:[exact=JSUInt31]*/
- /*invoke: [subclass=B]*/
+ /*member: B.foo:[exact=JSUInt31|powerset=0]*/
+ /*invoke: [subclass=B|powerset=0]*/
foo();
}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C extends B {
- /*member: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: C.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: a:[null|subclass=B]*/
+/*member: a:[null|subclass=B|powerset=1]*/
dynamic a =
[new B(), C()]
- /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=B|powerset=0], length: 2, powerset: 0)*/
[0];
-/*member: test1:[exact=JSUInt31]*/
+/*member: test1:[exact=JSUInt31|powerset=0]*/
test1() {
dynamic e = A();
- return e. /*invoke: [exact=A]*/ foo();
+ return e. /*invoke: [exact=A|powerset=0]*/ foo();
}
-/*member: test2:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
-test2() => a. /*invoke: [null|subclass=B]*/ foo();
+/*member: test2:Union([exact=JSUInt31|powerset=0], [subclass=JsLinkedHashMap|powerset=0], powerset: 0)*/
+test2() => a. /*invoke: [null|subclass=B|powerset=1]*/ foo();
-/*member: test3:[exact=JSUInt31]*/
-test3() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test3:[exact=JSUInt31|powerset=0]*/
+test3() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
-/*member: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test4:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
-/*member: test5:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
+/*member: test5:Union([exact=JSUInt31|powerset=0], [subclass=JsLinkedHashMap|powerset=0], powerset: 0)*/
test5() {
dynamic e = (a ? A() : B());
- return e. /*invoke: [subclass=A]*/ foo();
+ return e. /*invoke: [subclass=A|powerset=0]*/ foo();
}
-/*member: test6:Union([exact=JSUInt31], [subclass=JsLinkedHashMap])*/
-test6() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test6:Union([exact=JSUInt31|powerset=0], [subclass=JsLinkedHashMap|powerset=0], powerset: 0)*/
+test6() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
diff --git a/pkg/compiler/test/inference/data/no_such_method2.dart b/pkg/compiler/test/inference/data/no_such_method2.dart
index 94bdd61..4457cdd 100644
--- a/pkg/compiler/test/inference/data/no_such_method2.dart
+++ b/pkg/compiler/test/inference/data/no_such_method2.dart
@@ -2,103 +2,107 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A.:[subclass=B]*/
+/*member: A.:[subclass=B|powerset=0]*/
abstract class A {
- /*member: A.noSuchMethod:[exact=JSUInt31]*/
+ /*member: A.noSuchMethod:[exact=JSUInt31|powerset=0]*/
noSuchMethod(
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
im,
) => 42;
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: B.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C extends B {
- /*member: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: C.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: D.:[exact=D]*/
+/*member: D.:[exact=D|powerset=0]*/
class D implements A {
- /*member: D.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: D.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
- /*member: D.noSuchMethod:[exact=JSNumNotInt]*/
+ /*member: D.noSuchMethod:[exact=JSNumNotInt|powerset=0]*/
noSuchMethod(
- /*prod.[exact=JSInvocationMirror]*/
- /*spec.[null|subclass=Object]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
im,
) => 42.5;
}
-/*member: a:Union(null, [exact=D], [subclass=B])*/
+/*member: a:Union(null, [exact=D|powerset=0], [subclass=B|powerset=0], powerset: 1)*/
dynamic a =
[new B(), C(), D()]
- /*Container([exact=JSExtendableArray], element: Union([exact=D], [subclass=B]), length: 3)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: Union([exact=D|powerset=0], [subclass=B|powerset=0], powerset: 0), length: 3, powerset: 0)*/
[0];
-/*member: test1:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test1() => a. /*invoke: Union(null, [exact=D], [subclass=B])*/ foo();
+/*member: test1:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test1() =>
+ a. /*invoke: Union(null, [exact=D|powerset=0], [subclass=B|powerset=0], powerset: 1)*/ foo();
-/*member: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test2() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test2:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test2() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
-/*member: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test3() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test3:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test3() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
-/*member: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test4:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
-/*member: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: test5:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
test5() {
dynamic e = (a ? B() : D());
- return e. /*invoke: Union([exact=B], [exact=D])*/ foo();
+ return e
+ . /*invoke: Union([exact=B|powerset=0], [exact=D|powerset=0], powerset: 0)*/ foo();
}
// Can hit A.noSuchMethod, D.noSuchMethod and Object.noSuchMethod.
-/*member: test6:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
-test6() => a. /*invoke: Union(null, [exact=D], [subclass=B])*/ bar();
+/*member: test6:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+test6() =>
+ a. /*invoke: Union(null, [exact=D|powerset=0], [subclass=B|powerset=0], powerset: 1)*/ bar();
// Can hit A.noSuchMethod.
-/*member: test7:[exact=JSUInt31]*/
+/*member: test7:[exact=JSUInt31|powerset=0]*/
test7() {
dynamic e = B();
- return e. /*invoke: [exact=B]*/ bar();
+ return e. /*invoke: [exact=B|powerset=0]*/ bar();
}
-/*member: test8:[exact=JSUInt31]*/
+/*member: test8:[exact=JSUInt31|powerset=0]*/
test8() {
dynamic e = C();
- return e. /*invoke: [exact=C]*/ bar();
+ return e. /*invoke: [exact=C|powerset=0]*/ bar();
}
-/*member: test9:[exact=JSUInt31]*/
+/*member: test9:[exact=JSUInt31|powerset=0]*/
test9() {
dynamic e = (a ? B() : C());
- return e. /*invoke: [subclass=B]*/ bar();
+ return e. /*invoke: [subclass=B|powerset=0]*/ bar();
}
// Can hit A.noSuchMethod and D.noSuchMethod.
-/*member: test10:Union([exact=JSNumNotInt], [exact=JSUInt31])*/
+/*member: test10:Union([exact=JSNumNotInt|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
test10() {
dynamic e = (a ? B() : D());
- return e. /*invoke: Union([exact=B], [exact=D])*/ bar();
+ return e
+ . /*invoke: Union([exact=B|powerset=0], [exact=D|powerset=0], powerset: 0)*/ bar();
}
// Can hit D.noSuchMethod.
-/*member: test11:[exact=JSNumNotInt]*/
+/*member: test11:[exact=JSNumNotInt|powerset=0]*/
test11() {
dynamic e = D();
- return e. /*invoke: [exact=D]*/ bar();
+ return e. /*invoke: [exact=D|powerset=0]*/ bar();
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
diff --git a/pkg/compiler/test/inference/data/no_such_method3.dart b/pkg/compiler/test/inference/data/no_such_method3.dart
index 342fdb5..f222862 100644
--- a/pkg/compiler/test/inference/data/no_such_method3.dart
+++ b/pkg/compiler/test/inference/data/no_such_method3.dart
@@ -2,60 +2,60 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
// We may ignore this for type inference because syntactically it always
// throws an exception.
- /*member: A.noSuchMethod:[empty]*/
+ /*member: A.noSuchMethod:[empty|powerset=0]*/
noSuchMethod(
- /*spec.[null|subclass=Object]*/
- /*prod.[exact=JSInvocationMirror]*/
+ /*spec.[null|subclass=Object|powerset=1]*/
+ /*prod.[exact=JSInvocationMirror|powerset=0]*/
im,
) => throw 'foo';
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: B.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C extends B {
- /*member: C.foo:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: C.foo:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: a:[null|subclass=B]*/
+/*member: a:[null|subclass=B|powerset=1]*/
dynamic a =
[new B(), C()]
- /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=B|powerset=0], length: 2, powerset: 0)*/
[0];
-/*member: test1:[empty]*/
+/*member: test1:[empty|powerset=0]*/
test1() {
dynamic e = A();
- return e. /*invoke: [exact=A]*/ foo();
+ return e. /*invoke: [exact=A|powerset=0]*/ foo();
}
-/*member: test2:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test2() => a. /*invoke: [null|subclass=B]*/ foo();
+/*member: test2:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test2() => a. /*invoke: [null|subclass=B|powerset=1]*/ foo();
-/*member: test3:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test3() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test3:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test3() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
-/*member: test4:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test4:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
-/*member: test5:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: test5:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
test5() {
dynamic e = (a ? A() : B());
- return e. /*invoke: [subclass=A]*/ foo();
+ return e. /*invoke: [subclass=A|powerset=0]*/ foo();
}
-/*member: test6:Dictionary([subclass=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test6() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test6:Dictionary([subclass=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test6() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
diff --git a/pkg/compiler/test/inference/data/no_such_method4.dart b/pkg/compiler/test/inference/data/no_such_method4.dart
index e14ebf1..8ac3852 100644
--- a/pkg/compiler/test/inference/data/no_such_method4.dart
+++ b/pkg/compiler/test/inference/data/no_such_method4.dart
@@ -2,56 +2,56 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
// We may ignore this for type inference because it forwards to a default
// noSuchMethod implementation, which always throws an exception.
noSuchMethod(im) => super.noSuchMethod(im);
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: B.foo:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C extends B {
- /*member: C.foo:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+ /*member: C.foo:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
foo() => {};
}
-/*member: a:[null|subclass=B]*/
+/*member: a:[null|subclass=B|powerset=1]*/
dynamic a =
[new B(), C()]
- /*Container([exact=JSExtendableArray], element: [subclass=B], length: 2)*/
+ /*Container([exact=JSExtendableArray|powerset=0], element: [subclass=B|powerset=0], length: 2, powerset: 0)*/
[0];
-/*member: test1:[empty]*/
+/*member: test1:[empty|powerset=0]*/
test1() {
dynamic e = A();
- return e. /*invoke: [exact=A]*/ foo();
+ return e. /*invoke: [exact=A|powerset=0]*/ foo();
}
-/*member: test2:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test2() => a. /*invoke: [null|subclass=B]*/ foo();
+/*member: test2:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test2() => a. /*invoke: [null|subclass=B|powerset=1]*/ foo();
-/*member: test3:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test3() => B(). /*invoke: [exact=B]*/ foo();
+/*member: test3:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test3() => B(). /*invoke: [exact=B|powerset=0]*/ foo();
-/*member: test4:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test4() => C(). /*invoke: [exact=C]*/ foo();
+/*member: test4:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test4() => C(). /*invoke: [exact=C|powerset=0]*/ foo();
-/*member: test5:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
+/*member: test5:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
test5() {
dynamic e = (a ? A() : B());
- return e. /*invoke: [subclass=A]*/ foo();
+ return e. /*invoke: [subclass=A|powerset=0]*/ foo();
}
-/*member: test6:Dictionary([exact=JsLinkedHashMap], key: [empty], value: [null], map: {})*/
-test6() => (a ? B() : C()). /*invoke: [subclass=B]*/ foo();
+/*member: test6:Dictionary([exact=JsLinkedHashMap|powerset=0], key: [empty|powerset=0], value: [null|powerset=1], map: {}, powerset: 0)*/
+test6() => (a ? B() : C()). /*invoke: [subclass=B|powerset=0]*/ foo();
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
test1();
test2();
diff --git a/pkg/compiler/test/inference/data/non_null.dart b/pkg/compiler/test/inference/data/non_null.dart
index a23be1f..f44909d 100644
--- a/pkg/compiler/test/inference/data/non_null.dart
+++ b/pkg/compiler/test/inference/data/non_null.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
nonNullStaticField();
nonNullInstanceField1();
@@ -10,40 +10,42 @@
nonNullLocal();
}
-/*member: staticField:[null|exact=JSUInt31]*/
+/*member: staticField:[null|exact=JSUInt31|powerset=1]*/
var staticField;
-/*member: nonNullStaticField:[exact=JSUInt31]*/
+/*member: nonNullStaticField:[exact=JSUInt31|powerset=0]*/
nonNullStaticField() => staticField ??= 42;
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:[null|exact=JSUInt31]*/
+ /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
var field;
}
-/*member: nonNullInstanceField1:[exact=JSUInt31]*/
+/*member: nonNullInstanceField1:[exact=JSUInt31|powerset=0]*/
nonNullInstanceField1() {
- return Class1(). /*[exact=Class1]*/ /*update: [exact=Class1]*/ field ??= 42;
+ return Class1()
+ . /*[exact=Class1|powerset=0]*/ /*update: [exact=Class1|powerset=0]*/ field ??= 42;
}
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:[null|exact=JSUInt31]*/
+ /*member: Class2.field:[null|exact=JSUInt31|powerset=1]*/
var field;
- /*member: Class2.method:[exact=JSUInt31]*/
+ /*member: Class2.method:[exact=JSUInt31|powerset=0]*/
method() {
- return /*[exact=Class2]*/ /*update: [exact=Class2]*/ field ??= 42;
+ return /*[exact=Class2|powerset=0]*/ /*update: [exact=Class2|powerset=0]*/ field ??=
+ 42;
}
}
-/*member: nonNullInstanceField2:[exact=JSUInt31]*/
+/*member: nonNullInstanceField2:[exact=JSUInt31|powerset=0]*/
nonNullInstanceField2() {
- return Class2(). /*invoke: [exact=Class2]*/ method();
+ return Class2(). /*invoke: [exact=Class2|powerset=0]*/ method();
}
-/*member: nonNullLocal:[exact=JSUInt31]*/
+/*member: nonNullLocal:[exact=JSUInt31|powerset=0]*/
nonNullLocal() {
var local = null;
return local ??= 42;
diff --git a/pkg/compiler/test/inference/data/null.dart b/pkg/compiler/test/inference/data/null.dart
index ec7f4bf..e9db384 100644
--- a/pkg/compiler/test/inference/data/null.dart
+++ b/pkg/compiler/test/inference/data/null.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
ifThenNullCheck(0);
ifThenNullCheck(null);
@@ -22,84 +22,84 @@
ifThenNotNullGradualCheck2(null, 0);
}
-/*member: ifThenNullCheck:[exact=JSUInt31]*/
-ifThenNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
- if (value /*invoke: [null|subclass=JSInt]*/ == null) {
+/*member: ifThenNullCheck:[exact=JSUInt31|powerset=0]*/
+ifThenNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+ if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ == null) {
return 0;
}
return value;
}
-/*member: ifThenElseNullCheck:[exact=JSUInt31]*/
-ifThenElseNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
- if (value /*invoke: [null|subclass=JSInt]*/ == null) {
+/*member: ifThenElseNullCheck:[exact=JSUInt31|powerset=0]*/
+ifThenElseNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+ if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ == null) {
return 0;
} else {
return value;
}
}
-/*member: ifNotThenNullCheck:[exact=JSUInt31]*/
-ifNotThenNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
- if (value /*invoke: [null|subclass=JSInt]*/ != null) {
+/*member: ifNotThenNullCheck:[exact=JSUInt31|powerset=0]*/
+ifNotThenNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+ if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
return value;
}
return 0;
}
-/*member: ifNotThenElseNullCheck:[exact=JSUInt31]*/
-ifNotThenElseNullCheck(int? /*[null|exact=JSUInt31]*/ value) {
- if (value /*invoke: [null|subclass=JSInt]*/ != null) {
+/*member: ifNotThenElseNullCheck:[exact=JSUInt31|powerset=0]*/
+ifNotThenElseNullCheck(int? /*[null|exact=JSUInt31|powerset=1]*/ value) {
+ if (value /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
return value;
} else {
return 0;
}
}
-/*member: ifThenNotNullComplexCheck:[exact=JSUInt31]*/
+/*member: ifThenNotNullComplexCheck:[exact=JSUInt31|powerset=0]*/
ifThenNotNullComplexCheck(
- int? /*[null|exact=JSUInt31]*/ a,
- int? /*[null|exact=JSUInt31]*/ b,
+ int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+ int? /*[null|exact=JSUInt31|powerset=1]*/ b,
) {
- if (a /*invoke: [null|subclass=JSInt]*/ != null &&
- a /*invoke: [exact=JSUInt31]*/ != b) {
+ if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null &&
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ != b) {
return a;
}
return 0;
}
-/*member: ifThenElseNotNullComplexCheck:[null|exact=JSUInt31]*/
+/*member: ifThenElseNotNullComplexCheck:[null|exact=JSUInt31|powerset=1]*/
ifThenElseNotNullComplexCheck(
- int? /*[null|exact=JSUInt31]*/ a,
- int? /*[null|exact=JSUInt31]*/ b,
+ int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+ int? /*[null|exact=JSUInt31|powerset=1]*/ b,
) {
- if (a /*invoke: [null|subclass=JSInt]*/ != null &&
- a /*invoke: [exact=JSUInt31]*/ != b) {
+ if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null &&
+ a /*invoke: [exact=JSUInt31|powerset=0]*/ != b) {
return a;
}
return a;
}
-/*member: ifThenNotNullGradualCheck1:[exact=JSUInt31]*/
+/*member: ifThenNotNullGradualCheck1:[exact=JSUInt31|powerset=0]*/
ifThenNotNullGradualCheck1(
- int? /*[null|exact=JSUInt31]*/ a,
- int /*[exact=JSUInt31]*/ b,
+ int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+ int /*[exact=JSUInt31|powerset=0]*/ b,
) {
- if (a /*invoke: [null|exact=JSUInt31]*/ != b) {
- if (a /*invoke: [null|subclass=JSInt]*/ != null) {
+ if (a /*invoke: [null|exact=JSUInt31|powerset=1]*/ != b) {
+ if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
return a;
}
}
return 0;
}
-/*member: ifThenNotNullGradualCheck2:[exact=JSUInt31]*/
+/*member: ifThenNotNullGradualCheck2:[exact=JSUInt31|powerset=0]*/
ifThenNotNullGradualCheck2(
- int? /*[null|exact=JSUInt31]*/ a,
- int /*[exact=JSUInt31]*/ b,
+ int? /*[null|exact=JSUInt31|powerset=1]*/ a,
+ int /*[exact=JSUInt31|powerset=0]*/ b,
) {
- if (a /*invoke: [null|subclass=JSInt]*/ != null) {
- if (a /*invoke: [exact=JSUInt31]*/ != b) {
+ if (a /*invoke: [null|subclass=JSInt|powerset=1]*/ != null) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ != b) {
return a;
}
}
diff --git a/pkg/compiler/test/inference/data/optimizer_hints.dart b/pkg/compiler/test/inference/data/optimizer_hints.dart
index 96e66f2..0e029bf 100644
--- a/pkg/compiler/test/inference/data/optimizer_hints.dart
+++ b/pkg/compiler/test/inference/data/optimizer_hints.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
assumeDynamic();
notAssumeDynamic();
@@ -18,11 +18,11 @@
// the 'dynamic' type.
////////////////////////////////////////////////////////////////////////////////
-/*member: _assumeDynamic:[null|subclass=Object]*/
+/*member: _assumeDynamic:[null|subclass=Object|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-_assumeDynamic(/*[null|subclass=Object]*/ o) => o;
+_assumeDynamic(/*[null|subclass=Object|powerset=1]*/ o) => o;
-/*member: assumeDynamic:[null]*/
+/*member: assumeDynamic:[null|powerset=1]*/
assumeDynamic() {
_assumeDynamic(0);
}
@@ -31,10 +31,10 @@
// As above but without the annotation.
////////////////////////////////////////////////////////////////////////////////
-/*member: _notAssumeDynamic:[exact=JSUInt31]*/
-_notAssumeDynamic(/*[exact=JSUInt31]*/ o) => o;
+/*member: _notAssumeDynamic:[exact=JSUInt31|powerset=0]*/
+_notAssumeDynamic(/*[exact=JSUInt31|powerset=0]*/ o) => o;
-/*member: notAssumeDynamic:[null]*/
+/*member: notAssumeDynamic:[null|powerset=1]*/
notAssumeDynamic() {
_notAssumeDynamic(0);
}
@@ -43,7 +43,7 @@
// No annotation is needed to trust return type annotation.
////////////////////////////////////////////////////////////////////////////////
-/*member: trustReturnTypeString:[exact=JSString]*/
+/*member: trustReturnTypeString:[exact=JSString|powerset=0]*/
String trustReturnTypeString() {
return _assumeDynamic(0);
}
@@ -52,10 +52,10 @@
// No annotation is needed to trust parameter type annotation.
////////////////////////////////////////////////////////////////////////////////
-/*member: _trustParameterTypeString:[null]*/
-_trustParameterTypeString(String /*[exact=JSString]*/ o) {}
+/*member: _trustParameterTypeString:[null|powerset=1]*/
+_trustParameterTypeString(String /*[exact=JSString|powerset=0]*/ o) {}
-/*member: trustParameterTypeString:[null]*/
+/*member: trustParameterTypeString:[null|powerset=1]*/
trustParameterTypeString() {
_trustParameterTypeString(_assumeDynamic(0));
}
diff --git a/pkg/compiler/test/inference/data/parameters_trust.dart b/pkg/compiler/test/inference/data/parameters_trust.dart
index 7420aed..610b3aa 100644
--- a/pkg/compiler/test/inference/data/parameters_trust.dart
+++ b/pkg/compiler/test/inference/data/parameters_trust.dart
@@ -4,7 +4,7 @@
import 'package:expect/expect.dart';
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
trustParameters();
}
@@ -13,19 +13,19 @@
// Test that we trust the explicit type of a parameter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _trustParameters:[exact=JSUInt31]*/
+/*member: _trustParameters:[exact=JSUInt31|powerset=0]*/
_trustParameters(
int
- /*spec.Union([exact=JSString], [exact=JSUInt31])*/
- /*prod.[exact=JSUInt31]*/
+ /*spec.Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ /*prod.[exact=JSUInt31|powerset=0]*/
i,
) {
return i;
}
-/*member: trustParameters:[null]*/
+/*member: trustParameters:[null|powerset=1]*/
trustParameters() {
dynamic f = _trustParameters;
Expect.equals(0, f(0));
- Expect.throws(/*[null|subclass=Object]*/ () => f('foo'));
+ Expect.throws(/*[null|subclass=Object|powerset=1]*/ () => f('foo'));
}
diff --git a/pkg/compiler/test/inference/data/postfix.dart b/pkg/compiler/test/inference/data/postfix.dart
index 4dd52f2..6c55d30 100644
--- a/pkg/compiler/test/inference/data/postfix.dart
+++ b/pkg/compiler/test/inference/data/postfix.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
localPostfixInc();
localPostfixDec();
@@ -18,146 +18,146 @@
// Postfix increment on local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: localPostfixInc:[exact=JSUInt31]*/
+/*member: localPostfixInc:[exact=JSUInt31|powerset=0]*/
localPostfixInc() {
var local;
if (local == null) {
local = 0;
}
- return local /*invoke: [exact=JSUInt31]*/ ++;
+ return local /*invoke: [exact=JSUInt31|powerset=0]*/ ++;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix decrement on local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: localPostfixDec:[exact=JSUInt31]*/
+/*member: localPostfixDec:[exact=JSUInt31|powerset=0]*/
localPostfixDec() {
var local;
if (local == null) {
local = 0;
}
- return local /*invoke: [exact=JSUInt31]*/ --;
+ return local /*invoke: [exact=JSUInt31|powerset=0]*/ --;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix increment on static field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _staticField1:[null|subclass=JSPositiveInt]*/
+/*member: _staticField1:[null|subclass=JSPositiveInt|powerset=1]*/
var _staticField1;
-/*member: staticFieldPostfixInc:[subclass=JSPositiveInt]*/
+/*member: staticFieldPostfixInc:[subclass=JSPositiveInt|powerset=0]*/
staticFieldPostfixInc() {
if (_staticField1 == null) {
_staticField1 = 0;
}
- return _staticField1 /*invoke: [null|subclass=JSPositiveInt]*/ ++;
+ return _staticField1 /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix decrement on static field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _staticField2:[null|subclass=JSInt]*/
+/*member: _staticField2:[null|subclass=JSInt|powerset=1]*/
var _staticField2;
-/*member: staticFieldPostfixDec:[subclass=JSInt]*/
+/*member: staticFieldPostfixDec:[subclass=JSInt|powerset=0]*/
staticFieldPostfixDec() {
if (_staticField2 == null) {
_staticField2 = 0;
}
- return _staticField2 /*invoke: [null|subclass=JSInt]*/ --;
+ return _staticField2 /*invoke: [null|subclass=JSInt|powerset=1]*/ --;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix increment on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field1:[null|subclass=JSPositiveInt]*/
+ /*member: Class1.field1:[null|subclass=JSPositiveInt|powerset=1]*/
var field1;
}
-/*member: instanceFieldPostfixInc:[subclass=JSPositiveInt]*/
+/*member: instanceFieldPostfixInc:[subclass=JSPositiveInt|powerset=0]*/
instanceFieldPostfixInc() {
var c = Class1();
- if (c. /*[exact=Class1]*/ field1 == null) {
- c. /*update: [exact=Class1]*/ field1 = 0;
+ if (c. /*[exact=Class1|powerset=0]*/ field1 == null) {
+ c. /*update: [exact=Class1|powerset=0]*/ field1 = 0;
}
return c
.
- /*[exact=Class1]*/
- /*update: [exact=Class1]*/
- field1 /*invoke: [null|subclass=JSPositiveInt]*/ ++;
+ /*[exact=Class1|powerset=0]*/
+ /*update: [exact=Class1|powerset=0]*/
+ field1 /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix decrement on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field2:[null|subclass=JSInt]*/
+ /*member: Class2.field2:[null|subclass=JSInt|powerset=1]*/
var field2;
}
-/*member: instanceFieldPostfixDec:[subclass=JSInt]*/
+/*member: instanceFieldPostfixDec:[subclass=JSInt|powerset=0]*/
instanceFieldPostfixDec() {
var c = Class2();
- if (c. /*[exact=Class2]*/ field2 == null) {
- c. /*update: [exact=Class2]*/ field2 = 0;
+ if (c. /*[exact=Class2|powerset=0]*/ field2 == null) {
+ c. /*update: [exact=Class2|powerset=0]*/ field2 = 0;
}
return c
.
- /*[exact=Class2]*/
- /*update: [exact=Class2]*/
- field2 /*invoke: [null|subclass=JSInt]*/ --;
+ /*[exact=Class2|powerset=0]*/
+ /*update: [exact=Class2|powerset=0]*/
+ field2 /*invoke: [null|subclass=JSInt|powerset=1]*/ --;
}
////////////////////////////////////////////////////////////////////////////////
// Conditional postfix increment on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.field3:[null|subclass=JSPositiveInt]*/
+ /*member: Class3.field3:[null|subclass=JSPositiveInt|powerset=1]*/
var field3;
}
-/*member: conditionalInstanceFieldPostfixInc:[null|subclass=JSPositiveInt]*/
+/*member: conditionalInstanceFieldPostfixInc:[null|subclass=JSPositiveInt|powerset=1]*/
conditionalInstanceFieldPostfixInc() {
var c = Class3();
- if (c. /*[exact=Class3]*/ field3 == null) {
- c. /*update: [exact=Class3]*/ field3 = 0;
+ if (c. /*[exact=Class3|powerset=0]*/ field3 == null) {
+ c. /*update: [exact=Class3|powerset=0]*/ field3 = 0;
}
return c
?.
- /*[exact=Class3]*/
- /*update: [exact=Class3]*/
- field3 /*invoke: [null|subclass=JSPositiveInt]*/ ++;
+ /*[exact=Class3|powerset=0]*/
+ /*update: [exact=Class3|powerset=0]*/
+ field3 /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++;
}
////////////////////////////////////////////////////////////////////////////////
// Conditional postfix decrement on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- /*member: Class4.field4:[null|subclass=JSInt]*/
+ /*member: Class4.field4:[null|subclass=JSInt|powerset=1]*/
var field4;
}
-/*member: conditionalInstanceFieldPostfixDec:[null|subclass=JSInt]*/
+/*member: conditionalInstanceFieldPostfixDec:[null|subclass=JSInt|powerset=1]*/
conditionalInstanceFieldPostfixDec() {
var c = Class4();
- if (c. /*[exact=Class4]*/ field4 == null) {
- c. /*update: [exact=Class4]*/ field4 = 0;
+ if (c. /*[exact=Class4|powerset=0]*/ field4 == null) {
+ c. /*update: [exact=Class4|powerset=0]*/ field4 = 0;
}
return c
?.
- /*[exact=Class4]*/
- /*update: [exact=Class4]*/
- field4 /*invoke: [null|subclass=JSInt]*/ --;
+ /*[exact=Class4|powerset=0]*/
+ /*update: [exact=Class4|powerset=0]*/
+ field4 /*invoke: [null|subclass=JSInt|powerset=1]*/ --;
}
diff --git a/pkg/compiler/test/inference/data/postfix_prefix.dart b/pkg/compiler/test/inference/data/postfix_prefix.dart
index 67f1c92..8ae790a 100644
--- a/pkg/compiler/test/inference/data/postfix_prefix.dart
+++ b/pkg/compiler/test/inference/data/postfix_prefix.dart
@@ -2,121 +2,128 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: index:[empty]*/
+/*member: index:[empty|powerset=0]*/
dynamic get index => throw '';
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.foo:Value([exact=JSString], value: "string")*/
+ /*member: A.foo:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
get foo => 'string';
- set foo(/*[subclass=JSNumber]*/ value) {}
+ set foo(/*[subclass=JSNumber|powerset=0]*/ value) {}
- /*member: A.[]:Value([exact=JSString], value: "string")*/
- operator [](/*[empty]*/ index) => 'string';
+ /*member: A.[]:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
+ operator [](/*[empty|powerset=0]*/ index) => 'string';
- /*member: A.[]=:[null]*/
- operator []=(/*[empty]*/ index, /*[subclass=JSNumber]*/ value) {}
+ /*member: A.[]=:[null|powerset=1]*/
+ operator []=(
+ /*[empty|powerset=0]*/ index,
+ /*[subclass=JSNumber|powerset=0]*/ value,
+ ) {}
- /*member: A.returnDynamic1:Union([exact=JSString], [exact=JSUInt31])*/
- returnDynamic1() => /*[subclass=A]*/ /*update: [subclass=A]*/
- foo /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
+ /*member: A.returnDynamic1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ returnDynamic1() => /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/
+ foo /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ --;
- /*member: A.returnNum1:[subclass=JSNumber]*/
- returnNum1() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/
- -- /*[subclass=A]*/ /*update: [subclass=A]*/ foo;
+ /*member: A.returnNum1:[subclass=JSNumber|powerset=0]*/
+ returnNum1() => /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ -- /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ foo;
- /*member: A.returnNum2:[subclass=JSNumber]*/
- returnNum2() => /*[subclass=A]*/ /*update: [subclass=A]*/
- foo /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -= 42;
-
- /*member: A.returnDynamic2:Union([exact=JSString], [exact=JSUInt31])*/
- returnDynamic2() =>
- this /*[subclass=A]*/ /*update: [subclass=A]*/ [index] /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ --;
-
- /*member: A.returnNum3:[subclass=JSNumber]*/
- returnNum3() => /*invoke: Union([exact=JSString], [exact=JSUInt31])*/
- --this /*[subclass=A]*/ /*update: [subclass=A]*/ [index];
-
- /*member: A.returnNum4:[subclass=JSNumber]*/
- returnNum4() =>
- this /*[subclass=A]*/ /*update: [subclass=A]*/ [index] /*invoke: Union([exact=JSString], [exact=JSUInt31])*/ -=
+ /*member: A.returnNum2:[subclass=JSNumber|powerset=0]*/
+ returnNum2() => /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/
+ foo /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ -=
42;
- /*member: A.returnEmpty3:[empty]*/
+ /*member: A.returnDynamic2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ returnDynamic2() =>
+ this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [index] /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ --;
+
+ /*member: A.returnNum3:[subclass=JSNumber|powerset=0]*/
+ returnNum3() => /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ --this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [index];
+
+ /*member: A.returnNum4:[subclass=JSNumber|powerset=0]*/
+ returnNum4() =>
+ this /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ [index] /*invoke: Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ -=
+ 42;
+
+ /*member: A.returnEmpty3:[empty|powerset=0]*/
returnEmpty3() {
dynamic a = this;
return a
- . /*[subclass=A]*/ /*update: [subclass=A]*/ bar /*invoke: [empty]*/ --;
+ . /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ bar /*invoke: [empty|powerset=0]*/ --;
}
- /*member: A.returnEmpty1:[empty]*/
+ /*member: A.returnEmpty1:[empty|powerset=0]*/
returnEmpty1() {
dynamic a = this;
- return /*invoke: [empty]*/ --a
- . /*[subclass=A]*/ /*update: [subclass=A]*/ bar;
+ return /*invoke: [empty|powerset=0]*/ --a
+ . /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ bar;
}
- /*member: A.returnEmpty2:[empty]*/
+ /*member: A.returnEmpty2:[empty|powerset=0]*/
returnEmpty2() {
dynamic a = this;
- return a. /*[subclass=A]*/ /*update: [subclass=A]*/ bar /*invoke: [empty]*/ -=
+ return a. /*[subclass=A|powerset=0]*/ /*update: [subclass=A|powerset=0]*/ bar /*invoke: [empty|powerset=0]*/ -=
42;
}
}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {
- /*member: B.foo:[exact=JSUInt31]*/
+ /*member: B.foo:[exact=JSUInt31|powerset=0]*/
get foo => 42;
- /*member: B.[]:[exact=JSUInt31]*/
- operator [](/*[empty]*/ index) => 42;
+ /*member: B.[]:[exact=JSUInt31|powerset=0]*/
+ operator [](/*[empty|powerset=0]*/ index) => 42;
- /*member: B.returnString1:Value([exact=JSString], value: "string")*/
+ /*member: B.returnString1:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
returnString1() =>
- super.foo /*invoke: Value([exact=JSString], value: "string")*/ --;
+ super
+ .foo /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ --;
- /*member: B.returnDynamic1:[empty]*/
+ /*member: B.returnDynamic1:[empty|powerset=0]*/
returnDynamic1() =>
- /*invoke: Value([exact=JSString], value: "string")*/
+ /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
--super.foo;
- /*member: B.returnDynamic2:[empty]*/
+ /*member: B.returnDynamic2:[empty|powerset=0]*/
returnDynamic2() =>
- super.foo /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+ super.foo /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ -=
+ 42;
- /*member: B.returnString2:Value([exact=JSString], value: "string")*/
+ /*member: B.returnString2:Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
returnString2() =>
- super[index] /*invoke: Value([exact=JSString], value: "string")*/ --;
+ super[index] /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ --;
- /*member: B.returnDynamic3:[empty]*/
+ /*member: B.returnDynamic3:[empty|powerset=0]*/
returnDynamic3() =>
- /*invoke: Value([exact=JSString], value: "string")*/
+ /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/
--super[index];
- /*member: B.returnDynamic4:[empty]*/
+ /*member: B.returnDynamic4:[empty|powerset=0]*/
returnDynamic4() =>
- super[index] /*invoke: Value([exact=JSString], value: "string")*/ -= 42;
+ super[index] /*invoke: Value([exact=JSString|powerset=0], value: "string", powerset: 0)*/ -=
+ 42;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
A()
- .. /*invoke: [exact=A]*/ returnNum1()
- .. /*invoke: [exact=A]*/ returnNum2()
- .. /*invoke: [exact=A]*/ returnNum3()
- .. /*invoke: [exact=A]*/ returnNum4()
- .. /*invoke: [exact=A]*/ returnDynamic1()
- .. /*invoke: [exact=A]*/ returnDynamic2()
- .. /*invoke: [exact=A]*/ returnEmpty1()
- .. /*invoke: [exact=A]*/ returnEmpty2()
- .. /*invoke: [exact=A]*/ returnEmpty3();
+ .. /*invoke: [exact=A|powerset=0]*/ returnNum1()
+ .. /*invoke: [exact=A|powerset=0]*/ returnNum2()
+ .. /*invoke: [exact=A|powerset=0]*/ returnNum3()
+ .. /*invoke: [exact=A|powerset=0]*/ returnNum4()
+ .. /*invoke: [exact=A|powerset=0]*/ returnDynamic1()
+ .. /*invoke: [exact=A|powerset=0]*/ returnDynamic2()
+ .. /*invoke: [exact=A|powerset=0]*/ returnEmpty1()
+ .. /*invoke: [exact=A|powerset=0]*/ returnEmpty2()
+ .. /*invoke: [exact=A|powerset=0]*/ returnEmpty3();
B()
- .. /*invoke: [exact=B]*/ returnString1()
- .. /*invoke: [exact=B]*/ returnString2()
- .. /*invoke: [exact=B]*/ returnDynamic1()
- .. /*invoke: [exact=B]*/ returnDynamic2()
- .. /*invoke: [exact=B]*/ returnDynamic3()
- .. /*invoke: [exact=B]*/ returnDynamic4();
+ .. /*invoke: [exact=B|powerset=0]*/ returnString1()
+ .. /*invoke: [exact=B|powerset=0]*/ returnString2()
+ .. /*invoke: [exact=B|powerset=0]*/ returnDynamic1()
+ .. /*invoke: [exact=B|powerset=0]*/ returnDynamic2()
+ .. /*invoke: [exact=B|powerset=0]*/ returnDynamic3()
+ .. /*invoke: [exact=B|powerset=0]*/ returnDynamic4();
}
diff --git a/pkg/compiler/test/inference/data/prefix.dart b/pkg/compiler/test/inference/data/prefix.dart
index a988ffd..5d82850 100644
--- a/pkg/compiler/test/inference/data/prefix.dart
+++ b/pkg/compiler/test/inference/data/prefix.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
localPrefixInc();
localPrefixDec();
@@ -18,78 +18,78 @@
// Prefix increment on local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: localPrefixInc:[subclass=JSUInt32]*/
+/*member: localPrefixInc:[subclass=JSUInt32|powerset=0]*/
localPrefixInc() {
var local;
if (local == null) {
local = 0;
}
- return /*invoke: [exact=JSUInt31]*/ ++local;
+ return /*invoke: [exact=JSUInt31|powerset=0]*/ ++local;
}
////////////////////////////////////////////////////////////////////////////////
// Prefix decrement on local variable.
////////////////////////////////////////////////////////////////////////////////
-/*member: localPrefixDec:[subclass=JSInt]*/
+/*member: localPrefixDec:[subclass=JSInt|powerset=0]*/
localPrefixDec() {
var local;
if (local == null) {
local = 0;
}
- return /*invoke: [exact=JSUInt31]*/ --local;
+ return /*invoke: [exact=JSUInt31|powerset=0]*/ --local;
}
////////////////////////////////////////////////////////////////////////////////
// Prefix increment on static field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _staticField1:[null|subclass=JSPositiveInt]*/
+/*member: _staticField1:[null|subclass=JSPositiveInt|powerset=1]*/
var _staticField1;
-/*member: staticFieldPrefixInc:[subclass=JSPositiveInt]*/
+/*member: staticFieldPrefixInc:[subclass=JSPositiveInt|powerset=0]*/
staticFieldPrefixInc() {
if (_staticField1 == null) {
_staticField1 = 0;
}
- return /*invoke: [null|subclass=JSPositiveInt]*/ ++_staticField1;
+ return /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++_staticField1;
}
////////////////////////////////////////////////////////////////////////////////
// Prefix decrement on static field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _staticField2:[null|subclass=JSInt]*/
+/*member: _staticField2:[null|subclass=JSInt|powerset=1]*/
var _staticField2;
-/*member: staticFieldPrefixDec:[subclass=JSInt]*/
+/*member: staticFieldPrefixDec:[subclass=JSInt|powerset=0]*/
staticFieldPrefixDec() {
if (_staticField2 == null) {
_staticField2 = 0;
}
- return /*invoke: [null|subclass=JSInt]*/ --_staticField2;
+ return /*invoke: [null|subclass=JSInt|powerset=1]*/ --_staticField2;
}
////////////////////////////////////////////////////////////////////////////////
// Prefix increment on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field1:[null|subclass=JSPositiveInt]*/
+ /*member: Class1.field1:[null|subclass=JSPositiveInt|powerset=1]*/
var field1;
}
-/*member: instanceFieldPrefixInc:[subclass=JSPositiveInt]*/
+/*member: instanceFieldPrefixInc:[subclass=JSPositiveInt|powerset=0]*/
instanceFieldPrefixInc() {
var c = Class1();
- if (c. /*[exact=Class1]*/ field1 == null) {
- c. /*update: [exact=Class1]*/ field1 = 0;
+ if (c. /*[exact=Class1|powerset=0]*/ field1 == null) {
+ c. /*update: [exact=Class1|powerset=0]*/ field1 = 0;
}
- return /*invoke: [null|subclass=JSPositiveInt]*/ ++c
+ return /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++c
.
- /*[exact=Class1]*/
- /*update: [exact=Class1]*/
+ /*[exact=Class1|powerset=0]*/
+ /*update: [exact=Class1|powerset=0]*/
field1;
}
@@ -97,22 +97,22 @@
// Prefix decrement on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field2:[null|subclass=JSInt]*/
+ /*member: Class2.field2:[null|subclass=JSInt|powerset=1]*/
var field2;
}
-/*member: instanceFieldPrefixDec:[subclass=JSInt]*/
+/*member: instanceFieldPrefixDec:[subclass=JSInt|powerset=0]*/
instanceFieldPrefixDec() {
var c = Class2();
- if (c. /*[exact=Class2]*/ field2 == null) {
- c. /*update: [exact=Class2]*/ field2 = 0;
+ if (c. /*[exact=Class2|powerset=0]*/ field2 == null) {
+ c. /*update: [exact=Class2|powerset=0]*/ field2 = 0;
}
- return /*invoke: [null|subclass=JSInt]*/ --c
+ return /*invoke: [null|subclass=JSInt|powerset=1]*/ --c
.
- /*[exact=Class2]*/
- /*update: [exact=Class2]*/
+ /*[exact=Class2|powerset=0]*/
+ /*update: [exact=Class2|powerset=0]*/
field2;
}
@@ -120,22 +120,22 @@
// Conditional prefix increment on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.field3:[null|subclass=JSPositiveInt]*/
+ /*member: Class3.field3:[null|subclass=JSPositiveInt|powerset=1]*/
var field3;
}
-/*member: conditionalInstanceFieldPrefixInc:[null|subclass=JSPositiveInt]*/
+/*member: conditionalInstanceFieldPrefixInc:[null|subclass=JSPositiveInt|powerset=1]*/
conditionalInstanceFieldPrefixInc() {
var c = Class3();
- if (c. /*[exact=Class3]*/ field3 == null) {
- c. /*update: [exact=Class3]*/ field3 = 0;
+ if (c. /*[exact=Class3|powerset=0]*/ field3 == null) {
+ c. /*update: [exact=Class3|powerset=0]*/ field3 = 0;
}
- return /*invoke: [null|subclass=JSPositiveInt]*/ ++c
+ return /*invoke: [null|subclass=JSPositiveInt|powerset=1]*/ ++c
?.
- /*[exact=Class3]*/
- /*update: [exact=Class3]*/
+ /*[exact=Class3|powerset=0]*/
+ /*update: [exact=Class3|powerset=0]*/
field3;
}
@@ -143,21 +143,21 @@
// Conditional prefix decrement on instance field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- /*member: Class4.field4:[null|subclass=JSInt]*/
+ /*member: Class4.field4:[null|subclass=JSInt|powerset=1]*/
var field4;
}
-/*member: conditionalInstanceFieldPrefixDec:[null|subclass=JSInt]*/
+/*member: conditionalInstanceFieldPrefixDec:[null|subclass=JSInt|powerset=1]*/
conditionalInstanceFieldPrefixDec() {
var c = Class4();
- if (c. /*[exact=Class4]*/ field4 == null) {
- c. /*update: [exact=Class4]*/ field4 = 0;
+ if (c. /*[exact=Class4|powerset=0]*/ field4 == null) {
+ c. /*update: [exact=Class4|powerset=0]*/ field4 = 0;
}
- return /*invoke: [null|subclass=JSInt]*/ --c
+ return /*invoke: [null|subclass=JSInt|powerset=1]*/ --c
?.
- /*[exact=Class4]*/
- /*update: [exact=Class4]*/
+ /*[exact=Class4|powerset=0]*/
+ /*update: [exact=Class4|powerset=0]*/
field4;
}
diff --git a/pkg/compiler/test/inference/data/record_1.dart b/pkg/compiler/test/inference/data/record_1.dart
index 41fb5cb..6c8bd92 100644
--- a/pkg/compiler/test/inference/data/record_1.dart
+++ b/pkg/compiler/test/inference/data/record_1.dart
@@ -2,37 +2,37 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
useRecord1();
useRecord2();
useRecord3();
}
-/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31], [exact=JSUInt31]])]*/
+/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/
(num, num) getRecord1() => (1, 1);
-/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/
+/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/
(bool, bool) getRecord2() => (true, false);
-/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Value([exact=JSString], value: "b")])]*/
+/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Value([exact=JSString|powerset=0], value: "b", powerset: 0)], powerset: 0)]*/
dynamic getRecord3() => ('a', 'b');
-/*member: useRecord1:[exact=JSUInt31]*/
+/*member: useRecord1:[exact=JSUInt31|powerset=0]*/
useRecord1() {
final r = getRecord1();
return r
- . /*[Record(RecordShape(2), [[exact=JSUInt31], [exact=JSUInt31]])]*/ $1;
+ . /*[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/ $1;
}
-/*member: useRecord2:Value([exact=JSBool], value: false)*/
+/*member: useRecord2:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
useRecord2() {
final r = getRecord2();
return r
- . /*[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/ $2;
+ . /*[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/ $2;
}
-/*member: useRecord3:Value([exact=JSString], value: "b")*/
+/*member: useRecord3:Value([exact=JSString|powerset=0], value: "b", powerset: 0)*/
useRecord3() {
final r = getRecord3();
return r
- . /*[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Value([exact=JSString], value: "b")])]*/ $2;
+ . /*[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Value([exact=JSString|powerset=0], value: "b", powerset: 0)], powerset: 0)]*/ $2;
}
diff --git a/pkg/compiler/test/inference/data/record_2.dart b/pkg/compiler/test/inference/data/record_2.dart
index 2d6b5d1..22594d6 100644
--- a/pkg/compiler/test/inference/data/record_2.dart
+++ b/pkg/compiler/test/inference/data/record_2.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
useRecord1(true);
useRecord1(false);
@@ -16,48 +16,48 @@
useRecord5(false);
}
-/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31], [exact=JSUInt31]])]*/
+/*member: getRecord1:[Record(RecordShape(2), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/
(num, num) getRecord1() => (1, 1);
-/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/
+/*member: getRecord2:[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/
(bool, bool) getRecord2() => (true, false);
-/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Container([exact=JSUnmodifiableArray], element: [empty], length: 0)])]*/
+/*member: getRecord3:[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Container([exact=JSUnmodifiableArray|powerset=0], element: [empty|powerset=0], length: 0, powerset: 0)], powerset: 0)]*/
dynamic getRecord3() => ('a', const []);
-/*member: getRecord4:[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSUInt31]), Union([exact=JSBool], [exact=JSUInt31])])]*/
-dynamic getRecord4(bool /*[exact=JSBool]*/ b) =>
+/*member: getRecord4:[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/
+dynamic getRecord4(bool /*[exact=JSBool|powerset=0]*/ b) =>
b ? getRecord1() : getRecord2();
-/*member: useRecord1:Union([exact=JSBool], [exact=JSUInt31])*/
-useRecord1(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord1:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecord1(bool /*[exact=JSBool|powerset=0]*/ b) {
final r = getRecord4(b);
return r
- . /*[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSUInt31]), Union([exact=JSBool], [exact=JSUInt31])])]*/ $2;
+ . /*[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/ $2;
}
-/*member: useRecord2:Value([exact=JSBool], value: false)*/
-useRecord2(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord2:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
+useRecord2(bool /*[exact=JSBool|powerset=0]*/ b) {
final r = b ? getRecord2() : getRecord2();
return r
- . /*[Record(RecordShape(2), [Value([exact=JSBool], value: true), Value([exact=JSBool], value: false)])]*/ $2;
+ . /*[Record(RecordShape(2), [Value([exact=JSBool|powerset=0], value: true, powerset: 0), Value([exact=JSBool|powerset=0], value: false, powerset: 0)], powerset: 0)]*/ $2;
}
-/*member: useRecord3:Union([exact=JSBool], [exact=JSUInt31])*/
-useRecord3(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord3:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecord3(bool /*[exact=JSBool|powerset=0]*/ b) {
final r = b ? getRecord2() : getRecord1();
return r
- . /*[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSUInt31]), Union([exact=JSBool], [exact=JSUInt31])])]*/ $2;
+ . /*[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/ $2;
}
-/*member: useRecord4:Union([exact=JSBool], [exact=JSUnmodifiableArray])*/
-useRecord4(bool /*[exact=JSBool]*/ b) {
+/*member: useRecord4:Union([exact=JSBool|powerset=0], [exact=JSUnmodifiableArray|powerset=0], powerset: 0)*/
+useRecord4(bool /*[exact=JSBool|powerset=0]*/ b) {
final r = b ? getRecord2() : getRecord3();
return r
- . /*[Record(RecordShape(2), [Union([exact=JSBool], [exact=JSString]), Union([exact=JSBool], [exact=JSUnmodifiableArray])])]*/ $2;
+ . /*[Record(RecordShape(2), [Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0), Union([exact=JSBool|powerset=0], [exact=JSUnmodifiableArray|powerset=0], powerset: 0)], powerset: 0)]*/ $2;
}
-/*member: useRecord5:Union([exact=JSString], [exact=JSUInt31])*/
-useRecord5(bool /*[exact=JSBool]*/ b) {
- final c = /*[Record(RecordShape(2), [Value([exact=JSString], value: "a"), Value([exact=JSString], value: "b")])]*/
+/*member: useRecord5:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecord5(bool /*[exact=JSBool|powerset=0]*/ b) {
+ final c = /*[Record(RecordShape(2), [Value([exact=JSString|powerset=0], value: "a", powerset: 0), Value([exact=JSString|powerset=0], value: "b", powerset: 0)], powerset: 0)]*/
() => ('a', 'b');
return (b ? c() : (3, 4))
- . /*[Record(RecordShape(2), [Union([exact=JSString], [exact=JSUInt31]), Union([exact=JSString], [exact=JSUInt31])])]*/ $1;
+ . /*[Record(RecordShape(2), [Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0), Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)], powerset: 0)]*/ $1;
}
diff --git a/pkg/compiler/test/inference/data/record_3.dart b/pkg/compiler/test/inference/data/record_3.dart
index d38a6fc..c9ac5e0 100644
--- a/pkg/compiler/test/inference/data/record_3.dart
+++ b/pkg/compiler/test/inference/data/record_3.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
useRecords1(true);
useRecords1(false);
@@ -20,40 +20,43 @@
useRecords7(false);
}
-/*member: getRecord1:[Record(RecordShape(3), [[exact=JSUInt31], [exact=JSUInt31], [exact=JSUInt31]])]*/
+/*member: getRecord1:[Record(RecordShape(3), [[exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0], [exact=JSUInt31|powerset=0]], powerset: 0)]*/
getRecord1() => (1, 2, 3);
-/*member: getRecord2:[Record(RecordShape(1), [Value([exact=JSString], value: "a")])]*/
+/*member: getRecord2:[Record(RecordShape(1), [Value([exact=JSString|powerset=0], value: "a", powerset: 0)], powerset: 0)]*/
getRecord2() => ('a',);
-/*member: getRecord3:[Record(RecordShape(0, {age, name}), [[exact=JSUInt31], Value([exact=JSString], value: "Alice")])]*/
+/*member: getRecord3:[Record(RecordShape(0, {age, name}), [[exact=JSUInt31|powerset=0], Value([exact=JSString|powerset=0], value: "Alice", powerset: 0)], powerset: 0)]*/
getRecord3() => (name: 'Alice', age: 28);
-/*member: getRecord4:[Record(RecordShape(0, {height, name}), [[exact=JSUInt31], Value([exact=JSString], value: "Bob")])]*/
+/*member: getRecord4:[Record(RecordShape(0, {height, name}), [[exact=JSUInt31|powerset=0], Value([exact=JSString|powerset=0], value: "Bob", powerset: 0)], powerset: 0)]*/
getRecord4() => (name: 'Bob', height: 28);
-/*member: getUnion:Union([exact=JSString], [exact=JSUInt31])*/
-getUnion(bool /*[exact=JSBool]*/ b) => b ? 3 : 'a';
+/*member: getUnion:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+getUnion(bool /*[exact=JSBool|powerset=0]*/ b) => b ? 3 : 'a';
-/*member: useRecords1:Union([exact=JSString], [exact=JSUInt31])*/
-useRecords1(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+useRecords1(bool /*[exact=JSBool|powerset=0]*/ b) {
return (b ? getRecord1() : getRecord2())
- . /*Union([exact=_Record_1], [exact=_Record_3])*/ $1;
+ . /*Union([exact=_Record_1|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/ $1;
}
-/*member: useRecords2:Union([exact=_Record_1], [exact=_Record_3])*/
-useRecords2(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords2:Union([exact=_Record_1|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/
+useRecords2(bool /*[exact=JSBool|powerset=0]*/ b) {
return b ? getRecord1() : getRecord2();
}
-/*member: useRecords3:Union([exact=_Record_1], [exact=_Record_2_age_name])*/
-useRecords3(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords3:Union([exact=_Record_1|powerset=0], [exact=_Record_2_age_name|powerset=0], powerset: 0)*/
+useRecords3(bool /*[exact=JSBool|powerset=0]*/ b) {
return b ? getRecord2() : getRecord3();
}
-/*member: useRecords4:Union([exact=_Record_2_age_name], [exact=_Record_3])*/
-useRecords4(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords4:Union([exact=_Record_2_age_name|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/
+useRecords4(bool /*[exact=JSBool|powerset=0]*/ b) {
return b ? getRecord1() : getRecord3();
}
-/*member: useRecords5:Union([exact=_Record_1], [exact=_Record_2_age_name], [exact=_Record_3])*/
-useRecords5(bool /*[exact=JSBool]*/ b1, bool /*[exact=JSBool]*/ b2) {
+/*member: useRecords5:Union([exact=_Record_1|powerset=0], [exact=_Record_2_age_name|powerset=0], [exact=_Record_3|powerset=0], powerset: 0)*/
+useRecords5(
+ bool /*[exact=JSBool|powerset=0]*/ b1,
+ bool /*[exact=JSBool|powerset=0]*/ b2,
+) {
return b1
? getRecord2()
: b2
@@ -61,12 +64,12 @@
: getRecord1();
}
-/*member: useRecords6:Union([exact=_Record_2_age_name], [exact=_Record_2_height_name])*/
-useRecords6(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords6:Union([exact=_Record_2_age_name|powerset=0], [exact=_Record_2_height_name|powerset=0], powerset: 0)*/
+useRecords6(bool /*[exact=JSBool|powerset=0]*/ b) {
return b ? getRecord3() : getRecord4();
}
-/*member: useRecords7:Union([exact=JSString], [exact=JSUInt31], [exact=_Record_1])*/
-useRecords7(bool /*[exact=JSBool]*/ b) {
+/*member: useRecords7:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], [exact=_Record_1|powerset=0], powerset: 0)*/
+useRecords7(bool /*[exact=JSBool|powerset=0]*/ b) {
return b ? getUnion(b) : getRecord2();
}
diff --git a/pkg/compiler/test/inference/data/record_4.dart b/pkg/compiler/test/inference/data/record_4.dart
index 22c2f7c..293839c 100644
--- a/pkg/compiler/test/inference/data/record_4.dart
+++ b/pkg/compiler/test/inference/data/record_4.dart
@@ -1,29 +1,29 @@
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
testList();
testClosure1();
}
-/*member: testList:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/
+/*member: testList:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/
testList() {
dynamic list = [];
final rec = (list, 3);
final myList =
- rec. /*[Record(RecordShape(2), [Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null), [exact=JSUInt31]])]*/ $1;
+ rec. /*[Record(RecordShape(2), [Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0), [exact=JSUInt31|powerset=0]], powerset: 0)]*/ $1;
myList
- . /*invoke: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: null)*/ add(
+ . /*invoke: Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: null, powerset: 0)*/ add(
1,
);
return list;
}
-/*member: testClosure1:Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2)*/
+/*member: testClosure1:Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0)*/
testClosure1() {
return getRecord()
- . /*[Record(RecordShape(2), [Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2), [exact=JSUInt31]])]*/ $1;
+ . /*[Record(RecordShape(2), [Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0), [exact=JSUInt31|powerset=0]], powerset: 0)]*/ $1;
}
-/*member: getRecord:[Record(RecordShape(2), [Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 2), [exact=JSUInt31]])]*/
+/*member: getRecord:[Record(RecordShape(2), [Container([exact=JSExtendableArray|powerset=0], element: [exact=JSUInt31|powerset=0], length: 2, powerset: 0), [exact=JSUInt31|powerset=0]], powerset: 0)]*/
getRecord() {
return ([1, 2], 3);
}
diff --git a/pkg/compiler/test/inference/data/redirecting_factory.dart b/pkg/compiler/test/inference/data/redirecting_factory.dart
index e19418a..817cd36 100644
--- a/pkg/compiler/test/inference/data/redirecting_factory.dart
+++ b/pkg/compiler/test/inference/data/redirecting_factory.dart
@@ -3,16 +3,16 @@
// BSD-style license that can be found in the LICENSE file.
class B implements A {
- /*member: B.foo:[exact=B]*/
- B.foo([int? /*[null]*/ x]);
+ /*member: B.foo:[exact=B|powerset=0]*/
+ B.foo([int? /*[null|powerset=1]*/ x]);
}
class A {
- /*member: A._#foo#tearOff:[exact=B]*/
- factory A.foo([int /*[null]*/ x]) = B.foo;
+ /*member: A._#foo#tearOff:[exact=B|powerset=0]*/
+ factory A.foo([int /*[null|powerset=1]*/ x]) = B.foo;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
void main() {
final f = A.foo;
f();
diff --git a/pkg/compiler/test/inference/data/refine_captured_locals.dart b/pkg/compiler/test/inference/data/refine_captured_locals.dart
index 466cd04..6eba60d 100644
--- a/pkg/compiler/test/inference/data/refine_captured_locals.dart
+++ b/pkg/compiler/test/inference/data/refine_captured_locals.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
refineBeforeCapture();
refineAfterCapture();
@@ -14,23 +14,23 @@
// Refine a local before it has been captured.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.method1:[null]*/
+ /*member: Class1.method1:[null|powerset=1]*/
method1() {}
}
-/*member: _refineBeforeCapture:[exact=Class1]*/
-_refineBeforeCapture(/*[null|exact=Class1]*/ o) {
- o. /*invoke: [null|exact=Class1]*/ method1();
- o. /*invoke: [exact=Class1]*/ method1();
+/*member: _refineBeforeCapture:[exact=Class1|powerset=0]*/
+_refineBeforeCapture(/*[null|exact=Class1|powerset=1]*/ o) {
+ o. /*invoke: [null|exact=Class1|powerset=1]*/ method1();
+ o. /*invoke: [exact=Class1|powerset=0]*/ method1();
- /*[exact=Class1]*/
+ /*[exact=Class1|powerset=0]*/
localFunction() => o;
return localFunction();
}
-/*member: refineBeforeCapture:[null]*/
+/*member: refineBeforeCapture:[null|powerset=1]*/
refineBeforeCapture() {
_refineBeforeCapture(new Class1());
_refineBeforeCapture(null);
@@ -40,27 +40,29 @@
// Refine a local after it has been captured.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.method3:[null]*/
+ /*member: Class3.method3:[null|powerset=1]*/
method3() {}
}
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {}
-/*member: _refineAfterCapture:Union([exact=Class3], [exact=Class4])*/
-_refineAfterCapture(/*Union([exact=Class3], [exact=Class4])*/ o) {
- /*Union([exact=Class3], [exact=Class4])*/
+/*member: _refineAfterCapture:Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/
+_refineAfterCapture(
+ /*Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ o,
+) {
+ /*Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/
localFunction() => o;
- o. /*invoke: Union([exact=Class3], [exact=Class4])*/ method3();
- o. /*invoke: Union([exact=Class3], [exact=Class4])*/ method3();
+ o. /*invoke: Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ method3();
+ o. /*invoke: Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ method3();
return localFunction();
}
-/*member: refineAfterCapture:[null]*/
+/*member: refineAfterCapture:[null|powerset=1]*/
refineAfterCapture() {
_refineAfterCapture(new Class3());
_refineAfterCapture(new Class4());
@@ -70,31 +72,33 @@
// Refine a local after it has been captured in a nested local function.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
class Class5 {
- /*member: Class5.method5:[null]*/
+ /*member: Class5.method5:[null|powerset=1]*/
method5() {}
}
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
class Class6 {}
-/*member: _refineAfterNestedCapture:Union([exact=Class5], [exact=Class6])*/
-_refineAfterNestedCapture(/*Union([exact=Class5], [exact=Class6])*/ o) {
- /*Union([exact=Class5], [exact=Class6])*/
+/*member: _refineAfterNestedCapture:Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/
+_refineAfterNestedCapture(
+ /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ o,
+) {
+ /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/
localFunction() {
- /*Union([exact=Class5], [exact=Class6])*/
+ /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/
nestedFunction() => o;
return nestedFunction();
}
- o. /*invoke: Union([exact=Class5], [exact=Class6])*/ method5();
- o. /*invoke: Union([exact=Class5], [exact=Class6])*/ method5();
+ o. /*invoke: Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ method5();
+ o. /*invoke: Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ method5();
return localFunction();
}
-/*member: refineAfterNestedCapture:[null]*/
+/*member: refineAfterNestedCapture:[null|powerset=1]*/
refineAfterNestedCapture() {
_refineAfterNestedCapture(new Class5());
_refineAfterNestedCapture(new Class6());
@@ -104,24 +108,28 @@
// Refine a local in a local function after it has been captured.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
class Class7 {
- /*member: Class7.method7:[null]*/
+ /*member: Class7.method7:[null|powerset=1]*/
method7() {}
}
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
class Class8 {}
-/*member: _refineAfterCaptureInNested:Union([exact=Class7], [exact=Class8])*/
-_refineAfterCaptureInNested(/*Union([exact=Class7], [exact=Class8])*/ o) {
- /*Union([exact=Class7], [exact=Class8])*/
- localFunction(/*Union([exact=Class7], [exact=Class8])*/ p) {
- /*Union([exact=Class7], [exact=Class8])*/
+/*member: _refineAfterCaptureInNested:Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/
+_refineAfterCaptureInNested(
+ /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ o,
+) {
+ /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/
+ localFunction(
+ /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ p,
+ ) {
+ /*Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/
nestedFunction() => p;
- p. /*invoke: Union([exact=Class7], [exact=Class8])*/ method7();
- p. /*invoke: Union([exact=Class7], [exact=Class8])*/ method7();
+ p. /*invoke: Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ method7();
+ p. /*invoke: Union([exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 0)*/ method7();
return nestedFunction();
}
@@ -129,7 +137,7 @@
return localFunction(o);
}
-/*member: refineAfterCaptureInNested:[null]*/
+/*member: refineAfterCaptureInNested:[null|powerset=1]*/
refineAfterCaptureInNested() {
_refineAfterCaptureInNested(new Class7());
_refineAfterCaptureInNested(new Class8());
diff --git a/pkg/compiler/test/inference/data/refine_locals.dart b/pkg/compiler/test/inference/data/refine_locals.dart
index 4e8d40d8..b732140 100644
--- a/pkg/compiler/test/inference/data/refine_locals.dart
+++ b/pkg/compiler/test/inference/data/refine_locals.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
refineToClass();
refineToClosure();
@@ -13,96 +13,98 @@
// accesses and updates.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.method0:[null]*/
+ /*member: Class1.method0:[null|powerset=1]*/
method0() {}
- /*member: Class1.method1:[null]*/
+ /*member: Class1.method1:[null|powerset=1]*/
method1() {}
- /*member: Class1.field0:[null|exact=JSUInt31]*/
+ /*member: Class1.field0:[null|exact=JSUInt31|powerset=1]*/
var field0;
- /*member: Class1.field1:[null|exact=JSUInt31]*/
+ /*member: Class1.field1:[null|exact=JSUInt31|powerset=1]*/
var field1;
}
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.method0:[null]*/
+ /*member: Class2.method0:[null|powerset=1]*/
method0() {}
- /*member: Class2.method2:[null]*/
+ /*member: Class2.method2:[null|powerset=1]*/
method2() {}
- /*member: Class2.field0:[null]*/
+ /*member: Class2.field0:[null|powerset=1]*/
var field0;
- /*member: Class2.field2:[null]*/
+ /*member: Class2.field2:[null|powerset=1]*/
var field2;
}
-/*member: _refineUnion:Union([exact=Class1], [exact=Class2])*/
-_refineUnion(/*Union(null, [exact=Class1], [exact=Class2])*/ o) {
- o. /*invoke: Union(null, [exact=Class1], [exact=Class2])*/ method0();
- o. /*invoke: Union([exact=Class1], [exact=Class2])*/ method1();
- o. /*invoke: Union([exact=Class1], [exact=Class2])*/ method2();
+/*member: _refineUnion:Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/
+_refineUnion(
+ /*Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ o,
+) {
+ o. /*invoke: Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/ method0();
+ o. /*invoke: Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/ method1();
+ o. /*invoke: Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/ method2();
return o;
}
-/*member: _refineFromMethod:[exact=Class1]*/
-_refineFromMethod(/*[null|exact=Class1]*/ o) {
- o. /*invoke: [null|exact=Class1]*/ method0();
- o. /*invoke: [exact=Class1]*/ method1();
+/*member: _refineFromMethod:[exact=Class1|powerset=0]*/
+_refineFromMethod(/*[null|exact=Class1|powerset=1]*/ o) {
+ o. /*invoke: [null|exact=Class1|powerset=1]*/ method0();
+ o. /*invoke: [exact=Class1|powerset=0]*/ method1();
return o;
}
-/*member: _refineFromGetter:[exact=Class2]*/
-_refineFromGetter(/*[null|exact=Class2]*/ o) {
- o. /*[null|exact=Class2]*/ field0;
- o. /*[exact=Class2]*/ field2;
+/*member: _refineFromGetter:[exact=Class2|powerset=0]*/
+_refineFromGetter(/*[null|exact=Class2|powerset=1]*/ o) {
+ o. /*[null|exact=Class2|powerset=1]*/ field0;
+ o. /*[exact=Class2|powerset=0]*/ field2;
return o;
}
-/*member: _refineFromSetter:[exact=Class1]*/
-_refineFromSetter(/*[null|exact=Class1]*/ o) {
- o. /*update: [null|exact=Class1]*/ field0 = 0;
- o. /*update: [exact=Class1]*/ field1 = 0;
+/*member: _refineFromSetter:[exact=Class1|powerset=0]*/
+_refineFromSetter(/*[null|exact=Class1|powerset=1]*/ o) {
+ o. /*update: [null|exact=Class1|powerset=1]*/ field0 = 0;
+ o. /*update: [exact=Class1|powerset=0]*/ field1 = 0;
return o;
}
-/*member: _noRefinementNullAware:[null|exact=Class1]*/
-_noRefinementNullAware(/*[null|exact=Class1]*/ o) {
+/*member: _noRefinementNullAware:[null|exact=Class1|powerset=1]*/
+_noRefinementNullAware(/*[null|exact=Class1|powerset=1]*/ o) {
o
?.
- /*invoke: [exact=Class1]*/
+ /*invoke: [exact=Class1|powerset=0]*/
method1();
return o;
}
-/*member: _noRefinementNullSelectors:[exact=Class2]*/
-_noRefinementNullSelectors(/*[null|exact=Class2]*/ o) {
- o /*invoke: [null|exact=Class2]*/ == 2;
- o. /*[null|exact=Class2]*/ hashCode;
- o. /*[null|exact=Class2]*/ runtimeType;
- o. /*[null|exact=Class2]*/ toString;
- o. /*[null|exact=Class2]*/ noSuchMethod;
- o. /*invoke: [null|exact=Class2]*/ toString();
- o. /*invoke: [null|exact=Class2]*/ noSuchMethod(
+/*member: _noRefinementNullSelectors:[exact=Class2|powerset=0]*/
+_noRefinementNullSelectors(/*[null|exact=Class2|powerset=1]*/ o) {
+ o /*invoke: [null|exact=Class2|powerset=1]*/ == 2;
+ o. /*[null|exact=Class2|powerset=1]*/ hashCode;
+ o. /*[null|exact=Class2|powerset=1]*/ runtimeType;
+ o. /*[null|exact=Class2|powerset=1]*/ toString;
+ o. /*[null|exact=Class2|powerset=1]*/ noSuchMethod;
+ o. /*invoke: [null|exact=Class2|powerset=1]*/ toString();
+ o. /*invoke: [null|exact=Class2|powerset=1]*/ noSuchMethod(
null as dynamic,
); // assumed to throw.
- o. /*[exact=Class2]*/ toString;
+ o. /*[exact=Class2|powerset=0]*/ toString;
return o;
}
-/*member: _noRefinementUpdatedVariable:[null|exact=Class1]*/
-_noRefinementUpdatedVariable(/*[null|exact=Class1]*/ o) {
- (o = o). /*invoke: [null|exact=Class1]*/ method1();
- (o = o). /*invoke: [null|exact=Class1]*/ method0();
+/*member: _noRefinementUpdatedVariable:[null|exact=Class1|powerset=1]*/
+_noRefinementUpdatedVariable(/*[null|exact=Class1|powerset=1]*/ o) {
+ (o = o). /*invoke: [null|exact=Class1|powerset=1]*/ method1();
+ (o = o). /*invoke: [null|exact=Class1|powerset=1]*/ method0();
return o;
}
-/*member: _condition:Value([exact=JSBool], value: false)*/
+/*member: _condition:Value([exact=JSBool|powerset=0], value: false, powerset: 0)*/
@pragma('dart2js:assumeDynamic')
@pragma('dart2js:noInline')
get _condition => false;
-/*member: refineToClass:[null]*/
+/*member: refineToClass:[null|powerset=1]*/
refineToClass() {
var nullOrClass1 = _condition ? null : Class1();
var nullOrClass2 = _condition ? null : Class2();
@@ -121,21 +123,21 @@
// Refine the type of a local variable through a sequence of invocations.
////////////////////////////////////////////////////////////////////////////////
-/*member: _refineToClosureLocal:[subclass=Closure]*/
+/*member: _refineToClosureLocal:[subclass=Closure|powerset=0]*/
_refineToClosureLocal() {
- var f = /*[null]*/ ({/*[exact=JSUInt31]*/ a}) {};
+ var f = /*[null|powerset=1]*/ ({/*[exact=JSUInt31|powerset=0]*/ a}) {};
f(a: 0);
return f;
}
-/*member: _refineToClosureLocalCall:[subclass=Closure]*/
+/*member: _refineToClosureLocalCall:[subclass=Closure|powerset=0]*/
_refineToClosureLocalCall() {
- var f = /*[null]*/ ({/*[exact=JSUInt31]*/ b}) {};
+ var f = /*[null|powerset=1]*/ ({/*[exact=JSUInt31|powerset=0]*/ b}) {};
f.call(b: 0);
return f;
}
-/*member: refineToClosure:[null]*/
+/*member: refineToClosure:[null|powerset=1]*/
refineToClosure() {
_refineToClosureLocal();
_refineToClosureLocalCall();
diff --git a/pkg/compiler/test/inference/data/refine_order.dart b/pkg/compiler/test/inference/data/refine_order.dart
index b32dfd6..33175d2 100644
--- a/pkg/compiler/test/inference/data/refine_order.dart
+++ b/pkg/compiler/test/inference/data/refine_order.dart
@@ -2,16 +2,19 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class {
- /*member: Class.field:[exact=JSUInt31]*/
+ /*member: Class.field:[exact=JSUInt31|powerset=0]*/
var field = 42;
- /*member: Class.method:[null]*/
- method([/*[null|exact=JSUInt31]*/ a, /*[null|exact=JSUInt31]*/ b]) {}
+ /*member: Class.method:[null|powerset=1]*/
+ method([
+ /*[null|exact=JSUInt31|powerset=1]*/ a,
+ /*[null|exact=JSUInt31|powerset=1]*/ b,
+ ]) {}
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
Class();
statementOrderFieldAccess(null);
@@ -31,129 +34,133 @@
// Accesses in statements.
////////////////////////////////////////////////////////////////////////////////
-/*member: statementOrderFieldAccess:[null]*/
+/*member: statementOrderFieldAccess:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-statementOrderFieldAccess(/*[null|subclass=Object]*/ o) {
+statementOrderFieldAccess(/*[null|subclass=Object|powerset=1]*/ o) {
o.field;
- o. /*[subclass=Object]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Updates in statements.
////////////////////////////////////////////////////////////////////////////////
-/*member: statementOrderFieldUpdate:[null]*/
+/*member: statementOrderFieldUpdate:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-statementOrderFieldUpdate(/*[null|subclass=Object]*/ o) {
+statementOrderFieldUpdate(/*[null|subclass=Object|powerset=1]*/ o) {
o.field = 42;
- o. /*update: [subclass=Object]*/ field = 42;
+ o. /*update: [subclass=Object|powerset=0]*/ field = 42;
}
////////////////////////////////////////////////////////////////////////////////
// Invocations in statements.
////////////////////////////////////////////////////////////////////////////////
-/*member: statementOrderInvocation:[null]*/
+/*member: statementOrderInvocation:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-statementOrderInvocation(/*[null|subclass=Object]*/ o) {
+statementOrderInvocation(/*[null|subclass=Object|powerset=1]*/ o) {
o.method(null);
- o. /*invoke: [subclass=Object]*/ method(null);
+ o. /*invoke: [subclass=Object|powerset=0]*/ method(null);
}
////////////////////////////////////////////////////////////////////////////////
// Access in argument before method call.
////////////////////////////////////////////////////////////////////////////////
-/*member: receiverVsArgument:[null]*/
+/*member: receiverVsArgument:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-receiverVsArgument(/*[null|subclass=Object]*/ o) {
+receiverVsArgument(/*[null|subclass=Object|powerset=1]*/ o) {
// TODO(johnniwinther): The arguments should refine the receiver.
o.method(o.field);
- o. /*[subclass=Object]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Access in multiple arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: argumentsOrder:[null]*/
+/*member: argumentsOrder:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-argumentsOrder(/*[null|subclass=Object]*/ o) {
+argumentsOrder(/*[null|subclass=Object|powerset=1]*/ o) {
// TODO(johnniwinther): The arguments should refine the receiver.
- o.method(o.field, o. /*[subclass=Object]*/ field);
- o. /*[subclass=Object]*/ field;
+ o.method(o.field, o. /*[subclass=Object|powerset=0]*/ field);
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Access in both sides of an operator call.
////////////////////////////////////////////////////////////////////////////////
-/*member: operatorOrder:[null]*/
+/*member: operatorOrder:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-operatorOrder(/*[null|subclass=Object]*/ o) {
- o.field /*invoke: [exact=JSUInt31]*/ < o. /*[subclass=Object]*/ field;
- o. /*[subclass=Object]*/ field;
+operatorOrder(/*[null|subclass=Object|powerset=1]*/ o) {
+ o.field /*invoke: [exact=JSUInt31|powerset=0]*/ <
+ o. /*[subclass=Object|powerset=0]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Assign after access in right-hand side.
////////////////////////////////////////////////////////////////////////////////
-/*member: updateVsRhs:[null]*/
+/*member: updateVsRhs:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-updateVsRhs(/*[null|subclass=Object]*/ o) {
+updateVsRhs(/*[null|subclass=Object|powerset=1]*/ o) {
// TODO(johnniwinther): The right-hand side should refine the left-hand side
// receiver.
o.field = o.field;
- o. /*[subclass=Object]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Access in both sides of a logical or.
////////////////////////////////////////////////////////////////////////////////
-/*member: logicalOr:[null]*/
+/*member: logicalOr:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-logicalOr(/*[null|subclass=Object]*/ o) {
- o.field || o. /*[subclass=Object]*/ field;
- o. /*[subclass=Object]*/ field;
+logicalOr(/*[null|subclass=Object|powerset=1]*/ o) {
+ o.field || o. /*[subclass=Object|powerset=0]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Access in condition of a conditional expression.
////////////////////////////////////////////////////////////////////////////////
-/*member: conditionalCondition:[null]*/
+/*member: conditionalCondition:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-conditionalCondition(/*[null|subclass=Object]*/ o) {
- o.field ? o. /*[subclass=Object]*/ field : o. /*[subclass=Object]*/ field;
- o. /*[subclass=Object]*/ field;
+conditionalCondition(/*[null|subclass=Object|powerset=1]*/ o) {
+ o.field
+ ? o. /*[subclass=Object|powerset=0]*/ field
+ : o. /*[subclass=Object|powerset=0]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Access both branches of a conditional expression.
////////////////////////////////////////////////////////////////////////////////
-/*member: _#flag:[exact=_Cell]*/
-late bool /*Value([exact=JSBool], value: true)*/ /*update: [exact=_Cell]*/ flag;
+/*member: _#flag:[exact=_Cell|powerset=0]*/
+late bool /*Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/ /*update: [exact=_Cell|powerset=0]*/
+flag;
-/*member: conditionalBothBranches:[null]*/
+/*member: conditionalBothBranches:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-conditionalBothBranches(/*[null|subclass=Object]*/ o) {
+conditionalBothBranches(/*[null|subclass=Object|powerset=1]*/ o) {
// ignore: DEAD_CODE
(flag = true) ? o.field : o.field;
- o. /*[subclass=Object]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
////////////////////////////////////////////////////////////////////////////////
// Access in only one branch of a conditional expression.
////////////////////////////////////////////////////////////////////////////////
-/*member: conditionalOneBranchOnly:[null]*/
+/*member: conditionalOneBranchOnly:[null|powerset=1]*/
@pragma('dart2js:assumeDynamic')
-conditionalOneBranchOnly(/*[null|subclass=Object]*/ o) {
+conditionalOneBranchOnly(/*[null|subclass=Object|powerset=1]*/ o) {
// ignore: DEAD_CODE
(flag = true) ? o.field : null;
o.field;
- o. /*[subclass=Object]*/ field;
+ o. /*[subclass=Object|powerset=0]*/ field;
}
diff --git a/pkg/compiler/test/inference/data/return.dart b/pkg/compiler/test/inference/data/return.dart
index 01a574f..389ed5b 100644
--- a/pkg/compiler/test/inference/data/return.dart
+++ b/pkg/compiler/test/inference/data/return.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
return null;
}
diff --git a/pkg/compiler/test/inference/data/shift_right_unsigned.dart b/pkg/compiler/test/inference/data/shift_right_unsigned.dart
index 22132d2..2c05a40 100644
--- a/pkg/compiler/test/inference/data/shift_right_unsigned.dart
+++ b/pkg/compiler/test/inference/data/shift_right_unsigned.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
g1 = -1;
g1 = 2;
@@ -12,27 +12,27 @@
test4();
}
-/*member: g1:[subclass=JSInt]*/
+/*member: g1:[subclass=JSInt|powerset=0]*/
int g1 = 0;
-/*member: test1:[exact=JSUInt31]*/
+/*member: test1:[exact=JSUInt31|powerset=0]*/
test1() {
int a = 1234;
int b = 2;
- return a /*invoke: [exact=JSUInt31]*/ >>> b;
+ return a /*invoke: [exact=JSUInt31|powerset=0]*/ >>> b;
}
-/*member: test2:[subclass=JSUInt32]*/
+/*member: test2:[subclass=JSUInt32|powerset=0]*/
test2() {
- return g1 /*invoke: [subclass=JSInt]*/ >>> g1;
+ return g1 /*invoke: [subclass=JSInt|powerset=0]*/ >>> g1;
}
-/*member: test3:[subclass=JSUInt32]*/
+/*member: test3:[subclass=JSUInt32|powerset=0]*/
test3() {
- return g1 /*invoke: [subclass=JSInt]*/ >>> 1;
+ return g1 /*invoke: [subclass=JSInt|powerset=0]*/ >>> 1;
}
-/*member: test4:[exact=JSUInt31]*/
+/*member: test4:[exact=JSUInt31|powerset=0]*/
test4() {
- return 10 /*invoke: [exact=JSUInt31]*/ >>> g1;
+ return 10 /*invoke: [exact=JSUInt31|powerset=0]*/ >>> g1;
}
diff --git a/pkg/compiler/test/inference/data/simple.dart b/pkg/compiler/test/inference/data/simple.dart
index 47b8c18..04231a0 100644
--- a/pkg/compiler/test/inference/data/simple.dart
+++ b/pkg/compiler/test/inference/data/simple.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
zero();
one();
@@ -28,84 +28,84 @@
/// Return a zero integer literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: zero:[exact=JSUInt31]*/
+/*member: zero:[exact=JSUInt31|powerset=0]*/
zero() => 0;
////////////////////////////////////////////////////////////////////////////////
/// Return a positive integer literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: one:[exact=JSUInt31]*/
+/*member: one:[exact=JSUInt31|powerset=0]*/
one() => 1;
////////////////////////////////////////////////////////////////////////////////
/// Return a double literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: half:[exact=JSNumNotInt]*/
+/*member: half:[exact=JSNumNotInt|powerset=0]*/
half() => 0.5;
////////////////////////////////////////////////////////////////////////////////
/// Return an integer valued zero double literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: zeroPointZero:[exact=JSUInt31]*/
+/*member: zeroPointZero:[exact=JSUInt31|powerset=0]*/
zeroPointZero() => 0.0;
////////////////////////////////////////////////////////////////////////////////
/// Return an integer valued double literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: onePointZero:[exact=JSUInt31]*/
+/*member: onePointZero:[exact=JSUInt31|powerset=0]*/
onePointZero() => 1.0;
////////////////////////////////////////////////////////////////////////////////
/// Return a >31bit integer literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: large:[subclass=JSUInt32]*/
+/*member: large:[subclass=JSUInt32|powerset=0]*/
large() => 2147483648;
////////////////////////////////////////////////////////////////////////////////
/// Return a >32bit integer literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: huge:[subclass=JSPositiveInt]*/
+/*member: huge:[subclass=JSPositiveInt|powerset=0]*/
huge() => 4294967296;
////////////////////////////////////////////////////////////////////////////////
/// Return a negative integer literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: minusOne:[subclass=JSInt]*/
+/*member: minusOne:[subclass=JSInt|powerset=0]*/
minusOne() => -1;
////////////////////////////////////////////////////////////////////////////////
/// Return a negative double literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: minusHalf:[exact=JSNumNotInt]*/
+/*member: minusHalf:[exact=JSNumNotInt|powerset=0]*/
minusHalf() => -0.5;
////////////////////////////////////////////////////////////////////////////////
/// Return an empty string.
////////////////////////////////////////////////////////////////////////////////
-/*member: emptyString:Value([exact=JSString], value: "")*/
+/*member: emptyString:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
emptyString() => '';
////////////////////////////////////////////////////////////////////////////////
/// Return a non-empty string.
////////////////////////////////////////////////////////////////////////////////
-/*member: nonEmptyString:Value([exact=JSString], value: "foo")*/
+/*member: nonEmptyString:Value([exact=JSString|powerset=0], value: "foo", powerset: 0)*/
nonEmptyString() => 'foo';
////////////////////////////////////////////////////////////////////////////////
/// Return a string juxtaposition.
////////////////////////////////////////////////////////////////////////////////
-/*member: stringJuxtaposition:Value([exact=JSString], value: "foobar")*/
+/*member: stringJuxtaposition:Value([exact=JSString|powerset=0], value: "foobar", powerset: 0)*/
stringJuxtaposition() =>
'foo'
'bar';
@@ -114,29 +114,29 @@
/// Return a string constant interpolation.
////////////////////////////////////////////////////////////////////////////////
-/*member: stringConstantInterpolation:Value([exact=JSString], value: "foobar")*/
+/*member: stringConstantInterpolation:Value([exact=JSString|powerset=0], value: "foobar", powerset: 0)*/
stringConstantInterpolation() => 'foo${'bar'}';
////////////////////////////////////////////////////////////////////////////////
/// Return a string non-constant interpolation.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method1:[exact=JSBool]*/
-_method1(/*[exact=JSBool]*/ c) => c;
+/*member: _method1:[exact=JSBool|powerset=0]*/
+_method1(/*[exact=JSBool|powerset=0]*/ c) => c;
-/*member: stringNonConstantInterpolation:[exact=JSString]*/
+/*member: stringNonConstantInterpolation:[exact=JSString|powerset=0]*/
stringNonConstantInterpolation() => 'foo${_method1(true)}${_method1(false)}';
////////////////////////////////////////////////////////////////////////////////
/// Return a symbol literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: symbolLiteral:[exact=Symbol]*/
+/*member: symbolLiteral:[exact=Symbol|powerset=0]*/
symbolLiteral() => #main;
////////////////////////////////////////////////////////////////////////////////
/// Return a type literal.
////////////////////////////////////////////////////////////////////////////////
-/*member: typeLiteral:[exact=_Type]*/
+/*member: typeLiteral:[exact=_Type|powerset=0]*/
typeLiteral() => Object;
diff --git a/pkg/compiler/test/inference/data/static.dart b/pkg/compiler/test/inference/data/static.dart
index 5dcc120..cee7783 100644
--- a/pkg/compiler/test/inference/data/static.dart
+++ b/pkg/compiler/test/inference/data/static.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleStaticCall();
staticCallWithPositionalArguments1();
@@ -39,10 +39,10 @@
/// Call a static method that has a constant return value.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleStaticCall:[exact=JSUInt31]*/
+/*member: simpleStaticCall:[exact=JSUInt31|powerset=0]*/
simpleStaticCall() => _returnInt();
-/*member: _returnInt:[exact=JSUInt31]*/
+/*member: _returnInt:[exact=JSUInt31|powerset=0]*/
_returnInt() => 0;
////////////////////////////////////////////////////////////////////////////////
@@ -50,162 +50,168 @@
/// is returned.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithPositionalArguments1:[exact=JSUInt31]*/
+/*member: staticCallWithPositionalArguments1:[exact=JSUInt31|powerset=0]*/
staticCallWithPositionalArguments1() => _returnFirst(0, 0.5);
-/*member: _returnFirst:[exact=JSUInt31]*/
-_returnFirst(/*[exact=JSUInt31]*/ a, /*[exact=JSNumNotInt]*/ b) => a;
+/*member: _returnFirst:[exact=JSUInt31|powerset=0]*/
+_returnFirst(
+ /*[exact=JSUInt31|powerset=0]*/ a,
+ /*[exact=JSNumNotInt|powerset=0]*/ b,
+) => a;
////////////////////////////////////////////////////////////////////////////////
/// Call a static method that has two positional parameters, the second argument
/// is returned.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithPositionalArguments2:[exact=JSNumNotInt]*/
+/*member: staticCallWithPositionalArguments2:[exact=JSNumNotInt|powerset=0]*/
staticCallWithPositionalArguments2() => _returnSecond(0, 0.5);
-/*member: _returnSecond:[exact=JSNumNotInt]*/
-_returnSecond(/*[exact=JSUInt31]*/ a, /*[exact=JSNumNotInt]*/ b) => b;
+/*member: _returnSecond:[exact=JSNumNotInt|powerset=0]*/
+_returnSecond(
+ /*[exact=JSUInt31|powerset=0]*/ a,
+ /*[exact=JSNumNotInt|powerset=0]*/ b,
+) => b;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has an optional parameter with no explicit default
/// value. Only one call site with no arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithOptionalArguments1:[null]*/
+/*member: staticCallWithOptionalArguments1:[null|powerset=1]*/
staticCallWithOptionalArguments1() => _returnDefaultNull();
-/*member: _returnDefaultNull:[null]*/
-_returnDefaultNull([/*[null]*/ a]) => a;
+/*member: _returnDefaultNull:[null|powerset=1]*/
+_returnDefaultNull([/*[null|powerset=1]*/ a]) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has an optional parameter with an explicit default
/// value of `null`. Only one call site with no arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithOptionalArguments2:[null]*/
+/*member: staticCallWithOptionalArguments2:[null|powerset=1]*/
staticCallWithOptionalArguments2() => _returnDefaultNullExplicit();
-/*member: _returnDefaultNullExplicit:[null]*/
-_returnDefaultNullExplicit([/*[null]*/ a = null]) => a;
+/*member: _returnDefaultNullExplicit:[null|powerset=1]*/
+_returnDefaultNullExplicit([/*[null|powerset=1]*/ a = null]) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has an optional parameter. Only one call site with an
/// explicit argument.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithOptionalArguments3:[exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments3:[exact=JSUInt31|powerset=0]*/
staticCallWithOptionalArguments3() => _returnDefaultNullCalled(0);
-/*member: _returnDefaultNullCalled:[exact=JSUInt31]*/
-_returnDefaultNullCalled([/*[exact=JSUInt31]*/ a]) => a;
+/*member: _returnDefaultNullCalled:[exact=JSUInt31|powerset=0]*/
+_returnDefaultNullCalled([/*[exact=JSUInt31|powerset=0]*/ a]) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has an optional parameter. Two call sites, one
/// with an explicit argument and one with no arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithOptionalArguments4a:[null|exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments4a:[null|exact=JSUInt31|powerset=1]*/
staticCallWithOptionalArguments4a() => _returnDefaultNullCalledTwice();
-/*member: staticCallWithOptionalArguments4b:[null|exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments4b:[null|exact=JSUInt31|powerset=1]*/
staticCallWithOptionalArguments4b() => _returnDefaultNullCalledTwice(0);
-/*member: _returnDefaultNullCalledTwice:[null|exact=JSUInt31]*/
-_returnDefaultNullCalledTwice([/*[null|exact=JSUInt31]*/ a]) => a;
+/*member: _returnDefaultNullCalledTwice:[null|exact=JSUInt31|powerset=1]*/
+_returnDefaultNullCalledTwice([/*[null|exact=JSUInt31|powerset=1]*/ a]) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has an optional parameter with a default value of `0`.
/// Only one call site with no arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithOptionalArguments5:[exact=JSUInt31]*/
+/*member: staticCallWithOptionalArguments5:[exact=JSUInt31|powerset=0]*/
staticCallWithOptionalArguments5() => _returnDefaultZero();
-/*member: _returnDefaultZero:[exact=JSUInt31]*/
-_returnDefaultZero([/*[exact=JSUInt31]*/ a = 0]) => a;
+/*member: _returnDefaultZero:[exact=JSUInt31|powerset=0]*/
+_returnDefaultZero([/*[exact=JSUInt31|powerset=0]*/ a = 0]) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has an optional parameter with a default value of `0`.
/// Only one call site with an argument of a different type.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithOptionalArguments6:[exact=JSNumNotInt]*/
+/*member: staticCallWithOptionalArguments6:[exact=JSNumNotInt|powerset=0]*/
staticCallWithOptionalArguments6() => _returnDefaultZeroCalled(0.5);
-/*member: _returnDefaultZeroCalled:[exact=JSNumNotInt]*/
-_returnDefaultZeroCalled([/*[exact=JSNumNotInt]*/ a = 0]) => a;
+/*member: _returnDefaultZeroCalled:[exact=JSNumNotInt|powerset=0]*/
+_returnDefaultZeroCalled([/*[exact=JSNumNotInt|powerset=0]*/ a = 0]) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has a named parameter with a default value of `0`.
/// Only one call site with no arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithNamedArguments1:[exact=JSUInt31]*/
+/*member: staticCallWithNamedArguments1:[exact=JSUInt31|powerset=0]*/
staticCallWithNamedArguments1() => _returnNamedDefaultZero();
-/*member: _returnNamedDefaultZero:[exact=JSUInt31]*/
-_returnNamedDefaultZero({/*[exact=JSUInt31]*/ a = 0}) => a;
+/*member: _returnNamedDefaultZero:[exact=JSUInt31|powerset=0]*/
+_returnNamedDefaultZero({/*[exact=JSUInt31|powerset=0]*/ a = 0}) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has a named parameter with a default value of `0`.
/// Only one call site with an argument of a different type.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithNamedArguments2:[exact=JSNumNotInt]*/
+/*member: staticCallWithNamedArguments2:[exact=JSNumNotInt|powerset=0]*/
staticCallWithNamedArguments2() => _returnNamedDefaultZeroCalled(a: 0.5);
-/*member: _returnNamedDefaultZeroCalled:[exact=JSNumNotInt]*/
-_returnNamedDefaultZeroCalled({/*[exact=JSNumNotInt]*/ a = 0}) => a;
+/*member: _returnNamedDefaultZeroCalled:[exact=JSNumNotInt|powerset=0]*/
+_returnNamedDefaultZeroCalled({/*[exact=JSNumNotInt|powerset=0]*/ a = 0}) => a;
////////////////////////////////////////////////////////////////////////////////
/// A static method that has a named parameter. Two call sites, one with an
/// explicit argument and one with no arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: staticCallWithNamedArguments3a:[null|exact=JSNumNotInt]*/
+/*member: staticCallWithNamedArguments3a:[null|exact=JSNumNotInt|powerset=1]*/
staticCallWithNamedArguments3a() => _returnNamedNullCalledTwice();
-/*member: staticCallWithNamedArguments3b:[null|exact=JSNumNotInt]*/
+/*member: staticCallWithNamedArguments3b:[null|exact=JSNumNotInt|powerset=1]*/
staticCallWithNamedArguments3b() => _returnNamedNullCalledTwice(a: 0.5);
-/*member: _returnNamedNullCalledTwice:[null|exact=JSNumNotInt]*/
-_returnNamedNullCalledTwice({/*[null|exact=JSNumNotInt]*/ a}) => a;
+/*member: _returnNamedNullCalledTwice:[null|exact=JSNumNotInt|powerset=1]*/
+_returnNamedNullCalledTwice({/*[null|exact=JSNumNotInt|powerset=1]*/ a}) => a;
////////////////////////////////////////////////////////////////////////////////
/// Call an uninitialized top level field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field1:[null]*/
+/*member: _field1:[null|powerset=1]*/
dynamic _field1;
-/*member: invokeStaticFieldUninitialized:[empty]*/
+/*member: invokeStaticFieldUninitialized:[empty|powerset=0]*/
invokeStaticFieldUninitialized() => _field1();
////////////////////////////////////////////////////////////////////////////////
/// Call a top level field initialized to a tear-off of a top level method.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method1:[exact=JSUInt31]*/
+/*member: _method1:[exact=JSUInt31|powerset=0]*/
_method1() => 42;
-/*member: _field2:[subclass=Closure]*/
+/*member: _field2:[subclass=Closure|powerset=0]*/
dynamic _field2 = _method1;
-/*member: invokeStaticFieldTearOff:[null|subclass=Object]*/
+/*member: invokeStaticFieldTearOff:[null|subclass=Object|powerset=1]*/
invokeStaticFieldTearOff() => _field2();
////////////////////////////////////////////////////////////////////////////////
/// Call a top level field initialized to a tear-off of a top level method.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method5:Value([exact=JSString], value: "")*/
+/*member: _method5:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
String _method5() => '';
-/*member: _field5:[subclass=Closure]*/
+/*member: _field5:[subclass=Closure|powerset=0]*/
String Function() _field5 = _method5;
-/*member: invokeStaticTypedFieldTearOff:[exact=JSString]*/
+/*member: invokeStaticTypedFieldTearOff:[exact=JSString|powerset=0]*/
invokeStaticTypedFieldTearOff() => _field5();
////////////////////////////////////////////////////////////////////////////////
@@ -213,42 +219,42 @@
/// taking one argument.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method2:[exact=JSUInt31]*/
-_method2(/*[exact=JSUInt31]*/ o) => 42;
+/*member: _method2:[exact=JSUInt31|powerset=0]*/
+_method2(/*[exact=JSUInt31|powerset=0]*/ o) => 42;
-/*member: _field3:[subclass=Closure]*/
+/*member: _field3:[subclass=Closure|powerset=0]*/
dynamic _field3 = _method2;
-/*member: invokeStaticFieldTearOffParameters:[null|subclass=Object]*/
+/*member: invokeStaticFieldTearOffParameters:[null|subclass=Object|powerset=1]*/
invokeStaticFieldTearOffParameters() => _field3(42);
////////////////////////////////////////////////////////////////////////////////
/// Call a top level getter returning a tear-off of a top level method.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method3:[exact=JSUInt31]*/
+/*member: _method3:[exact=JSUInt31|powerset=0]*/
_method3() => 42;
-/*member: _getter1:[subclass=Closure]*/
+/*member: _getter1:[subclass=Closure|powerset=0]*/
get _getter1 => _method3;
-/*member: invokeStaticGetterTearOff:[null|subclass=Object]*/
+/*member: invokeStaticGetterTearOff:[null|subclass=Object|powerset=1]*/
invokeStaticGetterTearOff() => _getter1();
////////////////////////////////////////////////////////////////////////////////
/// Call a typed top level getter returning a tear-off of a top level method.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method6:[exact=JSUInt31]*/
+/*member: _method6:[exact=JSUInt31|powerset=0]*/
int _method6() => 0;
-/*member: _field7:[subclass=Closure]*/
+/*member: _field7:[subclass=Closure|powerset=0]*/
int Function() _field7 = _method6;
-/*member: _getter3:[subclass=Closure]*/
+/*member: _getter3:[subclass=Closure|powerset=0]*/
int Function() get _getter3 => _field7;
-/*member: invokeStaticTypedGetterTearOff:[subclass=JSInt]*/
+/*member: invokeStaticTypedGetterTearOff:[subclass=JSInt|powerset=0]*/
invokeStaticTypedGetterTearOff() => _getter3();
////////////////////////////////////////////////////////////////////////////////
@@ -256,13 +262,16 @@
/// arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method4:Union([exact=JSString], [exact=JSUInt31])*/
-T _method4<T>(T /*Union([exact=JSString], [exact=JSUInt31])*/ t) => t;
+/*member: _method4:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+T _method4<T>(
+ T /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ t,
+) => t;
-/*member: invokeStaticGenericMethod1:[exact=JSUInt31]*/
+/*member: invokeStaticGenericMethod1:[exact=JSUInt31|powerset=0]*/
invokeStaticGenericMethod1() => _method4(0);
-/*member: invokeStaticGenericMethod2:[exact=JSString]*/
+/*member: invokeStaticGenericMethod2:[exact=JSString|powerset=0]*/
invokeStaticGenericMethod2() => _method4('');
////////////////////////////////////////////////////////////////////////////////
@@ -270,13 +279,13 @@
/// arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: _getter2:[subclass=Closure]*/
+/*member: _getter2:[subclass=Closure|powerset=0]*/
T Function<T>(T) get _getter2 => _method4;
-/*member: invokeStaticGenericGetter1:[subclass=JSInt]*/
+/*member: invokeStaticGenericGetter1:[subclass=JSInt|powerset=0]*/
invokeStaticGenericGetter1() => _getter2(0);
-/*member: invokeStaticGenericGetter2:[exact=JSString]*/
+/*member: invokeStaticGenericGetter2:[exact=JSString|powerset=0]*/
invokeStaticGenericGetter2() => _getter2('');
////////////////////////////////////////////////////////////////////////////////
@@ -284,11 +293,11 @@
/// arguments.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field4:[subclass=Closure]*/
+/*member: _field4:[subclass=Closure|powerset=0]*/
T Function<T>(T) _field4 = _method4;
-/*member: invokeStaticGenericField1:[subclass=JSInt]*/
+/*member: invokeStaticGenericField1:[subclass=JSInt|powerset=0]*/
invokeStaticGenericField1() => _field4(0);
-/*member: invokeStaticGenericField2:[exact=JSString]*/
+/*member: invokeStaticGenericField2:[exact=JSString|powerset=0]*/
invokeStaticGenericField2() => _field4('');
diff --git a/pkg/compiler/test/inference/data/static_get.dart b/pkg/compiler/test/inference/data/static_get.dart
index 0a3bf8a..deeda4a 100644
--- a/pkg/compiler/test/inference/data/static_get.dart
+++ b/pkg/compiler/test/inference/data/static_get.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
getTopLevelFieldUninitialized();
getStaticFieldUninitialized();
@@ -22,10 +22,10 @@
/// Static get of an uninitialized top level field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field1:[null]*/
+/*member: _field1:[null|powerset=1]*/
var _field1;
-/*member: getTopLevelFieldUninitialized:[null]*/
+/*member: getTopLevelFieldUninitialized:[null|powerset=1]*/
getTopLevelFieldUninitialized() => _field1;
////////////////////////////////////////////////////////////////////////////////
@@ -33,21 +33,21 @@
////////////////////////////////////////////////////////////////////////////////
class Class1 {
- /*member: Class1.field:[null]*/
+ /*member: Class1.field:[null|powerset=1]*/
static var field;
}
-/*member: getStaticFieldUninitialized:[null]*/
+/*member: getStaticFieldUninitialized:[null|powerset=1]*/
getStaticFieldUninitialized() => Class1.field;
////////////////////////////////////////////////////////////////////////////////
/// Static get of an initialized top level field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _field2:[exact=JSUInt31]*/
+/*member: _field2:[exact=JSUInt31|powerset=0]*/
var _field2 = 42;
-/*member: getTopLevelFieldInitialized:[exact=JSUInt31]*/
+/*member: getTopLevelFieldInitialized:[exact=JSUInt31|powerset=0]*/
getTopLevelFieldInitialized() => _field2;
////////////////////////////////////////////////////////////////////////////////
@@ -55,11 +55,11 @@
////////////////////////////////////////////////////////////////////////////////
class Class2 {
- /*member: Class2.field:[exact=JSUInt31]*/
+ /*member: Class2.field:[exact=JSUInt31|powerset=0]*/
static var field = 42;
}
-/*member: getStaticFieldInitialized:[exact=JSUInt31]*/
+/*member: getStaticFieldInitialized:[exact=JSUInt31|powerset=0]*/
getStaticFieldInitialized() => Class2.field;
////////////////////////////////////////////////////////////////////////////////
@@ -67,13 +67,13 @@
/// null.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method3:[exact=JSUInt31]*/
+/*member: _method3:[exact=JSUInt31|powerset=0]*/
_method3() => 42;
-/*member: _field3:[null|exact=JSUInt31]*/
+/*member: _field3:[null|exact=JSUInt31|powerset=1]*/
var _field3 = _method3();
-/*member: getTopLevelFieldInitializedPotentiallyNull:[null|exact=JSUInt31]*/
+/*member: getTopLevelFieldInitializedPotentiallyNull:[null|exact=JSUInt31|powerset=1]*/
getTopLevelFieldInitializedPotentiallyNull() => _field3;
////////////////////////////////////////////////////////////////////////////////
@@ -81,24 +81,24 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- /*member: Class3.method:[exact=JSUInt31]*/
+ /*member: Class3.method:[exact=JSUInt31|powerset=0]*/
static method() => 42;
- /*member: Class3.field:[null|exact=JSUInt31]*/
+ /*member: Class3.field:[null|exact=JSUInt31|powerset=1]*/
static var field = method();
}
-/*member: getStaticFieldInitializedPotentiallyNull:[null|exact=JSUInt31]*/
+/*member: getStaticFieldInitializedPotentiallyNull:[null|exact=JSUInt31|powerset=1]*/
getStaticFieldInitializedPotentiallyNull() => Class3.field;
////////////////////////////////////////////////////////////////////////////////
/// Static get of a top level method.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method4:[exact=JSUInt31]*/
+/*member: _method4:[exact=JSUInt31|powerset=0]*/
_method4() => 42;
-/*member: getTopLevelMethod:[subclass=Closure]*/
+/*member: getTopLevelMethod:[subclass=Closure|powerset=0]*/
getTopLevelMethod() => _method4;
////////////////////////////////////////////////////////////////////////////////
@@ -106,21 +106,21 @@
////////////////////////////////////////////////////////////////////////////////
class Class4 {
- /*member: Class4.method:[exact=JSUInt31]*/
+ /*member: Class4.method:[exact=JSUInt31|powerset=0]*/
static method() => 42;
}
-/*member: getStaticMethod:[subclass=Closure]*/
+/*member: getStaticMethod:[subclass=Closure|powerset=0]*/
getStaticMethod() => Class4.method;
////////////////////////////////////////////////////////////////////////////////
/// Static get of a top level getter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _getter1:[exact=JSUInt31]*/
+/*member: _getter1:[exact=JSUInt31|powerset=0]*/
get _getter1 => 42;
-/*member: getTopLevelGetter:[exact=JSUInt31]*/
+/*member: getTopLevelGetter:[exact=JSUInt31|powerset=0]*/
getTopLevelGetter() => _getter1;
////////////////////////////////////////////////////////////////////////////////
@@ -128,9 +128,9 @@
////////////////////////////////////////////////////////////////////////////////
class Class5 {
- /*member: Class5.getter:[exact=JSUInt31]*/
+ /*member: Class5.getter:[exact=JSUInt31|powerset=0]*/
static get getter => 42;
}
-/*member: getStaticGetter:[exact=JSUInt31]*/
+/*member: getStaticGetter:[exact=JSUInt31|powerset=0]*/
getStaticGetter() => Class5.getter;
diff --git a/pkg/compiler/test/inference/data/static_set.dart b/pkg/compiler/test/inference/data/static_set.dart
index 80c95eb..cf1bfb6 100644
--- a/pkg/compiler/test/inference/data/static_set.dart
+++ b/pkg/compiler/test/inference/data/static_set.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
setTopLevelFieldUninitialized();
setStaticFieldUninitialized();
@@ -17,10 +17,10 @@
/// Static set of an uninitialized top level field.
////////////////////////////////////////////////////////////////////////////////
-/*member: field1:[null|exact=JSUInt31]*/
+/*member: field1:[null|exact=JSUInt31|powerset=1]*/
var field1;
-/*member: setTopLevelFieldUninitialized:[exact=JSUInt31]*/
+/*member: setTopLevelFieldUninitialized:[exact=JSUInt31|powerset=0]*/
setTopLevelFieldUninitialized() => field1 = 42;
////////////////////////////////////////////////////////////////////////////////
@@ -28,21 +28,21 @@
////////////////////////////////////////////////////////////////////////////////
class Class1 {
- /*member: Class1.field:[null|exact=JSUInt31]*/
+ /*member: Class1.field:[null|exact=JSUInt31|powerset=1]*/
static var field;
}
-/*member: setStaticFieldUninitialized:[exact=JSUInt31]*/
+/*member: setStaticFieldUninitialized:[exact=JSUInt31|powerset=0]*/
setStaticFieldUninitialized() => Class1.field = 42;
////////////////////////////////////////////////////////////////////////////////
/// Static set of an initialized top level field.
////////////////////////////////////////////////////////////////////////////////
-/*member: field2:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: field2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
dynamic field2 = '';
-/*member: setTopLevelFieldInitialized:[exact=JSUInt31]*/
+/*member: setTopLevelFieldInitialized:[exact=JSUInt31|powerset=0]*/
setTopLevelFieldInitialized() => field2 = 42;
////////////////////////////////////////////////////////////////////////////////
@@ -50,20 +50,20 @@
////////////////////////////////////////////////////////////////////////////////
class Class2 {
- /*member: Class2.field:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: Class2.field:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
static dynamic field = '';
}
-/*member: setStaticFieldInitialized:[exact=JSUInt31]*/
+/*member: setStaticFieldInitialized:[exact=JSUInt31|powerset=0]*/
setStaticFieldInitialized() => Class2.field = 42;
////////////////////////////////////////////////////////////////////////////////
/// Static set of a top level setter.
////////////////////////////////////////////////////////////////////////////////
-set _setter1(/*[exact=JSUInt31]*/ value) {}
+set _setter1(/*[exact=JSUInt31|powerset=0]*/ value) {}
-/*member: setTopLevelSetter:[exact=JSUInt31]*/
+/*member: setTopLevelSetter:[exact=JSUInt31|powerset=0]*/
setTopLevelSetter() => _setter1 = 42;
////////////////////////////////////////////////////////////////////////////////
@@ -71,8 +71,8 @@
////////////////////////////////////////////////////////////////////////////////
class Class3 {
- static set setter(/*[exact=JSUInt31]*/ value) {}
+ static set setter(/*[exact=JSUInt31|powerset=0]*/ value) {}
}
-/*member: setStaticSetter:[exact=JSUInt31]*/
+/*member: setStaticSetter:[exact=JSUInt31|powerset=0]*/
setStaticSetter() => Class3.setter = 42;
diff --git a/pkg/compiler/test/inference/data/static_type.dart b/pkg/compiler/test/inference/data/static_type.dart
index b0a1e8b..46a795c 100644
--- a/pkg/compiler/test/inference/data/static_type.dart
+++ b/pkg/compiler/test/inference/data/static_type.dart
@@ -3,149 +3,163 @@
// BSD-style license that can be found in the LICENSE file.
class C<T> {
- /*member: C.field:Union([exact=JSString], [exact=JSUInt31])*/
+ /*member: C.field:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
final T field;
- /*member: C.fixedFunctionField:[subclass=Closure]*/
- int Function() fixedFunctionField = /*[exact=JSUInt31]*/ () => 0;
+ /*member: C.fixedFunctionField:[subclass=Closure|powerset=0]*/
+ int Function() fixedFunctionField = /*[exact=JSUInt31|powerset=0]*/ () => 0;
- /*member: C.functionField:[null|subclass=Closure]*/
+ /*member: C.functionField:[null|subclass=Closure|powerset=1]*/
T Function()? functionField;
- /*member: C.genericFunctionField:[null|subclass=Closure]*/
+ /*member: C.genericFunctionField:[null|subclass=Closure|powerset=1]*/
S Function<S>(S)? genericFunctionField;
- /*member: C.:[exact=C]*/
- C(this. /*Union([exact=JSString], [exact=JSUInt31])*/ field) {
- /*update: [subclass=C]*/
+ /*member: C.:[exact=C|powerset=0]*/
+ C(
+ this. /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/ field,
+ ) {
+ /*update: [subclass=C|powerset=0]*/
functionField =
- /*Union([exact=JSString], [exact=JSUInt31])*/
- () => /*[subclass=C]*/ field;
- /*Union([exact=JSString], [exact=JSUInt31])*/
- S local<S>(S /*Union([exact=JSString], [exact=JSUInt31])*/ s) => s;
- /*update: [subclass=C]*/
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ () => /*[subclass=C|powerset=0]*/ field;
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ S local<S>(
+ S /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ s,
+ ) => s;
+ /*update: [subclass=C|powerset=0]*/
genericFunctionField = local;
}
- /*member: C.method:Union([exact=JSString], [exact=JSUInt31])*/
- T method() => /*[subclass=C]*/ field;
+ /*member: C.method:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ T method() => /*[subclass=C|powerset=0]*/ field;
- /*member: C.+:Union([exact=JSString], [exact=JSUInt31])*/
- T operator +(T /*Union([exact=JSString], [exact=JSUInt31])*/ t) =>
- /*[subclass=C]*/ field;
+ /*member: C.+:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ T operator +(
+ T /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ t,
+ ) =>
+ /*[subclass=C|powerset=0]*/ field;
- /*member: C.getter:Union([exact=JSString], [exact=JSUInt31])*/
- T get getter => /*[subclass=C]*/ field;
+ /*member: C.getter:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ T get getter => /*[subclass=C|powerset=0]*/ field;
- /*member: C.fixedFunctionGetter:[subclass=Closure]*/
- int Function() get fixedFunctionGetter => /*[exact=JSUInt31]*/ () => 0;
+ /*member: C.fixedFunctionGetter:[subclass=Closure|powerset=0]*/
+ int Function() get fixedFunctionGetter => /*[exact=JSUInt31|powerset=0]*/
+ () => 0;
- /*member: C.functionGetter:[null|subclass=Closure]*/
- T Function()? get functionGetter => /*[subclass=C]*/ functionField;
+ /*member: C.functionGetter:[null|subclass=Closure|powerset=1]*/
+ T Function()? get functionGetter => /*[subclass=C|powerset=0]*/ functionField;
- /*member: C.genericFunctionGetter:[null|subclass=Closure]*/
+ /*member: C.genericFunctionGetter:[null|subclass=Closure|powerset=1]*/
S Function<S>(S)? get genericFunctionGetter =>
- /*[subclass=C]*/ genericFunctionField;
+ /*[subclass=C|powerset=0]*/ genericFunctionField;
- /*member: C.genericMethod:Union([exact=JSString], [exact=JSUInt31])*/
- S genericMethod<S>(S /*Union([exact=JSString], [exact=JSUInt31])*/ s) => s;
+ /*member: C.genericMethod:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ S genericMethod<S>(
+ S /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ s,
+ ) => s;
}
class D1 extends C<int> {
- /*member: D1.:[exact=D1]*/
- D1(int /*[exact=JSUInt31]*/ field) : super(field);
+ /*member: D1.:[exact=D1|powerset=0]*/
+ D1(int /*[exact=JSUInt31|powerset=0]*/ field) : super(field);
- /*member: D1.superFieldAccess:[exact=JSUInt31]*/
+ /*member: D1.superFieldAccess:[exact=JSUInt31|powerset=0]*/
superFieldAccess() => super.field;
- /*member: D1.superFieldInvoke:[subclass=JSInt]*/
+ /*member: D1.superFieldInvoke:[subclass=JSInt|powerset=0]*/
superFieldInvoke() => super.functionField!();
- /*member: D1.superFixedFieldInvoke:[subclass=JSInt]*/
+ /*member: D1.superFixedFieldInvoke:[subclass=JSInt|powerset=0]*/
superFixedFieldInvoke() => super.fixedFunctionField();
- /*member: D1.superMethodInvoke:[exact=JSUInt31]*/
+ /*member: D1.superMethodInvoke:[exact=JSUInt31|powerset=0]*/
superMethodInvoke() => super.method();
- /*member: D1.superOperatorInvoke:[exact=JSUInt31]*/
+ /*member: D1.superOperatorInvoke:[exact=JSUInt31|powerset=0]*/
superOperatorInvoke() => super + 0;
- /*member: D1.superGetterAccess:[exact=JSUInt31]*/
+ /*member: D1.superGetterAccess:[exact=JSUInt31|powerset=0]*/
superGetterAccess() => super.getter;
- /*member: D1.superGetterInvoke:[subclass=JSInt]*/
+ /*member: D1.superGetterInvoke:[subclass=JSInt|powerset=0]*/
superGetterInvoke() => super.functionGetter!();
- /*member: D1.superFixedGetterInvoke:[subclass=JSInt]*/
+ /*member: D1.superFixedGetterInvoke:[subclass=JSInt|powerset=0]*/
superFixedGetterInvoke() => super.fixedFunctionGetter();
- /*member: D1.superGenericFieldInvoke1:[exact=JSString]*/
+ /*member: D1.superGenericFieldInvoke1:[exact=JSString|powerset=0]*/
superGenericFieldInvoke1() => super.genericFunctionField!('');
- /*member: D1.superGenericFieldInvoke2:[subclass=JSInt]*/
+ /*member: D1.superGenericFieldInvoke2:[subclass=JSInt|powerset=0]*/
superGenericFieldInvoke2() => super.genericFunctionField!(0);
- /*member: D1.superGenericMethodInvoke1:[exact=JSString]*/
+ /*member: D1.superGenericMethodInvoke1:[exact=JSString|powerset=0]*/
superGenericMethodInvoke1() => super.genericMethod('');
- /*member: D1.superGenericMethodInvoke2:[exact=JSUInt31]*/
+ /*member: D1.superGenericMethodInvoke2:[exact=JSUInt31|powerset=0]*/
superGenericMethodInvoke2() => super.genericMethod(0);
- /*member: D1.superGenericGetterInvoke1:[exact=JSString]*/
+ /*member: D1.superGenericGetterInvoke1:[exact=JSString|powerset=0]*/
superGenericGetterInvoke1() => super.genericFunctionGetter!('');
- /*member: D1.superGenericGetterInvoke2:[subclass=JSInt]*/
+ /*member: D1.superGenericGetterInvoke2:[subclass=JSInt|powerset=0]*/
superGenericGetterInvoke2() => super.genericFunctionGetter!(0);
}
class D2 extends C<String> {
- /*member: D2.:[exact=D2]*/
- D2(String /*Value([exact=JSString], value: "")*/ field) : super(field);
+ /*member: D2.:[exact=D2|powerset=0]*/
+ D2(
+ String /*Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ field,
+ ) : super(field);
- /*member: D2.superFieldAccess:[exact=JSString]*/
+ /*member: D2.superFieldAccess:[exact=JSString|powerset=0]*/
superFieldAccess() => super.field;
- /*member: D2.superFieldInvoke:[exact=JSString]*/
+ /*member: D2.superFieldInvoke:[exact=JSString|powerset=0]*/
superFieldInvoke() => super.functionField!();
- /*member: D2.superFixedFieldInvoke:[subclass=JSInt]*/
+ /*member: D2.superFixedFieldInvoke:[subclass=JSInt|powerset=0]*/
superFixedFieldInvoke() => super.fixedFunctionField();
- /*member: D2.superMethodInvoke:[exact=JSString]*/
+ /*member: D2.superMethodInvoke:[exact=JSString|powerset=0]*/
superMethodInvoke() => super.method();
- /*member: D2.superOperatorInvoke:[exact=JSString]*/
+ /*member: D2.superOperatorInvoke:[exact=JSString|powerset=0]*/
superOperatorInvoke() => super + '';
- /*member: D2.superGetterAccess:[exact=JSString]*/
+ /*member: D2.superGetterAccess:[exact=JSString|powerset=0]*/
superGetterAccess() => super.getter;
- /*member: D2.superGetterInvoke:[exact=JSString]*/
+ /*member: D2.superGetterInvoke:[exact=JSString|powerset=0]*/
superGetterInvoke() => super.functionGetter!();
- /*member: D2.superFixedGetterInvoke:[subclass=JSInt]*/
+ /*member: D2.superFixedGetterInvoke:[subclass=JSInt|powerset=0]*/
superFixedGetterInvoke() => super.fixedFunctionGetter();
- /*member: D2.superGenericFieldInvoke1:[exact=JSString]*/
+ /*member: D2.superGenericFieldInvoke1:[exact=JSString|powerset=0]*/
superGenericFieldInvoke1() => super.genericFunctionField!('');
- /*member: D2.superGenericFieldInvoke2:[subclass=JSInt]*/
+ /*member: D2.superGenericFieldInvoke2:[subclass=JSInt|powerset=0]*/
superGenericFieldInvoke2() => super.genericFunctionField!(0);
- /*member: D2.superGenericMethodInvoke1:[exact=JSString]*/
+ /*member: D2.superGenericMethodInvoke1:[exact=JSString|powerset=0]*/
superGenericMethodInvoke1() => super.genericMethod('');
- /*member: D2.superGenericMethodInvoke2:[exact=JSUInt31]*/
+ /*member: D2.superGenericMethodInvoke2:[exact=JSUInt31|powerset=0]*/
superGenericMethodInvoke2() => super.genericMethod(0);
- /*member: D2.superGenericGetterInvoke1:[exact=JSString]*/
+ /*member: D2.superGenericGetterInvoke1:[exact=JSString|powerset=0]*/
superGenericGetterInvoke1() => super.genericFunctionGetter!('');
- /*member: D2.superGenericGetterInvoke2:[subclass=JSInt]*/
+ /*member: D2.superGenericGetterInvoke2:[subclass=JSInt|powerset=0]*/
superGenericGetterInvoke2() => super.genericFunctionGetter!(0);
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
closureInvoke();
localFunctionInvoke();
@@ -171,175 +185,178 @@
genericGetterInvoke1();
genericGetterInvoke2();
D1(0)
- .. /*invoke: [exact=D1]*/ superFieldAccess()
- .. /*invoke: [exact=D1]*/ superFieldInvoke()
- .. /*invoke: [exact=D1]*/ superFixedFieldInvoke()
- .. /*invoke: [exact=D1]*/ superMethodInvoke()
- .. /*invoke: [exact=D1]*/ superOperatorInvoke()
- .. /*invoke: [exact=D1]*/ superGetterAccess()
- .. /*invoke: [exact=D1]*/ superGetterInvoke()
- .. /*invoke: [exact=D1]*/ superFixedGetterInvoke()
- .. /*invoke: [exact=D1]*/ superGenericFieldInvoke1()
- .. /*invoke: [exact=D1]*/ superGenericFieldInvoke2()
- .. /*invoke: [exact=D1]*/ superGenericMethodInvoke1()
- .. /*invoke: [exact=D1]*/ superGenericMethodInvoke2()
- .. /*invoke: [exact=D1]*/ superGenericGetterInvoke1()
- .. /*invoke: [exact=D1]*/ superGenericGetterInvoke2();
+ .. /*invoke: [exact=D1|powerset=0]*/ superFieldAccess()
+ .. /*invoke: [exact=D1|powerset=0]*/ superFieldInvoke()
+ .. /*invoke: [exact=D1|powerset=0]*/ superFixedFieldInvoke()
+ .. /*invoke: [exact=D1|powerset=0]*/ superMethodInvoke()
+ .. /*invoke: [exact=D1|powerset=0]*/ superOperatorInvoke()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGetterAccess()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGetterInvoke()
+ .. /*invoke: [exact=D1|powerset=0]*/ superFixedGetterInvoke()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGenericFieldInvoke1()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGenericFieldInvoke2()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGenericMethodInvoke1()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGenericMethodInvoke2()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGenericGetterInvoke1()
+ .. /*invoke: [exact=D1|powerset=0]*/ superGenericGetterInvoke2();
D2('')
- .. /*invoke: [exact=D2]*/ superFieldAccess()
- .. /*invoke: [exact=D2]*/ superFieldInvoke()
- .. /*invoke: [exact=D2]*/ superFixedFieldInvoke()
- .. /*invoke: [exact=D2]*/ superMethodInvoke()
- .. /*invoke: [exact=D2]*/ superOperatorInvoke()
- .. /*invoke: [exact=D2]*/ superGetterAccess()
- .. /*invoke: [exact=D2]*/ superGetterInvoke()
- .. /*invoke: [exact=D2]*/ superFixedGetterInvoke()
- .. /*invoke: [exact=D2]*/ superGenericFieldInvoke1()
- .. /*invoke: [exact=D2]*/ superGenericFieldInvoke2()
- .. /*invoke: [exact=D2]*/ superGenericMethodInvoke1()
- .. /*invoke: [exact=D2]*/ superGenericMethodInvoke2()
- .. /*invoke: [exact=D2]*/ superGenericGetterInvoke1()
- .. /*invoke: [exact=D2]*/ superGenericGetterInvoke2();
+ .. /*invoke: [exact=D2|powerset=0]*/ superFieldAccess()
+ .. /*invoke: [exact=D2|powerset=0]*/ superFieldInvoke()
+ .. /*invoke: [exact=D2|powerset=0]*/ superFixedFieldInvoke()
+ .. /*invoke: [exact=D2|powerset=0]*/ superMethodInvoke()
+ .. /*invoke: [exact=D2|powerset=0]*/ superOperatorInvoke()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGetterAccess()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGetterInvoke()
+ .. /*invoke: [exact=D2|powerset=0]*/ superFixedGetterInvoke()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGenericFieldInvoke1()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGenericFieldInvoke2()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGenericMethodInvoke1()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGenericMethodInvoke2()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGenericGetterInvoke1()
+ .. /*invoke: [exact=D2|powerset=0]*/ superGenericGetterInvoke2();
}
-/*member: closureInvoke:[subclass=JSInt]*/
+/*member: closureInvoke:[subclass=JSInt|powerset=0]*/
closureInvoke() {
- int Function() f = /*[exact=JSUInt31]*/ () => 0;
+ int Function() f = /*[exact=JSUInt31|powerset=0]*/ () => 0;
return f();
}
-/*member: localFunctionInvoke:[exact=JSUInt31]*/
+/*member: localFunctionInvoke:[exact=JSUInt31|powerset=0]*/
localFunctionInvoke() {
- /*[exact=JSUInt31]*/
+ /*[exact=JSUInt31|powerset=0]*/
int local() => 0;
return local();
}
-/*member: genericLocalFunctionInvoke:[null]*/
+/*member: genericLocalFunctionInvoke:[null|powerset=1]*/
genericLocalFunctionInvoke() {
- /*Union([exact=JSString], [exact=JSUInt31])*/
- S local<S>(S /*Union([exact=JSString], [exact=JSUInt31])*/ s) => s;
+ /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ S local<S>(
+ S /*Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+ s,
+ ) => s;
- local(0). /*invoke: [exact=JSUInt31]*/ toString();
- local(''). /*invoke: [exact=JSString]*/ toString();
+ local(0). /*invoke: [exact=JSUInt31|powerset=0]*/ toString();
+ local(''). /*invoke: [exact=JSString|powerset=0]*/ toString();
}
-/*member: fieldAccess1:[exact=JSUInt31]*/
+/*member: fieldAccess1:[exact=JSUInt31|powerset=0]*/
fieldAccess1() {
C<int> c = C<int>(0);
- return c. /*[exact=C]*/ field;
+ return c. /*[exact=C|powerset=0]*/ field;
}
-/*member: fieldAccess2:[exact=JSString]*/
+/*member: fieldAccess2:[exact=JSString|powerset=0]*/
fieldAccess2() {
C<String> c = C<String>('');
- return c. /*[exact=C]*/ field;
+ return c. /*[exact=C|powerset=0]*/ field;
}
-/*member: fixedFieldInvoke:[subclass=JSInt]*/
+/*member: fixedFieldInvoke:[subclass=JSInt|powerset=0]*/
fixedFieldInvoke() {
C<int> c = C<int>(0);
- return c.fixedFunctionField /*invoke: [exact=C]*/ ();
+ return c.fixedFunctionField /*invoke: [exact=C|powerset=0]*/ ();
}
-/*member: fieldInvoke1:[subclass=JSInt]*/
+/*member: fieldInvoke1:[subclass=JSInt|powerset=0]*/
fieldInvoke1() {
C<int> c = C<int>(0);
- return c. /*[exact=C]*/ functionField!();
+ return c. /*[exact=C|powerset=0]*/ functionField!();
}
-/*member: fieldInvoke2:[exact=JSString]*/
+/*member: fieldInvoke2:[exact=JSString|powerset=0]*/
fieldInvoke2() {
C<String> c = C<String>('');
- return c. /*[exact=C]*/ functionField!();
+ return c. /*[exact=C|powerset=0]*/ functionField!();
}
-/*member: methodInvoke1:[exact=JSUInt31]*/
+/*member: methodInvoke1:[exact=JSUInt31|powerset=0]*/
methodInvoke1() {
C<int> c = C<int>(0);
- return c. /*invoke: [exact=C]*/ method();
+ return c. /*invoke: [exact=C|powerset=0]*/ method();
}
-/*member: methodInvoke2:[exact=JSString]*/
+/*member: methodInvoke2:[exact=JSString|powerset=0]*/
methodInvoke2() {
C<String> c = C<String>('');
- return c. /*invoke: [exact=C]*/ method();
+ return c. /*invoke: [exact=C|powerset=0]*/ method();
}
-/*member: operatorInvoke1:[exact=JSUInt31]*/
+/*member: operatorInvoke1:[exact=JSUInt31|powerset=0]*/
operatorInvoke1() {
C<int> c = C<int>(0);
- return c /*invoke: [exact=C]*/ + 0;
+ return c /*invoke: [exact=C|powerset=0]*/ + 0;
}
-/*member: operatorInvoke2:[exact=JSString]*/
+/*member: operatorInvoke2:[exact=JSString|powerset=0]*/
operatorInvoke2() {
C<String> c = C<String>('');
- return c /*invoke: [exact=C]*/ + '';
+ return c /*invoke: [exact=C|powerset=0]*/ + '';
}
-/*member: fixedGetterInvoke:[subclass=JSInt]*/
+/*member: fixedGetterInvoke:[subclass=JSInt|powerset=0]*/
fixedGetterInvoke() {
C<int> c = C<int>(0);
- return c.fixedFunctionGetter /*invoke: [exact=C]*/ ();
+ return c.fixedFunctionGetter /*invoke: [exact=C|powerset=0]*/ ();
}
-/*member: getterAccess1:[exact=JSUInt31]*/
+/*member: getterAccess1:[exact=JSUInt31|powerset=0]*/
getterAccess1() {
C<int> c = C<int>(0);
- return c. /*[exact=C]*/ getter;
+ return c. /*[exact=C|powerset=0]*/ getter;
}
-/*member: getterAccess2:[exact=JSString]*/
+/*member: getterAccess2:[exact=JSString|powerset=0]*/
getterAccess2() {
C<String> c = C<String>('');
- return c. /*[exact=C]*/ getter;
+ return c. /*[exact=C|powerset=0]*/ getter;
}
-/*member: getterInvoke1:[subclass=JSInt]*/
+/*member: getterInvoke1:[subclass=JSInt|powerset=0]*/
getterInvoke1() {
C<int> c = C<int>(0);
- return c. /*[exact=C]*/ functionGetter!();
+ return c. /*[exact=C|powerset=0]*/ functionGetter!();
}
-/*member: getterInvoke2:[exact=JSString]*/
+/*member: getterInvoke2:[exact=JSString|powerset=0]*/
getterInvoke2() {
C<String> c = C<String>('');
- return c. /*[exact=C]*/ functionGetter!();
+ return c. /*[exact=C|powerset=0]*/ functionGetter!();
}
-/*member: genericFieldInvoke1:[exact=JSString]*/
+/*member: genericFieldInvoke1:[exact=JSString|powerset=0]*/
genericFieldInvoke1() {
C<int> c = C<int>(0);
- return c. /*[exact=C]*/ genericFunctionField!('');
+ return c. /*[exact=C|powerset=0]*/ genericFunctionField!('');
}
-/*member: genericFieldInvoke2:[subclass=JSInt]*/
+/*member: genericFieldInvoke2:[subclass=JSInt|powerset=0]*/
genericFieldInvoke2() {
C<String> c = C<String>('');
- return c. /*[exact=C]*/ genericFunctionField!(0);
+ return c. /*[exact=C|powerset=0]*/ genericFunctionField!(0);
}
-/*member: genericMethodInvoke1:[exact=JSString]*/
+/*member: genericMethodInvoke1:[exact=JSString|powerset=0]*/
genericMethodInvoke1() {
C<int> c = C<int>(0);
- return c. /*invoke: [exact=C]*/ genericMethod('');
+ return c. /*invoke: [exact=C|powerset=0]*/ genericMethod('');
}
-/*member: genericMethodInvoke2:[exact=JSUInt31]*/
+/*member: genericMethodInvoke2:[exact=JSUInt31|powerset=0]*/
genericMethodInvoke2() {
C<String> c = C<String>('');
- return c. /*invoke: [exact=C]*/ genericMethod(0);
+ return c. /*invoke: [exact=C|powerset=0]*/ genericMethod(0);
}
-/*member: genericGetterInvoke1:[exact=JSString]*/
+/*member: genericGetterInvoke1:[exact=JSString|powerset=0]*/
genericGetterInvoke1() {
C<int> c = C<int>(0);
- return c. /*[exact=C]*/ genericFunctionGetter!('');
+ return c. /*[exact=C|powerset=0]*/ genericFunctionGetter!('');
}
-/*member: genericGetterInvoke2:[subclass=JSInt]*/
+/*member: genericGetterInvoke2:[subclass=JSInt|powerset=0]*/
genericGetterInvoke2() {
C<String> c = C<String>('');
- return c. /*[exact=C]*/ genericFunctionGetter!(0);
+ return c. /*[exact=C|powerset=0]*/ genericFunctionGetter!(0);
}
diff --git a/pkg/compiler/test/inference/data/super_get.dart b/pkg/compiler/test/inference/data/super_get.dart
index 5865423..0a46138 100644
--- a/pkg/compiler/test/inference/data/super_get.dart
+++ b/pkg/compiler/test/inference/data/super_get.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
superFieldAccess();
superGetterAccess();
@@ -13,61 +13,61 @@
// Access of super field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
class Super1 {
- /*member: Super1.field:[exact=JSUInt31]*/
+ /*member: Super1.field:[exact=JSUInt31|powerset=0]*/
var field = 42;
}
-/*member: Sub1.:[exact=Sub1]*/
+/*member: Sub1.:[exact=Sub1|powerset=0]*/
class Sub1 extends Super1 {
- /*member: Sub1.method:[exact=JSUInt31]*/
+ /*member: Sub1.method:[exact=JSUInt31|powerset=0]*/
method() => super.field;
}
-/*member: superFieldAccess:[null]*/
+/*member: superFieldAccess:[null|powerset=1]*/
superFieldAccess() {
- Sub1(). /*invoke: [exact=Sub1]*/ method();
+ Sub1(). /*invoke: [exact=Sub1|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
// Access of super getter.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super2.:[exact=Super2]*/
+/*member: Super2.:[exact=Super2|powerset=0]*/
class Super2 {
- /*member: Super2.getter:[exact=JSUInt31]*/
+ /*member: Super2.getter:[exact=JSUInt31|powerset=0]*/
get getter => 42;
}
-/*member: Sub2.:[exact=Sub2]*/
+/*member: Sub2.:[exact=Sub2|powerset=0]*/
class Sub2 extends Super2 {
- /*member: Sub2.method:[exact=JSUInt31]*/
+ /*member: Sub2.method:[exact=JSUInt31|powerset=0]*/
method() => super.getter;
}
-/*member: superGetterAccess:[null]*/
+/*member: superGetterAccess:[null|powerset=1]*/
superGetterAccess() {
- Sub2(). /*invoke: [exact=Sub2]*/ method();
+ Sub2(). /*invoke: [exact=Sub2|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
// Access of super method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super3.:[exact=Super3]*/
+/*member: Super3.:[exact=Super3|powerset=0]*/
class Super3 {
- /*member: Super3.superMethod:[null]*/
+ /*member: Super3.superMethod:[null|powerset=1]*/
superMethod() {}
}
-/*member: Sub3.:[exact=Sub3]*/
+/*member: Sub3.:[exact=Sub3|powerset=0]*/
class Sub3 extends Super3 {
- /*member: Sub3.method:[subclass=Closure]*/
+ /*member: Sub3.method:[subclass=Closure|powerset=0]*/
method() => super.superMethod;
}
-/*member: superMethodAccess:[null]*/
+/*member: superMethodAccess:[null|powerset=1]*/
superMethodAccess() {
- Sub3(). /*invoke: [exact=Sub3]*/ method();
+ Sub3(). /*invoke: [exact=Sub3|powerset=0]*/ method();
}
diff --git a/pkg/compiler/test/inference/data/super_invoke.dart b/pkg/compiler/test/inference/data/super_invoke.dart
index 9b98ffd..f874207 100644
--- a/pkg/compiler/test/inference/data/super_invoke.dart
+++ b/pkg/compiler/test/inference/data/super_invoke.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
superMethodInvoke();
superFieldInvoke();
@@ -14,100 +14,100 @@
// Invocation of super method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
class Super1 {
- /*member: Super1.method:[exact=JSUInt31]*/
+ /*member: Super1.method:[exact=JSUInt31|powerset=0]*/
method() => 42;
}
-/*member: Sub1.:[exact=Sub1]*/
+/*member: Sub1.:[exact=Sub1|powerset=0]*/
class Sub1 extends Super1 {
- /*member: Sub1.method:[subclass=JSPositiveInt]*/
+ /*member: Sub1.method:[subclass=JSPositiveInt|powerset=0]*/
method() {
var a = super.method();
- return a. /*invoke: [exact=JSUInt31]*/ abs();
+ return a. /*invoke: [exact=JSUInt31|powerset=0]*/ abs();
}
}
-/*member: superMethodInvoke:[null]*/
+/*member: superMethodInvoke:[null|powerset=1]*/
superMethodInvoke() {
- Sub1(). /*invoke: [exact=Sub1]*/ method();
+ Sub1(). /*invoke: [exact=Sub1|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
// Invocation of super field.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method1:[exact=JSUInt31]*/
+/*member: _method1:[exact=JSUInt31|powerset=0]*/
_method1() => 42;
-/*member: Super2.:[exact=Super2]*/
+/*member: Super2.:[exact=Super2|powerset=0]*/
class Super2 {
- /*member: Super2.field:[subclass=Closure]*/
+ /*member: Super2.field:[subclass=Closure|powerset=0]*/
var field = _method1;
}
-/*member: Sub2.:[exact=Sub2]*/
+/*member: Sub2.:[exact=Sub2|powerset=0]*/
class Sub2 extends Super2 {
- /*member: Sub2.method:[null|subclass=Object]*/
+ /*member: Sub2.method:[null|subclass=Object|powerset=1]*/
method() {
return super.field();
}
}
-/*member: superFieldInvoke:[null]*/
+/*member: superFieldInvoke:[null|powerset=1]*/
superFieldInvoke() {
- Sub2(). /*invoke: [exact=Sub2]*/ method();
+ Sub2(). /*invoke: [exact=Sub2|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
// Invocation of super getter.
////////////////////////////////////////////////////////////////////////////////
-/*member: _method2:[exact=JSUInt31]*/
+/*member: _method2:[exact=JSUInt31|powerset=0]*/
_method2() => 42;
-/*member: Super3.:[exact=Super3]*/
+/*member: Super3.:[exact=Super3|powerset=0]*/
class Super3 {
- /*member: Super3.getter:[subclass=Closure]*/
+ /*member: Super3.getter:[subclass=Closure|powerset=0]*/
get getter => _method2;
}
-/*member: Sub3.:[exact=Sub3]*/
+/*member: Sub3.:[exact=Sub3|powerset=0]*/
class Sub3 extends Super3 {
- /*member: Sub3.method:[null|subclass=Object]*/
+ /*member: Sub3.method:[null|subclass=Object|powerset=1]*/
method() {
return super.getter();
}
}
-/*member: superGetterInvoke:[null]*/
+/*member: superGetterInvoke:[null|powerset=1]*/
superGetterInvoke() {
- Sub3(). /*invoke: [exact=Sub3]*/ method();
+ Sub3(). /*invoke: [exact=Sub3|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
// Invocation of abstract super method that overrides a concrete method.
////////////////////////////////////////////////////////////////////////////////
-/*member: SuperSuper10.:[exact=SuperSuper10]*/
+/*member: SuperSuper10.:[exact=SuperSuper10|powerset=0]*/
class SuperSuper10 {
- /*member: SuperSuper10.method:[exact=JSUInt31]*/
+ /*member: SuperSuper10.method:[exact=JSUInt31|powerset=0]*/
method() => 42;
}
-/*member: Super10.:[exact=Super10]*/
+/*member: Super10.:[exact=Super10|powerset=0]*/
class Super10 extends SuperSuper10 {
method();
}
-/*member: Sub10.:[exact=Sub10]*/
+/*member: Sub10.:[exact=Sub10|powerset=0]*/
class Sub10 extends Super10 {
- /*member: Sub10.method:[exact=JSUInt31]*/
+ /*member: Sub10.method:[exact=JSUInt31|powerset=0]*/
method() => super.method();
}
-/*member: overridingAbstractSuperMethodInvoke:[null]*/
+/*member: overridingAbstractSuperMethodInvoke:[null|powerset=1]*/
overridingAbstractSuperMethodInvoke() {
- Sub10(). /*invoke: [exact=Sub10]*/ method();
+ Sub10(). /*invoke: [exact=Sub10|powerset=0]*/ method();
}
diff --git a/pkg/compiler/test/inference/data/super_set.dart b/pkg/compiler/test/inference/data/super_set.dart
index d9c5e65..acf2ccc 100644
--- a/pkg/compiler/test/inference/data/super_set.dart
+++ b/pkg/compiler/test/inference/data/super_set.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
superFieldUpdate();
superSetterUpdate();
@@ -12,45 +12,45 @@
// Update of super field.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super1.:[exact=Super1]*/
+/*member: Super1.:[exact=Super1|powerset=0]*/
class Super1 {
- /*member: Super1.field:Union([exact=JSUInt31], [exact=Sub1])*/
+ /*member: Super1.field:Union([exact=JSUInt31|powerset=0], [exact=Sub1|powerset=0], powerset: 0)*/
dynamic field = 42;
}
-/*member: Sub1.:[exact=Sub1]*/
+/*member: Sub1.:[exact=Sub1|powerset=0]*/
class Sub1 extends Super1 {
- /*member: Sub1.method:[subclass=Closure]*/
+ /*member: Sub1.method:[subclass=Closure|powerset=0]*/
method() {
var a = super.field = Sub1();
- return a. /*[exact=Sub1]*/ method;
+ return a. /*[exact=Sub1|powerset=0]*/ method;
}
}
-/*member: superFieldUpdate:[null]*/
+/*member: superFieldUpdate:[null|powerset=1]*/
superFieldUpdate() {
- Sub1(). /*invoke: [exact=Sub1]*/ method();
+ Sub1(). /*invoke: [exact=Sub1|powerset=0]*/ method();
}
////////////////////////////////////////////////////////////////////////////////
// Update of super setter.
////////////////////////////////////////////////////////////////////////////////
-/*member: Super2.:[exact=Super2]*/
+/*member: Super2.:[exact=Super2|powerset=0]*/
class Super2 {
- set setter(/*[exact=Sub2]*/ value) {}
+ set setter(/*[exact=Sub2|powerset=0]*/ value) {}
}
-/*member: Sub2.:[exact=Sub2]*/
+/*member: Sub2.:[exact=Sub2|powerset=0]*/
class Sub2 extends Super2 {
- /*member: Sub2.method:[subclass=Closure]*/
+ /*member: Sub2.method:[subclass=Closure|powerset=0]*/
method() {
var a = super.setter = Sub2();
- return a. /*[exact=Sub2]*/ method;
+ return a. /*[exact=Sub2|powerset=0]*/ method;
}
}
-/*member: superSetterUpdate:[null]*/
+/*member: superSetterUpdate:[null|powerset=1]*/
superSetterUpdate() {
- Sub2(). /*invoke: [exact=Sub2]*/ method();
+ Sub2(). /*invoke: [exact=Sub2|powerset=0]*/ method();
}
diff --git a/pkg/compiler/test/inference/data/switch.dart b/pkg/compiler/test/inference/data/switch.dart
index 7b8ff4f..a53d661 100644
--- a/pkg/compiler/test/inference/data/switch.dart
+++ b/pkg/compiler/test/inference/data/switch.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
switchWithoutDefault();
switchWithDefault();
@@ -15,8 +15,8 @@
// Switch statement without default case.
////////////////////////////////////////////////////////////////////////////////
-/*member: _switchWithoutDefault:Union(null, [exact=JSString], [exact=JSUInt31])*/
-_switchWithoutDefault(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithoutDefault:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
+_switchWithoutDefault(/*[exact=JSUInt31|powerset=0]*/ o) {
var local;
switch (o) {
case 0:
@@ -29,7 +29,7 @@
return local;
}
-/*member: switchWithoutDefault:[null]*/
+/*member: switchWithoutDefault:[null|powerset=1]*/
switchWithoutDefault() {
_switchWithoutDefault(0);
_switchWithoutDefault(1);
@@ -39,8 +39,8 @@
// Switch statement with default case.
////////////////////////////////////////////////////////////////////////////////
-/*member: _switchWithDefault:Union([exact=JSString], [exact=JSUInt31])*/
-_switchWithDefault(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithDefault:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_switchWithDefault(/*[exact=JSUInt31|powerset=0]*/ o) {
var local;
switch (o) {
case 0:
@@ -54,7 +54,7 @@
return local;
}
-/*member: switchWithDefault:[null]*/
+/*member: switchWithDefault:[null|powerset=1]*/
switchWithDefault() {
_switchWithDefault(0);
_switchWithDefault(1);
@@ -64,8 +64,8 @@
// Switch statement with default case without break.
////////////////////////////////////////////////////////////////////////////////
-/*member: _switchWithDefaultWithoutBreak:Union([exact=JSString], [exact=JSUInt31])*/
-_switchWithDefaultWithoutBreak(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithDefaultWithoutBreak:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_switchWithDefaultWithoutBreak(/*[exact=JSUInt31|powerset=0]*/ o) {
var local;
switch (o) {
case 0:
@@ -78,7 +78,7 @@
return local;
}
-/*member: switchWithDefaultWithoutBreak:[null]*/
+/*member: switchWithDefaultWithoutBreak:[null|powerset=1]*/
switchWithDefaultWithoutBreak() {
_switchWithDefaultWithoutBreak(0);
_switchWithDefaultWithoutBreak(1);
@@ -88,8 +88,8 @@
// Switch statement with continue.
////////////////////////////////////////////////////////////////////////////////
-/*member: _switchWithContinue:Union([exact=JSBool], [exact=JSString])*/
-_switchWithContinue(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithContinue:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
+_switchWithContinue(/*[exact=JSUInt31|powerset=0]*/ o) {
dynamic local;
switch (o) {
case 0:
@@ -97,7 +97,9 @@
continue label;
label:
case 1:
- local = local. /*Union(null, [exact=JSString], [exact=JSUInt31])*/ isEven;
+ local =
+ local
+ . /*Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/ isEven;
break;
case 2:
default:
@@ -106,7 +108,7 @@
return local;
}
-/*member: switchWithContinue:[null]*/
+/*member: switchWithContinue:[null|powerset=1]*/
switchWithContinue() {
_switchWithContinue(0);
_switchWithContinue(1);
@@ -117,15 +119,15 @@
// the continue statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _switchWithoutContinue:Union([exact=JSString], [exact=JSUInt31])*/
-_switchWithoutContinue(/*[exact=JSUInt31]*/ o) {
+/*member: _switchWithoutContinue:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
+_switchWithoutContinue(/*[exact=JSUInt31|powerset=0]*/ o) {
dynamic local;
switch (o) {
case 0:
local = 0;
break;
case 1:
- local = local. /*[null]*/ isEven;
+ local = local. /*[null|powerset=1]*/ isEven;
break;
case 2:
default:
@@ -134,7 +136,7 @@
return local;
}
-/*member: switchWithoutContinue:[null]*/
+/*member: switchWithoutContinue:[null|powerset=1]*/
switchWithoutContinue() {
_switchWithoutContinue(0);
_switchWithoutContinue(1);
diff --git a/pkg/compiler/test/inference/data/switch1.dart b/pkg/compiler/test/inference/data/switch1.dart
index 9d02e1b..2865892 100644
--- a/pkg/compiler/test/inference/data/switch1.dart
+++ b/pkg/compiler/test/inference/data/switch1.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:[exact=JSString]*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:[exact=JSString|powerset=0]*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
var a = "one";
switch (x) {
case 1:
@@ -16,7 +16,9 @@
return a;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+ foo(
+ new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+ );
}
diff --git a/pkg/compiler/test/inference/data/switch2.dart b/pkg/compiler/test/inference/data/switch2.dart
index c2aaa71..5398e37 100644
--- a/pkg/compiler/test/inference/data/switch2.dart
+++ b/pkg/compiler/test/inference/data/switch2.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:Value([null|exact=JSString], value: "two")*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:Value([null|exact=JSString|powerset=1], value: "two", powerset: 1)*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
var a;
switch (x) {
case 1:
@@ -16,7 +16,9 @@
return a;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+ foo(
+ new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+ );
}
diff --git a/pkg/compiler/test/inference/data/switch5.dart b/pkg/compiler/test/inference/data/switch5.dart
index 3263b55..8d50041 100644
--- a/pkg/compiler/test/inference/data/switch5.dart
+++ b/pkg/compiler/test/inference/data/switch5.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:[null|exact=JSUInt31]*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:[null|exact=JSUInt31|powerset=1]*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
var a;
switch (x) {
case 1:
@@ -18,7 +18,9 @@
return a;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+ foo(
+ new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+ );
}
diff --git a/pkg/compiler/test/inference/data/switch6.dart b/pkg/compiler/test/inference/data/switch6.dart
index 2155d6f..8fa0245 100644
--- a/pkg/compiler/test/inference/data/switch6.dart
+++ b/pkg/compiler/test/inference/data/switch6.dart
@@ -2,8 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: foo:[null|exact=JSUInt31]*/
-foo(int /*[subclass=JSInt]*/ x) {
+/*member: foo:[null|exact=JSUInt31|powerset=1]*/
+foo(int /*[subclass=JSInt|powerset=0]*/ x) {
var a;
do {
// add extra locals scope
@@ -20,7 +20,9 @@
return a;
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
+ foo(
+ new DateTime.now(). /*[exact=DateTime|powerset=0]*/ millisecondsSinceEpoch,
+ );
}
diff --git a/pkg/compiler/test/inference/data/throw.dart b/pkg/compiler/test/inference/data/throw.dart
index 57fa354..611f8ea 100644
--- a/pkg/compiler/test/inference/data/throw.dart
+++ b/pkg/compiler/test/inference/data/throw.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
unconditionalThrow();
conditionalThrow();
@@ -14,19 +14,19 @@
/// Method that throws unconditionally.
////////////////////////////////////////////////////////////////////////////////
-/*member: unconditionalThrow:[empty]*/
+/*member: unconditionalThrow:[empty|powerset=0]*/
unconditionalThrow() => throw 'foo';
////////////////////////////////////////////////////////////////////////////////
/// Method that throws conditionally.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalThrow:[null]*/
-_conditionalThrow(/*[exact=JSBool]*/ o) {
+/*member: _conditionalThrow:[null|powerset=1]*/
+_conditionalThrow(/*[exact=JSBool|powerset=0]*/ o) {
if (o) throw 'foo';
}
-/*member: conditionalThrow:[null]*/
+/*member: conditionalThrow:[null|powerset=1]*/
conditionalThrow() {
_conditionalThrow(true);
_conditionalThrow(false);
@@ -36,13 +36,13 @@
/// Method that throws conditionally and return 0.
////////////////////////////////////////////////////////////////////////////////
-/*member: _conditionalThrowReturn:[exact=JSUInt31]*/
-_conditionalThrowReturn(/*[exact=JSBool]*/ o) {
+/*member: _conditionalThrowReturn:[exact=JSUInt31|powerset=0]*/
+_conditionalThrowReturn(/*[exact=JSBool|powerset=0]*/ o) {
if (o) throw 'foo';
return 0;
}
-/*member: conditionalThrowReturn:[null]*/
+/*member: conditionalThrowReturn:[null|powerset=1]*/
conditionalThrowReturn() {
_conditionalThrowReturn(true);
_conditionalThrowReturn(false);
@@ -52,7 +52,7 @@
/// Method that rethrows unconditionally.
////////////////////////////////////////////////////////////////////////////////
-/*member: unconditionalRethrow:[empty]*/
+/*member: unconditionalRethrow:[empty|powerset=0]*/
unconditionalRethrow() {
try {
throw 'foo';
diff --git a/pkg/compiler/test/inference/data/try.dart b/pkg/compiler/test/inference/data/try.dart
index 35eb6f8..1e0d674 100644
--- a/pkg/compiler/test/inference/data/try.dart
+++ b/pkg/compiler/test/inference/data/try.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
emptyTryCatch();
emptyTryFinally();
@@ -25,13 +25,13 @@
/// Parameter passed through an empty try-catch statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _emptyTryCatch:[exact=JSUInt31]*/
-_emptyTryCatch(/*[exact=JSUInt31]*/ o) {
+/*member: _emptyTryCatch:[exact=JSUInt31|powerset=0]*/
+_emptyTryCatch(/*[exact=JSUInt31|powerset=0]*/ o) {
try {} catch (e) {}
return o;
}
-/*member: emptyTryCatch:[null]*/
+/*member: emptyTryCatch:[null|powerset=1]*/
emptyTryCatch() {
_emptyTryCatch(0);
}
@@ -40,13 +40,13 @@
/// Parameter passed through an empty try-finally statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _emptyTryFinally:[exact=JSUInt31]*/
-_emptyTryFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _emptyTryFinally:[exact=JSUInt31|powerset=0]*/
+_emptyTryFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
try {} finally {}
return o;
}
-/*member: emptyTryFinally:[null]*/
+/*member: emptyTryFinally:[null|powerset=1]*/
emptyTryFinally() {
_emptyTryFinally(0);
}
@@ -55,14 +55,14 @@
/// Parameter passed through an empty try-catch-finally statement.
////////////////////////////////////////////////////////////////////////////////
-/*member: _emptyTryCatchFinally:[exact=JSUInt31]*/
-_emptyTryCatchFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _emptyTryCatchFinally:[exact=JSUInt31|powerset=0]*/
+_emptyTryCatchFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
try {} catch (e) {
} finally {}
return o;
}
-/*member: emptyTryCatchFinally:[null]*/
+/*member: emptyTryCatchFinally:[null|powerset=1]*/
emptyTryCatchFinally() {
_emptyTryCatchFinally(0);
}
@@ -71,7 +71,7 @@
/// A try-catch statement with an assignment in the try block.
////////////////////////////////////////////////////////////////////////////////
-/*member: tryCatchAssignmentInTry:[null|exact=JSUInt31]*/
+/*member: tryCatchAssignmentInTry:[null|exact=JSUInt31|powerset=1]*/
tryCatchAssignmentInTry() {
int? o = 0;
try {
@@ -84,7 +84,7 @@
/// A try-catch statement with an assignment in the catch block.
////////////////////////////////////////////////////////////////////////////////
-/*member: tryCatchAssignmentInCatch:[null|exact=JSUInt31]*/
+/*member: tryCatchAssignmentInCatch:[null|exact=JSUInt31|powerset=1]*/
tryCatchAssignmentInCatch() {
int? o = 0;
try {} catch (e) {
@@ -97,7 +97,7 @@
/// A try-finally statement with an assignment in the finally clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: tryFinallyAssignmentInFinally:[null]*/
+/*member: tryFinallyAssignmentInFinally:[null|powerset=1]*/
tryFinallyAssignmentInFinally() {
int? o = 0;
try {} finally {
@@ -111,7 +111,7 @@
/// block.
////////////////////////////////////////////////////////////////////////////////
-/*member: tryCatchAssignmentInTryCatch:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: tryCatchAssignmentInTryCatch:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
tryCatchAssignmentInTryCatch() {
dynamic o = 0;
try {
@@ -127,7 +127,7 @@
/// finally block.
////////////////////////////////////////////////////////////////////////////////
-/*member: tryCatchAssignmentInTryFinally:[null]*/
+/*member: tryCatchAssignmentInTryFinally:[null|powerset=1]*/
tryCatchAssignmentInTryFinally() {
dynamic o = 0;
try {
@@ -143,15 +143,15 @@
/// catch clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: _tryCatchParameterAssignmentInTry:[null|exact=JSUInt31]*/
-_tryCatchParameterAssignmentInTry(/*[exact=JSUInt31]*/ o) {
+/*member: _tryCatchParameterAssignmentInTry:[null|exact=JSUInt31|powerset=1]*/
+_tryCatchParameterAssignmentInTry(/*[exact=JSUInt31|powerset=0]*/ o) {
try {
o = null;
} catch (e) {}
return o;
}
-/*member: tryCatchParameterAssignmentInTry:[null]*/
+/*member: tryCatchParameterAssignmentInTry:[null|powerset=1]*/
tryCatchParameterAssignmentInTry() {
_tryCatchParameterAssignmentInTry(0);
}
@@ -161,15 +161,15 @@
/// catch clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: _tryCatchParameterAssignmentInCatch:[null|exact=JSUInt31]*/
-_tryCatchParameterAssignmentInCatch(/*[exact=JSUInt31]*/ o) {
+/*member: _tryCatchParameterAssignmentInCatch:[null|exact=JSUInt31|powerset=1]*/
+_tryCatchParameterAssignmentInCatch(/*[exact=JSUInt31|powerset=0]*/ o) {
try {} catch (e) {
o = null;
}
return o;
}
-/*member: tryCatchParameterAssignmentInCatch:[null]*/
+/*member: tryCatchParameterAssignmentInCatch:[null|powerset=1]*/
tryCatchParameterAssignmentInCatch() {
_tryCatchParameterAssignmentInCatch(0);
}
@@ -179,15 +179,15 @@
/// finally clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: _tryFinallyParameterAssignmentInFinally:[null]*/
-_tryFinallyParameterAssignmentInFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _tryFinallyParameterAssignmentInFinally:[null|powerset=1]*/
+_tryFinallyParameterAssignmentInFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
try {} finally {
o = null;
}
return o;
}
-/*member: tryFinallyParameterAssignmentInFinally:[null]*/
+/*member: tryFinallyParameterAssignmentInFinally:[null|powerset=1]*/
tryFinallyParameterAssignmentInFinally() {
_tryFinallyParameterAssignmentInFinally(0);
}
@@ -197,8 +197,8 @@
/// catch clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: _tryCatchParameterAssignmentInTryCatch:Union(null, [exact=JSString], [exact=JSUInt31])*/
-_tryCatchParameterAssignmentInTryCatch(/*[exact=JSUInt31]*/ o) {
+/*member: _tryCatchParameterAssignmentInTryCatch:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
+_tryCatchParameterAssignmentInTryCatch(/*[exact=JSUInt31|powerset=0]*/ o) {
try {
o = '';
} catch (e) {
@@ -207,7 +207,7 @@
return o;
}
-/*member: tryCatchParameterAssignmentInTryCatch:[null]*/
+/*member: tryCatchParameterAssignmentInTryCatch:[null|powerset=1]*/
tryCatchParameterAssignmentInTryCatch() {
_tryCatchParameterAssignmentInTryCatch(0);
}
@@ -217,8 +217,8 @@
/// finally clause.
////////////////////////////////////////////////////////////////////////////////
-/*member: _tryFinallyParameterAssignmentInTryFinally:[null]*/
-_tryFinallyParameterAssignmentInTryFinally(/*[exact=JSUInt31]*/ o) {
+/*member: _tryFinallyParameterAssignmentInTryFinally:[null|powerset=1]*/
+_tryFinallyParameterAssignmentInTryFinally(/*[exact=JSUInt31|powerset=0]*/ o) {
try {
o = '';
} finally {
@@ -227,7 +227,7 @@
return o;
}
-/*member: tryFinallyParameterAssignmentInTryFinally:[null]*/
+/*member: tryFinallyParameterAssignmentInTryFinally:[null|powerset=1]*/
tryFinallyParameterAssignmentInTryFinally() {
_tryFinallyParameterAssignmentInTryFinally(0);
}
diff --git a/pkg/compiler/test/inference/data/try_catch.dart b/pkg/compiler/test/inference/data/try_catch.dart
index e1ed4a4..140f49a 100644
--- a/pkg/compiler/test/inference/data/try_catch.dart
+++ b/pkg/compiler/test/inference/data/try_catch.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: returnInt1:[exact=JSUInt31]*/
+/*member: returnInt1:[exact=JSUInt31|powerset=0]*/
returnInt1() {
var a = 42;
try {
@@ -11,7 +11,7 @@
return a;
}
-/*member: returnDyn1:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn1:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn1() {
dynamic a = 42;
try {
@@ -20,7 +20,7 @@
return a;
}
-/*member: returnInt2:[exact=JSUInt31]*/
+/*member: returnInt2:[exact=JSUInt31|powerset=0]*/
returnInt2() {
var a = 42;
try {
@@ -31,7 +31,7 @@
return a;
}
-/*member: returnDyn2:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn2:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn2() {
dynamic a = 42;
try {
@@ -42,7 +42,7 @@
return a;
}
-/*member: returnInt3:[exact=JSUInt31]*/
+/*member: returnInt3:[exact=JSUInt31|powerset=0]*/
returnInt3() {
dynamic a = 42;
try {
@@ -55,7 +55,7 @@
return a;
}
-/*member: returnDyn3:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn3:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn3() {
dynamic a = 42;
try {
@@ -70,7 +70,7 @@
return a;
}
-/*member: returnInt4:[exact=JSUInt31]*/
+/*member: returnInt4:[exact=JSUInt31|powerset=0]*/
returnInt4() {
var a = 42;
try {
@@ -85,10 +85,10 @@
return a;
}
-/*member: returnDyn4:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn4:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn4() {
dynamic a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 'foo';
} catch (e) {}
@@ -96,10 +96,10 @@
return a;
}
-/*member: returnInt5:[exact=JSUInt31]*/
+/*member: returnInt5:[exact=JSUInt31|powerset=0]*/
returnInt5() {
var a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 42;
} catch (e) {}
@@ -107,10 +107,10 @@
return a;
}
-/*member: returnDyn5:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnDyn5:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnDyn5() {
dynamic a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 'foo';
print(a);
@@ -120,7 +120,7 @@
return a;
}
-/*member: returnInt6:[subclass=JSInt]*/
+/*member: returnInt6:[subclass=JSInt|powerset=0]*/
returnInt6() {
try {
throw 42;
@@ -131,7 +131,7 @@
return 42;
}
-/*member: returnDyn6:[subclass=Object]*/
+/*member: returnDyn6:[subclass=Object|powerset=0]*/
returnDyn6() {
try {
throw 42;
@@ -140,7 +140,7 @@
}
}
-/*member: returnDyn7:[null|subclass=Object]*/
+/*member: returnDyn7:[null|subclass=Object|powerset=1]*/
returnDyn7() {
try {
// Do nothing
@@ -149,7 +149,7 @@
}
}
-/*member: returnInt7:[exact=JSUInt31]*/
+/*member: returnInt7:[exact=JSUInt31|powerset=0]*/
returnInt7() {
dynamic a = 'foo';
try {
@@ -159,7 +159,7 @@
return 2;
}
-/*member: returnInt8:[exact=JSUInt31]*/
+/*member: returnInt8:[exact=JSUInt31|powerset=0]*/
returnInt8() {
dynamic a = 'foo';
try {
@@ -174,10 +174,10 @@
return a;
}
-/*member: returnUnion1:[null|exact=JSUInt31]*/
+/*member: returnUnion1:[null|exact=JSUInt31|powerset=1]*/
returnUnion1() {
dynamic a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 'foo';
throw a;
@@ -188,7 +188,7 @@
return a;
}
-/*member: returnUnion2:Union(null, [exact=JSBool], [exact=JSString], [exact=JSUInt31])*/
+/*member: returnUnion2:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
returnUnion2() {
dynamic a = 42;
try {
@@ -200,10 +200,10 @@
return a;
}
-/*member: returnUnion3:Union([exact=JSString], [exact=JSUInt31])*/
+/*member: returnUnion3:Union([exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnUnion3() {
dynamic a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 'foo';
a = null;
@@ -216,10 +216,10 @@
return a;
}
-/*member: returnUnion4:Union(null, [exact=JSString], [exact=JSUInt31])*/
+/*member: returnUnion4:Union(null, [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
returnUnion4() {
dynamic a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 'foo';
a = null;
@@ -228,10 +228,10 @@
return a;
}
-/*member: returnUnion5:Union([exact=JSBool], [exact=JSUInt31])*/
+/*member: returnUnion5:Union([exact=JSBool|powerset=0], [exact=JSUInt31|powerset=0], powerset: 0)*/
returnUnion5() {
dynamic a = 42;
- if (a /*invoke: [exact=JSUInt31]*/ == 54) {
+ if (a /*invoke: [exact=JSUInt31|powerset=0]*/ == 54) {
try {
a = 'foo';
} catch (e) {
@@ -243,7 +243,7 @@
return a;
}
-/*member: returnUnion6:Union(null, [exact=JSBool], [exact=JSString])*/
+/*member: returnUnion6:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
returnUnion6() {
dynamic a = 42;
try {
@@ -257,7 +257,7 @@
return a;
}
-/*member: returnUnion7:Union([exact=JSBool], [exact=JSString])*/
+/*member: returnUnion7:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
returnUnion7() {
dynamic a = 42;
try {
@@ -269,7 +269,7 @@
}
}
-/*member: returnUnion8:[null|exact=JSUInt31]*/
+/*member: returnUnion8:[null|exact=JSUInt31|powerset=1]*/
returnUnion8() {
dynamic a = 5.5;
try {
@@ -284,7 +284,7 @@
return a;
}
-/*member: returnUnion9:[exact=JSBool]*/
+/*member: returnUnion9:[exact=JSBool|powerset=0]*/
returnUnion9() {
dynamic a = 5.5;
try {
@@ -298,7 +298,7 @@
return a;
}
-/*member: returnUnion10:Value([exact=JSBool], value: true)*/
+/*member: returnUnion10:Value([exact=JSBool|powerset=0], value: true, powerset: 0)*/
returnUnion10() {
dynamic a = 5;
try {
@@ -314,7 +314,7 @@
}
}
-/*member: returnNull1:[null]*/
+/*member: returnNull1:[null|powerset=1]*/
returnNull1() {
dynamic a = 42;
try {
@@ -327,7 +327,7 @@
return a;
}
-/*member: returnNull2:[null]*/
+/*member: returnNull2:[null|powerset=1]*/
returnNull2() {
dynamic a = 5.5;
try {
@@ -342,118 +342,118 @@
return a;
}
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.a:[null|exact=JSUInt31]*/
+ /*member: A.a:[null|exact=JSUInt31|powerset=1]*/
dynamic a;
- /*member: A.b:Union(null, [exact=JSUInt31], [exact=JsLinkedHashMap])*/
+ /*member: A.b:Union(null, [exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 1)*/
dynamic b;
- /*member: A.c:Union(null, [exact=JSBool], [exact=JSString])*/
+ /*member: A.c:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
dynamic c;
- /*member: A.d:Value([null|exact=JSString], value: "foo")*/
+ /*member: A.d:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
dynamic d;
- /*member: A.e:Union(null, [exact=JSBool], [exact=JSString])*/
+ /*member: A.e:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
dynamic e;
- /*member: A.f:Union(null, [exact=JSBool], [exact=JSString])*/
+ /*member: A.f:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
dynamic f;
- /*member: A.g:Union(null, [exact=JSExtendableArray], [exact=JSNumNotInt], [exact=JSString])*/
+ /*member: A.g:Union(null, [exact=JSExtendableArray|powerset=0], [exact=JSNumNotInt|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
dynamic g;
- /*member: A.testa:Union([exact=JSBool], [exact=JSString])*/
+ /*member: A.testa:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
testa() {
try {
return 'foo';
} catch (e) {
return true;
} finally {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
a = 55;
}
}
- /*member: A.testb:Union([exact=JSBool], [exact=JSString])*/
+ /*member: A.testb:Union([exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 0)*/
testb() {
try {
return 'foo';
} catch (e) {
return true;
} finally {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
b = 55;
}
return b;
}
- /*member: A.testc:Union(null, [exact=JSBool], [exact=JSString])*/
+ /*member: A.testc:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
testc() {
try {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
c = 'foo';
- throw /*[exact=A]*/ c;
+ throw /*[exact=A|powerset=0]*/ c;
} catch (e) {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
c = false;
} catch (e) {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
c = true;
}
- return /*[exact=A]*/ c;
+ return /*[exact=A|powerset=0]*/ c;
}
- /*member: A.testd:Value([null|exact=JSString], value: "foo")*/
+ /*member: A.testd:Value([null|exact=JSString|powerset=1], value: "foo", powerset: 1)*/
testd() {
try {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
d = 'foo';
} catch (e) {
// Do nothing
}
- return /*[exact=A]*/ d;
+ return /*[exact=A|powerset=0]*/ d;
}
- /*member: A.teste:Union(null, [exact=JSBool], [exact=JSString])*/
+ /*member: A.teste:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], powerset: 1)*/
teste() {
try {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
e = 'foo';
} catch (_) {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
e = true;
}
- return /*[exact=A]*/ e;
+ return /*[exact=A|powerset=0]*/ e;
}
- /*member: A.testf:Union(null, [exact=JSBool], [exact=JSString], [exact=JSUInt31])*/
+ /*member: A.testf:Union(null, [exact=JSBool|powerset=0], [exact=JSString|powerset=0], [exact=JSUInt31|powerset=0], powerset: 1)*/
testf() {
try {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
f = 'foo';
return 3;
} catch (e) {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
f = true;
}
- return /*[exact=A]*/ f;
+ return /*[exact=A|powerset=0]*/ f;
}
- /*member: A.testg:Union(null, [exact=JSUInt31], [exact=JsLinkedHashMap])*/
+ /*member: A.testg:Union(null, [exact=JSUInt31|powerset=0], [exact=JsLinkedHashMap|powerset=0], powerset: 1)*/
testg() {
try {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
g = 'foo';
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
g = 5.5;
} catch (e) {
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
g = [];
- /*update: [exact=A]*/
+ /*update: [exact=A|powerset=0]*/
b = {};
}
- return /*[exact=A]*/ b;
+ return /*[exact=A|powerset=0]*/ b;
}
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
returnInt1();
returnDyn1();
@@ -484,11 +484,11 @@
returnNull2();
final a = A();
- a. /*invoke: [exact=A]*/ testa();
- a. /*invoke: [exact=A]*/ testb();
- a. /*invoke: [exact=A]*/ testc();
- a. /*invoke: [exact=A]*/ testd();
- a. /*invoke: [exact=A]*/ teste();
- a. /*invoke: [exact=A]*/ testf();
- a. /*invoke: [exact=A]*/ testg();
+ a. /*invoke: [exact=A|powerset=0]*/ testa();
+ a. /*invoke: [exact=A|powerset=0]*/ testb();
+ a. /*invoke: [exact=A|powerset=0]*/ testc();
+ a. /*invoke: [exact=A|powerset=0]*/ testd();
+ a. /*invoke: [exact=A|powerset=0]*/ teste();
+ a. /*invoke: [exact=A|powerset=0]*/ testf();
+ a. /*invoke: [exact=A|powerset=0]*/ testg();
}
diff --git a/pkg/compiler/test/inference/data/type_literal.dart b/pkg/compiler/test/inference/data/type_literal.dart
index cd89563..7a48622 100644
--- a/pkg/compiler/test/inference/data/type_literal.dart
+++ b/pkg/compiler/test/inference/data/type_literal.dart
@@ -2,25 +2,26 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
typeLiteral();
typeLiteralToString();
typeLiteralSubstring();
}
-/*member: typeLiteral:[exact=_Type]*/
+/*member: typeLiteral:[exact=_Type|powerset=0]*/
typeLiteral() => Object;
-/*member: typeLiteralToString:[exact=JSString]*/
-typeLiteralToString() => (Object). /*invoke: [exact=_Type]*/ toString();
+/*member: typeLiteralToString:[exact=JSString|powerset=0]*/
+typeLiteralToString() =>
+ (Object). /*invoke: [exact=_Type|powerset=0]*/ toString();
-/*member: typeLiteralSubstring:[exact=JSString]*/
+/*member: typeLiteralSubstring:[exact=JSString|powerset=0]*/
typeLiteralSubstring() {
- String name = (List). /*invoke: [exact=_Type]*/ toString();
- name = name. /*invoke: [exact=JSString]*/ substring(
+ String name = (List). /*invoke: [exact=_Type|powerset=0]*/ toString();
+ name = name. /*invoke: [exact=JSString|powerset=0]*/ substring(
0,
- name. /*invoke: [exact=JSString]*/ indexOf('<'),
+ name. /*invoke: [exact=JSString|powerset=0]*/ indexOf('<'),
);
return name;
}
diff --git a/pkg/compiler/test/inference/data/unregister_call.dart b/pkg/compiler/test/inference/data/unregister_call.dart
index 9c46f2d..cabb5315 100644
--- a/pkg/compiler/test/inference/data/unregister_call.dart
+++ b/pkg/compiler/test/inference/data/unregister_call.dart
@@ -2,27 +2,28 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: a:Value([exact=JSString], value: "")*/
+/*member: a:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
var a = '';
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {
- /*member: A.+:[exact=JSUInt31]*/
- operator +(/*[exact=JSUInt31]*/ other) => other;
+ /*member: A.+:[exact=JSUInt31|powerset=0]*/
+ operator +(/*[exact=JSUInt31|powerset=0]*/ other) => other;
}
-/*member: foo:[exact=JSString]*/
+/*member: foo:[exact=JSString|powerset=0]*/
foo() {
// The following '+' call will first say that it may call A::+,
// String::+, or int::+. After all methods have been analyzed, we know
// that a is of type String, and therefore, this method cannot call
// A::+. Therefore, the type of the parameter of A::+ will be the
// one given by the other calls.
- return a /*invoke: Value([exact=JSString], value: "")*/ + 'foo';
+ return a /*invoke: Value([exact=JSString|powerset=0], value: "", powerset: 0)*/ +
+ 'foo';
}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
- A() /*invoke: [exact=A]*/ + 42;
+ A() /*invoke: [exact=A|powerset=0]*/ + 42;
foo();
}
diff --git a/pkg/compiler/test/inference/data/use_static_types.dart b/pkg/compiler/test/inference/data/use_static_types.dart
index c0c0464..aa52bdd 100644
--- a/pkg/compiler/test/inference/data/use_static_types.dart
+++ b/pkg/compiler/test/inference/data/use_static_types.dart
@@ -2,81 +2,81 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: A.:[exact=A]*/
+/*member: A.:[exact=A|powerset=0]*/
class A {}
-/*member: B.:[exact=B]*/
+/*member: B.:[exact=B|powerset=0]*/
class B extends A {}
-/*member: C.:[exact=C]*/
+/*member: C.:[exact=C|powerset=0]*/
class C {}
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
invokeFunctions();
invokeGenericClasses();
invokeGenericMethods();
}
-/*member: invokeFunction1:[subclass=A]*/
-invokeFunction1(A Function() /*[subclass=Closure]*/ f) {
+/*member: invokeFunction1:[subclass=A|powerset=0]*/
+invokeFunction1(A Function() /*[subclass=Closure|powerset=0]*/ f) {
return f();
}
-/*member: invokeFunction2:[exact=B]*/
-invokeFunction2(B Function() /*[subclass=Closure]*/ f) {
+/*member: invokeFunction2:[exact=B|powerset=0]*/
+invokeFunction2(B Function() /*[subclass=Closure|powerset=0]*/ f) {
return f();
}
-/*member: invokeFunction3:[exact=C]*/
-invokeFunction3(C Function() /*[subclass=Closure]*/ f) {
+/*member: invokeFunction3:[exact=C|powerset=0]*/
+invokeFunction3(C Function() /*[subclass=Closure|powerset=0]*/ f) {
return f();
}
-/*member: genericFunction:[null|subclass=Object]*/
-T genericFunction<T>(T Function() /*[subclass=Closure]*/ f) => f();
+/*member: genericFunction:[null|subclass=Object|powerset=1]*/
+T genericFunction<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
-/*member: invokeGenericFunction1:[subclass=A]*/
+/*member: invokeGenericFunction1:[subclass=A|powerset=0]*/
invokeGenericFunction1() {
- return genericFunction<A>(/*[exact=A]*/ () => A());
+ return genericFunction<A>(/*[exact=A|powerset=0]*/ () => A());
}
-/*member: invokeGenericFunction2:[exact=B]*/
+/*member: invokeGenericFunction2:[exact=B|powerset=0]*/
invokeGenericFunction2() {
- return genericFunction<B>(/*[exact=B]*/ () => B());
+ return genericFunction<B>(/*[exact=B|powerset=0]*/ () => B());
}
-/*member: invokeGenericFunction3:[exact=C]*/
+/*member: invokeGenericFunction3:[exact=C|powerset=0]*/
invokeGenericFunction3() {
- return genericFunction<C>(/*[exact=C]*/ () => C());
+ return genericFunction<C>(/*[exact=C|powerset=0]*/ () => C());
}
-/*member: invokeGenericLocalFunction1:[subclass=A]*/
+/*member: invokeGenericLocalFunction1:[subclass=A|powerset=0]*/
invokeGenericLocalFunction1() {
- /*[null|subclass=Object]*/
- T local<T>(T Function() /*[subclass=Closure]*/ f) => f();
- return local<A>(/*[exact=A]*/ () => A());
+ /*[null|subclass=Object|powerset=1]*/
+ T local<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
+ return local<A>(/*[exact=A|powerset=0]*/ () => A());
}
-/*member: invokeGenericLocalFunction2:[exact=B]*/
+/*member: invokeGenericLocalFunction2:[exact=B|powerset=0]*/
invokeGenericLocalFunction2() {
- /*[null|subclass=Object]*/
- T local<T>(T Function() /*[subclass=Closure]*/ f) => f();
- return local<B>(/*[exact=B]*/ () => B());
+ /*[null|subclass=Object|powerset=1]*/
+ T local<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
+ return local<B>(/*[exact=B|powerset=0]*/ () => B());
}
-/*member: invokeGenericLocalFunction3:[exact=C]*/
+/*member: invokeGenericLocalFunction3:[exact=C|powerset=0]*/
invokeGenericLocalFunction3() {
- /*[null|subclass=Object]*/
- T local<T>(T Function() /*[subclass=Closure]*/ f) => f();
- return local<C>(/*[exact=C]*/ () => C());
+ /*[null|subclass=Object|powerset=1]*/
+ T local<T>(T Function() /*[subclass=Closure|powerset=0]*/ f) => f();
+ return local<C>(/*[exact=C|powerset=0]*/ () => C());
}
-/*member: invokeFunctions:[null]*/
+/*member: invokeFunctions:[null|powerset=1]*/
invokeFunctions() {
- invokeFunction1(/*[exact=A]*/ () => A());
- invokeFunction2(/*[exact=B]*/ () => B());
- invokeFunction3(/*[exact=C]*/ () => C());
+ invokeFunction1(/*[exact=A|powerset=0]*/ () => A());
+ invokeFunction2(/*[exact=B|powerset=0]*/ () => B());
+ invokeFunction3(/*[exact=C|powerset=0]*/ () => C());
invokeGenericFunction1();
invokeGenericFunction2();
invokeGenericFunction3();
@@ -86,214 +86,232 @@
}
class GenericClass<T> {
- /*member: GenericClass.field:Union([exact=C], [subclass=A])*/
+ /*member: GenericClass.field:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
final T field;
- /*member: GenericClass.functionTypedField:[subclass=Closure]*/
+ /*member: GenericClass.functionTypedField:[subclass=Closure|powerset=0]*/
final T Function() functionTypedField;
- /*member: GenericClass.:[exact=GenericClass]*/
- GenericClass(this. /*Union([exact=C], [subclass=A])*/ field)
- : functionTypedField = ( /*Union([exact=C], [subclass=A])*/ () => field);
+ /*member: GenericClass.:[exact=GenericClass|powerset=0]*/
+ GenericClass(
+ this. /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ field,
+ ) : functionTypedField =
+ ( /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ () =>
+ field);
- /*member: GenericClass.getter:Union([exact=C], [subclass=A])*/
- T get getter => /*[subclass=GenericClass]*/ field;
+ /*member: GenericClass.getter:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+ T get getter => /*[subclass=GenericClass|powerset=0]*/ field;
- /*member: GenericClass.functionTypedGetter:[subclass=Closure]*/
- T Function() get functionTypedGetter => /*[subclass=GenericClass]*/
+ /*member: GenericClass.functionTypedGetter:[subclass=Closure|powerset=0]*/
+ T Function() get functionTypedGetter => /*[subclass=GenericClass|powerset=0]*/
functionTypedField;
- /*member: GenericClass.method:Union([exact=C], [subclass=A])*/
- T method() => /*[subclass=GenericClass]*/ field;
+ /*member: GenericClass.method:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+ T method() => /*[subclass=GenericClass|powerset=0]*/ field;
- /*member: GenericClass.functionTypedMethod:[subclass=Closure]*/
- T Function() functionTypedMethod() => /*[subclass=GenericClass]*/
+ /*member: GenericClass.functionTypedMethod:[subclass=Closure|powerset=0]*/
+ T Function() functionTypedMethod() => /*[subclass=GenericClass|powerset=0]*/
functionTypedField;
}
class GenericSubclass<T> extends GenericClass<T> {
- /*member: GenericSubclass.:[exact=GenericSubclass]*/
- GenericSubclass(T /*Union([exact=C], [subclass=A])*/ field) : super(field);
+ /*member: GenericSubclass.:[exact=GenericSubclass|powerset=0]*/
+ GenericSubclass(
+ T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+ field,
+ ) : super(field);
- /*member: GenericSubclass.superField:Union([exact=C], [subclass=A])*/
+ /*member: GenericSubclass.superField:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
superField() => super.field;
- /*member: GenericSubclass.superGetter:Union([exact=C], [subclass=A])*/
+ /*member: GenericSubclass.superGetter:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
superGetter() => super.getter;
- /*member: GenericSubclass.superMethod:Union([exact=C], [subclass=A])*/
+ /*member: GenericSubclass.superMethod:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
superMethod() => super.method();
- /*member: GenericSubclass.superFieldInvoke:[null|subclass=Object]*/
+ /*member: GenericSubclass.superFieldInvoke:[null|subclass=Object|powerset=1]*/
superFieldInvoke() => super.functionTypedField();
- /*member: GenericSubclass.superGetterInvoke:[null|subclass=Object]*/
+ /*member: GenericSubclass.superGetterInvoke:[null|subclass=Object|powerset=1]*/
superGetterInvoke() => super.functionTypedGetter();
- /*member: GenericSubclass.superMethodInvoke:[null|subclass=Object]*/
+ /*member: GenericSubclass.superMethodInvoke:[null|subclass=Object|powerset=1]*/
superMethodInvoke() => super.functionTypedMethod()();
}
-/*member: invokeInstanceMethod1:[subclass=A]*/
-invokeInstanceMethod1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
- c. /*invoke: [exact=GenericClass]*/ method();
+/*member: invokeInstanceMethod1:[subclass=A|powerset=0]*/
+invokeInstanceMethod1(GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*invoke: [exact=GenericClass|powerset=0]*/ method();
-/*member: invokeInstanceMethod2:[exact=B]*/
-invokeInstanceMethod2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
- c. /*invoke: [exact=GenericClass]*/ method();
+/*member: invokeInstanceMethod2:[exact=B|powerset=0]*/
+invokeInstanceMethod2(GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*invoke: [exact=GenericClass|powerset=0]*/ method();
-/*member: invokeInstanceMethod3:[exact=C]*/
-invokeInstanceMethod3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
- c. /*invoke: [exact=GenericClass]*/ method();
+/*member: invokeInstanceMethod3:[exact=C|powerset=0]*/
+invokeInstanceMethod3(GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*invoke: [exact=GenericClass|powerset=0]*/ method();
-/*member: invokeInstanceGetter1:[subclass=A]*/
-invokeInstanceGetter1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
- c. /*[exact=GenericClass]*/ getter;
+/*member: invokeInstanceGetter1:[subclass=A|powerset=0]*/
+invokeInstanceGetter1(GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*[exact=GenericClass|powerset=0]*/ getter;
-/*member: invokeInstanceGetter2:[exact=B]*/
-invokeInstanceGetter2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
- c. /*[exact=GenericClass]*/ getter;
+/*member: invokeInstanceGetter2:[exact=B|powerset=0]*/
+invokeInstanceGetter2(GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*[exact=GenericClass|powerset=0]*/ getter;
-/*member: invokeInstanceGetter3:[exact=C]*/
-invokeInstanceGetter3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
- c. /*[exact=GenericClass]*/ getter;
+/*member: invokeInstanceGetter3:[exact=C|powerset=0]*/
+invokeInstanceGetter3(GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*[exact=GenericClass|powerset=0]*/ getter;
-/*member: accessInstanceField1:[subclass=A]*/
-accessInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
- c. /*[exact=GenericClass]*/ field;
+/*member: accessInstanceField1:[subclass=A|powerset=0]*/
+accessInstanceField1(GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*[exact=GenericClass|powerset=0]*/ field;
-/*member: accessInstanceField2:[exact=B]*/
-accessInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
- c. /*[exact=GenericClass]*/ field;
+/*member: accessInstanceField2:[exact=B|powerset=0]*/
+accessInstanceField2(GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*[exact=GenericClass|powerset=0]*/ field;
-/*member: accessInstanceField3:[exact=C]*/
-accessInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
- c. /*[exact=GenericClass]*/ field;
+/*member: accessInstanceField3:[exact=C|powerset=0]*/
+accessInstanceField3(GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c) =>
+ c. /*[exact=GenericClass|powerset=0]*/ field;
-/*member: invokeSuperMethod1:Union([exact=C], [subclass=A])*/
-invokeSuperMethod1(GenericSubclass<A> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superMethod();
+/*member: invokeSuperMethod1:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperMethod1(
+ GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethod();
-/*member: invokeSuperMethod2:Union([exact=C], [subclass=A])*/
-invokeSuperMethod2(GenericSubclass<B> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superMethod();
+/*member: invokeSuperMethod2:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperMethod2(
+ GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethod();
-/*member: invokeSuperMethod3:Union([exact=C], [subclass=A])*/
-invokeSuperMethod3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superMethod();
+/*member: invokeSuperMethod3:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperMethod3(
+ GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethod();
-/*member: invokeSuperGetter1:Union([exact=C], [subclass=A])*/
-invokeSuperGetter1(GenericSubclass<A> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superGetter();
+/*member: invokeSuperGetter1:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperGetter1(
+ GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetter();
-/*member: invokeSuperGetter2:Union([exact=C], [subclass=A])*/
-invokeSuperGetter2(GenericSubclass<B> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superGetter();
+/*member: invokeSuperGetter2:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperGetter2(
+ GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetter();
-/*member: invokeSuperGetter3:Union([exact=C], [subclass=A])*/
-invokeSuperGetter3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superGetter();
+/*member: invokeSuperGetter3:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+invokeSuperGetter3(
+ GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetter();
-/*member: accessSuperField1:Union([exact=C], [subclass=A])*/
-accessSuperField1(GenericSubclass<A> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superField();
+/*member: accessSuperField1:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+accessSuperField1(
+ GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superField();
-/*member: accessSuperField2:Union([exact=C], [subclass=A])*/
-accessSuperField2(GenericSubclass<B> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superField();
+/*member: accessSuperField2:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+accessSuperField2(
+ GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superField();
-/*member: accessSuperField3:Union([exact=C], [subclass=A])*/
-accessSuperField3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
- c. /*invoke: [exact=GenericSubclass]*/ superField();
+/*member: accessSuperField3:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+accessSuperField3(
+ GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superField();
-/*member: invokeFunctionTypedInstanceMethod1:[subclass=A]*/
+/*member: invokeFunctionTypedInstanceMethod1:[subclass=A|powerset=0]*/
invokeFunctionTypedInstanceMethod1(
- GenericClass<A> /*[exact=GenericClass]*/ c,
-) => c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
+ GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericClass|powerset=0]*/ functionTypedMethod()();
-/*member: invokeFunctionTypedInstanceMethod2:[exact=B]*/
+/*member: invokeFunctionTypedInstanceMethod2:[exact=B|powerset=0]*/
invokeFunctionTypedInstanceMethod2(
- GenericClass<B> /*[exact=GenericClass]*/ c,
-) => c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
+ GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericClass|powerset=0]*/ functionTypedMethod()();
-/*member: invokeFunctionTypedInstanceMethod3:[exact=C]*/
+/*member: invokeFunctionTypedInstanceMethod3:[exact=C|powerset=0]*/
invokeFunctionTypedInstanceMethod3(
- GenericClass<C> /*[exact=GenericClass]*/ c,
-) => c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
+ GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericClass|powerset=0]*/ functionTypedMethod()();
-/*member: invokeFunctionTypedInstanceGetter1:[subclass=A]*/
+/*member: invokeFunctionTypedInstanceGetter1:[subclass=A|powerset=0]*/
invokeFunctionTypedInstanceGetter1(
- GenericClass<A> /*[exact=GenericClass]*/ c,
-) => c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
+ GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedGetter /*invoke: [exact=GenericClass|powerset=0]*/ ();
-/*member: invokeFunctionTypedInstanceGetter2:[exact=B]*/
+/*member: invokeFunctionTypedInstanceGetter2:[exact=B|powerset=0]*/
invokeFunctionTypedInstanceGetter2(
- GenericClass<B> /*[exact=GenericClass]*/ c,
-) => c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
+ GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedGetter /*invoke: [exact=GenericClass|powerset=0]*/ ();
-/*member: invokeFunctionTypedInstanceGetter3:[exact=C]*/
+/*member: invokeFunctionTypedInstanceGetter3:[exact=C|powerset=0]*/
invokeFunctionTypedInstanceGetter3(
- GenericClass<C> /*[exact=GenericClass]*/ c,
-) => c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
+ GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedGetter /*invoke: [exact=GenericClass|powerset=0]*/ ();
-/*member: invokeFunctionTypedInstanceField1:[subclass=A]*/
-invokeFunctionTypedInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
- c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
+/*member: invokeFunctionTypedInstanceField1:[subclass=A|powerset=0]*/
+invokeFunctionTypedInstanceField1(
+ GenericClass<A> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedField /*invoke: [exact=GenericClass|powerset=0]*/ ();
-/*member: invokeFunctionTypedInstanceField2:[exact=B]*/
-invokeFunctionTypedInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
- c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
+/*member: invokeFunctionTypedInstanceField2:[exact=B|powerset=0]*/
+invokeFunctionTypedInstanceField2(
+ GenericClass<B> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedField /*invoke: [exact=GenericClass|powerset=0]*/ ();
-/*member: invokeFunctionTypedInstanceField3:[exact=C]*/
-invokeFunctionTypedInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
- c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
+/*member: invokeFunctionTypedInstanceField3:[exact=C|powerset=0]*/
+invokeFunctionTypedInstanceField3(
+ GenericClass<C> /*[exact=GenericClass|powerset=0]*/ c,
+) => c.functionTypedField /*invoke: [exact=GenericClass|powerset=0]*/ ();
-/*member: invokeFunctionTypedSuperMethod1:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperMethod1:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperMethod1(
- GenericSubclass<A> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superMethodInvoke();
+ GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethodInvoke();
-/*member: invokeFunctionTypedSuperMethod2:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperMethod2:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperMethod2(
- GenericSubclass<B> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superMethodInvoke();
+ GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethodInvoke();
-/*member: invokeFunctionTypedSuperMethod3:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperMethod3:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperMethod3(
- GenericSubclass<C> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superMethodInvoke();
+ GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superMethodInvoke();
-/*member: invokeFunctionTypedSuperGetter1:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperGetter1:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperGetter1(
- GenericSubclass<A> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superGetterInvoke();
+ GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetterInvoke();
-/*member: invokeFunctionTypedSuperGetter2:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperGetter2:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperGetter2(
- GenericSubclass<B> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superGetterInvoke();
+ GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetterInvoke();
-/*member: invokeFunctionTypedSuperGetter3:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperGetter3:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperGetter3(
- GenericSubclass<C> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superGetterInvoke();
+ GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superGetterInvoke();
-/*member: invokeFunctionTypedSuperField1:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperField1:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperField1(
- GenericSubclass<A> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superFieldInvoke();
+ GenericSubclass<A> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superFieldInvoke();
-/*member: invokeFunctionTypedSuperField2:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperField2:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperField2(
- GenericSubclass<B> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superFieldInvoke();
+ GenericSubclass<B> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superFieldInvoke();
-/*member: invokeFunctionTypedSuperField3:[null|subclass=Object]*/
+/*member: invokeFunctionTypedSuperField3:[null|subclass=Object|powerset=1]*/
invokeFunctionTypedSuperField3(
- GenericSubclass<C> /*[exact=GenericSubclass]*/ c,
-) => c. /*invoke: [exact=GenericSubclass]*/ superFieldInvoke();
+ GenericSubclass<C> /*[exact=GenericSubclass|powerset=0]*/ c,
+) => c. /*invoke: [exact=GenericSubclass|powerset=0]*/ superFieldInvoke();
-/*member: invokeGenericClasses:[null]*/
+/*member: invokeGenericClasses:[null|powerset=1]*/
invokeGenericClasses() {
invokeInstanceMethod1(new GenericClass<A>(new A()));
invokeInstanceMethod2(new GenericClass<B>(new B()));
@@ -336,130 +354,145 @@
invokeFunctionTypedSuperField3(new GenericSubclass<C>(new C()));
}
-/*member: genericMethod:Union([exact=C], [subclass=A])*/
-T genericMethod<T>(T /*Union([exact=C], [subclass=A])*/ t) => t;
+/*member: genericMethod:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+T genericMethod<T>(
+ T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
+) => t;
-/*member: functionTypedGenericMethod:[subclass=Closure]*/
+/*member: functionTypedGenericMethod:[subclass=Closure|powerset=0]*/
T Function() functionTypedGenericMethod<T>(
- T /*Union([exact=C], [subclass=A])*/ t,
+ T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
) =>
- /*Union([exact=C], [subclass=A])*/ () => t;
+ /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ () =>
+ t;
-/*member: Class.:[exact=Class]*/
+/*member: Class.:[exact=Class|powerset=0]*/
class Class {
- /*member: Class.genericMethod:Union([exact=C], [subclass=A])*/
- T genericMethod<T>(T /*Union([exact=C], [subclass=A])*/ t) => t;
+ /*member: Class.genericMethod:Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/
+ T genericMethod<T>(
+ T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
+ ) => t;
- /*member: Class.functionTypedGenericMethod:[subclass=Closure]*/
+ /*member: Class.functionTypedGenericMethod:[subclass=Closure|powerset=0]*/
T Function() functionTypedGenericMethod<T>(
- T /*Union([exact=C], [subclass=A])*/ t,
+ T /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ t,
) =>
- /*Union([exact=C], [subclass=A])*/ () => t;
+ /*Union([exact=C|powerset=0], [subclass=A|powerset=0], powerset: 0)*/ () =>
+ t;
}
-/*member: Subclass.:[exact=Subclass]*/
+/*member: Subclass.:[exact=Subclass|powerset=0]*/
class Subclass extends Class {
- /*member: Subclass.superMethod1:[subclass=A]*/
+ /*member: Subclass.superMethod1:[subclass=A|powerset=0]*/
superMethod1() {
return super.genericMethod<A>(new A());
}
- /*member: Subclass.superMethod2:[exact=B]*/
+ /*member: Subclass.superMethod2:[exact=B|powerset=0]*/
superMethod2() {
return super.genericMethod<B>(new B());
}
- /*member: Subclass.superMethod3:[exact=C]*/
+ /*member: Subclass.superMethod3:[exact=C|powerset=0]*/
superMethod3() {
return super.genericMethod<C>(new C());
}
- /*member: Subclass.functionTypedSuperMethod1:[subclass=A]*/
+ /*member: Subclass.functionTypedSuperMethod1:[subclass=A|powerset=0]*/
functionTypedSuperMethod1() {
return super.functionTypedGenericMethod<A>(new A())();
}
- /*member: Subclass.functionTypedSuperMethod2:[exact=B]*/
+ /*member: Subclass.functionTypedSuperMethod2:[exact=B|powerset=0]*/
functionTypedSuperMethod2() {
return super.functionTypedGenericMethod<B>(new B())();
}
- /*member: Subclass.functionTypedSuperMethod3:[exact=C]*/
+ /*member: Subclass.functionTypedSuperMethod3:[exact=C|powerset=0]*/
functionTypedSuperMethod3() {
return super.functionTypedGenericMethod<C>(new C())();
}
}
-/*member: invokeGenericMethod1:[subclass=A]*/
-invokeGenericMethod1(A /*[exact=A]*/ a) => genericMethod<A>(a);
+/*member: invokeGenericMethod1:[subclass=A|powerset=0]*/
+invokeGenericMethod1(A /*[exact=A|powerset=0]*/ a) => genericMethod<A>(a);
-/*member: invokeGenericMethod2:[exact=B]*/
-invokeGenericMethod2(B /*[exact=B]*/ b) => genericMethod<B>(b);
+/*member: invokeGenericMethod2:[exact=B|powerset=0]*/
+invokeGenericMethod2(B /*[exact=B|powerset=0]*/ b) => genericMethod<B>(b);
-/*member: invokeGenericMethod3:[exact=C]*/
-invokeGenericMethod3(C /*[exact=C]*/ c) => genericMethod<C>(c);
+/*member: invokeGenericMethod3:[exact=C|powerset=0]*/
+invokeGenericMethod3(C /*[exact=C|powerset=0]*/ c) => genericMethod<C>(c);
-/*member: invokeGenericInstanceMethod1:[subclass=A]*/
+/*member: invokeGenericInstanceMethod1:[subclass=A|powerset=0]*/
invokeGenericInstanceMethod1() =>
- Class(). /*invoke: [exact=Class]*/ genericMethod<A>(new A());
+ Class(). /*invoke: [exact=Class|powerset=0]*/ genericMethod<A>(new A());
-/*member: invokeGenericInstanceMethod2:[exact=B]*/
+/*member: invokeGenericInstanceMethod2:[exact=B|powerset=0]*/
invokeGenericInstanceMethod2() =>
- Class(). /*invoke: [exact=Class]*/ genericMethod<B>(new B());
+ Class(). /*invoke: [exact=Class|powerset=0]*/ genericMethod<B>(new B());
-/*member: invokeGenericInstanceMethod3:[exact=C]*/
+/*member: invokeGenericInstanceMethod3:[exact=C|powerset=0]*/
invokeGenericInstanceMethod3() =>
- Class(). /*invoke: [exact=Class]*/ genericMethod<C>(new C());
+ Class(). /*invoke: [exact=Class|powerset=0]*/ genericMethod<C>(new C());
-/*member: invokeGenericSuperMethod1:[subclass=A]*/
+/*member: invokeGenericSuperMethod1:[subclass=A|powerset=0]*/
invokeGenericSuperMethod1() =>
- Subclass(). /*invoke: [exact=Subclass]*/ superMethod1();
+ Subclass(). /*invoke: [exact=Subclass|powerset=0]*/ superMethod1();
-/*member: invokeGenericSuperMethod2:[exact=B]*/
+/*member: invokeGenericSuperMethod2:[exact=B|powerset=0]*/
invokeGenericSuperMethod2() =>
- Subclass(). /*invoke: [exact=Subclass]*/ superMethod2();
+ Subclass(). /*invoke: [exact=Subclass|powerset=0]*/ superMethod2();
-/*member: invokeGenericSuperMethod3:[exact=C]*/
+/*member: invokeGenericSuperMethod3:[exact=C|powerset=0]*/
invokeGenericSuperMethod3() =>
- Subclass(). /*invoke: [exact=Subclass]*/ superMethod3();
+ Subclass(). /*invoke: [exact=Subclass|powerset=0]*/ superMethod3();
-/*member: invokeFunctionTypedGenericMethod1:[subclass=A]*/
-invokeFunctionTypedGenericMethod1(A /*[exact=A]*/ a) =>
+/*member: invokeFunctionTypedGenericMethod1:[subclass=A|powerset=0]*/
+invokeFunctionTypedGenericMethod1(A /*[exact=A|powerset=0]*/ a) =>
functionTypedGenericMethod<A>(a)();
-/*member: invokeFunctionTypedGenericMethod2:[exact=B]*/
-invokeFunctionTypedGenericMethod2(B /*[exact=B]*/ b) =>
+/*member: invokeFunctionTypedGenericMethod2:[exact=B|powerset=0]*/
+invokeFunctionTypedGenericMethod2(B /*[exact=B|powerset=0]*/ b) =>
functionTypedGenericMethod<B>(b)();
-/*member: invokeFunctionTypedGenericMethod3:[exact=C]*/
-invokeFunctionTypedGenericMethod3(C /*[exact=C]*/ c) =>
+/*member: invokeFunctionTypedGenericMethod3:[exact=C|powerset=0]*/
+invokeFunctionTypedGenericMethod3(C /*[exact=C|powerset=0]*/ c) =>
functionTypedGenericMethod<C>(c)();
-/*member: invokeFunctionTypedGenericInstanceMethod1:[subclass=A]*/
+/*member: invokeFunctionTypedGenericInstanceMethod1:[subclass=A|powerset=0]*/
invokeFunctionTypedGenericInstanceMethod1() =>
- Class(). /*invoke: [exact=Class]*/ functionTypedGenericMethod<A>(new A())();
+ Class(). /*invoke: [exact=Class|powerset=0]*/ functionTypedGenericMethod<A>(
+ new A(),
+ )();
-/*member: invokeFunctionTypedGenericInstanceMethod2:[exact=B]*/
+/*member: invokeFunctionTypedGenericInstanceMethod2:[exact=B|powerset=0]*/
invokeFunctionTypedGenericInstanceMethod2() =>
- Class(). /*invoke: [exact=Class]*/ functionTypedGenericMethod<B>(new B())();
+ Class(). /*invoke: [exact=Class|powerset=0]*/ functionTypedGenericMethod<B>(
+ new B(),
+ )();
-/*member: invokeFunctionTypedGenericInstanceMethod3:[exact=C]*/
+/*member: invokeFunctionTypedGenericInstanceMethod3:[exact=C|powerset=0]*/
invokeFunctionTypedGenericInstanceMethod3() =>
- Class(). /*invoke: [exact=Class]*/ functionTypedGenericMethod<C>(new C())();
+ Class(). /*invoke: [exact=Class|powerset=0]*/ functionTypedGenericMethod<C>(
+ new C(),
+ )();
-/*member: invokeFunctionTypedGenericSuperMethod1:[subclass=A]*/
+/*member: invokeFunctionTypedGenericSuperMethod1:[subclass=A|powerset=0]*/
invokeFunctionTypedGenericSuperMethod1() =>
- Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod1();
+ Subclass()
+ . /*invoke: [exact=Subclass|powerset=0]*/ functionTypedSuperMethod1();
-/*member: invokeFunctionTypedGenericSuperMethod2:[exact=B]*/
+/*member: invokeFunctionTypedGenericSuperMethod2:[exact=B|powerset=0]*/
invokeFunctionTypedGenericSuperMethod2() =>
- Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod2();
+ Subclass()
+ . /*invoke: [exact=Subclass|powerset=0]*/ functionTypedSuperMethod2();
-/*member: invokeFunctionTypedGenericSuperMethod3:[exact=C]*/
+/*member: invokeFunctionTypedGenericSuperMethod3:[exact=C|powerset=0]*/
invokeFunctionTypedGenericSuperMethod3() =>
- Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod3();
+ Subclass()
+ . /*invoke: [exact=Subclass|powerset=0]*/ functionTypedSuperMethod3();
-/*member: invokeGenericMethods:[null]*/
+/*member: invokeGenericMethods:[null|powerset=1]*/
invokeGenericMethods() {
invokeGenericMethod1(new A());
invokeGenericMethod2(new B());
diff --git a/pkg/compiler/test/inference/data/while.dart b/pkg/compiler/test/inference/data/while.dart
index cc82f71..401b492 100644
--- a/pkg/compiler/test/inference/data/while.dart
+++ b/pkg/compiler/test/inference/data/while.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
simpleWhile();
whileNull();
@@ -20,24 +20,24 @@
/// Simple int based while loop.
////////////////////////////////////////////////////////////////////////////////
-/*member: simpleWhile:[null]*/
+/*member: simpleWhile:[null|powerset=1]*/
simpleWhile() {
var i = 0;
- while (i /*invoke: [subclass=JSPositiveInt]*/ < 10) {
- i = i /*invoke: [subclass=JSPositiveInt]*/ + 1;
+ while (i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ < 10) {
+ i = i /*invoke: [subclass=JSPositiveInt|powerset=0]*/ + 1;
}
- i. /*invoke: [subclass=JSPositiveInt]*/ abs();
+ i. /*invoke: [subclass=JSPositiveInt|powerset=0]*/ abs();
}
////////////////////////////////////////////////////////////////////////////////
/// While loop with null test.
////////////////////////////////////////////////////////////////////////////////
-/*member: whileNull:Value([null|exact=JSString], value: "null")*/
+/*member: whileNull:Value([null|exact=JSString|powerset=1], value: "null", powerset: 1)*/
whileNull() {
var o;
while (o == null) {
- o = o. /*invoke: [null]*/ toString();
+ o = o. /*invoke: [null|powerset=1]*/ toString();
}
return o;
}
@@ -46,11 +46,11 @@
/// While loop with not-null test.
////////////////////////////////////////////////////////////////////////////////
-/*member: whileNotNull:[exact=JSString]*/
+/*member: whileNotNull:[exact=JSString|powerset=0]*/
whileNotNull() {
var o = '';
- while (o /*invoke: [exact=JSString]*/ != null) {
- o = o. /*invoke: [exact=JSString]*/ toString();
+ while (o /*invoke: [exact=JSString|powerset=0]*/ != null) {
+ o = o. /*invoke: [exact=JSString|powerset=0]*/ toString();
}
return o;
}
@@ -59,11 +59,11 @@
/// While loop with null test with an unreachable body.
////////////////////////////////////////////////////////////////////////////////
-/*member: whileNullUnreachable:Value([exact=JSString], value: "")*/
+/*member: whileNullUnreachable:Value([exact=JSString|powerset=0], value: "", powerset: 0)*/
whileNullUnreachable() {
var o = '';
- while (o /*invoke: [exact=JSString]*/ == null) {
- o = o. /*invoke: [empty]*/ toString();
+ while (o /*invoke: [exact=JSString|powerset=0]*/ == null) {
+ o = o. /*invoke: [empty|powerset=0]*/ toString();
}
return o;
}
@@ -72,11 +72,11 @@
/// While loop with not-null test with an unreachable body.
////////////////////////////////////////////////////////////////////////////////
-/*member: whileNotNullUnreachable:[null]*/
+/*member: whileNotNullUnreachable:[null|powerset=1]*/
whileNotNullUnreachable() {
var o = null;
while (o != null) {
- o = o. /*invoke: [empty]*/ toString();
+ o = o. /*invoke: [empty|powerset=0]*/ toString();
}
return o;
}
@@ -86,32 +86,32 @@
/// object to the [_whileUnion1] method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class1.:[exact=Class1]*/
+/*member: Class1.:[exact=Class1|powerset=0]*/
class Class1 {
- /*member: Class1.field:[null|exact=Class2]*/
+ /*member: Class1.field:[null|exact=Class2|powerset=1]*/
var field;
}
-/*member: Class2.:[exact=Class2]*/
+/*member: Class2.:[exact=Class2|powerset=0]*/
class Class2 {
- /*member: Class2.field:[null|exact=Class1]*/
+ /*member: Class2.field:[null|exact=Class1|powerset=1]*/
var field;
}
-/*member: _whileUnion1:Union(null, [exact=Class1], [exact=Class2])*/
-_whileUnion1(/*[exact=Class1]*/ o) {
+/*member: _whileUnion1:Union(null, [exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 1)*/
+_whileUnion1(/*[exact=Class1|powerset=0]*/ o) {
while (o != null) {
- o = o. /*Union([exact=Class1], [exact=Class2])*/ field;
+ o = o. /*Union([exact=Class1|powerset=0], [exact=Class2|powerset=0], powerset: 0)*/ field;
}
return o;
}
-/*member: whileUnion1:[null]*/
+/*member: whileUnion1:[null|powerset=1]*/
whileUnion1() {
var c1 = Class1();
var c2 = Class2();
- c1. /*update: [exact=Class1]*/ field = c2;
- c2. /*update: [exact=Class2]*/ field = c1;
+ c1. /*update: [exact=Class1|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class2|powerset=0]*/ field = c1;
_whileUnion1(c1);
}
@@ -120,32 +120,32 @@
/// object to the [_whileUnion2] method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class3.:[exact=Class3]*/
+/*member: Class3.:[exact=Class3|powerset=0]*/
class Class3 {
- /*member: Class3.field:[null|exact=Class4]*/
+ /*member: Class3.field:[null|exact=Class4|powerset=1]*/
var field;
}
-/*member: Class4.:[exact=Class4]*/
+/*member: Class4.:[exact=Class4|powerset=0]*/
class Class4 {
- /*member: Class4.field:[null|exact=Class3]*/
+ /*member: Class4.field:[null|exact=Class3|powerset=1]*/
var field;
}
-/*member: _whileUnion2:Union(null, [exact=Class3], [exact=Class4])*/
-_whileUnion2(/*[exact=Class4]*/ o) {
+/*member: _whileUnion2:Union(null, [exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 1)*/
+_whileUnion2(/*[exact=Class4|powerset=0]*/ o) {
while (o != null) {
- o = o. /*Union([exact=Class3], [exact=Class4])*/ field;
+ o = o. /*Union([exact=Class3|powerset=0], [exact=Class4|powerset=0], powerset: 0)*/ field;
}
return o;
}
-/*member: whileUnion2:[null]*/
+/*member: whileUnion2:[null|powerset=1]*/
whileUnion2() {
var c1 = Class3();
var c2 = Class4();
- c1. /*update: [exact=Class3]*/ field = c2;
- c2. /*update: [exact=Class4]*/ field = c1;
+ c1. /*update: [exact=Class3|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class4|powerset=0]*/ field = c1;
_whileUnion2(c2);
}
@@ -154,32 +154,34 @@
/// objects to the [_whileUnion3] method.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class5.:[exact=Class5]*/
+/*member: Class5.:[exact=Class5|powerset=0]*/
class Class5 {
- /*member: Class5.field:[null|exact=Class6]*/
+ /*member: Class5.field:[null|exact=Class6|powerset=1]*/
var field;
}
-/*member: Class6.:[exact=Class6]*/
+/*member: Class6.:[exact=Class6|powerset=0]*/
class Class6 {
- /*member: Class6.field:[null|exact=Class5]*/
+ /*member: Class6.field:[null|exact=Class5|powerset=1]*/
var field;
}
-/*member: _whileUnion3:Union(null, [exact=Class5], [exact=Class6])*/
-_whileUnion3(/*Union([exact=Class5], [exact=Class6])*/ o) {
+/*member: _whileUnion3:Union(null, [exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 1)*/
+_whileUnion3(
+ /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ o,
+) {
while (o != null) {
- o = o. /*Union([exact=Class5], [exact=Class6])*/ field;
+ o = o. /*Union([exact=Class5|powerset=0], [exact=Class6|powerset=0], powerset: 0)*/ field;
}
return o;
}
-/*member: whileUnion3:[null]*/
+/*member: whileUnion3:[null|powerset=1]*/
whileUnion3() {
var c1 = Class5();
var c2 = Class6();
- c1. /*update: [exact=Class5]*/ field = c2;
- c2. /*update: [exact=Class6]*/ field = c1;
+ c1. /*update: [exact=Class5|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class6|powerset=0]*/ field = c1;
_whileUnion3(c1);
_whileUnion3(c2);
}
@@ -188,32 +190,32 @@
/// While loop with is test that mixes field accesses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class7.:[exact=Class7]*/
+/*member: Class7.:[exact=Class7|powerset=0]*/
class Class7 {
- /*member: Class7.field:[null|exact=Class8]*/
+ /*member: Class7.field:[null|exact=Class8|powerset=1]*/
var field;
}
-/*member: Class8.:[exact=Class8]*/
+/*member: Class8.:[exact=Class8|powerset=0]*/
class Class8 {
- /*member: Class8.field:[null|exact=Class7]*/
+ /*member: Class8.field:[null|exact=Class7|powerset=1]*/
var field;
}
-/*member: _whileIs:Union(null, [exact=Class7], [exact=Class8])*/
-_whileIs(/*[exact=Class7]*/ o) {
+/*member: _whileIs:Union(null, [exact=Class7|powerset=0], [exact=Class8|powerset=0], powerset: 1)*/
+_whileIs(/*[exact=Class7|powerset=0]*/ o) {
while (o is Class7) {
- o = o. /*[exact=Class7]*/ field;
+ o = o. /*[exact=Class7|powerset=0]*/ field;
}
return o;
}
-/*member: whileIs:[null]*/
+/*member: whileIs:[null|powerset=1]*/
whileIs() {
var c1 = Class7();
var c2 = Class8();
- c1. /*update: [exact=Class7]*/ field = c2;
- c2. /*update: [exact=Class8]*/ field = c1;
+ c1. /*update: [exact=Class7|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class8|powerset=0]*/ field = c1;
_whileIs(c1);
}
@@ -221,31 +223,31 @@
/// While loop with is-not test that mixes field accesses.
////////////////////////////////////////////////////////////////////////////////
-/*member: Class9.:[exact=Class9]*/
+/*member: Class9.:[exact=Class9|powerset=0]*/
class Class9 {
- /*member: Class9.field:[null|exact=Class10]*/
+ /*member: Class9.field:[null|exact=Class10|powerset=1]*/
var field;
}
-/*member: Class10.:[exact=Class10]*/
+/*member: Class10.:[exact=Class10|powerset=0]*/
class Class10 {
- /*member: Class10.field:[null|exact=Class9]*/
+ /*member: Class10.field:[null|exact=Class9|powerset=1]*/
var field;
}
-/*member: _whileIsNot:Union(null, [exact=Class10], [exact=Class9])*/
-_whileIsNot(/*[exact=Class9]*/ o) {
+/*member: _whileIsNot:Union(null, [exact=Class10|powerset=0], [exact=Class9|powerset=0], powerset: 1)*/
+_whileIsNot(/*[exact=Class9|powerset=0]*/ o) {
while (o is! Class10) {
- o = o. /*Union(null, [exact=Class10], [exact=Class9])*/ field;
+ o = o. /*Union(null, [exact=Class10|powerset=0], [exact=Class9|powerset=0], powerset: 1)*/ field;
}
return o;
}
-/*member: whileIsNot:[null]*/
+/*member: whileIsNot:[null|powerset=1]*/
whileIsNot() {
var c1 = Class9();
var c2 = Class10();
- c1. /*update: [exact=Class9]*/ field = c2;
- c2. /*update: [exact=Class10]*/ field = c1;
+ c1. /*update: [exact=Class9|powerset=0]*/ field = c2;
+ c2. /*update: [exact=Class10|powerset=0]*/ field = c1;
_whileIsNot(c1);
}
diff --git a/pkg/compiler/test/inference/data/yield.dart b/pkg/compiler/test/inference/data/yield.dart
index 3f89f21..6edc20d 100644
--- a/pkg/compiler/test/inference/data/yield.dart
+++ b/pkg/compiler/test/inference/data/yield.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*member: main:[null]*/
+/*member: main:[null|powerset=1]*/
main() {
yieldZero();
yieldList();
@@ -15,7 +15,7 @@
// Yield a single integer.
////////////////////////////////////////////////////////////////////////////////
-/*member: yieldZero:[exact=_SyncStarIterable]*/
+/*member: yieldZero:[exact=_SyncStarIterable|powerset=0]*/
yieldZero() sync* {
yield 0;
}
@@ -24,7 +24,7 @@
// Yield a list of integers.
////////////////////////////////////////////////////////////////////////////////
-/*member: yieldList:[exact=_SyncStarIterable]*/
+/*member: yieldList:[exact=_SyncStarIterable|powerset=0]*/
yieldList() sync* {
yield [0, 1, 2, 3];
}
@@ -33,7 +33,7 @@
// Yield star of a list of integers.
////////////////////////////////////////////////////////////////////////////////
-/*member: yieldStarList:[exact=_SyncStarIterable]*/
+/*member: yieldStarList:[exact=_SyncStarIterable|powerset=0]*/
yieldStarList() sync* {
yield* [0, 1, 2, 3];
}
@@ -42,7 +42,7 @@
// Yield multiple integers.
////////////////////////////////////////////////////////////////////////////////
-/*member: yieldMany:[exact=_SyncStarIterable]*/
+/*member: yieldMany:[exact=_SyncStarIterable|powerset=0]*/
yieldMany() sync* {
yield 0;
yield 1;
@@ -54,7 +54,7 @@
// Yield an integer and a string.
////////////////////////////////////////////////////////////////////////////////
-/*member: yieldIntAndString:[exact=_SyncStarIterable]*/
+/*member: yieldIntAndString:[exact=_SyncStarIterable|powerset=0]*/
yieldIntAndString() sync* {
yield 0;
yield '';