summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2021-11-14 12:56:11 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2021-11-14 12:56:11 -0500
commit572eed83fcce65c3f81cbbfd777f5020bed1d81a (patch)
tree6c46d00b12ffb21d71e81cddb66aa2922dd980fa
parentd75ba220e0a5a4ed26d086c305bc4ea4e4647e5d (diff)
downloademacs-572eed83fcce65c3f81cbbfd777f5020bed1d81a.tar.gz
emacs-572eed83fcce65c3f81cbbfd777f5020bed1d81a.tar.bz2
emacs-572eed83fcce65c3f81cbbfd777f5020bed1d81a.zip
* src/lread.c (read_escape): Fix handling of ?\C-<char> for chars 128-255
-rw-r--r--src/lread.c2
-rw-r--r--test/src/lread-tests.el4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/lread.c b/src/lread.c
index 3052bcbd063..2e63ec48912 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2709,7 +2709,7 @@ read_escape (Lisp_Object readcharfun, bool stringp)
c = read_escape (readcharfun, 0);
if ((c & ~CHAR_MODIFIER_MASK) == '?')
return 0177 | (c & CHAR_MODIFIER_MASK);
- else if (! SINGLE_BYTE_CHAR_P ((c & ~CHAR_MODIFIER_MASK)))
+ else if (! ASCII_CHAR_P ((c & ~CHAR_MODIFIER_MASK)))
return c | ctrl_modifier;
/* ASCII control chars are made from letters (both cases),
as well as the non-letters within 0100...0137. */
diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el
index be685fe999f..c635c592b28 100644
--- a/test/src/lread-tests.el
+++ b/test/src/lread-tests.el
@@ -115,6 +115,10 @@
(should-error (read "#24r") :type 'invalid-read-syntax)
(should-error (read "#") :type 'invalid-read-syntax))
+(ert-deftest lread-char-modifiers ()
+ (should (eq ?\C-\M-é (+ (- ?\M-a ?a) ?\C-é)))
+ (should (eq (- ?\C-ŗ ?ŗ) (- ?\C-é ?é))))
+
(ert-deftest lread-record-1 ()
(should (equal '(#s(foo) #s(foo))
(read "(#1=#s(foo) #1#)"))))