aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authors-over-42023-06-21 17:17:11 -0400
committers-over-42023-06-21 17:17:11 -0400
commite7d1e397730c271ccb11ce547cd941d740f5a2fc (patch)
tree8b82021d1d958d350cebe98b57d6783a2c2b71ba /src/lexer.c
parent46f4397bf0718fbaf2cee5b4ffd56d4a36f2c4d8 (diff)
NO MORE OTHER BORKED SHIAT :D
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/lexer.c b/src/lexer.c
index 776b043..731210e 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -104,8 +104,11 @@ token_t* lexer_next_token(lexer_t* lexer, int token_type) {
return token;
}
+// get the current character as a string
char* lexer_get_c_as_string(lexer_t* lexer) {
- char* str = calloc(2, sizeof(char));
+ char* str; // the string to return
+
+ str = calloc(2, sizeof(char));
str[0] = lexer->c;
str[1] = '\0';
@@ -115,14 +118,19 @@ char* lexer_get_c_as_string(lexer_t* lexer) {
// fskip: skip first char?
// lskip: skip last char?
token_t* lexer_collect(lexer_t* lexer, int (*end_char)(char), int fskip, int lskip, int type) {
- if (fskip) { lexer_next(lexer); }
+ size_t len; // length of collected token so far
+ char* token; // collected token so far
- size_t len = 0; // length of collected token so far
- char* token = calloc(len, sizeof(char));
+ len = 1;
+ token = calloc(len, sizeof(char));
token[0] = '\0';
+ if (fskip) { lexer_next(lexer); }
+
while (end_char(lexer->c)) {
- char* current = lexer_get_c_as_string(lexer);
+ char* current;
+
+ current = lexer_get_c_as_string(lexer);
token = realloc(
token,
(len + sizeof(char) * strlen(current))