Browse Source

fcl-passrc: comments, analyzer option paoKeepPublished

git-svn-id: trunk@35715 -
Mattias Gaertner 8 years ago
parent
commit
632b973ed6

+ 27 - 17
packages/fcl-passrc/src/pasresolver.pp

@@ -1052,6 +1052,7 @@ type
     procedure ResolveImplLabelMark(Mark: TPasImplLabelMark); virtual;
     procedure ResolveImplLabelMark(Mark: TPasImplLabelMark); virtual;
     procedure ResolveImplForLoop(Loop: TPasImplForLoop); virtual;
     procedure ResolveImplForLoop(Loop: TPasImplForLoop); virtual;
     procedure ResolveImplWithDo(El: TPasImplWithDo); virtual;
     procedure ResolveImplWithDo(El: TPasImplWithDo); virtual;
+    procedure ResolveImplAsm(El: TPasImplAsmStatement); virtual;
     procedure ResolveImplAssign(El: TPasImplAssign); virtual;
     procedure ResolveImplAssign(El: TPasImplAssign); virtual;
     procedure ResolveImplSimple(El: TPasImplSimple); virtual;
     procedure ResolveImplSimple(El: TPasImplSimple); virtual;
     procedure ResolveImplRaise(El: TPasImplRaise); virtual;
     procedure ResolveImplRaise(El: TPasImplRaise); virtual;
@@ -4178,56 +4179,60 @@ begin
 end;
 end;
 
 
 procedure TPasResolver.ResolveImplElement(El: TPasImplElement);
 procedure TPasResolver.ResolveImplElement(El: TPasImplElement);
+var
+  C: TClass;
 begin
 begin
   //writeln('TPasResolver.ResolveImplElement ',GetObjName(El));
   //writeln('TPasResolver.ResolveImplElement ',GetObjName(El));
-  if El=nil then
-  else if El.ClassType=TPasImplBeginBlock then
+  if El=nil then exit;
+  C:=El.ClassType;
+  if C=TPasImplBeginBlock then
     ResolveImplBlock(TPasImplBeginBlock(El))
     ResolveImplBlock(TPasImplBeginBlock(El))
-  else if El.ClassType=TPasImplAssign then
+  else if C=TPasImplAssign then
     ResolveImplAssign(TPasImplAssign(El))
     ResolveImplAssign(TPasImplAssign(El))
-  else if El.ClassType=TPasImplSimple then
+  else if C=TPasImplSimple then
     ResolveImplSimple(TPasImplSimple(El))
     ResolveImplSimple(TPasImplSimple(El))
-  else if El.ClassType=TPasImplBlock then
+  else if C=TPasImplBlock then
     ResolveImplBlock(TPasImplBlock(El))
     ResolveImplBlock(TPasImplBlock(El))
-  else if El.ClassType=TPasImplRepeatUntil then
+  else if C=TPasImplRepeatUntil then
     begin
     begin
     ResolveImplBlock(TPasImplBlock(El));
     ResolveImplBlock(TPasImplBlock(El));
     ResolveStatementConditionExpr(TPasImplRepeatUntil(El).ConditionExpr);
     ResolveStatementConditionExpr(TPasImplRepeatUntil(El).ConditionExpr);
     end
     end
-  else if El.ClassType=TPasImplIfElse then
+  else if C=TPasImplIfElse then
     begin
     begin
     ResolveStatementConditionExpr(TPasImplIfElse(El).ConditionExpr);
     ResolveStatementConditionExpr(TPasImplIfElse(El).ConditionExpr);
     ResolveImplElement(TPasImplIfElse(El).IfBranch);
     ResolveImplElement(TPasImplIfElse(El).IfBranch);
     ResolveImplElement(TPasImplIfElse(El).ElseBranch);
     ResolveImplElement(TPasImplIfElse(El).ElseBranch);
     end
     end
-  else if El.ClassType=TPasImplWhileDo then
+  else if C=TPasImplWhileDo then
     begin
     begin
     ResolveStatementConditionExpr(TPasImplWhileDo(El).ConditionExpr);
     ResolveStatementConditionExpr(TPasImplWhileDo(El).ConditionExpr);
     ResolveImplElement(TPasImplWhileDo(El).Body);
     ResolveImplElement(TPasImplWhileDo(El).Body);
     end
     end
-  else if El.ClassType=TPasImplCaseOf then
+  else if C=TPasImplCaseOf then
     ResolveImplCaseOf(TPasImplCaseOf(El))
     ResolveImplCaseOf(TPasImplCaseOf(El))
-  else if El.ClassType=TPasImplLabelMark then
+  else if C=TPasImplLabelMark then
     ResolveImplLabelMark(TPasImplLabelMark(El))
     ResolveImplLabelMark(TPasImplLabelMark(El))
-  else if El.ClassType=TPasImplForLoop then
+  else if C=TPasImplForLoop then
     ResolveImplForLoop(TPasImplForLoop(El))
     ResolveImplForLoop(TPasImplForLoop(El))
-  else if El.ClassType=TPasImplTry then
+  else if C=TPasImplTry then
     begin
     begin
     ResolveImplBlock(TPasImplTry(El));
     ResolveImplBlock(TPasImplTry(El));
     ResolveImplBlock(TPasImplTry(El).FinallyExcept);
     ResolveImplBlock(TPasImplTry(El).FinallyExcept);
     ResolveImplBlock(TPasImplTry(El).ElseBranch);
     ResolveImplBlock(TPasImplTry(El).ElseBranch);
     end
     end
-  else if El.ClassType=TPasImplExceptOn then
+  else if C=TPasImplExceptOn then
     // handled in FinishExceptOnStatement
     // handled in FinishExceptOnStatement
-  else if El.ClassType=TPasImplRaise then
+  else if C=TPasImplRaise then
     ResolveImplRaise(TPasImplRaise(El))
     ResolveImplRaise(TPasImplRaise(El))
-  else if El.ClassType=TPasImplCommand then
+  else if C=TPasImplCommand then
     begin
     begin
     if TPasImplCommand(El).Command<>'' then
     if TPasImplCommand(El).Command<>'' then
       RaiseNotYetImplemented(20160922163442,El,'TPasResolver.ResolveImplElement');
       RaiseNotYetImplemented(20160922163442,El,'TPasResolver.ResolveImplElement');
     end
     end
-  else if El.ClassType=TPasImplAsmStatement then
-  else if El.ClassType=TPasImplWithDo then
+  else if C=TPasImplAsmStatement then
+    ResolveImplAsm(TPasImplAsmStatement(El))
+  else if C=TPasImplWithDo then
     ResolveImplWithDo(TPasImplWithDo(El))
     ResolveImplWithDo(TPasImplWithDo(El))
   else
   else
     RaiseNotYetImplemented(20160922163445,El,'TPasResolver.ResolveImplElement');
     RaiseNotYetImplemented(20160922163445,El,'TPasResolver.ResolveImplElement');
@@ -4399,6 +4404,11 @@ begin
     PopScope;
     PopScope;
 end;
 end;
 
 
+procedure TPasResolver.ResolveImplAsm(El: TPasImplAsmStatement);
+begin
+  if El=nil then ;
+end;
+
 procedure TPasResolver.ResolveImplAssign(El: TPasImplAssign);
 procedure TPasResolver.ResolveImplAssign(El: TPasImplAssign);
 var
 var
   LeftResolved, RightResolved: TPasResolverResult;
   LeftResolved, RightResolved: TPasResolverResult;

+ 2 - 2
packages/fcl-passrc/src/pastree.pp

@@ -854,9 +854,9 @@ type
   public
   public
     ProcType : TPasProcedureType;
     ProcType : TPasProcedureType;
     Body : TProcedureBody;
     Body : TProcedureBody;
-    PublicName,
+    PublicName, // e.g. public PublicName;
     LibrarySymbolName,
     LibrarySymbolName,
-    LibraryExpr : TPasExpr;
+    LibraryExpr : TPasExpr; // e.g. external LibraryExpr name LibrarySymbolName;
     DispIDExpr :  TPasExpr;
     DispIDExpr :  TPasExpr;
     AliasName : String;
     AliasName : String;
     Procedure AddModifier(AModifier : TProcedureModifier);
     Procedure AddModifier(AModifier : TProcedureModifier);

+ 3 - 3
packages/fcl-passrc/src/pasuseanalyzer.pas

@@ -147,7 +147,7 @@ type
   end;
   end;
 
 
   TPasAnalyzerOption = (
   TPasAnalyzerOption = (
-    paoAlwaysUsePublished, // when a class is used, all its published members are used as well
+    paoKeepPublished, // when a class is used, all its published members are used as well
     paoOnlyExports // default: use all class members accessible from outside (protected, but not private)
     paoOnlyExports // default: use all class members accessible from outside (protected, but not private)
     );
     );
   TPasAnalyzerOptions = set of TPasAnalyzerOption;
   TPasAnalyzerOptions = set of TPasAnalyzerOption;
@@ -1112,7 +1112,7 @@ begin
       UseType(TPasType(El.Interfaces[i]),paumElement);
       UseType(TPasType(El.Interfaces[i]),paumElement);
     end;
     end;
   // members
   // members
-  UsePublished:=(Mode<>paumAllExports) and (paoAlwaysUsePublished in Options);
+  UsePublished:=(Mode<>paumAllExports) and (paoKeepPublished in Options);
   for i:=0 to El.Members.Count-1 do
   for i:=0 to El.Members.Count-1 do
     begin
     begin
     Member:=TPasElement(El.Members[i]);
     Member:=TPasElement(El.Members[i]);
@@ -1685,7 +1685,7 @@ begin
   if IsExport(El) then exit(false);
   if IsExport(El) then exit(false);
   case El.Visibility of
   case El.Visibility of
   visPrivate,visStrictPrivate: exit(true);
   visPrivate,visStrictPrivate: exit(true);
-  visPublished: if paoAlwaysUsePublished in Options then exit(false);
+  visPublished: if paoKeepPublished in Options then exit(false);
   end;
   end;
   Result:=IsModuleInternal(El.Parent);
   Result:=IsModuleInternal(El.Parent);
 end;
 end;