mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 17:49:27 +02:00
fcl-passrc: comments, analyzer option paoKeepPublished
git-svn-id: trunk@35715 -
This commit is contained in:
parent
bceb016f5f
commit
632b973ed6
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user