gc.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "pocketpy/objects/object.h"
  2. #include "pocketpy/common/config.h"
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. typedef struct pk_ManagedHeap{
  7. c11_vector no_gc;
  8. c11_vector gen;
  9. int gc_threshold;
  10. int gc_counter;
  11. int gc_lock_counter;
  12. pk_VM* vm;
  13. void (*_gc_on_delete)(pk_VM*, PyObject*);
  14. void (*_gc_marker_ex)(pk_VM*);
  15. } pk_ManagedHeap;
  16. void pk_ManagedHeap__ctor(pk_ManagedHeap* self, pk_VM* vm);
  17. void pk_ManagedHeap__dtor(pk_ManagedHeap* self);
  18. void pk_ManagedHeap__push_lock(pk_ManagedHeap* self);
  19. void pk_ManagedHeap__pop_lock(pk_ManagedHeap* self);
  20. void pk_ManagedHeap__collect_if_needed(pk_ManagedHeap* self);
  21. int pk_ManagedHeap__collect(pk_ManagedHeap* self);
  22. int pk_ManagedHeap__sweep(pk_ManagedHeap* self);
  23. PyObject* pk_ManagedHeap__new(pk_ManagedHeap* self, py_Type type, int slots, int udsize);
  24. PyObject* pk_ManagedHeap__gcnew(pk_ManagedHeap* self, py_Type type, int slots, int udsize);
  25. // external implementation
  26. void pk_ManagedHeap__mark(pk_ManagedHeap* self);
  27. #ifdef __cplusplus
  28. }
  29. #endif