aboutsummaryrefslogtreecommitdiff
path: root/jerry-main
diff options
context:
space:
mode:
authorZoltan Herczeg <zherczeg.u-szeged@partner.samsung.com>2017-09-21 00:15:09 -0700
committeryichoi <duddlf.choi@samsung.com>2017-09-21 17:49:49 +0900
commit7713d307028e67b056e221a6bd400134c947e423 (patch)
tree574d339f14d135731f57ecbb2eaf151e0acf4cf0 /jerry-main
parent9c3f81435752e211cea305f893bdd42609acabeb (diff)
Rework jerry_debugger_wait_for_client_source to use a callback.
The jerry_debugger_wait_and_run_client_source function is renamed to jerry_debugger_wait_for_client_source and a callback is added which is called when the source is received. Inside the callback the application is free to do anything with the received source code. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
Diffstat (limited to 'jerry-main')
-rw-r--r--jerry-main/main-unix.c65
1 files changed, 51 insertions, 14 deletions
diff --git a/jerry-main/main-unix.c b/jerry-main/main-unix.c
index 9b998a02..4d2b4167 100644
--- a/jerry-main/main-unix.c
+++ b/jerry-main/main-unix.c
@@ -268,6 +268,38 @@ register_js_function (const char *name_p, /**< name of the function */
jerry_release_value (result_val);
} /* register_js_function */
+#ifdef JERRY_DEBUGGER
+
+/**
+ * Runs the source code received by jerry_debugger_wait_for_client_source.
+ *
+ * @return result fo the source code execution
+ */
+static jerry_value_t
+wait_for_source_callback (const jerry_char_t *resource_name_p, /**< resource name */
+ size_t resource_name_size, /**< size of resource name */
+ const jerry_char_t *source_p, /**< source code */
+ size_t source_size, /**< source code size */
+ void *user_p __attribute__((unused))) /**< user pointer */
+{
+ jerry_value_t ret_val = jerry_parse_named_resource (resource_name_p,
+ resource_name_size,
+ source_p,
+ source_size,
+ false);
+
+ if (!jerry_value_has_error_flag (ret_val))
+ {
+ jerry_value_t func_val = ret_val;
+ ret_val = jerry_run (func_val);
+ jerry_release_value (func_val);
+ }
+
+ return ret_val;
+} /* wait_for_source_callback */
+
+#endif /* JERRY_DEBUGGER */
+
/**
* Command line option IDs
*/
@@ -723,14 +755,18 @@ main (int argc,
{
is_repl_mode = false;
#ifdef JERRY_DEBUGGER
- jerry_value_t run_result;
- jerry_debugger_wait_and_run_type_t receive_status;
- do
+ while (true)
{
+ jerry_debugger_wait_for_source_status_t receive_status;
+
do
{
- receive_status = jerry_debugger_wait_and_run_client_source (&run_result);
+ jerry_value_t run_result;
+
+ receive_status = jerry_debugger_wait_for_client_source (wait_for_source_callback,
+ NULL,
+ &run_result);
if (receive_status == JERRY_DEBUGGER_SOURCE_RECEIVE_FAILED)
{
@@ -747,21 +783,22 @@ main (int argc,
}
while (receive_status == JERRY_DEBUGGER_SOURCE_RECEIVED);
- if (receive_status == JERRY_DEBUGGER_CONTEXT_RESET_RECEIVED)
+ if (receive_status != JERRY_DEBUGGER_CONTEXT_RESET_RECEIVED)
{
- jerry_cleanup ();
+ break;
+ }
- jerry_init (flags);
- jerry_debugger_init (debug_port);
+ jerry_cleanup ();
- register_js_function ("assert", jerryx_handler_assert);
- register_js_function ("gc", jerryx_handler_gc);
- register_js_function ("print", jerryx_handler_print);
+ jerry_init (flags);
+ jerry_debugger_init (debug_port);
- ret_value = jerry_create_undefined ();
- }
+ register_js_function ("assert", jerryx_handler_assert);
+ register_js_function ("gc", jerryx_handler_gc);
+ register_js_function ("print", jerryx_handler_print);
+
+ ret_value = jerry_create_undefined ();
}
- while (receive_status == JERRY_DEBUGGER_CONTEXT_RESET_RECEIVED);
#endif /* JERRY_DEBUGGER */
}