aboutsummaryrefslogtreecommitdiff
path: root/gcc/read-md.c
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2010-06-10 20:23:23 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2010-06-10 20:23:23 +0000
commit9b68b6ea7f378adba54d910340277e8c6d022a6c (patch)
treeb0d555e6cf1ab4460355eb3d51bbf23067aaef5f /gcc/read-md.c
parent600ab3fcfa44ffe8f6c384333d3254ec610a3da7 (diff)
downloadgcc-9b68b6ea7f378adba54d910340277e8c6d022a6c.zip
gcc-9b68b6ea7f378adba54d910340277e8c6d022a6c.tar.gz
gcc-9b68b6ea7f378adba54d910340277e8c6d022a6c.tar.bz2
Makefile.in (BUILD_RTL): Move build/read-md.o to...
gcc/ * Makefile.in (BUILD_RTL): Move build/read-md.o to... (BUILD_MD): ...this new variable. (simple_generated_rtl_h, simple_generated_rtl_c): New variables that include the old contents of simple_generated_h and simple_generated_c. (simple_generated_h, simple_generated_c): Include them. Add insn-constants.h. (s-%): Make simple_generated_{h,c} stamps depend on $(MD_DEPS) and simple_generated_rtl_{h,c} stamps depend on insn-conditions.md. Remove these dependencies from the main rule and include insn-conditions.md in the command line only if it appears in the dependency list. (insn-constants.h, s-constants): Delete. (build/genconstants.o): Don't depend on $(RTL_BASE_H), $(GTM_H) or gensupport.h. (build/genmddeps.o): Likewise. (genprogrtl): New variable that contains everything from genprogmd except mddeps and constants. (genprogmd): Redefine in terms of genprogrtl. Make these programs depend on $(BUILD_MD) (genprog): New variable. Make these programs depend on $(BUILD_ERRORS). * genmddeps.c: Don't include tm.h, rtl.h or gensupport.h. (main): Use read_md_files instead of init_rtx_reader_args. * genconstants.c: As for genmddeps.c. * read-md.h (read_skip_construct): Declare. * read-md.c (read_skip_construct): New function. (handle_file): Allow a null handle_directive, skipping the construct if so. (parse_include): Update the comment accordingly. From-SVN: r160578
Diffstat (limited to 'gcc/read-md.c')
-rw-r--r--gcc/read-md.c56
1 files changed, 54 insertions, 2 deletions
diff --git a/gcc/read-md.c b/gcc/read-md.c
index 0071e28..af9800f 100644
--- a/gcc/read-md.c
+++ b/gcc/read-md.c
@@ -575,6 +575,55 @@ read_string (int star_if_braced)
return stringbuf;
}
+/* Skip the rest of a construct that started at line LINENO and that
+ is currently nested by DEPTH levels of parentheses. */
+
+void
+read_skip_construct (int depth, int lineno)
+{
+ struct md_name name;
+ int c;
+
+ do
+ {
+ c = read_skip_spaces ();
+ if (c == EOF)
+ {
+ error_with_line (lineno, "unterminated construct");
+ exit (1);
+ }
+ switch (c)
+ {
+ case '(':
+ depth++;
+ break;
+
+ case ')':
+ depth--;
+ break;
+
+ case ':':
+ case '[':
+ case ']':
+ case '/':
+ break;
+
+ case '\"':
+ case '{':
+ unread_char (c);
+ read_string (false);
+ break;
+
+ default:
+ unread_char (c);
+ read_name (&name);
+ break;
+ }
+ }
+ while (depth > 0);
+ unread_char (c);
+}
+
/* Given a string, return the number of comma-separated elements in it.
Return 0 for the null string. */
@@ -787,8 +836,10 @@ handle_file (directive_handler_t handle_directive)
handle_constants ();
else if (strcmp (directive.string, "include") == 0)
handle_include (lineno, handle_directive);
- else
+ else if (handle_directive)
handle_directive (lineno, directive.string);
+ else
+ read_skip_construct (1, lineno);
c = read_skip_spaces ();
if (c != ')')
@@ -840,7 +891,8 @@ parse_include (const char *arg)
It should return true if it recognizes the argument or false if a
generic error should be reported.
- The parser calls HANDLE_DIRECTIVE for each unknown directive.
+ If HANDLE_DIRECTIVE is nonnull, the parser calls it for each
+ unknown directive, otherwise it just skips such directives.
See the comment above the directive_handler_t definition for
details about the callback's interface. */