private void VisitRefTypeDefinition(ref_type_node node)
 {
     if (is_interface == true)
         SavePositionAndConstPool(node);
     else
         SavePositionAndImplementationPool(node);
     bw.Write((byte)node.semantic_node_type);
     bw.Write(is_interface);
     if (is_interface == true)
         bw.Write(GetNameIndex(node));
     else
         bw.Write(node.name);
     //bw.Write(GetUnitReference(node.comprehensive_namespace));
     WriteTypeReference(node.pointed_type);
     WriteDebugInfo(node.loc);
 }
        //сохранение типа-указатель
        private void WritePointerType(ref_type_node type)
        {
            bw.Write((byte)TypeKind.Pointer); 
            WriteTypeReference(type.pointed_type);

        }
 internal ref_type_node GetWaitedRefType(string name, location loc)
 {
     ref_type_node rtn = null;
     if (WaitedRefTypes.TryGetValue(name, out rtn))
         return rtn;
     rtn = new ref_type_node(null);
     rtn.PointedTypeName = name;
     rtn.loc = loc;
     WaitedRefTypes.Add(name, rtn);
     return rtn;
 }
        private void CheckForCircularityInPointers(ref_type_node left, type_node right, location loc)
        {
        	if (left == null || right == null) 
        		return;
        	if (left == right)
				// #ErrorRefactoringProblem
				// AddError(loc, "CIRCULARITY_IN_POINTER"); // Если заменить этой строкой следующую, то при запуске bin\TestRunner.exe это приложение зацикливается, что сопровождается утечкой памяти
        		AddError(new CircuralityInPointer(loc));
        	if (right is ref_type_node)
        		CheckForCircularityInPointers(left, (right as ref_type_node).pointed_type, loc);
        	else if (right.type_special_kind == SemanticTree.type_special_kind.array_kind || right.type_special_kind == SemanticTree.type_special_kind.array_wrapper)
        		CheckForCircularityInPointers(left,right.element_type,loc);
        }
예제 #5
0
		private compiled_type_node(System.Type st)
		{
			_compiled_type=st;
			_ref_type = new ref_type_node(this);
            //TODO: Почему?
			//if (st != NetHelper.NetHelper.void_ptr_type && st.BaseType == null) _base_type = (compiled_type_node)_sli.pointer_type;
		}
예제 #6
0
		private string get_pointer_name(ref_type_node ctn)
		{
			type_node tn = ctn.pointed_type;
			int i=1;
			while (tn is ref_type_node)
			{
				i++;
				tn = (tn as ref_type_node).pointed_type;
			}
			string s = get_name(tn);
			for (int j=0; j<i; j++)
				s += "*";
			return s;
		}