From a48f24f8dab95529624a8486e61aea5c9040923a Mon Sep 17 00:00:00 2001 From: Daniel Balla Date: Mon, 7 Aug 2017 10:33:50 +0200 Subject: [PATCH] Reworking jerry_debugger_send_string method From now on, jerry_debugger_send_string can send a subtype of the string, making it more simple to send over strings with special parameters, therefore seperating different types of messages are simpler. Enumerations for various subtypes can be made, while there's only need to have 2 entries for the header type. JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu --- jerry-core/api/jerry.c | 5 ++++- jerry-core/debugger/debugger.c | 18 +++++++++++++++--- jerry-core/debugger/debugger.h | 18 +++++++++++++++--- jerry-core/parser/js/js-parser-statm.c | 1 + jerry-core/parser/js/js-parser.c | 6 +++++- jerry-debugger/jerry-client-ws.html | 19 +++++++++++-------- jerry-debugger/jerry-client-ws.py | 17 +++++++++-------- 7 files changed, 60 insertions(+), 24 deletions(-) diff --git a/jerry-core/api/jerry.c b/jerry-core/api/jerry.c index fead23d14..0f253148c 100644 --- a/jerry-core/api/jerry.c +++ b/jerry-core/api/jerry.c @@ -389,7 +389,10 @@ jerry_parse_named_resource (const jerry_char_t *name_p, /**< name (usually a fil #ifdef JERRY_DEBUGGER if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) { - jerry_debugger_send_string (JERRY_DEBUGGER_SOURCE_CODE_NAME, name_p, name_length); + jerry_debugger_send_string (JERRY_DEBUGGER_SOURCE_CODE_NAME, + JERRY_DEBUGGER_NO_SUBTYPE, + name_p, + name_length); } #else /* JERRY_DEBUGGER */ JERRY_UNUSED (name_p); diff --git a/jerry-core/debugger/debugger.c b/jerry-core/debugger/debugger.c index accab4f30..ea6a5d266 100644 --- a/jerry-core/debugger/debugger.c +++ b/jerry-core/debugger/debugger.c @@ -160,7 +160,7 @@ jerry_debugger_send_eval (const lit_utf8_byte_t *eval_string_p, /**< evaluated s } ecma_value_t message = result; - uint8_t type = JERRY_DEBUGGER_EVAL_RESULT; + uint8_t type = JERRY_DEBUGGER_EVAL_OK; if (ECMA_IS_VALUE_ERROR (result)) { @@ -183,7 +183,8 @@ jerry_debugger_send_eval (const lit_utf8_byte_t *eval_string_p, /**< evaluated s ecma_free_value (result); const lit_utf8_byte_t *string_p = lit_get_magic_string_utf8 (id); - return jerry_debugger_send_string (JERRY_DEBUGGER_EVAL_ERROR, + return jerry_debugger_send_string (JERRY_DEBUGGER_EVAL_RESULT, + type, string_p, strlen ((const char *) string_p)); } @@ -201,7 +202,7 @@ jerry_debugger_send_eval (const lit_utf8_byte_t *eval_string_p, /**< evaluated s ecma_string_t *string_p = ecma_get_string_from_value (message); ECMA_STRING_TO_UTF8_STRING (string_p, buffer_p, buffer_size); - bool success = jerry_debugger_send_string (type, buffer_p, buffer_size); + bool success = jerry_debugger_send_string (JERRY_DEBUGGER_EVAL_RESULT, type, buffer_p, buffer_size); ECMA_FINALIZE_UTF8_STRING (buffer_p, buffer_size); ecma_free_value (message); @@ -702,6 +703,7 @@ jerry_debugger_send_data (jerry_debugger_header_type_t type, /**< message type * */ bool jerry_debugger_send_string (uint8_t message_type, /**< message type */ + uint8_t sub_type, /**< subtype of the string */ const uint8_t *string_p, /**< string data */ size_t string_length) /**< length of string */ { @@ -728,10 +730,19 @@ jerry_debugger_send_string (uint8_t message_type, /**< message type */ string_p += max_fragment_len; } + if (sub_type != JERRY_DEBUGGER_NO_SUBTYPE) + { + string_length += 1; + } + JERRY_DEBUGGER_SET_SEND_MESSAGE_SIZE (message_string_p, 1 + string_length); message_string_p->type = (uint8_t) (message_type + 1); memcpy (message_string_p->string, string_p, string_length); + if (sub_type != JERRY_DEBUGGER_NO_SUBTYPE) + { + message_string_p->string[string_length - 1] = sub_type; + } return jerry_debugger_send (sizeof (jerry_debugger_send_type_t) + string_length); } /* jerry_debugger_send_string */ @@ -960,6 +971,7 @@ jerry_debugger_send_exception_string (ecma_value_t exception_value) /**< error v ECMA_STRING_TO_UTF8_STRING (string_p, string_data_p, string_size); bool result = jerry_debugger_send_string (JERRY_DEBUGGER_EXCEPTION_STR, + JERRY_DEBUGGER_NO_SUBTYPE, string_data_p, string_size); diff --git a/jerry-core/debugger/debugger.h b/jerry-core/debugger/debugger.h index 5244866f7..d60ad2a0a 100644 --- a/jerry-core/debugger/debugger.h +++ b/jerry-core/debugger/debugger.h @@ -33,6 +33,11 @@ */ #define JERRY_DEBUGGER_TIMEOUT 100 +/** + * This constant represents that the string to be sent has no subtype. + */ +#define JERRY_DEBUGGER_NO_SUBTYPE 0 + /** * Limited resources available for the engine, so it is important to * check the maximum buffer size. It needs to be between 64 and 256 bytes. @@ -114,8 +119,6 @@ typedef enum JERRY_DEBUGGER_BACKTRACE_END = 20, /**< last backtrace data */ JERRY_DEBUGGER_EVAL_RESULT = 21, /**< eval result */ JERRY_DEBUGGER_EVAL_RESULT_END = 22, /**< last part of eval result */ - JERRY_DEBUGGER_EVAL_ERROR = 23, /**< eval result when an error is occured */ - JERRY_DEBUGGER_EVAL_ERROR_END = 24, /**< last part of eval result when an error is occured */ /* Messages sent by the client to server. */ @@ -139,6 +142,15 @@ typedef enum JERRY_DEBUGGER_EVAL_PART = 13, /**< next message of evaluating a string */ } jerry_debugger_header_type_t; +/** + * Subtypes of send_eval. + */ +typedef enum +{ + JERRY_DEBUGGER_EVAL_OK = 1, /**< eval result, no error */ + JERRY_DEBUGGER_EVAL_ERROR = 2, /**< eval result when an error is occured */ +} jerry_debugger_eval_subtype_t; + /** * Delayed free of byte code data. */ @@ -318,7 +330,7 @@ void jerry_debugger_breakpoint_hit (uint8_t message_type); void jerry_debugger_send_type (jerry_debugger_header_type_t type); bool jerry_debugger_send_configuration (uint8_t max_message_size); void jerry_debugger_send_data (jerry_debugger_header_type_t type, const void *data, size_t size); -bool jerry_debugger_send_string (uint8_t message_type, const uint8_t *string_p, size_t string_length); +bool jerry_debugger_send_string (uint8_t message_type, uint8_t sub_type, const uint8_t *string_p, size_t string_length); bool jerry_debugger_send_function_cp (jerry_debugger_header_type_t type, ecma_compiled_code_t *compiled_code_p); bool jerry_debugger_send_parse_function (uint32_t line, uint32_t column); void jerry_debugger_send_memstats (void); diff --git a/jerry-core/parser/js/js-parser-statm.c b/jerry-core/parser/js/js-parser-statm.c index 74cc42935..d0f1f2549 100644 --- a/jerry-core/parser/js/js-parser-statm.c +++ b/jerry-core/parser/js/js-parser-statm.c @@ -406,6 +406,7 @@ parser_parse_function_statement (parser_context_t *context_p) /**< context */ if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) { jerry_debugger_send_string (JERRY_DEBUGGER_FUNCTION_NAME, + JERRY_DEBUGGER_NO_SUBTYPE, name_p->u.char_p, name_p->prop.length); diff --git a/jerry-core/parser/js/js-parser.c b/jerry-core/parser/js/js-parser.c index 5c8316b84..6724c7847 100644 --- a/jerry-core/parser/js/js-parser.c +++ b/jerry-core/parser/js/js-parser.c @@ -2194,6 +2194,7 @@ parser_parse_function (parser_context_t *context_p, /**< context */ if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) { jerry_debugger_send_string (JERRY_DEBUGGER_FUNCTION_NAME, + JERRY_DEBUGGER_NO_SUBTYPE, context_p->lit_object.literal_p->u.char_p, context_p->lit_object.literal_p->prop.length); } @@ -2489,7 +2490,10 @@ parser_parse_script (const uint8_t *source_p, /**< source code */ #ifdef JERRY_DEBUGGER if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED) { - jerry_debugger_send_string (JERRY_DEBUGGER_SOURCE_CODE, source_p, size); + jerry_debugger_send_string (JERRY_DEBUGGER_SOURCE_CODE, + JERRY_DEBUGGER_NO_SUBTYPE, + source_p, + size); } #endif /* JERRY_DEBUGGER */ diff --git a/jerry-debugger/jerry-client-ws.html b/jerry-debugger/jerry-client-ws.html index 37f7106d5..1b5484b40 100644 --- a/jerry-debugger/jerry-client-ws.html +++ b/jerry-debugger/jerry-client-ws.html @@ -35,6 +35,7 @@ textarea {