private bool CheckTypeExprent(Exprent exprent) { foreach (Exprent expr in exprent.GetAllExprents()) { if (!CheckTypeExprent(expr)) { return(false); } } if (exprent.type == Exprent.Exprent_Const) { ConstExprent constExpr = (ConstExprent)exprent; if (constExpr.GetConstType().typeFamily <= ICodeConstants.Type_Family_Integer) { // boolean or integer VarVersionPair pair = new VarVersionPair(constExpr.id, -1); if (!mapExprentMinTypes.ContainsKey(pair)) { Sharpen.Collections.Put(mapExprentMinTypes, pair, constExpr.GetConstType()); } } } CheckTypesResult result = exprent.CheckExprTypeBounds(); bool res = true; if (result != null) { foreach (CheckTypesResult.ExprentTypePair entry in result.GetLstMaxTypeExprents()) { if (entry.type.typeFamily != ICodeConstants.Type_Family_Object) { ChangeExprentType(entry.exprent, entry.type, 1); } } foreach (CheckTypesResult.ExprentTypePair entry in result.GetLstMinTypeExprents()) { res &= ChangeExprentType(entry.exprent, entry.type, 0); } } return(res); }