From a848b6fde274790aab9d4ced8b69ac019df8048c Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 23 Aug 2010 07:42:42 +0000 Subject: [PATCH] * Patch from Graeme Geldenhuys (bug 17237) extending scanner to report EOL and TAB git-svn-id: trunk@15877 - --- packages/fcl-passrc/src/pparser.pp | 10 ++++++---- packages/fcl-passrc/src/pscanner.pp | 28 +++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index ced9cf09ce..91fbde7d5b 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -92,16 +92,18 @@ uses Classes; var IsIdentStart: array[char] of boolean; -type +const + WhitespaceTokensToIgnore = [tkWhitespace, tkComment, tkLineEnding, tkTab]; +type TDeclType = (declNone, declConst, declResourcestring, declType, declVar, declThreadvar, declProperty); TProcType = (ptProcedure, ptFunction, ptOperator, ptConstructor, ptDestructor, ptClassProcedure, ptClassFunction); - TExprKind = (ek_Normal, ek_PropertyIndex); - + TExprKind = (ek_Normal, ek_PropertyIndex); + { TPasParser } TPasParser = class @@ -291,7 +293,7 @@ begin try repeat FCurToken := Scanner.FetchToken; - until not (FCurToken in [tkWhitespace, tkComment]); + until not (FCurToken in WhitespaceTokensToIgnore); except on e: EScannerError do raise EParserError.Create(e.Message, diff --git a/packages/fcl-passrc/src/pscanner.pp b/packages/fcl-passrc/src/pscanner.pp index 352abfce4d..670ecf2d50 100644 --- a/packages/fcl-passrc/src/pscanner.pp +++ b/packages/fcl-passrc/src/pscanner.pp @@ -138,7 +138,10 @@ type tkvar, tkwhile, tkwith, - tkxor); + tkxor, + tkLineEnding, + tkTab + ); TLineReader = class public @@ -339,7 +342,9 @@ const 'var', 'while', 'with', - 'xor' + 'xor', + 'LineEnding', + 'Tab' ); function FilenameIsAbsolute(const TheFilename: string):boolean; @@ -675,9 +680,9 @@ begin #0: // Empty line begin FetchLine; - Result := tkWhitespace; + Result := tkLineEnding; end; - #9, ' ': + ' ': begin Result := tkWhitespace; repeat @@ -688,7 +693,20 @@ begin FCurToken := Result; exit; end; - until not (TokenStr[0] in [#9, ' ']); + until not (TokenStr[0] in [' ']); + end; + #9: + begin + Result := tkTab; + repeat + Inc(TokenStr); + if TokenStr[0] = #0 then + if not FetchLine then + begin + FCurToken := Result; + exit; + end; + until not (TokenStr[0] in [#9]); end; '#', '''': Result:=DoFetchTextToken;