summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler')
-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) {