| # Copyright (C) 2003,2004 Free Software Foundation, Inc. |
| # Contributed by Kelley Cook, June 2004. |
| # Original code from Neil Booth, May 2003. |
| # |
| # This program is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by the |
| # Free Software Foundation; either version 2, or (at your option) any |
| # later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| |
| # Some common subroutines for use by opt[ch]-gen.awk. |
| |
| # APPLE LOCAL begin optimization pragmas 3124235/3420242 |
| # Return nonzero if FLAGS contains a flag matching REGEX. |
| function flag_set_p(regex, flags) |
| { |
| return (" " flags " ") ~ (" " regex " ") |
| } |
| # APPLE LOCAL end optimization pragmas 3124235/3420242 |
| |
| function switch_flags (flags) |
| { |
| flags = " " flags " " |
| result = "0" |
| for (j = 0; j < n_langs; j++) { |
| regex = " " langs[j] " " |
| gsub ( "\\+", "\\+", regex ) |
| if (flags ~ regex) |
| result = result " | " macros[j] |
| } |
| if (flags ~ " Common ") result = result " | CL_COMMON" |
| # APPLE LOCAL mainline |
| 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" |
| # APPLE LOCAL begin optimization pragmas 3124235/3420242 |
| if (flags ~ " VarUint ") result = result " | CL_VARUINT" |
| if (flags ~ " PerFunc ") result = result " | CL_PERFUNC" |
| # APPLE LOCAL end optimization pragmas 3124235/3420242 |
| sub( "^0 \\| ", "", result ) |
| return result |
| } |
| |
| function var_args(flags) |
| { |
| if (flags !~ "Var\\(") |
| return "" |
| sub(".*Var\\(", "", flags) |
| sub("\\).*", "", flags) |
| |
| return flags |
| } |
| function var_name(flags) |
| { |
| s = var_args(flags) |
| if (s == "") |
| return ""; |
| sub( ",.*", "", s) |
| return s |
| } |
| function var_set(flags) |
| { |
| s = var_args(flags) |
| if (s !~ ",") |
| return "0, 0" |
| sub( "[^,]*,", "", s) |
| return "1, " s |
| } |
| function var_ref(flags) |
| { |
| name = var_name(flags) |
| # APPLE LOCAL begin optimization pragmas 3124235/3420242 |
| if (flags ~ "PerFunc") { |
| if (flags ~ "VarUint") { |
| return "&cl_pf_opts.fld_" name |
| } else { |
| return "0" |
| } |
| } |
| # APPLE LOCAL end optimization pragmas 3124235/3420242 |
| if (name == "") |
| return "0" |
| else |
| return "&" name |
| } |
| # APPLE LOCAL begin optimization pragmas 3124235/3420242 |
| # Given that an option has flags FLAGS, return an initializer for the |
| # "access_flag" field of its cl_options[] entry. This applies only to |
| # PerFunc VarUint things (bitfields) at the moment. |
| function access_ref(flags) |
| { |
| name = var_name(flags) |
| if (flags !~ "PerFunc") { |
| return "0" |
| } |
| if (flags ~ "VarUint") { |
| return "0" |
| } |
| if (name != "") |
| return "cl_opt_access_func_" name |
| return "0" |
| } |
| # APPLE LOCAL end optimization pragmas 3124235/3420242 |