Пример #1
0
    def traverseAssignNode(self, generators):
        if (self.assignNode == None):
            sys.exit(
                "Attempting to run traverseAssignNode in VarInfo when self.assignNode is still None."
            )

        self.hasPairings = False
        self.protectsM = False

        if (self.assignNode.right.type == ops.LIST):
            self.isList = True
            self.type = ops.LIST
            onlyListElementsTypeDecl = self.isOnlyListElementsTypeDecl(
                self.assignNode.right)
            if (onlyListElementsTypeDecl != None):
                self.listElementsType = onlyListElementsTypeDecl
            else:
                addListNodesToList(self.assignNode.right, self.listNodesList)
        elif (self.assignNode.right.type == ops.SYMMAP):
            self.isSymmap = True
            self.type = ops.SYMMAP
            addListNodesToList(self.assignNode.right, self.listNodesList)
        elif ((self.assignNode.right.type == ops.ON)
              and (self.assignNode.right.left.type == ops.PROD)):
            dotProdObj = DotProd()
            dotProdObj.setDotProdObj(self.assignNode.right, self.lineNo,
                                     self.funcName)
            self.dotProdObj = dotProdObj
        elif (self.assignNode.right.type == ops.EXPAND):
            self.isExpandNode = True
        elif (self.assignNode.right.type == ops.RANDOM):
            self.isBaseElement = True
            self.assignBaseElemsOnly = self.assignNode.left
            self.assignBaseElemsOnlyThisFunc = self.assignNode.left
        elif (self.assignNode.right.type == ops.HASH):
            self.isBaseElement = True
            self.assignBaseElemsOnly = self.assignNode.left
            self.assignBaseElemsOnlyThisFunc = self.assignNode.left
        elif (self.assignNode.right.type == ops.NOP):
            self.isNOP = True
# JAA: activates the awesome symbolic executor!
#if ( (self.assignBaseElemsOnly == None) or (self.beenSet == :
        if (self.isBaseElement == False):
            assignNodeRightDeepCopy = copy.deepcopy(self.assignNode.right)
            newAssignBaseElemsOnlyNode = self.traverseAssignBaseElemsOnlyRecursive(
                assignNodeRightDeepCopy, generators)
            self.assignBaseElemsOnly = newAssignBaseElemsOnlyNode

            assignNodeRightDeepCopyThisFunc = copy.deepcopy(
                self.assignNode.right)
            newAssignBaseElemsOnlyNodeThisFunc = self.traverseAssignBaseElemsOnlyThisFuncRecursive(
                assignNodeRightDeepCopyThisFunc, generators)
            self.assignBaseElemsOnlyThisFunc = newAssignBaseElemsOnlyNodeThisFunc

        self.traverseAssignNodeRecursive(self.assignNode.right, False)

        if (M in self.varDeps):
            self.protectsM = True
Пример #2
0
    def traverseAssignNode(self, generators):
        if self.assignNode == None:
            sys.exit("Attempting to run traverseAssignNode in VarInfo when self.assignNode is still None.")

        self.hasPairings = False
        self.protectsM = False

        if self.assignNode.right.type == ops.LIST:
            self.isList = True
            self.type = ops.LIST
            onlyListElementsTypeDecl = self.isOnlyListElementsTypeDecl(self.assignNode.right)
            if onlyListElementsTypeDecl != None:
                self.listElementsType = onlyListElementsTypeDecl
            else:
                addListNodesToList(self.assignNode.right, self.listNodesList)
        elif self.assignNode.right.type == ops.SYMMAP:
            self.isSymmap = True
            self.type = ops.SYMMAP
            addListNodesToList(self.assignNode.right, self.listNodesList)
        elif (self.assignNode.right.type == ops.ON) and (self.assignNode.right.left.type == ops.PROD):
            dotProdObj = DotProd()
            dotProdObj.setDotProdObj(self.assignNode.right, self.lineNo, self.funcName)
            self.dotProdObj = dotProdObj
        elif self.assignNode.right.type == ops.EXPAND:
            self.isExpandNode = True
        elif self.assignNode.right.type == ops.RANDOM:
            self.isBaseElement = True
            self.assignBaseElemsOnly = self.assignNode.left
            self.assignBaseElemsOnlyThisFunc = self.assignNode.left
        elif self.assignNode.right.type == ops.HASH:
            self.isBaseElement = True
            self.assignBaseElemsOnly = self.assignNode.left
            self.assignBaseElemsOnlyThisFunc = self.assignNode.left
        elif self.assignNode.right.type == ops.NOP:
            self.isNOP = True
        # JAA: activates the awesome symbolic executor!
        # if ( (self.assignBaseElemsOnly == None) or (self.beenSet == :
        if self.isBaseElement == False:
            assignNodeRightDeepCopy = copy.deepcopy(self.assignNode.right)
            newAssignBaseElemsOnlyNode = self.traverseAssignBaseElemsOnlyRecursive(assignNodeRightDeepCopy, generators)
            self.assignBaseElemsOnly = newAssignBaseElemsOnlyNode

            assignNodeRightDeepCopyThisFunc = copy.deepcopy(self.assignNode.right)
            newAssignBaseElemsOnlyNodeThisFunc = self.traverseAssignBaseElemsOnlyThisFuncRecursive(
                assignNodeRightDeepCopyThisFunc, generators
            )
            self.assignBaseElemsOnlyThisFunc = newAssignBaseElemsOnlyNodeThisFunc

        self.traverseAssignNodeRecursive(self.assignNode.right, False)

        if M in self.varDeps:
            self.protectsM = True
Пример #3
0
    def traverseAssignNode(self):
        if (self.assignNode == None):
            sys.exit(
                "Attempting to run traverseAssignNode in VarInfo when self.assignNode is still None."
            )

        self.hasPairings = False
        self.protectsM = False

        if (self.assignNode.right.type == ops.LIST):
            self.isList = True
            self.type = ops.LIST
            onlyListElementsTypeDecl = self.isOnlyListElementsTypeDecl(
                self.assignNode.right)
            if (onlyListElementsTypeDecl != None):
                self.listElementsType = onlyListElementsTypeDecl
            else:
                addListNodesToList(self.assignNode.right, self.listNodesList)
        elif (self.assignNode.right.type == ops.SYMMAP):
            self.isSymmap = True
            self.type = ops.SYMMAP
            addListNodesToList(self.assignNode.right, self.listNodesList)
        elif ((self.assignNode.right.type == ops.ON)
              and (self.assignNode.right.left.type == ops.PROD)):
            dotProdObj = DotProd()
            dotProdObj.setDotProdObj(self.assignNode.right, self.lineNo,
                                     self.funcName)
            self.dotProdObj = dotProdObj
        elif (self.assignNode.right.type == ops.EXPAND):
            self.isExpandNode = True
        elif (self.assignNode.right.type == ops.RANDOM):
            self.isBaseElement = True
            self.assignBaseElemsOnly = self.assignNode.left

        if (self.assignBaseElemsOnly == None):
            assignNodeRightDeepCopy = copy.deepcopy(self.assignNode.right)
            #newAssignBaseElemsOnlyNode = self.traverseAssignBaseElemsOnlyRecursive(assignNodeRightDeepCopy)
            #self.assignBaseElemsOnly = newAssignBaseElemsOnlyNode

        self.traverseAssignNodeRecursive(self.assignNode.right, False)

        if (M in self.varDeps):
            self.protectsM = True
Пример #4
0
    def traverseAssignNode(self):
        if (self.assignNode == None):
            sys.exit("Attempting to run traverseAssignNode in VarInfo when self.assignNode is still None.")

        self.hasPairings = False
        self.protectsM = False

        if (self.assignNode.right.type == ops.LIST):
            self.isList = True
            self.type = ops.LIST
            addListNodesToList(self.assignNode.right, self.listNodesList)
        elif ( (self.assignNode.right.type == ops.ON) and (self.assignNode.right.left.type == ops.PROD) ):
            dotProdObj = DotProd()
            dotProdObj.setDotProdObj(self.assignNode.right, self.lineNo, self.funcName)
            self.dotProdObj = dotProdObj

        self.traverseAssignNodeRecursive(self.assignNode.right)

        if (M in self.varDeps):
            self.protectsM = True
Пример #5
0
    def traverseAssignNode(self):
        if (self.assignNode == None):
            sys.exit("Attempting to run traverseAssignNode in VarInfo when self.assignNode is still None.")

        self.hasPairings = False
        self.protectsM = False

        if (self.assignNode.right.type == ops.LIST):
            self.isList = True
            self.type = ops.LIST
            onlyListElementsTypeDecl = self.isOnlyListElementsTypeDecl(self.assignNode.right)
            if (onlyListElementsTypeDecl != None):
                self.listElementsType = onlyListElementsTypeDecl
            else:
                addListNodesToList(self.assignNode.right, self.listNodesList)
        elif (self.assignNode.right.type == ops.SYMMAP):
            self.isSymmap = True
            self.type = ops.SYMMAP
            addListNodesToList(self.assignNode.right, self.listNodesList)
        elif ( (self.assignNode.right.type == ops.ON) and (self.assignNode.right.left.type == ops.PROD) ):
            dotProdObj = DotProd()
            dotProdObj.setDotProdObj(self.assignNode.right, self.lineNo, self.funcName)
            self.dotProdObj = dotProdObj
        elif (self.assignNode.right.type == ops.EXPAND):
            self.isExpandNode = True
        elif (self.assignNode.right.type == ops.RANDOM):
            self.isBaseElement = True
            self.assignBaseElemsOnly = self.assignNode.left

        if (self.assignBaseElemsOnly == None):
            assignNodeRightDeepCopy = copy.deepcopy(self.assignNode.right)
            #newAssignBaseElemsOnlyNode = self.traverseAssignBaseElemsOnlyRecursive(assignNodeRightDeepCopy)
            #self.assignBaseElemsOnly = newAssignBaseElemsOnlyNode

        self.traverseAssignNodeRecursive(self.assignNode.right, False)

        if (M in self.varDeps):
            self.protectsM = True
Пример #6
0
    def traverseAssignNode(self):
        if (self.assignNode == None):
            sys.exit(
                "Attempting to run traverseAssignNode in VarInfo when self.assignNode is still None."
            )

        self.hasPairings = False
        self.protectsM = False

        if (self.assignNode.right.type == ops.LIST):
            self.isList = True
            self.type = ops.LIST
            addListNodesToList(self.assignNode.right, self.listNodesList)
        elif ((self.assignNode.right.type == ops.ON)
              and (self.assignNode.right.left.type == ops.PROD)):
            dotProdObj = DotProd()
            dotProdObj.setDotProdObj(self.assignNode.right, self.lineNo,
                                     self.funcName)
            self.dotProdObj = dotProdObj

        self.traverseAssignNodeRecursive(self.assignNode.right)

        if (M in self.varDeps):
            self.protectsM = True