Browse Source

pastojs: fixed parsing multi line comment

mattias 1 year ago
parent
commit
20ac72e7aa
2 changed files with 8 additions and 7 deletions
  1. 1 1
      packages/fcl-passrc/src/pparser.pp
  2. 7 6
      packages/fcl-passrc/src/pscanner.pp

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

@@ -1389,7 +1389,7 @@ begin
     p^.TokenPos:=Scanner.CurTokenPos;
     p^.TokenPos:=Scanner.CurTokenPos;
     P^.IsEscaped:=Scanner.CurTokenEscaped;
     P^.IsEscaped:=Scanner.CurTokenEscaped;
     end;
     end;
-  //writeln('TPasParser.NextToken END Start=',FTokenRingStart,' Cur=',FTokenRingCur,' End=',FTokenRingEnd,' Cur=',CurTokenString);
+  //writeln('TPasParser.NextToken END Start=',FTokenRingStart,' Cur=',FTokenRingCur,' End=',FTokenRingEnd,' Cur="',CurTokenString,'"');
 end;
 end;
 
 
 procedure TPasParser.ChangeToken(tk: TToken);
 procedure TPasParser.ChangeToken(tk: TToken);

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

@@ -5481,6 +5481,9 @@ begin
   {$ifdef UsePChar}
   {$ifdef UsePChar}
   LE:=LineEnding;
   LE:=LineEnding;
   OldLength := 0;
   OldLength := 0;
+  {$else}
+  s:=FCurLine;
+  l:=length(FCurLine);
   {$endif}
   {$endif}
   NestingLevel := 0;
   NestingLevel := 0;
   repeat
   repeat
@@ -5536,7 +5539,7 @@ begin
   {$endif}
   {$endif}
   Inc(FTokenPos);
   Inc(FTokenPos);
   Result := tkComment;
   Result := tkComment;
-  if (Copy(CurTokenString,1,1)='$') then
+  if (length(CurTokenString)>0) and (CurTokenString[1]='$') then
     Result:=HandleDirective(CurTokenString)
     Result:=HandleDirective(CurTokenString)
   else
   else
     DoHandleComment(Self, CurTokenString)
     DoHandleComment(Self, CurTokenString)
@@ -5547,7 +5550,7 @@ function TPascalScanner.DoFetchToken: TToken;
 var
 var
   TokenStart: {$ifdef UsePChar}PAnsiChar{$else}integer{$endif};
   TokenStart: {$ifdef UsePChar}PAnsiChar{$else}integer{$endif};
   i: TToken;
   i: TToken;
-  QuoteLen,SectionLength,  Index: Integer;
+  QuoteLen, SectionLength, Index: Integer;
   {$ifdef UsePChar}
   {$ifdef UsePChar}
   //
   //
   {$else}
   {$else}
@@ -5580,7 +5583,6 @@ var
   Function IsDelphiMultiLine (out QuoteLen : integer): Boolean;
   Function IsDelphiMultiLine (out QuoteLen : integer): Boolean;
   var
   var
     P : PAnsiChar;
     P : PAnsiChar;
-
   begin
   begin
     P:=FTokenPos;
     P:=FTokenPos;
     QuoteLen:=0;
     QuoteLen:=0;
@@ -5595,10 +5597,8 @@ var
   end;
   end;
   {$ELSE}
   {$ELSE}
   Function IsDelphiMultiLine(out Quotelen : integer) : Boolean;
   Function IsDelphiMultiLine(out Quotelen : integer) : Boolean;
-
   var
   var
     P : Integer;
     P : Integer;
-
   begin
   begin
     P:=FTokenPos;
     P:=FTokenPos;
     QuoteLen:=0;
     QuoteLen:=0;
@@ -5623,6 +5623,7 @@ begin
       begin
       begin
       Result := tkEOF;
       Result := tkEOF;
       FCurToken := Result;
       FCurToken := Result;
+      FCurTokenString := '';
       exit;
       exit;
       end;
       end;
   FCurTokenString := '';
   FCurTokenString := '';
@@ -5676,7 +5677,7 @@ begin
       end;
       end;
     '#':
     '#':
       Result:=DoFetchTextToken;
       Result:=DoFetchTextToken;
-    #39:
+    '''':
       if (msDelphiMultiLineStrings in CurrentModeSwitches) and IsDelphiMultiLine(Quotelen) then
       if (msDelphiMultiLineStrings in CurrentModeSwitches) and IsDelphiMultiLine(Quotelen) then
         Result:=DoFetchDelphiMultiLineTextToken(Quotelen)
         Result:=DoFetchDelphiMultiLineTextToken(Quotelen)
       else
       else