| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia; |
| |
| import 'dart:io'; |
| import 'dart:isolate'; |
| import 'dart:zircon'; |
| |
| // ignore_for_file: native_function_body_in_non_sdk_code |
| // ignore_for_file: public_member_api_docs |
| |
| // TODO: refactors this incomingServices instead |
| @pragma('vm:entry-point') |
| Handle _environment; |
| |
| @pragma('vm:entry-point') |
| Handle _outgoingServices; |
| |
| class MxStartupInfo { |
| // TODO: refactor Handle to a Channel |
| static Handle takeEnvironment() { |
| if (_outgoingServices == null && Platform.isFuchsia) { |
| throw Exception( |
| 'Attempting to call takeEnvironment more than once per process'); |
| } |
| Handle handle = _environment; |
| _environment = null; |
| return handle; |
| } |
| |
| // TODO: refactor Handle to a Channel |
| static Handle takeOutgoingServices() { |
| if (_outgoingServices == null && Platform.isFuchsia) { |
| throw Exception( |
| 'Attempting to call takeOutgoingServices more than once per process'); |
| } |
| Handle handle = _outgoingServices; |
| _outgoingServices = null; |
| return handle; |
| } |
| } |
| |
| void _setReturnCode(int returnCode) native 'SetReturnCode'; |
| |
| void exit(int returnCode) { |
| _setReturnCode(returnCode); |
| Isolate.current.kill(priority: Isolate.immediate); |
| } |