Check for errors when opening program file.
Add a debug assertion in the reader to catch bugs like the last one.
This commit is contained in:
parent
8e34feea0b
commit
c1ac1323bf
1
reader.c
1
reader.c
|
|
@ -621,6 +621,7 @@ static value_t patch_placeholders(reader_state_t *state, value_t v)
|
||||||
|
|
||||||
for (value_t item = state->ref_alist.value; !is_nil(item); item = _CDDR(item))
|
for (value_t item = state->ref_alist.value; !is_nil(item); item = _CDDR(item))
|
||||||
{
|
{
|
||||||
|
assert(!is_placeholder(state, _CADR(item)));
|
||||||
tree_replace(&v, item, _CADR(item));
|
tree_replace(&v, item, _CADR(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
36
rosella.c
36
rosella.c
|
|
@ -45,24 +45,32 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gc_root_t argv_root;
|
|
||||||
FILE *f = fopen(argv[1], "r");
|
FILE *f = fopen(argv[1], "r");
|
||||||
value_t program;
|
|
||||||
|
|
||||||
register_gc_root(&argv_root, NIL);
|
if (f)
|
||||||
|
|
||||||
/* Construct list backward, so that we don't have to reverse it. */
|
|
||||||
for (int i = argc - 1; i >= 2; --i)
|
|
||||||
{
|
{
|
||||||
value_t temp = string_to_value(argv[i]);
|
gc_root_t argv_root;
|
||||||
argv_root.value = cons(temp, argv_root.value);
|
value_t program;
|
||||||
}
|
|
||||||
|
|
||||||
program = read_value(f);
|
register_gc_root(&argv_root, NIL);
|
||||||
print_value(run_interpreter(program, argv_root.value));
|
|
||||||
nl();
|
/* Construct list backward, so that we don't have to reverse it. */
|
||||||
fclose(f);
|
for (int i = argc - 1; i >= 2; --i)
|
||||||
unregister_gc_root(&argv_root);
|
{
|
||||||
|
value_t temp = string_to_value(argv[i]);
|
||||||
|
argv_root.value = cons(temp, argv_root.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
program = read_value(f);
|
||||||
|
print_value(run_interpreter(program, argv_root.value));
|
||||||
|
nl();
|
||||||
|
fclose(f);
|
||||||
|
unregister_gc_root(&argv_root);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
perror(argv[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue