allow parent-less renumbering of CNF_VARs
authorPhilipp Gesang <philipp.gesang@intra2net.com>
Tue, 5 Dec 2017 10:55:24 +0000 (11:55 +0100)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Mon, 5 Nov 2018 11:16:39 +0000 (12:16 +0100)
When more control is needed over the line numbers a CNF_VAR and
its children are assigned, the *parent* linenumber can be used to
pass an offset. Add a parameter *toplevel* to prevent the parent
index from being set.

src/cnfvar.py

index 75857c7..1a2ee34 100644 (file)
@@ -530,21 +530,28 @@ def read_cnf(data):
     return {"cnf": cnf}
 
 
-def renumber_vars(root, parent=None):
+def renumber_vars(root, parent=None, toplevel=False):
     """
-    renumber_vars -- Number cnfvars linearly.
+    renumber_vars -- Number cnfvars linearly. If *parent* is specified,
+    numbering will start at this offset. Also, the VAR *root* will be assigned
+    this number as a parent lineno unless *toplevel* is set (the root var in
+    a CNF tree obviously can’t have a parent).
+
+    The *toplevel* parameter is useful when renumbering an existing variable
+    starting at a given offset without at the same time having that offset
+    assigned as a parent.
     """
     if isinstance(root, dict):
-        root = root["cnf"]
+        root = cnf_root (root)
     i = parent or 0
     for var in root:
         i += 1
         var["number"] = i
-        if parent is not None:
+        if toplevel is False and parent is not None:
             var["parent"] = parent
         children = var.get("children", None)
         if children is not None:
-            i = renumber_vars(children, i)
+            i = renumber_vars(children, parent=i, toplevel=False)
     return i
 
 #