def handleNodeInFunction(self, row): level = int(getCSVRowLevel(row)) if self.isInScope(level): self.handleNodeInScope(row, level) else: self.leaveScope(row, level)
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
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()
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)
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
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