----- Original Message -----
From: "Mcmillan, Scott A" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, February 17, 2006 10:43 AM
Subject: inline_stack help
> Hi,
>
> I'm trying to convert the following Perl member functions into their
> Inline C equivalents:
>
> sub add_message {
> my ($self, $message) = @ARG;
>
> push @{$self->{MESSAGE}}, $message;
>
> return;
> }
>
> sub messages {
> my ($self) = @ARG;
>
> if (defined $self->{MESSAGE}) {
> return @{$self->{MESSAGE}};
> }
>
> return;
> }
>
> I think I have the add_message() half working correctly, but I can't
> seem to get the list return in messages() quite right.
>
> void add_message(SV* obj, SV* message) {
> Event* event = (Event*)SvIV(SvRV(obj));
>
> av_push(event->messages, message);
> }
>
> void messages(SV* obj) {
> Event* event = (Event*)SvIV(SvRV(obj));
> SV** tmp;
> int i, array_len;
>
> Inline_Stack_Vars;
>
> Inline_Stack_Reset;
>
> array_len = av_len(event->messages) + 1;
>
> if(array_len == 0) {
> Inline_Stack_Void;
> }
> else {
> for (i = 0 ; i < array_len ; i++) {
> tmp = av_fetch(event->messages, i, 0);
> Inline_Stack_Push(*tmp);
> }
> }
>
> Inline_Stack_Done;
> }
>
> Any advice? In the array_len != 0 branch, the stack is coming back
> uninitialized.
>
Is that because you have failed to 'Inline_Stack_Return(i);' ?
Also (and this has no bearing on the problem) .... 'Inline_Stack_Void'
equates to 'Inline_Stack_Return(0)', so you shouldn't need to test for the
condition 'array_len == 0'. In the event that array_len is zero,
'Inline_Stack_Return(i)' should still suffice (as 'i' will be zero).
If there are additional problems, I would probably need a *complete* basic
script ... and the header file that defines the 'Event' type.
Cheers,
Rob