Browse Source

Автодок: внешние модули с названием процедур

Arthur Yefimov 2 years ago
parent
commit
4d6c90fe38
1 changed files with 9 additions and 4 deletions
  1. 9 4
      src/Autodoc/AutodocParser.Mod

+ 9 - 4
src/Autodoc/AutodocParser.Mod

@@ -1338,13 +1338,13 @@ END ReachEndOf;
 PROCEDURE ParseProcedureDecl(M: Module);
 VAR name: Str;
   P: Procedure;
-  forward: BOOLEAN;
+  forward, foreign: BOOLEAN;
 BEGIN
   IF ~titleNotUsed THEN curTitle := '-' END;
   WHILE sym = procedure DO UpdateCurGroup(M.procedures);
-    NEW(P); InitObject(P); SaveComment(P, -1); GetSym;
+    NEW(P); InitObject(P); SaveComment(P, -1); GetSym; foreign := FALSE;
     forward := FALSE; P.params := NewList(); P.exported := FALSE;
-    IF (sym = minus) OR (sym = arrow) THEN GetSym; forward := TRUE
+    IF (sym = minus) OR (sym = arrow) THEN GetSym; forward := TRUE;
     ELSIF sym = times THEN GetSym
     END;
     IF sym = ident THEN Strings.Copy(id, P.name); GetSym
@@ -1352,6 +1352,11 @@ BEGIN
     END;
     IF (sym = minus) OR (sym = arrow) THEN GetSym END;
     IF sym = times THEN GetSym; P.exported := TRUE END;
+    IF sym = lbrak THEN GetSym; (* Foreign name *)
+      foreign := TRUE;
+      IF sym = string THEN GetSym ELSE MarkExp('foreign name of procedure') END;
+      IF sym = rbrak THEN GetSym ELSE MarkExp(']') END
+    END;
     IF sym = lparen THEN GetSym;
       IF sym # rparen THEN ParseFormalParamSection(P.params);
         WHILE sym = semicol DO GetSym; ParseFormalParamSection(P.params) END
@@ -1361,7 +1366,7 @@ BEGIN
     END;
     IF sym = string THEN GetSym END; (* Foreign code *)
     IF sym = semicol THEN GetSym ELSE MarkExp(';') END;
-    IF ~forward THEN
+    IF ~forward & ~foreign THEN
       ReachEndOf(P.name); SaveComment(P, -1);
       IF sym = ident THEN GetSym;
         IF sym = semicol THEN GetSym ELSE MarkExp(';') END