summaryrefslogtreecommitdiff
path: root/Tools/c-analyzer/c_parser/source.py
blob: f8998c8a338b20a79890c457e62b5af8e066a409 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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())