The attached test case segfaults in r8247, apparently in the iseq
instruction.  The necessary condition seems to be that the *second*
argument be a ParrotObject instance; if you reverse the order of
arguments in line 41, you merely get a fatal error:

        MMD function __is_equal not foundfor types (74, 34)
        current instr.: 'ParrotCL::Common_Lisp :: _main' pc 118 (test.pir:41)

I can't seem to get gdb to tell me anything useful -- not even a
backtrace -- so I'll leave this for more capable hands.  TIA,

                                        -- Bob Rogers
                                           http://rgrjr.dyndns.org/


.namespace ["ParrotCL::Common_Lisp::Symbol"]

.sub build_Symbol method
        .param pmc name
        classoffset $I33, self, "ParrotCL::Common_Lisp::Symbol"
        inc $I33
        setattribute self, $I33, name
        .pcc_begin_return
        .return self
        .pcc_end_return
.end

.namespace ["ParrotCL::Common_Lisp"]

.sub _Symbol_onload
        find_type $I0, "ParrotCL::Common_Lisp::Symbol"
        if $I0 > 1 goto class_done
        newclass $P0, "ParrotCL::Common_Lisp::Symbol"
        addattribute $P0, "PACKAGE"
        addattribute $P0, "NAME"
        addattribute $P0, "VALUE"
        addattribute $P0, "PLIST"
        addattribute $P0, "FUNCTION"
        $P1 = new String
        $P1 = 'build_Symbol'
        setprop $P0, 'BUILD', $P1
class_done:
.end

.sub _main @MAIN
        _Symbol_onload()
        find_type $I0, "ParrotCL::Common_Lisp::Symbol"
        if $I0 goto found
        printerr "oops\n"
        die
found:
        $P1 = new String
        $P1 = 'foo'
        $P2 = new $I0, $P1
        print "made\n"
        $I33 = iseq $P1, $P2
        print "iseq: "
        print $I33
        print "\n"
.end

Reply via email to