summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Magnusson <ulfalizer@gmail.com>2019-06-24 08:18:06 +0200
committerUlf Magnusson <ulfalizer@gmail.com>2019-06-24 08:57:38 +0200
commit0ca8e78ebaed9ded586162753e8224f8ce7ef4a2 (patch)
tree8eff8d2e6576dba8e6de109084a950ef085f59b9
parent277c43348b65d8f6a4fb16c66fd48e9c697661e9 (diff)
Add {Symbol,Choice}.orig_*, corresponding to the MenuNode fields
Getting defaults, select, implies, and ranges without dependencies propagated to conditions can be useful for symbols and choices as well, e.g. when generating standalone documentation for properties.
-rw-r--r--kconfiglib.py44
-rw-r--r--tests/Kstr49
-rw-r--r--testsuite.py18
3 files changed, 108 insertions, 3 deletions
diff --git a/kconfiglib.py b/kconfiglib.py
index acf365c..8e6d206 100644
--- a/kconfiglib.py
+++ b/kconfiglib.py
@@ -4026,6 +4026,12 @@ class Symbol(object):
than plain integers. Undefined symbols get their name as their string
value, so this works out. The C tools work the same way.
+ orig_defaults:
+ orig_selects:
+ orig_implies:
+ orig_ranges:
+ See the corresponding attributes on the MenuNode class.
+
rev_dep:
Reverse dependency expression from other symbols selecting this symbol.
Multiple selections get ORed together. A condition on a select is ANDed
@@ -4515,6 +4521,34 @@ class Symbol(object):
"""
return {item for node in self.nodes for item in node.referenced}
+ @property
+ def orig_defaults(self):
+ """
+ See the class documentation.
+ """
+ return [d for node in self.nodes for d in node.orig_defaults]
+
+ @property
+ def orig_selects(self):
+ """
+ See the class documentation.
+ """
+ return [s for node in self.nodes for s in node.orig_selects]
+
+ @property
+ def orig_implies(self):
+ """
+ See the class documentation.
+ """
+ return [i for node in self.nodes for i in node.orig_implies]
+
+ @property
+ def orig_ranges(self):
+ """
+ See the class documentation.
+ """
+ return [r for node in self.nodes for r in node.orig_ranges]
+
def __repr__(self):
"""
Returns a string with information about the symbol (including its name,
@@ -4939,6 +4973,9 @@ class Choice(object):
Note that 'depends on' and parent dependencies are propagated to
'default' conditions.
+ orig_defaults:
+ See the corresponding attribute on the MenuNode class.
+
direct_dep:
See Symbol.direct_dep.
@@ -5102,6 +5139,13 @@ class Choice(object):
"""
return {item for node in self.nodes for item in node.referenced}
+ @property
+ def orig_defaults(self):
+ """
+ See the class documentation.
+ """
+ return [d for node in self.nodes for d in node.orig_defaults]
+
def __repr__(self):
"""
Returns a string with information about the choice when it is evaluated
diff --git a/tests/Kstr b/tests/Kstr
index 4243918..f55c830 100644
--- a/tests/Kstr
+++ b/tests/Kstr
@@ -242,3 +242,52 @@ endmenu
# Only prompt, no type
config PROMPT_ONLY
prompt "prompt only"
+
+# {Symbol,Choice}.orig_*
+
+if BASE_DEP
+
+config BOOL_SYM_ORIG
+ bool
+ default D1 if DEP
+ default D2
+ select S1
+ select S2 if DEP
+ imply I1
+ imply I1
+
+config BOOL_SYM_ORIG
+ default D3
+ select S3
+ imply I3 if DEP
+
+config INT_SYM_ORIG
+ int
+ range 1 2 if DEP
+ range 3 4
+
+config INT_SYM_ORIG
+ range 5 6 if DEP
+
+choice CHOICE_ORIG
+ bool "choice orig"
+ default A
+ default B if DEP
+
+config A
+ bool
+
+config B
+ bool
+
+endchoice
+
+choice CHOICE_ORIG
+ default C if DEP
+
+config C
+ bool
+
+endchoice
+
+endif
diff --git a/testsuite.py b/testsuite.py
index 4bb1991..d5f9726 100644
--- a/testsuite.py
+++ b/testsuite.py
@@ -782,10 +782,10 @@ comment "advanced comment"
""")
- print("Testing MenuNode.orig_*")
+ print("Testing {MenuNode,Symbol,Choice}.orig_*")
- # Just test some corner cases here. These are already tested above. Use
- # MenuNode.__str__() as a proxy.
+ # Just test some corner cases here re. MenuNode.orig_*. They are already
+ # indirectly tested above. Use MenuNode.__str__() as a proxy.
verify_str(c.syms["DEP_REM_CORNER_CASES"], """
config DEP_REM_CORNER_CASES
@@ -823,6 +823,18 @@ config DEP_REM_CORNER_CASES
depends on BAZ && QAZ
""")
+ # Test {Symbol,Choice}.orig_*
+
+ def verify_deps(elms, dep_index, expected):
+ verify_equal(" ".join(expr_str(elm[dep_index]) for elm in elms),
+ expected)
+
+ verify_deps(c.syms["BOOL_SYM_ORIG"].orig_defaults, 1, "DEP y y")
+ verify_deps(c.syms["BOOL_SYM_ORIG"].orig_selects, 1, "y DEP y")
+ verify_deps(c.syms["BOOL_SYM_ORIG"].orig_implies, 1, "y y DEP")
+ verify_deps(c.syms["INT_SYM_ORIG"].orig_ranges, 2, "DEP y DEP")
+ verify_deps(c.named_choices["CHOICE_ORIG"].orig_defaults, 1, "y DEP DEP")
+
print("Testing Symbol.__repr__()")