Exemplo n.º 1
0
    def computeExpressionIter1(self, iter_node, trace_collection):
        constant_type = type(self.constant)

        if constant_type in (list, set, frozenset, dict):
            result = makeConstantRefNode(
                constant=tuple(self.constant),
                user_provided=self.user_provided,
                source_ref=self.getSourceReference(),
            )

            self.parent.replaceChild(self, result)
            self.finalize()

            return (
                iter_node,
                "new_constant",
                """\
Iteration over constant %s changed to tuple."""
                % constant_type.__name__,
            )

        if not isIterableConstant(self.constant):
            # An exception may be raised.
            trace_collection.onExceptionRaiseExit(TypeError)

            return getComputationResult(
                node=iter_node,
                computation=lambda: iter_node.simulator(self.constant),
                description="Iteration of non-iterable constant.",
            )

        return iter_node, None, None
Exemplo n.º 2
0
    def computeExpressionIter1(self, iter_node, trace_collection):
        constant_type = type(self.constant)

        if constant_type in (list, set, frozenset, dict):
            result = makeConstantRefNode(
                constant=tuple(self.constant),
                user_provided=self.user_provided,
                source_ref=self.getSourceReference(),
            )

            self.parent.replaceChild(self, result)
            self.finalize()

            return (
                iter_node,
                "new_constant",
                """\
Iteration over constant %s changed to tuple."""
                % constant_type.__name__,
            )

        if not isIterableConstant(self.constant):
            # An exception may be raised.
            trace_collection.onExceptionRaiseExit(TypeError)

            return getComputationResult(
                node=iter_node,
                computation=lambda: iter_node.simulator(self.constant),
                description="Iteration of non-iterable constant.",
            )

        return iter_node, None, None
Exemplo n.º 3
0
    def computeExpressionIter1(self, iter_node, trace_collection):
        if type(self.constant) in (list, set, frozenset, dict):
            result = makeConstantRefNode(constant=tuple(self.constant),
                                         user_provided=self.user_provided,
                                         source_ref=self.getSourceReference())

            self.replaceWith(result)

            return (iter_node, "new_constant", """\
Iteration over constant %s changed to tuple.""" % type(self.constant).__name__)

        if not isIterableConstant(self.constant):
            # Any exception may be raised.
            trace_collection.onExceptionRaiseExit(TypeError)

        return iter_node, None, None
Exemplo n.º 4
0
    def computeExpressionIter1(self, iter_node, constraint_collection):
        if type(self.constant) in (list, set, frozenset, dict):
            result = ExpressionConstantRef(
                constant      = tuple(self.constant),
                user_provided = self.user_provided,
                source_ref    = self.getSourceReference()
            )

            self.replaceWith(result)

            return (
                iter_node,
                "new_constant", """\
Iteration over constant %s changed to tuple.""" % type(self.constant).__name__
            )

        if not isIterableConstant(self.constant):
            # Any exception may be raised.
            constraint_collection.onExceptionRaiseExit(TypeError)

        return iter_node, None, None
Exemplo n.º 5
0
 def isIterableConstant(self):
     return isIterableConstant(self.constant)
Exemplo n.º 6
0
 def getIterationLength(self):
     if isIterableConstant(self.constant):
         return getConstantIterationLength(self.constant)
     else:
         return None
Exemplo n.º 7
0
 def isKnownToBeIterable(self, count):
     if isIterableConstant(self.constant):
         return count is None or \
                getConstantIterationLength(self.constant) == count
     else:
         return False
Exemplo n.º 8
0
 def isIterableConstant(self):
     return isIterableConstant( self.constant )
Exemplo n.º 9
0
 def getIterationLength(self):
     if isIterableConstant( self.constant ):
         return getConstantIterationLength( self.constant )
     else:
         return None
Exemplo n.º 10
0
 def isKnownToBeIterable(self, count):
     if isIterableConstant( self.constant ):
         return count is None or getConstantIterationLength( self.constant ) == count
     else:
         return False
Exemplo n.º 11
0
 def getIterationLength(self, constraint_collection):
     if isIterableConstant(self.constant):
         return getConstantIterationLength(self.constant)
     else:
         return None