2011/7/29 Aaron Faanes <[email protected]>: > (If there's a better list for this, let me know and ignore the rest ;) ) > > I ran into a problem compiling some old lua code I had lying around. I > managed to isolate the cause of the exception in the following example: > > --- > > local instance = {}; > > function instance:Constructor() > function self:Bar() end; > function self:Bar() end; -- Null PMC access here! > end; > > instance:Constructor() > > --- > > I receive the following exception: > > lua.pbc: nullpmc.lua:5: Null PMC access in set_pmc_keyed() > stack traceback: > nullpmc.lua:5: in function 'instance.Constructor_13' > nullpmc.lua:8: in main chunk > [PIR]: in function 'docall' > [PIR]: in function 'handle_script' > [PIR]: in function 'main' > > I've been picking apart the generated code, trying to see what's causing the > issue. The null > access is due to the generated PIR referring to "self" in two different > ways. The following > is, hopefully, a useful snippet: > > .annotate 'line', 4 > .const "Sub" fct_17 = "post18" > newclosure $P19, fct_17 > $P20 = subr."getfenv"() > $P19."setfenv"($P20) > set param_self_1[k_Bar], $P19 > .annotate 'line', 5 > .const "Sub" fct_23 = "post24" > newclosure $P25, fct_23 > $P26 = subr."getfenv"() > $P25."setfenv"($P26) > find_lex $P27, "self_2" > set $P27[k_Bar], $P25 > > As you can see, the first use of self is "param_self_1", which is expected, > but the second use of > self is the non-existent "self_2". > > If you look at the PAST generated, "self_2" can be found inside self:Bar() > as the unique name for the > implicit self. I haven't been able to determine how that name managed to > pollute the outer symbol table. > > I hope this bug report helps! Let me know if I should file this somewhere > (or if I require a sanity check).
Thanks for this detailed report. Fixed in https://github.com/fperrad/lua/commit/d73d0858608592ff44ced8b55285afcf54205621 François Perrad > > -- > Aaron Faanes <[email protected]> > > _______________________________________________ > http://lists.parrot.org/mailman/listinfo/parrot-dev > > _______________________________________________ http://lists.parrot.org/mailman/listinfo/parrot-dev
