From 632b973ed6578a9acab63394c3e49b13c5fd672a Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Mon, 3 Apr 2017 07:55:49 +0000 Subject: [PATCH] fcl-passrc: comments, analyzer option paoKeepPublished git-svn-id: trunk@35715 - --- packages/fcl-passrc/src/pasresolver.pp | 44 +++++++++++++--------- packages/fcl-passrc/src/pastree.pp | 4 +- packages/fcl-passrc/src/pasuseanalyzer.pas | 6 +-- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 32420f4c6e..25e68bf723 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -1052,6 +1052,7 @@ type procedure ResolveImplLabelMark(Mark: TPasImplLabelMark); virtual; procedure ResolveImplForLoop(Loop: TPasImplForLoop); virtual; procedure ResolveImplWithDo(El: TPasImplWithDo); virtual; + procedure ResolveImplAsm(El: TPasImplAsmStatement); virtual; procedure ResolveImplAssign(El: TPasImplAssign); virtual; procedure ResolveImplSimple(El: TPasImplSimple); virtual; procedure ResolveImplRaise(El: TPasImplRaise); virtual; @@ -4178,56 +4179,60 @@ begin end; procedure TPasResolver.ResolveImplElement(El: TPasImplElement); +var + C: TClass; begin //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)) - else if El.ClassType=TPasImplAssign then + else if C=TPasImplAssign then ResolveImplAssign(TPasImplAssign(El)) - else if El.ClassType=TPasImplSimple then + else if C=TPasImplSimple then ResolveImplSimple(TPasImplSimple(El)) - else if El.ClassType=TPasImplBlock then + else if C=TPasImplBlock then ResolveImplBlock(TPasImplBlock(El)) - else if El.ClassType=TPasImplRepeatUntil then + else if C=TPasImplRepeatUntil then begin ResolveImplBlock(TPasImplBlock(El)); ResolveStatementConditionExpr(TPasImplRepeatUntil(El).ConditionExpr); end - else if El.ClassType=TPasImplIfElse then + else if C=TPasImplIfElse then begin ResolveStatementConditionExpr(TPasImplIfElse(El).ConditionExpr); ResolveImplElement(TPasImplIfElse(El).IfBranch); ResolveImplElement(TPasImplIfElse(El).ElseBranch); end - else if El.ClassType=TPasImplWhileDo then + else if C=TPasImplWhileDo then begin ResolveStatementConditionExpr(TPasImplWhileDo(El).ConditionExpr); ResolveImplElement(TPasImplWhileDo(El).Body); end - else if El.ClassType=TPasImplCaseOf then + else if C=TPasImplCaseOf then ResolveImplCaseOf(TPasImplCaseOf(El)) - else if El.ClassType=TPasImplLabelMark then + else if C=TPasImplLabelMark then ResolveImplLabelMark(TPasImplLabelMark(El)) - else if El.ClassType=TPasImplForLoop then + else if C=TPasImplForLoop then ResolveImplForLoop(TPasImplForLoop(El)) - else if El.ClassType=TPasImplTry then + else if C=TPasImplTry then begin ResolveImplBlock(TPasImplTry(El)); ResolveImplBlock(TPasImplTry(El).FinallyExcept); ResolveImplBlock(TPasImplTry(El).ElseBranch); end - else if El.ClassType=TPasImplExceptOn then + else if C=TPasImplExceptOn then // handled in FinishExceptOnStatement - else if El.ClassType=TPasImplRaise then + else if C=TPasImplRaise then ResolveImplRaise(TPasImplRaise(El)) - else if El.ClassType=TPasImplCommand then + else if C=TPasImplCommand then begin if TPasImplCommand(El).Command<>'' then RaiseNotYetImplemented(20160922163442,El,'TPasResolver.ResolveImplElement'); 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)) else RaiseNotYetImplemented(20160922163445,El,'TPasResolver.ResolveImplElement'); @@ -4399,6 +4404,11 @@ begin PopScope; end; +procedure TPasResolver.ResolveImplAsm(El: TPasImplAsmStatement); +begin + if El=nil then ; +end; + procedure TPasResolver.ResolveImplAssign(El: TPasImplAssign); var LeftResolved, RightResolved: TPasResolverResult; diff --git a/packages/fcl-passrc/src/pastree.pp b/packages/fcl-passrc/src/pastree.pp index 8d4486251e..468dbe1be2 100644 --- a/packages/fcl-passrc/src/pastree.pp +++ b/packages/fcl-passrc/src/pastree.pp @@ -854,9 +854,9 @@ type public ProcType : TPasProcedureType; Body : TProcedureBody; - PublicName, + PublicName, // e.g. public PublicName; LibrarySymbolName, - LibraryExpr : TPasExpr; + LibraryExpr : TPasExpr; // e.g. external LibraryExpr name LibrarySymbolName; DispIDExpr : TPasExpr; AliasName : String; Procedure AddModifier(AModifier : TProcedureModifier); diff --git a/packages/fcl-passrc/src/pasuseanalyzer.pas b/packages/fcl-passrc/src/pasuseanalyzer.pas index 497fe96da2..f680e093b5 100644 --- a/packages/fcl-passrc/src/pasuseanalyzer.pas +++ b/packages/fcl-passrc/src/pasuseanalyzer.pas @@ -147,7 +147,7 @@ type end; 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) ); TPasAnalyzerOptions = set of TPasAnalyzerOption; @@ -1112,7 +1112,7 @@ begin UseType(TPasType(El.Interfaces[i]),paumElement); end; // members - UsePublished:=(Mode<>paumAllExports) and (paoAlwaysUsePublished in Options); + UsePublished:=(Mode<>paumAllExports) and (paoKeepPublished in Options); for i:=0 to El.Members.Count-1 do begin Member:=TPasElement(El.Members[i]); @@ -1685,7 +1685,7 @@ begin if IsExport(El) then exit(false); case El.Visibility of visPrivate,visStrictPrivate: exit(true); - visPublished: if paoAlwaysUsePublished in Options then exit(false); + visPublished: if paoKeepPublished in Options then exit(false); end; Result:=IsModuleInternal(El.Parent); end;