aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMustafa Quraish <[email protected]>2022-01-28 23:00:40 -0500
committerMustafa Quraish <[email protected]>2022-01-28 23:00:40 -0500
commitdb2edf87ed4a18069db79f7ff49337c331354d39 (patch)
treea6420d221f290e30481c60c1e2f8d4d24546478a
parentScripts: Reorganize a bit, add some rudimentary shell-testing (diff)
downloadcup-db2edf87ed4a18069db79f7ff49337c331354d39.tar.xz
cup-db2edf87ed4a18069db79f7ff49337c331354d39.zip
Corrent incorrect `break` in Lexer
-rw-r--r--cup/lexer.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/cup/lexer.c b/cup/lexer.c
index b665353..b88d321 100644
--- a/cup/lexer.c
+++ b/cup/lexer.c
@@ -84,8 +84,8 @@ Token Lexer_next(Lexer *lexer)
while (lexer->pos < lexer->len) {
switch (lexer->src[lexer->pos])
{
- case ' ': case '\t': case '\r': advance(lexer, 1); break;
- case '\n': lexer->line++; lexer->col = 0; lexer->pos ++; break;
+ case ' ': case '\t': case '\r': advance(lexer, 1); continue;
+ case '\n': lexer->line++; lexer->col = 0; lexer->pos++; continue;
case '(': return Lexer_make_token(lexer, TOKEN_OPEN_PAREN, 1);
case ')': return Lexer_make_token(lexer, TOKEN_CLOSE_PAREN, 1);
case '{': return Lexer_make_token(lexer, TOKEN_OPEN_BRACE, 1);
@@ -163,10 +163,11 @@ Token Lexer_next(Lexer *lexer)
i64 pos = lexer->pos;
while (pos < lexer->len && (isalnum(lexer->src[pos]) || lexer->src[pos] == '_'))
pos++;
- char *str = calloc(pos - lexer->pos + 1, 1);
- strncpy(str, lexer->src + lexer->pos, pos - lexer->pos);
+ int str_len = pos - lexer->pos;
+ char *str = calloc(str_len + 1, 1);
+ strncpy(str, lexer->src + lexer->pos, str_len);
Token token = Token_from_identifier(str, Lexer_loc(lexer));
- advance(lexer, pos - lexer->pos);
+ advance(lexer, str_len);
return token;
}