diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/stanza/passes.stanza | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza index f05f9482..d8bae00a 100644 --- a/src/main/stanza/passes.stanza +++ b/src/main/stanza/passes.stanza @@ -1730,14 +1730,21 @@ defn split-exp (c:Circuit) : defn f (s:Stmt) -> False: split-exp-s(s,v) do(f,s) (s:Conditionally) : error("Shouldn't be here") - (s) : add(v,map(split-exp-e{_,v},s)) + (s:Connect) : + match(loc(s)) : + (e:WritePort) : add(v,map(split-exp-e{_,v,name(exp(s) as WRef)},s)) + (e) : add(v,map(split-exp-e{_,v,name(loc(s) as WRef)},s)) + (s:DefNode) : add(v,map(split-exp-e{_,v,name(s)},s)) + (s) : add(v,map(split-exp-e{_,v,false},s)) false - defn split-exp-e (e:Expression,v:Vector<Stmt>) -> Expression : - match(map(split-exp-e{_,v},e)): + defn split-exp-e (e:Expression,v:Vector<Stmt>,n:Symbol|False) -> Expression : + match(map(split-exp-e{_,v,n},e)): (e:Subfield|DoPrim|ReadPort|Register|WritePort) : - val n = gensym(`T) - add(v,DefNode(n,e)) - WRef(n,type(e),NodeKind(),UNKNOWN-GENDER) + val n* = + if n typeof False : gensym(`T) + else : to-symbol $ string-join $ [n as Symbol gensym(`#)] + add(v,DefNode(n*,e)) + WRef(n*,type(e),NodeKind(),UNKNOWN-GENDER) (e) : e Circuit{_,main(c)} $ |
