Indicate compiled closures for closure convert phase

This commit is contained in:
Justin Ethier 2021-05-28 17:08:44 -04:00
parent 61d0f3396b
commit cc7a2a5027

View file

@ -345,6 +345,12 @@
(let ((var (adb:get/default sym (adb:make-var)))) (let ((var (adb:get/default sym (adb:make-var))))
(fnc var))) (fnc var)))
;; If var found in adb pass to callback and return result, else return #f
(define (if-var sym callback)
(let* ((var (adb:get/default sym #f))
(result (if var (callback var) #f)))
result))
(define (with-fnc id callback) (define (with-fnc id callback)
(let ((fnc (adb:get/default id (adb:make-fnc)))) (let ((fnc (adb:get/default id (adb:make-fnc))))
(callback fnc))) (callback fnc)))
@ -1961,7 +1967,12 @@
((lambda? fn) (error `(Unexpected lambda in closure-convert ,exp))) ((lambda? fn) (error `(Unexpected lambda in closure-convert ,exp)))
(else (else
(let ((f (cc fn))) (let ((f (cc fn)))
`((%closure-ref ,f 0) `((%closure-ref ,f 0
;; Indicate if closure refers to a compiled continuation
,@(if (and (symbol? fn)
(if-var fn adbv:cont?))
(list #t)
(list)))
,f ,f
,@args)))))) ,@args))))))
(else (else