[amd64] Save missing register
[mono.git] / mcs / ilasm / codegen / ExternFieldRef.cs
1 //
2 // Mono.ILASM.ExternFieldRef
3 //
4 // Author(s):
5 //  Jackson Harper (Jackson@LatitudeGeo.com)
6 //
7 // (C) 2003 Jackson Harper, All rights reserved
8 //
9
10
11 using System;
12
13 namespace Mono.ILASM {
14
15         public class ExternFieldRef : IFieldRef {
16
17                 private ExternTypeRef owner;
18                 private BaseTypeRef type;
19                 private string name;
20
21                 private bool is_resolved;
22                 private PEAPI.FieldRef peapi_field;
23
24                 public ExternFieldRef (ExternTypeRef owner, BaseTypeRef type, string name)
25                 {
26                         this.owner = owner;
27                         this.type = type;
28                         this.name = name;
29                         
30                         is_resolved = false;
31                 }
32
33                 public PEAPI.Field PeapiField {
34                         get { return peapi_field; }
35                 }
36
37                 public void Resolve (CodeGen code_gen)
38                 {
39                         if (is_resolved)
40                                 return;
41
42                         owner.Resolve (code_gen);
43
44                         if (owner.UseTypeSpec) {
45                                 PEAPI.Type owner_ref = owner.PeapiType;
46                                 code_gen.PEFile.AddFieldToTypeSpec (owner_ref, name,
47                                                 type.PeapiType);
48                         } else {
49                                 PEAPI.ClassRef owner_ref;
50                                 owner_ref = (PEAPI.ClassRef) owner.PeapiType;
51                                 type.Resolve (code_gen);
52                                 peapi_field = owner_ref.AddField (name, type.PeapiType);
53                         }
54
55                         is_resolved = true;
56                 }
57         }
58
59 }
60