diff options
| author | mbkma <[email protected]> | 2026-03-11 22:59:56 +0100 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2026-03-12 12:27:17 -0400 |
| commit | b8126bfc033da43ad332e62f1c4ff6ec2662998e (patch) | |
| tree | a12525469c563005867466a7768ee5ed877ae765 /src/lexer.c | |
| parent | aeaa5450f8fa4e70aeea00eed02191106fe26705 (diff) | |
| download | mate-calc-master.tar.bz2 mate-calc-master.tar.xz | |
Diffstat (limited to 'src/lexer.c')
| -rw-r--r-- | src/lexer.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/lexer.c b/src/lexer.c index 10bfe36..4a05d65 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -441,78 +441,102 @@ LETTER_STATE: } else if(type == PL_SUB_DIGIT) { + LexerToken* ret; + gchar* sub; while(pl_get_next_token(state) == PL_SUB_DIGIT); pl_roll_back(state); - tmp = g_ascii_strdown(pl_get_marked_substring(state), -1); + sub = pl_get_marked_substring(state); + tmp = g_ascii_strdown(sub, -1); + g_free(sub); if(g_strcmp0(tmp, "mod") == 0) { + g_free(tmp); return l_insert_token(lstate, T_MOD); } if(g_strcmp0(tmp, "and") == 0) { + g_free(tmp); return l_insert_token(lstate, T_AND); } if(g_strcmp0(tmp, "or") == 0) { + g_free(tmp); return l_insert_token(lstate, T_OR); } if(g_strcmp0(tmp, "xor") == 0) { + g_free(tmp); return l_insert_token(lstate, T_XOR); } if(g_strcmp0(tmp, "not") == 0) { + g_free(tmp); return l_insert_token(lstate, T_NOT); } if(g_strcmp0(tmp, "in") == 0) { + g_free(tmp); return l_insert_token(lstate, T_IN); } + g_free(tmp); if(l_check_if_function(lstate)) { - return l_insert_token(lstate, T_FUNCTION); + ret = l_insert_token(lstate, T_FUNCTION); } else { - return l_insert_token(lstate, T_VARIABLE); + ret = l_insert_token(lstate, T_VARIABLE); } + return ret; } else { + LexerToken* ret; + gchar* sub; pl_roll_back(state); - tmp = g_ascii_strdown(pl_get_marked_substring(state), -1); + sub = pl_get_marked_substring(state); + tmp = g_ascii_strdown(sub, -1); + g_free(sub); if(g_strcmp0(tmp, "mod") == 0) { + g_free(tmp); return l_insert_token(lstate, T_MOD); } if(g_strcmp0(tmp, "and") == 0) { + g_free(tmp); return l_insert_token(lstate, T_AND); } if(g_strcmp0(tmp, "or") == 0) { + g_free(tmp); return l_insert_token(lstate, T_OR); } if(g_strcmp0(tmp, "xor") == 0) { + g_free(tmp); return l_insert_token(lstate, T_XOR); } if(g_strcmp0(tmp, "not") == 0) { + g_free(tmp); return l_insert_token(lstate, T_NOT); } if(g_strcmp0(tmp, "in") == 0) { + g_free(tmp); return l_insert_token(lstate, T_IN); } + g_free(tmp); if(l_check_if_function(lstate)) { - return l_insert_token(lstate, T_FUNCTION); + ret = l_insert_token(lstate, T_FUNCTION); } else { - return l_insert_token(lstate, T_VARIABLE); + ret = l_insert_token(lstate, T_VARIABLE); } + return ret; } } } |
