diff options
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) { |