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)); }
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; } } } }
public override TypeRef ToCodePointer(Global global) { return(TypeRef.CodePointerFrom(global, Parameters, Result)); }