diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-05T16·20+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-05T16·20+0000 |
commit | e17e95a82892b31c8063f2ace1b21c79e82e6f6d (patch) | |
tree | 3e2475f7cb04ea24286656eb05d8c180188d3a07 | |
parent | 80bb477cc4ea5226ae760726730b3e09d21559de (diff) |
* Print a shared textual ATerm if the term if very large. Due to
substitutions, Fix terms are very large when printed as trees (in memory, they are quite compact due to sharing).
-rw-r--r-- | src/libnix/expr.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libnix/expr.cc b/src/libnix/expr.cc index cead803425ba..9bbe80ab4c88 100644 --- a/src/libnix/expr.cc +++ b/src/libnix/expr.cc @@ -6,13 +6,21 @@ string printTerm(ATerm t) { char * s = ATwriteToString(t); + if (!s) throw Error("cannot print term"); return s; } Error badTerm(const format & f, ATerm t) { - return Error(format("%1%, in `%2%'") % f.str() % printTerm(t)); + char * s = ATwriteToString(t); + if (!s) throw Error("cannot print term"); + if (strlen(s) > 1000) { + int len; + s = ATwriteToSharedString(t, &len); + if (!s) throw Error("cannot print term"); + } + return Error(format("%1%, in `%2%'") % f.str() % (string) s); } |