There is an AA implementation in backend/aa.c that should do the job.

But I thought the dwarf implementation already caches already used types?

Robert Clipsham wrote:
Hi there,

I'm working on a patch for http://d.puremagic.com/issues/show_bug.cgi?id=3987 and have figured out all the details of why debugging with function pointers isn't working, I need to make sure I implement the fix properly so it gets accepted though... I'm in need of an associative array, what is the correct way to do this in the dmd backend?

The exact issue is that the .debug_info for function pointers isn't cached, so unlike the basic types the info is generated again, and breaks by writing out the debug info in the middle of the current function pointer (if that makes sense). So with the following:

T function(U function(V)) foobar;

The debug info is generated recursively, then the debug info for V is output, then U, then the function pointer etc etc. When it gets to writing the debug info for T function() though, it tries to generate the debug info for its parameters. For basic types this is cached in the typidx_tab array, so it pulls out the reference and places that in, however for function pointers it generates it again, so you end up mixing up the debug order. To fix this I need a way to cache function pointers, the obvious way to do this seems to be with an AA (I'd also need to find a way to mangle a given function pointers type, probably by recurring through it). What would be the right way to go about this? Should I use an AA, and if so, what is the preferred way to do this in the DMDBE? If not, how would you recommend I go about this?

Thanks,

Robert

_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals


_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to