Introduce jerry_get_resource_name API function (#3236)
This new API function adds possibility to query the resource name of the currently executed script (including modules) or a function object. This patch closes #2170. JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
committed by
Dániel Bátyai
parent
55423ab82a
commit
525c35f148
@@ -7556,6 +7556,105 @@ main (void)
|
||||
- [jerry_create_external_function](#jerry_create_external_function)
|
||||
|
||||
|
||||
## jerry_get_resurce_name
|
||||
|
||||
**Summary**
|
||||
|
||||
Get the resource name (usually a file name) of the currently executed script or the given function object.
|
||||
|
||||
This function is typically called from native callbacks.
|
||||
|
||||
*Notes*:
|
||||
- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
|
||||
is no longer needed.
|
||||
- This feature depends on build option (`JERRY_LINE_INFO`) and can be checked
|
||||
in runtime with the `JERRY_FEATURE_LINE_INFO` feature enum value,
|
||||
see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
|
||||
|
||||
**Prototype**
|
||||
|
||||
```c
|
||||
jerry_value_t
|
||||
jerry_get_resurce_name (void);
|
||||
```
|
||||
|
||||
- return string value constructed from
|
||||
- the currently executed function object's resource name, if the given value is undefined
|
||||
- resource name of the function object, if the given value is a function object
|
||||
- "<anonymous>", otherwise
|
||||
|
||||
**Example**
|
||||
|
||||
[doctest]: # (name="02.API-REFERENCE-jsresourcename.c")
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "jerryscript.h"
|
||||
|
||||
static jerry_value_t
|
||||
resource_name_handler (const jerry_value_t function_obj,
|
||||
const jerry_value_t this_val,
|
||||
const jerry_value_t args_p[],
|
||||
const jerry_length_t args_count)
|
||||
{
|
||||
jerry_value_t undefined_value = jerry_create_undefined ();
|
||||
jerry_value_t resource_name = jerry_get_resource_name (args_count > 0 ? args_p[0] : undefined_value);
|
||||
jerry_release_value (undefined_value);
|
||||
|
||||
return resource_name;
|
||||
} /* resource_name_handler */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_value_t global = jerry_get_global_object ();
|
||||
|
||||
/* Register the "resourceName" method. */
|
||||
{
|
||||
jerry_value_t func = jerry_create_external_function (resource_name_handler);
|
||||
jerry_value_t name = jerry_create_string ((const jerry_char_t *) "resourceName");
|
||||
jerry_value_t result = jerry_set_property (global, name, func);
|
||||
jerry_release_value (result);
|
||||
jerry_release_value (name);
|
||||
jerry_release_value (func);
|
||||
}
|
||||
|
||||
jerry_release_value (global);
|
||||
|
||||
const jerry_char_t source[] = "function myFunction() { return resourceName() }; myFunction()";
|
||||
const jerry_char_t resource[] = "demo.js";
|
||||
|
||||
jerry_value_t program = jerry_parse (resource,
|
||||
sizeof (resource) - 1,
|
||||
source,
|
||||
sizeof (source) - 1,
|
||||
JERRY_PARSE_NO_OPTS);
|
||||
|
||||
if (!jerry_value_is_error (program))
|
||||
{
|
||||
/* `run_result` contains "demo.js" */
|
||||
jerry_value_t run_result = jerry_run (program);
|
||||
|
||||
/* usage of `run_result` */
|
||||
|
||||
jerry_release_value (run_result);
|
||||
}
|
||||
|
||||
jerry_release_value (program);
|
||||
jerry_cleanup ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_create_external_function](#jerry_create_external_function)
|
||||
|
||||
|
||||
# ArrayBuffer and TypedArray functions
|
||||
|
||||
These APIs all depend on the ES2015-subset profile.
|
||||
|
||||
Reference in New Issue
Block a user