docstr: Set default range value for globals and attributes.
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse("def foo(a, b): pass")
  >>> pm = passmanager.PassManager("test")
  >>> res = pm.gather(RangeValues, node)
  >>> res['a']
  Interval(low=-inf, high=inf)
docstr_tok: ["Set","default","range","value","for","globals","and","attributes",".",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","def","foo","(","a",",","b",")",":","pass","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","res","=","pm.gather","(","RangeValues",",","node",")",">",">",">","res","[","'","a","'","]","Interval","(","low=-inf",",","high=inf",")"]
code: def visit_FunctionDef(self, node):
      """Set default range value for globals and attributes.
  
      >>> import gast as ast
      >>> from pythran import passmanager, backend
      >>> node = ast.parse("def foo(a, b): pass")
      >>> pm = passmanager.PassManager("test")
      >>> res = pm.gather(RangeValues, node)
      >>> res['a']
      Interval(low=-inf, high=inf)
      """
      if node in self.result:
          return
  
      if self.use_omp:
          return
  
      self.result[node] = UNKNOWN_RANGE
  
      # Set this prematurely to avoid infinite callgraph loop
      prev_result = self.result.get(RangeValuesBase.ResultHolder, None)
  
      self.function_visitor(node)
  
      del self.result[node]
      self.add(node, self.result[RangeValuesBase.ResultHolder])
  
      if prev_result is not None:
          self.result[RangeValuesBase.ResultHolder] = prev_result
      else:
          del self.result[RangeValuesBase.ResultHolder]
  
imports: import gast
  from collections import defaultdict
  from functools import reduce
  from pythran.analyses import Aliases, CFG
  from pythran.intrinsic import Intrinsic
  from pythran.passmanager import ModuleAnalysis
  from pythran.interval import Interval, IntervalTuple, UNKNOWN_RANGE
  from pythran.tables import MODULES, attributes
label_desc: Use image node_id 16 for calling the RangeValuesBase obj's underlying member method code with example usage: obj.visit_FunctionDef(node) without return types