program pptest12; { procedures/funcs } var i: integer; procedure p1; procedure p2; procedure p3; procedure p4; begin { p4 } end; procedure p5; begin p5; { recursive call } p4; { call at same level } p3; { enclosing block } p2; { intermediate block} p1 {main block}; end; begin {p3} p5 {local block call} end; begin {p2} { calls nothing so should be fully resolved } end; begin p2 end { p1 }; function f1: integer; begin f1 := 2; { simple assignment } f1 := f1; { simple recursive assignment } f1 := 2 * (f1 - 4); { function in expression } end; procedure p6; forward; function f2: integer; forward; procedure p7; var i: integer; begin i := f2 * f1 end; procedure p6; begin end { p6 }; function f2 ; begin f2 := 0 end { f2}; begin { main prog } i := f1 * f2; p6; p1 end { pptest12 }.