5 // Jackson Harper (Jackson@LatitudeGeo.com)
7 // (C) 2003 Jackson Harper, All rights reserved
13 namespace Mono.ILASM {
15 public class FieldDef {
18 private ITypeRef type;
19 private PEAPI.FieldAttr attr;
20 private PEAPI.FieldDef field_def;
22 private bool offset_set;
23 private bool datavalue_set;
24 private bool value_set;
26 private bool is_resolved;
29 private PEAPI.Constant constant;
31 public FieldDef (PEAPI.FieldAttr attr, string name,
39 datavalue_set = false;
49 public PEAPI.FieldDef PeapiFieldDef {
50 get { return field_def; }
53 public void SetOffset (uint val)
59 public void SetValue (PEAPI.Constant constant)
62 this.constant = constant;
65 public PEAPI.FieldDef Resolve (CodeGen code_gen)
70 type.Resolve (code_gen);
71 field_def = code_gen.PEFile.AddField (attr, name, type.PeapiType);
78 public PEAPI.FieldDef Resolve (CodeGen code_gen, PEAPI.ClassDef classdef)
83 type.Resolve (code_gen);
84 field_def = classdef.AddField (attr, name, type.PeapiType);
92 /// Define a global field
94 public void Define (CodeGen code_gen)
97 WriteCode (field_def);
101 /// Define a field member of the specified class
103 public void Define (CodeGen code_gen, PEAPI.ClassDef class_def)
105 Resolve (code_gen, class_def);
106 WriteCode (field_def);
109 protected void WriteCode (PEAPI.FieldDef field_def)
112 field_def.SetOffset (offset);
115 field_def.AddValue (constant);