fcl-passrc: comments, analyzer option paoKeepPublished

git-svn-id: trunk@35715 -
This commit is contained in:
Mattias Gaertner 2017-04-03 07:55:49 +00:00
parent bceb016f5f
commit 632b973ed6
3 changed files with 32 additions and 22 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;