Make #@n always read as a quotation of the nth hashed object.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 24 Oct 2010 06:16:33 +0000 (06:16 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 24 Oct 2010 06:16:33 +0000 (06:16 +0000)
Previously, #@n sometimes read as the nth hashed object, and
sometimes read as a quotation of it.  The advantage of the old
behaviour is that non-scode objects could be mentioned inside
quotations with #@n.  Personally, most of the time I referred to
non-scode objects inside quotations with #@n was as '#@n to work
around the problems this fixes:

(lambda (x) x)
;Value 12: #[compound-procedure 12]

(#@12 0)
;The object #[compound-procedure 12], passed as an argument to make-combination, is not an operator expression.

(list 1 2 3)
;Value 18: (1 2 3)

(pp #@18)
;The object 1 is not applicable.

doc/ref-manual/io.texi
src/runtime/parse.scm

index 0f69a24ffd7eae32dad291ebacd283a4980880a5..e2246174e461102241c6e6e57c66bcdc7a96adfe 100644 (file)
@@ -1183,7 +1183,7 @@ the object).  Subsequently, the expression
 @end example
 
 @noindent
-is notation for the object.
+is notation for an expression evaluating to the object.
 
 If @var{procedure} is supplied, the returned method generates a slightly
 different external representation:
index fe712f83154e902cb9c1b7da80a13eef6708170d..227aafd411c83a5c17d7c3bf12bd1dc67def14fe 100644 (file)
@@ -572,9 +572,7 @@ USA.
     ;; result of the evaluation to be the object she was referring
     ;; to.  If the quotation isn't there, the user just gets
     ;; confused.
-    (if (scode-constant? object)
-       object
-       (make-quotation object))))
+    (make-quotation object)))
 
 (define (parse-unhash object)
   (if (not (exact-nonnegative-integer? object))