changeset: 5243:808131ba4a57
tag: tip
user: Aidan Kehoe <kehoea(a)parhasard.net>
date: Sun Aug 15 13:29:10 2010 +0100
files: src/ChangeLog src/lisp.h src/lread.c src/print.c tests/ChangeLog
tests/automated/lisp-tests.el
description:
Print symbols with ratio-like names and the associated ratios distinctly.
src/ChangeLog addition:
2010-08-15 Aidan Kehoe <kehoea(a)parhasard.net>
* print.c (print_symbol):
Escape any symbols that look like ratios, in the same way we do
symbols that look like floats or integers. Prevents confusion in
the Lisp reader.
* lread.c (isratio_string): Make this available even on builds
without HAVE_RATIO, so we can print symbols that look like ratios
with the appropriate escapes.
* lisp.h:
Make isratio_string available even if HAVE_RATIO is not defined.
tests/ChangeLog addition:
2010-08-15 Aidan Kehoe <kehoea(a)parhasard.net>
* automated/lisp-tests.el:
Test that symbols with names that look like ratios are printed
distinctly from the equivalent ratios.
diff -r f3eca926258e -r 808131ba4a57 src/ChangeLog
--- a/src/ChangeLog Sat Jul 24 17:38:35 2010 +0100
+++ b/src/ChangeLog Sun Aug 15 13:29:10 2010 +0100
@@ -1,3 +1,15 @@
+2010-08-15 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * print.c (print_symbol):
+ Escape any symbols that look like ratios, in the same way we do
+ symbols that look like floats or integers. Prevents confusion in
+ the Lisp reader.
+ * lread.c (isratio_string): Make this available even on builds
+ without HAVE_RATIO, so we can print symbols that look like ratios
+ with the appropriate escapes.
+ * lisp.h:
+ Make isratio_string available even if HAVE_RATIO is not defined.
+
2010-07-24 Aidan Kehoe <kehoea(a)parhasard.net>
* lisp.h (PARSE_KEYWORDS):
diff -r f3eca926258e -r 808131ba4a57 src/lisp.h
--- a/src/lisp.h Sat Jul 24 17:38:35 2010 +0100
+++ b/src/lisp.h Sun Aug 15 13:29:10 2010 +0100
@@ -5355,9 +5355,7 @@
int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
EXFUN (Flocate_file_clear_hashing, 1);
int isfloat_string (const char *);
-#ifdef HAVE_RATIO
int isratio_string (const char *);
-#endif
/* Well, I've decided to enable this. -- ben */
/* And I've decided to make it work right. -- sb */
diff -r f3eca926258e -r 808131ba4a57 src/lread.c
--- a/src/lread.c Sat Jul 24 17:38:35 2010 +0100
+++ b/src/lread.c Sun Aug 15 13:29:10 2010 +0100
@@ -2876,7 +2876,6 @@
|| state == (DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)));
}
-#ifdef HAVE_RATIO
int
isratio_string (const char *cp)
{
@@ -2907,7 +2906,7 @@
return *cp == '\0' || *cp == ' ' || *cp =='\t' || *cp ==
'\n' ||
*cp == '\r' || *cp == '\f';
}
-#endif
+
static void *
sequence_reader (Lisp_Object readcharfun,
diff -r f3eca926258e -r 808131ba4a57 src/print.c
--- a/src/print.c Sat Jul 24 17:38:35 2010 +0100
+++ b/src/print.c Sun Aug 15 13:29:10 2010 +0100
@@ -2027,7 +2027,7 @@
for (; confusing < size; confusing++)
{
- if (!isdigit (data[confusing]))
+ if (!isdigit (data[confusing]) && '/' != data[confusing])
{
confusing = 0;
break;
@@ -2039,7 +2039,8 @@
/* #### Ugh, this is needlessly complex and slow for what we
need here. It might be a good idea to copy equivalent code
from FSF. --hniksic */
- confusing = isfloat_string ((char *) data);
+ confusing = isfloat_string ((char *) data)
+ || isratio_string ((char *) data);
if (confusing)
write_ascstring (printcharfun, "\\");
}
diff -r f3eca926258e -r 808131ba4a57 tests/ChangeLog
--- a/tests/ChangeLog Sat Jul 24 17:38:35 2010 +0100
+++ b/tests/ChangeLog Sun Aug 15 13:29:10 2010 +0100
@@ -1,3 +1,9 @@
+2010-08-15 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * automated/lisp-tests.el:
+ Test that symbols with names that look like ratios are printed
+ distinctly from the equivalent ratios.
+
2010-07-24 Aidan Kehoe <kehoea(a)parhasard.net>
* automated/lisp-tests.el:
diff -r f3eca926258e -r 808131ba4a57 tests/automated/lisp-tests.el
--- a/tests/automated/lisp-tests.el Sat Jul 24 17:38:35 2010 +0100
+++ b/tests/automated/lisp-tests.el Sun Aug 15 13:29:10 2010 +0100
@@ -2374,4 +2374,10 @@
(garbage-collect))))))
"checking we can amputate lists without crashing #'reduce")
+(when (featurep 'ratio)
+ (Assert (not (eql '1/2 (read (prin1-to-string (intern "1/2")))))
+ "checking symbols with ratio-like names are printed distinctly")
+ (Assert (not (eql '1/5 (read (prin1-to-string (intern "2/10")))))
+ "checking symbol named \"2/10\" not eql to ratio 1/5 on read"))
+
;;; end of lisp-tests.el
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/mailman/listinfo/xemacs-patches