Skip to content

Commit 2c2539c

Browse files
authored
Throw SyntaxError when module resolving is failed (#4765)
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
1 parent fea10bb commit 2c2539c

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

jerry-core/ecma/base/ecma-module.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,12 @@ ecma_module_resolve_throw (ecma_module_resolve_result_t *resolve_result_p, /**<
278278
}
279279
}
280280

281-
return ecma_raise_standard_error_with_format (JERRY_ERROR_REFERENCE, msg_p, name_val);
281+
return ecma_raise_standard_error_with_format (JERRY_ERROR_SYNTAX, msg_p, name_val);
282282
#else /* JERRY_ERROR_MESSAGES */
283283
JERRY_UNUSED (resolve_result_p);
284284
JERRY_UNUSED (name_p);
285285

286-
return ecma_raise_reference_error (NULL);
286+
return ecma_raise_syntax_error (NULL);
287287
#endif /* !JERRY_ERROR_MESSAGES */
288288
} /* ecma_module_resolve_throw */
289289

tests/unit-core/test-module.c

+23
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,19 @@ module_state_changed (jerry_module_state_t new_state, /**< new state of the modu
265265
}
266266
} /* module_state_changed */
267267

268+
static jerry_value_t
269+
resolve_callback5 (const jerry_value_t specifier, /**< module specifier */
270+
const jerry_value_t referrer, /**< parent module */
271+
void *user_p) /**< user data */
272+
{
273+
(void) specifier;
274+
(void) user_p;
275+
276+
/* This circular reference is valid. However, import resolving triggers
277+
* a SyntaxError, because the module does not export a default binding. */
278+
return referrer;
279+
} /* resolve_callback5 */
280+
268281
int
269282
main (void)
270283
{
@@ -549,6 +562,16 @@ main (void)
549562

550563
TEST_ASSERT (counter == 4);
551564

565+
jerry_char_t source6[] = TEST_STRING_LITERAL (
566+
"import a from 'self'\n"
567+
);
568+
module = jerry_parse (source6, sizeof (source6) - 1, &module_parse_options);
569+
570+
result = jerry_module_link (module, resolve_callback5, NULL);
571+
TEST_ASSERT (jerry_value_is_error (result)
572+
&& jerry_get_error_type (result) == JERRY_ERROR_SYNTAX);
573+
jerry_release_value (result);
574+
552575
jerry_cleanup ();
553576

554577
return 0;

0 commit comments

Comments
 (0)