diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-12-29 06:56:21 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-12-29 06:56:21 -0800 |
commit | 270a2c302cd6aaed472d00e04f4a34443104fdc4 (patch) | |
tree | 3dc22139fc829cb75c519b75b7252f8bedccbedb /eval.c | |
parent | 663729d0ff4961ea2ea904aa4de9f15c07ba632d (diff) | |
download | txr-270a2c302cd6aaed472d00e04f4a34443104fdc4.tar.gz txr-270a2c302cd6aaed472d00e04f4a34443104fdc4.tar.bz2 txr-270a2c302cd6aaed472d00e04f4a34443104fdc4.zip |
Detect loop in error_trace.
* eval.c (error_trace): If a form has itself as its macro
ancestor, bail the loop. (This only happens in deliberately
contrived pathological cases, useful for testing).
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -267,6 +267,9 @@ void error_trace(val exsym, val exvals, val out_stream, val prefix) format(out_stream, lit("~a whose location is unavailable\n"), prefix, nao); } + + if (origin == last) + break; } } |