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