Переглянути джерело

Автодок: Исправлена ошибка, если не было VAR

Arthur Yefimov 2 роки тому
батько
коміт
d127dffacc
1 змінених файлів з 12 додано та 5 видалено
  1. 12 5
      src/Autodoc/AutodocParser.Mod

+ 12 - 5
src/Autodoc/AutodocParser.Mod

@@ -908,7 +908,7 @@ PROCEDURE ParseConstDecl(M: Module);
 VAR C: Const;
   line2: INTEGER;
   isInt: BOOLEAN;
-BEGIN M.consts := NewList(); curTitle := '-';
+BEGIN curTitle := '-';
   IF sym = const THEN GetSym;
     WHILE sym = ident DO
       Debug(id);
@@ -929,7 +929,7 @@ END ParseConstDecl;
 PROCEDURE ParseTypeDecl(M: Module);
 VAR T: Type;
   line2: INTEGER;
-BEGIN M.types := NewList(); curTitle := '-';
+BEGIN curTitle := '-';
   IF sym = type THEN GetSym;
     WHILE sym = ident DO
       UpdateCurGroup(M.types);
@@ -1073,7 +1073,7 @@ END ReachEndOf;
 PROCEDURE ParseProcedureDecl(M: Module);
 VAR name: Str;
   P: Procedure;
-BEGIN M.procedures := NewList(); curTitle := '-';
+BEGIN curTitle := '-';
   WHILE sym = procedure DO UpdateCurGroup(M.procedures);
     GetSym; NEW(P); InitObject(P);
     P.params := NewList(); P.exported := FALSE;
@@ -1145,9 +1145,12 @@ VAR x: Object;
   L: List;
   ordinal: BOOLEAN;
 BEGIN
+  Debug('SortGroup begin');
   IF G.first # NIL THEN L := NewList();
     GroupCheckOrdinalConsts(G);
+    Debug('SortGroup before WHILE');
     WHILE G.first # NIL DO
+    Debug('SortGroup WHILE iteration');
       x := FindMin(G, G.ordinalConsts);
       RemoveFromList(G, x);
       AddToList(L, x)
@@ -1159,8 +1162,8 @@ END SortGroup;
 PROCEDURE SortGroups(L: List);
 VAR x: Object;
   common: Group;
-BEGIN
-  IF L.first # NIL THEN
+BEGIN 
+  IF (L # NIL) & (L.first # NIL) THEN
     common := NIL; x := L.first;
     WHILE x # NIL DO
       SortGroup(x(Group));
@@ -1187,6 +1190,8 @@ END SortModule;
 PROCEDURE ParseModule*(VAR r: Files.Rider; VAR err: ARRAY OF CHAR): Module;
 VAR M: Module;
 BEGIN NEW(M); InitObject(M); M.foreign := FALSE;
+  M.consts := NewList(); M.types := NewList();
+  M.vars := NewList(); M.procedures := NewList();
   R := r; c := 0X; line := 1; col := 0; lastError := -1;
   Read; ClearComments; curTitle := '-'; GetSym;
   Debug('Begin ParseModule');
@@ -1209,12 +1214,14 @@ BEGIN NEW(M); InitObject(M); M.foreign := FALSE;
       REPEAT GetSym UNTIL (sym = eot) OR (sym = end)
     END;
     ReachEndOf(M.name);
+    Debug('End of module');
     IF sym = ident THEN GetSym;
       IF sym # period THEN MarkExp('.') END
     ELSE (* sym = eot *) MarkEnd('Module', M.name)
     END
   ELSE MarkExp('MODULE')
   END;
+  Debug('Begin SortModule');
   IF lastError = -1 THEN SortModule(M)
   ELSE M := NIL; err := 'Error' (*!FIXME*)
   END;