From 3062039ffe5563cab1f80b2d7da2d9c7e468c462 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 04:55:31 +0200 Subject: First pass at libdeno. --- deno2/include/deno.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 deno2/include/deno.h (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h new file mode 100644 index 000000000..9c6a22d2e --- /dev/null +++ b/deno2/include/deno.h @@ -0,0 +1,51 @@ +// Copyright 2018 Ryan Dahl +// All rights reserved. MIT License. +#ifndef INCLUDE_DENO_H_ +#define INCLUDE_DENO_H_ + +#include +#include "v8/include/v8.h" + +namespace deno { + +// Data that gets transmitted. +struct buf_s { + void* data; + size_t len; +}; +typedef struct buf_s DenoBuf; + +struct deno_s; +typedef struct deno_s Deno; + +// The callback from V8 when data is sent. +typedef DenoBuf (*RecvCallback)(Deno* d, DenoBuf buf); + +void v8_init(); +const char* v8_version(); +void v8_set_flags(int* argc, char** argv); + +// Constructors: +Deno* deno_from_snapshot(v8::StartupData* blob, void* data, RecvCallback cb); + +v8::StartupData make_snapshot(v8::StartupData* prev_natives_blob, + v8::StartupData* prev_snapshot_blob, + const char* js_filename, const char* js_source); + +void* deno_get_data(); + +// Returns nonzero on error. +// Get error text with deno_last_exception(). +int deno_load(Deno* d, const char* name_s, const char* source_s); + +// Returns nonzero on error. +int deno_send(Deno* d, DenoBuf buf); + +const char* deno_last_exception(Deno* d); + +void deno_dispose(Deno* d); +void deno_terminate_execution(Deno* d); + +} // namespace deno + +#endif // INCLUDE_DENO_H_ -- cgit v1.2.3 From ff48eca5403140b134a3e6a772ffb6f8905fae3e Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 05:34:03 +0200 Subject: Expose deno::from_snapshot() constructor --- deno2/include/deno.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index 9c6a22d2e..e5a25f240 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -26,7 +26,7 @@ const char* v8_version(); void v8_set_flags(int* argc, char** argv); // Constructors: -Deno* deno_from_snapshot(v8::StartupData* blob, void* data, RecvCallback cb); +Deno* from_snapshot(void* data, RecvCallback cb); v8::StartupData make_snapshot(v8::StartupData* prev_natives_blob, v8::StartupData* prev_snapshot_blob, -- cgit v1.2.3 From a6880dad6534ee9e1637c5098698cf32a4f1527e Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 13:17:04 +0200 Subject: make_snapshot should be private Now deno.h doesn't export v8.h and is self contained. --- deno2/include/deno.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index e5a25f240..d2bdca900 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -3,9 +3,6 @@ #ifndef INCLUDE_DENO_H_ #define INCLUDE_DENO_H_ -#include -#include "v8/include/v8.h" - namespace deno { // Data that gets transmitted. @@ -28,10 +25,6 @@ void v8_set_flags(int* argc, char** argv); // Constructors: Deno* from_snapshot(void* data, RecvCallback cb); -v8::StartupData make_snapshot(v8::StartupData* prev_natives_blob, - v8::StartupData* prev_snapshot_blob, - const char* js_filename, const char* js_source); - void* deno_get_data(); // Returns nonzero on error. -- cgit v1.2.3 From 9296b21b87eec3f01bee465fcb2b64c4ea14514b Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 14:18:15 +0200 Subject: Use C linkage in deno.h --- deno2/include/deno.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index d2bdca900..5dd4e6853 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -2,28 +2,30 @@ // All rights reserved. MIT License. #ifndef INCLUDE_DENO_H_ #define INCLUDE_DENO_H_ - -namespace deno { +// Neither Rust nor Go support calling directly into C++ functions, therefore +// the public interface to libdeno is done in C. +#ifdef __cplusplus +extern "C" { +#endif // Data that gets transmitted. -struct buf_s { +typedef struct { void* data; size_t len; -}; -typedef struct buf_s DenoBuf; +} deno_buf; struct deno_s; typedef struct deno_s Deno; // The callback from V8 when data is sent. -typedef DenoBuf (*RecvCallback)(Deno* d, DenoBuf buf); +typedef deno_buf (*RecvCallback)(Deno* d, deno_buf buf); -void v8_init(); +void deno_init(); const char* v8_version(); void v8_set_flags(int* argc, char** argv); -// Constructors: -Deno* from_snapshot(void* data, RecvCallback cb); +// Constructor +Deno* deno_new(void* data, RecvCallback cb); void* deno_get_data(); @@ -32,13 +34,14 @@ void* deno_get_data(); int deno_load(Deno* d, const char* name_s, const char* source_s); // Returns nonzero on error. -int deno_send(Deno* d, DenoBuf buf); +int deno_send(Deno* d, deno_buf buf); const char* deno_last_exception(Deno* d); void deno_dispose(Deno* d); void deno_terminate_execution(Deno* d); -} // namespace deno - +#ifdef __cplusplus +} // extern "C" +#endif #endif // INCLUDE_DENO_H_ -- cgit v1.2.3 From 041e503838d1f030faca08d93de4aaadf0bc4b98 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 14:34:59 +0200 Subject: Minor libdeno clean ups. --- deno2/include/deno.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index 5dd4e6853..caf6ee974 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -21,14 +21,12 @@ typedef struct deno_s Deno; typedef deno_buf (*RecvCallback)(Deno* d, deno_buf buf); void deno_init(); -const char* v8_version(); -void v8_set_flags(int* argc, char** argv); +const char* deno_v8_version(); +void deno_set_flags(int* argc, char** argv); // Constructor Deno* deno_new(void* data, RecvCallback cb); -void* deno_get_data(); - // Returns nonzero on error. // Get error text with deno_last_exception(). int deno_load(Deno* d, const char* name_s, const char* source_s); -- cgit v1.2.3 From 2791a49ecff8f1ec0f83e4df8167dd545173b916 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 16:48:21 +0200 Subject: s/RecvCallback/deno_recv_cb/g --- deno2/include/deno.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index caf6ee974..fb0038549 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -18,14 +18,14 @@ struct deno_s; typedef struct deno_s Deno; // The callback from V8 when data is sent. -typedef deno_buf (*RecvCallback)(Deno* d, deno_buf buf); +typedef deno_buf (*deno_recv_cb)(Deno* d, deno_buf buf); void deno_init(); const char* deno_v8_version(); void deno_set_flags(int* argc, char** argv); // Constructor -Deno* deno_new(void* data, RecvCallback cb); +Deno* deno_new(void* data, deno_recv_cb cb); // Returns nonzero on error. // Get error text with deno_last_exception(). -- cgit v1.2.3 From 0e07e16dd63992f5f989dc99c891d53d930a2d5b Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 17:01:35 +0200 Subject: Add mock_runtime_test. --- deno2/include/deno.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index fb0038549..1a42ec2b1 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -27,9 +27,9 @@ void deno_set_flags(int* argc, char** argv); // Constructor Deno* deno_new(void* data, deno_recv_cb cb); -// Returns nonzero on error. +// Returns false on error. // Get error text with deno_last_exception(). -int deno_load(Deno* d, const char* name_s, const char* source_s); +bool deno_load(Deno* d, const char* name_s, const char* source_s); // Returns nonzero on error. int deno_send(Deno* d, deno_buf buf); -- cgit v1.2.3 From cbbe8ad9992765bc0883759e4075cf7a4a1918ff Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 18:17:28 +0200 Subject: Add deno_send tests. --- deno2/include/deno.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index 1a42ec2b1..f67a7cf51 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -31,8 +31,9 @@ Deno* deno_new(void* data, deno_recv_cb cb); // Get error text with deno_last_exception(). bool deno_load(Deno* d, const char* name_s, const char* source_s); -// Returns nonzero on error. -int deno_send(Deno* d, deno_buf buf); +// Returns false on error. +// Get error text with deno_last_exception(). +bool deno_send(Deno* d, deno_buf buf); const char* deno_last_exception(Deno* d); -- cgit v1.2.3 From 2443f7efee9c04f9331743a5e7ca5c71396f2004 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 19:18:53 +0200 Subject: Use pub/sub instead of send/recv --- deno2/include/deno.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index f67a7cf51..c6bc82e26 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -18,14 +18,14 @@ struct deno_s; typedef struct deno_s Deno; // The callback from V8 when data is sent. -typedef deno_buf (*deno_recv_cb)(Deno* d, deno_buf buf); +typedef deno_buf (*deno_sub_cb)(Deno* d, deno_buf buf); void deno_init(); const char* deno_v8_version(); void deno_set_flags(int* argc, char** argv); // Constructor -Deno* deno_new(void* data, deno_recv_cb cb); +Deno* deno_new(void* data, deno_sub_cb cb); // Returns false on error. // Get error text with deno_last_exception(). @@ -33,7 +33,7 @@ bool deno_load(Deno* d, const char* name_s, const char* source_s); // Returns false on error. // Get error text with deno_last_exception(). -bool deno_send(Deno* d, deno_buf buf); +bool deno_pub(Deno* d, deno_buf buf); const char* deno_last_exception(Deno* d); -- cgit v1.2.3 From 56c3ac464eb5f9287b9bae0dad4dfabfb3534a1c Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 20:49:57 +0200 Subject: Rename deno_load to deno_execute. --- deno2/include/deno.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index c6bc82e26..4678a94af 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -29,7 +29,7 @@ Deno* deno_new(void* data, deno_sub_cb cb); // Returns false on error. // Get error text with deno_last_exception(). -bool deno_load(Deno* d, const char* name_s, const char* source_s); +bool deno_execute(Deno* d, const char* js_filename, const char* js_source); // Returns false on error. // Get error text with deno_last_exception(). -- cgit v1.2.3 From 7242f2b5a5118ee5b5cd2295761a703b54cee771 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 21:57:25 +0200 Subject: Add channel to pub/sub --- deno2/include/deno.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index 4678a94af..63f26ba8c 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -18,7 +18,7 @@ struct deno_s; typedef struct deno_s Deno; // The callback from V8 when data is sent. -typedef deno_buf (*deno_sub_cb)(Deno* d, deno_buf buf); +typedef deno_buf (*deno_sub_cb)(Deno* d, const char* channel, deno_buf buf); void deno_init(); const char* deno_v8_version(); @@ -31,9 +31,9 @@ Deno* deno_new(void* data, deno_sub_cb cb); // Get error text with deno_last_exception(). bool deno_execute(Deno* d, const char* js_filename, const char* js_source); -// Returns false on error. -// Get error text with deno_last_exception(). -bool deno_pub(Deno* d, deno_buf buf); +// Routes message to the javascript callback set with deno_sub(). A false return +// value indicates error. Check deno_last_exception() for exception text. +bool deno_pub(Deno* d, const char* channel, deno_buf buf); const char* deno_last_exception(Deno* d); -- cgit v1.2.3 From e89a49490c3109d42d29d6b9f57eaa373bb80b58 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 22:19:34 +0200 Subject: Clarify memory guarantees of deno_buf --- deno2/include/deno.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index 63f26ba8c..b8d4e59a4 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -10,14 +10,16 @@ extern "C" { // Data that gets transmitted. typedef struct { - void* data; + const char* data; size_t len; } deno_buf; struct deno_s; typedef struct deno_s Deno; -// The callback from V8 when data is sent. +// A callback to receive a message from deno_pub javascript call. +// buf is valid only for the lifetime of the call. +// The returned deno_buf is returned from deno_pub in javascript. typedef deno_buf (*deno_sub_cb)(Deno* d, const char* channel, deno_buf buf); void deno_init(); -- cgit v1.2.3 From 64d41a72f1c5a5974bb3e9aafbf3176759e00ee1 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 22:36:14 +0200 Subject: deno_dispose -> deno_delete --- deno2/include/deno.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'deno2/include/deno.h') diff --git a/deno2/include/deno.h b/deno2/include/deno.h index b8d4e59a4..3c42abd72 100644 --- a/deno2/include/deno.h +++ b/deno2/include/deno.h @@ -26,8 +26,8 @@ void deno_init(); const char* deno_v8_version(); void deno_set_flags(int* argc, char** argv); -// Constructor Deno* deno_new(void* data, deno_sub_cb cb); +void deno_delete(Deno* d); // Returns false on error. // Get error text with deno_last_exception(). @@ -39,7 +39,6 @@ bool deno_pub(Deno* d, const char* channel, deno_buf buf); const char* deno_last_exception(Deno* d); -void deno_dispose(Deno* d); void deno_terminate_execution(Deno* d); #ifdef __cplusplus -- cgit v1.2.3