@@ -9,7 +9,9 @@
9#include "idris_rts.h"
9#include "idris_rts.h"
10#include "idris_gc.h"
10#include "idris_gc.h"
12−VM* init_vm(int stack_size, size_t heap_size, int argc, char* argv[]) {
12+VM* init_vm(int stack_size, size_t heap_size,
13+ int max_threads, // not implemented yet
14+ int argc, char* argv[]) {
13 VAL* valstack = malloc(stack_size*sizeof(VAL));
15 VAL* valstack = malloc(stack_size*sizeof(VAL));
14 int* intstack = malloc(stack_size*sizeof(int));
16 int* intstack = malloc(stack_size*sizeof(int));
15 double* floatstack = malloc(stack_size*sizeof(double));
17 double* floatstack = malloc(stack_size*sizeof(double));
@@ -43,8 +45,9 @@ VM* init_vm(int stack_size, size_t heap_size, int argc, char* argv[]) {
43 pthread_mutex_init(&(vm->inbox_block), NULL);
45 pthread_mutex_init(&(vm->inbox_block), NULL);
44 pthread_cond_init(&(vm->inbox_waiting), NULL);
46 pthread_cond_init(&(vm->inbox_waiting), NULL);
48+ vm->max_threads = max_threads;
48 // Assumption: there's enough space for this in the initial heap.
51 // Assumption: there's enough space for this in the initial heap.
49 vm->argv = malloc(argc*sizeof(VAL));
52 vm->argv = malloc(argc*sizeof(VAL));
50 vm->argc = argc;
53 vm->argc = argc;
@@ -364,7 +367,9 @@ void* runThread(void* arg) {
366void* vmThread(VM* callvm, func f, VAL arg) {
369void* vmThread(VM* callvm, func f, VAL arg) {
367− VM* vm = init_vm(callvm->stack_max - callvm->valstack, callvm->heap_size, 0, NULL);
370+ VM* vm = init_vm(callvm->stack_max - callvm->valstack, callvm->heap_size,
371+ callvm->max_threads,
368 pthread_t t;
373 pthread_t t;
369 pthread_attr_t attr;
374 pthread_attr_t attr;
370// size_t stacksize;
375// size_t stacksize;