ecl_bclosure can't be compiled (lexenv is lost)
When we compile ecl_bclosure we lose its lexenv what leads to compiled function corruption. See this test:
;;; Date 2018-02-11
;;; Description
;;;
;;; ecl_bclosure lexenv is not used during complation (both bytecmp and ccmp).
;;; That leads to dangling references in compiled code.
(test cmp.0064.bytecodes-macrolet
(let ((fun-1 (lambda () :fun-1-nil))
(fun-2 (let ((fun-2-var :var)) (lambda () fun-2-var)))
(fun-3 (flet ((fun-3-fun () :fun)) (lambda () (fun-3-fun))))
(fun-4 (macrolet ((fun-4-mac () :mac)) (lambda () (fun-4-mac)))))
(is (eq :fun-1-nil (funcall fun-1)))
(is (eq :var (funcall fun-2)))
(is (eq :fun (funcall fun-3)))
(is (eq :mac (funcall fun-4)))
(let ((fun-1 (compile nil fun-1))
(fun-2 (compile nil fun-2))
(fun-3 (compile nil fun-3))
(fun-4 (compile nil fun-4)))
(finishes (is (eq :fun-1-nil (funcall fun-1))))
(finishes (is (eq :var (funcall fun-2)) "fun-2-var is bound in function lexenv."))
(finishes (is (eq :fun (funcall fun-3)) "fun-3-fun is bound in function lexenv."))
(finishes (is (eq :mac (funcall fun-4)) "fun-4-mac is bound in function lexenv.")))))
Edited by Daniel Kochmański