|
@@ -1635,7 +1635,7 @@ type
|
|
procedure ResolveStatementConditionExpr(El: TPasExpr); virtual;
|
|
procedure ResolveStatementConditionExpr(El: TPasExpr); virtual;
|
|
procedure ResolveNameExpr(El: TPasExpr; const aName: string; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveNameExpr(El: TPasExpr; const aName: string; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveInherited(El: TInheritedExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveInherited(El: TInheritedExpr; Access: TResolvedRefAccess); virtual;
|
|
- procedure ResolveInheritedCall(El: TBinaryExpr; Access: TResolvedRefAccess); virtual;
|
|
|
|
|
|
+ procedure ResolveInheritedName(El: TBinaryExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveBinaryExpr(El: TBinaryExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveBinaryExpr(El: TBinaryExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveSubIdent(El: TBinaryExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveSubIdent(El: TBinaryExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveParamsExpr(Params: TParamsExpr; Access: TResolvedRefAccess); virtual;
|
|
procedure ResolveParamsExpr(Params: TParamsExpr; Access: TResolvedRefAccess); virtual;
|
|
@@ -10303,7 +10303,7 @@ begin
|
|
and (TBinaryExpr(El.Parent).OpCode=eopNone) then
|
|
and (TBinaryExpr(El.Parent).OpCode=eopNone) then
|
|
begin
|
|
begin
|
|
// e.g. 'inherited Proc;'
|
|
// e.g. 'inherited Proc;'
|
|
- ResolveInheritedCall(TBinaryExpr(El.Parent),Access);
|
|
|
|
|
|
+ ResolveInheritedName(TBinaryExpr(El.Parent),Access);
|
|
exit;
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -10377,11 +10377,11 @@ begin
|
|
sAbstractMethodsCannotBeCalledDirectly,[],El);
|
|
sAbstractMethodsCannotBeCalledDirectly,[],El);
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TPasResolver.ResolveInheritedCall(El: TBinaryExpr;
|
|
|
|
|
|
+procedure TPasResolver.ResolveInheritedName(El: TBinaryExpr;
|
|
Access: TResolvedRefAccess);
|
|
Access: TResolvedRefAccess);
|
|
// El.OpCode=eopNone
|
|
// El.OpCode=eopNone
|
|
// El.left is TInheritedExpr
|
|
// El.left is TInheritedExpr
|
|
-// El.right is the identifier and parameters
|
|
|
|
|
|
+// El.right is the identifier and/or paramexpr
|
|
var
|
|
var
|
|
SelfScope: TPasProcedureScope;
|
|
SelfScope: TPasProcedureScope;
|
|
ClassRecScope: TPasClassOrRecordScope;
|
|
ClassRecScope: TPasClassOrRecordScope;
|
|
@@ -10393,7 +10393,7 @@ var
|
|
InhScope: TPasInheritedScope;
|
|
InhScope: TPasInheritedScope;
|
|
begin
|
|
begin
|
|
{$IFDEF VerbosePasResolver}
|
|
{$IFDEF VerbosePasResolver}
|
|
- writeln('TPasResolver.ResolveInheritedCall El=',GetTreeDbg(El));
|
|
|
|
|
|
+ writeln('TPasResolver.ResolveInheritedCall El=',GetTreeDbg(El),' Access=',Access);
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
|
|
|
|
SelfScope:=GetCurrentSelfScope(El);
|
|
SelfScope:=GetCurrentSelfScope(El);
|
|
@@ -10453,15 +10453,20 @@ begin
|
|
{$IFDEF VerbosePasResolver}
|
|
{$IFDEF VerbosePasResolver}
|
|
//writeln('TPasResolver.ResolveBinaryExpr left=',GetObjName(El.left),' right=',GetObjName(El.right),' opcode=',OpcodeStrings[El.OpCode]);
|
|
//writeln('TPasResolver.ResolveBinaryExpr left=',GetObjName(El.left),' right=',GetObjName(El.right),' opcode=',OpcodeStrings[El.OpCode]);
|
|
{$ENDIF}
|
|
{$ENDIF}
|
|
- ResolveExpr(El.left,rraRead);
|
|
|
|
- if El.right=nil then exit;
|
|
|
|
case El.OpCode of
|
|
case El.OpCode of
|
|
eopNone:
|
|
eopNone:
|
|
case El.Kind of
|
|
case El.Kind of
|
|
pekRange:
|
|
pekRange:
|
|
|
|
+ begin
|
|
|
|
+ ResolveExpr(El.left,rraRead);
|
|
|
|
+ if El.right=nil then exit;
|
|
ResolveExpr(El.right,rraRead);
|
|
ResolveExpr(El.right,rraRead);
|
|
|
|
+ end;
|
|
else
|
|
else
|
|
if El.left.ClassType=TInheritedExpr then
|
|
if El.left.ClassType=TInheritedExpr then
|
|
|
|
+ begin
|
|
|
|
+ ResolveExpr(El.left,Access);
|
|
|
|
+ end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
{$IFDEF VerbosePasResolver}
|
|
{$IFDEF VerbosePasResolver}
|
|
@@ -10493,9 +10498,17 @@ begin
|
|
eopIs,
|
|
eopIs,
|
|
eopAs,
|
|
eopAs,
|
|
eopSymmetricaldifference:
|
|
eopSymmetricaldifference:
|
|
|
|
+ begin
|
|
|
|
+ ResolveExpr(El.left,rraRead);
|
|
|
|
+ if El.right=nil then exit;
|
|
ResolveExpr(El.right,rraRead);
|
|
ResolveExpr(El.right,rraRead);
|
|
|
|
+ end;
|
|
eopSubIdent:
|
|
eopSubIdent:
|
|
|
|
+ begin
|
|
|
|
+ ResolveExpr(El.left,rraRead);
|
|
|
|
+ if El.right=nil then exit;
|
|
ResolveSubIdent(El,Access);
|
|
ResolveSubIdent(El,Access);
|
|
|
|
+ end;
|
|
else
|
|
else
|
|
RaiseNotYetImplemented(20160922163459,El,OpcodeStrings[El.OpCode]);
|
|
RaiseNotYetImplemented(20160922163459,El,OpcodeStrings[El.OpCode]);
|
|
end;
|
|
end;
|