mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-14 01:01:27 +00:00
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@3811 d57e44dd-8a1f-0410-8b47-8ef2f437770f
164 lines
4.6 KiB
Awk
Executable File
164 lines
4.6 KiB
Awk
Executable File
#!/usr/bin/gawk -f
|
|
|
|
############################################################################
|
|
#
|
|
# Script for filtering TRACE_ENTRY(), TRACE_EXIT() and TRACE_EXIT_RES()
|
|
# statements from a patch.
|
|
#
|
|
# Copyright (C) 2009 Bart Van Assche <bvanassche@acm.org>
|
|
#
|
|
# 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, version 2
|
|
# of the License.
|
|
#
|
|
# 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.
|
|
#
|
|
############################################################################
|
|
|
|
function categorize_line(line) {
|
|
is_blank = 0
|
|
is_trace_entry = 0
|
|
is_trace_exit = 0
|
|
is_label = 0
|
|
is_return_void = 0
|
|
is_brace_at_start_of_line = 0
|
|
if (line ~ "^+$")
|
|
is_blank = 1
|
|
else if (line ~ "^+\tTRACE_ENTRY\\(\\);$")
|
|
is_trace_entry = 1
|
|
else if (line ~ "^+\tTRACE_EXIT\\(\\);$" \
|
|
|| line ~ "^+\tTRACE_EXIT_RES\\(.*\\);$" \
|
|
|| line ~ "^+\tTRACE_EXIT_HRES\\(.*\\);$")
|
|
is_trace_exit = 1
|
|
else if (line ~ ":$")
|
|
is_label = 1
|
|
else if (line ~ "^+\treturn;$")
|
|
is_return_void = 1
|
|
else if (line ~ "^+}$")
|
|
is_brace_at_start_of_line = 1
|
|
}
|
|
|
|
# Leave out TRACE_ENTRY() and the blank line below it and also TRACE_EXIT()
|
|
# and the blank line before it.
|
|
function print_conditionally() {
|
|
if (previous_is_trace_entry \
|
|
|| (before_previous_is_trace_entry && previous_is_blank) \
|
|
|| previous_is_trace_exit \
|
|
|| (previous_is_blank && is_trace_exit) \
|
|
|| (!before_previous_is_label \
|
|
&& previous_is_return_void \
|
|
&& is_brace_at_start_of_line))
|
|
{
|
|
# print "deleted", previous_line
|
|
lines_deleted++
|
|
reverse_shift_state_variables()
|
|
}
|
|
else
|
|
{
|
|
# printf "[%d] %s\n", lines, previous_line
|
|
line[lines++] = previous_line
|
|
}
|
|
}
|
|
|
|
function shift_state_variables(line) {
|
|
previous_line = line
|
|
before_previous_is_blank = previous_is_blank
|
|
before_previous_is_trace_entry = previous_is_trace_entry
|
|
before_previous_is_trace_exit = previous_is_trace_exit
|
|
before_previous_is_label = previous_is_label
|
|
previous_is_blank = is_blank
|
|
previous_is_trace_entry = is_trace_entry
|
|
previous_is_trace_exit = is_trace_exit
|
|
previous_is_label = is_label
|
|
previous_is_return_void = is_return_void
|
|
}
|
|
|
|
function reverse_shift_state_variables() {
|
|
previous_is_blank = before_previous_is_blank
|
|
previous_is_trace_entry = before_previous_is_trace_entry
|
|
previous_is_trace_exit = before_previous_is_trace_exit
|
|
previous_is_label = before_previous_is_label
|
|
}
|
|
|
|
function reset_hunk_state_variables() {
|
|
lines = 0
|
|
lines_deleted = 0
|
|
first_line_of_hunk = 1
|
|
before_previous_is_blank = 0
|
|
before_previous_is_trace_entry = 0
|
|
before_previous_is_trace_exit = 0
|
|
before_previous_is_label = 0
|
|
previous_is_blank = 0
|
|
previous_is_trace_entry = 0
|
|
previous_is_trace_exit = 0
|
|
previous_is_label = 0
|
|
previous_is_return_void = 0
|
|
}
|
|
|
|
function dump_lines() {
|
|
# Detect empty hunks
|
|
first_modif = -1
|
|
for (i = 0; i < lines; i++)
|
|
{
|
|
if (line[i] ~ "^[+-]")
|
|
{
|
|
first_modif = i
|
|
break
|
|
}
|
|
}
|
|
|
|
# printf "dump_lines(): lines = %d, first_modif = %d\n", lines, first_modif
|
|
|
|
# Dump line[] as a hunk, but only if the hunk is not empty.
|
|
if (first_modif >= 0)
|
|
{
|
|
if (h[0] != "")
|
|
printf "@@ -%d,%d +%d,%d @@%s\n",h[1],h[2],h[3],h[4]-lines_deleted,h[5]
|
|
for (i = 0; i < lines; i++)
|
|
print line[i]
|
|
}
|
|
reset_hunk_state_variables()
|
|
}
|
|
|
|
BEGIN {
|
|
reset_hunk_state_variables()
|
|
}
|
|
|
|
{
|
|
# If the line currently being processed is a hunk header, print all lines
|
|
# that were stored in the array line[] since the last hunk header was read.
|
|
if (match($0, "^@@ -([0-9]*),([0-9]*) \\+([0-9]*),([0-9]*) @@(.*)$"))
|
|
{
|
|
categorize_line("")
|
|
print_conditionally()
|
|
dump_lines()
|
|
match($0, "^@@ -([0-9]*),([0-9]*) \\+([0-9]*),([0-9]*) @@(.*)$", h)
|
|
}
|
|
else
|
|
{
|
|
if (first_line_of_hunk)
|
|
first_line_of_hunk = 0
|
|
else
|
|
{
|
|
categorize_line($0)
|
|
print_conditionally()
|
|
}
|
|
shift_state_variables($0)
|
|
}
|
|
}
|
|
|
|
END {
|
|
categorize_line("")
|
|
print_conditionally()
|
|
dump_lines()
|
|
}
|
|
|
|
# Local variables:
|
|
# indent-tabs-mode: nil
|
|
# c-basic-offset: 2
|
|
# End:
|