Throw SyntaxError when module resolving is failed (#4765)

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg 2021-09-09 22:11:42 +02:00 committed by GitHub
parent fea10bb7e3
commit 2c2539c6b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 2 deletions

View File

@ -278,12 +278,12 @@ ecma_module_resolve_throw (ecma_module_resolve_result_t *resolve_result_p, /**<
} }
} }
return ecma_raise_standard_error_with_format (JERRY_ERROR_REFERENCE, msg_p, name_val); return ecma_raise_standard_error_with_format (JERRY_ERROR_SYNTAX, msg_p, name_val);
#else /* JERRY_ERROR_MESSAGES */ #else /* JERRY_ERROR_MESSAGES */
JERRY_UNUSED (resolve_result_p); JERRY_UNUSED (resolve_result_p);
JERRY_UNUSED (name_p); JERRY_UNUSED (name_p);
return ecma_raise_reference_error (NULL); return ecma_raise_syntax_error (NULL);
#endif /* !JERRY_ERROR_MESSAGES */ #endif /* !JERRY_ERROR_MESSAGES */
} /* ecma_module_resolve_throw */ } /* ecma_module_resolve_throw */

View File

@ -265,6 +265,19 @@ module_state_changed (jerry_module_state_t new_state, /**< new state of the modu
} }
} /* module_state_changed */ } /* module_state_changed */
static jerry_value_t
resolve_callback5 (const jerry_value_t specifier, /**< module specifier */
const jerry_value_t referrer, /**< parent module */
void *user_p) /**< user data */
{
(void) specifier;
(void) user_p;
/* This circular reference is valid. However, import resolving triggers
* a SyntaxError, because the module does not export a default binding. */
return referrer;
} /* resolve_callback5 */
int int
main (void) main (void)
{ {
@ -549,6 +562,16 @@ main (void)
TEST_ASSERT (counter == 4); TEST_ASSERT (counter == 4);
jerry_char_t source6[] = TEST_STRING_LITERAL (
"import a from 'self'\n"
);
module = jerry_parse (source6, sizeof (source6) - 1, &module_parse_options);
result = jerry_module_link (module, resolve_callback5, NULL);
TEST_ASSERT (jerry_value_is_error (result)
&& jerry_get_error_type (result) == JERRY_ERROR_SYNTAX);
jerry_release_value (result);
jerry_cleanup (); jerry_cleanup ();
return 0; return 0;