# New Ticket Created by  Vladimir Marek 
# Please include the string:  [perl #131666]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=131666 >


I took the NativeCall sample from here:

https://perl6advent.wordpress.com/2015/12/21/day-21-nativecall-backs-and-beyond-c/

--------------------------------------------------------------------------------
use NativeCall;

sub XML_SetElementHandler(OpaquePointer $parser,                                
                                                      
                          &start (OpaquePointer, Str, CArray[Str]),
                          &end   (OpaquePointer, Str))
    is native('expat') { ... }

sub XML_ParserCreate(Str --> OpaquePointer)               is native('expat') { 
... }
sub XML_ParserFree(OpaquePointer)                         is native('expat') { 
... }
sub XML_Parse(OpaquePointer, Buf, int32, int32 --> int32) is native('expat') { 
... }

my $xml = q:to/XML/;
    <calendar>
        <advent day="21">
            <topic title="NativeCall Bits and Pieces"/>
        </advent>
    </calendar>
    XML

my $depth = 0;

sub start-element($, $elem, $attr)
{
    say "open $elem".indent($depth * 4);
    ++$depth;
}

sub end-element($, $elem)
{
    --$depth;
    say "close $elem".indent($depth * 4);
}

my $parser = XML_ParserCreate('UTF-8');
XML_SetElementHandler($parser, &start-element, &end-element);

my $buf = $xml.encode('UTF-8');
XML_Parse($parser, $buf, $buf.elems, 1);

XML_ParserFree($parser);
--------------------------------------------------------------------------------


All works fine, unless I try to use the $attr in start-element

sub start-element($, $elem, $attr)
{
    say "open $elem".indent($depth * 4);
    say $attr.elems;
    ++$depth;
}


The program then terminates with:

MoarVM panic: Internal error: Unwound entire stack and missed handler


I have seen that on Solaris, but Linux has the same issue. In both cases
custom build perl6 using 'rakudobrew build moar' so I suppose latest
git revision.

Thank you
-- 
        Vlad

Reply via email to