aboutsummaryrefslogtreecommitdiff
path: root/src/main/stanza/errors.stanza
diff options
context:
space:
mode:
authorazidar2015-07-30 16:00:40 -0700
committerazidar2015-07-30 16:00:40 -0700
commit4264d0c18948905ef0d924002ca828b19a69e69b (patch)
treef9a338aecda2d0717c1acced66b5aa0816171694 /src/main/stanza/errors.stanza
parenta2f3ac70d45b6a419178e2d28a2b7be801599d13 (diff)
Updated error and feature tests. Fixed bug in detecting incorrect genders
Diffstat (limited to 'src/main/stanza/errors.stanza')
-rw-r--r--src/main/stanza/errors.stanza19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/main/stanza/errors.stanza b/src/main/stanza/errors.stanza
index f0eb5a70..5451b632 100644
--- a/src/main/stanza/errors.stanza
+++ b/src/main/stanza/errors.stanza
@@ -280,7 +280,7 @@ public defn check-high-form (c:Circuit) -> Circuit :
(e) : add(errors,InvalidIndex(info))
(e:DoPrim) : check-high-form-primop(e,errors,info)
(e:UIntValue) :
- if value(e) < BigIntLit("h0",length(value(e))) : add(errors,NegUInt(info))
+ if neg?(value(e)) : add(errors,NegUInt(info))
(e) : false
map(check-high-form-w{info,_:Width},e)
map(check-high-form-t{info,_:Type},e)
@@ -622,6 +622,8 @@ public defn check-types (c:Circuit) -> Circuit :
match(map(check-types-e{info(s),_},s)) :
(s:Connect) :
if type(loc(s)) != type(exp(s)) : add(errors,InvalidConnect(info(s)))
+ (s:Connect) :
+ if type(loc(s)) != type(exp(s)) : add(errors,InvalidConnect(info(s)))
(s:OnReset) :
if type(loc(s)) != type(exp(s)) : add(errors,InvalidConnect(info(s)))
(s:Conditionally) :
@@ -652,7 +654,7 @@ public defmethod short-name (b:CheckGenders) -> String : "check-genders"
;----------------- Errors ---------------------
defn WrongGender (info:FileInfo,expr:Symbol,wrong:Symbol,right:Symbol) :
PassException $ string-join $
- [info ": Expression " expr "has gender " wrong " but requires gender " right "."]
+ [info ": Expression " expr " is used as a " wrong " but can only be used as a " right "."]
defn InferDirection (info:FileInfo,name:Symbol) :
PassException $ string-join $
@@ -671,14 +673,24 @@ defn gender (s:DefAccessor) -> Gender :
INFER : UNKNOWN-GENDER
RDWR : BI-GENDER
+defn as-srcsnk (g:Gender) -> Symbol :
+ switch {_ == g} :
+ MALE : `source
+ FEMALE : `sink
+ UNKNOWN-GENDER : `unknown
+ BI-GENDER : `sourceOrSink
+
;----------------- Check Genders Pass ---------------------
public defn check-genders (c:Circuit) -> Circuit :
val errors = Vector<PassException>()
defn check-gender (info:FileInfo,genders:HashTable<Symbol,Gender>,e:Expression,right:Gender) -> False :
val gender = get-gender(e,genders)
+ ;println(gender)
+ ;println(right)
+ ;println(right == gender)
if gender != right and gender != BI-GENDER:
- add(errors,WrongGender(info,to-symbol(e),to-symbol(gender),to-symbol(right)))
+ add(errors,WrongGender(info,to-symbol(e),as-srcsnk(right),as-srcsnk(gender)))
defn get-gender (e:Expression,genders:HashTable<Symbol,Gender>) -> Gender :
match(e) :
@@ -705,6 +717,7 @@ public defn check-genders (c:Circuit) -> Circuit :
defn check-genders-s (s:Stmt,genders:HashTable<Symbol,Gender>) -> False :
do(check-genders-e{info(s),_:Expression,genders},s)
+ do(check-genders-s{_:Stmt,genders},s)
match(s) :
(s:DefWire) : genders[name(s)] = BI-GENDER
(s:DefRegister) : genders[name(s)] = BI-GENDER