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/ExternTypeRefInst.cs')
-rw-r--r--mcs/ilasm/codegen/ExternTypeRefInst.cs139
1 files changed, 139 insertions, 0 deletions
diff --git a/mcs/ilasm/codegen/ExternTypeRefInst.cs b/mcs/ilasm/codegen/ExternTypeRefInst.cs
new file mode 100644
index 00000000000..6d0111775b1
--- /dev/null
+++ b/mcs/ilasm/codegen/ExternTypeRefInst.cs
@@ -0,0 +1,139 @@
+//
+// Mono.ILASM.ExternTypeRefInst
+//
+// Author(s):
+// Jackson Harper (Jackson@LatitudeGeo.com)
+//
+// (C) 2004 Novell, Inc (http://www.novell.com)
+//
+
+
+using System;
+using System.Collections;
+
+namespace Mono.ILASM {
+
+ public class ExternTypeRefInst : BaseTypeRef {
+
+ private ExternTypeRef type_ref;
+ private PEAPI.Type type;
+ private bool is_valuetypeinst;
+ private bool is_resolved;
+ private GenericArguments gen_args;
+ private static Hashtable method_table = new Hashtable ();
+
+ public ExternTypeRefInst (ExternTypeRef type_ref, GenericArguments gen_args, bool is_valuetypeinst)
+ {
+ this.type_ref = type_ref;
+ this.gen_args = gen_args;
+ this.is_valuetypeinst = is_valuetypeinst;
+
+ is_resolved = false;
+ }
+
+ public PEAPI.Type PeapiType {
+ get { return type; }
+ }
+
+ public string FullName {
+ get { return type_ref.FullName; }
+ }
+
+
+ public string SigMod {
+ get { return type_ref.SigMod; }
+ set { type_ref.SigMod = value; }
+ }
+
+
+ public bool IsPinned {
+ get { return type_ref.IsPinned; }
+ }
+
+ public bool IsRef {
+ get { return type_ref.IsRef; }
+ }
+
+ public bool IsArray {
+ get { return type_ref.IsArray; }
+ }
+
+ public bool UseTypeSpec {
+ get { return type_ref.UseTypeSpec; }
+ }
+
+ public ExternTypeRefInst Clone ()
+ {
+ return new ExternTypeRefInst (type_ref.Clone (), gen_args, is_valuetypeinst);
+ }
+
+ public void MakeArray ()
+ {
+ is_valuetypeinst = false;
+ type_ref.MakeArray ();
+ }
+
+ public void MakeBoundArray (ArrayList bounds)
+ {
+ is_valuetypeinst = false;
+ type_ref.MakeBoundArray (bounds);
+ }
+
+ public void MakeManagedPointer ()
+ {
+ type_ref.MakeManagedPointer ();
+ }
+
+ public void MakeUnmanagedPointer ()
+ {
+ type_ref.MakeUnmanagedPointer ();
+ }
+
+ public void MakeCustomModified (CodeGen code_gen,
+ PEAPI.CustomModifier modifier, BaseClassRef klass)
+ {
+ type_ref.MakeCustomModified (code_gen, modifier, klass);
+ }
+
+ public void MakePinned ()
+ {
+ type_ref.MakePinned ();
+ }
+
+ public void MakeValueClass ()
+ {
+ type_ref.MakeValueClass ();
+ }
+
+ public void Resolve (CodeGen code_gen)
+ {
+ if (is_resolved)
+ return;
+
+ type_ref.Resolve (code_gen);
+
+ type = new PEAPI.GenericTypeInst (type_ref.PeapiType, gen_args.Resolve (code_gen));
+
+ is_resolved = true;
+ }
+
+ public BaseMethodRef GetMethodRef (BaseTypeRef ret_type, PEAPI.CallConv call_conv,
+ string name, BaseTypeRef[] param, int gen_param_count)
+ {
+ string key = type_ref.FullName + MethodDef.CreateSignature (ret_type, name, param, gen_param_count) + type_ref.SigMod;
+ TypeSpecMethodRef mr = method_table [key] as TypeSpecMethodRef;
+ if (mr == null) {
+ mr = new TypeSpecMethodRef (this, ret_type, call_conv, name, param, gen_param_count);
+ method_table [key] = mr;
+ }
+
+ return mr;
+ }
+
+ public IFieldRef GetFieldRef (BaseTypeRef ret_type, string name)
+ {
+ return new TypeSpecFieldRef (this, ret_type, name);
+ }
+ }
+}
+