Pārlūkot izejas kodu

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

git-svn-id: trunk@47889 -
michael 4 gadi atpakaļ
vecāks
revīzija
73dd1afd7d

+ 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