5 // Jackson Harper (Jackson@LatitudeGeo.com)
7 // (C) 2003 Jackson Harper, All rights reserved
11 using System.Collections;
13 namespace Mono.ILASM {
16 /// Reference to a type in the module being compiled.
18 public class TypeRef : ModifiableType, IClassRef {
21 private Location location;
22 private string full_name;
23 private string sig_mod;
24 private PEAPI.Type type;
25 private bool is_valuetype;
27 private bool is_resolved;
29 public static readonly TypeRef Ellipsis = new TypeRef ("ELLIPSIS", false, null);
30 public static readonly TypeRef Any = new TypeRef ("any", false, null);
32 public TypeRef (string full_name, bool is_valuetype, Location location)
34 this.full_name = full_name;
35 this.location = location;
36 this.is_valuetype = is_valuetype;
37 sig_mod = String.Empty;
41 public string FullName {
42 get { return full_name + sig_mod; }
45 public override string SigMod {
46 get { return sig_mod; }
47 set { sig_mod = value; }
50 public PEAPI.Type PeapiType {
54 public PEAPI.Class PeapiClass {
55 get { return type as PEAPI.Class; }
58 public bool IsResolved {
59 get { return is_resolved; }
62 public void MakeValueClass ()
67 public IMethodRef GetMethodRef (ITypeRef ret_type,
68 PEAPI.CallConv call_conv, string name, ITypeRef[] param)
70 return new MethodRef (this, call_conv, ret_type, name, param);
73 public IFieldRef GetFieldRef (ITypeRef ret_type, string name)
75 return new FieldRef (this, ret_type, name);
78 public void Resolve (CodeGen code_gen)
85 base_type = code_gen.TypeManager.GetPeapiType (full_name);
87 if (base_type == null) {
88 code_gen.Report.Error ("Reference to undefined class '" +
92 type = Modify (code_gen, base_type);
97 public IClassRef AsClassRef (CodeGen code_gen)
102 public override string ToString ()