Browse Source

* handling of -Sd to handle delphi comments correctly (no nesting)

git-svn-id: trunk@769 -
florian 20 years ago
parent
commit
fce02e3fb8
2 changed files with 13 additions and 3 deletions
  1. 9 2
      fcl/passrc/pparser.pp
  2. 4 1
      fcl/passrc/pscanner.pp

+ 9 - 2
fcl/passrc/pparser.pp

@@ -19,7 +19,7 @@ unit PParser;
 
 interface
 
-uses SysUtils, PasTree;
+uses SysUtils, PasTree, PScanner;
 
 resourcestring
   SErrNoSourceGiven = 'No source file specified';
@@ -81,7 +81,7 @@ function ParseSource(AEngine: TPasTreeContainer;
 
 implementation
 
-uses Classes, PScanner;
+uses Classes;
 
 type
 
@@ -108,6 +108,7 @@ type
     function CreateElement(AClass: TPTreeElement; const AName: String;
       AParent: TPasElement; AVisibility: TPasMemberVisibility): TPasElement;
   public
+    Options : set of TPOptions;
     constructor Create(AScanner: TPascalScanner; AFileResolver: TFileResolver;
       AEngine: TPasTreeContainer);
     function CurTokenName: String;
@@ -1889,6 +1890,12 @@ var
         'F':
           if s[3] = 'i' then
             FileResolver.AddIncludePath(Copy(s, 4, Length(s)));
+        'S':
+          if s[3]='d' then
+            begin
+              include(Scanner.Options,po_delphi);
+              include(Parser.Options,po_delphi);
+            end;
       end;
     end else
       if Filename <> '' then

+ 4 - 1
fcl/passrc/pscanner.pp

@@ -164,6 +164,8 @@ type
   TPascalScannerPPSkipMode = (ppSkipNone, ppSkipIfBranch, ppSkipElseBranch,
     ppSkipAll);
 
+  TPOptions = (po_delphi);
+
   TPascalScanner = class
   private
     FFileResolver: TFileResolver;
@@ -190,6 +192,7 @@ type
     procedure Error(const Msg: string; Args: array of Const);
     function DoFetchToken: TToken;
   public
+    Options : set of TPOptions;
     constructor Create(AFileResolver: TFileResolver);
     destructor Destroy; override;
     procedure OpenFile(const AFilename: string);
@@ -809,7 +812,7 @@ begin
             TokenStart := TokenStr;
           end else
           begin
-            if TokenStr[0] = '{' then
+            if not(po_delphi in Options) and (TokenStr[0] = '{') then
               Inc(NestingLevel)
             else if TokenStr[0] = '}' then
               Dec(NestingLevel);