$c+
{ test of this and the @ operator for fields}
module test18_1

typedefinition tuple [integer f1, integer f2, procedure p()] tester;

tester test;

	procedure tester@p
		tuple [ integer val, procedure g(reference tester try) ] inner;

		procedure inner@g
		begin
			try := [4, 3];
		end;
	begin
		write this@f2;
		write this@f1;
		inner!g(this);
	end;
	
private

begin
	test := [2,1];
	test!p();
	test!p();

end. { output  1 2 3 4}
