Simplify jerry_get_resource_name (#4730)
JerryScript-DCO-1.0-Signed-off-by: Gergo Csizi csgergo92@gmail.com
This commit is contained in:
+13
-15
@@ -5388,26 +5388,24 @@ jerry_value_t
|
|||||||
jerry_get_resource_name (const jerry_value_t value) /**< jerry api value */
|
jerry_get_resource_name (const jerry_value_t value) /**< jerry api value */
|
||||||
{
|
{
|
||||||
#if JERRY_RESOURCE_NAME
|
#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_value_t script_value = ((cbc_uint8_arguments_t *) bytecode_p)->script_value;
|
||||||
&& !ecma_get_object_is_builtin (obj_p))
|
cbc_script_t *script_p = ECMA_GET_INTERNAL_VALUE_POINTER (cbc_script_t, script_value);
|
||||||
{
|
|
||||||
ecma_extended_object_t *ext_func_p = (ecma_extended_object_t *) obj_p;
|
|
||||||
|
|
||||||
const ecma_compiled_code_t *bytecode_data_p = ecma_op_function_get_compiled_code (ext_func_p);
|
if (CBC_SCRIPT_GET_TYPE (script_p) == CBC_SCRIPT_GENERIC)
|
||||||
|
{
|
||||||
return ecma_copy_value (ecma_get_resource_name (bytecode_data_p));
|
return ecma_copy_value (script_p->resource_name);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif /* JERRY_RESOURCE_NAME */
|
#endif /* JERRY_RESOURCE_NAME */
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,62 @@ main (void)
|
|||||||
jerry_release_value (resource_value);
|
jerry_release_value (resource_value);
|
||||||
jerry_release_value (parse_options.resource_name);
|
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 (run_result);
|
||||||
jerry_release_value (program);
|
jerry_release_value (program);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user