Hi Parrot-Freaks!

I've used PerlInt instead of PerlString by mistake.
The error occurs if code like this is executed a few times:
("data" is a PerlInt)

        find_global P1, "data"
        set S1, P1
        # ....
        set P1, S1

It works a few thousend times, then it stops working
often resulting in a crash.
The code works like expected when
- using PerlString instead of PerlInt or
- adding sweepoff (at the beginning of the program) or
- .. you have the right amount of global data (more or less
store_global and/or find_global calls result in different time
until the bug occurs)

An example is attached.

cya,
Jens Rieks
        #
        # create some globals
        #
        new P1, PerlInt
        set P1, 1
        store_global "g1", P1

        new P1, PerlInt
        set P1, 1
        store_global "g2", P1

        #
        # the next is NOT a PerlString
        #
        new P1, PerlInt
        #new P1, PerlString
        set P1, "EverythingIsOkay"
        store_global "data", P1

        #
        # some more globals
        #
        new P1, PerlInt
        store_global "g4", P1

        new P1, PerlInt
        set P1, 0
        store_global "counter", P1

        #
        # call "do_something" a few times
        #
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something
        bsr do_something

        
        #
        # endless loop
        #
run:    bsr counter
        branch run
        end # supress warning
        
        
do_something:
        find_global P1, "data"
        set S1, P1
        set P1, S1
        ret
        
counter:
        find_global P1, "counter"
        inc P1
        print " counter: "
        print P1
        print " '"
#       find_global P1, "counter"
#       find_global P1, "counter"
#       find_global P1, "counter"
        find_global P1, "data"
        print P1
        print "'\n"
        ret

Reply via email to