| 157 | }; |
| 158 | |
| 159 | absl::Status Unparser::Visit(const Expr& expr) { |
| 160 | auto macro = source_info_.macro_calls().find(expr.id()); |
| 161 | if (macro != source_info_.macro_calls().end()) { |
| 162 | return Visit(macro->second); |
| 163 | } |
| 164 | switch (expr.expr_kind_case()) { |
| 165 | case Expr::kConstExpr: |
| 166 | return VisitConst(expr.const_expr()); |
| 167 | case Expr::kIdentExpr: |
| 168 | return VisitIdent(expr.ident_expr()); |
| 169 | case Expr::kSelectExpr: |
| 170 | return VisitSelect(expr.select_expr()); |
| 171 | case Expr::kCallExpr: |
| 172 | return VisitCall(expr.call_expr()); |
| 173 | case Expr::kListExpr: |
| 174 | return VisitCreateList(expr.list_expr()); |
| 175 | case Expr::kStructExpr: |
| 176 | return VisitCreateStruct(expr.struct_expr()); |
| 177 | case Expr::kComprehensionExpr: |
| 178 | return VisitComprehension(expr.comprehension_expr()); |
| 179 | default: |
| 180 | return absl::InvalidArgumentError( |
| 181 | absl::StrCat("Unsupported Expr kind: ", expr.expr_kind_case())); |
| 182 | } |
| 183 | } |
| 184 | |
| 185 | absl::Status Unparser::VisitConst(const Constant& expr) { |
| 186 | switch (expr.constant_kind_case()) { |