소스 검색

fix GC issues

master
Martin Dørum 4 년 전
부모
커밋
19d87ad18c
1개의 변경된 파일10개의 추가작업 그리고 1개의 파일을 삭제
  1. 10
    1
      lib/vm/vm.c

+ 10
- 1
lib/vm/vm.c 파일 보기

@@ -122,6 +122,13 @@ static size_t gc_sweep(struct l2_vm *vm) {
val->flags &= ~L2_VAL_MARKED;
}
}

// Normal variables are unmarked by the above loop,
// but builtins don't go through that loop
for (size_t i = 0; i < vm->gc_start; ++i) {
vm->values[i].flags &= ~L2_VAL_MARKED;
}

return freed;
}

@@ -275,7 +282,9 @@ size_t l2_vm_gc(struct l2_vm *vm) {
gc_mark(vm, vm->stack[sptr]);
}

for (l2_word fsptr = 0; fsptr < vm->fsptr; ++fsptr) {
// Don't need to mark the first stack frame, since that's where all the
// builtins live, and they aren't sweeped anyways
for (l2_word fsptr = 1; fsptr < vm->fsptr; ++fsptr) {
gc_mark(vm, vm->fstack[fsptr].ns);
}


Loading…
취소
저장