import org.codehaus.groovy.classgen.TestSupport

/**
 * @version $Revision$
 */
class NestedClosure2Bug extends TestSupport {
     
    Object f
     
    void testFieldBug() {
    	def closure = {
    		return {
	    		f = 123
	    		return null
	        }
	    }
        def value = closure()
        value = value()
        assert f == 123
    }
     
    void testBugOutsideOfScript() {
    	def a = 123
    	def b = 456
    	def closure = {
    		println b
    		def c = 999
    		return {
    			f = 2222111
    			
    			println f
    			
    			println c
    			def d = 678
    			return { 
    				println f
    				assert f == 2222111
    				println d
    				return a
    			}
    		}
    	}
    	def c2 = closure()
    	def c3 = c2()
    	def value = c3()

		assert f == 2222111    	
    	assert value == 123
    }
    
    void testBug() {
    	assertScript """
	    	def a = 123
	    	def closure = {
	    		return {
	    			return { 
	    				return a
	    			}
	    		}
	    	}
	    	def c2 = closure()
	    	def c3 = c2()
	    	value = c3()
	    	
	    	assert value == 123
"""
	}
}