remove custom marker

This commit is contained in:
blueloveTH 2025-03-05 00:50:53 +08:00
parent b3084a5c87
commit 2572ddd982
7 changed files with 18 additions and 18 deletions

View File

@ -23,7 +23,6 @@ typedef struct py_TypeInfo {
py_TValue annotations; // type annotations py_TValue annotations; // type annotations
void (*on_end_subclass)(struct py_TypeInfo*); // backdoor for enum module void (*on_end_subclass)(struct py_TypeInfo*); // backdoor for enum module
void (*gc_mark)(void* ud);
/* Magic Slots */ /* Magic Slots */
py_TValue magic_0[PK_MAGIC_SLOTS_COMMON_LENGTH]; // common magic slots py_TValue magic_0[PK_MAGIC_SLOTS_COMMON_LENGTH]; // common magic slots

View File

@ -23,3 +23,6 @@ typedef struct {
} Dict; } Dict;
typedef c11_vector List; typedef c11_vector List;
void c11_chunked_array2d__mark(void* ud);
void function__gc_mark(void* ud);

View File

@ -59,7 +59,7 @@ bool pk__parse_int_slice(py_Ref slice, int length, int* restrict start, int* res
bool pk__normalize_index(int* index, int length); bool pk__normalize_index(int* index, int length);
#define pk__mark_value(val) if((val)->is_ptr && !(val)->_obj->gc_marked) PyObject__mark((val)->_obj) #define pk__mark_value(val) if((val)->is_ptr && !(val)->_obj->gc_marked) PyObject__mark((val)->_obj)
void pk__tp_set_marker(py_Type type, void (*gc_mark)(void*));
bool pk__object_new(int argc, py_Ref argv); bool pk__object_new(int argc, py_Ref argv);
py_TypeInfo* pk__type_info(py_Type type); py_TypeInfo* pk__type_info(py_Type type);

View File

@ -604,12 +604,6 @@ void PyObject__dtor(PyObject* self) {
if(self->slots == -1) NameDict__dtor(PyObject__dict(self)); if(self->slots == -1) NameDict__dtor(PyObject__dict(self));
} }
void pk__tp_set_marker(py_Type type, void (*gc_mark)(void*)) {
py_TypeInfo* ti = pk__type_info(type);
assert(ti->gc_mark == NULL);
ti->gc_mark = gc_mark;
}
void PyObject__mark(PyObject* obj) { void PyObject__mark(PyObject* obj) {
assert(!obj->gc_marked); assert(!obj->gc_marked);
@ -651,10 +645,19 @@ void PyObject__mark(PyObject* obj) {
if(self->frame) Frame__gc_mark(self->frame); if(self->frame) Frame__gc_mark(self->frame);
break; break;
} }
default: { case tp_function: {
py_TypeInfo* ti = pk__type_info(obj->type); function__gc_mark(ud);
if(ti->gc_mark) ti->gc_mark(ud); break;
} }
case tp_code: {
CodeObject* self = ud;
CodeObject__gc_mark(self);
break;
}
case tp_chunked_array2d: {
c11_chunked_array2d__mark(ud);
}
default: return;
} }
} }

View File

@ -1211,7 +1211,7 @@ void c11_chunked_array2d__dtor(c11_chunked_array2d* self) {
c11_chunked_array2d_chunks__dtor(&self->chunks); c11_chunked_array2d_chunks__dtor(&self->chunks);
} }
static void c11_chunked_array2d__mark(void* ud) { void c11_chunked_array2d__mark(void* ud) {
c11_chunked_array2d* self = ud; c11_chunked_array2d* self = ud;
pk__mark_value(&self->default_T); pk__mark_value(&self->default_T);
pk__mark_value(&self->context_builder); pk__mark_value(&self->context_builder);
@ -1291,7 +1291,6 @@ static bool chunked_array2d_view_chunks(int argc, py_Ref argv) {
static void register_chunked_array2d(py_Ref mod) { static void register_chunked_array2d(py_Ref mod) {
py_Type type = py_Type type =
py_newtype("chunked_array2d", tp_object, mod, (py_Dtor)c11_chunked_array2d__dtor); py_newtype("chunked_array2d", tp_object, mod, (py_Dtor)c11_chunked_array2d__dtor);
pk__tp_set_marker(type, c11_chunked_array2d__mark);
assert(type == tp_chunked_array2d); assert(type == tp_chunked_array2d);
py_bind(py_tpobject(type), py_bind(py_tpobject(type),

View File

@ -9,7 +9,6 @@
py_Type pk_code__register() { py_Type pk_code__register() {
py_Type type = pk_newtype("code", tp_object, NULL, (py_Dtor)CodeObject__dtor, false, true); py_Type type = pk_newtype("code", tp_object, NULL, (py_Dtor)CodeObject__dtor, false, true);
pk__tp_set_marker(type, (void (*)(void*))CodeObject__gc_mark);
return type; return type;
} }

View File

@ -773,7 +773,7 @@ py_TValue pk_builtins__register() {
return *builtins; return *builtins;
} }
static void function__gc_mark(void* ud) { void function__gc_mark(void* ud) {
Function* func = ud; Function* func = ud;
if(func->globals) pk__mark_value(func->globals); if(func->globals) pk__mark_value(func->globals);
if(func->closure) { if(func->closure) {
@ -800,9 +800,6 @@ static bool function__doc__(int argc, py_Ref argv) {
py_Type pk_function__register() { py_Type pk_function__register() {
py_Type type = py_Type type =
pk_newtype("function", tp_object, NULL, (void (*)(void*))Function__dtor, false, true); pk_newtype("function", tp_object, NULL, (void (*)(void*))Function__dtor, false, true);
pk__tp_set_marker(type, function__gc_mark);
py_bindproperty(type, "__doc__", function__doc__, NULL); py_bindproperty(type, "__doc__", function__doc__, NULL);
return type; return type;
} }