[bugfix] picrin evaluates exprs in files in order.

This commit is contained in:
Yuichi Nishiwaki 2013-11-04 13:18:16 -05:00
parent 808fe32ac0
commit 7ae15246fa
1 changed files with 23 additions and 15 deletions

View File

@ -159,8 +159,8 @@ int
exec_file(pic_state *pic, const char *fname) exec_file(pic_state *pic, const char *fname)
{ {
FILE *file; FILE *file;
bool r; int n, i;
pic_value v; pic_value vs;
struct pic_proc *proc; struct pic_proc *proc;
file = fopen(fname, "r"); file = fopen(fname, "r");
@ -169,24 +169,32 @@ exec_file(pic_state *pic, const char *fname)
return 1; return 1;
} }
r = pic_parse_file(pic, file, &v); n = pic_parse_file(pic, file, &vs);
if (! r) { if (n <= 0) {
fprintf(stderr, "fatal error: %s broken\n", fname); fprintf(stderr, "fatal error: %s broken\n", fname);
return 1; return 1;
} }
proc = pic_codegen(pic, v); for (i = 0; i < n; ++i) {
if (proc == NULL) { pic_value v;
fputs(pic->errmsg, stderr);
fprintf(stderr, "fatal error: %s compilation failure\n", fname);
return 1;
}
v = pic_apply(pic, proc, pic_nil_value()); v = pic_car(pic, vs);
if (pic_undef_p(v)) {
fputs(pic->errmsg, stderr); proc = pic_codegen(pic, v);
fprintf(stderr, "fatal error: %s evaluation failure\n", fname); if (proc == NULL) {
return 1; fputs(pic->errmsg, stderr);
fprintf(stderr, "fatal error: %s compilation failure\n", fname);
return 1;
}
v = pic_apply(pic, proc, pic_nil_value());
if (pic_undef_p(v)) {
fputs(pic->errmsg, stderr);
fprintf(stderr, "fatal error: %s evaluation failure\n", fname);
return 1;
}
vs = pic_cdr(pic, vs);
} }
return 0; return 0;