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>
Sat, 2 Oct 2021 14:58:16 +0000 (15:58 +0100)
commit67f9b701fb2ddd9f5f87701ff7d68279da5a90ef
tree02dfb8071bd419e118c8a9a51215fe6ea07dc0ad
parent7443dba95abeea2698a8109a612f70053a076e8f
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