Guest User

Untitled

a guest
May 23rd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. #include <jerryscript.h>
  5. #include <jerryscript-ext/handler.h>
  6.  
  7.  
  8. static jerry_value_t c_function_handler(const jerry_value_t function_obj,
  9. const jerry_value_t this_val,
  10. const jerry_value_t args_p[],
  11. const jerry_length_t args_cnt)
  12. {
  13. jerry_value_t prototype = jerry_get_prototype(this_val);
  14.  
  15. jerry_value_t prop_name = jerry_create_string((const jerry_char_t *)"x");
  16. jerry_value_t receive_function = jerry_get_property(prototype, prop_name);
  17.  
  18. if (!jerry_value_is_function(receive_function))
  19. {
  20. puts("not a function :(");
  21. return jerry_create_boolean(false);
  22. }
  23.  
  24. jerry_call_function(receive_function, jerry_create_undefined(), 0, 0);//args, argc);
  25. return jerry_create_boolean(true);
  26. }
  27.  
  28.  
  29. int main()
  30. {
  31. jerry_init(JERRY_INIT_EMPTY);
  32.  
  33. const char *script =
  34.  
  35. " function Test() "
  36. " { "
  37. " c_function(this); "
  38. " } "
  39. " "
  40. " Test.prototype.x = function() "
  41. " { "
  42. " print('SUCCESS!'); "
  43. " }; "
  44. " "
  45. " function go() "
  46. " { "
  47. " var x = new Test(); "
  48. " } "
  49. " "
  50. " go(); ";
  51.  
  52. jerry_value_t parsed_code = jerry_parse(0, 0, (jerry_char_t *)script, strlen(script), JERRY_PARSE_NO_OPTS);
  53.  
  54. jerry_value_t glob_obj = jerry_get_global_object();
  55.  
  56. jerry_value_t prop_name = jerry_create_string((const jerry_char_t *)"c_function");
  57. jerry_value_t func_val = jerry_create_external_function(c_function_handler);
  58. jerry_set_property(glob_obj, prop_name, func_val);
  59.  
  60.  
  61. jerryx_handler_register_global((const jerry_char_t *)"print", jerryx_handler_print);
  62.  
  63.  
  64. if (!jerry_value_is_error(parsed_code))
  65. {
  66. jerry_value_t ret_value = jerry_run(parsed_code);
  67. jerry_release_value(ret_value);
  68. }
  69. else
  70. {
  71. puts("error!");
  72.  
  73. jerry_error_t err = jerry_get_error_type(parsed_code);
  74. printf("type: %d\n", err);
  75. }
  76.  
  77.  
  78. jerry_cleanup();
  79. return 0;
  80. }
Add Comment
Please, Sign In to add comment