2 // Mono.ILASM.MethodRef
5 // Jackson Harper (Jackson@LatitudeGeo.com)
7 // (C) 2003 Jackson Harper, All rights reserved
12 using System.Collections;
14 namespace Mono.ILASM {
16 public class MethodRef : BaseMethodRef {
18 public MethodRef (TypeRef owner, PEAPI.CallConv call_conv,
19 BaseTypeRef ret_type, string name, BaseTypeRef[] param, int gen_param_count)
20 : base (owner, call_conv, ret_type, name, param, gen_param_count)
24 public override void Resolve (CodeGen code_gen)
29 owner.Resolve (code_gen);
31 TypeDef owner_def = code_gen.TypeManager[owner.FullName];
32 if (owner_def == null)
33 throw new Exception (String.Format ("Reference to undefined class '{0}'", owner.FullName));
44 if ((call_conv & PEAPI.CallConv.Vararg) == 0) {
45 sig = MethodDef.CreateSignature (ret_type, name, param, gen_param_count);
46 peapi_method = owner_def.ResolveMethod (sig, code_gen);
48 sig = MethodDef.CreateVarargSignature (ret_type, name, param);
49 ArrayList opt_list = new ArrayList ();
51 foreach (BaseTypeRef type in param) {
52 if (type is SentinelTypeRef) {
55 type.Resolve (code_gen);
56 opt_list.Add (type.PeapiType);
59 peapi_method = owner_def.ResolveVarargMethod (sig, code_gen,
60 (PEAPI.Type[]) opt_list.ToArray (typeof (PEAPI.Type)));