diff options
Diffstat (limited to 'kconfiglib.py')
| -rw-r--r-- | kconfiglib.py | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/kconfiglib.py b/kconfiglib.py index 40a19cb..7fe9c33 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -1866,37 +1866,43 @@ might be an error, and you should e-mail kconfiglib@gmail.com. def _get_expr_syms(expr): """Returns the set() of symbols appearing in expr.""" - if expr is None or isinstance(expr, str): - return set() + res = set() + if expr is None: + return res - if isinstance(expr, Symbol): - return set((expr,)) + def rec(expr): + if isinstance(expr, Symbol): + res.add(expr) + return - elif expr[0] in (OR, AND): - res = set() - for subres in [_get_expr_syms(e) for e in expr[1]]: - res.update(subres) - return res + if isinstance(expr, str): + return - elif expr[0] == NOT: - return _get_expr_syms(expr[1]) + e0 = expr[0] - elif expr[0] in (EQUAL, UNEQUAL): - res = set() + if e0 == OR or e0 == AND: + for term in expr[1]: + rec(term) - _, v1, v2 = expr + elif e0 == NOT: + rec(expr[1]) - if isinstance(v1, Symbol): - res.add(v1) + elif e0 == EQUAL or e0 == UNEQUAL: + _, v1, v2 = expr - if isinstance(v2, Symbol): - res.add(v2) + if isinstance(v1, Symbol): + res.add(v1) - return res + if isinstance(v2, Symbol): + res.add(v2) + + else: + _internal_error("Internal error while fetching symbols from an " + "expression with token stream {0}.".format(expr)) + + rec(expr) + return res - else: - _internal_error("Internal error while fetching symbols from an expression with " - "token stream {0}.".format(expr)) # # Construction of expressions |
