When I wrote "inlining", I should have written "function inlining".
The `compile-context-preservation-enabled' parameter doesn't affect propagation of non-function constants (which I incorrectly called "folding" in my previous message); it affects only function inlining. At Thu, 19 Jan 2012 10:49:22 -0500, Danny Yoo wrote: > > If you compile "a.rkt" normally and set > > `compile-context-preservation-enabled' to #f for"b.rkt", then `f' will > > not be inlined (because inlining is disabled), but `c' will still be > > replaced with 10. > > > This is odd then, because I thought I had tried this yesterday and > still observed inlining. Let me try again... > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > #lang racket/base > (require compiler/zo-parse > compiler/decompile) > > (define (test b) > (parameterize ([current-namespace (make-base-namespace)] > (compile-enforce-module-constants b)) > > (eval (compile '(module foo-1 '#%kernel > (#%provide a) > (define-values (a) 'hello)))) > > (define bytecode (compile '(module foo-2 '#%kernel > (#%require 'foo-1) > (display a) > (newline)))) > (define op (open-output-bytes)) > (write bytecode op) > (decompile (zo-parse (open-input-bytes (get-output-bytes op)))))) > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > (test #t) > '(begin (module foo-2 .... (display 'hello) (newline))) > > (test #f) > '(begin (module foo-2 .... (display |_a@(quote foo-1)|) (newline))) > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > > > So maybe I'm hallucinating (again). I confirm that > compile-enforce-module-constants is working here. I'll need to look > at why it didn't appear as effective in the context of Whalesong; > perhaps I'd set up the parameterization incorrectly. > > > Thanks! _________________________ Racket Developers list: http://lists.racket-lang.org/dev