jerry_example_addModule.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <rtthread.h>
  2. #include <jerry_util.h>
  3. class Circle
  4. {
  5. private:
  6. int radius ;
  7. public:
  8. Circle(int radius);
  9. int getRadius();
  10. float getCircumference();
  11. };
  12. Circle::Circle(int radius)
  13. {
  14. this->radius = radius;
  15. }
  16. int Circle::getRadius()
  17. {
  18. return this->radius;
  19. }
  20. float Circle::getCircumference()
  21. {
  22. return (2 * 3.1415 *this->radius);
  23. }
  24. void circle_free_callback(void *native_p)
  25. {
  26. Circle* rect = (Circle*)native_p;
  27. delete(rect);
  28. }
  29. const static jerry_object_native_info_t circle_info =
  30. {
  31. circle_free_callback
  32. };
  33. DECLARE_HANDLER(getCircumference)
  34. {
  35. void* native_pointer = RT_NULL;
  36. jerry_get_object_native_pointer(this_value,&native_pointer,RT_NULL);
  37. if(native_pointer)
  38. {
  39. Circle* circle = (Circle*)native_pointer;
  40. jerry_value_t js_circumference = jerry_create_number(circle->getCircumference());
  41. return js_circumference;
  42. }
  43. return jerry_create_undefined();
  44. };
  45. jerry_value_t Circle_init()
  46. {
  47. jerry_value_t js_circle = jerry_create_object();
  48. Circle* circle = new Circle(5);
  49. jerry_set_object_native_pointer(js_circle,circle,&circle_info);
  50. jerry_value_t js_radius = jerry_create_number(circle->getRadius());
  51. js_set_property(js_circle,strdup("radius"),js_radius);
  52. jerry_release_value(js_radius);
  53. REGISTER_METHOD(js_circle,getCircumference);
  54. return js_circle;
  55. }
  56. JS_MODULE(Circle,Circle_init);