|
|
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.