From a3112ab90180ef447b66494052cc8a7c327bbb2a Mon Sep 17 00:00:00 2001 From: Akos Kiss Date: Tue, 14 Aug 2018 09:29:06 +0200 Subject: [PATCH] Split string-sending debugger API into output- and log-sending functions (#2461) This helps to avoid the use of non-public headers and protocol-internal constants in external code (e.g., in jerry-port and jerry-ext). The patch also cleans up the necessary includes in jerry-core public headers, and the include order in jerry-port/default public headers. JerryScript-DCO-1.0-Signed-off-by: Akos Kiss akiss@inf.u-szeged.hu --- docs/07.DEBUGGER.md | 37 +++++++++++++++++-- jerry-core/api/jerry-debugger.c | 29 +++++++++++++-- jerry-core/debugger/debugger.h | 4 ++ .../include/jerryscript-debugger-transport.h | 4 +- jerry-core/include/jerryscript-debugger.h | 4 +- jerry-ext/handler/handler-print.c | 4 +- jerry-port/default/default-io.c | 7 +--- .../include/jerryscript-port-default.h | 4 +- 8 files changed, 75 insertions(+), 18 deletions(-) diff --git a/docs/07.DEBUGGER.md b/docs/07.DEBUGGER.md index 879504ac7..1793dd0d6 100644 --- a/docs/07.DEBUGGER.md +++ b/docs/07.DEBUGGER.md @@ -359,20 +359,51 @@ Sends the program's output to the debugger client. **Prototype** ```c - void - jerry_debugger_send_output (jerry_char_t buffer[], jerry_size_t string_size, uint8_t type) +void +jerry_debugger_send_output (jerry_char_t buffer[], jerry_size_t string_size) ``` **Example** ```c +{ jerry_init (JERRY_INIT_EMPTY); jerry_debugger_init (5001); jerry_char_t my_output = "Hey, this should be sent too!"; jerry_size_t my_output_size = sizeof (my_output); - jerry_debugger_send_output (my_output, my_output_size, JERRY_DEBUGGER_OUTPUT_OK); + jerry_debugger_send_output (my_output, my_output_size); jerry_cleanup (); +} +``` + +### jerry_debugger_send_log + +**Summary** + +Sends the program's log to the debugger client. + +**Prototype** + +```c +void +jerry_debugger_send_log (jerry_log_level_t level, jerry_char_t buffer[], jerry_size_t string_size) +``` + +**Example** + +```c +{ + jerry_init (JERRY_INIT_EMPTY); + jerry_debugger_init (5001); + + jerry_char_t my_log = "Custom diagnostics"; + jerry_size_t my_log_size = sizeof (my_log); + + jerry_debugger_send_log (JERRY_LOG_LEVEL_DEBUG, my_log, my_log_size); + + jerry_cleanup (); +} ``` diff --git a/jerry-core/api/jerry-debugger.c b/jerry-core/api/jerry-debugger.c index 0433e0024..097104f5c 100644 --- a/jerry-core/api/jerry-debugger.c +++ b/jerry-core/api/jerry-debugger.c @@ -190,20 +190,41 @@ jerry_debugger_wait_for_client_source (jerry_debugger_wait_for_source_callback_t */ void jerry_debugger_send_output (jerry_char_t buffer[], /**< buffer */ - jerry_size_t str_size, /**< string size */ - uint8_t type) /**< type of output */ + jerry_size_t str_size) /**< string size */ { #ifdef JERRY_DEBUGGER if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) { jerry_debugger_send_string (JERRY_DEBUGGER_OUTPUT_RESULT, - type, + JERRY_DEBUGGER_OUTPUT_OK, (const uint8_t *) buffer, sizeof (uint8_t) * str_size); } #else /* !JERRY_DEBUGGER */ JERRY_UNUSED (buffer); JERRY_UNUSED (str_size); - JERRY_UNUSED (type); #endif /* JERRY_DEBUGGER */ } /* jerry_debugger_send_output */ + +/** + * Send the log of the program to the debugger client. + */ +void +jerry_debugger_send_log (jerry_log_level_t level, /**< level of the diagnostics message */ + jerry_char_t buffer[], /**< buffer */ + jerry_size_t str_size) /**< string size */ +{ +#ifdef JERRY_DEBUGGER + if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) + { + jerry_debugger_send_string (JERRY_DEBUGGER_OUTPUT_RESULT, + (uint8_t) (level + 2), + (const uint8_t *) buffer, + sizeof (uint8_t) * str_size); + } +#else /* !JERRY_DEBUGGER */ + JERRY_UNUSED (level); + JERRY_UNUSED (buffer); + JERRY_UNUSED (str_size); +#endif /* JERRY_DEBUGGER */ +} /* jerry_debugger_send_log */ diff --git a/jerry-core/debugger/debugger.h b/jerry-core/debugger/debugger.h index 58c051c63..c31b6bf9e 100644 --- a/jerry-core/debugger/debugger.h +++ b/jerry-core/debugger/debugger.h @@ -212,6 +212,10 @@ typedef enum /** * Subtypes of output_result. + * + * Note: + * This enum has to be kept in sync with jerry_log_level_t with an offset + * of +2. */ typedef enum { diff --git a/jerry-core/include/jerryscript-debugger-transport.h b/jerry-core/include/jerryscript-debugger-transport.h index 388256187..d2cd115ce 100644 --- a/jerry-core/include/jerryscript-debugger-transport.h +++ b/jerry-core/include/jerryscript-debugger-transport.h @@ -16,7 +16,9 @@ #ifndef JERRYSCRIPT_DEBUGGER_TRANSPORT_H #define JERRYSCRIPT_DEBUGGER_TRANSPORT_H -#include "jerryscript-core.h" +#include +#include +#include #ifdef __cplusplus extern "C" diff --git a/jerry-core/include/jerryscript-debugger.h b/jerry-core/include/jerryscript-debugger.h index 590534662..66632013c 100644 --- a/jerry-core/include/jerryscript-debugger.h +++ b/jerry-core/include/jerryscript-debugger.h @@ -17,6 +17,7 @@ #define JERRYSCRIPT_DEBUGGER_H #include "jerryscript-core.h" +#include "jerryscript-port.h" #ifdef __cplusplus extern "C" @@ -60,7 +61,8 @@ void jerry_debugger_stop_at_breakpoint (bool enable_stop_at_breakpoint); jerry_debugger_wait_for_source_status_t jerry_debugger_wait_for_client_source (jerry_debugger_wait_for_source_callback_t callback_p, void *user_p, jerry_value_t *return_value); -void jerry_debugger_send_output (jerry_char_t buffer[], jerry_size_t str_size, uint8_t type); +void jerry_debugger_send_output (jerry_char_t buffer[], jerry_size_t str_size); +void jerry_debugger_send_log (jerry_log_level_t level, jerry_char_t buffer[], jerry_size_t str_size); /** * @} diff --git a/jerry-ext/handler/handler-print.c b/jerry-ext/handler/handler-print.c index 97a8b55f0..b8e875db1 100644 --- a/jerry-ext/handler/handler-print.c +++ b/jerry-ext/handler/handler-print.c @@ -14,7 +14,7 @@ */ #include "jerryscript-ext/handler.h" -#include "debugger.h" +#include "jerryscript-debugger.h" /** * Provide a 'print' implementation for scripts. @@ -72,7 +72,7 @@ jerryx_handler_print (const jerry_value_t func_obj_val, /**< function object */ 256)) != 0) { #ifdef JERRY_DEBUGGER - jerry_debugger_send_output (substr_buf, substr_size, JERRY_DEBUGGER_OUTPUT_OK); + jerry_debugger_send_output (substr_buf, substr_size); #endif /* JERRY_DEBUGGER */ for (jerry_size_t chr_index = 0; chr_index < substr_size; chr_index++) { diff --git a/jerry-port/default/default-io.c b/jerry-port/default/default-io.c index 6aab48bdb..72dea34e7 100644 --- a/jerry-port/default/default-io.c +++ b/jerry-port/default/default-io.c @@ -17,7 +17,7 @@ #include "jerryscript-port.h" #include "jerryscript-port-default.h" -#include "debugger.h" +#include "jerryscript-debugger.h" #ifndef DISABLE_EXTRA_API @@ -91,10 +91,7 @@ jerry_port_log (jerry_log_level_t level, /**< message log level */ vsnprintf (buffer, (size_t) length + 1, format, args); fprintf (stderr, "%s", buffer); - if (jerry_debugger_transport_is_connected ()) - { - jerry_debugger_send_output ((jerry_char_t *) buffer, (jerry_size_t) length, (uint8_t) (level + 2)); - } + jerry_debugger_send_log (level, (jerry_char_t *) buffer, (jerry_size_t) length); #else /* If jerry-debugger isn't defined, libc is turned on */ vfprintf (stderr, format, args); #endif /* JERRY_DEBUGGER */ diff --git a/jerry-port/default/include/jerryscript-port-default.h b/jerry-port/default/include/jerryscript-port-default.h index 6d66cb9d7..a2d06a4a0 100644 --- a/jerry-port/default/include/jerryscript-port-default.h +++ b/jerry-port/default/include/jerryscript-port-default.h @@ -16,11 +16,11 @@ #ifndef JERRYSCRIPT_PORT_DEFAULT_H #define JERRYSCRIPT_PORT_DEFAULT_H +#include + #include "jerryscript.h" #include "jerryscript-port.h" -#include - #ifdef __cplusplus extern "C" {