@@ -116,19 +116,8 @@ void idris_gc(VM* vm) {
116 if (vm->heap.old != NULL)
116 if (vm->heap.old != NULL)
117 free(vm->heap.old);
117 free(vm->heap.old);
119− char* newheap = malloc(vm->heap.size);
119+ /* Allocate swap heap. */
120− char* oldheap = vm->heap.heap;
120+ alloc_heap(&vm->heap, vm->heap.size, vm->heap.growth, vm->heap.heap);
122− vm->heap.heap = newheap;
123−#ifdef FORCE_ALIGNMENT
124− if (((i_int)(vm->heap.heap)&1) == 1) {
125− vm->heap.next = newheap + 1;
129− vm->heap.next = newheap;
131− vm->heap.end = newheap + vm->heap.size;
133 VAL* root;
122 VAL* root;
@@ -143,6 +132,7 @@ void idris_gc(VM* vm) {
143 msg->msg = copy(vm, msg->msg);
132 msg->msg = copy(vm, msg->msg);
146 vm->ret = copy(vm, vm->ret);
136 vm->ret = copy(vm, vm->ret);
147 vm->reg1 = copy(vm, vm->reg1);
137 vm->reg1 = copy(vm, vm->reg1);
@@ -154,7 +144,6 @@ void idris_gc(VM* vm) {
154 if ((vm->heap.next - vm->heap.heap) > vm->heap.size >> 1) {
144 if ((vm->heap.next - vm->heap.heap) > vm->heap.size >> 1) {
155 vm->heap.size += vm->heap.growth;
145 vm->heap.size += vm->heap.growth;
157− vm->heap.old = oldheap;
159 STATS_LEAVE_GC(vm->stats, vm->heap.size, vm->heap.next - vm->heap.heap)
148 STATS_LEAVE_GC(vm->stats, vm->heap.size, vm->heap.next - vm->heap.heap)
160 HEAP_CHECK(vm)
149 HEAP_CHECK(vm)