1""" UsedDefChain build used-define chains analysis for each variable. """ 2 3from pythran.passmanager import ModuleAnalysis 4import pythran.metadata as md 5 6import beniget 7 8 9class ExtendedDefUseChains(beniget.DefUseChains): 10 11 def unbound_identifier(self, name, node): 12 # don't warn on unbound identifier 13 pass 14 15 def visit(self, node): 16 # be aware of metadata 17 md.visit(self, node) 18 return super(ExtendedDefUseChains, self).visit(node) 19 20 21class UseDefChains(ModuleAnalysis): 22 23 """ 24 Build use-define chains analysis for each variable. 25 """ 26 27 def __init__(self): 28 self.result = None 29 super(UseDefChains, self).__init__(DefUseChains) 30 31 def visit_Module(self, node): 32 udc = beniget.UseDefChains(self.def_use_chains) 33 self.result = udc.chains 34 35 36class DefUseChains(ModuleAnalysis): 37 38 """ 39 Build define-use-define chains analysis for each variable. 40 """ 41 42 def __init__(self): 43 self.result = None 44 super(DefUseChains, self).__init__() 45 46 def visit_Module(self, node): 47 duc = ExtendedDefUseChains() 48 duc.visit(node) 49 self.result = duc 50