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 /src/libnix/expr.cc | |
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).
Diffstat (limited to 'src/libnix/expr.cc')
-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); } |