From: SASADA Koichi Date: 2008-10-22T02:54:15+09:00 Subject: [ruby-core:19421] Re: rb_errinfo() vs rb_rubylevel_errinfo() Hi, SASADA Koichi wrote: > I missed. $! looking rb_thread_t#errinfo. missed again. $! looking local variable, but not "e". See bellow. #$! is special local variable to store errinfo. At first on an exception handler (rescue in
), doing "e = #$!". > # ---------------------------------------------------------------------- > # target program: > # ---------------------------------------------------------------------- > begin > rescue => e > end > # ---------------------------------------------------------------------- > # disasm result: > # ---------------------------------------------------------------------- > == disasm: @../trunk/test.rb>======== > == catch table > | catch type: rescue st: 0002 ed: 0003 sp: 0000 cont: 0004 > == disasm: @../trunk/test.rb> > local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s0) > [ 2] #$! > 0000 putobject StandardError ( 2) > 0002 getdynamic #$!, 0 > 0005 send :===, 1, nil, 0, > 0011 branchunless 20 > 0013 getdynamic #$!, 0 ( 3) > 0016 setlocal e ( 2) > 0018 putnil ( 3) > 0019 leave ( 2) > 0020 getdynamic #$!, 0 > 0023 throw 0 > | catch type: retry st: 0003 ed: 0004 sp: 0000 cont: 0002 > |------------------------------------------------------------------------ > local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1) > [ 2] e > 0000 trace 1 ( 1) > 0002 putnil ( 2) > 0003 nop ( 1) > 0004 leave ( 2) > # ---------------------------------------------------------------------- -- // SASADA Koichi at atdot dot net