def handleNode(self, row): lineType = getCSVRowType(row) if self._isInFunction(): self.handleNodeInFunction(row) else: if lineType == 'FUNCTION_DEF': self._initCFG(row)
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 handleControlStatement(self, row, level): currentNodeId = self.currentCFG.getCurrentNodeId() rowType = getCSVRowType(row) if rowType == returnNode: self.returnStack.append(currentNodeId) elif rowType in breakOrContinue: self.breakContinueStack.append((currentNodeId, rowType, level)) elif rowType == gotoNode: self.gotoList.append((currentNodeId, row)) self.currentCFG.appendToLatestNode(row)
def handleScopeIncreaseNode(self, row, level): currentNodeId = self.currentCFG.getCurrentNodeId() nodeType = getCSVRowType(row) currentNode = self.currentCFG.getNodeById(currentNodeId) if nodeType == elseNode: self.handleElseNode(currentNodeId, row) return if currentNode.rows != [] and nodeType != conditionNode: self.createAndConnectNode(row) else: self.currentCFG.appendToLatestNode(row) self.enterScope(row)
def getType(self): return getCSVRowType(self.row)
def isLabelNode(self, row): return getCSVRowType(row) == labelNode
def isControlStatementNode(self, row): return getCSVRowType(row) in controlStatementNodes
def isScopeIncreaseNode(self, row): return getCSVRowType(row) in scopeIncreaseNodes