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/TypeRef.cs')
-rw-r--r--mcs/ilasm/codegen/TypeRef.cs86
1 files changed, 86 insertions, 0 deletions
diff --git a/mcs/ilasm/codegen/TypeRef.cs b/mcs/ilasm/codegen/TypeRef.cs
new file mode 100644
index 00000000000..08846715f99
--- /dev/null
+++ b/mcs/ilasm/codegen/TypeRef.cs
@@ -0,0 +1,86 @@
+//
+// Mono.ILASM.TypeRef
+//
+// Author(s):
+// Jackson Harper (Jackson@LatitudeGeo.com)
+//
+// (C) 2003 Jackson Harper, All rights reserved
+//
+
+using System;
+using System.Collections;
+
+namespace Mono.ILASM {
+
+ /// <summary>
+ /// Reference to a type in the module being compiled.
+ /// </summary>
+ public class TypeRef : BaseClassRef {
+
+ private Location location;
+ public static readonly TypeRef Ellipsis = new TypeRef ("ELLIPSIS", false, null);
+ public static readonly TypeRef Any = new TypeRef ("any", false, null);
+
+ public TypeRef (string full_name, bool is_valuetype, Location location)
+ : this (full_name, is_valuetype, location, null, null)
+ {
+ }
+
+ public TypeRef (string full_name, bool is_valuetype, Location location, ArrayList conv_list, string sig_mod)
+ : base (full_name, is_valuetype, conv_list, sig_mod)
+ {
+ this.location = location;
+ }
+
+ public override BaseClassRef Clone ()
+ {
+ return new TypeRef (full_name, is_valuetype, location, (ArrayList) ConversionList.Clone (), sig_mod);
+ }
+
+ protected override BaseMethodRef CreateMethodRef (BaseTypeRef ret_type,
+ PEAPI.CallConv call_conv, string name, BaseTypeRef[] param, int gen_param_count)
+ {
+ if (SigMod == null | SigMod == "")
+ return new MethodRef (this, call_conv, ret_type, name, param, gen_param_count);
+ else
+ return new TypeSpecMethodRef (this, call_conv, ret_type, name, param, gen_param_count);
+ }
+
+ protected override IFieldRef CreateFieldRef (BaseTypeRef ret_type, string name)
+ {
+ return new FieldRef (this, ret_type, name);
+ }
+
+ public override void Resolve (CodeGen code_gen)
+ {
+ if (is_resolved)
+ return;
+
+ PEAPI.Type base_type;
+
+ base_type = code_gen.TypeManager.GetPeapiType (full_name);
+
+ if (base_type == null) {
+ Report.Error ("Reference to undefined class '" +
+ FullName + "'");
+ return;
+ }
+ type = Modify (code_gen, base_type);
+
+ is_resolved = true;
+ }
+
+ public BaseClassRef AsClassRef (CodeGen code_gen)
+ {
+ return this;
+ }
+
+ public override string ToString ()
+ {
+ return FullName;
+ }
+
+ }
+
+}
+