Esempio n. 1
0
        //------------------------------------------------------------
        // MethWithInst.Convert
        //
        /// <summary>
        /// If mpwi is MethWithInst, convert it to MethWithInst and return it.
        /// Otherwise, create a MethWithInst instance by mpwi and return it.
        /// </summary>
        /// <param name="mpwi"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        static internal MethWithInst Convert(MethPropWithInst mpwi)
        {
            MethWithInst mwi = mpwi as MethWithInst;

            if (mwi != null)
            {
                return(mwi);
            }
            return(new MethWithInst(mpwi));
        }
Esempio n. 2
0
 //------------------------------------------------------------
 // MethWithInst.Set (2)
 //
 /// <summary></summary>
 /// <param name="mwi"></param>
 //------------------------------------------------------------
 internal void Set(MethWithInst mwi)
 {
     if (mwi != null)
     {
         this.Set(mwi.MethSym, mwi.AggTypeSym, mwi.TypeArguments);
     }
     else
     {
         this.Set(null, null, null);
     }
 }
Esempio n. 3
0
        //------------------------------------------------------------
        // FUNCBREC.BindExtensionMethod
        //
        /// <summary></summary>
        /// <param name="callExpr"></param>
        /// <returns></returns>
        //------------------------------------------------------------
        internal EXPR BindExtensionMethod(EXPRCALL instanceCallExpr)
        {
            DebugUtil.Assert(
                instanceCallExpr != null &&
                instanceCallExpr.MethodWithInst != null &&
                instanceCallExpr.MethodWithInst.MethSym != null);

            MethWithInst instanceMwi     = instanceCallExpr.MethodWithInst;
            METHSYM      instanceMethSym = instanceMwi.MethSym;
            METHSYM      staticMethSym   = instanceMethSym.StaticExtensionMethodSym;

            if (staticMethSym == null)
            {
                return(instanceCallExpr);
            }

            MethWithInst staticMwi = new MethWithInst(
                staticMethSym,
                staticMethSym.ParentAggSym.GetThisType(),   // non-generic type.
                instanceMwi.TypeArguments);

            EXPR topArgExpr  = instanceCallExpr.ObjectExpr;
            EXPR lastArgExpr = topArgExpr;

            if (instanceCallExpr.ArgumentsExpr != null)
            {
                NewList(instanceCallExpr.ArgumentsExpr, ref topArgExpr, ref lastArgExpr);
            }

            EXPRCALL staticCallExpr = NewExpr(
                treeNode,
                EXPRKIND.CALL,
                instanceCallExpr.TypeSym) as EXPRCALL;

            staticCallExpr.MethodWithInst = staticMwi;
            staticCallExpr.ArgumentsExpr  = topArgExpr;
            staticCallExpr.ObjectExpr     = null;

            return(staticCallExpr);
        }