summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c54
1 files changed, 17 insertions, 37 deletions
diff --git a/main.c b/main.c
index 0520592..9acd568 100644
--- a/main.c
+++ b/main.c
@@ -52,33 +52,15 @@ restart:
}
print("\t");
Datum *result = evalline(nil, stdin, 1);
- if(result == nil)
- continue;
- else{
- if(result[0].shy == 0)
- print("%S\n", ppdatum(*result));
- if(result->tag == ArrayTag)
- freearray(result->array);
- free(result);
- }
- /* print("Unfreed arrays: %d\n", alloccounts); */
+ if(result && !result->shy)
+ print("%S\n", ppdatum(result));
+ freedatum(result);
+/*
+ print("Unfreed arrays: %d\n", arrayalloccounts);
+ print("Unfreed datums: %d\n", datumalloccounts);
+*/
}
- exits(nil);
-}
-
-Rune *
-prompt(Rune *pr)
-{
- Rune line[MAX_LINE_LENGTH];
-
- print("%S",pr);
-
- int i = 0;
- line[0] = 0;
- while(i == 0 || line[i-1] != '\n')
- line[i++] = Bgetrune(stdin);
- line[i-1] = 0;
- return runestrdup(line);
+ threadexitsall(nil);
}
Datum *
@@ -94,16 +76,14 @@ evalline(Rune *line, Biobuf *bio, int toplevel)
Datum *result = eval(stmts, toplevel);
if(result)
- return result;
- else{
- Statement *s = stmts;
- while(s != nil){
- Statement *tmp = s;
- s = s->next;
- free(tmp->toks);
- free(tmp);
- }
-
- return nil;
+ incdatumref(result);
+
+ Statement *s = stmts;
+ while(s != nil){
+ Statement *tmp = s;
+ s = s->next;
+ freestatement(*tmp);
+ free(tmp);
}
+ return result;
} \ No newline at end of file