hdl.ast: suggest bit_select or word_select when indexing with Value.
Fixes #1044.
This commit is contained in:
		
							parent
							
								
									9e9790377a
								
							
						
					
					
						commit
						b40c18fb00
					
				|  | @ -370,10 +370,14 @@ class Value(metaclass=ABCMeta): | ||||||
|                 key += n |                 key += n | ||||||
|             return Slice(self, key, key + 1, src_loc_at=1) |             return Slice(self, key, key + 1, src_loc_at=1) | ||||||
|         elif isinstance(key, slice): |         elif isinstance(key, slice): | ||||||
|  |             if isinstance(key.start, Value) or isinstance(key.stop, Value): | ||||||
|  |                 raise TypeError(f"Cannot slice value with a value; use Value.bit_select() or Value.word_select() instead") | ||||||
|             start, stop, step = key.indices(n) |             start, stop, step = key.indices(n) | ||||||
|             if step != 1: |             if step != 1: | ||||||
|                 return Cat(self[i] for i in range(start, stop, step)) |                 return Cat(self[i] for i in range(start, stop, step)) | ||||||
|             return Slice(self, start, stop, src_loc_at=1) |             return Slice(self, start, stop, src_loc_at=1) | ||||||
|  |         elif isinstance(key, Value): | ||||||
|  |             raise TypeError(f"Cannot index value with a value; use Value.bit_select() instead") | ||||||
|         else: |         else: | ||||||
|             raise TypeError(f"Cannot index value with {key!r}") |             raise TypeError(f"Cannot index value with {key!r}") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -303,6 +303,15 @@ class ValueTestCase(FHDLTestCase): | ||||||
|         with self.assertRaisesRegex(TypeError, |         with self.assertRaisesRegex(TypeError, | ||||||
|                 r"^Cannot index value with 'str'$"): |                 r"^Cannot index value with 'str'$"): | ||||||
|             Const(31)["str"] |             Const(31)["str"] | ||||||
|  |         with self.assertRaisesRegex(TypeError, | ||||||
|  |                 r"^Cannot index value with a value; use Value.bit_select\(\) instead$"): | ||||||
|  |             Const(31)[Signal(3)] | ||||||
|  |         s = Signal(3) | ||||||
|  |         with self.assertRaisesRegex(TypeError, | ||||||
|  |                 r"^Cannot slice value with a value; use Value.bit_select\(\) or Value.word_select\(\) instead$"): | ||||||
|  |             Const(31)[s:s+3] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|     def test_shift_left(self): |     def test_shift_left(self): | ||||||
|         self.assertRepr(Const(256, unsigned(9)).shift_left(0), |         self.assertRepr(Const(256, unsigned(9)).shift_left(0), | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Wanda
						Wanda