Add source sending feature to the debugger. (#1932)
With this feature the debugger webIDE and the python client can able to send a source code to the debugger while that is running in wait mode. This feature can be activated with the --debugger-wait-source switch and the debugger will wait for the source messages. If every message part are received the debugger will continue the exectuion with the initalized options. JerryScript-DCO-1.0-Signed-off-by: Imre Kiss kissi.szeged@partner.samsung.com
This commit is contained in:
committed by
Zoltan Herczeg
parent
a3885be6ce
commit
3e3d6373b8
@@ -116,3 +116,82 @@ jerry_debugger_cleanup (void)
|
||||
}
|
||||
#endif /* JERRY_DEBUGGER */
|
||||
} /* jerry_debugger_cleanup */
|
||||
|
||||
/**
|
||||
* Sets whether the engine should wait and run a source.
|
||||
*
|
||||
* @return enum JERRY_DEBUGGER_SOURCE_RECEIVE_FAILED - if the source is not received
|
||||
* JERRY_DEBUGGER_SOURCE_RECEIVED - if the source received
|
||||
*/
|
||||
jerry_debugger_wait_and_run_type_t
|
||||
jerry_debugger_wait_and_run_client_source (jerry_value_t *return_value) /**< [out] parse and run return value */
|
||||
{
|
||||
*return_value = jerry_create_undefined ();
|
||||
|
||||
#ifdef JERRY_DEBUGGER
|
||||
if ((JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED)
|
||||
&& !(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_BREAKPOINT_MODE))
|
||||
{
|
||||
JERRY_CONTEXT (debugger_flags) = (uint8_t) (JERRY_CONTEXT (debugger_flags) | JERRY_DEBUGGER_CLIENT_SOURCE_MODE);
|
||||
jerry_debugger_uint8_data_t *client_source_data_p = NULL;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (jerry_debugger_receive (&client_source_data_p))
|
||||
{
|
||||
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
/* The source arrived. */
|
||||
if (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CLIENT_SOURCE_MODE))
|
||||
{
|
||||
JERRY_ASSERT (client_source_data_p != NULL);
|
||||
|
||||
jerry_char_t *string_p = (jerry_char_t *) (client_source_data_p + 1);
|
||||
size_t name_size = strlen ((const char *) string_p);
|
||||
|
||||
*return_value = jerry_parse_named_resource (string_p,
|
||||
name_size,
|
||||
(string_p + name_size + 1),
|
||||
(client_source_data_p->uint8_size - name_size - 1),
|
||||
false);
|
||||
|
||||
if (!jerry_value_has_error_flag (*return_value))
|
||||
{
|
||||
jerry_value_t func_val = *return_value;
|
||||
*return_value = jerry_run (func_val);
|
||||
jerry_release_value (func_val);
|
||||
|
||||
return JERRY_DEBUGGER_SOURCE_RECEIVED;
|
||||
}
|
||||
else
|
||||
{
|
||||
jmem_heap_free_block (client_source_data_p,
|
||||
client_source_data_p->uint8_size + sizeof (jerry_debugger_uint8_data_t));
|
||||
|
||||
return JERRY_DEBUGGER_SOURCE_RECEIVE_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
jerry_debugger_sleep ();
|
||||
}
|
||||
|
||||
JERRY_ASSERT (!(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CLIENT_SOURCE_MODE)
|
||||
|| !(JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED));
|
||||
|
||||
if (client_source_data_p != NULL)
|
||||
{
|
||||
/* The data may partly arrived. */
|
||||
jmem_heap_free_block (client_source_data_p,
|
||||
client_source_data_p->uint8_size + sizeof (jerry_debugger_uint8_data_t));
|
||||
}
|
||||
}
|
||||
|
||||
return JERRY_DEBUGGER_SOURCE_RECEIVE_FAILED;
|
||||
#else
|
||||
return JERRY_DEBUGGER_SOURCE_RECEIVE_FAILED;
|
||||
#endif /* JERRY_DEBUGGER */
|
||||
} /* jerry_debugger_wait_and_run_client_source */
|
||||
|
||||
Reference in New Issue
Block a user