add some visitor and code generator