Skip to content

Closures in Closures don't work. #155

Description

@baroquebobcat

wrote a test case

# test/jvm/test_blocks.rb
  def test_closure_in_closure_doesnt_raise_error
    assert_nothing_raised do
      parse_and_type(<<-CODE)
        interface Bar do;def run:void;end;end

        class Foo
          def foo(a:Bar)
            1
          end
        end
        Foo.new.foo do
          Foo.new.foo do
            1
          end
        end
      CODE
    end
  end

gets you

Class: <Mirah::InternalCompilerError>
        Message: <"undefined method `defining_class' for #<Mirah::AST::Block:0x2f267610>">
        ---Backtrace---
        /Users/nick/hacking/fresh_mirah/lib/mirah/ast/structure.rb:150:in `prepare'
        /Users/nick/hacking/fresh_mirah/lib/mirah/ast/call.rb:200:in `infer'

the problem is that while the parent of the method definition of the closure is reset to the closure class, the scope somehow is still the block and not the new class for the outer closure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions