mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-05 23:22:25 +00:00
comments length increased, multiline comments are also now possible.
This commit is contained in:
parent
50b5a1438e
commit
a517a42357
4 changed files with 48 additions and 31 deletions
|
|
@ -8,7 +8,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
|
||||||
|
|
||||||
CONST
|
CONST
|
||||||
OptionChar* = "-";
|
OptionChar* = "-";
|
||||||
MaxCommentLen* = 256;
|
MaxCommentLen* = 1024;
|
||||||
|
|
||||||
(* compiler option flag bits; don't change the encoding *)
|
(* compiler option flag bits; don't change the encoding *)
|
||||||
inxchk* = 0; (* index check on *)
|
inxchk* = 0; (* index check on *)
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
||||||
IMPORT OPM, SYSTEM;
|
IMPORT OPM, SYSTEM;
|
||||||
|
|
||||||
CONST
|
CONST
|
||||||
MaxStrLen* = 256;
|
MaxStrLen* = 1024;
|
||||||
MaxIdLen = 256;
|
MaxIdLen = 256;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -196,7 +196,7 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
||||||
commentText: ARRAY OPM.MaxCommentLen OF CHAR;
|
commentText: ARRAY OPM.MaxCommentLen OF CHAR;
|
||||||
i: INTEGER;
|
i: INTEGER;
|
||||||
nestLevel: INTEGER;
|
nestLevel: INTEGER;
|
||||||
prevCh, nextCh: CHAR;
|
prevCh: CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR i := 0 TO LEN(commentText) - 1 DO
|
FOR i := 0 TO LEN(commentText) - 1 DO
|
||||||
commentText[i] := 0X
|
commentText[i] := 0X
|
||||||
|
|
@ -224,45 +224,53 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
||||||
WHILE (nestLevel > 0) & (ch # OPM.Eot) DO
|
WHILE (nestLevel > 0) & (ch # OPM.Eot) DO
|
||||||
IF (prevCh = "(") & (ch = "*") THEN
|
IF (prevCh = "(") & (ch = "*") THEN
|
||||||
INC(nestLevel);
|
INC(nestLevel);
|
||||||
prevCh := 0X
|
prevCh := ch; (* Don't set to 0X - keep the '*' *)
|
||||||
|
OPM.Get(ch)
|
||||||
ELSIF (prevCh = "*") & (ch = ")") THEN
|
ELSIF (prevCh = "*") & (ch = ")") THEN
|
||||||
DEC(nestLevel);
|
DEC(nestLevel);
|
||||||
IF nestLevel = 0 THEN
|
IF nestLevel = 0 THEN
|
||||||
OPM.Get(ch); (* move past ')' *)
|
OPM.Get(ch); (* move past ')' *)
|
||||||
ELSE
|
ELSE
|
||||||
prevCh := 0X
|
prevCh := ch; (* Keep the ')' *)
|
||||||
|
OPM.Get(ch)
|
||||||
END
|
END
|
||||||
ELSE
|
ELSE
|
||||||
IF isExported & (nestLevel = 1) & (prevCh # 0X) THEN
|
IF isExported & (nestLevel = 1) THEN
|
||||||
IF i < OPM.MaxCommentLen - 1 THEN
|
IF i < OPM.MaxCommentLen - 1 THEN
|
||||||
commentText[i] := prevCh; INC(i)
|
(* Handle all characters including newlines *)
|
||||||
|
IF (ch = 0DX) OR (ch = 0AX) THEN
|
||||||
|
(* Add newline if buffer is empty or last char isn't already a newline *)
|
||||||
|
IF (i = 0) OR (commentText[i-1] # 0AX) THEN
|
||||||
|
commentText[i] := 0AX; INC(i)
|
||||||
|
END;
|
||||||
|
(* Handle CRLF by skipping the LF if we just saw CR *)
|
||||||
|
IF (ch = 0DX) THEN
|
||||||
|
prevCh := ch; OPM.Get(ch);
|
||||||
|
IF ch = 0AX THEN
|
||||||
|
prevCh := ch; OPM.Get(ch)
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
prevCh := ch; OPM.Get(ch)
|
||||||
|
END
|
||||||
|
ELSIF ch >= " " THEN
|
||||||
|
commentText[i] := ch; INC(i);
|
||||||
|
prevCh := ch; OPM.Get(ch)
|
||||||
|
ELSE
|
||||||
|
(* Skip control characters *)
|
||||||
|
prevCh := ch; OPM.Get(ch)
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
prevCh := ch; OPM.Get(ch)
|
||||||
END
|
END
|
||||||
END;
|
ELSE
|
||||||
|
prevCh := ch; OPM.Get(ch)
|
||||||
prevCh := ch
|
END
|
||||||
END;
|
END
|
||||||
|
|
||||||
IF nestLevel > 0 THEN OPM.Get(ch) END
|
|
||||||
END;
|
END;
|
||||||
|
|
||||||
IF ch = OPM.Eot THEN
|
IF ch = OPM.Eot THEN
|
||||||
err(5)
|
err(5)
|
||||||
END;
|
END;
|
||||||
(*
|
|
||||||
IF isExported & (nestLevel = 0) & (prevCh # 0X) & (prevCh # "*") & (i < OPM.MaxCommentLen - 2) THEN
|
|
||||||
commentText[i] := prevCh;
|
|
||||||
INC(i)
|
|
||||||
END;
|
|
||||||
*)
|
|
||||||
IF isExported & (nestLevel = 0) & (prevCh # 0X) & (prevCh # "*") THEN
|
|
||||||
IF i < OPM.MaxCommentLen - 1 THEN
|
|
||||||
commentText[i] := prevCh;
|
|
||||||
INC(i)
|
|
||||||
ELSE
|
|
||||||
OPM.LogWStr("Truncating final comment character"); OPM.LogWLn
|
|
||||||
END
|
|
||||||
END;
|
|
||||||
|
|
||||||
|
|
||||||
IF isExported THEN
|
IF isExported THEN
|
||||||
IF i >= OPM.MaxCommentLen THEN
|
IF i >= OPM.MaxCommentLen THEN
|
||||||
|
|
@ -272,7 +280,6 @@ MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *)
|
||||||
commentText[i] := 0X;
|
commentText[i] := 0X;
|
||||||
OPM.StoreComment(commentText)
|
OPM.StoreComment(commentText)
|
||||||
END;
|
END;
|
||||||
|
|
||||||
END Comment;
|
END Comment;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1019,7 +1019,7 @@ END InStruct;
|
||||||
PROCEDURE InObj(mno: SHORTINT): Object; (* first number in impCtxt.nextTag *)
|
PROCEDURE InObj(mno: SHORTINT): Object; (* first number in impCtxt.nextTag *)
|
||||||
VAR i, s: INTEGER; ch: CHAR; obj, old: Object; typ: Struct;
|
VAR i, s: INTEGER; ch: CHAR; obj, old: Object; typ: Struct;
|
||||||
tag: LONGINT; ext: ConstExt;
|
tag: LONGINT; ext: ConstExt;
|
||||||
commentText: OPS.Name;
|
commentText: ARRAY OPM.MaxCommentLen OF CHAR;
|
||||||
hasComment : BOOLEAN;
|
hasComment : BOOLEAN;
|
||||||
j: INTEGER;
|
j: INTEGER;
|
||||||
len: LONGINT;
|
len: LONGINT;
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,17 @@ MODULE BrowserCmd; (* RC 29.10.93 *) (* object model 4.12.93, command line ver
|
||||||
IF obj^.comment # NIL THEN
|
IF obj^.comment # NIL THEN
|
||||||
Indent(1);
|
Indent(1);
|
||||||
Ws("(** ");
|
Ws("(** ");
|
||||||
Ws(obj^.comment^);
|
(* Handle multi-line comments *)
|
||||||
|
i := 0;
|
||||||
|
WHILE obj^.comment^[i] # 0X DO
|
||||||
|
IF obj^.comment^[i] = 0AX THEN
|
||||||
|
Ws(" *)"); Wln;
|
||||||
|
Indent(1); Ws(" ");
|
||||||
|
ELSE
|
||||||
|
Wc(obj^.comment^[i])
|
||||||
|
END;
|
||||||
|
INC(i)
|
||||||
|
END;
|
||||||
Ws(" *)");
|
Ws(" *)");
|
||||||
Wln
|
Wln
|
||||||
END;
|
END;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue