@@ -116,19 +116,8 @@ void idris_gc(VM* vm) {
116116 if (vm->heap.old != NULL)
117117 free(vm->heap.old);
118118
119− char* newheap = malloc(vm->heap.size);
120− char* oldheap = vm->heap.heap;
121−
122− vm->heap.heap = newheap;
123−#ifdef FORCE_ALIGNMENT
124− if (((i_int)(vm->heap.heap)&1) == 1) {
125− vm->heap.next = newheap + 1;
126− } else
127−#endif
128− {
129− vm->heap.next = newheap;
130− }
131− vm->heap.end = newheap + vm->heap.size;
119+ /* Allocate swap heap. */
120+ alloc_heap(&vm->heap, vm->heap.size, vm->heap.growth, vm->heap.heap);
132121
133122 VAL* root;
134123
@@ -143,6 +132,7 @@ void idris_gc(VM* vm) {
143132 msg->msg = copy(vm, msg->msg);
144133 }
145134#endif
135+
146136 vm->ret = copy(vm, vm->ret);
147137 vm->reg1 = copy(vm, vm->reg1);
148138
@@ -154,7 +144,6 @@ void idris_gc(VM* vm) {
154144 if ((vm->heap.next - vm->heap.heap) > vm->heap.size >> 1) {
155145 vm->heap.size += vm->heap.growth;
156146 }
157− vm->heap.old = oldheap;
158147
159148 STATS_LEAVE_GC(vm->stats, vm->heap.size, vm->heap.next - vm->heap.heap)
160149 HEAP_CHECK(vm)