From 0b3a0f30b288945e739f1ac7c2f9d8a2fdd352ac Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Thu, 27 Oct 2016 02:53:07 -0400 Subject: [PATCH] Short-circuit substitutions for some simple types. Values that don't contain other values cannot be circular, so checking for circular objects is a waste of cycles. * src/lread.c (substitute_object_recurse): If the subtree being examined is a symbol, number, or property-less string, just return it. --- src/lread.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lread.c b/src/lread.c index f8493982c67..263638651db 100644 --- a/src/lread.c +++ b/src/lread.c @@ -3414,6 +3414,13 @@ substitute_object_recurse (Lisp_Object object, Lisp_Object placeholder, Lisp_Obj if (EQ (placeholder, subtree)) return object; + /* For common object types that can't contain other objects, don't + bother looking them up; we're done. */ + if (SYMBOLP (subtree) + || (STRINGP (subtree) && !string_intervals (subtree)) + || NUMBERP (subtree)) + return subtree; + /* If we've been to this node before, don't explore it again. */ if (!EQ (Qnil, Fmemq (subtree, seen_list))) return subtree; -- 2.39.2