Skip to content

Commit ee1465f

Browse files
committed
USER: add option to remove reaching definitions to userdata
1 parent 87ca2a9 commit ee1465f

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

chb/astinterface/ASTInterface.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,7 @@ def introduce_ssa_variables(
988988
for (reg, locs) in rdeflocs.items():
989989
for lst in locs:
990990
if len(lst) > 0:
991+
# print("DEBUG: " + str(reg) + ": [" + ", ".join(str(loc) for loc in lst) + "]")
991992
loc1 = lst[0]
992993
vtype = None
993994
if loc1 in ftypes:

chb/userdata/UserHints.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,41 @@ def __str__(self) -> str:
635635
"action: " + self.action
636636
+ "; locs: [" + ", ".join(self.locs) + "]"
637637
+ "; name: " + self.name)
638-
638+
639+
640+
class RemoveReachingDefinitions:
641+
642+
def __init__(self, rdefspec: Dict[str, Any]) -> None:
643+
self._rdefspec = rdefspec
644+
645+
@property
646+
def rdefspec(self) -> Dict[str, Any]:
647+
return self._rdefspec
648+
649+
@property
650+
def uselocs(self) -> List[str]:
651+
return self.rdefspec.get("uselocs", [])
652+
653+
@property
654+
def rdeflocs(self) -> List[str]:
655+
return self.rdefspec.get("rdeflocs", [])
656+
657+
@property
658+
def var(self) -> str:
659+
return self.rdefspec.get("var", "__no_var__")
660+
661+
def to_xml(self, node: ET.Element) -> None:
662+
xremrdef = ET.Element("remove-var-rdefs")
663+
node.append(xremrdef)
664+
xremrdef.set("var", self.var)
665+
xremrdef.set("uselocs", ",".join(self.uselocs))
666+
xremrdef.set("rdeflocs", ",".join(self.rdeflocs))
667+
668+
def __str__(self) -> str:
669+
return (
670+
"var: " + self.var
671+
+ "; uselocs: " + ", ".join(self.uselocs)
672+
+ "; rdeflocs: " + ", ".join(self.rdeflocs))
639673

640674

641675
class FunctionAnnotation:
@@ -678,6 +712,14 @@ def typingrules(self) -> List[TypingRule]:
678712
result.append(tr)
679713
return result
680714

715+
@property
716+
def remove_reaching_definitions(self) -> List[RemoveReachingDefinitions]:
717+
result: List[RemoveReachingDefinitions] = []
718+
for d in self.fnannotation.get("remove-reaching-definitions", []):
719+
rrd = RemoveReachingDefinitions(d)
720+
result.append(rrd)
721+
return result
722+
681723
def has_register_variable_introduction(self, iaddr: str) -> bool:
682724
return iaddr in self.register_variable_introductions
683725

@@ -714,6 +756,11 @@ def to_xml(self, node: ET.Element) -> None:
714756
node.append(xtypingrules)
715757
for tr in self.typingrules:
716758
tr.to_xml(xtypingrules)
759+
if len(self.remove_reaching_definitions) > 0:
760+
xrrds = ET.Element("remove-rdefs")
761+
node.append(xrrds)
762+
for rd in self.remove_reaching_definitions:
763+
rd.to_xml(xrrds)
717764

718765
def __str__(self) -> str:
719766
lines: List[str] = []

chb/util/dotutil.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def print_dot_subgraphs(
7474
if len(subgraphs) == 0:
7575
print("No subgraphs supplied")
7676
return "error"
77-
if len(subgraphs) > 10:
77+
if len(subgraphs) > 20:
7878
print("Too many subgraphs: " + str(len(subgraphs)))
7979
return "error"
8080

0 commit comments

Comments
 (0)