[fpc-devel] Default properties

Ryan Joseph ryan at thealchemistguild.com
Fri Sep 7 11:59:07 CEST 2018


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.

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.

type
	THelperA = record
		procedure DoThis;
	end;

type
	TWrapper = record
		objA: THelperA;
		property helperA: THelperA read objA write objA; default;
		procedure DoThis(param: integer); overload; 
		procedure DoThis(param: string); overload; 
	end;


var
	wrapper: TWrapper;
begin
	wrapper.DoThis(1);	// DoThis is from TWrapper but how can we determine this?



What I’m narrowing in on is:

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.

do_proc_call() parses parameters into a tcallparanode which is good.

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.

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.

Regards,
	Ryan Joseph




More information about the fpc-devel mailing list