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