#! varwish -f

varframe create #foo

proc foo1 {x y} {
	echo "foo1 $x $y"
	upvar #foo x_ x_ y_ y_
	set x_ $x
	set y_ $y
}

proc foo2 {} {
	echo "foo2"
	upvar #foo all
	echo "x_ is $x_ y_ is $y_"
}

proc foo3a {} {
	echo "foo3a"
	upvar #?a a a
	echo "a is $a"
}

proc foo3b {} {
	echo "foo3b"
	set a 100	
	foo3a
}

proc foo4a {} {
	echo "foo4a"
	upvar #?x_ all
	echo "x_ is $x_ y_ is $y_"
}

proc foo4b {} {
	echo "foo4b"
	upvar #foo all
	foo4a
}

proc foo4c {} {
	echo "foo4c"
	set x_ 20
	foo4b
}

proc foo4d {} {
	echo "foo4d"
	set x_ 20
	if [catch {foo4a} err] {echo $err}
}

proc foo4e {} {
	echo "foo4c"
	upvar #foo all
	foo4d
}

echo "varframes: [varframe list]"

foo1 10 10

foo2
foo3b
foo4b
foo4c
foo4e

foo1 1000 1000

foo2
foo3b
foo4b
foo4c
foo4e

exit
