Fixes dart-lang/sdk#48412. Different issues fixed in Finalizer tests
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t01.dart
index 9d6312b..04de11f 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t01.dart
@@ -25,14 +25,8 @@
main() async {
A a = A();
- finalizer.attach(A(), null);
+ finalizer.attach(a, null);
Expect.equals(0, called);
- await triggerGcWithDelay();
- Expect.equals(0, called);
- await triggerGcWithDelay();
- Expect.equals(0, called);
- await triggerGcWithDelay();
- Expect.equals(0, called);
- await triggerGcWithDelay();
+ await triggerGcWithDelay(repeat: 5);
Expect.equals(0, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t02.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t02.dart
index 4046a2d..98b13b1 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t02.dart
@@ -23,8 +23,13 @@
called++;
});
-main() async {
+@pragma('vm:never-inline')
+void attachToFinalizer() {
finalizer.attach(Object(), "abc");
+}
+
+main() async {
+ attachToFinalizer();
await triggerGcWithDelay(); // Call FullGC
Expect.equals(1, called); // Callback function should be called only once
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t03.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t03.dart
index 60a2625..fb14bc8 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t03.dart
@@ -23,11 +23,14 @@
called++;
});
-main() {
+@pragma('vm:never-inline')
+void attachToFinalizer() {
Object? obj = Object();
finalizer.attach(obj, "Testme");
- print(obj);
- obj = null;
+}
+
+main() {
+ attachToFinalizer();
triggerGcWithDelay();
Expect.equals(1, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t04.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t04.dart
index a073f19..5ca418e 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t04.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/Finalizer_A01_t04.dart
@@ -17,7 +17,7 @@
import '../../../../Utils/expect.dart';
int called = 0;
-Object? liveObject;
+
final Finalizer finalizer = Finalizer((token) {
Expect.equals(123, token);
@@ -25,19 +25,24 @@
});
@pragma('vm:never-inline')
-test() async {
+attachToFinalizer() async {
+ Object? liveObject;
Object object = Object();
finalizer.attach(object, 123);
await triggerGcWithDelay();
Expect.equals(0, called);
liveObject = object;
+ () async {
+ await triggerGcWithDelay();
+ Expect.equals(0, called);
+ }();
+ print(liveObject);
}
main() async {
- test();
+ attachToFinalizer();
await triggerGcWithDelay();
- Expect.equals(0, called);
- liveObject = null;
+ Expect.equals(1, called);
await triggerGcWithDelay();
Expect.equals(1, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t03.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t03.dart
index 3ab993d..3564b93 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t03.dart
@@ -53,7 +53,6 @@
attachToFinalizer2();
await triggerGcWithDelay();
Expect.equals(15, returnedToken);
-
await triggerGcWithDelay();
Expect.equals(15, returnedToken);
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t04.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t04.dart
index 4a4f526..27851d2 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t04.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A01_t04.dart
@@ -27,14 +27,16 @@
cnt++;
});
-main() async {
+@pragma('vm:never-inline')
+void attachAndDetach() {
A detachToken = A();
- {
- Object value = Object();
- finalizer.attach(value, "Finalization token", detach: detachToken);
- value = Object();
- }
+ Object value = Object();
+ finalizer.attach(value, "Finalization token", detach: detachToken);
finalizer.detach(detachToken);
+}
+
+main() async {
+ attachAndDetach();
await triggerGcWithDelay();
Expect.equals(0, cnt);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t01.dart
index db2e794..8b718f4 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t01.dart
@@ -18,12 +18,12 @@
called = true;
});
-void test(Object o) async {
+void _trigger(Object o) async {
await triggerGcWithDelay();
Expect.isFalse(called);
}
-Object test1(Object obj) => obj;
+Object foo(Object obj) => obj;
main() async {
Object value = Object();
@@ -32,10 +32,12 @@
Expect.isFalse(called);
await triggerGcWithDelay();
Expect.isFalse(called);
- test(value);
+ _trigger(value);
- var value2 = test1(value);
+ var value2 = foo(value);
var value1 = value;
+ print(value1);
+ print(value2);
await triggerGcWithDelay();
Expect.isFalse(called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t02.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t02.dart
index afe4bff..663bf64 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A02_t02.dart
@@ -18,25 +18,14 @@
called++;
});
-void test(Object o) {
- triggerGc();
+@pragma('vm:never-inline')
+void attachToFinalizer() {
+ var o = Object();
+ finalizer.attach(o, "Finalization token");
}
-Object test1(Object obj) => obj;
-
main() async {
- Object value = Object();
- finalizer.attach(value, "Finalization token");
-
- value = 12345;
-
- // Initial object is not accessible anymore.
- // Do something, call triggerGC several times and check that callback was
- // called only once during the execution.
- test(value);
await triggerGcWithDelay();
-
- var value1 = test1(value);
await triggerGcWithDelay();
triggerGc();
await triggerGcWithDelay();
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A03_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A03_t01.dart
index af1f22e..8c86bf9 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A03_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A03_t01.dart
@@ -19,27 +19,23 @@
called++;
});
-Object test1(Object obj) => obj;
+@pragma('vm:never-inline')
+void attachAndDetach() {
+ A detachToken = A();
+ Object value = Object();
+ finalizer.attach(value, "Finalization token", detach: detachToken);
+ finalizer.detach(detachToken);
+}
main() async {
- Object value = Object();
- Object detachToken = A();
- finalizer.attach(value, "Finalization token", detach: detachToken);
- print(value);
- finalizer.detach(detachToken);
+ attachAndDetach();
- value = 12345;
-
- // Initial object is not accessible anymore.
- // Do something, call triggerGC several times and check that callback was
- // not called during the execution.
await triggerGcWithDelay();
-
- var value1 = test1(value);
triggerGc();
await triggerGcWithDelay();
triggerGcWithDelay();
triggerGcWithDelay();
+ await Future.delayed(Duration(milliseconds: 10));
Expect.equals(0, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t11.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t11.dart
index 1908a0c..bb55874 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t11.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t11.dart
@@ -15,7 +15,6 @@
import '../../../../Utils/expect.dart';
import '../../gc_utils_lib.dart';
-
final finalizerTokens = <Object>{};
int cnt = 0;
@@ -24,27 +23,20 @@
cnt++;
});
-Object object1 = Object();
-Object object2 = Object();
-
-main() async {
+@pragma('vm:never-inline')
+void attachToFinalizer1() {
+ Object object1 = Object();
+ Object object2 = Object();
finalizer.attach(object1, "Object1", detach: null);
-
dynamic d = null;
finalizer.attach(object2, "Object2", detach: d);
+}
- object1 = "Object is free";
- object2 = "Finalizer can be called";
- await triggerGcWithDelay();
- Expect.setEquals({"Object1", "Object2"}, finalizerTokens);
- Expect.equals(2, cnt);
-
- await triggerGcWithDelay();
- Expect.setEquals({"Object1", "Object2"}, finalizerTokens);
- Expect.equals(2, cnt);
-
- await triggerGcWithDelay();
- Expect.setEquals({"Object1", "Object2"}, finalizerTokens);
- Expect.equals(2, cnt);
+main() async {
+ for (int i = 0; i < 10; i++) {
+ await triggerGcWithDelay();
+ Expect.setEquals({"Object1", "Object2"}, finalizerTokens);
+ Expect.equals(2, cnt);
+ }
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t12.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t12.dart
index 1f2f9ed..d207526 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t12.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t12.dart
@@ -34,5 +34,4 @@
} finally {
calloc.free(p2);
}
-
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t13.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t13.dart
index ff67f69..cd34349 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t13.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A04_t13.dart
@@ -26,7 +26,7 @@
try {
S s = p.ref;
Expect.throws(() {
- finalizer.attach(object, "Finalization token", detach: p);
+ finalizer.attach(object, "Finalization token", detach: s);
});
} finally {
calloc.free(p);
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t01.dart
index ceb9384..4a18554 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t01.dart
@@ -17,20 +17,14 @@
called++;
});
-
@pragma('vm:never-inline')
-void test() {
+void attachToFinalizer() {
Object obj = Object();
finalizer.attach(obj, "Just a string", detach: obj);
- print(obj);
}
main() async {
- test();
- await triggerGcWithDelay();
- Expect.equals(1, called);
- await triggerGcWithDelay();
- Expect.equals(1, called);
- await triggerGcWithDelay();
+ attachToFinalizer();
+ await triggerGcWithDelay(repeat: 3);
Expect.equals(1, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t02.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t02.dart
index 022a97d..ef2efc9 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A05_t02.dart
@@ -17,19 +17,14 @@
});
@pragma('vm:never-inline')
-void test() {
+void attachAndDetach() {
Object obj = Object();
finalizer.attach(obj, "Just a string", detach: obj);
- print(obj);
finalizer.detach(obj);
}
main() async {
- test();
- await triggerGcWithDelay();
- Expect.equals(0, called);
- await triggerGcWithDelay();
- Expect.equals(0, called);
- await triggerGcWithDelay();
+ attachAndDetach();
+ await triggerGcWithDelay(repeat: 3);
Expect.equals(0, called);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t01.dart
index 8f96ac1..9055584 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t01.dart
@@ -17,14 +17,14 @@
Nonce(this.value);
}
-final finalizerTokens = <Nonce>{};
+final finalizerTokens = <String>{};
final Finalizer finalizer = Finalizer((token) {
finalizerTokens.add(token);
});
@pragma('vm:never-inline')
-void test(Nonce token1, Nonce token2, Nonce token3) {
+void attachToFinalizer(Nonce token1, Nonce token2, Nonce token3) {
Object value = Object();
finalizer.attach(value, "Finalization token", detach: token1);
finalizer.attach(value, "Finalization token", detach: token2);
@@ -32,12 +32,8 @@
}
main() async {
- Nonce token1 = Nonce(1);
- Nonce token2 = Nonce(2);
- Nonce token3 = Nonce(3);
-
- test(token1, token2, token3);
+ attachToFinalizer(Nonce(1), Nonce(2), Nonce(3));
await triggerGcWithDelay();
- Expect.setEquals({token1, token2, token3}, finalizerTokens);
+ Expect.setEquals({"Finalization token"}, finalizerTokens);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t02.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t02.dart
index 973c119..ef7e187 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t02.dart
@@ -17,7 +17,7 @@
Nonce(this.value);
}
-final finalizerTokens = <Nonce>{};
+final finalizerTokens = <String>{};
int cnt = 0;
final Finalizer finalizer = Finalizer((token) {
@@ -26,21 +26,23 @@
});
@pragma('vm:never-inline')
-void test(Nonce token) {
+void attachToFinalizer(Nonce token) {
Object value = Object();
- finalizer.attach(value, "Finalization token", detach: token);
- finalizer.attach(value, "Finalization token", detach: token);
- finalizer.attach(value, "Finalization token", detach: token);
+ finalizer.attach(value, "Finalization token 1", detach: token);
+ finalizer.attach(value, "Finalization token 2", detach: token);
+ finalizer.attach(value, "Finalization token 3", detach: token);
}
main() async {
Nonce token = Nonce(1);
- test(token);
- await triggerGcWithDelay();
- Expect.setEquals({token}, finalizerTokens);
- await triggerGcWithDelay();
- Expect.setEquals({token}, finalizerTokens);
- await triggerGcWithDelay();
- Expect.setEquals({token}, finalizerTokens);
+ attachToFinalizer(token);
+ for (int i = 0; i < 5; i++) {
+ await triggerGcWithDelay();
+ Expect.setEquals({
+ "Finalization token 1",
+ "Finalization token 2",
+ "Finalization token 3"
+ }, finalizerTokens);
+ }
Expect.equals(1, cnt);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t03.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t03.dart
index afeec7e..0d1da1c 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/attach_A06_t03.dart
@@ -17,7 +17,7 @@
Nonce(this.value);
}
-final finalizerTokens = <Nonce>{};
+final finalizerTokens = <String>{};
int cnt = 0;
final Finalizer finalizer = Finalizer((token) {
finalizerTokens.add(token);
@@ -25,17 +25,17 @@
});
@pragma('vm:never-inline')
-void test(Nonce token1, token2, token3) {
+void attachToFinalizer(Nonce token1, token2, token3) {
Object value = Object();
- finalizer.attach(value, "Finalization token", detach: token1);
- finalizer.attach(value, "Finalization token", detach: token2);
- finalizer.attach(value, "Finalization token", detach: token3);
- finalizer.attach(value, "Finalization token", detach: token1);
- finalizer.attach(value, "Finalization token", detach: token2);
- finalizer.attach(value, "Finalization token", detach: token3);
- finalizer.attach(value, "Finalization token", detach: token1);
- finalizer.attach(value, "Finalization token", detach: token2);
- finalizer.attach(value, "Finalization token", detach: token3);
+ finalizer.attach(value, "Token 1", detach: token1);
+ finalizer.attach(value, "Token 2", detach: token2);
+ finalizer.attach(value, "Token 3", detach: token3);
+ finalizer.attach(value, "Token 1", detach: token1);
+ finalizer.attach(value, "Token 2", detach: token2);
+ finalizer.attach(value, "Token 3", detach: token3);
+ finalizer.attach(value, "Token 1", detach: token1);
+ finalizer.attach(value, "Token 2", detach: token2);
+ finalizer.attach(value, "Token 3", detach: token3);
}
main() async {
@@ -43,13 +43,9 @@
Nonce token2 = Nonce(2);
Nonce token3 = Nonce(3);
- test(token1, token2, token3);
+ attachToFinalizer(token1, token2, token3);
- await triggerGcWithDelay();
- Expect.setEquals({token1, token2, token3}, finalizerTokens);
- await triggerGcWithDelay();
- Expect.setEquals({token1, token2, token3}, finalizerTokens);
- await triggerGcWithDelay();
- Expect.setEquals({token1, token2, token3}, finalizerTokens);
+ await triggerGcWithDelay(repeat: 3);
+ Expect.setEquals({"Token 1", "Token 2", "Token 3"}, finalizerTokens);
Expect.equals(3, cnt);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t01.dart
index b1a0744..08fa351 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t01.dart
@@ -11,7 +11,7 @@
/// calling [attach] with the [detachToken] object as [detach] argument, is
/// removed.
///
-/// @description Checks that all attacments for the given token get removed
+/// @description Checks that all attachments for the given token get removed
/// after the [detach] call.
/// @author iarkh@unipro.ru
@@ -23,14 +23,14 @@
Nonce(this.value);
}
-final finalizerTokens = <Nonce>{};
+final finalizerTokens = <String>{};
final Finalizer finalizer = Finalizer((token) {
finalizerTokens.add(token);
});
@pragma('vm:never-inline')
-void test() {
+void attachAndDetach() {
Object object1 = Object();
Object object2 = Object();
List<int> object3 = List.filled(100, 1);
@@ -48,7 +48,7 @@
}
main() async {
- test();
+ attachAndDetach();
await triggerGcWithDelay();
Expect.setEquals({}, finalizerTokens);
await triggerGcWithDelay();
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t02.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t02.dart
index 3e630f0..2db2354 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t02.dart
@@ -23,37 +23,37 @@
Nonce(this.value);
}
-final finalizerTokens = <Nonce>{};
+final finalizerTokens = <String>{};
final Finalizer finalizer = Finalizer((token) {
finalizerTokens.add(token);
});
@pragma('vm:never-inline')
-void test() {
+void attachAndDetach() {
Object object1 = Object();
Object object2 = Object();
List<int> object3 = List.filled(100, 1);
List object4 = List.filled(200, "abc");
Nonce object5 = Nonce(14);
- Object finalizationToken1 = Nonce(1);
- Object finalizationToken2 = Nonce(2);
+ Object detachToken1 = Nonce(1);
+ Object detachToken2 = Nonce(2);
- finalizer.attach(object1, "object1", detach: finalizationToken1);
- finalizer.attach(object2, "object2", detach: finalizationToken2);
- finalizer.attach(object3, "object3", detach: finalizationToken1);
- finalizer.attach(object4, "object4", detach: finalizationToken1);
- finalizer.attach(object5, "object5", detach: finalizationToken2);
- finalizer.detach(finalizationToken1);
+ finalizer.attach(object1, "object1", detach: detachToken1);
+ finalizer.attach(object2, "object2", detach: detachToken2);
+ finalizer.attach(object3, "object3", detach: detachToken1);
+ finalizer.attach(object4, "object4", detach: detachToken1);
+ finalizer.attach(object5, "object5", detach: detachToken2);
+ finalizer.detach(detachToken1);
}
main() async {
- test();
+ attachAndDetach();
await triggerGcWithDelay();
- Expect.setEquals({"Object2", "Object5"}, finalizerTokens);
+ Expect.setEquals({"object2", "object5"}, finalizerTokens);
await triggerGcWithDelay();
- Expect.setEquals({"Object2", "Object5"}, finalizerTokens);
+ Expect.setEquals({"object2", "object5"}, finalizerTokens);
await triggerGcWithDelay();
- Expect.setEquals({"Object2", "Object5"}, finalizerTokens);
+ Expect.setEquals({"object2", "object5"}, finalizerTokens);
}
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t03.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t03.dart
index 43bdf80..fa17fdd 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/detach_A01_t03.dart
@@ -23,38 +23,33 @@
Nonce(this.value);
}
-final finalizerTokens = <Nonce>{};
+final finalizerTokens = <String>{};
final Finalizer finalizer = Finalizer((token) {
finalizerTokens.add(token);
});
@pragma('vm:never-inline')
-void test() {
+void attachAndDetach() {
Object object1 = Object();
Object object2 = Object();
List<int> object3 = List.filled(100, 1);
List object4 = List.filled(200, "abc");
Nonce object5 = Nonce(14);
- Object finalizationToken1 = Nonce(1);
- Object finalizationToken2 = Nonce(2);
+ Object detachToken = Nonce(2);
finalizer.attach(object1, "object1");
- finalizer.attach(object2, "object2", detach: finalizationToken2);
+ finalizer.attach(object2, "object2", detach: detachToken);
finalizer.attach(object3, "object3");
finalizer.attach(object4, "object4");
- finalizer.attach(object5, "object5", detach: finalizationToken2);
- finalizer.detach(finalizationToken2);
+ finalizer.attach(object5, "object5", detach: detachToken);
+ finalizer.detach(detachToken);
}
main() async {
- test();
- await triggerGcWithDelay();
- Expect.setEquals({"Object1", "Object3", "Object4"}, finalizerTokens);
- await triggerGcWithDelay();
- Expect.setEquals({"Object1", "Object3", "Object4"}, finalizerTokens);
- await triggerGcWithDelay();
- Expect.setEquals({"Object1", "Object3", "Object4"}, finalizerTokens);
+ attachAndDetach();
+ await triggerGcWithDelay(repeat: 3);
+ Expect.setEquals({"object1", "object3", "object4"}, finalizerTokens);
}
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t01.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t01.dart
index 85d349f..5213719 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t01.dart
@@ -21,11 +21,11 @@
String s = "Just a string";
Expect.throws(() {
- finalizer.attach("Shouldn't work", "Finalization token");
+ finalizer.attach(s, "Finalization token");
});
dynamic d = s;
Expect.throws(() {
- finalizer.attach("Shouldn't work", "Finalization token");
+ finalizer.attach(d, "Finalization token");
});
}
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t02.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t02.dart
index a98c333..2032e46 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t02.dart
@@ -12,9 +12,9 @@
import '../../../../Utils/expect.dart';
final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; });
-Object detachToken = Object;
main() {
+ Object detachToken = Object();
Expect.throws(() {
finalizer.attach(12345, "Finalization token", detach: detachToken);
});
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t03.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t03.dart
index e7b45aa..b79426a 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t03.dart
@@ -12,9 +12,9 @@
import '../../../../Utils/expect.dart';
final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; });
-Object detachToken = Object;
main() {
+ Object detachToken = Object();
Expect.throws(() {
finalizer.attach(true, "Finalization token", detach: detachToken);
});
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t08.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t08.dart
index 64940f5..7e44ff9 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t08.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t08.dart
@@ -12,9 +12,9 @@
import "../../../../Utils/expect.dart";
final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; });
-Object object = Object();
main() {
+ final object = Object();
Expect.throws(() {
finalizer.attach(object, "Finalization token", detach: "detachMe");
});
diff --git a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t10.dart b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t10.dart
index 863a5c7..e4265c7 100644
--- a/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t10.dart
+++ b/LanguageFeatures/FinalizationRegistry/no_ffi/Finalizer/attach_A04_t10.dart
@@ -12,9 +12,9 @@
import '../../../../Utils/expect.dart';
final Finalizer finalizer = Finalizer((_) { throw "Should not reach here"; });
-Object object = Object();
main() {
+ final object = Object();
Expect.throws(() {
finalizer.attach(object, "Finalization token", detach: true);
});