diff --git a/module/language/tree-il/peval.scm b/module/language/tree-il/peval.scm index dcdf189a2..a6bb954e2 100644 --- a/module/language/tree-il/peval.scm +++ b/module/language/tree-il/peval.scm @@ -1040,7 +1040,7 @@ top-level bindings from ENV and return the resulting expression." (match (cons name (map for-value orig-args)) (('cons head tail) (match tail - (($ src ()) + (($ src (? (cut eq? <> '()))) (make-application src (make-primitive-ref #f 'list) (list head))) (($ src ($ _ 'list) elts) diff --git a/test-suite/tests/tree-il.test b/test-suite/tests/tree-il.test index de82340a4..0b00f6f8a 100644 --- a/test-suite/tests/tree-il.test +++ b/test-suite/tests/tree-il.test @@ -1419,6 +1419,11 @@ (((x) #f #f #f () (_)) (apply (toplevel top) (lexical x _))))))) + (pass-if-peval + ;; Constant folding: cons of #nil does not make list + (cons 1 #nil) + (apply (primitive cons) (const 1) (const '#nil))) + (pass-if-peval ;; Constant folding: cons (begin (cons 1 2) #f)