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); }
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; }
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; }