summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-07 22:21:53 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-07 22:21:53 +0330
commit79360f43b87cbb0e7ec3abca4c08406866fbf26a (patch)
tree651810cf543e321da01c64ba760d6015d786bc1d
parent34099f0d7752a2fab5eadccfeb578b77b292c889 (diff)
fix return for void functions
-rw-r--r--src/compiler/ast-tree.c2
-rw-r--r--src/compiler/parser.c10
2 files changed, 8 insertions, 4 deletions
diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c
index c51e836..b340d20 100644
--- a/src/compiler/ast-tree.c
+++ b/src/compiler/ast-tree.c
@@ -780,7 +780,7 @@ AstTree *astTreeParseReturn(ParserNode *parserNode,
ParserNodeReturnMetadata *node_metadata = parserNode->metadata;
AstTree *value;
- if (node_metadata == NULL) {
+ if (node_metadata->value == NULL) {
value = NULL;
} else {
value = astTreeParse(node_metadata->value, variables, variables_size);
diff --git a/src/compiler/parser.c b/src/compiler/parser.c
index 1aa596c..d5f61c5 100644
--- a/src/compiler/parser.c
+++ b/src/compiler/parser.c
@@ -549,9 +549,13 @@ ParserNode *parserReturn(LexerNode *node, LexerNode *end, ParserNode *parent) {
ParserNodeReturnMetadata *metadata = a404m_malloc(sizeof(*metadata));
metadata->value = operand;
- return operand->parent = node->parserNode =
- newParserNode(PARSER_TOKEN_KEYWORD_RETURN, node->str_begin,
- node->str_end, metadata, parent);
+ node->parserNode = newParserNode(PARSER_TOKEN_KEYWORD_RETURN, node->str_begin,
+ node->str_end, metadata, parent);
+ if (operand != NULL) {
+ operand->parent = node->parserNode;
+ }
+
+ return node->parserNode;
}
ParserNode *parserNumber(LexerNode *node, ParserNode *parent) {