|
2 | 2 | // for details. All rights reserved. Use of this source code is governed by a
|
3 | 3 | // BSD-style license that can be found in the LICENSE file.
|
4 | 4 |
|
5 |
| -// VMOptions= |
| 5 | +// VMOptions=--no-enable-isolate-groups |
6 | 6 | // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy
|
7 | 7 | // VMOptions=--enable-isolate-groups --enable-fast-object-copy
|
8 | 8 | // VMOptions=--enable-isolate-groups --no-enable-fast-object-copy --gc-on-foc-slow-path --force-evacuation --verify-store-buffer
|
@@ -219,6 +219,8 @@ class SendReceiveTest extends SendReceiveTestBase {
|
219 | 219 |
|
220 | 220 | await testFastOnly();
|
221 | 221 | await testSlowOnly();
|
| 222 | + |
| 223 | + await testWeakProperty(); |
222 | 224 | }
|
223 | 225 |
|
224 | 226 | Future testTransferrable() async {
|
@@ -579,6 +581,69 @@ class SendReceiveTest extends SendReceiveTestBase {
|
579 | 581 | await sendReceive([notAllocatableInTLAB, smallContainer]));
|
580 | 582 | }
|
581 | 583 | }
|
| 584 | + |
| 585 | + Future testWeakProperty() async { |
| 586 | + final key = Object(); |
| 587 | + final expando1 = Expando(); |
| 588 | + final expando2 = Expando(); |
| 589 | + final expando3 = Expando(); |
| 590 | + final expando4 = Expando(); |
| 591 | + expando1[key] = expando2; |
| 592 | + expando2[expando2] = expando3; |
| 593 | + expando3[expando3] = expando4; |
| 594 | + expando4[expando4] = {'foo': 'bar'}; |
| 595 | + |
| 596 | + { |
| 597 | + final result = await sendReceive([ |
| 598 | + key, |
| 599 | + expando1, |
| 600 | + ]); |
| 601 | + final keyCopy = result[0]; |
| 602 | + final expando1Copy = result[1] as Expando; |
| 603 | + final expando2Copy = expando1Copy[keyCopy] as Expando; |
| 604 | + final expando3Copy = expando2Copy[expando2Copy] as Expando; |
| 605 | + final expando4Copy = expando3Copy[expando3Copy] as Expando; |
| 606 | + Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']); |
| 607 | + } |
| 608 | + { |
| 609 | + final result = await sendReceive([ |
| 610 | + expando1, |
| 611 | + key, |
| 612 | + ]); |
| 613 | + final expando1Copy = result[0] as Expando; |
| 614 | + final keyCopy = result[1]; |
| 615 | + final expando2Copy = expando1Copy[keyCopy] as Expando; |
| 616 | + final expando3Copy = expando2Copy[expando2Copy] as Expando; |
| 617 | + final expando4Copy = expando3Copy[expando3Copy] as Expando; |
| 618 | + Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']); |
| 619 | + } |
| 620 | + { |
| 621 | + final result = await sendReceive([ |
| 622 | + expando1, |
| 623 | + notAllocatableInTLAB, |
| 624 | + key, |
| 625 | + ]); |
| 626 | + final expando1Copy = result[0] as Expando; |
| 627 | + final keyCopy = result[2]; |
| 628 | + final expando2Copy = expando1Copy[keyCopy] as Expando; |
| 629 | + final expando3Copy = expando2Copy[expando2Copy] as Expando; |
| 630 | + final expando4Copy = expando3Copy[expando3Copy] as Expando; |
| 631 | + Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']); |
| 632 | + } |
| 633 | + { |
| 634 | + final result = await sendReceive([ |
| 635 | + key, |
| 636 | + notAllocatableInTLAB, |
| 637 | + expando1, |
| 638 | + ]); |
| 639 | + final keyCopy = result[0]; |
| 640 | + final expando1Copy = result[2] as Expando; |
| 641 | + final expando2Copy = expando1Copy[keyCopy] as Expando; |
| 642 | + final expando3Copy = expando2Copy[expando2Copy] as Expando; |
| 643 | + final expando4Copy = expando3Copy[expando3Copy] as Expando; |
| 644 | + Expect.equals('bar', (expando4Copy[expando4Copy] as Map)['foo']); |
| 645 | + } |
| 646 | + } |
582 | 647 | }
|
583 | 648 |
|
584 | 649 | main() async {
|
|
0 commit comments