Allow the preprocessor to abort.

If the preprocessor encounters a problem, such as failing to load a source
file or an improperly formatted define, it should be able to abort running
the program.
This commit is contained in:
Payton Turnage 2014-01-12 21:56:54 -05:00
parent 27cde3f429
commit b208237960
2 changed files with 10 additions and 5 deletions

View file

@ -22,7 +22,7 @@ int tvm_preprocess(char *src, int *src_len, tvm_tree_t **node)
if(!pFile)
{
printf("Unable to open file \"%s\"\n", filename);
return 0;
return -1;
}
free(temp_str);
@ -60,7 +60,7 @@ int tvm_preprocess(char *src, int *src_len, tvm_tree_t **node)
if(begin + offset >= end)
{
printf("Define missing arguments.\n");
return 0;
return -1;
}
int length = (end - (begin + offset));
@ -82,7 +82,7 @@ int tvm_preprocess(char *src, int *src_len, tvm_tree_t **node)
if(!keystr || !valstr)
{
printf("Define missing arguments.\n");
return 0;
return -1;
}
int err = 0;
@ -94,7 +94,7 @@ int tvm_preprocess(char *src, int *src_len, tvm_tree_t **node)
if(err == 2)
{
printf("Multiple definitions for %s.\n", keystr);
return 0;
return -1;
}
/* Remove the define line so it is not processed again. */

View file

@ -54,7 +54,12 @@ pi_interpret:
tvm_fcopy(source, source_length, pFile);
fclose(pFile);
while(tvm_preprocess(source, &source_length, &p->defines));
int err = 0;
while((err = tvm_preprocess(source, &source_length, &p->defines)) > 0);
/* The preprocessor encountered a problem. */
if (err < 0)
return 1;
tvm_lexer_t *lexer_ctx = lexer_create();
lex(lexer_ctx, source, &p->defines);