Commit 1d9e4b05 authored by Marius Wachtler's avatar Marius Wachtler

Register gc handler of capi_getset_cls

parent 33e1028b
......@@ -1481,6 +1481,12 @@ void BoxedInstanceMethod::gcHandler(GCVisitor* v, Box* b) {
v->visit(&im->im_class);
}
void BoxedGetsetDescriptor::gcHandler(GCVisitor* v, Box* b) {
assert(isSubclass(b->cls, pyston_getset_cls) || isSubclass(b->cls, capi_getset_cls));
BoxedGetsetDescriptor* descr = static_cast<BoxedGetsetDescriptor*>(b);
v->visit(&descr->name);
}
void BoxedProperty::gcHandler(GCVisitor* v, Box* b) {
Box::gcHandler(v, b);
......@@ -3835,8 +3841,8 @@ void setupRuntime() {
sizeof(BoxedSet), false, "set");
frozenset_cls = BoxedClass::create(type_cls, object_cls, &BoxedSet::gcHandler, 0, offsetof(BoxedSet, weakreflist),
sizeof(BoxedSet), false, "frozenset");
capi_getset_cls
= BoxedClass::create(type_cls, object_cls, NULL, 0, 0, sizeof(BoxedGetsetDescriptor), false, "getset");
capi_getset_cls = BoxedClass::create(type_cls, object_cls, &BoxedGetsetDescriptor::gcHandler, 0, 0,
sizeof(BoxedGetsetDescriptor), false, "getset");
closure_cls = BoxedClass::create(type_cls, object_cls, &BoxedClosure::gcHandler, 0, 0, sizeof(BoxedClosure), false,
"closure");
property_cls = BoxedClass::create(type_cls, object_cls, &BoxedProperty::gcHandler, 0, 0, sizeof(BoxedProperty),
......
......@@ -953,11 +953,7 @@ public:
BoxedGetsetDescriptor(BoxedString* name, Box* (*get)(Box*, void*), void (*set)(Box*, Box*, void*), void* closure)
: get(get), set(set), closure(closure), name(name) {}
static void gcHandler(GCVisitor* v, Box* b) {
assert(b->cls == pyston_getset_cls);
BoxedGetsetDescriptor* descr = static_cast<BoxedGetsetDescriptor*>(b);
v->visit(&descr->name);
}
static void gcHandler(GCVisitor* v, Box* b);
// No DEFAULT_CLASS annotation here -- force callers to explicitly specifiy pyston_getset_cls or capi_getset_cls
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment