From 382d5bd835b1995fd4ca9b5456e4d3d53217d189 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 24 Jul 1999 11:20:59 +0000 Subject: [PATCH] * directives are allowed in (* *) * fixed parsing of (* between conditional code --- compiler/scanner.pas | 63 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/compiler/scanner.pas b/compiler/scanner.pas index cd83c6496f..11f485b9a6 100644 --- a/compiler/scanner.pas +++ b/compiler/scanner.pas @@ -44,6 +44,8 @@ unit scanner; type + tcommentstyle = (comment_none,comment_tp,comment_oldtp,comment_delphi,comment_c); + pmacrobuffer = ^tmacrobuffer; tmacrobuffer = array[0..maxmacrolen-1] of char; @@ -125,7 +127,7 @@ unit scanner; orgpattern, pattern : string; current_scanner : pscannerfile; - + aktcommentstyle : tcommentstyle; { needed to use read_comment from directives } implementation @@ -736,12 +738,26 @@ implementation i:=0; repeat case c of - '}' : begin + '}' : + if aktcommentstyle=comment_tp then + begin + readchar; + dec_comment_level; + break; + end; + '*' : + if aktcommentstyle=comment_oldtp then + begin + readchar; + if c=')' then + begin readchar; dec_comment_level; break; end; - #26 : Message(scan_f_end_of_file); + end; + #26 : + Message(scan_f_end_of_file); else begin if (i<255) then @@ -839,8 +855,29 @@ implementation if found=1 then found:=2; end; + '''' : + if (m_tp in aktmodeswitches) or + (m_delphi in aktmodeswitches) then + begin + repeat + readchar; + case c of + #26 : + Message(scan_f_end_of_file); + newline : + break; + '''' : + begin + readchar; + if c<>'''' then + break; + end; + end; + until false; + end; '(' : - if (m_tp in aktmodeswitches) then + if (m_tp in aktmodeswitches) or + (m_delphi in aktmodeswitches) then begin readchar; if c='*' then @@ -873,6 +910,7 @@ implementation procedure tscannerfile.skipcomment; begin + aktcommentstyle:=comment_tp; readchar; inc_comment_level; { handle compiler switches } @@ -897,11 +935,13 @@ implementation #13 : linebreak; end; end; + aktcommentstyle:=comment_none; end; procedure tscannerfile.skipdelphicomment; begin + aktcommentstyle:=comment_delphi; inc_comment_level; readchar; { this is currently not supported } @@ -915,6 +955,7 @@ implementation readchar; end; dec_comment_level; + aktcommentstyle:=comment_none; end; @@ -922,11 +963,12 @@ implementation var found : longint; begin + aktcommentstyle:=comment_oldtp; inc_comment_level; readchar; { this is currently not supported } - if c='$' then - Message(scan_e_wrong_styled_switch); + if (c='$') then + handledirectives; { skip comment } while (comment_level>0) do begin @@ -969,6 +1011,7 @@ implementation end; until (found=2); end; + aktcommentstyle:=comment_none; end; @@ -976,6 +1019,7 @@ implementation var found : longint; begin + aktcommentstyle:=comment_c; inc_comment_level; readchar; { this is currently not supported } @@ -1023,6 +1067,7 @@ implementation end; until (found=2); end; + aktcommentstyle:=comment_none; end; @@ -1673,7 +1718,11 @@ begin end. { $Log$ - Revision 1.87 1999-07-18 10:20:02 florian + Revision 1.88 1999-07-24 11:20:59 peter + * directives are allowed in (* *) + * fixed parsing of (* between conditional code + + Revision 1.87 1999/07/18 10:20:02 florian * made it compilable with Dlephi 4 again + fixed problem with large stack allocations on win32