From 6d84010dc4b5843afece799bb071a6e1d6d13dcd Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Sat, 18 Aug 2012 17:58:38 +0200 Subject: [PATCH] ast_return should accept NULL as value to create a simple 'return' without a value --- ast.c | 17 +++++++++++------ ir.c | 8 ++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/ast.c b/ast.c index 851171e..fb1bc87 100644 --- a/ast.c +++ b/ast.c @@ -1135,13 +1135,18 @@ bool ast_return_codegen(ast_return *self, ast_function *func, bool lvalue, ir_va } self->expression.outr = (ir_value*)1; - cgen = self->operand->expression.codegen; - /* lvalue! */ - if (!(*cgen)((ast_expression*)(self->operand), func, false, &operand)) - return false; + if (self->operand) { + cgen = self->operand->expression.codegen; + /* lvalue! */ + if (!(*cgen)((ast_expression*)(self->operand), func, false, &operand)) + return false; - if (!ir_block_create_return(func->curblock, operand)) - return false; + if (!ir_block_create_return(func->curblock, operand)) + return false; + } else { + if (!ir_block_create_return(func->curblock, NULL)) + return false; + } return true; } diff --git a/ir.c b/ir.c index 5e7a923..dcf03e0 100644 --- a/ir.c +++ b/ir.c @@ -1077,11 +1077,11 @@ bool ir_block_create_return(ir_block *self, ir_value *v) if (!in) return false; - if (!ir_instr_op(in, 0, v, false) || - !ir_block_instr_add(self, in) ) - { + if (v && !ir_instr_op(in, 0, v, false)) + return false; + + if (!ir_block_instr_add(self, in)) return false; - } return true; } -- 2.39.2