expander: fix eval of machine-independent top-level begin

This commit is contained in:
Matthew Flatt 2021-05-11 15:35:28 -06:00
parent f462ac6a31
commit 6e50aa088b
4 changed files with 34 additions and 21 deletions

View File

@ -3621,7 +3621,6 @@ case of module-leve bindings; it doesn't cover local bindings.
#t
`(has ,p)
(for/or ([pr (in-list ctx)])
(printf ">> ~s\n" (cdr pr))
(and (cdr pr)
(equal? p (srcloc-source (cdr pr))))))))
(let ([m1 (parameterize ([current-load-relative-directory #f])
@ -3633,6 +3632,18 @@ case of module-leve bindings; it doesn't cover local bindings.
(check-name m1 (build-path (find-system-path 'temp-dir) "the-file.rkt"))
(void)))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Make sure a top-level `begin` can be instantiated from
;; machine-independent form
(let ([o (open-output-bytes)])
(parameterize ([current-compile-target-machine #f])
(write (compile '(begin (random) 10)) o))
(test 10 'top-begin/compile-any
(eval (parameterize ([read-accept-compiled #t])
(read (open-input-bytes (get-output-bytes o)))))))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(report-errs)

View File

@ -42662,7 +42662,7 @@ static const char *startup_source =
"(begin"
"(let-values(((data-instance_0)"
"(instantiate-linklet$1"
" data-linklet_0"
"(force-compile-linklet data-linklet_0)"
"(list"
" deserialize-instance"
"(let-values(((ns1_0) ns_0)"

View File

@ -48238,23 +48238,24 @@
(define create-compiled-in-memorys-using-shared-data
(lambda (tops_0 data-linklet_0 ns_0)
(let ((data-instance_0
(instantiate-linklet
data-linklet_0
(list
deserialize-instance
(let ((temp2_0 (namespace-phase ns_0)))
(let ((temp3_0 (namespace-mpi ns_0)))
(let ((temp4_0 (namespace-bulk-binding-registry ns_0)))
(let ((temp5_0 (current-code-inspector)))
(let ((temp4_1 temp4_0)
(temp3_1 temp3_0)
(temp2_1 temp2_0))
(make-eager-instance-instance.1
temp4_1
temp2_1
temp5_0
ns_0
temp3_1))))))))))
(let ((app_0 (force-compile-linklet data-linklet_0)))
(instantiate-linklet
app_0
(list
deserialize-instance
(let ((temp2_0 (namespace-phase ns_0)))
(let ((temp3_0 (namespace-mpi ns_0)))
(let ((temp4_0 (namespace-bulk-binding-registry ns_0)))
(let ((temp5_0 (current-code-inspector)))
(let ((temp4_1 temp4_0)
(temp3_1 temp3_0)
(temp2_1 temp2_0))
(make-eager-instance-instance.1
temp4_1
temp2_1
temp5_0
ns_0
temp3_1)))))))))))
(let ((data_0
(|#%name|
data

View File

@ -7,13 +7,14 @@
"../compile/reserved-symbol.rkt"
"../compile/namespace-scope.rkt"
"../compile/multi-top.rkt"
"../compile/linklet.rkt")
"../compile/linklet.rkt"
"../compile/correlated-linklet.rkt")
(provide create-compiled-in-memorys-using-shared-data)
(define (create-compiled-in-memorys-using-shared-data tops data-linklet ns)
(define data-instance
(instantiate-linklet data-linklet
(instantiate-linklet (force-compile-linklet data-linklet)
(list deserialize-instance
(make-eager-instance-instance
#:namespace ns