コード例 #1
0
 def handleNode(self, row):
     lineType = getCSVRowType(row)
     if self._isInFunction():
         self.handleNodeInFunction(row)
     else:
         if lineType == 'FUNCTION_DEF':
             self._initCFG(row)
コード例 #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
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
 def getType(self):
     return getCSVRowType(self.row)
コード例 #6
0
 def getType(self):
     return getCSVRowType(self.row)
コード例 #7
0
 def isLabelNode(self, row):
     return getCSVRowType(row) == labelNode
コード例 #8
0
 def isControlStatementNode(self, row):
     return getCSVRowType(row) in controlStatementNodes
コード例 #9
0
 def isScopeIncreaseNode(self, row):
     return getCSVRowType(row) in scopeIncreaseNodes