コード例 #1
0
 private void WriteUnsizedArrayType(type_node type,array_internal_interface aii)
 {
     bw.Write((byte)TypeKind.UnsizedArray);
     WriteDebugInfo((type as SemanticTree.ILocated).Location);
     WriteTypeReference(aii.element_type);
     bw.Write(aii.rank);
 }
コード例 #2
0
		public type_node create_unsized_array(type_node element_type, common_namespace_node cmn, int rank, location loc)
		{
			List<type_node> ret = null;
			if(types_unsized_arrays.TryGetValue(element_type,out ret))
			{
				for (int i=0; i<ret.Count; i++)
				if (ret[i] is common_type_node)
				{
					if ((ret[i] as common_type_node).rank == rank)
					return ret[i];
				}
				else
				if (ret[i] is compiled_type_node)
				{
					if ((ret[i] as compiled_type_node).rank == rank)
					return ret[i];
				}
			}
			array_internal_interface aii = new array_internal_interface(element_type, rank);

			compiled_type_node comp_element_type = element_type as compiled_type_node;
			if (comp_element_type != null)
			{
				compiled_type_node ctn=NetHelper.NetHelper.get_array_type(comp_element_type, rank);
				ctn.Location = loc;
				if (ctn.get_internal_interface(internal_interface_kind.unsized_array_interface) == null)
				{
					ctn.add_internal_interface(aii);
				}
				ctn.SetName(compiler_string_consts.get_array_type_name(ctn.element_type.name,rank));
				if (!types_unsized_arrays.TryGetValue(element_type,out ret))
				{
					ret = new List<type_node>();
					types_unsized_arrays[element_type] = ret;
				}
				ret.Add(ctn);
				//types_unsized_arrays.Add(element_type, ctn);
				
				SystemLibrary.SystemLibrary.init_reference_type(ctn);
				return ctn;
			}
			SymbolTable.Scope top_scope = null;
			if (cmn != null)
			{
				top_scope = cmn.scope;
			}

			common_type_node comtn = new common_type_node(SystemLibrary.SystemLibrary.array_base_type,
			                                              compiler_string_consts.get_array_type_name(element_type.name,rank), SemanticTree.type_access_level.tal_public,
			                                              cmn, convertion_data_and_alghoritms.symbol_table.CreateClassScope(top_scope,SystemLibrary.SystemLibrary.array_base_type.Scope), loc);
			comtn.internal_type_special_kind = SemanticTree.type_special_kind.array_kind;
			comtn.add_internal_interface(aii);
			if (!types_unsized_arrays.TryGetValue(element_type,out ret))
			{
				ret = new List<type_node>();
				types_unsized_arrays[element_type] = ret;
			}
			ret.Add(comtn);
            //(ssyy) Добавляем интерфейсы.
            comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.icloneable_interface);
            comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.ilist_interface);
            comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.icollection_interface);
            comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.ienumerable_interface);
            if (generic_parameter_eliminations.check_type_generic_useful(element_type, null) == null)
            {
                List<type_node> type_params = new List<type_node>(1);
                type_params.Add(element_type);
                comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.ilist1_interface.get_instance(type_params));
                comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.icollection1_interface.get_instance(type_params));
                comtn.ImplementingInterfaces.Add(SystemLibrary.SystemLibrary.ienumerable1_interface.get_instance(type_params));
            }
            //SystemLibrary.SystemLibrary.ic
            //(ssyy) Убрал 18.05.08
			//if (this.convertion_data_and_alghoritms.syntax_tree_visitor.context.converted_namespace != null)
			//this.convertion_data_and_alghoritms.syntax_tree_visitor.context.converted_namespace.types.AddElement(comtn);
			SystemLibrary.SystemLibrary.init_reference_type(comtn);

			return comtn;
		}
コード例 #3
0
ファイル: types.cs プロジェクト: Slav76/pascalabcnet
 private void mark_if_array()
 {
     if (!(compiled_type.IsArray))
     {
         return;
     }
     type_node elem_type=compiled_type_node.get_type_node(compiled_type.GetElementType());
     array_internal_interface aii = new array_internal_interface(elem_type,_compiled_type.GetArrayRank());
     add_internal_interface(aii);
     return;
 }
コード例 #4
0
		public static void make_array_interface(common_type_node ctn)
		{
			array_internal_interface aii = new array_internal_interface(ctn.element_type,1);
			ctn.add_internal_interface(aii);
			//types_unsized_arrays.Add(element_type, comtn);
		}