diff --git a/pkgs/compiler-lib/compiler/decompile.rkt b/pkgs/compiler-lib/compiler/decompile.rkt index 31254f7f1c..a1bd8049da 100644 --- a/pkgs/compiler-lib/compiler/decompile.rkt +++ b/pkgs/compiler-lib/compiler/decompile.rkt @@ -84,7 +84,8 @@ (list '#:key k '#:value (decompile v #:to-linklets? to-linklets?))]))))] [else (decompile-module top)])] - [(linkl? top) + [(or (linkl? top) + (linklet? top)) (decompile-linklet top)] [(faslable-correlated-linklet? top) (strip-correlated (faslable-correlated-linklet-expr top))] @@ -257,7 +258,10 @@ (case fmt [(compile) (define proc ((vm-eval `(load-compiled-from-port (open-bytevector-input-port ,uncompressed-code))))) - (decompile-chez-procedure (if (null? args) proc (apply proc args)))] + (let ([proc (decompile-chez-procedure (if (null? args) proc (apply proc args)))]) + (if (null? args) + proc + (cons proc (map (vm-primitive 'force-unfasl) args))))] [(interpret) (define bytecode (vm-eval `(fasl-read (open-bytevector-input-port ,uncompressed-code)))) (list `(#%interpret ,(unwrap-chez-interpret-jitified bytecode)))] diff --git a/racket/src/schemify/path-and-fasl.rkt b/racket/src/schemify/path-and-fasl.rkt index d61b25af5f..621b2bf204 100644 --- a/racket/src/schemify/path-and-fasl.rkt +++ b/racket/src/schemify/path-and-fasl.rkt @@ -125,20 +125,25 @@ [else (relative-path-elements->path e)])) (define (force-unfasl tf) - (define vb (to-fasl-vb tf)) - (define v (unbox vb)) (cond - [(bytes? v) - (define v2 (parameterize ([current-load-relative-directory (to-fasl-wrt tf)]) - (fasl->s-exp v - #:datum-intern? #t - #:external-lifts (to-fasl-lifts tf)))) - (box-cas! vb v v2) - (set-to-fasl-wrt! tf #f) - (unbox vb)] + [(not (to-fasl? tf)) + ;; act as identity on other values for the benefit of `raco decompile` + tf] [else - ;; already forced (or never fasled) - v])) + (define vb (to-fasl-vb tf)) + (define v (unbox vb)) + (cond + [(bytes? v) + (define v2 (parameterize ([current-load-relative-directory (to-fasl-wrt tf)]) + (fasl->s-exp v + #:datum-intern? #t + #:external-lifts (to-fasl-lifts tf)))) + (box-cas! vb v v2) + (set-to-fasl-wrt! tf #f) + (unbox vb)] + [else + ;; already forced (or never fasled) + v])])) (define (cannot-fasl v) (error 'write