private void WriteEventReference(event_node ev)
 {
     byte is_def = 0;
     int offset = GetEventReference(ev, ref is_def);
     bw.Write(is_def);
     bw.Write(offset);
 }
 private int GetEventReference(event_node ev, ref byte is_def)
 {
     if (ev.semantic_node_type == semantic_node_type.compiled_event)
     {
         is_def = 2;
         compiled_event cev = (compiled_event)ev;
         ImportedEntity ie = null;
         if (ext_members.TryGetValue(cev, out ie))
         {
             return ie.index * ie.GetSize();
         }
         //заполняем структуру в списке импортируемых сущностей
         ie = new ImportedEntity();
         ie.index = imp_entitles.Count;
         ie.flag = ImportKind.DotNet;
         ie.num_unit = GetAssemblyToken(cev.event_info.DeclaringType.Assembly);
         //ie.offset = (int)ctn.compiled_type.MetadataToken;//токен для типа (уникален в сборке)
         ie.offset = GetTokenForNetEntity(cev.event_info.DeclaringType);
         int offset = imp_entitles.Count * ie.GetSize();
         imp_entitles.Add(ie);//добавляем структуру
         ext_members[cev] = ie;
         return offset;//возвращаем смещение относительно начала списка импорт. сущ-тей
     }
     else if (ev.semantic_node_type == semantic_node_type.common_namespace_event)
     {
         int off = 0;
         if (members.TryGetValue(ev, out off)) //если этот тип описан в этом модуле
         {
             is_def = 4;
             return off;//возвращаем его смещение
         }
         is_def = 3;
         ImportedEntity ie = null;
         if (ext_members.TryGetValue(ev, out ie))
         {
             return ie.index * ie.GetSize();
         }
         ie = new ImportedEntity();
         ie.flag = ImportKind.Common;
         ie.num_unit = GetUnitReference((ev as common_namespace_event).namespace_node);
         ie.offset = GetExternalOffset(ev);
         int offset = imp_entitles.Count * ie.GetSize();
         ie.index = imp_entitles.Count;
         imp_entitles.Add(ie);
         ext_members[ev] = ie;
         return offset;
     }
     else
     {
         int off = 0;
         if (members.TryGetValue(ev, out off)) //если этот тип описан в этом модуле
         {
             is_def = 1;
             return off;//возвращаем его смещение
         }
         is_def = 0;
         ImportedEntity ie = null;
         if (ext_members.TryGetValue(ev, out ie))
         {
             return ie.index * ie.GetSize();
         }
         ie = new ImportedEntity();
         ie.flag = ImportKind.Common;
         ie.num_unit = GetExtTypeReference((ev as common_event).cont_type);
         ie.offset = GetExternalOffset(ev);
         int offset = imp_entitles.Count * ie.GetSize();
         ie.index = imp_entitles.Count;
         imp_entitles.Add(ie);
         ext_members[ev] = ie;
         return offset;
     }
 }
示例#3
0
 public nonstatic_event_reference(expression_node obj, event_node en, location loc)
     : base(en, loc)
 {
     _obj = obj;
 }
示例#4
0
 public static_event_reference(event_node en, location loc)
     :base(en.delegate_type, loc)
 {
     _en = en;
 }
示例#5
0
 public nonstatic_event_reference(expression_node obj, event_node en, location loc)
     : base(en, loc)
 {
     _obj = obj;
 }
示例#6
0
 public static_event_reference(event_node en, location loc)
     : base(en.delegate_type, loc)
 {
     _en = en;
 }