summaryrefslogtreecommitdiff
path: root/src/main.cc
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-07-04 16:45:56 -0400
committerRyan Dahl <ry@tinyclouds.org>2018-07-05 12:41:28 -0400
commit131e0ce4c78f63469d9aeaad6bd06bbcfe099ee9 (patch)
tree886065541401695cf5aa259dc530841ce84843b9 /src/main.cc
parent06a28998ea3fd38a2173d71eeb3fae5fb5559b2e (diff)
Rename mock_main to deno_cc
Diffstat (limited to 'src/main.cc')
-rw-r--r--src/main.cc64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/main.cc b/src/main.cc
new file mode 100644
index 000000000..40d3d89d2
--- /dev/null
+++ b/src/main.cc
@@ -0,0 +1,64 @@
+// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
+// All rights reserved. MIT License.
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+
+#ifdef _WIN32
+#include <direct.h>
+#else
+#include <unistd.h>
+#endif
+
+#include "flatbuffers/flatbuffers.h"
+#include "include/deno.h"
+#include "src/msg_generated.h"
+#include "third_party/v8/src/base/logging.h"
+
+static char** global_argv;
+static int global_argc;
+
+void MessagesFromJS(Deno* d, const char* channel, deno_buf buf) {
+ printf("MessagesFromJS %s\n", channel);
+
+ flatbuffers::FlatBufferBuilder builder;
+
+ char cwdbuf[1024];
+ // TODO(piscisaureus): support unicode on windows.
+ getcwd(cwdbuf, sizeof(cwdbuf));
+ auto start_cwd = builder.CreateString(cwdbuf);
+
+ std::vector<flatbuffers::Offset<flatbuffers::String>> args;
+ for (int i = 0; i < global_argc; ++i) {
+ args.push_back(builder.CreateString(global_argv[i]));
+ }
+ auto start_argv = builder.CreateVector(args);
+
+ deno::MsgBuilder msg_builder(builder);
+ msg_builder.add_command(deno::Command_START);
+ msg_builder.add_start_cwd(start_cwd);
+ msg_builder.add_start_argv(start_argv);
+
+ auto response = msg_builder.Finish();
+ builder.Finish(response);
+
+ deno_buf bufout{reinterpret_cast<const char*>(builder.GetBufferPointer()),
+ builder.GetSize()};
+ deno_set_response(d, bufout);
+}
+
+int main(int argc, char** argv) {
+ deno_init();
+
+ deno_set_flags(&argc, argv);
+ global_argv = argv;
+ global_argc = argc;
+
+ Deno* d = deno_new(NULL, MessagesFromJS);
+ bool r = deno_execute(d, "deno_main.js", "denoMain();");
+ if (!r) {
+ printf("Error! %s\n", deno_last_exception(d));
+ exit(1);
+ }
+ deno_delete(d);
+}