From 209a4ff6310da044391dd242ede9fd5199be8800 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 5 Mar 2016 05:49:05 -0700 Subject: [PATCH] decompile: avoid single-subexpression `begin0` At the bytecode level, `(begin0 E)` does not make E in tail position with respect to the `begin0` form. It does at the source level, so generate suitable source. --- compiler-lib/compiler/decompile.rkt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler-lib/compiler/decompile.rkt b/compiler-lib/compiler/decompile.rkt index fc5ce2ad82..a393218fff 100644 --- a/compiler-lib/compiler/decompile.rkt +++ b/compiler-lib/compiler/decompile.rkt @@ -505,8 +505,11 @@ `(begin ,@(for/list ([expr (in-list exprs)]) (decompile-expr expr globs stack closed)))] [(struct beg0 (exprs)) - `(begin0 ,@(for/list ([expr (in-list exprs)]) - (decompile-expr expr globs stack closed)))] + `(begin0 + ,@(for/list ([expr (in-list exprs)]) + (decompile-expr expr globs stack closed)) + ;; Make sure a single expression doesn't look like tail position: + ,@(if (null? (cdr exprs)) (list #f) null))] [(struct with-cont-mark (key val body)) `(with-continuation-mark ,(decompile-expr key globs stack closed)