|
|
1.1 ! root 1: program fproc(output); ! 2: var ! 3: i :integer; ! 4: ! 5: procedure print(function frtn :integer); ! 6: begin ! 7: write(frtn:3,' formal routine ='); ! 8: end; ! 9: ! 10: procedure lvl1(function form: integer); ! 11: label 1; ! 12: var ! 13: loc :integer; ! 14: ! 15: function eval :integer; ! 16: begin ! 17: if loc = 8 then begin ! 18: writeln(' non-local jump'); ! 19: goto 1; ! 20: end; ! 21: eval := loc; ! 22: end; ! 23: ! 24: begin ! 25: loc := i; ! 26: i := i - 1; ! 27: if (loc = 4) or (loc = 8) then ! 28: lvl1(eval) ! 29: else if loc > 0 then ! 30: lvl1(form); ! 31: 1: write('Stack frame:',loc:3,' formal print ='); ! 32: print(form); ! 33: writeln(form:3); ! 34: end; ! 35: ! 36: function geval :integer; ! 37: begin ! 38: geval := i; ! 39: end; ! 40: ! 41: begin ! 42: writeln('This should print levels 0-3, with formal values of 4.'); ! 43: writeln('Level 4 should jump to level 8.'); ! 44: writeln('Finally levels 8-10 should print with formal values of -1.'); ! 45: i := 10; ! 46: lvl1(geval); ! 47: end.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.