* gdb.texinfo (Packets): Fix typos "alligned".
[deliverable/binutils-gdb.git] / gdb / c-exp.y
index f555518ea0013c7ba40bf6e8135d1d89d185af52..376f6d56370c7d8f340ccfb972acf724a866ab10 100644 (file)
@@ -49,6 +49,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "bfd.h" /* Required by objfiles.h.  */
 #include "symfile.h" /* Required by objfiles.h.  */
 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
+#include "charset.h"
 
 /* Flag indicating we're dealing with HP-compiled objects */ 
 extern int hp_som_som_object_present;
@@ -89,6 +90,8 @@ extern int hp_som_som_object_present;
 #define        yylloc  c_lloc
 #define yyreds c_reds          /* With YYDEBUG defined */
 #define yytoks c_toks          /* With YYDEBUG defined */
+#define yyname c_name          /* With YYDEBUG defined */
+#define yyrule c_rule          /* With YYDEBUG defined */
 #define yylhs  c_yylhs
 #define yylen  c_yylen
 #define yydefred c_yydefred
@@ -100,9 +103,11 @@ extern int hp_som_som_object_present;
 #define yycheck         c_yycheck
 
 #ifndef YYDEBUG
-#define        YYDEBUG 0               /* Default to no yydebug support */
+#define        YYDEBUG 1               /* Default to yydebug support */
 #endif
 
+#define YYFPRINTF parser_fprintf
+
 int yyparse (void);
 
 static int yylex (void);
@@ -1310,6 +1315,15 @@ yylex ()
        c = parse_escape (&lexptr);
       else if (c == '\'')
        error ("Empty character constant.");
+      else if (! host_char_to_target (c, &c))
+        {
+          int toklen = lexptr - tokstart + 1;
+          char *tok = alloca (toklen + 1);
+          memcpy (tok, tokstart, toklen);
+          tok[toklen] = '\0';
+          error ("There is no character corresponding to %s in the target "
+                 "character set `%s'.", tok, target_charset ());
+        }
 
       yylval.typed_val_int.val = c;
       yylval.typed_val_int.type = builtin_type_char;
@@ -1460,6 +1474,8 @@ yylex ()
       tempbufindex = 0;
 
       do {
+        char *char_start_pos = tokptr;
+
        /* Grow the static temp buffer if necessary, including allocating
           the first one on demand. */
        if (tempbufindex + 1 >= tempbufsize)
@@ -1482,7 +1498,19 @@ yylex ()
            tempbuf[tempbufindex++] = c;
            break;
          default:
-           tempbuf[tempbufindex++] = *tokptr++;
+           c = *tokptr++;
+            if (! host_char_to_target (c, &c))
+              {
+                int len = tokptr - char_start_pos;
+                char *copy = alloca (len + 1);
+                memcpy (copy, char_start_pos, len);
+                copy[len] = '\0';
+
+                error ("There is no character corresponding to `%s' "
+                       "in the target character set `%s'.",
+                       copy, target_charset ());
+              }
+            tempbuf[tempbufindex++] = c;
            break;
          }
       } while ((*tokptr != '"') && (*tokptr != '\0'));
This page took 0.024761 seconds and 4 git commands to generate.