diff options
Diffstat (limited to 'src/pprint.cpp')
-rw-r--r-- | src/pprint.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/pprint.cpp b/src/pprint.cpp index d082b5d..5ceb039 100644 --- a/src/pprint.cpp +++ b/src/pprint.cpp @@ -141,6 +141,31 @@ print_to(ostream& out, const AST* ast, unsigned indent, CEnv* cenv, bool types) newline(out, 0); return out; + } else if (form == "let") { + out << (*i++) << " ("; + const ATuple* vars = (*i)->as_tuple(); + for (ATuple::const_iterator v = vars->begin(); v != vars->end();) { + out << (*v); + + if (types) + out << " :" << cenv->tsubst.apply(cenv->tenv.var(*v)); + + out << " " << (*++v); + + if (++v != vars->end()) + newline(out, indent + 6); + else + out << ")"; + } + newline(out, indent + 2); + for (ATuple::const_iterator i = tup->iter_at(2); i != tup->end(); ++i) + print_to(out, *i, indent + 2, cenv, types); + out << ")"; + if (types) + out << " :" << cenv->tsubst.apply(cenv->tenv.var(tup->list_last())); + + return out; + } else { return print_tuple(out, tup, i, indent + 1, false, cenv, types, false); } @@ -157,7 +182,7 @@ print_to(ostream& out, const AST* ast, unsigned indent, CEnv* cenv, bool types) case T_SYMBOL: return out << ((const ASymbol*)ast)->sym(); } - + return out << "?"; } |