@@ -20,16 +20,10 @@ VM* init_vm(int stack_size, size_t heap_size,
20 STATS_ENTER_INIT(vm->stats)
20 STATS_ENTER_INIT(vm->stats)
22 VAL* valstack = malloc(stack_size * sizeof(VAL));
22 VAL* valstack = malloc(stack_size * sizeof(VAL));
23− int* intstack = malloc(stack_size * sizeof(int));
24− double* floatstack = malloc(stack_size*sizeof(double));
26 vm->valstack = valstack;
24 vm->valstack = valstack;
27 vm->valstack_top = valstack;
25 vm->valstack_top = valstack;
28 vm->valstack_base = valstack;
26 vm->valstack_base = valstack;
29− vm->intstack = intstack;
30− vm->intstack_ptr = intstack;
31− vm->floatstack = floatstack;
32− vm->floatstack_ptr = floatstack;
33 vm->stack_max = valstack + stack_size;
27 vm->stack_max = valstack + stack_size;
35 alloc_heap(&(vm->heap), heap_size);
29 alloc_heap(&(vm->heap), heap_size);
@@ -51,15 +45,9 @@ VM* init_vm(int stack_size, size_t heap_size,
51 vm->max_threads = max_threads;
45 vm->max_threads = max_threads;
52 vm->processes = 0;
46 vm->processes = 0;
54− int i;
48+ vm->argv = argv;
55− // Assumption: there's enough space for this in the initial heap.
56− vm->argv = malloc(argc*sizeof(VAL));
57 vm->argc = argc;
49 vm->argc = argc;
59− for(i = 0; i < argc; ++i) {
60− vm->argv[i] = MKSTR(vm, argv[i]);
63 STATS_LEAVE_INIT(vm->stats)
51 STATS_LEAVE_INIT(vm->stats)
64 return vm;
52 return vm;
@@ -70,10 +58,7 @@ Stats terminate(VM* vm) {
71 free(vm->inbox);
59 free(vm->inbox);
72 free(vm->valstack);
60 free(vm->valstack);
74− free(vm->floatstack);
75 free_heap(&(vm->heap));
61 free_heap(&(vm->heap));
78 pthread_mutex_destroy(&(vm -> inbox_lock));
63 pthread_mutex_destroy(&(vm -> inbox_lock));
79 pthread_mutex_destroy(&(vm -> inbox_block));
64 pthread_mutex_destroy(&(vm -> inbox_block));
@@ -592,11 +577,10 @@ int idris_numArgs(VM* vm) {
594VAL idris_getArg(VM* vm, int i) {
579VAL idris_getArg(VM* vm, int i) {
595− return vm->argv[i];
580+ return MKSTR(vm, vm->argv[i]);
598void stackOverflow() {
583void stackOverflow() {
599 fprintf(stderr, "Stack overflow");
584 fprintf(stderr, "Stack overflow");
600 exit(-1);
585 exit(-1);