Processing Source Line Characters

The NextNonCommentCharacter function reads and processes characters from the source line buffer. It returns pointer to the next non-comment character.  The null (#0) character means end of line. Turbo Pascal tries to read the next source line. If this fails it tries to return to the previous source file (if $I include file was loaded). Whitespace characters (#1 to space) are skipped. If comment is detected ('{' or '(*' characters) it is processed together with compiler directives. In all other cases the function returns pointer to the source line character. This fuction is called by the function that extracts tokens.
Function NextNonCommentCharacter: PChar;
Var TempPtr: PChar;
    C: Char;
    TwoChars: TTwoChars;
begin
  TempPtr := Ptr (Seg (CurrentLine^), CurrentSourceFile^.CurrentPosition);
  Repeat
    C := TempPtr^;
    Inc (TempPtr);
    If C = #0 then begin
                     If NextLine then
                       begin
                         TempPtr := CurrentLine;
                         Continue;
                       end;
                     CurrentSourceFile^.CurrentPosition := Ofs (TempPtr^);
                     CreateSourceFilesRecord;
                     ReturnToPreviousSourceFile;
                     TempPtr := Ptr (Seg (CurrentLine^), CurrentSourceFile^.CurrentPosition);
                     Continue;
                   end;
    If C In [#1..' '] then Continue
      else begin
             TwoChars := PTwoChars (TempPtr - 1)^;
             If TwoChars.First = '{' then
               begin
                 ProcessComment (TempPtr, TwoChars.First);
                 Continue;
               end;
             If TwoChars.Both = '(*' then
               begin
                 Inc (TempPtr);
                 ProcessComment (TempPtr, TwoChars.Second);
                 Continue;
               end;
             NextNonCommentCharacter := TempPtr - 1;
             Exit;
           end;
  until False;
  NextNonCommentCharacter := TempPtr - 1;
end;
 
 
 
© 2017 Turbo Pascal | Privacy Policy