Improve lex_error() error messages.
authorBen Pfaff <blp@gnu.org>
Tue, 3 May 2005 06:36:17 +0000 (06:36 +0000)
committerBen Pfaff <blp@gnu.org>
Tue, 3 May 2005 06:36:17 +0000 (06:36 +0000)
TODO
src/ChangeLog
src/lexer.c

diff --git a/TODO b/TODO
index 0f765330704a428be3dc1582276a55d13b8be9c0..97afc2b5fccae9bf01c353f2e8cb356287c90971 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-Time-stamp: <2005-03-02 16:08:59 blp>
+Time-stamp: <2005-05-02 23:31:38 blp>
 
 What Ben's working on now.
 --------------------------
@@ -18,6 +18,8 @@ other procedures).
 TODO
 ----
 
+lex_token_representation() should take a buffer to fill.
+
 Make valgrind --leak-check=yes --show-reachable=yes work.
 
 Add NOT_REACHED() macro.
index a2ae0c917271fc394434be8209f93b10b989a6c2..66c76f1349aa1a52752dec6642b6687404b5e871 100644 (file)
@@ -1,3 +1,7 @@
+Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
+
+       * lexer.c: (lex_error) Improve error messages.
+
 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
 
        * get.c: (cmd_match_files) Check token type before trying to match
index 575e917bbd4f81696d7d38c2ff2404f482bd3e60..53b702c4e8bb1ba851d4f767ef463b55d7d71ba1 100644 (file)
@@ -386,11 +386,18 @@ void
 lex_error (const char *message, ...)
 {
   char *token_rep;
+  char where[128];
 
   token_rep = lex_token_representation ();
-  if (token_rep[0] == 0)
-    msg (SE, _("Syntax error at end of file."));
-  else if (message)
+  if (token == T_STOP)
+    strcpy (where, "end of file");
+  else if (token == '.')
+    strcpy (where, "end of command");
+  else
+    snprintf (where, sizeof where, "`%s'", token_rep);
+  free (token_rep);
+
+  if (message)
     {
       char buf[1024];
       va_list args;
@@ -399,12 +406,10 @@ lex_error (const char *message, ...)
       vsnprintf (buf, 1024, message, args);
       va_end (args);
 
-      msg (SE, _("Syntax error %s at `%s'."), buf, token_rep);
+      msg (SE, _("Syntax error %s at %s."), buf, where);
     }
   else
-    msg (SE, _("Syntax error at `%s'."), token_rep);
-  
-  free (token_rep);
+    msg (SE, _("Syntax error at %s."), where);
 }
 
 /* Checks that we're at end of command.
@@ -539,7 +544,7 @@ lex_force_match (int t)
     }
   else
     {
-      lex_error (_("expecting %s"), lex_token_name (t));
+      lex_error (_("expecting `%s'"), lex_token_name (t));
       return 0;
     }
 }