add redirection of __Cat__ to allow overrides for more advanced behaviour
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 28 Sep 2021 17:02:53 +0000 (18:02 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Tue, 28 Sep 2021 17:02:53 +0000 (18:02 +0100)
commit113ccd91a27a6256656c44f6afc5035dd7328d43
treeaa98b6364a25c9da6287877298744a3bc43f782a
parent160d23ee7ea78c3f2d522fc7daa1705bf8cb4f17
add redirection of __Cat__ to allow overrides for more advanced behaviour
without changing fundamental language characteristics or semantics in nmigen

https://bugs.libre-soc.org/show_bug.cgi?id=458

this one is slightly more involved than __Repl__, __Mux__, __Switch__ etc.
because Cat() can receive arbitrary objects including generators.
exactly as is done in what is now _InternalCat, the arguments need to
be flattened and individually Value.cast()ed, however *before* doing
so, the first argument needs to be inspected and treated separately,
because the first argument is the one on which __Cat__ shall be called.

    args[0].__Cat__(*args[1:])

therefore it must not be lowered because its type (a derivative of
UserValue) would be entirely lost through the Value.cast().
nmigen/back/rtlil.py
nmigen/hdl/ast.py
nmigen/hdl/xfrm.py
tests/test_hdl_ast.py