diff options
author | David Phillips <david@sighup.nz> | 2019-08-04 00:20:08 +1200 |
---|---|---|
committer | David Phillips <david@sighup.nz> | 2019-08-04 12:01:13 +1200 |
commit | 8f182d5db075f4f4b939725065596f49bbd0d0d4 (patch) | |
tree | d140dfb27b57743ee860d74aff8fa76a46328899 /assembler.c | |
parent | 9aa02bebf295ce9436451e0ce85db7717a6c9f81 (diff) | |
download | toy-cpu-assembler-8f182d5db075f4f4b939725065596f49bbd0d0d4.tar.xz |
lex: empty file is equivalent to EOL
lex() returning NULL is used to convey an error case but having not allocated
any tokens in the case of an empty input file isn't an error case. This patch
causes lex to treat an empty token stream after successfully examining a file
as just a single EOL token. This is a fair approximation of an empty file for
this assembler's purposes, and results in the correct behaviour of an empty
output file.
Diffstat (limited to 'assembler.c')
-rw-r--r-- | assembler.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/assembler.c b/assembler.c index 9ffdb85..7ae699d 100644 --- a/assembler.c +++ b/assembler.c @@ -7,6 +7,9 @@ #include "instruction.h" #include "output/output_bin.h" +//#define DEBUG +#include "debug.h" + void print_help(const char *argv0) { fprintf(stderr, "Syntax: %s <in.asm> <out.bin>\n", argv0); @@ -45,12 +48,14 @@ int main(int argc, char **argv) perror("fopen"); return error_ret; } + debug("Opened fin\n"); if ((fout = fopen(path_out, "wb")) == NULL) { fprintf(stderr, "Error opening %s: ", path_out); perror("fopen"); return error_ret; } + debug("Opened fout\n"); /****/ struct token *tokens = NULL; size_t tok_count = 0; @@ -58,6 +63,8 @@ int main(int argc, char **argv) if ((tokens = lex(path_in, fin, &tok_count)) == NULL) return error_ret; + debug("Lexed.\n"); + /* FIXME package these things into `tok_result`, `parse_result` etc */ struct instruction *insts; size_t insts_count; @@ -66,6 +73,8 @@ int main(int argc, char **argv) if ((ret = parse(path_in, fin, &labels, &labels_count, tokens, tok_count, &insts, &insts_count))) return error_ret && ret; + debug("Parsed.\n"); + /* FIXME insert pass for sanity checking identifiers, sizes of values */ /* FIXME insert optional pass for optimisation */ @@ -73,5 +82,7 @@ int main(int argc, char **argv) if ((ret = output_bin(fout, labels, labels_count, insts, insts_count))) return error_ret && ret; + debug("Output.\n"); + return 0; } |