Project

General

Profile

« Previous | Next » 

Revision 7d8a415b

Added by ko1 (Koichi Sasada) about 8 years ago

check break target correctly.

  • compile.c (iseq_compile_each0): save target child_iseq in the catch-table
    for break. This iseq is not for continuation, but for search key at
    vm_throw_start().

  • vm_insnhelper.c (vm_throw_start): check saved iseq first.

  • iseq.h: add comment for it.

  • test/ruby/test_iterator.rb (test_ljump): add a test for the issue:
    def call b; b.call; end
    call(Proc.new{break}){} #=> (1) should raise LocalJumpError
    call(Proc.new{break}) #=> (2) shoudd raies LocalJumpError, too.
    but (1) doesn't raise LocalJumpError.

    This issue is reported by Matz.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e