2
0
Эх сурвалжийг харах

fcl-passrc: fixed parsing ,^A

git-svn-id: trunk@43288 -
Mattias Gaertner 5 жил өмнө
parent
commit
202284dbfa

+ 3 - 4
packages/fcl-passrc/src/pparser.pp

@@ -2420,16 +2420,15 @@ begin
       end;
       end;
     tkCaret:
     tkCaret:
       begin
       begin
-      // is this still needed?
-      // ^A..^_ characters. See #16341
+      // Why is this still needed?
+      // ^A..^_ characters
       NextToken;
       NextToken;
       if not (length(CurTokenText)=1) or not (CurTokenText[1] in ['A'..'_']) then
       if not (length(CurTokenText)=1) or not (CurTokenText[1] in ['A'..'_']) then
         begin
         begin
         UngetToken;
         UngetToken;
         ParseExcExpectedIdentifier;
         ParseExcExpectedIdentifier;
         end;
         end;
-      Result:=CreatePrimitiveExpr(AParent,pekString, '^'+CurTokenText);
-      exit;
+      Last:=CreatePrimitiveExpr(AParent,pekString, '^'+CurTokenText);
       end;
       end;
     tkBraceOpen:
     tkBraceOpen:
       begin
       begin

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

@@ -140,7 +140,7 @@ type
     tkIdentifier,
     tkIdentifier,
     tkString,
     tkString,
     tkNumber,
     tkNumber,
-    tkChar,
+    tkChar, // ^A .. ^Z
     // Simple (one-character) tokens
     // Simple (one-character) tokens
     tkBraceOpen,             // '('
     tkBraceOpen,             // '('
     tkBraceClose,            // ')'
     tkBraceClose,            // ')'

+ 16 - 0
packages/fcl-passrc/tests/tcresolver.pas

@@ -808,6 +808,7 @@ type
     Procedure TestArray_OpenArrayAsDynArraySetLengthFail;
     Procedure TestArray_OpenArrayAsDynArraySetLengthFail;
     Procedure TestArray_OpenArrayAsDynArray;
     Procedure TestArray_OpenArrayAsDynArray;
     Procedure TestArray_OpenArrayDelphi;
     Procedure TestArray_OpenArrayDelphi;
+    Procedure TestArray_OpenArrayChar;
     Procedure TestArray_CopyConcat;
     Procedure TestArray_CopyConcat;
     Procedure TestStaticArray_CopyConcat;// ToDo
     Procedure TestStaticArray_CopyConcat;// ToDo
     Procedure TestArray_CopyMismatchFail;
     Procedure TestArray_CopyMismatchFail;
@@ -14713,6 +14714,21 @@ begin
   ParseProgram;
   ParseProgram;
 end;
 end;
 
 
+procedure TTestResolver.TestArray_OpenArrayChar;
+begin
+  StartProgram(false);
+  Add([
+  '{$mode delphi}',
+  'Function CharInSet(Ch: Char;Const CSet : array of char) : Boolean;',
+  'begin',
+  'end;',
+  'var Key: Char;',
+  'begin',
+  '  if CharInSet(Key, [^V, ^X, ^C]) then ;',
+  '']);
+  ParseProgram;
+end;
+
 procedure TTestResolver.TestArray_CopyConcat;
 procedure TTestResolver.TestArray_CopyConcat;
 begin
 begin
   StartProgram(false);
   StartProgram(false);