From c9d1e761cea56e94d9ad3d783c8ed7fcf448b082 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sun, 4 Feb 2018 16:20:32 -0500 Subject: [PATCH v1] [sketch] Catch strange quotes on error time * src/keyboard.c (Fcommand_error_default_function): Check for RIGHT SINGLE QUOTATION MARK and give a more detailed message. TODO: check for other confusables. * src/lread.c (read1): Don't signal error on strange quotes. * src/eval.c (Fsetq): Pass full arglist in error data. TODO: the same for all the other Qwrong_number_of_arguments cases. --- src/eval.c | 3 ++- src/keyboard.c | 20 ++++++++++++++++++++ src/lread.c | 7 ------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/eval.c b/src/eval.c index 7db4dbcf18..db61c0421f 100644 --- a/src/eval.c +++ b/src/eval.c @@ -507,7 +507,8 @@ DEFUN ("setq", Fsetq, Ssetq, 0, UNEVALLED, 0, Lisp_Object sym = XCAR (tail), lex_binding; tail = XCDR (tail); if (!CONSP (tail)) - xsignal2 (Qwrong_number_of_arguments, Qsetq, make_number (nargs + 1)); + xsignal3 (Qwrong_number_of_arguments, Qsetq, + make_number (nargs + 1), args); Lisp_Object arg = XCAR (tail); tail = XCDR (tail); val = eval_sub (arg); diff --git a/src/keyboard.c b/src/keyboard.c index 4324991da4..24c5f66934 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1047,6 +1047,26 @@ DEFUN ("command-error-default-function", Fcommand_error_default_function, bitch_at_user (); print_error_message (data, Qt, SSDATA (context), signal); + + Lisp_Object errname = Fcar (data); + /* TODO: Add arglist to Qwrong_number_of_arguments errors, and + check those too. */ + if (EQ (errname, Qvoid_variable)) + { + Lisp_Object void_symname = Fsymbol_name (Fnth (make_number (1), data)); + if (SCHARS (void_symname) > 0 && + /* TODO: check all confusables. */ + EQ (Faref (void_symname, make_number (0)), make_number (0x2019))) + { + Lisp_Object msg = CALLN + (Fformat_message, + build_string ("\nSymbol has with `%c' (%s) at character 0," + " did you mean `%c' (%s)"), + make_number (0x2019), build_string ("RIGHT SINGLE QUOTATION MARK"), + make_number ('\''), build_string ("APOSTROPHE")); + Fprinc (msg, Qt); + } + } } return Qnil; } diff --git a/src/lread.c b/src/lread.c index 3b0a17c90b..ee08902f81 100644 --- a/src/lread.c +++ b/src/lread.c @@ -3470,13 +3470,6 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) if (! NILP (result)) return unbind_to (count, result); } - if (!quoted && multibyte) - { - int ch = STRING_CHAR ((unsigned char *) read_buffer); - if (confusable_symbol_character_p (ch)) - xsignal2 (Qinvalid_read_syntax, build_string ("strange quote"), - CALLN (Fstring, make_number (ch))); - } { Lisp_Object result; ptrdiff_t nbytes = p - read_buffer; -- 2.11.0