示例#1
0
def codeIsEQ(item, objsRefed, returnType, xlator):
    #print '      IsEq item:', item
    [S, retTypeSpec] = codeComparison(item[0], objsRefed, returnType, xlator)
    if len(item) > 1 and len(item[1]) > 0:
        if len(item[1]) > 1:
            print "Error: Chained == or !=.\n"
            exit(1)
        if (isinstance(retTypeSpec, int)):
            cdlog(logLvl(), "Invalid item in ==: {}".format(item[0]))
        leftOwner = owner = progSpec.getTypeSpecOwner(retTypeSpec)
        for i in item[1]:
            #print '      IsEq ', i
            if (i[0] == '=='): op = ' == '
            elif (i[0] == '!='): op = ' != '
            elif (i[0] == '==='): op = ' == '
            else:
                print "ERROR: '==' or '!=' or '===' expected."
                exit(2)
            [S2, retType2] = codeComparison(i[1], objsRefed, returnType,
                                            xlator)
            rightOwner = progSpec.getTypeSpecOwner(retType2)
            if not isinstance(retTypeSpec, basestring) and isinstance(
                    retTypeSpec['fieldType'], basestring) and isinstance(
                        retType2, basestring):
                if retTypeSpec[
                        'fieldType'] == "char" and retType2 == "string" and S2[
                            0] == '"':
                    S2 = "'" + S2[1:-1] + "'"
            if i[0] == '===':
                S = S + " == " + S2
            else:
                S += op + S2
            retTypeSpec = 'bool'
    return [S, retTypeSpec]
示例#2
0
def chooseVirtualRValOwner(LVAL, RVAL):
    # Returns left and right text decorations for RHS of function arguments, return values, etc.
    if RVAL==0 or RVAL==None or isinstance(RVAL, str): return ['',''] # This happens e.g., string.size() # TODO: fix this.
    if LVAL==0 or LVAL==None or isinstance(LVAL, str): return ['', '']
    LeftOwner =progSpec.getTypeSpecOwner(LVAL)
    RightOwner=progSpec.getTypeSpecOwner(RVAL)
    if LeftOwner == RightOwner: return ["", ""]
    if LeftOwner!='itr' and RightOwner=='itr': return ["", ".value"]
    if LeftOwner=='me' and progSpec.typeIsPointer(RVAL): return ['', '']
    if progSpec.typeIsPointer(LVAL) and RightOwner=='me': return ['', '']
    #if LeftOwner=='their' and (RightOwner=='our' or RightOwner=='my'): return ['','.get()']
    return ['','']
示例#3
0
def getTheDerefPtrMods(itemTypeSpec):
    if itemTypeSpec!=None and isinstance(itemTypeSpec, dict) and 'owner' in itemTypeSpec:
        if progSpec.typeIsPointer(itemTypeSpec):
            owner=progSpec.getTypeSpecOwner(itemTypeSpec)
            if owner=='itr':
                containerType = itemTypeSpec['arraySpec'][2]
                if containerType =='map' or containerType == 'multimap':
                    return ['', '->value', False]
            return ['', '', False]
    return ['', '', False]
示例#4
0
def determinePtrConfigForAssignments(LVAL, RVAL, assignTag, codeStr):
    #TODO: make test case
    # Returns left and right text decorations for both LHS and RHS of assignment
    if RVAL==0 or RVAL==None or isinstance(RVAL, str): return ['','',  '',''] # This happens e.g., string.size() # TODO: fix this.
    if LVAL==0 or LVAL==None or isinstance(LVAL, str): return ['','',  '','']
    LeftOwner =progSpec.getTypeSpecOwner(LVAL)
    RightOwner=progSpec.getTypeSpecOwner(RVAL)
    if progSpec.typeIsPointer(LVAL) and progSpec.typeIsPointer(RVAL):
        if assignTag=='deep' :return ['','',  '','']
        else: return ['','',  '', '']
    if LeftOwner == RightOwner: return ['','',  '','']
    if LeftOwner=='me' and progSpec.typeIsPointer(RVAL):
        [leftMod, rightMod] = getTheDerefPtrMods(RVAL)
        return ['','',  leftMod, rightMod]  # ['', '', "(*", ")"]
    if progSpec.typeIsPointer(LVAL) and RightOwner=='me':
        if assignTag=='deep' :return ['','',  '', '']
        else: return ['','',  "", '']

    #if LeftOwner=='their' and (RightOwner=='our' or RightOwner=='my'): return ['','', '','.get()']

    return ['','',  '','']
示例#5
0
def codeVarField_Str(intermediateType, fieldAttrs, typeSpec, fieldName, fieldValueText, className, tags, indent):
    #TODO: make test case
    fieldOwner=progSpec.getTypeSpecOwner(typeSpec)
    if fieldOwner=='we':
        defn = indent + "public static var "+ indent + fieldName + ": " +  intermediateType  +  fieldValueText + '\n'
        decl = ''
    else:
        fieldTypeMod=''
    #    if progSpec.typeIsPointer(typeSpec):
    #        fieldTypeMod += '?CUSTARD'    # Make pointer field variables optionals
        defn = indent + "var "+ fieldName + ": " +  intermediateType + fieldTypeMod + fieldValueText + '\n'
        decl = ''
    return [defn, decl]
示例#6
0
def codeIsEQ(item, objsRefed, returnType, expectedTypeSpec, xlator):
    #print('      IsEq item:', item)
    [S, retTypeSpec]=codeComparison(item[0], objsRefed, returnType, expectedTypeSpec, xlator)
    if len(item) > 1 and len(item[1])>0:
        if len(item[1])>1: print("Error: Chained == or !=.\n"); exit(1);
        if (isinstance(retTypeSpec, int)): cdlog(logLvl(), "Invalid item in ==: {}".format(item[0]))
        leftOwner=owner=progSpec.getTypeSpecOwner(retTypeSpec)
        [S_derefd, isDerefd] = derefPtr(S, retTypeSpec)
        for i in item[1]:
            #print '      IsEq ', i
            if   (i[0] == '=='): op=' == '
            elif (i[0] == '!='): op=' != '
            elif (i[0] == '==='): op=' == '
            else: print("ERROR: '==' or '!=' or '===' expected."); exit(2)
            [S2, retTypeSpec] = codeComparison(i[1], objsRefed, returnType, expectedTypeSpec, xlator)
            rightOwner=progSpec.getTypeSpecOwner(retTypeSpec)
            if not( leftOwner=='itr' and rightOwner=='itr') and i[0] != '===':
                if (S2!='nil' ): S=S_derefd
                elif S[-1]=='!': S=S[:-1]   # Todo: Better detect this
                [S2, isDerefd]=derefPtr(S2, retTypeSpec)
            S+= op+S2
            retTypeSpec='bool'
    return [S, retTypeSpec]
示例#7
0
def codeVarField_Str(convertedType, innerType, typeSpec, fieldName,
                     fieldValueText, className, tags, indent):
    # TODO: make test case
    S = ""
    fieldOwner = progSpec.getTypeSpecOwner(typeSpec)
    Platform = progSpec.fetchTagValue(tags, 'Platform')
    # TODO: make next line so it is not hard coded
    if (Platform == 'Android' and
        (convertedType == "CanvasView"
         or convertedType == "FragmentTransaction"
         or convertedType == "FragmentManager" or convertedType == "Menu"
         or convertedType == "static GLOBAL" or convertedType == "Toolbar"
         or convertedType == "NestedScrollView" or convertedType == "SubMenu"
         or convertedType == "APP" or convertedType == "AssetManager"
         or convertedType == "ScrollView" or convertedType == "LinearLayout"
         or convertedType == "GUI" or convertedType == "HorizontalScrollView"
         or convertedType == "widget" or convertedType == "GLOBAL")):
        #print "                                        ConvertedType: ", convertedType, "     FieldName: ", fieldName
        S += indent + "public " + convertedType + ' ' + fieldName + ';\n'
    else:
        S += indent + "public " + convertedType + ' ' + fieldName + fieldValueText + ';\n'
    return [S, '']