diff options
-rw-r--r-- | js/os.ts | 19 | ||||
-rw-r--r-- | src/reply.cc | 7 |
2 files changed, 18 insertions, 8 deletions
@@ -5,14 +5,17 @@ import { assert } from "./util"; import * as util from "./util"; import { flatbuffers } from "flatbuffers"; -export function exit(exitCode = 0): void { - assert(false, "Not Implemented"); - /* - pubInternal("os", { - command: fbs.Command.EXIT, - exitCode - }); - */ +export function exit(exitCode = 0): never { + const builder = new flatbuffers.Builder(); + fbs.Exit.startExit(builder); + fbs.Exit.addCode(builder, exitCode); + const msg = fbs.Exit.endExit(builder); + fbs.Base.startBase(builder); + fbs.Base.addMsg(builder, msg); + fbs.Base.addMsgType(builder, fbs.Any.Exit); + builder.finish(fbs.Base.endBase(builder)); + deno.send(builder.asUint8Array()); + throw Error("Unreachable"); } export function codeFetch( diff --git a/src/reply.cc b/src/reply.cc index 007f2c68b..a6558890d 100644 --- a/src/reply.cc +++ b/src/reply.cc @@ -71,6 +71,13 @@ void deno_handle_msg_from_js(Deno* d, deno_buf buf) { break; } + case deno::Any_Exit: { + auto msg = base->msg_as_Exit(); + uint32_t code = msg->code(); + exit(code); + break; + } + case deno::Any_NONE: CHECK(false && "Got message with msg_type == Any_NONE"); break; |