| # Copyright (C) 2013-2015 Free Software Foundation, Inc. |
| # |
| # 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 3, 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; see the file COPYING3. If not see |
| # <http://www.gnu.org/licenses/>. |
| |
| # This Awk script takes passes.def and writes pass-instances.def, |
| # counting the instances of each kind of pass, adding an instance number |
| # to everywhere that NEXT_PASS is used. |
| # |
| # For example, the single-instanced pass: |
| # NEXT_PASS (pass_warn_unused_result); |
| # becomes this in the output: |
| # NEXT_PASS (pass_warn_unused_result, 1); |
| # |
| # The various instances of |
| # NEXT_PASS (pass_copy_prop); |
| # become: |
| # NEXT_PASS (pass_copy_prop, 1); |
| # through: |
| # NEXT_PASS (pass_copy_prop, 8); |
| # (currently there are 8 instances of that pass) |
| |
| # Usage: awk -f gen-pass-instances.awk passes.def |
| |
| BEGIN { |
| print "/* This file is auto-generated by gen-pass-instances.awk"; |
| print " from passes.def. */"; |
| } |
| |
| function handle_line() |
| { |
| line = $0; |
| where = match(line, /NEXT_PASS \((.+)\)/) |
| if (where != 0) |
| { |
| len_of_start = length("NEXT_PASS (") |
| len_of_end = length(")") |
| len_of_pass_name = RLENGTH - (len_of_start + len_of_end) |
| line_length = length(line) |
| pass_starts_at = where + len_of_start |
| pass_name = substr(line, pass_starts_at, len_of_pass_name) |
| if (pass_name in pass_counts) |
| pass_counts[pass_name]++; |
| else |
| pass_counts[pass_name] = 1; |
| printf "%s, %s%s\n", |
| substr(line, 1, pass_starts_at + len_of_pass_name - 1), |
| pass_counts[pass_name], |
| substr(line, pass_starts_at + len_of_pass_name); |
| } else { |
| print line; |
| } |
| } |
| |
| { handle_line() } |