diff --git a/tools/qfcc/source/dot_expr.c b/tools/qfcc/source/dot_expr.c index 1369629ff..c9922ae3c 100644 --- a/tools/qfcc/source/dot_expr.c +++ b/tools/qfcc/source/dot_expr.c @@ -486,6 +486,18 @@ print_xvalue (dstring_t *dstr, const expr_t *e, int level, int id, b, '=', a, e->loc.line); } +static void +print_process (dstring_t *dstr, const expr_t *e, int level, int id, + const expr_t *next) +{ + int indent = level * 2 + 2; + + _print_expr (dstr, e->process.expr, level, id, next); + dasprintf (dstr, "%*se_%p -> \"e_%p\";\n", indent, "", e, e->process.expr); + dasprintf (dstr, "%*se_%p [label=\"%s\\n%d\"];\n", indent, "", e, + "", e->loc.line); +} + static void print_subexpr (dstring_t *dstr, const expr_t *e, int level, int id, const expr_t *next) { @@ -947,6 +959,7 @@ _print_expr (dstring_t *dstr, const expr_t *e, int level, int id, [ex_select] = print_select, [ex_intrinsic] = print_intrinsic, [ex_xvalue] = print_xvalue, + [ex_process] = print_process, }; int indent = level * 2 + 2; diff --git a/tools/qfcc/source/expr_process.c b/tools/qfcc/source/expr_process.c index c2246cf03..1fbb3afce 100644 --- a/tools/qfcc/source/expr_process.c +++ b/tools/qfcc/source/expr_process.c @@ -270,6 +270,12 @@ proc_block (const expr_t *expr, rua_ctx_t *ctx) current_symtab = old_scope; return err; } + if (!result && expr->block.result) { + result = expr_process (expr->block.result, ctx); + if (is_error (result)) { + return result; + } + } scoped_src_loc (expr); auto block = new_block_expr (nullptr);