on master help sign in
Copy on demand cmd line args.
commitacf39f881b5d9a134f8e284d4c4fefa1e296f8d2 authorSam T <sta.cs.vsu@gmail.com> dateSun 17 Mar 2013, 21:31 (14 years ago) parentb029400
3 files changed+4−14
rts/idris_gc.c+1−3 rts/idris_rts.c+2−10 rts/idris_rts.h+1−1
rts/idris_gc.c+1−3
@@ -101,9 +101,7 @@ void idris_gc(VM* vm) {
101101 for(root = vm->inbox_ptr; root < vm->inbox_write; ++root) {
102102 *root = copy(vm, *root);
103103 }
104− for(root = vm->argv; root < vm->argv + vm->argc; ++root) {
105− *root = copy(vm, *root);
106− }
104+
107105 vm->ret = copy(vm, vm->ret);
108106 vm->reg1 = copy(vm, vm->reg1);
109107
rts/idris_rts.c+2−10
@@ -45,15 +45,9 @@ VM* init_vm(int stack_size, size_t heap_size,
4545 vm->max_threads = max_threads;
4646 vm->processes = 0;
4747
48− int i;
49− // Assumption: there's enough space for this in the initial heap.
50− vm->argv = malloc(argc*sizeof(VAL));
48+ vm->argv = argv;
5149 vm->argc = argc;
5250
53− for(i = 0; i < argc; ++i) {
54− vm->argv[i] = MKSTR(vm, argv[i]);
55− }
56−
5751 STATS_LEAVE_INIT(vm->stats)
5852 return vm;
5953}
@@ -65,7 +59,6 @@ Stats terminate(VM* vm) {
6559 free(vm->inbox);
6660 free(vm->valstack);
6761 free_heap(&(vm->heap));
68− free(vm->argv);
6962
7063 pthread_mutex_destroy(&(vm -> inbox_lock));
7164 pthread_mutex_destroy(&(vm -> inbox_block));
@@ -584,11 +577,10 @@ int idris_numArgs(VM* vm) {
584577}
585578
586579VAL idris_getArg(VM* vm, int i) {
587− return vm->argv[i];
580+ return MKSTR(vm, vm->argv[i]);
588581}
589582
590583void stackOverflow() {
591584 fprintf(stderr, "Stack overflow");
592585 exit(-1);
593586}
594−
rts/idris_rts.h+1−1
@@ -67,7 +67,7 @@ typedef struct {
6767 Stats stats;
6868
6969 int argc;
70− VAL* argv; // command line arguments
70+ char** argv; // command line arguments
7171
7272 VAL ret;
7373 VAL reg1;