Browse Source

* Patch for class abstract and class sealed support by Dimitry Boyarintsev.
Mnatis 16340

git-svn-id: trunk@15178 -

marco 15 years ago
parent
commit
c830e76137
2 changed files with 20 additions and 0 deletions
  1. 7 0
      packages/fcl-passrc/src/pastree.pp
  2. 13 0
      packages/fcl-passrc/src/pparser.pp

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

@@ -349,6 +349,9 @@ type
     IsForward : Boolean;
     Members: TList;     // array of TPasElement objects
     InterfaceGUID : string; // 15/06/07 - Inoussa
+
+    ClassVars: TList;   // class vars
+    Modifiers: TStringList;
   end;
 
   TArgumentAccess = (argDefault, argConst, argVar, argOut);
@@ -1170,6 +1173,8 @@ begin
   inherited Create(AName, AParent);
   IsPacked := False;                     // 12/04/04 - Dave - Added
   Members := TList.Create;
+  Modifiers := TStringList.Create;
+  ClassVars := TList.Create;
 end;
 
 destructor TPasClassType.Destroy;
@@ -1181,6 +1186,8 @@ begin
   Members.Free;
   if Assigned(AncestorType) then
     AncestorType.Release;
+  Modifiers.Free;
+  ClassVars.Free;
   inherited Destroy;
 end;
 

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

@@ -2758,6 +2758,16 @@ begin
   try
     TPasClassType(Result).ObjKind := AObjKind;
 
+    // nettism/new delphi features
+    if (CurToken = tkIdentifier) and (AObjKind = okClass) then begin
+      s := LowerCase(CurTokenString);
+      if (s = 'sealed') or (s = 'abstract') then begin
+        TPasClassType(Result).Modifiers.Add(s);
+        NextToken;
+      end else
+        ExpectToken(tkSemicolon);
+    end;
+
     // Parse ancestor list
     if CurToken = tkBraceOpen then
     begin
@@ -2833,6 +2843,9 @@ begin
               TPasClassType(Result).Members.Add(Element);
               ParseProperty(Element);
             end;
+          tkVar: // vars (nettism/new delphi features)
+            if AObjKind<>okClass then ExpectToken(tkSemicolon);
+          //todo: class vars
         end; // end case
         NextToken;
       end;