3 Commits
3 changed files with 40 additions and 8 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ foreach (TEST_FILE IN LISTS TEST_PROGS)
add_test(
NAME "progs_compile_${TEST_NAME}"
COMMAND fzc -o "p_${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_FILE}"
COMMAND fzc -o "${CMAKE_CURRENT_BINARY_DIR}/p_${TEST_NAME}.fzb" "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_FILE}"
)
add_test(
NAME "progs_runtime_${TEST_NAME}"
+1 -4
View File
@@ -30,10 +30,7 @@ fzl_token_t this_tok = {.type = FZL_TOKTYPE_NAME,
fzl_parser_t *fzl_mkparser(fzl_reader_ll_t *first)
{
if (!first)
{
snprintf(plast_err, sizeof(plast_err), "token is null");
return NULL;
}
fzl_parser_t *parser = malloc(sizeof(fzl_parser_t));
if (!parser)
@@ -962,7 +959,7 @@ fzl_node_t *parse_block(fzl_parser_t *parser)
stmts[count++] = node;
}
fzl_token_t *rbrace = consume(parser);
if (rbrace && rbrace->type != FZL_TOKTYPE_RBRACE)
if (!rbrace || rbrace->type != FZL_TOKTYPE_RBRACE)
{
snprintf(plast_err, sizeof(plast_err),
"'%s': missing '}' after block at %ld:%ld", rbrace->filename,
+35
View File
@@ -96,11 +96,21 @@ int main(int argc, char **argv)
}
fzl_parser_t *parser = fzl_mkparser(rd->first);
if (!parser)
{
printf("%sError%s: failed to allocate writer\n", FZL_CERROR, FZL_CRST);
fzl_freeoptions(opts);
fzl_freereader(rd);
fzl_freelinked(linked);
return -1;
}
result = fzl_parse(parser);
if (result != 0)
{
printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_parser_geterror());
fzl_freeoptions(opts);
fzl_freeast(parser->root);
fzl_freeparser(parser);
fzl_freereader(rd);
fzl_freelinked(linked);
@@ -116,12 +126,24 @@ int main(int argc, char **argv)
}
fzl_walker_t *walker = fzl_mkwalker(parser->root);
if (!walker)
{
printf("%sError%s: failed to allocate writer\n", FZL_CERROR, FZL_CRST);
fzl_freeoptions(opts);
fzl_freeast(parser->root);
fzl_freeparser(parser);
fzl_freereader(rd);
fzl_freelinked(linked);
return -1;
}
result = fzl_walk(walker);
if (result != 0)
{
printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_walker_geterror());
fzl_freeoptions(opts);
fzl_freewalker(walker);
fzl_freeast(parser->root);
fzl_freeparser(parser);
fzl_freereader(rd);
fzl_freelinked(linked);
@@ -162,6 +184,18 @@ int main(int argc, char **argv)
}
fzl_writer_t *writer = fzl_mkwriter(outpath);
if (!writer)
{
printf("%sError%s: failed to allocate writer\n", FZL_CERROR, FZL_CRST);
fzl_freeoptions(opts);
fzl_freewalker(walker);
fzl_freeast(parser->root);
fzl_freeparser(parser);
fzl_freereader(rd);
fzl_freelinked(linked);
return -1;
}
result = fzl_write(writer, walker);
if (result != 0)
{
@@ -169,6 +203,7 @@ int main(int argc, char **argv)
fzl_freeoptions(opts);
fzl_freewriter(writer);
fzl_freewalker(walker);
fzl_freeast(parser->root);
fzl_freeparser(parser);
fzl_freereader(rd);
fzl_freelinked(linked);