Browse Source

* patch for ^\ by Dmitry, bug #16341

git-svn-id: trunk@15727 -
marco 15 years ago
parent
commit
a78a3f1171
2 changed files with 16 additions and 0 deletions
  1. 9 0
      packages/fcl-passrc/src/pparser.pp
  2. 7 0
      packages/fcl-passrc/src/pscanner.pp

+ 9 - 0
packages/fcl-passrc/src/pparser.pp

@@ -756,6 +756,15 @@ begin
     tkfalse, tktrue:    x:=TBoolConstExpr.Create(pekBoolConst, CurToken=tktrue);
     tkfalse, tktrue:    x:=TBoolConstExpr.Create(pekBoolConst, CurToken=tktrue);
     tknil:              x:=TNilExpr.Create;
     tknil:              x:=TNilExpr.Create;
     tkSquaredBraceOpen: x:=ParseParams(pekSet);
     tkSquaredBraceOpen: x:=ParseParams(pekSet);
+    tkCaret: begin
+      // ^A..^_ characters. See #16341
+      NextToken;
+      if not (length(CurTokenText)=1) or not (CurTokenText[1] in ['A'..'_']) then begin
+        UngetToken;
+        ParseExc(SParserExpectedIdentifier);
+      end;
+      x:=TPrimitiveExpr.Create(pekString, '^'+CurTokenText);
+    end;
   else
   else
     ParseExc(SParserExpectedIdentifier);
     ParseExc(SParserExpectedIdentifier);
   end;
   end;

+ 7 - 0
packages/fcl-passrc/src/pscanner.pp

@@ -59,6 +59,7 @@ type
     tkSquaredBraceOpen,      // '['
     tkSquaredBraceOpen,      // '['
     tkSquaredBraceClose,     // ']'
     tkSquaredBraceClose,     // ']'
     tkCaret,                 // '^'
     tkCaret,                 // '^'
+    tkBackslash,             // '\'
     // Two-character tokens
     // Two-character tokens
     tkDotDot,                // '..'
     tkDotDot,                // '..'
     tkAssign,                // ':='
     tkAssign,                // ':='
@@ -260,6 +261,7 @@ const
     '[',
     '[',
     ']',
     ']',
     '^',
     '^',
+    '\',
     '..',
     '..',
     ':=',
     ':=',
     '<>',
     '<>',
@@ -916,6 +918,11 @@ begin
         Inc(TokenStr);
         Inc(TokenStr);
         Result := tkCaret;
         Result := tkCaret;
       end;
       end;
+    '\':
+      begin
+        Inc(TokenStr);
+        Result := tkBackslash;
+      end;
     '{':        // Multi-line comment
     '{':        // Multi-line comment
       begin
       begin
         Inc(TokenStr);
         Inc(TokenStr);