diff options
author | Zoltan Herczeg <zherczeg.u-szeged@partner.samsung.com> | 2017-09-21 00:15:09 -0700 |
---|---|---|
committer | yichoi <duddlf.choi@samsung.com> | 2017-09-21 17:49:49 +0900 |
commit | 7713d307028e67b056e221a6bd400134c947e423 (patch) | |
tree | 574d339f14d135731f57ecbb2eaf151e0acf4cf0 /jerry-main | |
parent | 9c3f81435752e211cea305f893bdd42609acabeb (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.c | 65 |
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 */ } |