#1260: Weak reference tests updated.
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t04.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t04.dart
index 322e6ed..55b1a84 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t04.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t04.dart
@@ -26,7 +26,6 @@
Expect.throws(() {
S s = p1.ref;
WeakReference wr = WeakReference<S>(s);
- print(wr.target);
});
} finally {
calloc.free(p1);
@@ -36,7 +35,6 @@
Expect.throws(() {
S s = p2.ref;
WeakReference wr = WeakReference(s);
- print(wr.target);
});
} finally {
calloc.free(p2);
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t05.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t05.dart
index 177a497..c03b294 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t05.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/expando_key_t05.dart
@@ -28,7 +28,6 @@
Expect.throws(() {
U u = p1.ref;
WeakReference wr = WeakReference<U>(u);
- print(wr.target);
});
} finally {
calloc.free(p1);
@@ -38,7 +37,6 @@
Expect.throws(() {
U u = p2.ref;
WeakReference wr = WeakReference(u);
- print(wr.target);
});
} finally {
calloc.free(p2);
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart
index 65e26dc..5158d56 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart
@@ -28,14 +28,17 @@
dynamic d;
@pragma('vm:never-inline')
+C? getNullObject() => null;
+
+@pragma('vm:never-inline')
WeakReference<C> createWeakReference() {
C? c = C(42);
d = c;
WeakReference<C> wr = WeakReference(c);
Expect.equals(c, wr.target);
- c = null;
+ c = getNullObject();
+ Expect.isNull(c);
triggerGc();
- Expect.isNotNull(wr.target);
Expect.equals(d, wr.target);
return wr;
}
@@ -43,8 +46,9 @@
main() {
WeakReference<C> wr = createWeakReference();
triggerGc();
- Expect.isNotNull(wr.target);
- d = 42;
+ Expect.equals("C(42)", wr.target.toString());
+ d = getNullObject();
+ Expect.isNull(d);
triggerGc();
Expect.isNull(wr.target);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart
index 56b3aa9..9188a23 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart
@@ -25,25 +25,35 @@
String toString() => "C($id)";
}
-main() async {
+@pragma('vm:never-inline')
+C? getNullObject() => null;
+
+@pragma('vm:never-inline')
+Future<WeakReference> createWeakReference() async {
C? c1 = C(42);
WeakReference<C> wr = WeakReference(c1);
asyncStart();
Future<C?>.delayed(Duration(milliseconds: 1), () => c1).then((C? c2) async {
- Expect.isNotNull(wr.target);
Expect.equals(c1, wr.target);
triggerGc();
await Future.delayed(Duration(seconds: 1));
Expect.isNotNull(wr.target);
- c2 = null;
+ // Need to be sure that indeed c2 is null and the code is not optimized
+ c2 = getNullObject();
+ Expect.isNull(c2);
triggerGc();
Expect.isNull(wr.target);
asyncEnd();
});
await Future.delayed(Duration(milliseconds: 10));
- Expect.isNotNull(wr.target);
Expect.equals(c1, wr.target);
- c1 = null;
+ c1 = getNullObject();
+ Expect.isNull(c1);
+ return wr;
+}
+
+main() async {
+ WeakReference wr = await createWeakReference();
triggerGc();
- Expect.isNotNull(wr.target);
+ Expect.equals("C(42)", wr.target.toString());
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart
index c348ab2..6098ef2 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart
@@ -25,24 +25,32 @@
String toString() => "C($id)";
}
-main() async {
+@pragma('vm:never-inline')
+C? getNullObject() => null;
+
+@pragma('vm:never-inline')
+Future<WeakReference> createWeakReference() async {
C? c1 = C(42);
WeakReference<C> wr = WeakReference(c1);
asyncStart();
Future<C?>.delayed(Duration(milliseconds: 1), () => c1).then((C? c2) async {
- Expect.isNotNull(wr.target);
Expect.equals(c1, wr.target);
triggerGc();
- Expect.isNotNull(wr.target);
- c2 = null;
+ Expect.equals(c1, wr.target);
+ // Need to be sure that indeed c2 is null and the code is not optimized
+ c2 = getNullObject();
+ Expect.isNull(c2);
triggerGc();
- Expect.isNotNull(wr.target);
+ Expect.equals(c1, wr.target);
asyncEnd();
});
- Expect.isNotNull(wr.target);
Expect.equals(c1, wr.target);
+ return wr;
+}
+
+main() async {
+ WeakReference wr = await createWeakReference();
await Future.delayed(Duration(seconds: 1));
- c1 = null;
triggerGc();
Expect.isNull(wr.target);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart
index 8fa7593..f218028 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart
@@ -28,14 +28,21 @@
C? c1;
@pragma('vm:never-inline')
+C? getNullObject() => null;
+
+@pragma('vm:never-inline')
+C? getC() => C(0);
+
+@pragma('vm:never-inline')
WeakReference<C> createWeakReference() {
C? c2 = C(42);
c1 = c2;
WeakReference<C> wr = WeakReference(c2);
Expect.equals(c2, wr.target);
- c2 = null;
+ // Need to be sure that indeed c2 is null and the code is not optimized
+ c2 = getNullObject();
+ Expect.isNull(c2);
triggerGc();
- Expect.isNotNull(wr.target);
Expect.equals(c1, wr.target);
return wr;
}
@@ -43,8 +50,9 @@
main() {
WeakReference<C> wr = createWeakReference();
triggerGc();
- Expect.isNotNull(wr.target);
- c1 = C(-1);
+ Expect.equals("C(42)", wr.target.toString());
+ c1 = getC();
+ Expect.isNotNull(c1);
triggerGc();
Expect.isNull(wr.target);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart
index 1617474..b47991a 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart
@@ -38,10 +38,17 @@
return [wr1, wr2];
}
+@pragma('vm:never-inline')
+void checkReferences(List<WeakReference<C>> refs) {
+ C? c1 = refs[0].target;
+ C? c2 = refs[1].target;
+ Expect.isTrue(c1 == null || c1.toString() == "C(42)");
+ Expect.isTrue(c2 == null || c2.toString() == "C(42)");
+}
+
main() {
List<WeakReference<C>> refs = createWeakReference();
- Expect.isNotNull(refs[0].target);
- Expect.isNotNull(refs[1].target);
+ checkReferences(refs);
triggerGc();
Expect.isNull(refs[0].target);
Expect.isNull(refs[1].target);
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t09.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t09.dart
index d32b355..21bb8b4 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t09.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t09.dart
@@ -30,13 +30,19 @@
C c = C(42);
WeakReference<C> wr = WeakReference(c);
Future<C>.delayed(Duration(milliseconds: 10), () => c);
- c = C(-1);
return wr;
}
-main() {
+@pragma('vm:never-inline')
+void checkReference(WeakReference<C> ref) {
+ C? c = ref.target;
+ Expect.isTrue(c == null || c.toString() == "C(42)");
+}
+
+main() async {
WeakReference<C> wr = createWeakReference();
- Expect.isNotNull(wr.target);
+ checkReference(wr);
+ await Future.delayed(Duration(seconds: 1));
triggerGc();
Expect.isNull(wr.target);
}
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t01.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t01.dart
index 486598e..edbf403 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t01.dart
@@ -16,11 +16,9 @@
main() {
Expect.throws(() {
WeakReference wr = WeakReference<String>("Lily was here");
- print(wr.target);
});
Expect.throws(() {
String s = "Lily was here";
WeakReference wr = WeakReference(s);
- print(wr.target);
});
}
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t02.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t02.dart
index 732f55e..2869999 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t02.dart
@@ -16,26 +16,20 @@
main() {
Expect.throws(() {
WeakReference wr = WeakReference<int>(42);
- print(wr.target);
});
Expect.throws(() {
WeakReference wr = WeakReference(42);
- print(wr.target);
});
Expect.throws(() {
WeakReference wr = WeakReference<double>(3.14);
- print(wr.target);
});
Expect.throws(() {
WeakReference wr = WeakReference(3.14);
- print(wr.target);
});
Expect.throws(() {
WeakReference wr = WeakReference<num>(42);
- print(wr.target);
});
Expect.throws(() {
WeakReference wr = WeakReference<num>(3.14);
- print(wr.target);
});
}
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t06.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t06.dart
index 18edf7b..9a65124 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t06.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/expando_key_t06.dart
@@ -16,6 +16,5 @@
Expect.throws(() {
dynamic d = null;
WeakReference wr = WeakReference(d);
- print(wr.target);
});
}
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/weak_reference_target_t01.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/weak_reference_target_t01.dart
index d52007c..5241847 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/weak_reference_target_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/WeakReference/weak_reference_target_t01.dart
@@ -21,7 +21,7 @@
}
main() {
- C? c = C(42);
+ C c = C(42);
WeakReference<C> wr = WeakReference(c);
Expect.equals(c, wr.target);
}