ref: 2372e6a96bc79214b69242a9d6a5f2755dec21d0
parent: 32c81bcbea042c1288fc66ba9e7b4dcf9e266a81
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sat Aug 17 08:54:06 EDT 2024
Don't crash on C pointers when pretty printing.
--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -1876,9 +1876,11 @@
putb('"', f);
}
-/* Recursively print an expression.
- This assumes that the shared nodes has been marked as such.
-*/
+/*
+ * Recursively print an expression.
+ * This assumes that the shared nodes has been marked as such.
+ * The prefix flag is used to get a readable dump.
+ */
void
printrec(BFILE *f, NODEPTR n, int prefix)
{
@@ -1949,14 +1951,21 @@
}
break;
case T_PTR:
- if (PTR(n) == stdin)
- putsb("IO.stdin", f);
- else if (PTR(n) == stdout)
- putsb("IO.stdout", f);
- else if (PTR(n) == stderr)
- putsb("IO.stderr", f);
- else
- ERR("Cannot serialize pointers");
+ if (prefix) {
+ putsb("PTR", f);
+ } else {
+#if 0
+ /* This doesn't work very well, since handles are allocated with malloc. */
+ if (PTR(n) == stdin)
+ putsb("IO.stdin", f);
+ else if (PTR(n) == stdout)
+ putsb("IO.stdout", f);
+ else if (PTR(n) == stderr)
+ putsb("IO.stderr", f);
+ else
+#endif
+ ERR("Cannot serialize pointers");
+ }
break;
case T_FUNPTR:
ERR("Cannot serialize function pointers");
--
⑨