Closures in Closures don't work. #155

Closed
baroquebobcat opened this Issue Nov 6, 2011 · 7 comments

Projects

None yet

3 participants

@baroquebobcat
Member

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.

@baroquebobcat
Member

This has been reported before #72

@baroquebobcat
Member

96a9074 fixes it!

@baroquebobcat baroquebobcat reopened this Mar 6, 2012
@baroquebobcat
Member

So, they still don't work. But they don't work in a new way.

@nedgar
nedgar commented Mar 6, 2012

Excellent! Made me lol.

@sshankar
Contributor

@baroquebobcat can you provide an updated test case?

@baroquebobcat
Member

I've got some ideas, but I won't be able to get back poking at them until next weekend. Part of the problem is that I'm trying to do some crazy things.

I think I have a partial solution, that fixes the simpler cases, but I'd like to dig in futher.

@baroquebobcat
Member

The new typer has fixed this apparently. updated test at e5f1c7d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment