* Fix bug #30720, } is processed wrongly when scanning and PPIsSkipping

git-svn-id: trunk@34879 -
This commit is contained in:
michael 2016-11-12 21:55:43 +00:00
parent 1f498123c6
commit 5d4f605a39
2 changed files with 23 additions and 1 deletions

View File

@ -1641,6 +1641,7 @@ var
i: TToken;
OldLength, SectionLength, NestingLevel, Index: Integer;
begin
result:=tkLineEnding;
if TokenStr = nil then
if not FetchLine then
begin
@ -2005,7 +2006,7 @@ begin
begin
if not(po_delphi in Options) and (TokenStr[0] = '{') then
Inc(NestingLevel)
else if TokenStr[0] = '}' then
else if (TokenStr[0] = '}') and not PPIsSkipping then
Dec(NestingLevel);
Inc(TokenStr);
end;

View File

@ -209,6 +209,7 @@ type
Procedure TestDefine11;
Procedure TestDefine12;
Procedure TestDefine13;
Procedure TestDefine14;
Procedure TestInclude;
Procedure TestInclude2;
Procedure TestUnDefine1;
@ -1396,6 +1397,26 @@ begin
TestTokens([tkin],'{$IFDEF ALWAYS} }; ą è {$ELSE} in {$ENDIF}');
end;
procedure TTestScanner.TestDefine14;
Const
Source = '{$ifdef NEVER_DEFINED}' +sLineBreak+
'type'+sLineBreak+
' TNPEventModel = ('+sLineBreak+
' NPEventModelCarbon = 0,'+sLineBreak+
' NPEventModelCocoa = 1'+sLineBreak+
'}; // yes, this is an error... except this code should never be included.'+sLineBreak+
'ą'+sLineBreak+
'|'+sLineBreak+
'{$endif}'+sLineBreak+
''+sLineBreak+
'begin'+sLineBreak+
'end.'+sLineBreak;
begin
NewSource(Source,True);
While FScanner.fetchToken<>tkEOF do
end;
procedure TTestScanner.TestInclude;
begin
FResolver.AddStream('myinclude.inc',TStringStream.Create('if true then'));