From 40bf74bfdf4d07f0d7171b77ae34004eb9c1fa11 Mon Sep 17 00:00:00 2001 From: azidar Date: Tue, 25 Aug 2015 15:37:53 -0700 Subject: Fixed bug in split expression that leaked connect statements out of a conditional assignment --- src/main/stanza/passes.stanza | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza index b54069e4..8a03fb10 100644 --- a/src/main/stanza/passes.stanza +++ b/src/main/stanza/passes.stanza @@ -2183,8 +2183,7 @@ public defmethod short-name (b:SplitExp) -> String : "split-expressions" defn full-name (e:Expression) -> Symbol|False : match(e) : (e:WRef) : name(e) - (e:WSubfield) : false - (e) : error("Non-supported expression.") + (e) : false defn split-exp (c:Circuit) : defn split-exp-s (s:Stmt,v:Vector,sh:HashTable) -> False : @@ -2211,8 +2210,14 @@ defn split-exp (c:Circuit) : (s:Begin) : do(f,s) (s:Conditionally) : - add(v,map(split-exp-e{_,full-name(loc(conseq(s) as Connect)),info(s)},s)) - do(f,s) + ;Predicate + val pred* = map(split-exp-e{_,full-name(pred(s)),info(s)},pred(s)) + + ;Connect + val c = conseq(s) as Connect + val exp* = map(split-exp-e{_,full-name(loc(c)),info(c)},exp(c)) + val conseq* = Connect(info(c),loc(c),exp*) + add(v,Conditionally(info(s),pred*,conseq*,alt(s))) (s:Connect) : val exp* = map(split-exp-e{_,full-name(loc(s)),info(s)},exp(s)) add(v,Connect(info(s),loc(s),exp*)) -- cgit v1.2.3