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:
Robert Fancsik
2019-11-06 15:05:49 +01:00
committed by Dániel Bátyai
parent 55423ab82a
commit 525c35f148
16 changed files with 415 additions and 82 deletions
+99
View File
@@ -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.