Exemplo n.º 1
0
 def handleNodeInFunction(self, row):
     level = int(getCSVRowLevel(row))
     
     if self.isInScope(level):
         self.handleNodeInScope(row, level)
     else:
         self.leaveScope(row, level)
Exemplo n.º 2
0
 def enterScope(self, row):
     # TODO: simplify: just push nodeId and row
     currentNodeId = self.currentCFG.getCurrentNodeId()
     level = int(getCSVRowLevel(row))
     nodeType = getCSVRowType(row)
     self.scopeStack.append((currentNodeId, nodeType, level))
     self.currentLevel = level + 1
Exemplo n.º 3
0
 def _initCFG(self, row):
     self.currentCFG = CFG()
     self.currentCFG.addNode(BasicBlock(row))
     self.currentLevel = int(getCSVRowLevel(row)) + 1
     self.functionLevel = self.currentLevel - 1
     self.functionName = row[5]
     self.functionPos = row[1]
     self.resetStacks()    
Exemplo n.º 4
0
 def leaveSwitchScope(self, predicateNodeId):
     self.createAndConnectNode()
            
     labeledNodesCopy = self.currentCFG.labeledNodes[:]
     
     while labeledNodesCopy != []:
         (labelNodeId, labelRow) = labeledNodesCopy.pop()
         labelLevel = int(getCSVRowLevel(labelRow))
         if labelLevel <= self.getCurrentLevel():
             break
         conditionStr = self.getCondition(predicateNodeId)
         conditionStr += ' == ' + labelRow[4]
         self.currentCFG.addEdge(predicateNodeId, labelNodeId, conditionStr)
Exemplo n.º 5
0
    def handleNode(self, row):

        newNode = PythonASTTreeNode(row)

        # code below fails if level ever
        # increases by more than one at once
        level = int(getCSVRowLevel(row))
        if level > len(self.parentStack) - 1:
            # moved down one level, push previous node
            self.parentStack.append(self.previousNode)
        elif level < len(self.parentStack) - 1:
            while (level < len(self.parentStack) - 1):
                self.parentStack.pop()
        else:
            # stayed on a level, no need to adjust parentStack
            pass

        parentNode = self.parentStack[-1]
        parentNode.appendChild(newNode)
        newNode.parent = parentNode

        self.previousNode = newNode
Exemplo n.º 6
0
 def handleNode(self, row):
     
     newNode = PythonASTTreeNode(row) 
     
     # code below fails if level ever
     # increases by more than one at once
     level = int(getCSVRowLevel(row))
     if level > len(self.parentStack) - 1:
         # moved down one level, push previous node
         self.parentStack.append(self.previousNode)
     elif level < len(self.parentStack) -1:
         while(level < len(self.parentStack) - 1):
             self.parentStack.pop()
     else:
         # stayed on a level, no need to adjust parentStack
         pass
             
     parentNode = self.parentStack[-1]
     parentNode.appendChild(newNode)
     newNode.parent = parentNode
     
     self.previousNode = newNode