@@ -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
641675class 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 ] = []
0 commit comments