aboutsummaryrefslogtreecommitdiffstats
path: root/src/syntax.c
diff options
context:
space:
mode:
authorMattias EngdegÄrd2022-01-16 11:58:00 +0100
committerMattias EngdegÄrd2022-01-20 11:44:07 +0100
commitb929bdaeb6bcb919d4d1a5d02713cdcac3fc44d0 (patch)
tree8b0ee1ce3c8a355b67ac46ee26c3ec064997afc6 /src/syntax.c
parentb1488a6582d8557e3e3fd894d81bab165d4aca77 (diff)
downloademacs-b929bdaeb6bcb919d4d1a5d02713cdcac3fc44d0.tar.gz
emacs-b929bdaeb6bcb919d4d1a5d02713cdcac3fc44d0.zip
Fix Fchar_syntax for non-ASCII in unibyte buffers
Fchar_syntax did not convert unibyte characters to multibyte when the current buffer was unibyte, in contrast to `char-syntax` in byte-compiled code (bug#53260). * src/bytecode.c (exec_byte_code): Call out to Fchar_syntax; the dynamic frequency is too low to justify inlining here, and it did lead to implementations diverging. * src/syntax.c (Fchar_syntax): Convert non-ASCII unibyte values to multibyte. * test/src/syntax-tests.el (syntax-char-syntax): New test.
Diffstat (limited to 'src/syntax.c')
-rw-r--r--src/syntax.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/syntax.c b/src/syntax.c
index 9df878b8edf..13c36fdf3cd 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1101,10 +1101,11 @@ this is probably the wrong function to use, because it can't take
1101`syntax-after' instead. */) 1101`syntax-after' instead. */)
1102 (Lisp_Object character) 1102 (Lisp_Object character)
1103{ 1103{
1104 int char_int;
1105 CHECK_CHARACTER (character); 1104 CHECK_CHARACTER (character);
1106 char_int = XFIXNUM (character); 1105 int char_int = XFIXNAT (character);
1107 SETUP_BUFFER_SYNTAX_TABLE (); 1106 SETUP_BUFFER_SYNTAX_TABLE ();
1107 if (NILP (BVAR (current_buffer, enable_multibyte_characters)))
1108 char_int = make_char_multibyte (char_int);
1108 return make_fixnum (syntax_code_spec[SYNTAX (char_int)]); 1109 return make_fixnum (syntax_code_spec[SYNTAX (char_int)]);
1109} 1110}
1110 1111