diff options
| author | Mustafa Quraish <[email protected]> | 2022-01-28 23:00:40 -0500 |
|---|---|---|
| committer | Mustafa Quraish <[email protected]> | 2022-01-28 23:00:40 -0500 |
| commit | db2edf87ed4a18069db79f7ff49337c331354d39 (patch) | |
| tree | a6420d221f290e30481c60c1e2f8d4d24546478a | |
| parent | Scripts: Reorganize a bit, add some rudimentary shell-testing (diff) | |
| download | cup-db2edf87ed4a18069db79f7ff49337c331354d39.tar.xz cup-db2edf87ed4a18069db79f7ff49337c331354d39.zip | |
Corrent incorrect `break` in Lexer
| -rw-r--r-- | cup/lexer.c | 11 |
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; } |