summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2015-06-11 00:08:17 +0200
committerUlf Magnusson <ulfalizer@gmail.com>2015-06-11 00:10:44 +0200
commit42c09c46432a1f5c0ebc0e34a2d3150bc8e030b3 (patch)
tree8828c8c8d53dfc53a8462add34891f6cfdf16d77
parent41158044eb9d7abdd2ba7a1d127bb26e34ef1630 (diff)
Organize dependency propagation after property type.
Removes some conditionals. Easier to read too.
-rw-r--r--kconfiglib.py58
1 files changed, 27 insertions, 31 deletions
diff --git a/kconfiglib.py b/kconfiglib.py
index 522b99d..6a7aaa4 100644
--- a/kconfiglib.py
+++ b/kconfiglib.py
@@ -1328,49 +1328,45 @@ class Config(object):
# See comment for 'menu_dep'
stmt.menu_dep = depends_on_expr
- # Propagate 'depends on' dependencies to any new default
- # expressions, prompts, and selections. ("New" since a symbol might
- # be defined in multiple places and the dependencies should only
- # apply to the local definition.)
+ # Propagate dependencies to prompts
if new_prompt is not None:
- # 'visible if' dependencies from enclosing menus get propagated
- # to prompts
+ # Propagate 'visible if' dependencies from enclosing menus
prompt, cond_expr = new_prompt
cond_expr = _make_and(cond_expr, visible_if_deps)
+ # Propagate 'depends on' dependencies
new_prompt = (prompt, _make_and(cond_expr, depends_on_expr))
-
- new_def_exprs = [(val_expr, _make_and(cond_expr, depends_on_expr))
- for val_expr, cond_expr in new_def_exprs]
-
- new_selects = [(target, _make_and(cond_expr, depends_on_expr))
- for target, cond_expr in new_selects]
-
- # Save the original expressions before any menu/if conditions have
- # been propagated so they can be retrieved later
-
- if new_prompt is not None:
+ # Save original
stmt.orig_prompts.append(new_prompt)
-
- stmt.orig_def_exprs.extend(new_def_exprs)
-
- if isinstance(stmt, Symbol):
- # Only symbols can select
- stmt.orig_selects.extend(new_selects)
-
- # Propagate menu/if dependencies to finalize the dependencies
-
- if new_prompt is not None:
+ # Finalize with dependencies from enclosing menus and ifs
stmt.prompts.append((new_prompt[0],
_make_and(new_prompt[1], deps)))
+ # Propagate dependencies to defaults
+
+ # Propagate 'depends on' dependencies
+ new_def_exprs = [(val_expr, _make_and(cond_expr, depends_on_expr))
+ for val_expr, cond_expr in new_def_exprs]
+ # Save original
+ stmt.orig_def_exprs.extend(new_def_exprs)
+ # Finalize with dependencies from enclosing menus and ifs
stmt.def_exprs.extend([(val_expr, _make_and(cond_expr, deps))
for val_expr, cond_expr in new_def_exprs])
- for target, cond in new_selects:
- target.rev_dep = _make_or(target.rev_dep,
- _make_and(stmt,
- _make_and(cond, deps)))
+ # Propagate dependencies to selects
+
+ # Only symbols can select
+ if isinstance(stmt, Symbol):
+ # Propagate 'depends on' dependencies
+ new_selects = [(target, _make_and(cond_expr, depends_on_expr))
+ for target, cond_expr in new_selects]
+ # Save original
+ stmt.orig_selects.extend(new_selects)
+ # Finalize with dependencies from enclosing menus and ifs
+ for target, cond in new_selects:
+ target.rev_dep = _make_or(target.rev_dep,
+ _make_and(stmt,
+ _make_and(cond, deps)))
#
# Symbol table manipulation