diff options
Diffstat (limited to 'util/lint/remccoms3.sed')
-rw-r--r-- | util/lint/remccoms3.sed | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/util/lint/remccoms3.sed b/util/lint/remccoms3.sed new file mode 100644 index 0000000000..477a5eacb1 --- /dev/null +++ b/util/lint/remccoms3.sed @@ -0,0 +1,102 @@ +#! /bin/sed -nf + +# Remove C and C++ comments, by Brian Hiles (brian_hiles@rocketmail.com) + +# Sped up (and bugfixed to some extent) by Paolo Bonzini (bonzini@gnu.org) +# Works its way through the line, copying to hold space the text up to the +# first special character (/, ", '). The original version went exactly a +# character at a time, hence the greater speed of this one. But the concept +# and especially the trick of building the line in hold space are entirely +# merit of Brian. + +# Taken from http://sed.sourceforge.net/grabbag/scripts/remccoms3.sed +# According to http://sed.sourceforge.net/grabbag/ it's in the public domain +# Changes: +# 2010-11-06: Remove strings + +:loop + +# This line is sufficient to remove C++ comments! +/^\/\// s,.*,, + +# addition for coreboot-lint: For our purpose we don't need strings +s,"[^"]*",,g + +/^$/{ + x + p + n + b loop +} +/^"/{ + :double + /^$/{ + x + p + n + /^"/b break + b double + } + + H + x + s,\n\(.[^\"]*\).*,\1, + x + s,.[^\"]*,, + + /^"/b break + /^\\/{ + H + x + s,\n\(.\).*,\1, + x + s/.// + } + b double +} + +/^'/{ + :single + /^$/{ + x + p + n + /^'/b break + b single + } + H + x + s,\n\(.[^\']*\).*,\1, + x + s,.[^\']*,, + + /^'/b break + /^\\/{ + H + x + s,\n\(.\).*,\1, + x + s/.// + } + b single +} + +/^\/\*/{ + s/.// + :ccom + s,^.[^*]*,, + /^$/ n + /^\*\//{ + s/..// + b loop + } + b ccom +} + +:break +H +x +s,\n\(.[^"'/]*\).*,\1, +x +s/.[^"'/]*// +b loop |