// Copyright (c) 2017, 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.

library regress;

import 'dart:isolate';

abstract class N {}

class J extends N {
  final String s;
  J(this.s);
}

class K extends N {
  final int i;
  K(this.i);
}

void isolate(Object portObj) {
  SendPort port = portObj as SendPort;
  port.send(N);
  port.send(new J("8" * 4));
  for (int i = 0; i < 80000; i++) {
    port.send(new K(i));
  }
  port.send('done');
}

main() async {
  var recv = new RawReceivePort();
  recv.handler = (k) {
    if (k is J) print(k.s.length);
    if (k is String) {
      print(k);
      recv.close();
    }
  };
  var iso = await Isolate.spawn(isolate, recv.sendPort);
}
