jerry_example_addModule.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include <rtthread.h>
  2. #include <jerry_util.h>
  3. struct circle_t
  4. {
  5. double radius;
  6. };
  7. void circle_free_callback(void *native_p)
  8. {
  9. struct circle_t* circle = (struct circle_t*)native_p;
  10. free(circle);
  11. }
  12. const static jerry_object_native_info_t circle_info =
  13. {
  14. circle_free_callback
  15. };
  16. DECLARE_HANDLER(setRadius)
  17. {
  18. if(args_cnt!=1 || !jerry_value_is_number(args[0]))
  19. return jerry_create_undefined();
  20. void* native_pointer = RT_NULL;
  21. jerry_get_object_native_pointer(this_value,&native_pointer,RT_NULL);
  22. if(native_pointer)
  23. {
  24. struct circle_t* circle = (struct circle_t*)native_pointer;
  25. double r = jerry_get_number_value(args[0]);
  26. circle->radius = r;
  27. }
  28. return jerry_create_undefined();
  29. };
  30. DECLARE_HANDLER(getRadius)
  31. {
  32. if(args_cnt != 0)
  33. return jerry_create_undefined();
  34. void* native_pointer = RT_NULL;
  35. jerry_get_object_native_pointer(this_value,&native_pointer,RT_NULL);
  36. if(native_pointer)
  37. {
  38. struct circle_t* circle = (struct circle_t*)native_pointer;
  39. jerry_value_t js_radius = jerry_create_number(circle->radius);
  40. return js_radius;
  41. }
  42. return jerry_create_undefined();
  43. };
  44. jerry_value_t Circle_init()
  45. {
  46. jerry_value_t js_circle = jerry_create_object();
  47. struct circle_t* circle = (struct circle_t*)malloc(sizeof(struct circle_t));
  48. memset(circle,0,sizeof(struct circle_t));
  49. jerry_set_object_native_pointer(js_circle,circle,&circle_info);
  50. REGISTER_METHOD(js_circle,setRadius);
  51. REGISTER_METHOD(js_circle,getRadius);
  52. return js_circle;
  53. }
  54. JS_MODULE(Circle,Circle_init);