|
|
1.1 root 1: # Copyright (c) 1979 Regents of the University of California
2: #
3: # sccsid[] = "@(#)GOTO.s 1.3 6/10/81";
4: #
5: .set EGOTO,13 #this is dependent upon errdata
6: .set PC,16
7:
8: .data
9: jmplbl:
10: .long 0
11: frame:
12: .long 0
13: .text
14:
15: .globl _GOTO
16: .align 1
17: _GOTO:
18: .word 0
19: movl *4(ap),frame #save parameters
20: movl PC(fp),jmplbl
21: moval unwind,PC(fp) #begin unwinding
22: ret
23: unwind:
24: tstl (fp) #check for exception vector
25: bneq L1
26: cmpl ap,__disply+8 #check for past global procedure
27: bgequ egoto
28: moval unwind,PC(fp) #blow away this stack frame
29: ret
30: L1:
31: cmpl ap,frame #check for requested frame
32: bgtru egoto #lost it somewhere
33: blssu L2 #not there yet
34: jmp *jmplbl #proceed in this section
35: L2:
36: pushl -4(fp) #level of this frame
37: calls $1,*(fp) #call the exception handler
38: movq -12(fp),*-4(fp) #restore the display
39: moval unwind,PC(fp) #blow away this stack frame
40: ret
41: egoto:
42: pushl $0
43: pushal L3
44: calls $2,_ERROR
45: ret
46: L3:
47: .asciz "Active frame not found in non-local goto\n"
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.