@@ -7655,6 +7655,138 @@ main (void)
76557655
76567656- [jerry_create_external_function](#jerry_create_external_function)
76577657
7658+ ## jerry_get_new_target
7659+
7660+ **Summary**
7661+
7662+ Returns the current "new.target" JavaScript function at the call site.
7663+
7664+ If used outside of a native C function it will return "undefined" value.
7665+
7666+ *Notes*:
7667+ - Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
7668+ is no longer needed.
7669+ - This feature depends on build option (`JERRY_ES2015`) and can be checked
7670+ in runtime with the `JERRY_FEATURE_SYMBOL` feature enum value (as symbols are enabled in case of ES2015),
7671+ see: [jerry_is_feature_enabled](#jerry_is_feature_enabled).
7672+ - If the ES2015 mode is not enabled this method will always return the "undefined" value.
7673+
7674+ **Prototype**
7675+
7676+ ```c
7677+ jerry_value_t
7678+ jerry_get_new_target (void);
7679+ ```
7680+ - return
7681+ - "undefined" - if at the call site it was not a constructor call.
7682+ - function object - if the current call site is in a constructor call.
7683+
7684+ *New in version 2.2*.
7685+
7686+ **Example 1**
7687+
7688+ [doctest]: # (name="02.API-REFERENCE-jsnewtarget-01.c")
7689+
7690+ ```c
7691+ #include <stdio.h>
7692+ #include <string.h>
7693+ #include <jerryscript.h>
7694+
7695+ static jerry_value_t
7696+ demo_handler (const jerry_value_t func_obj_val,
7697+ const jerry_value_t this_val,
7698+ const jerry_value_t args_p[],
7699+ const jerry_length_t args_cnt)
7700+ {
7701+ jerry_value_t new_target = jerry_get_new_target ();
7702+
7703+ /* new_target is the "demo" JS function object */
7704+ if (jerry_value_get_type (new_target) == JERRY_TYPE_FUNCTION)
7705+ {
7706+ printf ("This is a construct call\r\n");
7707+ }
7708+
7709+ jerry_release_value (new_target);
7710+
7711+ return jerry_create_undefined ();
7712+ }
7713+
7714+ int
7715+ main (int argc, char** argv)
7716+ {
7717+ jerry_init (JERRY_INIT_EMPTY);
7718+
7719+ jerry_value_t function_val = jerry_create_external_function (demo_handler);
7720+
7721+ jerry_value_t ret_val = jerry_construct_object (function_val, NULL, 0);
7722+
7723+ jerry_release_value (ret_val);
7724+ jerry_release_value (function_val);
7725+
7726+ jerry_cleanup ();
7727+ return 0;
7728+ }
7729+ ```
7730+
7731+ **Example 2**
7732+
7733+ [doctest]: # (name="02.API-REFERENCE-jsnewtarget-02.c")
7734+
7735+ ```c
7736+ #include <stdio.h>
7737+ #include <string.h>
7738+ #include <jerryscript.h>
7739+
7740+ static jerry_value_t
7741+ demo_handler (const jerry_value_t func_obj_val,
7742+ const jerry_value_t this_val,
7743+ const jerry_value_t args_p[],
7744+ const jerry_length_t args_cnt)
7745+ {
7746+ jerry_value_t new_target = jerry_get_new_target ();
7747+
7748+ /* new_target is a JS function object */
7749+ if (jerry_value_get_type (new_target) == JERRY_TYPE_FUNCTION)
7750+ {
7751+ printf ("This is a construct call\r\n");
7752+ }
7753+
7754+ jerry_release_value (new_target);
7755+
7756+ return jerry_create_undefined ();
7757+ }
7758+
7759+ int
7760+ main (int argc, char** argv)
7761+ {
7762+ jerry_init (JERRY_INIT_EMPTY);
7763+
7764+ /* register C method */
7765+ jerry_value_t global_obj_val = jerry_get_global_object ();
7766+ jerry_value_t function_val = jerry_create_external_function (demo_handler);
7767+ jerry_value_t function_name_val = jerry_create_string ((const jerry_char_t *) "demo");
7768+ jerry_value_t result_val = jerry_set_property (global_obj_val, function_name_val, function_val);
7769+ jerry_release_value (result_val);
7770+ jerry_release_value (function_name_val);
7771+ jerry_release_value (function_val);
7772+ jerry_release_value (global_obj_val);
7773+
7774+ /* Invoke C method via JS */
7775+ const char *src = "new demo ()";
7776+ jerry_value_t ret_val = jerry_eval ((const jerry_char_t *) src,
7777+ strlen (src),
7778+ JERRY_PARSE_NO_OPTS);
7779+
7780+ jerry_release_value (ret_val);
7781+
7782+ jerry_cleanup ();
7783+ return 0;
7784+ }
7785+ ```
7786+
7787+ **See also**
7788+
7789+ - [jerry_construct_object](#jerry_construct_object)
76587790
76597791# ArrayBuffer and TypedArray functions
76607792
0 commit comments