2 // Mono.ILASM.GlobalMethodRef
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 GlobalMethodRef
: IMethodRef
{
18 private ITypeRef ret_type
;
20 private ITypeRef
[] param
;
21 private PEAPI
.CallConv call_conv
;
23 private PEAPI
.Method peapi_method
;
24 private bool is_resolved
;
26 public GlobalMethodRef (ITypeRef ret_type
, PEAPI
.CallConv call_conv
,
27 string name
, ITypeRef
[] param
)
29 this.ret_type
= ret_type
;
30 this.call_conv
= call_conv
;
37 public PEAPI
.Method PeapiMethod
{
38 get { return peapi_method; }
41 public PEAPI
.CallConv CallConv
{
42 get { return call_conv; }
43 set { call_conv = value; }
46 public void Resolve (CodeGen code_gen
)
51 string sig
= MethodDef
.CreateSignature (name
, param
);
53 if ((call_conv
& PEAPI
.CallConv
.Vararg
) == 0) {
54 peapi_method
= code_gen
.ResolveMethod (sig
);
56 ArrayList opt_list
= new ArrayList ();
58 foreach (ITypeRef type
in param
) {
59 if (type
is SentinelTypeRef
) {
62 type
.Resolve (code_gen
);
63 opt_list
.Add (type
.PeapiType
);
66 peapi_method
= code_gen
.ResolveVarargMethod (sig
, code_gen
,
67 (PEAPI
.Type
[]) opt_list
.ToArray (typeof (PEAPI
.Type
)));
70 peapi_method
.AddCallConv (call_conv
);