|
@@ -3355,8 +3355,6 @@ implementation
|
|
|
hashedid : THashedIDString;
|
|
|
orgclass : tobjectdef;
|
|
|
i : longint;
|
|
|
- hlpsrsym : tsym;
|
|
|
- hlpsrsymtable : tsymtable;
|
|
|
begin
|
|
|
orgclass:=classh;
|
|
|
{ in case this is a formal class, first find the real definition }
|
|
@@ -3410,31 +3408,18 @@ implementation
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
- hlpsrsym:=nil;
|
|
|
- hlpsrsymtable:=nil;
|
|
|
while assigned(classh) do
|
|
|
begin
|
|
|
{ search for a class helper method first if this is an Object
|
|
|
Pascal class and we haven't yet found a helper symbol }
|
|
|
if is_class(classh) and
|
|
|
- (ssf_search_helper in flags) and
|
|
|
- not assigned(hlpsrsym) then
|
|
|
+ (ssf_search_helper in flags) then
|
|
|
begin
|
|
|
result:=search_objectpascal_helper(classh,contextclassh,s,srsym,srsymtable);
|
|
|
+ { an eventual overload inside the extended type's hierarchy
|
|
|
+ will be found by tcallcandidates }
|
|
|
if result then
|
|
|
- { if the procsym is overloaded we need to use the
|
|
|
- "original" symbol; the helper symbol will be found when
|
|
|
- searching for overloads }
|
|
|
- if (srsym.typ<>procsym) or
|
|
|
- not (sp_has_overloaded in tprocsym(srsym).symoptions) then
|
|
|
- exit
|
|
|
- else
|
|
|
- begin
|
|
|
- { remember the found symbol if the class hierarchy
|
|
|
- should not contain the a method with that name }
|
|
|
- hlpsrsym:=srsym;
|
|
|
- hlpsrsymtable:=srsymtable;
|
|
|
- end;
|
|
|
+ exit;
|
|
|
end;
|
|
|
srsymtable:=classh.symtable;
|
|
|
srsym:=tsym(srsymtable.FindWithHash(hashedid));
|
|
@@ -3448,15 +3433,6 @@ implementation
|
|
|
end;
|
|
|
classh:=classh.childof;
|
|
|
end;
|
|
|
- { did we find a helper symbol, but no symbol with the same name in
|
|
|
- the extended object's hierarchy? }
|
|
|
- if assigned(hlpsrsym) then
|
|
|
- begin
|
|
|
- srsym:=hlpsrsym;
|
|
|
- srsymtable:=hlpsrsymtable;
|
|
|
- result:=true;
|
|
|
- exit;
|
|
|
- end;
|
|
|
end;
|
|
|
if is_objcclass(orgclass) then
|
|
|
result:=search_objc_helper(orgclass,s,srsym,srsymtable)
|
|
@@ -3470,29 +3446,15 @@ implementation
|
|
|
function searchsym_in_record(recordh:tabstractrecorddef;const s : TIDString;out srsym:tsym;out srsymtable:TSymtable):boolean;
|
|
|
var
|
|
|
hashedid : THashedIDString;
|
|
|
- hlpsrsym : tsym;
|
|
|
- hlpsrsymtable : tsymtable;
|
|
|
begin
|
|
|
result:=false;
|
|
|
- hlpsrsym:=nil;
|
|
|
- hlpsrsymtable:=nil;
|
|
|
hashedid.id:=s;
|
|
|
{ search for a record helper method first }
|
|
|
result:=search_objectpascal_helper(recordh,recordh,s,srsym,srsymtable);
|
|
|
if result then
|
|
|
- { if the procsym is overloaded we need to use the
|
|
|
- "original" symbol; the helper symbol will be found when
|
|
|
- searching for overloads }
|
|
|
- if (srsym.typ<>procsym) or
|
|
|
- not (sp_has_overloaded in tprocsym(srsym).symoptions) then
|
|
|
- exit
|
|
|
- else
|
|
|
- begin
|
|
|
- { remember the found symbol if we should not find a symbol with
|
|
|
- the same name in the extended record }
|
|
|
- hlpsrsym:=srsym;
|
|
|
- hlpsrsymtable:=srsymtable;
|
|
|
- end;
|
|
|
+ { an eventual overload inside the extended type's hierarchy
|
|
|
+ will be found by tcallcandidates }
|
|
|
+ exit;
|
|
|
srsymtable:=recordh.symtable;
|
|
|
srsym:=tsym(srsymtable.FindWithHash(hashedid));
|
|
|
if assigned(srsym) and is_visible_for_object(srsym,recordh) then
|
|
@@ -3501,9 +3463,8 @@ implementation
|
|
|
result:=true;
|
|
|
exit;
|
|
|
end;
|
|
|
- srsym:=hlpsrsym;
|
|
|
- srsymtable:=hlpsrsymtable;
|
|
|
- result:=assigned(srsym);
|
|
|
+ srsym:=nil;
|
|
|
+ srsymtable:=nil;
|
|
|
end;
|
|
|
|
|
|
function searchsym_in_class_by_msgint(classh:tobjectdef;msgid:longint;out srdef : tdef;out srsym:tsym;out srsymtable:TSymtable):boolean;
|