Browse Source

* Fix bug ID #38269 (caret can be start of string)

git-svn-id: trunk@47889 -
(cherry picked from commit 73dd1afd7da796221696f4f8865915e206e7907f)
michael 4 years ago
parent
commit
f68fe3a1e9
2 changed files with 10 additions and 3 deletions
  1. 3 3
      packages/fcl-passrc/src/pscanner.pp
  2. 7 0
      packages/fcl-passrc/tests/tcscanner.pas

+ 3 - 3
packages/fcl-passrc/src/pscanner.pp

@@ -3106,7 +3106,8 @@ end;
 function TPascalScanner.FetchToken: TToken;
 
 begin
-  FPreviousToken:=FCurToken;
+  if Not (FCurToken in [tkWhiteSpace,tkLineEnding]) then
+    FPreviousToken:=FCurToken;
   while true do
   begin
     Result := DoFetchToken;
@@ -5051,8 +5052,7 @@ begin
       begin
       if ForceCaret or PPisSkipping or
          (PreviousToken in [tkeof,tkTab,tkLineEnding,tkComment,tkIdentifier,
-                   tkNil,tkOperator,tkBraceClose,tkSquaredBraceClose,tkCaret,
-                   tkWhitespace]) then
+                   tkNil,tkOperator,tkBraceClose,tkSquaredBraceClose,tkCaret]) then
         begin
         Inc(FTokenPos);
         Result := tkCaret;

+ 7 - 0
packages/fcl-passrc/tests/tcscanner.pas

@@ -115,6 +115,7 @@ type
     procedure TestNumber;
     procedure TestChar;
     procedure TestCharString;
+    procedure TestCaretString;
     procedure TestBraceOpen;
     procedure TestBraceClose;
     procedure TestMul;
@@ -831,6 +832,12 @@ begin
   TestToken(pscanner.tkChar,'''A''');
 end;
 
+procedure TTestScanner.TestCaretString;
+begin
+
+  TestTokens([tkIdentifier,tkWhiteSpace,tkEqual,tkwhiteSpace,pscanner.tkString,tkSemicolon],'a = ^C''abc'';',false);
+end;
+
 procedure TTestScanner.TestNumber;
 
 begin