Esempio n. 1
0
        public TypeRef ToCodePointer(RootEnvironment rootEnv)
        {
            var methEnv         = EnterMethod(rootEnv);
            var valueParameters = methEnv.SubstituteTypes(ValueParameters);
            var result          = Result == null ? null : methEnv.SubstituteType(Result);

            return(TypeRef.CodePointerFrom(rootEnv.Global, valueParameters, result));
        }
Esempio n. 2
0
 private void Fixup(Global global)
 {
     if (Parameters.Count > 0 && !IsStatic)
     {
         var paramAssemblyDef = default(AssemblyDef);
         var paramTypeDef     = default(TypeDef);
         if (Parameters[0].PrimTryResolve(global, out paramAssemblyDef, out paramTypeDef))
         {
             var s = paramTypeDef.Style;
             if (s is ValueTypeStyle)
             {
                 var newValueParameters = new Seq <TypeRef>(Parameters.Count);
                 newValueParameters.Add(global.ManagedPointerTypeConstructorRef.ApplyTo(Parameters[0]));
                 for (var i = 1; i < Parameters.Count; i++)
                 {
                     newValueParameters.Add(Parameters[i]);
                 }
                 Parameters = newValueParameters;
             }
             else if (Parameters.Count == 3 && Name.Equals(".ctor", StringComparison.Ordinal) &&
                      s is DelegateTypeStyle)
             {
                 var delTypeDef         = (DelegateTypeDef)paramTypeDef;
                 var newValueParameters = new Seq <TypeRef>(Parameters.Count);
                 for (var i = 0; i < 2; i++)
                 {
                     newValueParameters.Add(Parameters[i]);
                 }
                 newValueParameters.Add
                     (TypeRef.CodePointerFrom
                         (global,
                         delTypeDef.ValueParameters.Select(p => p.Type).ToSeq(),
                         delTypeDef.Result == null ? null : delTypeDef.Result.Type));
                 Parameters = newValueParameters;
             }
         }
     }
 }
Esempio n. 3
0
 public override TypeRef ToCodePointer(Global global)
 {
     return(TypeRef.CodePointerFrom(global, Parameters, Result));
 }