Skip to content

Commit 48d5eee

Browse files
committed
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 [email protected]
1 parent c6e68ce commit 48d5eee

File tree

1 file changed

+43
-21
lines changed

1 file changed

+43
-21
lines changed

jerry-main/main-unix.c

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,33 @@ print_help (char *name)
121121
name);
122122
} /* print_help */
123123

124+
static void
125+
print_unhandled_exception (jerry_value_t error_value)
126+
{
127+
assert (jerry_value_has_error_flag (error_value));
128+
129+
jerry_value_clear_error_flag (&error_value);
130+
jerry_value_t err_str_val = jerry_value_to_string (error_value);
131+
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
132+
jerry_char_t err_str_buf[256];
133+
134+
if (err_str_size >= 256)
135+
{
136+
const char msg[] = "[Error message too long]";
137+
err_str_size = sizeof (msg) / sizeof (char) - 1;
138+
memcpy (err_str_buf, msg, err_str_size);
139+
}
140+
else
141+
{
142+
jerry_size_t sz = jerry_string_to_char_buffer (err_str_val, err_str_buf, err_str_size);
143+
assert (sz == err_str_size);
144+
}
145+
err_str_buf[err_str_size] = 0;
146+
147+
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Script Error: unhandled exception: %s\n", err_str_buf);
148+
jerry_release_value (err_str_val);
149+
} /* print_unhandled_exception */
150+
124151
int
125152
main (int argc,
126153
char **argv)
@@ -335,6 +362,7 @@ main (int argc,
335362
if (source_p == NULL)
336363
{
337364
ret_value = jerry_create_error (JERRY_ERROR_COMMON, (jerry_char_t *) "");
365+
break;
338366
}
339367

340368
if (is_save_snapshot_mode)
@@ -427,14 +455,21 @@ main (int argc,
427455
/* Evaluate the line */
428456
jerry_value_t ret_val_eval = jerry_eval (buffer, len, false);
429457

430-
/* Print return value */
431-
const jerry_value_t args[] = { ret_val_eval };
432-
jerry_value_t ret_val_print = jerry_call_function (print_function,
433-
jerry_create_undefined (),
434-
args,
435-
1);
458+
if (!jerry_value_has_error_flag (ret_val_eval))
459+
{
460+
/* Print return value */
461+
const jerry_value_t args[] = { ret_val_eval };
462+
jerry_value_t ret_val_print = jerry_call_function (print_function,
463+
jerry_create_undefined (),
464+
args,
465+
1);
466+
jerry_release_value (ret_val_print);
467+
}
468+
else
469+
{
470+
print_unhandled_exception (ret_val_eval);
471+
}
436472

437-
jerry_release_value (ret_val_print);
438473
jerry_release_value (ret_val_eval);
439474
}
440475
}
@@ -447,20 +482,7 @@ main (int argc,
447482

448483
if (jerry_value_has_error_flag (ret_value))
449484
{
450-
jerry_value_clear_error_flag (&ret_value);
451-
jerry_value_t err_str_val = jerry_value_to_string (ret_value);
452-
453-
jerry_char_t err_str_buf[256];
454-
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
455-
456-
assert (err_str_size < 256);
457-
jerry_size_t sz = jerry_string_to_char_buffer (err_str_val, err_str_buf, err_str_size);
458-
assert (sz == err_str_size);
459-
err_str_buf[err_str_size] = 0;
460-
461-
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Script Error: unhandled exception: %s\n", err_str_buf);
462-
463-
jerry_release_value (err_str_val);
485+
print_unhandled_exception (ret_value);
464486

465487
ret_code = JERRY_STANDALONE_EXIT_CODE_FAIL;
466488
}

0 commit comments

Comments
 (0)