class_docstr: Computes the Control Flow Graph of a function.
  
  The processing of a node yields a pair containing
  * the OUT nodes, to be linked with the IN nodes of the successor
  * the RAISE nodes, nodes that stop the control flow (exception/break/...)
class_docstr_tok: ["Computes","the","Control","Flow","Graph","of","a","function",".","The","processing","of","a","node","yields","a","pair","containing","*","the","OUT","nodes",",","to","be","linked","with","the","IN","nodes","of","the","successor","*","the","RAISE","nodes",",","nodes","that","stop","the","control","flow","(","exception\/break\/","...",")"]
docstr: OUT = true branch U false branch
  RAISES = true branch U false branch
docstr_tok: ["OUT","=","true","branch","U","false","branch","RAISES","=","true","branch","U","false","branch"]
code: def visit_If(self, node):
      """
      OUT = true branch U false branch
      RAISES = true branch U false branch
      """
      currs = (node,)
      raises = ()
  
      # true branch
      for n in node.body:
          self.result.add_node(n)
          for curr in currs:
              self.result.add_edge(curr, n)
          currs, nraises = self.visit(n)
          raises += nraises
  
      # false branch
      tcurrs = currs
      traises = raises
      currs = (node,)
      for n in node.orelse:
          self.result.add_node(n)
          for curr in currs:
              self.result.add_edge(curr, n)
          currs, nraises = self.visit(n)
          raises = traises + nraises
  
      if is_true_predicate(node.test):
          return tcurrs, raises
  
      return tcurrs + currs, raises
  
file_path: pythran/pythran/analyses/cfg.py
imports: from pythran.passmanager import FunctionAnalysis
  from pythran.utils import isnum
  from pythran.graph import DiGraph
  import gast
label_desc: Use image node_id 6 for calling the CFG obj's underlying member method code with example usage: obj.visit_If(node) and returns: unknown,  raises, tcurrs,  raises