summaryrefslogtreecommitdiffstats
path: root/Tools/c-analyzer/c_parser/source.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/c-analyzer/c_parser/source.py')
-rw-r--r--Tools/c-analyzer/c_parser/source.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/Tools/c-analyzer/c_parser/source.py b/Tools/c-analyzer/c_parser/source.py
new file mode 100644
index 0000000..f8998c8
--- /dev/null
+++ b/Tools/c-analyzer/c_parser/source.py
@@ -0,0 +1,34 @@
+from . import preprocessor
+
+
+def iter_clean_lines(lines):
+ incomment = False
+ for line in lines:
+ # Deal with comments.
+ if incomment:
+ _, sep, line = line.partition('*/')
+ if sep:
+ incomment = False
+ continue
+ line, _, _ = line.partition('//')
+ line, sep, remainder = line.partition('/*')
+ if sep:
+ _, sep, after = remainder.partition('*/')
+ if not sep:
+ incomment = True
+ continue
+ line += ' ' + after
+
+ # Ignore blank lines and leading/trailing whitespace.
+ line = line.strip()
+ if not line:
+ continue
+
+ yield line
+
+
+def iter_lines(filename, *,
+ preprocess=preprocessor.run,
+ ):
+ content = preprocess(filename)
+ return iter(content.splitlines())