comp.lang.ada
 help / color / mirror / Atom feed
* Creating tagged records with C "malloc" rather than Ada "new"
@ 2002-12-07  0:58 Steven Murdoch
  2002-12-07 14:32 ` Robert A Duff
  0 siblings, 1 reply; 2+ messages in thread
From: Steven Murdoch @ 2002-12-07  0:58 UTC (permalink / raw)


This post is again about my binding from Ada95 to Lua. In the last
thread I proposed and asked for help for a way of giving Lua access
to tagged records by asking Lua to assign enough space for a pointer
to a tagged record, then storing the pointer in the memory location
provided by Lua. This works (thanks to all those who helped) but I
have another possibility and would greatly appreciate any advice on
it.

Lua provide a garbage collection facility, which I would like to use
(along with some other neat features), however I can only do this
if I get Lua to allocate the memory for the object. Currently I
get Lua to allocate space for the access type, but I allocate space
for the tagged record using new. In order to reclaim the space
allocated by new I would need to add a hook to the Lua garbage
collector to deallocate this space when the pointer is freed.

However I think I can simplify this by allocating space for the
tagged record in Lua, and hence it will deallocate this space at
the right time. I would like to know if this is possible to do this
reliably, and if it is relativly safe,

The code I am proposing would look something like as follows:

C:
/* Actually part of Lua, but this is equivalent */
void *allocate(int size) {
        return malloc(size);
}

Ada:
type Parameter is tagged private;
type Parameter_Access is access Parameter'Class;

function Allocate(Size: Storage_Unit) return Parameter_Access;
pragma Import(C, Allocate);

function Add_To_Lua(Param: in Parameter) return Parameter_Access
is
	Param_Ptr: Parameter_Access;
begin
        Param_Ptr:=Allocate(Parameter'Max_Size_In_Storage_Units);
        Param_Ptr.all:=Param; --[1]
        return Param_Ptr;
end;

Will this do what I want and is is comapritively safe. In particular
will statement [1] sort of the tag of Param properly? Are there any
other potential problems.

Thank you in advance,
Steven Murdoch.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-12-07 14:32 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-07  0:58 Creating tagged records with C "malloc" rather than Ada "new" Steven Murdoch
2002-12-07 14:32 ` Robert A Duff

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox