Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/ilasm/codegen/GenericArguments.cs')
-rw-r--r--mcs/ilasm/codegen/GenericArguments.cs107
1 files changed, 107 insertions, 0 deletions
diff --git a/mcs/ilasm/codegen/GenericArguments.cs b/mcs/ilasm/codegen/GenericArguments.cs
new file mode 100644
index 00000000000..afefa395848
--- /dev/null
+++ b/mcs/ilasm/codegen/GenericArguments.cs
@@ -0,0 +1,107 @@
+//
+// Mono.ILASM.GenericArguments
+//
+// Author(s):
+// Ankit Jain <jankit@novell.com>
+//
+// Copyright 2005 Novell, Inc (http://www.novell.com)
+//
+
+using System;
+using System.Collections;
+using System.Text;
+
+namespace Mono.ILASM {
+
+ public class GenericArguments {
+ ArrayList type_list;
+ string type_str;
+ BaseTypeRef [] type_arr;
+ bool is_resolved;
+ PEAPI.Type [] p_type_list;
+
+ public GenericArguments ()
+ {
+ type_list = null;
+ type_arr = null;
+ type_str = null;
+ is_resolved = false;
+ p_type_list = null;
+ }
+
+ public int Count {
+ get { return type_list.Count; }
+ }
+
+ public void Add (BaseTypeRef type)
+ {
+ if (type == null)
+ throw new InternalErrorException ();
+
+ if (type_list == null)
+ type_list = new ArrayList ();
+ type_list.Add (type);
+ type_str = null;
+ type_arr = null;
+ }
+
+ public BaseTypeRef [] ToArray ()
+ {
+ if (type_list == null)
+ return null;
+ if (type_arr == null)
+ type_arr = (BaseTypeRef []) type_list.ToArray (typeof (BaseTypeRef));
+
+ return type_arr;
+ }
+
+ public PEAPI.Type [] Resolve (CodeGen code_gen)
+ {
+ if (is_resolved)
+ return p_type_list;
+
+ int i = 0;
+ p_type_list = new PEAPI.Type [type_list.Count];
+ foreach (BaseTypeRef type in type_list) {
+ type.Resolve (code_gen);
+ p_type_list [i ++] = type.PeapiType;
+ }
+ is_resolved = true;
+ type_str = null;
+ return p_type_list;
+ }
+
+ public void Resolve (GenericParameters type_gen_params, GenericParameters method_gen_params)
+ {
+ foreach (BaseTypeRef type in type_list) {
+ BaseGenericTypeRef gtr = type as BaseGenericTypeRef;
+ if (gtr != null)
+ gtr.Resolve (type_gen_params, method_gen_params);
+ }
+ /* Reset, might have changed (think GenericParamRef) */
+ type_str = null;
+ }
+
+ private void MakeString ()
+ {
+ //Build full_name (foo < , >)
+ StringBuilder sb = new StringBuilder ();
+ sb.Append ("<");
+ foreach (BaseTypeRef tr in type_list)
+ sb.AppendFormat ("{0}, ", tr.FullName);
+ //Remove the extra ', ' at the end
+ sb.Length -= 2;
+ sb.Append (">");
+ type_str = sb.ToString ();
+ }
+
+ public override string ToString ()
+ {
+ if (type_str == null)
+ MakeString ();
+ return type_str;
+ }
+ }
+
+}
+