From b8366c3b2dfcc0578bfc467d5c5ea03fa0f753d1 Mon Sep 17 00:00:00 2001 From: Ulf Magnusson Date: Mon, 10 Dec 2012 07:08:36 +0100 Subject: Copy less when searching for symbols. --- kconfiglib.py | 50 ++++++++++++++++++++++++++++---------------------- 1 file 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 -- cgit v1.2.3