do
	close a, b = setmetatable {},__close:=> print "closed"
	const c, d = 123, 'abc'

	close a, b
	const c, d

do
	close v = if flag
		func!
	else
		setmetatable {},__close:=>

	close f = with io.open "file.txt"
		\write "Hello"

macro defer = (item)-> "close _ = #{item}"
macro defer_f = (func)-> "close _ = setmetatable {},__close:#{func}"

do
	$defer with io.open "file.txt"
		\write "Hello"
	
	$defer setmetatable {},__close:=> print "second"

	$defer_f -> print "first"

_defers = setmetatable {},__close:=>
	@[#@]!
	@[#@] = nil

macro defer_i = (item)-> "
_defers[#_defers + 1] = #{item}
close _ = _defers"

do
	$defer_i -> print 3
	$defer_i -> print 2
	$defer_i -> print 1