Browse Source

fcl-passrc: parser: nested specialize: parse shr as two gt

git-svn-id: trunk@36217 -
Mattias Gaertner 8 years ago
parent
commit
6708c4ecbc
1 changed files with 26 additions and 0 deletions
  1. 26 0
      packages/fcl-passrc/src/pparser.pp

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

@@ -330,6 +330,7 @@ type
     Function CurComments : TStrings;
     Function SavedComments : String;
     procedure NextToken; // read next non whitespace, non space
+    procedure ChangeToken(tk: TToken);
     procedure UngetToken;
     procedure CheckToken(tk: TToken);
     procedure CheckTokens(tk: TTokens);
@@ -917,6 +918,26 @@ begin
   end;
 end;
 
+procedure TPasParser.ChangeToken(tk: TToken);
+begin
+  //writeln('TPasParser.ChangeToken FTokenBufferSize=',FTokenBufferSize,' FTokenBufferIndex=',FTokenBufferIndex);
+  if (CurToken=tkshr) and (tk=tkGreaterThan) and (FTokenBufferSize=2)
+      and (FTokenBufferIndex=2) then
+    begin
+    // change current token '>>' into two '>'
+    FTokenBuffer[0]:=tkGreaterThan;
+    FTokenStringBuffer[0]:='<';
+    FTokenBuffer[1]:=tkGreaterThan;
+    FTokenStringBuffer[1]:='<';
+    FCommentsBuffer[0].Clear;
+    FCurToken:=tkGreaterThan;
+    FCurTokenString:='<';
+    FTokenBufferIndex:=1;
+    end
+  else
+    CheckToken(tk);
+end;
+
 procedure TPasParser.UngetToken;
 
 begin
@@ -3302,6 +3323,11 @@ begin
         NextToken;
         continue;
         end
+      else if CurToken=tkshr then
+        begin
+        ChangeToken(tkGreaterThan);
+        break;
+        end
       else if CurToken=tkGreaterThan then
         break
       else