diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-29 20:05:54 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-03-29 20:05:54 +0330 |
commit | 2316751587cf3998112f4e076b5b33080ce66124 (patch) | |
tree | 2d9a2388a9028ea0262b7766511dd7b5d918a843 /src/compiler/parser.c | |
parent | e73184852285ffbb110a96ca7d7e1906029ba825 (diff) |
fix bug in conditions
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r-- | src/compiler/parser.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c index db189ed..69209ab 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -218,8 +218,8 @@ void parserNodePrint(const ParserNode *node, int indent) { } goto RETURN_SUCCESS; case PARSER_TOKEN_VALUE_BOOL: { - ParserNodeIntMetadata metadata = (ParserNodeIntMetadata)node->metadata; - printf(",value=%b", (ParserNodeBoolMetadata)metadata); + ParserNodeBoolMetadata *metadata = node->metadata; + printf(",value=%b", *metadata); } goto RETURN_SUCCESS; case PARSER_TOKEN_CONSTANT: @@ -455,9 +455,14 @@ void parserNodeDelete(ParserNode *node) { case PARSER_TOKEN_TYPE_F32: case PARSER_TOKEN_TYPE_F64: case PARSER_TOKEN_TYPE_F128: - case PARSER_TOKEN_VALUE_BOOL: case PARSER_TOKEN_KEYWORD_NULL: goto RETURN_SUCCESS; + case PARSER_TOKEN_VALUE_BOOL: { + ParserNodeBoolMetadata *metadata = node->metadata; + free(metadata); + } + goto RETURN_SUCCESS; + case PARSER_TOKEN_VALUE_INT: { ParserNodeIntMetadata *metadata = node->metadata; free(metadata); @@ -979,11 +984,11 @@ ParserNode *parserNumber(LexerNode *node, ParserNode *parent) { } ParserNode *parserBoolValue(LexerNode *node, ParserNode *parent) { - return node->parserNode = newParserNode( - PARSER_TOKEN_VALUE_BOOL, node->str_begin, node->str_end, - (void *)(ParserNodeBoolMetadata)(node->token == - LEXER_TOKEN_KEYWORD_TRUE), - parent); + ParserNodeBoolMetadata *metadata = a404m_malloc(sizeof(*metadata)); + *metadata = node->token == LEXER_TOKEN_KEYWORD_TRUE; + return node->parserNode = + newParserNode(PARSER_TOKEN_VALUE_BOOL, node->str_begin, + node->str_end, metadata, parent); } ParserNode *parserEol(LexerNode *node, LexerNode *begin, ParserNode *parent) { |