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( add_test(
NAME "progs_compile_${TEST_NAME}" 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( add_test(
NAME "progs_runtime_${TEST_NAME}" 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) fzl_parser_t *fzl_mkparser(fzl_reader_ll_t *first)
{ {
if (!first) if (!first)
{
snprintf(plast_err, sizeof(plast_err), "token is null");
return NULL; return NULL;
}
fzl_parser_t *parser = malloc(sizeof(fzl_parser_t)); fzl_parser_t *parser = malloc(sizeof(fzl_parser_t));
if (!parser) if (!parser)
@@ -962,7 +959,7 @@ fzl_node_t *parse_block(fzl_parser_t *parser)
stmts[count++] = node; stmts[count++] = node;
} }
fzl_token_t *rbrace = consume(parser); 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), snprintf(plast_err, sizeof(plast_err),
"'%s': missing '}' after block at %ld:%ld", rbrace->filename, "'%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); 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); result = fzl_parse(parser);
if (result != 0) if (result != 0)
{ {
printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_parser_geterror()); printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_parser_geterror());
fzl_freeoptions(opts); fzl_freeoptions(opts);
fzl_freeast(parser->root);
fzl_freeparser(parser); fzl_freeparser(parser);
fzl_freereader(rd); fzl_freereader(rd);
fzl_freelinked(linked); fzl_freelinked(linked);
@@ -116,12 +126,24 @@ int main(int argc, char **argv)
} }
fzl_walker_t *walker = fzl_mkwalker(parser->root); 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); result = fzl_walk(walker);
if (result != 0) if (result != 0)
{ {
printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_walker_geterror()); printf("%sError%s: %s\n", FZL_CERROR, FZL_CRST, fzl_walker_geterror());
fzl_freeoptions(opts); fzl_freeoptions(opts);
fzl_freewalker(walker); fzl_freewalker(walker);
fzl_freeast(parser->root);
fzl_freeparser(parser); fzl_freeparser(parser);
fzl_freereader(rd); fzl_freereader(rd);
fzl_freelinked(linked); fzl_freelinked(linked);
@@ -162,6 +184,18 @@ int main(int argc, char **argv)
} }
fzl_writer_t *writer = fzl_mkwriter(outpath); 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); result = fzl_write(writer, walker);
if (result != 0) if (result != 0)
{ {
@@ -169,6 +203,7 @@ int main(int argc, char **argv)
fzl_freeoptions(opts); fzl_freeoptions(opts);
fzl_freewriter(writer); fzl_freewriter(writer);
fzl_freewalker(walker); fzl_freewalker(walker);
fzl_freeast(parser->root);
fzl_freeparser(parser); fzl_freeparser(parser);
fzl_freereader(rd); fzl_freereader(rd);
fzl_freelinked(linked); fzl_freelinked(linked);