hdl.ast: Cat.{operands→parts}

This commit is contained in:
whitequark 2018-12-18 19:15:44 +00:00
parent 4199674edd
commit dbbcc49a71
5 changed files with 18 additions and 18 deletions

View file

@ -66,7 +66,7 @@ Compatibility summary
- (+) `Mux` id - (+) `Mux` id
- (+) `_Slice``Slice`, `stop=`→`end=`, `.stop`→`.end` - (+) `_Slice``Slice`, `stop=`→`end=`, `.stop`→`.end`
- (+) `_Part``Part` - (+) `_Part``Part`
- (+) `Cat` id, `.l`→`.operands` - (+) `Cat` id, `.l`→`.parts`
- (+) `Replicate``Repl`, `v=`→`value=`, `n=`→`count=`, `.v`→`.value`, `.n`→`.count` - (+) `Replicate``Repl`, `v=`→`value=`, `n=`→`count=`, `.v`→`.value`, `.n`→`.count`
- (+) `Constant``Const`, `bits_sign=`→`shape=` - (+) `Constant``Const`, `bits_sign=`→`shape=`
- (+) `Signal` id, `bits_sign=`→`shape=`, `attr=`→`attrs=`, `name_override=`, `related=`, `variable=` - (+) `Signal` id, `bits_sign=`→`shape=`, `attr=`→`attrs=`, `name_override=`, `related=`, `variable=`

View file

@ -165,7 +165,7 @@ class _RHSValueCompiler(AbstractValueTransformer):
shape = value.shape() shape = value.shape()
parts = [] parts = []
offset = 0 offset = 0
for opnd in value.operands: for opnd in value.parts:
parts.append((offset, (1 << len(opnd)) - 1, self(opnd))) parts.append((offset, (1 << len(opnd)) - 1, self(opnd)))
offset += len(opnd) offset += len(opnd)
def eval(state): def eval(state):
@ -248,7 +248,7 @@ class _LHSValueCompiler(AbstractValueTransformer):
def on_Cat(self, value): def on_Cat(self, value):
parts = [] parts = []
offset = 0 offset = 0
for opnd in value.operands: for opnd in value.parts:
parts.append((offset, (1 << len(opnd)) - 1, self(opnd))) parts.append((offset, (1 << len(opnd)) - 1, self(opnd)))
offset += len(opnd) offset += len(opnd)
def eval(state, rhs): def eval(state, rhs):

View file

@ -437,19 +437,19 @@ class Cat(Value):
""" """
def __init__(self, *args): def __init__(self, *args):
super().__init__() super().__init__()
self.operands = [Value.wrap(v) for v in flatten(args)] self.parts = [Value.wrap(v) for v in flatten(args)]
def shape(self): def shape(self):
return sum(len(op) for op in self.operands), False return sum(len(op) for op in self.parts), False
def _lhs_signals(self): def _lhs_signals(self):
return union(op._lhs_signals() for op in self.operands) return union(op._lhs_signals() for op in self.parts)
def _rhs_signals(self): def _rhs_signals(self):
return union(op._rhs_signals() for op in self.operands) return union(op._rhs_signals() for op in self.parts)
def __repr__(self): def __repr__(self):
return "(cat {})".format(" ".join(map(repr, self.operands))) return "(cat {})".format(" ".join(map(repr, self.parts)))
class Repl(Value): class Repl(Value):

View file

@ -113,7 +113,7 @@ class ValueTransformer(AbstractValueTransformer):
return Part(self.on_value(value.value), self.on_value(value.offset), value.width) return Part(self.on_value(value.value), self.on_value(value.offset), value.width)
def on_Cat(self, value): def on_Cat(self, value):
return Cat(self.on_value(o) for o in value.operands) return Cat(self.on_value(o) for o in value.parts)
def on_Repl(self, value): def on_Repl(self, value):
return Repl(self.on_value(value.value), value.count) return Repl(self.on_value(value.value), value.count)

View file

@ -42,15 +42,15 @@ class ValueTestCase(FHDLTestCase):
self.assertEqual(s2.end, 2) self.assertEqual(s2.end, 2)
s3 = Const(31)[::2] s3 = Const(31)[::2]
self.assertIsInstance(s3, Cat) self.assertIsInstance(s3, Cat)
self.assertIsInstance(s3.operands[0], Slice) self.assertIsInstance(s3.parts[0], Slice)
self.assertEqual(s3.operands[0].start, 0) self.assertEqual(s3.parts[0].start, 0)
self.assertEqual(s3.operands[0].end, 1) self.assertEqual(s3.parts[0].end, 1)
self.assertIsInstance(s3.operands[1], Slice) self.assertIsInstance(s3.parts[1], Slice)
self.assertEqual(s3.operands[1].start, 2) self.assertEqual(s3.parts[1].start, 2)
self.assertEqual(s3.operands[1].end, 3) self.assertEqual(s3.parts[1].end, 3)
self.assertIsInstance(s3.operands[2], Slice) self.assertIsInstance(s3.parts[2], Slice)
self.assertEqual(s3.operands[2].start, 4) self.assertEqual(s3.parts[2].start, 4)
self.assertEqual(s3.operands[2].end, 5) self.assertEqual(s3.parts[2].end, 5)
def test_getitem_wrong(self): def test_getitem_wrong(self):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):