Expand description
Source: Analysis/src/AstJsonEncoder.cpp:89-1052 (hand-ported)
C++ resolves write(propName, value) by overload on the static type of
value; Rust resolves it through WriteJson. One impl per C++ overload,
each delegating to the inherent method holding that overload’s body.
Base-node pointers go through write(AstNode*) = node->visit(this)
(AstJsonEncoder.cpp:271); concrete-node pointers bind their concrete
overload exactly as C++ overload resolution does.