Example #1
0
        CallSite GetCallSiteAt(int token, GenericContext context)
        {
            StandAloneSigTable sasTable = m_reflectReader.TableReader.GetStandAloneSigTable();
            MethodSig          ms       = m_reflectReader.SigReader.GetStandAloneMethodSig(
                sasTable [(int)GetRid(token) - 1].Signature);
            CallSite cs = new CallSite(ms.HasThis, ms.ExplicitThis,
                                       ms.MethCallConv, m_reflectReader.GetMethodReturnType(ms, context));

            cs.MetadataToken = new MetadataToken(token);

            for (int i = 0; i < ms.ParamCount; i++)
            {
                Param p = ms.Parameters [i];
                cs.Parameters.Add(m_reflectReader.BuildParameterDefinition(
                                      string.Concat("A_", i),
                                      i, (ParameterAttributes)0,
                                      p, context));
            }

            MethodRefSig refSig = ms as MethodRefSig;

            if (refSig != null && refSig.Sentinel >= 0)
            {
                ReflectionReader.CreateSentinel(cs, refSig.Sentinel);
            }

            return(cs);
        }
Example #2
0
        CallSite GetCallSiteAt(int token, GenericContext context)
        {
            StandAloneSigTable sasTable = m_reflectReader.TableReader.GetStandAloneSigTable();
            MethodSig          ms       = m_reflectReader.SigReader.GetStandAloneMethodSig(
                sasTable [(int)GetRid(token) - 1].Signature);
            CallSite cs = new CallSite(ms.HasThis, ms.ExplicitThis,
                                       ms.MethCallConv, m_reflectReader.GetMethodReturnType(ms, context));

            cs.MetadataToken = new MetadataToken(token);

            for (int i = 0; i < ms.ParamCount; i++)
            {
                Param p = ms.Parameters [i];
                cs.Parameters.Add(m_reflectReader.BuildParameterDefinition(i, p, context));
            }

            ReflectionReader.CreateSentinelIfNeeded(cs, ms);

            return(cs);
        }