> On Aug 1, 2018, at 9:17 AM, Sven Barth via fpc-devel > <fpc-devel@lists.freepascal.org> wrote: > > Search the compiler's source for the string 'FREEINSTANCE'; you'll find two > locations, one in ngenutil and one in psub. The latter is the one you want. >
Yeah, this is the first place I looked but current_structdef is always nil so it never progresses past that point. Is this test program not enough to get FreeInstance called? program test; var obj1: TObject; begin obj1 := TObject.Create; obj1.Free; end. =========== function generate_bodyexit_block:tnode; var srsym : tsym; para : tcallparanode; newstatement : tstatementnode; oldlocalswitches: tlocalswitches; begin result:=internalstatements(newstatement); if assigned(current_structdef) then begin { Don't test self and the vmt here. The reason is that } { a constructor already checks whether these are valid } { before. Further, in case of TThread the thread may } { free the class instance right after AfterConstruction } { has been called, so it may no longer be valid (JM) } oldlocalswitches:=current_settings.localswitches; current_settings.localswitches:=oldlocalswitches-[cs_check_object,cs_check_range]; { a destructor needs a help procedure } if (current_procinfo.procdef.proctypeoption=potype_destructor) then begin if is_class(current_structdef) then begin srsym:=search_struct_member(current_structdef,'FREEINSTANCE'); Regards, Ryan Joseph _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel