blob: fcf419c20b5859904eae16c7fcad37f80d5edac7 [file] [log] [blame]
// Copyright (c) 2020, 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:isolate';
/// Contains methods used to communicate DartDev results back to the VM.
abstract class VmInteropHandler {
/// Initializes [VmInteropHandler] to utilize [port] to communicate with the
/// VM.
static void initialize(SendPort port) => _port = port;
/// Notifies the VM to run [script] with [args] upon DartDev exit.
static void run(String script, List<String> args) {
assert(_port != null);
if (_port == null) return;
final message = List<dynamic>.filled(3, null)
..[0] = _kResultRun
..[1] = script
// Copy the list so it doesn't get GC'd underneath us.
..[2] = args.toList();
_port.send(message);
}
/// Notifies the VM that DartDev has completed running. If provided a
/// non-zero [exitCode], the VM will terminate with the given exit code.
static void exit(int exitCode) {
assert(_port != null);
if (_port == null) return;
final message = List<dynamic>.filled(2, null)
..[0] = _kResultExit
..[1] = exitCode;
_port.send(message);
}
// Note: keep in sync with runtime/bin/dartdev_isolate.h
static const int _kResultRun = 1;
static const int _kResultExit = 2;
static SendPort _port;
}