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)
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)
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
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