Hello ,<div><br></div><div>How do I during compilation stop propagation of shared state in a some module and allow propagation of shared state in other modules.</div><div><br></div><div>Consider the following normal and compiled modules given below where applying (add) produces list of symbols.</div>
<div><br></div><div><div>Now in module m2 if there is some form like (require-special &quot;m1.rkt&quot;) then only (add) should produce &#39;(m n a b x y)</div><div>Otherwise for normal require  it should produce &#39;(m n) which mean (begin-for-syntax ...) in m1 is not touched or executed in different phase when compiling m2.</div>
<div><br></div><div>I can do other way around though i.e require-special expands to (for-syntax &quot;m1.rkt&quot;) which shifts the begin-for-syntax to phase 2 in m1 and avoids the sharing.</div><div>But then I am unable to import &quot;add&quot; from m1 without using normal require.</div>
</div><div><br></div><div><br></div><div><br></div><div><br></div><div><div>(normal-module m1 racket</div><div>  (require &quot;defs.rkt&quot;) ; macro definitions for define-something and others and manipulate shared state</div>
<div><br></div><div>  (provide add)</div><div><br></div><div>  (define-something (add x y)</div><div>    ...)</div><div>  </div><div>  (define-something (add a b)</div><div>    ...)</div><div>  </div><div>  (generate-defn) ;  macro that generate (define (add) &#39;(a b x y))</div>
<div><br></div><div>  (add) ; should produce (list &#39;a &#39;b &#39;x &#39;y)</div><div><br></div><div>)</div></div><div><br></div><div><br></div><div><br></div><div><div>(compiled-module m1 racket</div><div>  (require &quot;defs.rkt&quot;)</div>
<div>  (provide add)    </div><div>  (begin-for-syntax</div><div>    (add-to-hash! &#39;add &#39;(x y))</div><div>    (add-to-hash! &#39;add &#39;(a b)))</div><div>    </div><div>  </div><div>  (define (add) &#39;(a b x y)) ;result of (generate-defs)</div>
<div>  (add) ; produces (list &#39;a &#39;b &#39;x &#39;y)</div><div>  ...</div></div><div>)</div><div><br></div><div><br></div><div><div>(normal-module m2 racket</div><div>  (require &quot;defs.rkt&quot;)</div><div>  (require (prefix-in m1: &quot;m1.rkt&quot;))</div>
<div> </div><div>  ;;(require (for-syntax &quot;m1.rkt&quot;) ; </div><div>  </div><div>  (define-something (add m n) ...) </div><div>  (generate-defs)</div><div>  (add)</div><div>  (m1:add)</div><div>  ...</div></div><div>
)</div><div><br></div><div><div>(compiled-module m2 racket</div><div>  (require &quot;defs.rkt&quot;)</div><div>  (require &quot;m1.rkt&quot;)</div><div>  (begin-for-syntax</div><div>    (add-to-hash! &#39;add &#39;(m n)))</div>
<div>  </div><div>  (define (add) &#39;(m n a b x y)) ;result of (generate-defs)</div><div>    </div><div>  (add) ;produces &#39;(m n a b x y)</div><div>  (m1:add) ;produces &#39;(a b x y)</div><div>  </div><div>  ...</div>
</div><div>)</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div>