Add some functions for use by the RTL frontend.
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 7 Dec 2016 18:16:32 +0000 (18:16 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 7 Dec 2016 18:16:32 +0000 (18:16 +0000)
gcc/ChangeLog:
* read-md.c (rtx_reader::require_char): New method.
(require_char_ws): Convert from function to...
(rtx_reader::require_char_ws): ...method.
(rtx_reader::require_word_ws): New method.
* read-md.h (rtx_reader::require_char): New method decl.
(require_char_ws): Remove global decl in favor of...
(rtx_reader::require_char_ws): ...new method decl.
(rtx_reader::require_word_ws): New method decl.
(rtx_reader::peek_char): New method decl.

From-SVN: r243376

gcc/ChangeLog
gcc/read-md.c
gcc/read-md.h

index 489ec77e81d72ea4f22b601d3de1d02decf36eaa..c4055dc1501ede01915ee760e6199923f91db364 100644 (file)
@@ -1,3 +1,15 @@
+2016-12-07  David Malcolm  <dmalcolm@redhat.com>
+
+       * read-md.c (rtx_reader::require_char): New method.
+       (require_char_ws): Convert from function to...
+       (rtx_reader::require_char_ws): ...method.
+       (rtx_reader::require_word_ws): New method.
+       * read-md.h (rtx_reader::require_char): New method decl.
+       (require_char_ws): Remove global decl in favor of...
+       (rtx_reader::require_char_ws): ...new method decl.
+       (rtx_reader::require_word_ws): New method decl.
+       (rtx_reader::peek_char): New method decl.
+
 2016-12-07  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        PR rtl-optimization/78617
index 6fe26000eb5db5995b59e0ba5e5f77bcefa970b3..095075f37d41a7419a64ebd3a389425c9f52e27e 100644 (file)
@@ -340,17 +340,40 @@ read_skip_spaces (void)
     }
 }
 
+/* Consume the next character, issuing a fatal error if it is not
+   EXPECTED.  */
+
+void
+rtx_reader::require_char (char expected)
+{
+  int ch = read_char ();
+  if (ch != expected)
+    fatal_expected_char (expected, ch);
+}
+
 /* Consume any whitespace, then consume the next non-whitespace
    character, issuing a fatal error if it is not EXPECTED.  */
 
 void
-require_char_ws (char expected)
+rtx_reader::require_char_ws (char expected)
 {
   int ch = read_skip_spaces ();
   if (ch != expected)
     fatal_expected_char (expected, ch);
 }
 
+/* Consume any whitespace, then consume the next word (as per read_name),
+   issuing a fatal error if it is not EXPECTED.  */
+
+void
+rtx_reader::require_word_ws (const char *expected)
+{
+  struct md_name name;
+  read_name (&name);
+  if (strcmp (name.string, expected))
+    fatal_with_file_and_line ("missing '%s'", expected);
+}
+
 /* Read the next character from the file.  */
 
 int
@@ -386,6 +409,16 @@ rtx_reader::unread_char (int ch)
   ungetc (ch, m_read_md_file);
 }
 
+/* Peek at the next character from the file without consuming it.  */
+
+int
+rtx_reader::peek_char (void)
+{
+  int ch = read_char ();
+  unread_char (ch);
+  return ch;
+}
+
 /* Read an rtx code name into NAME.  It is terminated by any of the
    punctuation chars of rtx printed syntax.  */
 
index 996b514976f190f604e93340c96c5e3f20881968..06b89b4c04f01df9b9e9a8ebdaf9ef6fa93ca901 100644 (file)
@@ -116,6 +116,10 @@ class rtx_reader
   char *read_braced_string ();
   char *read_string (int star_if_braced);
   void read_skip_construct (int depth, file_location loc);
+  void require_char (char expected);
+  void require_char_ws (char expected);
+  void require_word_ws (const char *expected);
+  int peek_char (void);
 
   void set_md_ptr_loc (const void *ptr, const char *filename, int lineno);
   const struct ptr_loc *get_md_ptr_loc (const void *ptr);
@@ -269,7 +273,6 @@ extern void fatal_with_file_and_line (const char *, ...)
   ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
 extern void fatal_expected_char (int, int) ATTRIBUTE_NORETURN;
 extern int read_skip_spaces (void);
-extern void require_char_ws (char expected);
 extern int n_comma_elts (const char *);
 extern const char *scan_comma_elt (const char **);
 extern void upcase_string (char *);