| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file | |
| // 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. | |
| import 'dart:async'; | |
| import 'dart:ffi'; | |
| import 'dart:isolate'; | |
| class Base { | |
| var myMutableField; | |
| } | |
| @pragma('vm:deeply-immutable') | |
| final class Foo extends Base {} | |
| // ^^^ | |
| // [cfe] The super type of deeply immutable classes must be deeply immutable. | |
| Future<T> sendReceive<T>(T o) async { | |
| final r = ReceivePort(); | |
| final si = StreamIterator(r); | |
| r.sendPort.send(o); | |
| await si.moveNext(); | |
| final o2 = si.current; | |
| si.cancel(); | |
| return o2; | |
| } | |
| main() async { | |
| final o = Foo(); | |
| final o2 = await sendReceive(o); | |
| if (!identical(o, o2)) throw 'not identical'; | |
| throw 'we could share mutable objects - oh no!'; | |
| } |