예제 #1
0
def codeNewVarStr(classes, lhsTypeSpec, varName, fieldDef, indent, objsRefed, actionOrField, xlator):
    assignValue=''
    [fieldType, fieldAttrs]           = xlator['convertType'](classes, lhsTypeSpec, 'var', '', xlator)
    [allocFieldType, allocFieldAttrs] = xlator['convertType'](classes, lhsTypeSpec, 'alloc', '', xlator)
    if(fieldDef['value']):
        [RHS, rhsTypeSpec]=codeExpr(fieldDef['value'][0], objsRefed, None, None, xlator)
        [leftMod, rightMod]=chooseVirtualRValOwner(lhsTypeSpec, rhsTypeSpec)
        RHS = leftMod+RHS+rightMod
        RHS = xlator['checkForTypeCastNeed'](lhsTypeSpec, rhsTypeSpec, RHS)
        assignValue = " = " + RHS

    else: # If no value was given:
        if fieldDef['paramList'] != None:
            # Code the constructor's arguments
            [CPL, paramTypeList] = codeParameterList(varName, fieldDef['paramList'], None, objsRefed, xlator)
            if len(paramTypeList)==1:
                if not isinstance(paramTypeList[0], dict):
                    print("\nPROBLEM: The return type of the parameter '", CPL, "' cannot be found and is needed. Try to define it.\n")
                    exit(1)

                theParam=paramTypeList[0]['fieldType']

                # TODO: Remove the 'True' and make this check object heirarchies or similar solution
                if True or not isinstance(theParam, str) and fieldType==theParam[0]:
                    assignValue = " = " + CPL   # Act like a copy constructor
        else:
            assignValue = ' = '+variableDefaultValueString(allocFieldType)
    if (assignValue == ""):
        varDeclareStr= "var " + varName + ": "+ fieldType + " = " + allocFieldType + '()'
    else:

        varDeclareStr= "var " + varName + ": "+ fieldType + assignValue

    return(varDeclareStr)
예제 #2
0
def codeNewVarStr(classes, typeSpec, varName, fieldDef, indent, objsRefed,
                  actionOrField, xlator):
    [fieldType, fieldAttrs] = xlator['convertType'](classes, typeSpec, 'var',
                                                    actionOrField, xlator)
    containerSpec = progSpec.getContainerSpec(typeSpec)
    if isinstance(containerSpec, basestring) and containerSpec == None:
        if (fieldDef['value']):
            [S2, rhsTypeSpec] = codeExpr(fieldDef['value'][0], objsRefed, None,
                                         xlator)
            RHS = S2
            assignValue = ' = ' + RHS
            #TODO: make test case
        else:
            assignValue = ''
    elif (fieldDef['value']):
        [S2, rhsTypeSpec] = codeExpr(fieldDef['value'][0], objsRefed, None,
                                     xlator)
        RHS = S2
        if varTypeIsValueType(fieldType):
            assignValue = ' = ' + RHS
        else:
            #TODO: make test case
            constructorExists = False  # TODO: Use some logic to know if there is a constructor, or create one.
            if (constructorExists):
                assignValue = ' = new ' + fieldType + '(' + RHS + ')'
            else:
                assignValue = ' = ' + RHS  #' = new ' + fieldType +'();\n'+ indent + varName+' = '+RHS
    else:  # If no value was given:
        #print "TYPE:", fieldType
        if fieldDef['paramList'] != None:  # call constructor
            # Code the constructor's arguments
            #TODO: make test case
            [CPL,
             paramTypeList] = codeParameterList(varName, fieldDef['paramList'],
                                                None, objsRefed, xlator)
            if len(paramTypeList) == 1:
                if not isinstance(paramTypeList[0], dict):
                    print "\nPROBLEM: The return type of the parameter '", CPL, "' cannot be found and is needed. Try to define it.\n"
                    exit(1)

                theParam = paramTypeList[0]['fieldType']
                if not isinstance(theParam,
                                  basestring) and fieldType == theParam[0]:
                    assignValue = " = " + CPL  # Act like a copy constructor
                elif 'codeConverter' in paramTypeList[0]:  #ktl 12.14.17
                    assignValue = " = " + CPL
                else:
                    assignValue = " = new " + fieldType + CPL
            else:
                assignValue = " = new " + fieldType + CPL
        elif varTypeIsValueType(fieldType):
            assignValue = ''
        else:
            assignValue = " = new " + fieldType + "()"
    varDeclareStr = fieldType + " " + varName + assignValue
    #print"codeNewVarStr: ",varDeclareStr
    return (varDeclareStr)
예제 #3
0
def codeVarFieldRHS_Str(fieldName,  convertedType, fieldType, fieldOwner, paramList, objsRefed, isAllocated, xlator):
    fieldValueText=""
    if paramList!=None:
        [CPL, paramTypeList] = codeParameterList(fieldName, paramList, None, objsRefed, xlator)
        fieldValueText=" = " + convertedType + CPL
    else:
        if fieldOwner=='me' or fieldOwner=='we':
            fieldValueText = ' = '+variableDefaultValueString(convertedType)
    return fieldValueText
예제 #4
0
def codeVarFieldRHS_Str(name, convertedType, fieldType, fieldOwner, paramList,
                        objsRefed, isAllocated, xlator):
    fieldValueText = ""
    if fieldOwner == 'we':
        convertedType = convertedType.replace('static ', '', 1)
    if (not varTypeIsValueType(convertedType) and
        (fieldOwner == 'me' or fieldOwner == 'we' or fieldOwner == 'const')):
        if fieldOwner == "const": convertedType = fieldType
        if paramList != None:
            #TODO: make test case
            [CPL, paramTypeList] = codeParameterList(name, paramList, None,
                                                     objsRefed, xlator)
            fieldValueText = " = new " + convertedType + CPL
        else:
            fieldValueText = " = new " + convertedType + "()"
    return fieldValueText