summaryrefslogtreecommitdiff
path: root/util/lint/remccoms3.sed
diff options
context:
space:
mode:
Diffstat (limited to 'util/lint/remccoms3.sed')
-rw-r--r--util/lint/remccoms3.sed102
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