Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions jerry-core/api/jerry.c
Original file line number Diff line number Diff line change
Expand Up @@ -396,10 +396,17 @@ jerry_parse (const jerry_char_t *resource_name_p, /**< resource name (usually a
#if ENABLED (JERRY_PARSER)
jerry_assert_api_available ();

#if ENABLED (JERRY_LINE_INFO)
JERRY_CONTEXT (resource_name) = ecma_find_or_create_literal_string (resource_name_p,
(lit_utf8_size_t) resource_name_length);
#endif /* ENABLED (JERRY_LINE_INFO) */
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
if (resource_name_length == 0)
{
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING_RESOURCE_ANON);
}
else
{
JERRY_CONTEXT (resource_name) = ecma_find_or_create_literal_string (resource_name_p,
(lit_utf8_size_t) resource_name_length);
}
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

ecma_compiled_code_t *bytecode_data_p;
ecma_value_t parse_status;
Expand Down Expand Up @@ -468,10 +475,17 @@ jerry_parse_function (const jerry_char_t *resource_name_p, /**< resource name (u
ecma_compiled_code_t *bytecode_data_p;
ecma_value_t parse_status;

#if ENABLED (JERRY_LINE_INFO)
JERRY_CONTEXT (resource_name) = ecma_find_or_create_literal_string (resource_name_p,
(lit_utf8_size_t) resource_name_length);
#endif /* ENABLED (JERRY_LINE_INFO) */
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
if (resource_name_length == 0)
{
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING_RESOURCE_ANON);
}
else
{
JERRY_CONTEXT (resource_name) = ecma_find_or_create_literal_string (resource_name_p,
(lit_utf8_size_t) resource_name_length);
}
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

if (arg_list_p == NULL)
{
Expand Down
15 changes: 15 additions & 0 deletions jerry-core/ecma/base/ecma-module.c
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,21 @@ ecma_module_parse (ecma_module_t *module_p) /**< module */
module_p->context_p->parent_p = JERRY_CONTEXT (module_top_context_p);
JERRY_CONTEXT (module_top_context_p) = module_p->context_p;

#if ENABLED (JERRY_DEBUGGER) && ENABLED (JERRY_PARSER)
if (JERRY_CONTEXT (debugger_flags) & JERRY_DEBUGGER_CONNECTED)
{
jerry_debugger_send_string (JERRY_DEBUGGER_SOURCE_CODE_NAME,
JERRY_DEBUGGER_NO_SUBTYPE,
script_path_p,
script_path_size - 1);
}
#endif /* ENABLED (JERRY_DEBUGGER) && ENABLED (JERRY_PARSER) */

#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
JERRY_CONTEXT (resource_name) = ecma_make_string_value (ecma_new_ecma_string_from_utf8 (script_path_p,
script_path_size - 1));
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

ecma_compiled_code_t *bytecode_data_p;
ecma_value_t ret_value = parser_parse_script (NULL,
0,
Expand Down
10 changes: 5 additions & 5 deletions jerry-core/ecma/builtin-objects/ecma-builtin-function.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
#include "js-parser.h"
#include "lit-magic-strings.h"

#if ENABLED (JERRY_LINE_INFO)
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
#include "jcontext.h"
#endif /* ENABLED (JERRY_LINE_INFO) */
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

#define ECMA_BUILTINS_INTERNAL
#include "ecma-builtins-internal.h"
Expand Down Expand Up @@ -159,9 +159,9 @@ ecma_builtin_function_dispatch_construct (const ecma_value_t *arguments_list_p,
ECMA_STRING_TO_UTF8_STRING (arguments_str_p, arguments_buffer_p, arguments_buffer_size);
ECMA_STRING_TO_UTF8_STRING (function_body_str_p, function_body_buffer_p, function_body_buffer_size);

#if ENABLED (JERRY_LINE_INFO)
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY);
#endif /* ENABLED (JERRY_LINE_INFO) */
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING_RESOURCE_ANON);
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

ecma_compiled_code_t *bytecode_data_p = NULL;

Expand Down
6 changes: 3 additions & 3 deletions jerry-core/ecma/operations/ecma-eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ ecma_op_eval_chars_buffer (const lit_utf8_byte_t *code_p, /**< code characters b
parse_opts &= (uint32_t) ~ECMA_PARSE_STRICT_MODE;
}

#if ENABLED (JERRY_LINE_INFO)
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY);
#endif /* ENABLED (JERRY_LINE_INFO) */
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
JERRY_CONTEXT (resource_name) = ecma_make_magic_string_value (LIT_MAGIC_STRING_RESOURCE_EVAL);
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

#if ENABLED (JERRY_ES2015_CLASS)
ECMA_CLEAR_SUPER_EVAL_PARSER_OPTS ();
Expand Down
4 changes: 2 additions & 2 deletions jerry-core/jcontext/jcontext.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,9 @@ struct jerry_context_t
uint8_t debugger_max_receive_size; /**< maximum amount of data that can be received */
#endif /* ENABLED (JERRY_DEBUGGER) */

#if ENABLED (JERRY_LINE_INFO)
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
ecma_value_t resource_name; /**< resource name (usually a file name) */
#endif /* ENABLED (JERRY_LINE_INFO) */
#endif /* ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) */

#if ENABLED (JERRY_MEM_STATS)
jmem_heap_stats_t jmem_heap_stats; /**< heap's memory usage statistics */
Expand Down
14 changes: 12 additions & 2 deletions jerry-core/lit/lit-magic-strings.inc.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SLICE, "slice")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SPLIT, "split")
#endif
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_VALUE, "value")
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) && ENABLED (JERRY_PARSER)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_RESOURCE_EVAL, "<eval>")
#endif
#if ENABLED (JERRY_BUILTIN_MATH)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LOG10E_U, "LOG10E")
#endif
Expand Down Expand Up @@ -566,6 +569,9 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_UTC_DATE_UL, "setUTCDate")
#if ENABLED (JERRY_BUILTIN_STRING) && ENABLED (JERRY_ES2015_BUILTIN)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_STARTS_WITH, "startsWith")
#endif
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_RESOURCE_ANON, "<anonymous>")
#endif
#if ENABLED (JERRY_ES2015_BUILTIN_DATAVIEW) \
|| ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ARRAY_BUFFER_UL, "ArrayBuffer")
Expand Down Expand Up @@ -757,7 +763,9 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (4, LIT_MAGIC_STRING_EMPTY_NON_CAPTURE_G
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (4, LIT_MAGIC_STRING_DATE_UL)
#endif
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (5, LIT_MAGIC_STRING_ARRAY_UL)
#if ENABLED (JERRY_BUILTIN_MATH)
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES) && ENABLED (JERRY_PARSER)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (6, LIT_MAGIC_STRING_RESOURCE_EVAL)
#elif ENABLED (JERRY_BUILTIN_MATH)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (6, LIT_MAGIC_STRING_LOG10E_U)
#else
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (6, LIT_MAGIC_STRING_NUMBER_UL)
Expand All @@ -783,7 +791,9 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (10, LIT_MAGIC_STRING_CHAR_CODE_AT_UL)
#else
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (10, LIT_MAGIC_STRING_ENUMERABLE)
#endif
#if ENABLED (JERRY_ES2015_BUILTIN_DATAVIEW) \
#if ENABLED (JERRY_LINE_INFO) || ENABLED (JERRY_ERROR_MESSAGES)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (11, LIT_MAGIC_STRING_RESOURCE_ANON)
#elif ENABLED (JERRY_ES2015_BUILTIN_DATAVIEW) \
|| ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (11, LIT_MAGIC_STRING_ARRAY_BUFFER_UL)
#elif ENABLED (JERRY_BUILTIN_ERRORS)
Expand Down
2 changes: 2 additions & 0 deletions jerry-core/lit/lit-magic-strings.ini
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ LIT_MAGIC_STRING_SHIFT = "shift"
LIT_MAGIC_STRING_SLICE = "slice"
LIT_MAGIC_STRING_SPLIT = "split"
LIT_MAGIC_STRING_VALUE = "value"
LIT_MAGIC_STRING_RESOURCE_EVAL = "<eval>"
LIT_MAGIC_STRING_LOG10E_U = "LOG10E"
LIT_MAGIC_STRING_NUMBER_UL = "Number"
LIT_MAGIC_STRING_OBJECT_UL = "Object"
Expand Down Expand Up @@ -247,6 +248,7 @@ LIT_MAGIC_STRING_SET_MINUTES_UL = "setMinutes"
LIT_MAGIC_STRING_SET_SECONDS_UL = "setSeconds"
LIT_MAGIC_STRING_SET_UTC_DATE_UL = "setUTCDate"
LIT_MAGIC_STRING_STARTS_WITH = "startsWith"
LIT_MAGIC_STRING_RESOURCE_ANON = "<anonymous>"
LIT_MAGIC_STRING_ARRAY_BUFFER_UL = "ArrayBuffer"
LIT_MAGIC_STRING_SYNTAX_ERROR_UL = "SyntaxError"
LIT_MAGIC_STRING_UINT16_ARRAY_UL = "Uint16Array"
Expand Down
3 changes: 2 additions & 1 deletion jerry-core/parser/js/js-parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -2962,8 +2962,9 @@ parser_parse_script (const uint8_t *arg_list_p, /**< function argument list */
ecma_value_t col_str_val = ecma_make_uint32_value (parser_error.column);

ecma_value_t error_value = ecma_raise_standard_error_with_format (ECMA_ERROR_SYNTAX,
"% [line: %, column: %]",
"% [%:%:%]",
err_str_val,
JERRY_CONTEXT (resource_name),
line_str_val,
col_str_val);

Expand Down
53 changes: 27 additions & 26 deletions jerry-main/main-unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,46 +158,37 @@ print_unhandled_exception (jerry_value_t error_value) /**< error value */
if (jerry_is_feature_enabled (JERRY_FEATURE_ERROR_MESSAGES)
&& jerry_get_error_type (error_value) == JERRY_ERROR_SYNTAX)
{
jerry_char_t *string_end_p = err_str_buf + string_end;
unsigned int err_line = 0;
unsigned int err_col = 0;
char *path_str_p = NULL;
char *path_str_end_p = NULL;

/* 1. parse column and line information */
for (jerry_size_t i = 0; i < string_end; i++)
for (jerry_char_t *current_p = err_str_buf; current_p < string_end_p; current_p++)
{
if (!strncmp ((char *) (err_str_buf + i), "[line: ", 7))
if (*current_p == '[')
{
i += 7;
current_p++;

char num_str[8];
unsigned int j = 0;

while (i < string_end && err_str_buf[i] != ',')
if (*current_p == '<')
{
num_str[j] = (char) err_str_buf[i];
j++;
i++;
break;
}
num_str[j] = '\0';

err_line = (unsigned int) strtol (num_str, NULL, 10);

if (strncmp ((char *) (err_str_buf + i), ", column: ", 10))
path_str_p = (char *) current_p;
while (current_p < string_end_p && *current_p != ':')
{
break; /* wrong position info format */
current_p++;
}

i += 10;
j = 0;
path_str_end_p = (char *) current_p++;

while (i < string_end && err_str_buf[i] != ']')
{
num_str[j] = (char) err_str_buf[i];
j++;
i++;
}
num_str[j] = '\0';
err_line = (unsigned int) strtol ((char *) current_p, (char **) &current_p, 10);

current_p++;

err_col = (unsigned int) strtol (num_str, NULL, 10);
err_col = (unsigned int) strtol ((char *) current_p, NULL, 10);
break;
}
} /* for */
Expand All @@ -209,8 +200,18 @@ print_unhandled_exception (jerry_value_t error_value) /**< error value */
bool is_printing_context = false;
unsigned int pos = 0;

size_t source_size;

/* Temporarily modify the error message, so we can use the path. */
*path_str_end_p = '\0';

read_file (path_str_p, &source_size);

/* Revert the error message. */
*path_str_end_p = ':';

/* 2. seek and print */
while ((pos < JERRY_BUFFER_SIZE) && (buffer[pos] != '\0'))
while ((pos < source_size) && (buffer[pos] != '\0'))
{
if (buffer[pos] == '\n')
{
Expand Down
Loading