2
0

gc.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #ifndef AFUN__GC_H_PUBLIC
  2. #define AFUN__GC_H_PUBLIC
  3. #include "object.h"
  4. #include "var.h"
  5. typedef struct af_GcList af_GcList;
  6. enum af_GcListType {
  7. glt_obj = 1,
  8. glt_vs,
  9. glt_var,
  10. glt_vsl,
  11. };
  12. /* gc 引用计数管理函数 */
  13. #define gc_addReference(obj) ((_Generic((obj), \
  14. af_Object *:gc_addObjectReference, \
  15. af_Var *: gc_addVarReference, \
  16. af_VarSpace *: gc_addVarSpaceReference))(obj))
  17. #define gc_delReference(obj) ((_Generic((obj), \
  18. af_Object *: gc_delObjectReference, \
  19. af_Var *: gc_delVarReference, \
  20. af_VarSpace *: gc_delVarSpaceReference))(obj))
  21. /* GcList 操作函数 */
  22. af_GcList *pushGcList(enum af_GcListType type, void *data, af_GcList *base);
  23. /* gc 对象新增函数 */
  24. void gc_addObject(af_Object *obj, af_Environment *env);
  25. void gc_addVar(af_Var *obj, af_Environment *env);
  26. void gc_addVarSpace(af_VarSpace *obj, af_Environment *env);
  27. /* gc Reference 管理函数 */
  28. void gc_addObjectReference(af_Object *obj);
  29. void gc_addVarReference(af_Var *obj);
  30. void gc_addVarSpaceReference(af_VarSpace *obj);
  31. void gc_delObjectReference(af_Object *obj);
  32. void gc_delVarReference(af_Var *obj);
  33. void gc_delVarSpaceReference(af_VarSpace *obj);
  34. /* gc 运行时函数 */
  35. void resetGC(af_Environment *env);
  36. #endif //AFUN__GC_H_PUBLIC