Browse Source

fcl-passrc: resolver: fixed checking class vars and class types

git-svn-id: trunk@38055 -
Mattias Gaertner 7 years ago
parent
commit
8ffcfc4552
2 changed files with 6 additions and 3 deletions
  1. 2 1
      packages/fcl-passrc/src/pasresolver.pp
  2. 4 2
      packages/fcl-passrc/src/pparser.pp

+ 2 - 1
packages/fcl-passrc/src/pasresolver.pp

@@ -4473,7 +4473,7 @@ var
   C: TClass;
   C: TClass;
 begin
 begin
   C:=El.ClassType;
   C:=El.ClassType;
-  if C=TPasVariable then
+  if (C=TPasVariable) or (C=TPasConst) then
     FinishVariable(TPasVariable(El))
     FinishVariable(TPasVariable(El))
   else if C=TPasProperty then
   else if C=TPasProperty then
     FinishPropertyOfClass(TPasProperty(El))
     FinishPropertyOfClass(TPasProperty(El))
@@ -4484,6 +4484,7 @@ begin
     {$IFDEF VerbosePasResolver}
     {$IFDEF VerbosePasResolver}
     writeln('TPasResolver.FinishDeclaration ',GetObjName(El));
     writeln('TPasResolver.FinishDeclaration ',GetObjName(El));
     {$ENDIF}
     {$ENDIF}
+    RaiseNotYetImplemented(20180127121557,El);
     end;
     end;
 end;
 end;
 
 

+ 4 - 2
packages/fcl-passrc/src/pparser.pp

@@ -3176,9 +3176,9 @@ begin
                   for i := 0 to List.Count - 1 do
                   for i := 0 to List.Count - 1 do
                   begin
                   begin
                     VarEl := TPasVariable(List[i]);
                     VarEl := TPasVariable(List[i]);
-                    Engine.FinishScope(stDeclaration,VarEl);
                     Declarations.Declarations.Add(VarEl);
                     Declarations.Declarations.Add(VarEl);
                     Declarations.Variables.Add(VarEl);
                     Declarations.Variables.Add(VarEl);
+                    Engine.FinishScope(stDeclaration,VarEl);
                   end;
                   end;
                   CheckToken(tkSemicolon);
                   CheckToken(tkSemicolon);
                 finally
                 finally
@@ -5915,6 +5915,7 @@ begin
       begin
       begin
       Element := TPasElement(VarList[i]);
       Element := TPasElement(VarList[i]);
       Element.Visibility := AVisibility;
       Element.Visibility := AVisibility;
+      AType.Members.Add(Element);
       if (Element is TPasVariable) then
       if (Element is TPasVariable) then
         begin
         begin
         VarEl:=TPasVariable(Element);
         VarEl:=TPasVariable(Element);
@@ -5924,7 +5925,6 @@ begin
           Include(VarEl.VarModifiers,vmStatic);
           Include(VarEl.VarModifiers,vmStatic);
         Engine.FinishScope(stDeclaration,VarEl);
         Engine.FinishScope(stDeclaration,VarEl);
         end;
         end;
-      AType.Members.Add(Element);
       end;
       end;
   finally
   finally
     VarList.Free;
     VarList.Free;
@@ -5942,6 +5942,7 @@ begin
     T:=ParseTypeDecl(AType);
     T:=ParseTypeDecl(AType);
     T.Visibility:=AVisibility;
     T.Visibility:=AVisibility;
     AType.Members.Add(t);
     AType.Members.Add(t);
+    Engine.FinishScope(stTypeDef,T);
 //    Writeln(CurtokenString,' ',TokenInfos[Curtoken]);
 //    Writeln(CurtokenString,' ',TokenInfos[Curtoken]);
     NextToken;
     NextToken;
     Done:=(Curtoken<>tkIdentifier) or CheckVisibility(CurtokenString,AVisibility);
     Done:=(Curtoken<>tkIdentifier) or CheckVisibility(CurtokenString,AVisibility);
@@ -5961,6 +5962,7 @@ begin
     C:=ParseConstDecl(AType);
     C:=ParseConstDecl(AType);
     C.Visibility:=AVisibility;
     C.Visibility:=AVisibility;
     AType.Members.Add(C);
     AType.Members.Add(C);
+    Engine.FinishScope(stDeclaration,C);
 //    Writeln(CurtokenString,' ',TokenInfos[Curtoken]);
 //    Writeln(CurtokenString,' ',TokenInfos[Curtoken]);
     NextToken;
     NextToken;
     Done:=(Curtoken<>tkIdentifier) or CheckVisibility(CurtokenString,AVisibility);
     Done:=(Curtoken<>tkIdentifier) or CheckVisibility(CurtokenString,AVisibility);