Subject: bug#36988: 26.2; Error "Non-hex digit used for Unicode escape" is not too helpful

From: Drew Adams <[email-masked]>
Date: Fri, 9 Aug 2019 09:25:01 -0700 (PDT)

emacs -Q

Put this text in *scratch*, then move point to bob:

"\u2"

Then evaluate (read (current-buffer)).  You get this error:

Debugger entered--Lisp error: (error "Non-hex digit used for Unicode escape")
  read(#<buffer *scratch*>)
  eval((read (current-buffer)) nil)
  eval-expression((read (current-buffer)) nil nil 127)
  funcall-interactively(eval-expression (read (current-buffer)) nil nil 127)
  call-interactively(eval-expression nil nil)
  command-execute(eval-expression)

Dunno what the right fix/enhancement is, but this error message does not
seem very helpful in this case.

FWIW, I stumbled on this when code tried to read some Lisp code that
contained an MS Windows absolute file name where the backslashes were
not escaped, such as "C:\Users\foo.html".  It would have been nice if a
better error message could have been presented to the user in such a
case.

Perhaps there could be some way to point more or less to the offensive
"Non-hex digit used for Unicode escape"?  In this case, the offense was
apparently committed by the \u.

In GNU Emacs 26.2 (build 1, x86_64-w64-mingw32)
 of 2019-04-13
Repository revision: fd1b34bfba8f3f6298df47c8e10b61530426f749
Windowing system distributor `Microsoft Corp.', version 10.0.17763
Configured using:
 `configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''