@@ -918,32 +918,6 @@ def __repr__(self):
918918C = Const # shorthand
919919
920920
921- class AnyValue (Value , DUID ):
922- def __init__ (self , shape , * , src_loc_at = 0 ):
923- super ().__init__ (src_loc_at = src_loc_at )
924- shape = Shape .cast (shape , src_loc_at = 1 + src_loc_at )
925- self .width = shape .width
926- self .signed = shape .signed
927-
928- def shape (self ):
929- return Shape (self .width , self .signed )
930-
931- def _rhs_signals (self ):
932- return SignalSet ()
933-
934-
935- @final
936- class AnyConst (AnyValue ):
937- def __repr__ (self ):
938- return "(anyconst {}'{})" .format (self .width , "s" if self .signed else "" )
939-
940-
941- @final
942- class AnySeq (AnyValue ):
943- def __repr__ (self ):
944- return "(anyseq {}'{})" .format (self .width , "s" if self .signed else "" )
945-
946-
947921@final
948922class Operator (Value ):
949923 def __init__ (self , operator , operands , * , src_loc_at = 0 ):
@@ -1442,6 +1416,37 @@ def __repr__(self):
14421416 return f"(rst { self .domain } )"
14431417
14441418
1419+ @final
1420+ class AnyValue (Value , DUID ):
1421+ class Kind (Enum ):
1422+ AnyConst = "anyconst"
1423+ AnySeq = "anyseq"
1424+
1425+ def __init__ (self , kind , shape , * , src_loc_at = 0 ):
1426+ super ().__init__ (src_loc_at = src_loc_at )
1427+ self .kind = self .Kind (kind )
1428+ shape = Shape .cast (shape , src_loc_at = 1 + src_loc_at )
1429+ self .width = shape .width
1430+ self .signed = shape .signed
1431+
1432+ def shape (self ):
1433+ return Shape (self .width , self .signed )
1434+
1435+ def _rhs_signals (self ):
1436+ return SignalSet ()
1437+
1438+ def __repr__ (self ):
1439+ return "({} {}'{})" .format (self .kind .value , self .width , "s" if self .signed else "" )
1440+
1441+
1442+ def AnyConst (shape , * , src_loc_at = 0 ):
1443+ return AnyValue ("anyconst" , shape , src_loc_at = src_loc_at + 1 )
1444+
1445+
1446+ def AnySeq (shape , * , src_loc_at = 0 ):
1447+ return AnyValue ("anyseq" , shape , src_loc_at = src_loc_at + 1 )
1448+
1449+
14451450class Array (MutableSequence ):
14461451 """Addressable multiplexer.
14471452
@@ -1729,11 +1734,18 @@ class UnusedProperty(UnusedMustUse):
17291734 pass
17301735
17311736
1737+ @final
17321738class Property (Statement , MustUse ):
17331739 _MustUse__warning = UnusedProperty
17341740
1735- def __init__ (self , test , * , _check = None , _en = None , name = None , src_loc_at = 0 ):
1741+ class Kind (Enum ):
1742+ Assert = "assert"
1743+ Assume = "assume"
1744+ Cover = "cover"
1745+
1746+ def __init__ (self , kind , test , * , _check = None , _en = None , name = None , src_loc_at = 0 ):
17361747 super ().__init__ (src_loc_at = src_loc_at )
1748+ self .kind = self .Kind (kind )
17371749 self .test = Value .cast (test )
17381750 self ._check = _check
17391751 self ._en = _en
@@ -1742,10 +1754,10 @@ def __init__(self, test, *, _check=None, _en=None, name=None, src_loc_at=0):
17421754 raise TypeError ("Property name must be a string or None, not {!r}"
17431755 .format (self .name ))
17441756 if self ._check is None :
1745- self ._check = Signal (reset_less = True , name = f"${ self ._kind } $check" )
1757+ self ._check = Signal (reset_less = True , name = f"${ self .kind . value } $check" )
17461758 self ._check .src_loc = self .src_loc
17471759 if _en is None :
1748- self ._en = Signal (reset_less = True , name = f"${ self ._kind } $en" )
1760+ self ._en = Signal (reset_less = True , name = f"${ self .kind . value } $en" )
17491761 self ._en .src_loc = self .src_loc
17501762
17511763 def _lhs_signals (self ):
@@ -1756,23 +1768,20 @@ def _rhs_signals(self):
17561768
17571769 def __repr__ (self ):
17581770 if self .name is not None :
1759- return f"({ self .name } : { self ._kind } { self .test !r} )"
1760- return f"({ self ._kind } { self .test !r} )"
1771+ return f"({ self .name } : { self .kind . value } { self .test !r} )"
1772+ return f"({ self .kind . value } { self .test !r} )"
17611773
17621774
1763- @final
1764- class Assert (Property ):
1765- _kind = "assert"
1775+ def Assert (test , * , name = None , src_loc_at = 0 ):
1776+ return Property ("assert" , test , name = name , src_loc_at = src_loc_at + 1 )
17661777
17671778
1768- @final
1769- class Assume (Property ):
1770- _kind = "assume"
1779+ def Assume (test , * , name = None , src_loc_at = 0 ):
1780+ return Property ("assume" , test , name = name , src_loc_at = src_loc_at + 1 )
17711781
17721782
1773- @final
1774- class Cover (Property ):
1775- _kind = "cover"
1783+ def Cover (test , * , name = None , src_loc_at = 0 ):
1784+ return Property ("cover" , test , name = name , src_loc_at = src_loc_at + 1 )
17761785
17771786
17781787@final
0 commit comments