예제 #1
0
def _decideIntegerSubscript(subscript):
    if subscript.isExpressionConstantRef():
        constant = subscript.getConstant()

        if isIndexConstant(constant):
            constant_value = int(constant)

            if abs(constant_value) < 2**31:
                return constant_value, True

    return None, False
예제 #2
0
def _decideIntegerSubscript(subscript):
    if subscript.isExpressionConstantRef():
        constant = subscript.getConstant()

        if isIndexConstant(constant):
            constant_value = int(constant)

            if abs(constant_value) < 2 ** 31:
                return constant_value, True

    return None, False
예제 #3
0
def generateAssignmentSubscriptCode(statement, emit, context):
    subscribed = statement.getSubscribed()
    subscript = statement.getSubscript()
    value = statement.getAssignSource()

    integer_subscript = False
    if subscript.isExpressionConstantRef():
        constant = subscript.getConstant()

        if isIndexConstant(constant):
            constant_value = int(constant)

            if abs(constant_value) < 2**31:
                integer_subscript = True

    value_name = context.allocateTempName("ass_subvalue")

    generateExpressionCode(to_name=value_name,
                           expression=value,
                           emit=emit,
                           context=context)

    subscribed_name = context.allocateTempName("ass_subscribed")
    generateExpressionCode(to_name=subscribed_name,
                           expression=subscribed,
                           emit=emit,
                           context=context)

    subscript_name = context.allocateTempName("ass_subscript")

    generateExpressionCode(to_name=subscript_name,
                           expression=subscript,
                           emit=emit,
                           context=context)

    old_source_ref = context.setCurrentSourceCodeReference(
        value.getSourceReference() if Options.isFullCompat(
        ) else statement.getSourceReference())

    if integer_subscript:
        getIntegerSubscriptAssignmentCode(subscribed_name=subscribed_name,
                                          subscript_name=subscript_name,
                                          subscript_value=constant_value,
                                          value_name=value_name,
                                          emit=emit,
                                          context=context)
    else:
        getSubscriptAssignmentCode(target_name=subscribed_name,
                                   subscript_name=subscript_name,
                                   value_name=value_name,
                                   emit=emit,
                                   context=context)
    context.setCurrentSourceCodeReference(old_source_ref)
예제 #4
0
 def isIndexConstant(self):
     return isIndexConstant(self.constant)
예제 #5
0
 def isIndexConstant(self):
     return isIndexConstant( self.constant )
예제 #6
0
def generateAssignmentSubscriptCode(statement, emit, context):
    subscribed      = statement.getSubscribed()
    subscript       = statement.getSubscript()
    value           = statement.getAssignSource()

    integer_subscript = False
    if subscript.isExpressionConstantRef():
        constant = subscript.getConstant()

        if isIndexConstant(constant):
            constant_value = int(constant)

            if abs(constant_value) < 2**31:
                integer_subscript = True

    value_name = context.allocateTempName("ass_subvalue")

    generateExpressionCode(
        to_name    = value_name,
        expression = value,
        emit       = emit,
        context    = context
    )

    subscribed_name = context.allocateTempName("ass_subscribed")
    generateExpressionCode(
        to_name    = subscribed_name,
        expression = subscribed,
        emit       = emit,
        context    = context
    )


    subscript_name = context.allocateTempName("ass_subscript")

    generateExpressionCode(
        to_name    = subscript_name,
        expression = subscript,
        emit       = emit,
        context    = context
    )

    old_source_ref = context.setCurrentSourceCodeReference(
        value.getSourceReference()
           if Options.isFullCompat() else
        statement.getSourceReference()
    )

    if integer_subscript:
        getIntegerSubscriptAssignmentCode(
            subscribed_name = subscribed_name,
            subscript_name  = subscript_name,
            subscript_value = constant_value,
            value_name      = value_name,
            emit            = emit,
            context         = context
        )
    else:
        getSubscriptAssignmentCode(
            target_name    = subscribed_name,
            subscript_name = subscript_name,
            value_name     = value_name,
            emit           = emit,
            context        = context
        )
    context.setCurrentSourceCodeReference(old_source_ref)