Next: compiler recordize debug, Previous: compiler recordize specials, Up: compiler recordize [Index]
Let’s imagine the following library:
(library (libtest compiler-internals)
(export a-func a-thunk a-const)
(import (rnrs (6)))
(define (a-func a b)
(+ a b))
(define (a-thunk)
"ciao")
(define a-const 123))
it is recordised as follows:
(rec*bind ((a-func_0 (lambda (a_0 b_0)
(funcall (primref +) a_0 b_0)))
(a-thunk_0 (lambda ()
(constant "ciao")))
(a-const_0 (constant 123)))
(constant #<void>))
if this library is imported as in:
(library (recordize-demo-1) (export) (import (rnrs) (libtest compiler-internals)) (list a-const (a-thunk) (a-func 1 2)))
the resulting recordised code is:
(rec*bind ()
(funcall (primref list)
(funcall (primref top-level-value)
(constant a-const))
(funcall (funcall (primref top-level-value)
(constant a-thunk)))
(funcall (funcall (primref top-level-value)
(constant a-func))
(constant 1)
(constant 2))))
where the symbols a-const, a-thunk, a-func are the
location gensyms of the imported bindings.