public wrapped_common_type_node(PCUReader pr, type_node base_type, string name, type_access_level type_access_level, common_namespace_node comprehensive_namespace, ClassScope cs, location loc, int offset) : base(base_type, name, type_access_level, comprehensive_namespace, cs, loc) { this.pr = pr; this.offset = offset; }
private TypeScope CreateInterfaceCommonType(string name, int offset) { TypeScope ctn = (TypeScope)members[offset]; if (ctn != null) { return(ctn); } bool in_scope = false; if (name != null) { in_scope = true; } bool is_interface = br.ReadBoolean(); if (is_interface)//ïðîïóñêàåì ôëàã - èíòåðôåéñíîñòè { name = GetString(br.ReadInt32()); } else { name = br.ReadString(); } //br.ReadInt32(); //ssyy //×èòàåì, ÿâëÿåòñÿ ëè òèï èíòåðôåéñîì bool type_is_interface = (br.ReadByte() == 1); //×èòàåì, ÿâëÿåòñÿ ëè òèï äåëåãàòîì bool type_is_delegate = (br.ReadByte() == 1); //\ssyy bool type_is_generic_definition = (br.ReadByte() == 1); if (type_is_generic_definition) { throw new Exception(); } TypeScope base_type = GetTypeReference(); bool is_value_type = br.ReadBoolean(); //ssyy //×èòàåì ïîääåðæèâàåìûå èíòåðôåéñû int interf_count = br.ReadInt32(); List <TypeScope> interfaces = new List <TypeScope>(); for (int i = 0; i < interf_count; i++) { interfaces.Add(GetTypeReference()); } //\ssyy object low_val = null; object upper_val = null; type_access_level tal = (type_access_level)br.ReadByte(); type_special_kind tsk = (type_special_kind)br.ReadByte(); bool is_sealed = br.ReadBoolean(); bool is_abstract = br.ReadBoolean(); if (tsk == type_special_kind.diap_type) { low_val = CreateExpression(); upper_val = CreateExpression(); } TypeScope element_type = null; if (CanReadObject()) { element_type = GetTypeReference(); } switch (tsk) { case type_special_kind.none_kind: ctn = new TypeScope(SymbolKind.Class, cur_scope, base_type); break; case type_special_kind.record: ctn = new TypeScope(SymbolKind.Struct, cur_scope, base_type); break; case type_special_kind.array_wrapper: ctn = new ArrayScope(); break; case type_special_kind.enum_kind: ctn = new EnumScope(SymbolKind.Enum, cur_scope, base_type); break; case type_special_kind.set_type: ctn = new SetScope(element_type); break; case type_special_kind.array_kind: if (!in_scope) { ctn = new ArrayScope(); } else { return(null); } break; case type_special_kind.diap_type: ctn = new DiapasonScope(low_val, upper_val); break; case type_special_kind.typed_file: ctn = new FileScope(element_type, null); break; case type_special_kind.binary_file: ctn = new FileScope(null, null); break; } ctn.declaringUnit = root_scope; ctn.si.name = name; ctn.is_abstract = is_abstract; ctn.is_final = is_sealed; AddMember(ctn, offset); ctn.elementType = element_type; br.ReadInt32(); br.ReadInt32();//attributes //common_namespace_node ns = cun.namespaces[0]; byte flag = br.ReadByte(); int def_prop_off = 0; if (flag == 1) { def_prop_off = br.ReadInt32(); } ReadDebugInfo(); ctn.si.description = ctn.GetDescription(); //ñîçäàåì scope äëÿ êëàññà //ctn = new wrapped_common_type_node(this, base_type, name, tal, ns, scope, loc, offset); //members[offset] = ctn; //AddMember(ctn, offset); RestoreAllMembers(ctn); return(ctn); }