<div dir="auto"><div><div class="gmail_quote"><div dir="ltr">Ryan Joseph <<a href="mailto:ryan@thealchemistguild.com">ryan@thealchemistguild.com</a>> schrieb am Fr., 7. Sep. 2018, 11:59:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I’m moving my technical questions about default properties here so I don’t clutter up the other list. I’m still new to the compiler please bear with me.<br>
<br>
The first problem I’m having is how to resolve duplicate functions with overloads. For example in TWrapper there’s multiple overloads for DoThis and we need to determine if TWrapper.DoThis should use TWrapper or the THelperA from the default property.<br>
<br>
type<br>
        THelperA = record<br>
                procedure DoThis;<br>
        end;<br>
<br>
type<br>
        TWrapper = record<br>
                objA: THelperA;<br>
                property helperA: THelperA read objA write objA; default;<br>
                procedure DoThis(param: integer); overload; <br>
                procedure DoThis(param: string); overload; <br>
        end;<br>
<br>
<br>
var<br>
        wrapper: TWrapper;<br>
begin<br>
        wrapper.DoThis(1);      // DoThis is from TWrapper but how can we determine this?<br>
<br>
<br>
<br>
What I’m narrowing in on is:<br>
<br>
in pexpr.pas do_member_read() takes the load node and converts it to a call node and this is where I need to determine what definition the function belongs to. So in the example above we get “DoThis” how can we determine if TWrapper or THelperA has a matching function with matching parameters? searchsym_in_record usually returns the correct definition but I need to scan 2 possible definitions instead of just the first one specified in the load node.<br>
<br>
do_proc_call() parses parameters into a tcallparanode which is good.<br>
<br>
do_typecheckpass on the tcallnode from do_proc_call() will find procsym candidates in the record def which the node was created with. I would use this to query but it forces a syntax error which isn’t what I want.<br>
<br>
Hopefully that makes sense. So my question is, is there an existing way to search a tabstractrecorddef given a name and parameter list and return a found or not found answer? I could start pulling stuff out of do_typecheckpass() but I suspect there’s already a way to do this.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">tcallcandidates in htypechk.pas is your friend. That is the *only* class that deals with overload resolution and collects the eligible overloads from various sources (e.g. loaded units, current type, helper types). Essentially you only need to search for a procsym with the name of method inside the default field (all proceeds with the same name share the same procsym) and pass that on, the remainder of tcallcandidates will deal with overload resolution (you only need to make sure that the correct "Self", namely the default field is picked for that). </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>