env.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef AFUN_ENV
  2. #define AFUN_ENV
  3. #include "aFunCoreExport.h"
  4. #include "tool.h"
  5. #include "prefix_macro.h"
  6. typedef struct af_Environment af_Environment;
  7. typedef struct af_Message af_Message;
  8. typedef struct af_ErrorInfo af_ErrorInfo;
  9. /* 顶层消息处理器的处理函数 DLC */
  10. typedef void TopMsgProcessFunc(af_Message *msg, bool is_gc, af_Environment *env);
  11. DEFINE_DLC_SYMBOL(TopMsgProcessFunc);
  12. enum GcRunTime {
  13. grt_always = 0, // 总是运行
  14. grt_count, // 累计式运行
  15. };
  16. #include "code.h"
  17. #include "object.h"
  18. #include "var.h"
  19. /* 前缀管理函数 */
  20. AFUN_CORE_EXPORT char getPrefix(size_t name, af_Environment *env);
  21. AFUN_CORE_EXPORT char setPrefix(size_t name, char prefix, af_Environment *env);
  22. /* 运行环境函数 */
  23. AFUN_CORE_EXPORT af_Environment *makeEnvironment(enum GcRunTime grt);
  24. AFUN_CORE_EXPORT void enableEnvironment(af_Environment *env);
  25. AFUN_CORE_EXPORT void freeEnvironment(af_Environment *env);
  26. /* 保护空间管理函数 */
  27. AFUN_CORE_EXPORT bool addVarToProtectVarSpace(af_Var *var, af_Environment *env);
  28. AFUN_CORE_EXPORT af_Object *getBaseObject(char *name, af_Environment *env);
  29. AFUN_CORE_EXPORT af_VarSpace *getProtectVarSpace(af_Environment *env);
  30. /* Core 退出与停止 */
  31. AFUN_CORE_EXPORT void setCoreStop(af_Environment *env);
  32. AFUN_CORE_EXPORT void setCoreExit(int exit_code, af_Environment *env);
  33. AFUN_CORE_EXPORT void setCoreNormal(af_Environment *env);
  34. /* 消息创建与释放函数 */
  35. AFUN_CORE_EXPORT af_Message *makeMessage(char *type, size_t size);
  36. AFUN_CORE_EXPORT af_Message *freeMessage(af_Message *msg);
  37. AFUN_CORE_EXPORT void freeAllMessage(af_Message *msg);
  38. AFUN_CORE_EXPORT bool freeMessageCount(size_t count, af_Message *msg);
  39. /* 消息管理函数 */
  40. AFUN_CORE_EXPORT void pushMessageUp(af_Message *msg, af_Environment *env);
  41. AFUN_CORE_EXPORT void *popMessageUpData(char *type, af_Environment *env);
  42. AFUN_CORE_EXPORT af_Message *popMessageUp(af_Environment *env);
  43. AFUN_CORE_EXPORT void *getMessageData(af_Message *msg);
  44. AFUN_CORE_EXPORT void connectMessage(af_Message **base, af_Message *msg);
  45. /* 消息工具函数 */
  46. AFUN_CORE_EXPORT af_Message *makeNORMALMessage(af_Object *obj);
  47. AFUN_CORE_EXPORT af_Message *makeERRORMessage(char *type, char *error, af_Environment *env);
  48. AFUN_CORE_EXPORT af_Message *makeERRORMessageFormate(char *type, af_Environment *env, const char *formate, ...);
  49. /* 下行消息表管理函数 */
  50. AFUN_CORE_EXPORT void pushMessageDown(af_Message *msg, af_Environment *env);
  51. AFUN_CORE_EXPORT af_Message *popMessageDown(char *type, af_Environment *env);
  52. AFUN_CORE_EXPORT af_Message *getFirstMessage(af_Environment *env);
  53. /* 环境变量管理函数 */
  54. AFUN_CORE_EXPORT void setEnvVar(char *name, char *data, af_Environment *env);
  55. AFUN_CORE_EXPORT char *findEnvVar(char *name, af_Environment *env);
  56. /* 顶层消息处理器管理函数 */
  57. AFUN_CORE_EXPORT void addTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func, af_Environment *env);
  58. AFUN_CORE_EXPORT bool changeTopMsgProcess(char *type, DLC_SYMBOL(TopMsgProcessFunc) func, af_Environment *env);
  59. /* LiteralRegex操作函数 */
  60. AFUN_CORE_EXPORT bool pushLiteralRegex(char *pattern, char *func, bool in_protect, af_Environment *env);
  61. /* ErrorInfo 创建与释放 */
  62. AFUN_CORE_EXPORT af_ErrorInfo *makeErrorInfo(char *type, char *error, char *note, FileLine line, FilePath path);
  63. AFUN_CORE_EXPORT void freeErrorInfo(af_ErrorInfo *ei);
  64. /* ErrorInfo 操作函数 */
  65. AFUN_CORE_EXPORT void fprintfErrorInfo(FILE *file, af_ErrorInfo *ei);
  66. /* ErrorBacktracking 操作函数 */
  67. AFUN_CORE_EXPORT void pushErrorBacktracking(FileLine line, FilePath file, char *note, af_ErrorInfo *ei);
  68. #endif //AFUN_ENV