aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lexer.cc6
-rw-r--r--src/main.cc8
2 files changed, 13 insertions, 1 deletions
diff --git a/src/lexer.cc b/src/lexer.cc
index a11adb3..d0840f2 100644
--- a/src/lexer.cc
+++ b/src/lexer.cc
@@ -18,6 +18,8 @@ Lexer::init(char *script)
m_current = 0;
m_end = strlen(m_script);
m_line = 1;
+
+ m_errored = false;
}
List *
@@ -28,6 +30,9 @@ Lexer::scan(void)
scan_token();
}
+ if (m_errored)
+ return NULL;
+
Token token_eof;
token_eof.init(EOFF, "EOF", m_line);
m_tokens->add(&token_eof);
@@ -137,6 +142,7 @@ Lexer::scan_token(void)
default:
printf("[-] Error: Unexpected character %c in line %lu\n", c, m_line);
+ m_errored = true;
break;
}
}
diff --git a/src/main.cc b/src/main.cc
index 61d853b..c6dcb81 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -31,7 +31,14 @@ main(int argc, char **argv)
Lexer l;
l.init(buffer);
+ f.close();
+
List *tokens = l.scan();
+ if (tokens == NULL) {
+ l.clean();
+ return 1;
+ }
+
for (size_t i = 0; i < tokens->size(); i++) {
Token *t = (Token *) tokens->get(i);
printf("%s\n", t->to_string());
@@ -39,6 +46,5 @@ main(int argc, char **argv)
l.clean();
- f.close();
return 0;
}