summaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authormbkma <[email protected]>2026-03-11 22:59:56 +0100
committerVictor Kareh <[email protected]>2026-03-12 12:27:17 -0400
commitb8126bfc033da43ad332e62f1c4ff6ec2662998e (patch)
treea12525469c563005867466a7768ee5ed877ae765 /src/lexer.c
parentaeaa5450f8fa4e70aeea00eed02191106fe26705 (diff)
downloadmate-calc-master.tar.bz2
mate-calc-master.tar.xz
fix some memory leaks reported by valgrindHEADmaster
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c36
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;
}
}
}