mirror of
https://github.com/janet-lang/janet
synced 2025-11-28 13:05:13 +00:00
Flesh out support for userdata
Add file reading via file objects. Finalizer option for userdata.
This commit is contained in:
10
core/gc.c
10
core/gc.c
@@ -174,10 +174,8 @@ void gst_mark(Gst *vm, GstValueUnion x, GstType type) {
|
||||
if (gc_header(x.string - sizeof(GstUserdataHeader))->color != vm->black) {
|
||||
GstUserdataHeader *userHeader = (GstUserdataHeader *)x.string - 1;
|
||||
gc_header(userHeader)->color = vm->black;
|
||||
GstValueUnion temp;
|
||||
temp.st = userHeader->meta;
|
||||
gst_mark(vm, temp, GST_STRUCT);
|
||||
}
|
||||
break;
|
||||
|
||||
case GST_FUNCENV:
|
||||
gst_mark_funcenv(vm, x.env);
|
||||
@@ -210,6 +208,12 @@ void gst_sweep(Gst *vm) {
|
||||
gst_cache_remove_struct(vm, (char *)(current + 1));
|
||||
if (current->tags & GST_MEMTAG_TUPLE)
|
||||
gst_cache_remove_tuple(vm, (char *)(current + 1));
|
||||
if (current->tags & GST_MEMTAG_USER) {
|
||||
GstUserdataHeader *h = (GstUserdataHeader *)(current + 1);
|
||||
if (h->type->finalize) {
|
||||
h->type->finalize(vm, h + 1, h->size);
|
||||
}
|
||||
}
|
||||
}
|
||||
gst_raw_free(current);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user