1
0

runtime.hpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef AFUN_RUNTIME_HPP
  2. #define AFUN_RUNTIME_HPP
  3. #include <iostream>
  4. typedef struct APIFuncList APIFuncList;
  5. struct APIFuncList {
  6. const char *name;
  7. void *func; // objectAPIFunc
  8. DlcHandle *dlc; // func 的 来源
  9. DLC_SYMBOL(objectAPIFunc) func_; // func_和func二选一, func_时dlc无效
  10. bool free_func_; // func_是否需要释放
  11. };
  12. typedef struct InheritDefineList InheritDefineList;
  13. struct InheritDefineList {
  14. af_Object *obj;
  15. };
  16. typedef struct ObjectDefineList ObjectDefineList;
  17. struct ObjectDefineList {
  18. const std::string &id;
  19. bool free_api;
  20. af_ObjectAPI *api;
  21. struct APIFuncList *api_list; // api和api_list只能二选一
  22. bool allow_inherit;
  23. af_Object *belong;
  24. af_Inherit *inherit;
  25. const char *var_name;
  26. char p_self, p_posterity, p_external;
  27. af_Object **save; // obj保存位置
  28. };
  29. typedef struct LiteralFuncList LiteralFuncList;
  30. struct LiteralFuncList {
  31. const char *pattern;
  32. const char *func;
  33. bool in_protect;
  34. };
  35. typedef struct TopMsgFuncList TopMsgFuncList;
  36. struct TopMsgFuncList {
  37. const char *type;
  38. TopMsgProcessFunc *func;
  39. DlcHandle *dlc; // func 的 来源
  40. DLC_SYMBOL(TopMsgProcessFunc) func_; // func_和func二选一, func_时dlc无效
  41. bool free_func_; // func_是否需要释放
  42. };
  43. typedef struct GuardianFuncList GuardianFuncList;
  44. struct GuardianFuncList {
  45. const char *type;
  46. bool always;
  47. bool derive;
  48. size_t size;
  49. DlcHandle *dlc; // func/destruct 的 来源
  50. GuardianFunc *func;
  51. DLC_SYMBOL(GuardianFunc) func_;
  52. bool free_func_; // func_是否需要释放
  53. GuardianDestruct *destruct;
  54. DLC_SYMBOL(GuardianDestruct) destruct_;
  55. bool free_destruct_; // func_是否需要释放
  56. void **data;
  57. void (*initData)(void *data, af_Environment *env); // data初始化的函数
  58. };
  59. AFUN_LANG_EXPORT int runtimeTool(const char *name, af_Code **code, af_Object *visitor, af_VarSpace *vs, af_Environment *env);
  60. AFUN_LANG_EXPORT int runtimeToolImport(const char *name, af_Object **obj, af_Code **code, af_Environment *env);
  61. AFUN_LANG_EXPORT af_ObjectAPI *makeAPIFromList(const APIFuncList api_list[]);
  62. AFUN_LANG_EXPORT void makeObjectFromList(const ObjectDefineList obj_def[], af_Object *visitor, af_VarSpace *vs, af_Environment *env);
  63. AFUN_LANG_EXPORT void makeLiteralRegexFromList(const LiteralFuncList literal_list[], af_Environment *env);
  64. AFUN_LANG_EXPORT void makeTopMsgProcessFromList(const TopMsgFuncList top_msg_list[], af_Environment *env);
  65. AFUN_LANG_EXPORT af_Inherit *makeInheritFromList(const InheritDefineList inherit_list[], bool is_reverse);
  66. AFUN_LANG_EXPORT void makeGuardianFromList(const GuardianFuncList gd_list[], af_Environment *env);
  67. #endif //AFUN_RUNTIME_HPP