* use visit_expr.typename() to dispatch the expr to its corresponding code
for processing.
* do not create any new nodes for reuse exprs