cs: fix procedure names in jitified linlet to use 'inferred-name

When a linklet is too large to pass to Chez Scheme whole, then
names for the procedures that are individually compiled need to
be extracted from 'inferred-name for reference in the wrapper.

Closes #2787
This commit is contained in:
Matthew Flatt 2019-08-22 20:58:40 -06:00
parent 2a5df8ad2a
commit 9f424cfe0a
3 changed files with 19 additions and 8 deletions

View File

@ -563,7 +563,7 @@
(add-code-hash a)
a)
arity-mask
name)))]
(extract-inferred-name expr name))))]
[else
;; Compile an individual `lambda`:
(lambda (expr arity-mask name)
@ -576,7 +576,7 @@
compile*)
(show lambda-on? "lambda" (correlated->annotation expr)))])
(if serializable?
(make-wrapped-code code arity-mask name)
(make-wrapped-code code arity-mask (extract-inferred-name expr name))
code))))])))]))
(define-values (paths impl-lam/paths)
(if serializable?

View File

@ -30,6 +30,15 @@
;; correlated will be nested only in pairs with current expander
[else (values v v)]))
(define (extract-inferred-name expr default-name)
(let ([name (and (correlated? expr)
(correlated-property expr 'inferred-name))])
(cond
[(void? name) #f]
[(correlated? name) (correlated-e name)]
[(symbol? name) name]
[else default-name])))
(define (transfer-srcloc v e stripped-e)
(let ([src (correlated-source v)]
[pos (correlated-position v)]

View File

@ -101,12 +101,14 @@
get-e)
new-lifts)]
[else
(define e (extractable-annotation `(lambda ,(if (no-lifts? body-lifts)
captures
(cons lifts-id captures))
,jitted-proc)
arity-mask
name))
(define e (extractable-annotation (reannotate
v
`(lambda ,(if (no-lifts? body-lifts)
captures
(cons lifts-id captures))
,jitted-proc))
arity-mask
name))
(define-values (all-captures new-lifts)
(cond
[(no-lifts? body-lifts)