added hook into garbage collector

This commit is contained in:
Kolten Pearson 2023-05-02 22:18:03 -06:00
parent ed6d2fcad7
commit 2c96dbe7ea
2 changed files with 8 additions and 1 deletions

View File

@ -44,6 +44,7 @@ class CVM : public VM {
}
~CVM() {
c_data->clear();
delete c_data;
}
};
@ -95,9 +96,14 @@ bool pkpy_clear_error(pkpy_vm* vm_handle, char** message) {
SAFEGUARD_CLOSE
}
void gc_marker_ex(CVM* vm) {
for(PyObject* obj: *vm->c_data) if(obj!=nullptr) OBJ_MARK(obj);
}
pkpy_vm* pkpy_vm_create(bool use_stdio, bool enable_os) {
CVM* vm = new CVM(use_stdio, enable_os);
vm->c_data = new ValueStackImpl<PKPY_STACK_SIZE>();
vm->_gc_marker_ex = (void (*)(VM*)) gc_marker_ex;
return (pkpy_vm*) vm;
}

View File

@ -12,7 +12,8 @@ echo "compiling c executable"
clang -c -o test.o c_bindings/test.c -Wfatal-errors -O2 -Wall -Wno-sign-compare -Wno-unused-variable -I src/ -fsanitize=address -g
echo "linking"
clang++ -o c_binding_test test.o pocketpy_c.o -stdlib=libc++ -fsanitize=address -g
echo "running, no weird output should show up"
echo "running, leaksanitizer is finding a false postive leak in the CVM constructor"
echo "ignore that but pay attention to anything else"
./c_binding_test > binding_test_scratch
echo "checking results (they should be identical)"
diff -q -s binding_test_scratch c_bindings/test_answers.txt