2 // Mono.ILASM.GenericArguments
5 // Ankit Jain <jankit@novell.com>
7 // Copyright 2005 Novell, Inc (http://www.novell.com)
11 using System
.Collections
;
14 namespace Mono
.ILASM
{
16 public class GenericArguments
{
19 BaseTypeRef
[] type_arr
;
21 PEAPI
.Type
[] p_type_list
;
23 public GenericArguments ()
33 get { return type_list.Count; }
36 public void Add (BaseTypeRef type
)
39 throw new InternalErrorException ();
41 if (type_list
== null)
42 type_list
= new ArrayList ();
48 public BaseTypeRef
[] ToArray ()
50 if (type_list
== null)
53 type_arr
= (BaseTypeRef
[]) type_list
.ToArray (typeof (BaseTypeRef
));
58 public PEAPI
.Type
[] Resolve (CodeGen code_gen
)
64 p_type_list
= new PEAPI
.Type
[type_list
.Count
];
65 foreach (BaseTypeRef type
in type_list
) {
66 type
.Resolve (code_gen
);
67 p_type_list
[i
++] = type
.PeapiType
;
74 public void Resolve (GenericParameters type_gen_params
, GenericParameters method_gen_params
)
76 foreach (BaseTypeRef type
in type_list
) {
77 BaseGenericTypeRef gtr
= type
as BaseGenericTypeRef
;
79 gtr
.Resolve (type_gen_params
, method_gen_params
);
81 /* Reset, might have changed (think GenericParamRef) */
85 private void MakeString ()
87 //Build full_name (foo < , >)
88 StringBuilder sb
= new StringBuilder ();
90 foreach (BaseTypeRef tr
in type_list
)
91 sb
.AppendFormat ("{0}, ", tr
.FullName
);
92 //Remove the extra ', ' at the end
95 type_str
= sb
.ToString ();
98 public override string ToString ()
100 if (type_str
== null)