From a56a0779225c46f783c80ea3c749587f4b09ec62 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 30 Mar 2005 06:24:35 +0000 Subject: [PATCH] opt-functions.awk (flag_set_p, test_flag): New functions. * opt-functions.awk (flag_set_p, test_flag): New functions. (switch_flags): Use them. * opth-gen.awk: Use flag_set_p to check for flags. * optc-gen.awk: Likewise. Use opt_args to check for Init(...) flags. From-SVN: r97237 --- gcc/ChangeLog | 7 +++++++ gcc/opt-functions.awk | 41 +++++++++++++++++++++++++++-------------- gcc/optc-gen.awk | 22 ++++++++-------------- gcc/opth-gen.awk | 2 +- 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59cad86..d9f08ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-03-20 Richard Sandiford + + * opt-functions.awk (flag_set_p, test_flag): New functions. + (switch_flags): Use them. + * opth-gen.awk: Use flag_set_p to check for flags. + * optc-gen.awk: Likewise. Use opt_args to check for Init(...) flags. + 2005-03-30 Ian Lance Taylor * config.host (i[34567]86-*-mingw32*): Don't set diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk index 35ab445..9162821 100644 --- a/gcc/opt-functions.awk +++ b/gcc/opt-functions.awk @@ -18,6 +18,21 @@ # Some common subroutines for use by opt[ch]-gen.awk. +# Return nonzero if FLAGS contains a flag matching REGEX. +function flag_set_p(regex, flags) +{ + return (" " flags " ") ~ (" " regex " ") +} + +# Return STRING if FLAGS contains a flag matching regexp REGEX, +# otherwise return the empty string. +function test_flag(regex, flags, string) +{ + if (flag_set_p(regex, flags)) + return string + return "" +} + # If FLAGS contains a "NAME(...argument...)" flag, return the value # of the argument. Return the empty string otherwise. function opt_args(name, flags) @@ -47,24 +62,22 @@ function nth_arg(n, s) # Return a bitmask of CL_* values for option flags FLAGS. function switch_flags (flags) { - flags = " " flags " " result = "0" for (j = 0; j < n_langs; j++) { - regex = " " langs[j] " " + regex = langs[j] gsub ( "\\+", "\\+", regex ) - if (flags ~ regex) - result = result " | " macros[j] + result = result test_flag(regex, flags, " | " macros[j]) } - if (flags ~ " Common ") result = result " | CL_COMMON" - if (flags ~ " Target ") result = result " | CL_TARGET" - if (flags ~ " Joined ") result = result " | CL_JOINED" - if (flags ~ " JoinedOrMissing ") \ - result = result " | CL_JOINED | CL_MISSING_OK" - if (flags ~ " Separate ") result = result " | CL_SEPARATE" - if (flags ~ " RejectNegative ") result = result " | CL_REJECT_NEGATIVE" - if (flags ~ " UInteger ") result = result " | CL_UINTEGER" - if (flags ~ " Undocumented ") result = result " | CL_UNDOCUMENTED" - if (flags ~ " Report ") result = result " | CL_REPORT" + result = result \ + test_flag("Common", flags, " | CL_COMMON") \ + test_flag("Target", flags, " | CL_TARGET") \ + test_flag("Joined", flags, " | CL_JOINED") \ + test_flag("JoinedOrMissing", flags, " | CL_JOINED | CL_MISSING_OK") \ + test_flag("Separate", flags, " | CL_SEPARATE") \ + test_flag("RejectNegative", flags, " | CL_REJECT_NEGATIVE") \ + test_flag("UInteger", flags, " | CL_UINTEGER") \ + test_flag("Undocumented", flags, " | CL_UNDOCUMENTED") \ + test_flag("Report", flags, " | CL_REPORT") sub( "^0 \\| ", "", result ) return result } diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk index 3ed1cf8..94e2ddb 100644 --- a/gcc/optc-gen.awk +++ b/gcc/optc-gen.awk @@ -63,22 +63,16 @@ for (i = 0; i < n_opts; i++) { if (name == "") continue; - if (flags[i] ~ "VarExists") + if (flag_set_p("VarExists", flags[i])) continue; - if (flags[i] ~ "Init\\(") - { - init = flags[i]; - sub(".*Init\\(","",init); - sub("\\).*","",init); - init = " = " init; - } - else - init = ""; - - printf ("/* Set by -%s.\n %s */\nint %s%s;\n\n", + init = opt_args("Init", flags[i]) + if (init != "") + init = " = " init; + + printf ("/* Set by -%s.\n %s */\nint %s%s;\n\n", opts[i], help[i], name,init) - } +} print "const char * const lang_names[] =\n{" @@ -117,7 +111,7 @@ for (i = 0; i < n_opts; i++) # a later switch S is a longer prefix of a switch T, T # will be back-chained to S in a later iteration of this # for() loop, which is what we want. - if (flags[i] ~ "Joined") { + if (flag_set_p("Joined.*", flags[i])) { for (j = i + 1; j < n_opts; j++) { if (substr (opts[j], 1, len) != opts[i]) break; diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk index 83d1934..3839af9 100644 --- a/gcc/opth-gen.awk +++ b/gcc/opth-gen.awk @@ -127,7 +127,7 @@ for (i = 0; i < n_opts; i++) # a later switch S is a longer prefix of a switch T, T # will be back-chained to S in a later iteration of this # for() loop, which is what we want. - if (flags[i] ~ "Joined") { + if (flag_set_p("Joined.*", flags[i])) { for (j = i + 1; j < n_opts; j++) { if (substr (opts[j], 1, len) != opts[i]) break; -- 2.7.4