runtime.hpp 2.7 KB

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