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 {