aboutsummaryrefslogtreecommitdiff
path: root/src/main/stanza/passes.stanza
diff options
context:
space:
mode:
authorazidar2015-08-25 14:13:00 -0700
committerazidar2015-08-25 14:13:13 -0700
commiteb1ab67b6cc3fd4a549da563bf643bd519d7562e (patch)
treea21f0ca828398a33a68f38209429cc6beed86edc /src/main/stanza/passes.stanza
parent6cd96b6315c32bbf6c4ace28197ff1d4be86a129 (diff)
Added width check pass with tests. #22.
Diffstat (limited to 'src/main/stanza/passes.stanza')
-rw-r--r--src/main/stanza/passes.stanza8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza
index bf2e27bf..5c09b034 100644
--- a/src/main/stanza/passes.stanza
+++ b/src/main/stanza/passes.stanza
@@ -2049,9 +2049,11 @@ defn reduce-var-widths (c:Circuit,h:HashTable<Symbol,Width>) -> Circuit :
defn solve (w:Width) -> False|Long :
match(w) :
(w:VarWidth) :
- val w* = h[name(w)]
- if w* typeof VarWidth : false
- else : solve(w*)
+ val w* = get?(h,name(w),false)
+ match(w*) :
+ (w:VarWidth) : false
+ (w:False) : false
+ (w) : solve(w as Width)
(w:MaxWidth) : apply-l(map(solve,args(w)),max)
(w:PlusWidth) : apply(solve(arg1(w)),solve(arg2(w)),{plus(_,_)})
(w:MinusWidth) : apply(solve(arg1(w)),solve(arg2(w)),{minus(_,_)})