diff options
| author | Ulf Magnusson <ulfalizer@gmail.com> | 2019-05-24 12:14:31 +0200 |
|---|---|---|
| committer | Ulf Magnusson <ulfalizer@gmail.com> | 2019-05-24 13:08:12 +0200 |
| commit | e81a77bdb0687b62f91d7dc4d5b84b443808c0a7 (patch) | |
| tree | 339fa0fbd78cafed7e92b230a8931e3ab7a666ee | |
| parent | e806f26a075ba52eca01567c7be7f0b4eba91df5 (diff) | |
Consistently put direct deps. last when propagating
Preparation for some later additions. Previously, the 'visible if' deps
appeared to the right of the 'depends on' deps. Now, the direct deps
always appear last.
With this change, the prompt tuple is only updated once for any given
menu node too, which should be a tiny bit faster.
| -rw-r--r-- | kconfiglib.py | 18 | ||||
| -rw-r--r-- | tests/Kstr | 5 | ||||
| -rw-r--r-- | testsuite.py | 10 |
3 files changed, 25 insertions, 8 deletions
diff --git a/kconfiglib.py b/kconfiglib.py index 4a58669..2725787 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -3321,18 +3321,15 @@ class Kconfig(object): cur = node.list while cur: - cur.dep = dep = self._make_and(cur.dep, basedep) - - # Propagate dependencies to prompt - if cur.prompt: - cur.prompt = (cur.prompt[0], - self._make_and(cur.prompt[1], dep)) + dep = cur.dep = self._make_and(cur.dep, basedep) if cur.item.__class__ in _SYMBOL_CHOICE: - # Propagate 'visible if' dependencies to the prompt if cur.prompt: + # Propagate 'visible if' and dependencies to the prompt cur.prompt = (cur.prompt[0], - self._make_and(cur.prompt[1], visible_if)) + self._make_and( + cur.prompt[1], + self._make_and(visible_if, dep))) # Propagate dependencies to defaults if cur.defaults: @@ -3354,6 +3351,11 @@ class Kconfig(object): cur.implies = [(target, self._make_and(cond, dep)) for target, cond in cur.implies] + elif cur.prompt: # Not a symbol/choice + # Propagate dependencies to the prompt. 'visible if' is only + # propagated to symbols/choices. + cur.prompt = (cur.prompt[0], + self._make_and(cur.prompt[1], dep)) cur = cur.next @@ -36,6 +36,7 @@ if DEP3 menu "foo" depends on DEP4 + visible if VIS config ADVANCED help @@ -43,6 +44,10 @@ config ADVANCED depends on A || !B || (C && D) || !(E && F) || G = H || \ (I && !J && (K || L) && !(M || N) && O = P) +config ADVANCED + # Used to verify that the direct dependencies appear to the right of VIS + prompt "prompt 4" + endmenu endif diff --git a/testsuite.py b/testsuite.py index 175d278..c1690d3 100644 --- a/testsuite.py +++ b/testsuite.py @@ -554,6 +554,11 @@ config ADVANCED depends on (A || !B || (C && D) || !(E && F) || G = H || (I && !J && (K || L) && !(M || N) && O = P)) && DEP4 && DEP3 help second help text + +config ADVANCED + tristate + prompt "prompt 4" if VIS && DEP4 && DEP3 + depends on DEP4 && DEP3 """) verify_custom_str(c.syms["ADVANCED"], """ @@ -582,6 +587,11 @@ config ADVANCED depends on ([A] || ![B] || ([C] && [D]) || !([E] && [F]) || [G] = [H] || ([I] && ![J] && ([K] || [L]) && !([M] || [N]) && [O] = [P])) && [DEP4] && [DEP3] help second help text + +config ADVANCED + tristate + prompt "prompt 4" if [VIS] && [DEP4] && [DEP3] + depends on [DEP4] && [DEP3] """) |
