@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); result.addMinTypeExprent(index, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(index, VarType.VARTYPE_INT); return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); VarType typeLeft = left.getExprType(); VarType typeRight = right.getExprType(); if (typeLeft.typeFamily > typeRight.typeFamily) { result.addMinTypeExprent(right, VarType.getMinTypeInFamily(typeLeft.typeFamily)); } else if (typeLeft.typeFamily < typeRight.typeFamily) { result.addMinTypeExprent(left, typeRight); } else { result.addMinTypeExprent(left, VarType.getCommonSupertype(typeLeft, typeRight)); } return result; }
private boolean checkTypeExprent(Exprent exprent) { for (Exprent expr : exprent.getAllExprents()) { if (!checkTypeExprent(expr)) { return false; } } if (exprent.type == Exprent.EXPRENT_CONST) { ConstExprent constExpr = (ConstExprent)exprent; if (constExpr.getConstType().typeFamily <= CodeConstants.TYPE_FAMILY_INTEGER) { // boolean or integer VarVersionPair pair = new VarVersionPair(constExpr.id, -1); if (!mapExprentMinTypes.containsKey(pair)) { mapExprentMinTypes.put(pair, constExpr.getConstType()); } } } CheckTypesResult result = exprent.checkExprTypeBounds(); boolean res = true; if (result != null) { for (CheckTypesResult.ExprentTypePair entry : result.getLstMaxTypeExprents()) { if (entry.type.typeFamily != CodeConstants.TYPE_FAMILY_OBJECT) { changeExprentType(entry.exprent, entry.type, 1); } } for (CheckTypesResult.ExprentTypePair entry : result.getLstMinTypeExprents()) { res &= changeExprentType(entry.exprent, entry.type, 0); } } return res; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); VarType typeLeft = left.getExprType(); VarType typeRight = right.getExprType(); if (typeLeft.typeFamily > typeRight.typeFamily) { result.addMinTypeExprent(right, VarType.getMinTypeInFamily(typeLeft.typeFamily)); } else if (typeLeft.typeFamily < typeRight.typeFamily) { result.addMinTypeExprent(left, typeRight); } else { result.addMinTypeExprent(left, VarType.getCommonSupertype(typeLeft, typeRight)); } return result; }
private boolean checkTypeExprent(Exprent exprent) { for (Exprent expr : exprent.getAllExprents()) { if (!checkTypeExprent(expr)) { return false; } } if (exprent.type == Exprent.EXPRENT_CONST) { ConstExprent constExpr = (ConstExprent)exprent; if (constExpr.getConstType().typeFamily <= CodeConstants.TYPE_FAMILY_INTEGER) { // boolean or integer VarVersionPair pair = new VarVersionPair(constExpr.id, -1); if (!mapExprentMinTypes.containsKey(pair)) { mapExprentMinTypes.put(pair, constExpr.getConstType()); } } } CheckTypesResult result = exprent.checkExprTypeBounds(); boolean res = true; if (result != null) { for (CheckTypesResult.ExprentTypePair entry : result.getLstMaxTypeExprents()) { if (entry.type.typeFamily != CodeConstants.TYPE_FAMILY_OBJECT) { changeExprentType(entry.exprent, entry.type, 1); } } for (CheckTypesResult.ExprentTypePair entry : result.getLstMinTypeExprents()) { res &= changeExprentType(entry.exprent, entry.type, 0); } } return res; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); if (exitType == EXIT_RETURN && retType.type != CodeConstants.TYPE_VOID) { result.addMinTypeExprent(value, VarType.getMinTypeInFamily(retType.typeFamily)); result.addMaxTypeExprent(value, retType); } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); for (int i = 0; i < lstParameters.size(); i++) { Exprent parameter = lstParameters.get(i); VarType leftType = descriptor.params[i]; result.addMinTypeExprent(parameter, VarType.getMinTypeInFamily(leftType.typeFamily)); result.addMaxTypeExprent(parameter, leftType); } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); if (newType.arrayDim != 0) { for (Exprent dim : lstDims) { result.addMinTypeExprent(dim, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(dim, VarType.VARTYPE_INT); } if (newType.arrayDim == 1) { VarType leftType = newType.decreaseArrayDim(); for (Exprent element : lstArrayElements) { result.addMinTypeExprent(element, VarType.getMinTypeInFamily(leftType.typeFamily)); result.addMaxTypeExprent(element, leftType); } } } else if (constructor != null) { return constructor.checkExprTypeBounds(); } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); result.addMinTypeExprent(value, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(value, VarType.VARTYPE_INT); VarType valType = value.getExprType(); for (List<Exprent> lst : caseValues) { for (Exprent expr : lst) { if (expr != null) { VarType caseType = expr.getExprType(); if (!caseType.equals(valType)) { valType = VarType.getCommonSupertype(caseType, valType); result.addMinTypeExprent(value, valType); } } } } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); case FUNCTION_IIF: VarType supertype = getExprType(); result.addMinTypeExprent(param1, VarType.VARTYPE_BOOLEAN); result.addMinTypeExprent(param2, VarType.getMinTypeInFamily(supertype.typeFamily)); result.addMinTypeExprent(lstOperands.get(2), VarType.getMinTypeInFamily(supertype.typeFamily)); break; case FUNCTION_I2L: case FUNCTION_I2C: case FUNCTION_I2S: result.addMinTypeExprent(param1, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(param1, VarType.VARTYPE_INT); break; case FUNCTION_IMM: case FUNCTION_MMI: case FUNCTION_PPI: result.addMinTypeExprent(param1, implicitType); result.addMaxTypeExprent(param1, implicitType); break; case FUNCTION_ADD: case FUNCTION_GT: case FUNCTION_LE: result.addMinTypeExprent(param2, VarType.VARTYPE_BYTECHAR); case FUNCTION_BIT_NOT:
public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); result.addMinTypeExprent(index, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(index, VarType.VARTYPE_INT); return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); if (exitType == EXIT_RETURN && retType.type != CodeConstants.TYPE_VOID) { result.addMinTypeExprent(value, VarType.getMinTypeInFamily(retType.typeFamily)); result.addMaxTypeExprent(value, retType); } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); for (int i = 0; i < lstParameters.size(); i++) { Exprent parameter = lstParameters.get(i); VarType leftType = descriptor.params[i]; result.addMinTypeExprent(parameter, VarType.getMinTypeInFamily(leftType.typeFamily)); result.addMaxTypeExprent(parameter, leftType); } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); if (newType.arrayDim != 0) { for (Exprent dim : lstDims) { result.addMinTypeExprent(dim, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(dim, VarType.VARTYPE_INT); } if (newType.arrayDim == 1) { VarType leftType = newType.decreaseArrayDim(); for (Exprent element : lstArrayElements) { result.addMinTypeExprent(element, VarType.getMinTypeInFamily(leftType.typeFamily)); result.addMaxTypeExprent(element, leftType); } } } else { if (constructor != null) { return constructor.checkExprTypeBounds(); } } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); result.addMinTypeExprent(value, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(value, VarType.VARTYPE_INT); VarType valType = value.getExprType(); for (List<Exprent> lst : caseValues) { for (Exprent expr : lst) { if (expr != null) { VarType caseType = expr.getExprType(); if (!caseType.equals(valType)) { valType = VarType.getCommonSupertype(caseType, valType); result.addMinTypeExprent(value, valType); } } } } return result; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); result.addMinTypeExprent(param1, VarType.VARTYPE_BOOLEAN); result.addMinTypeExprent(param2, VarType.getMinTypeInFamily(supertype.typeFamily)); result.addMinTypeExprent(lstOperands.get(2), VarType.getMinTypeInFamily(supertype.typeFamily)); break; case FUNCTION_I2L: case FUNCTION_I2C: case FUNCTION_I2S: result.addMinTypeExprent(param1, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(param1, VarType.VARTYPE_INT); break; case FUNCTION_IMM: case FUNCTION_MMI: case FUNCTION_PPI: result.addMinTypeExprent(param1, implicitType); result.addMaxTypeExprent(param1, implicitType); break; case FUNCTION_ADD: case FUNCTION_GT: case FUNCTION_LE: result.addMinTypeExprent(param2, VarType.VARTYPE_BYTECHAR); case FUNCTION_BIT_NOT: result.addMinTypeExprent(param1, VarType.VARTYPE_BYTECHAR);