5 // Jackson Harper (Jackson@LatitudeGeo.com)
7 // (C) 2003 Jackson Harper, All right reserved
12 using System.Collections;
14 namespace Mono.ILASM {
16 public class EventDef : ICustomAttrTarget {
18 private FeatureAttr attr;
20 private ITypeRef type;
21 private PEAPI.Event event_def;
22 private bool is_resolved;
23 private ArrayList customattr_list;
25 private MethodRef addon;
26 private MethodRef fire;
27 private MethodRef other;
28 private MethodRef removeon;
30 public EventDef (FeatureAttr attr, ITypeRef type, string name)
38 public void AddCustomAttribute (CustomAttr customattr)
40 if (customattr_list == null)
41 customattr_list = new ArrayList ();
43 customattr_list.Add (customattr);
46 public PEAPI.Event Resolve (CodeGen code_gen, PEAPI.ClassDef classdef)
51 type.Resolve (code_gen);
52 event_def = classdef.AddEvent (name, type.PeapiType);
54 if ((attr & FeatureAttr.Rtspecialname) != 0)
55 event_def.SetRTSpecialName ();
57 if ((attr & FeatureAttr.Specialname) != 0)
58 event_def.SetSpecialName ();
60 if (customattr_list != null)
61 foreach (CustomAttr customattr in customattr_list)
62 customattr.AddTo (code_gen, event_def);
69 public void Define (CodeGen code_gen, PEAPI.ClassDef classdef)
72 Resolve (code_gen, classdef);
75 addon.Resolve (code_gen);
76 event_def.AddAddon ((PEAPI.MethodDef) addon.PeapiMethod);
80 fire.Resolve (code_gen);
81 event_def.AddFire ((PEAPI.MethodDef) fire.PeapiMethod);
85 other.Resolve (code_gen);
86 event_def.AddOther ((PEAPI.MethodDef) other.PeapiMethod);
89 if (removeon != null) {
90 removeon.Resolve (code_gen);
91 event_def.AddRemoveOn ((PEAPI.MethodDef) removeon.PeapiMethod);
95 public void AddAddon (MethodRef method_ref)
100 public void AddFire (MethodRef method_ref)
105 public void AddOther (MethodRef method_ref)
110 public void AddRemoveon (MethodRef method_ref)
112 removeon = method_ref;