Simplify jerry_get_resource_name (#4730)

JerryScript-DCO-1.0-Signed-off-by: Gergo Csizi csgergo92@gmail.com
This commit is contained in:
Gergo Csizi 2021-08-12 17:21:37 +02:00 committed by GitHub
parent 3ed93cfb51
commit fc29019165
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 15 deletions

View File

@ -5388,26 +5388,24 @@ jerry_value_t
jerry_get_resource_name (const jerry_value_t value) /**< jerry api value */
{
#if JERRY_RESOURCE_NAME
if (ecma_is_value_undefined (value))
if (ecma_is_value_undefined (value) && JERRY_CONTEXT (vm_top_context_p) != NULL)
{
if (JERRY_CONTEXT (vm_top_context_p) != NULL)
{
return ecma_copy_value (ecma_get_resource_name (JERRY_CONTEXT (vm_top_context_p)->shared_p->bytecode_header_p));
}
return ecma_copy_value (ecma_get_resource_name (JERRY_CONTEXT (vm_top_context_p)->shared_p->bytecode_header_p));
}
else if (ecma_is_value_object (value))
const ecma_compiled_code_t *bytecode_p = ecma_bytecode_get_from_value (value);
if (bytecode_p == NULL)
{
ecma_object_t *obj_p = ecma_get_object_from_value (value);
return ecma_make_magic_string_value (LIT_MAGIC_STRING_RESOURCE_ANON);
}
if (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_FUNCTION
&& !ecma_get_object_is_builtin (obj_p))
{
ecma_extended_object_t *ext_func_p = (ecma_extended_object_t *) obj_p;
ecma_value_t script_value = ((cbc_uint8_arguments_t *) bytecode_p)->script_value;
cbc_script_t *script_p = ECMA_GET_INTERNAL_VALUE_POINTER (cbc_script_t, script_value);
const ecma_compiled_code_t *bytecode_data_p = ecma_op_function_get_compiled_code (ext_func_p);
return ecma_copy_value (ecma_get_resource_name (bytecode_data_p));
}
if (CBC_SCRIPT_GET_TYPE (script_p) == CBC_SCRIPT_GENERIC)
{
return ecma_copy_value (script_p->resource_name);
}
#endif /* JERRY_RESOURCE_NAME */

View File

@ -114,6 +114,62 @@ main (void)
jerry_release_value (resource_value);
jerry_release_value (parse_options.resource_name);
jerry_release_value (run_result);
jerry_release_value (program);
if (jerry_is_feature_enabled (JERRY_FEATURE_MODULE))
{
const char *source_3 = "";
parse_options.options = JERRY_PARSE_MODULE | JERRY_PARSE_HAS_RESOURCE;
parse_options.resource_name = jerry_create_string ((const jerry_char_t *) "demo3.js");
program = jerry_parse ((const jerry_char_t *) source_3,
strlen (source_3),
&parse_options);
TEST_ASSERT (!jerry_value_is_error (program));
resource_value = jerry_get_resource_name (program);
TEST_ASSERT (jerry_binary_operation (JERRY_BIN_OP_STRICT_EQUAL, resource_value, parse_options.resource_name));
jerry_release_value (resource_value);
run_result = jerry_module_link (program, NULL, NULL);
TEST_ASSERT (!jerry_value_is_error (run_result));
resource_value = jerry_get_resource_name (run_result);
TEST_ASSERT (jerry_binary_operation (JERRY_BIN_OP_STRICT_EQUAL, resource_value, parse_options.resource_name));
jerry_release_value (resource_value);
jerry_release_value (run_result);
run_result = jerry_module_evaluate (program);
TEST_ASSERT (!jerry_value_is_error (run_result));
resource_value = jerry_get_resource_name (run_result);
TEST_ASSERT (jerry_binary_operation (JERRY_BIN_OP_STRICT_EQUAL, resource_value, parse_options.resource_name));
jerry_release_value (resource_value);
jerry_release_value (run_result);
jerry_release_value (program);
jerry_release_value (parse_options.resource_name);
}
const char *source_4 = ("function f(){} \n"
"f.bind().bind();");
parse_options.options = JERRY_PARSE_HAS_RESOURCE;
parse_options.resource_name = jerry_create_string ((jerry_char_t *) "demo4.js");
program = jerry_parse ((const jerry_char_t *) source_4,
strlen (source_4),
&parse_options);
TEST_ASSERT (!jerry_value_is_error (program));
run_result = jerry_run (program);
TEST_ASSERT (!jerry_value_is_error (run_result));
TEST_ASSERT (jerry_value_is_object (run_result));
resource_value = jerry_get_resource_name (run_result);
TEST_ASSERT (jerry_binary_operation (JERRY_BIN_OP_STRICT_EQUAL, resource_value, parse_options.resource_name));
jerry_release_value (resource_value);
jerry_release_value (parse_options.resource_name);
jerry_release_value (run_result);
jerry_release_value (program);