Beispiel #1
0
 public LdftnAnnotation(VMFunction function, VMFunctionSignature signature)
     : base(VMCalls.LDFTN, VMType.Pointer)
 {
     Function  = function;
     Signature = signature;
     Method    = null;
 }
        private MethodSignature VMSignatureToMethodSignature(DevirtualisationContext context, VMFunctionSignature signature)
        {
            var module = context.TargetModule;

            var returnType     = ((ITypeDescriptor)module.LookupMember(signature.ReturnToken)).ToTypeSignature();
            var parameterTypes = signature.ParameterTokens
                                 .Select(x => ((ITypeDescriptor)module.LookupMember(x)).ToTypeSignature());

            var hasThis = (signature.Flags & context.Constants.FlagInstance) != 0;

            return(new MethodSignature(
                       hasThis ? CallingConventionAttributes.HasThis : 0,
                       returnType,
                       parameterTypes.Skip(hasThis ? 1 : 0)));
        }
        private MethodSignature VMSignatureToMethodSignature(DevirtualisationContext context, VMFunctionSignature signature)
        {
            var returnType     = GetTypeSig(context, signature.ReturnToken);
            var parameterTypes = signature.ParameterTokens.Select(x => GetTypeSig(context, x));

            bool hasThis = (signature.Flags & context.Constants.FlagInstance) != 0;

            return(new MethodSignature(parameterTypes.Skip(hasThis ? 1 : 0), returnType)
            {
                HasThis = hasThis
            });
        }