Make jerry shell more intuitive

- REPL mode also prints each error messages, not only each return values.
- If read_file fails, execution stops right away.

JerryScript-DCO-1.0-Signed-off-by: Youngil Choi duddlf.choi@samsung.com
This commit is contained in:
Youngil Choi
2016-08-24 23:06:59 +09:00
parent c6e68ce167
commit 48d5eee920
+43 -21
View File
@@ -121,6 +121,33 @@ print_help (char *name)
name); name);
} /* print_help */ } /* print_help */
static void
print_unhandled_exception (jerry_value_t error_value)
{
assert (jerry_value_has_error_flag (error_value));
jerry_value_clear_error_flag (&error_value);
jerry_value_t err_str_val = jerry_value_to_string (error_value);
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
jerry_char_t err_str_buf[256];
if (err_str_size >= 256)
{
const char msg[] = "[Error message too long]";
err_str_size = sizeof (msg) / sizeof (char) - 1;
memcpy (err_str_buf, msg, err_str_size);
}
else
{
jerry_size_t sz = jerry_string_to_char_buffer (err_str_val, err_str_buf, err_str_size);
assert (sz == err_str_size);
}
err_str_buf[err_str_size] = 0;
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Script Error: unhandled exception: %s\n", err_str_buf);
jerry_release_value (err_str_val);
} /* print_unhandled_exception */
int int
main (int argc, main (int argc,
char **argv) char **argv)
@@ -335,6 +362,7 @@ main (int argc,
if (source_p == NULL) if (source_p == NULL)
{ {
ret_value = jerry_create_error (JERRY_ERROR_COMMON, (jerry_char_t *) ""); ret_value = jerry_create_error (JERRY_ERROR_COMMON, (jerry_char_t *) "");
break;
} }
if (is_save_snapshot_mode) if (is_save_snapshot_mode)
@@ -427,14 +455,21 @@ main (int argc,
/* Evaluate the line */ /* Evaluate the line */
jerry_value_t ret_val_eval = jerry_eval (buffer, len, false); jerry_value_t ret_val_eval = jerry_eval (buffer, len, false);
/* Print return value */ if (!jerry_value_has_error_flag (ret_val_eval))
const jerry_value_t args[] = { ret_val_eval }; {
jerry_value_t ret_val_print = jerry_call_function (print_function, /* Print return value */
jerry_create_undefined (), const jerry_value_t args[] = { ret_val_eval };
args, jerry_value_t ret_val_print = jerry_call_function (print_function,
1); jerry_create_undefined (),
args,
1);
jerry_release_value (ret_val_print);
}
else
{
print_unhandled_exception (ret_val_eval);
}
jerry_release_value (ret_val_print);
jerry_release_value (ret_val_eval); jerry_release_value (ret_val_eval);
} }
} }
@@ -447,20 +482,7 @@ main (int argc,
if (jerry_value_has_error_flag (ret_value)) if (jerry_value_has_error_flag (ret_value))
{ {
jerry_value_clear_error_flag (&ret_value); print_unhandled_exception (ret_value);
jerry_value_t err_str_val = jerry_value_to_string (ret_value);
jerry_char_t err_str_buf[256];
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
assert (err_str_size < 256);
jerry_size_t sz = jerry_string_to_char_buffer (err_str_val, err_str_buf, err_str_size);
assert (sz == err_str_size);
err_str_buf[err_str_size] = 0;
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Script Error: unhandled exception: %s\n", err_str_buf);
jerry_release_value (err_str_val);
ret_code = JERRY_STANDALONE_EXIT_CODE_FAIL; ret_code = JERRY_STANDALONE_EXIT_CODE_FAIL;
} }