Commit 28d7348f62ae1a37b18d2adc7d675f2c8f117438
1 parent
d02556c8
dodana obsługa #else
git-svn-id: svn://svn.nlp.ipipan.waw.pl/morfeusz/morfeusz@159 ff4e3ee1-f430-4e82-ade0-24591c43f1fd
Showing
1 changed file
with
9 additions
and
9 deletions
fsabuilder/morfeuszbuilder/segrules/preprocessor.py
... | ... | @@ -76,7 +76,6 @@ def _processLine(lineNum, line, defines, filename): |
76 | 76 | def preprocess(inputLines, defs, filename): |
77 | 77 | defines = {} |
78 | 78 | ifdefsStack = [] |
79 | - wasElse = False | |
80 | 79 | for lineNum, line in inputLines: |
81 | 80 | if line.startswith('#define'): |
82 | 81 | parsedDefine = list(pyparseString(define, lineNum, line, filename)) |
... | ... | @@ -91,17 +90,18 @@ def preprocess(inputLines, defs, filename): |
91 | 90 | defines[name] = ArgDefine(name, arg, val) |
92 | 91 | elif line.startswith('#ifdef'): |
93 | 92 | name = pyparseString(ifdef, lineNum, line, filename)[0] |
94 | -# name = ifdef.parseString(line)[0] | |
95 | - ifdefsStack.append(name) | |
93 | + ifdefsStack.append((name, True)) | |
96 | 94 | elif line.startswith('#else'): |
97 | - ifdefsStack.pop() | |
98 | - wasElse = True | |
95 | + name, isActive = ifdefsStack[-1] | |
96 | + assert isActive | |
97 | + ifdefsStack[-1] = name, False | |
98 | +# ifdefsStack.pop() | |
99 | 99 | elif line.startswith('#endif'): |
100 | - if not wasElse: | |
101 | - ifdefsStack.pop() | |
102 | - wasElse = False | |
100 | + ifdefsStack.pop() | |
103 | 101 | elif line.startswith('#'): |
104 | 102 | yield lineNum, line |
105 | - elif len(ifdefsStack) == 0 or all(map(lambda name: name in defs, ifdefsStack)): | |
103 | + elif len(ifdefsStack) == 0 or \ | |
104 | + (all(map(lambda (name, isActive): name in defs and isActive, ifdefsStack)) | |
105 | + and not any(map(lambda (name, isActive): name in defs and not isActive, ifdefsStack))): | |
106 | 106 | yield lineNum, _processLine(lineNum, line, defines, filename) |
107 | 107 | |
108 | 108 | \ No newline at end of file |
... | ... |