|
|
1.1 root 1: #include "../h/config.h"
2: /*
3: * pfail - returns from an Icon procedure with failure.
4: * The current procedure frame is exited and efail causes
5: * the failure of the enclosing expression. A tracing
6: * message is produced if &trace is non-zero.
7: */
8: Global(_k_level)
9: Global(_k_trace)
10: Global(_efail)
11: Global(_ftrace)
12: Global(_pfail)
13: Global(_line)
14: Global(_file)
15:
16: #ifdef VAX
17: _pfail:
18: decl _k_level # A procedure is being exited, so
19: # decrement &level.
20: tstl _k_trace # If &trace is zero,
21: beql dofail # no tracing.
22: #
23: # Otherwise, a trace message is
24: # produced by calling ftrace with
25: # the address of the block of the
26: # failing procedure.
27: # &arg0 = (nargs * 8) + 8 + ap
28: ashl $3,4(ap),r0 # r0 = nargs * 8
29: addl2 $8,r0 # + 8
30: addl3 r0,ap,r0 # + ap
31: # r0 points to descriptor for procedure
32: pushl 4(r0) # and second word is address of block
33: calls $1,_ftrace # ftrace(&arg0)
34:
35: dofail:
36: movl -4(fp),_line # Restore _line,
37: movl -8(fp),_file # _file,
38: movl -4(ap),efp # expression frame pointer,
39: movl -8(ap),gfp # generator frame pointer,
40: movl -12(ap),ipc # interpreter pc,
41: movl 8(fp),ap # ap,
42: movl 12(fp),fp # and fp from failing procedure frame
43: jmp _efail # Cause failure in expression by
44: # branching to efail
45: #endif VAX
46:
47: #ifdef PORT
48: DummyFcn(_pfail)
49: #endif PORT
50: #ifdef PDP11
51: / pfail - return from an Icon procedure with failure.
52: / Exit the current procedure frame, and branch to _efail.
53: Global(_boundary)
54:
55: _pfail:
56: dec _k_level / decrement &level
57:
58: / Print trace message if &trace is set.
59:
60: tst _k_trace
61: beq 1f
62: mov 4(r5),r0 / calculate address of arg0
63: asl r0 / r0 <- r5 + 4*nargs + 6
64: asl r0
65: add r5,r0
66: add $6,r0
67: mov 2(r0),-(sp) / push address of failing procedure block
68: mov $1,_boundary / prevent csv from setting boundary
69: jsr pc,_ftrace
70: clr _boundary
71: tst (sp)+ / pop address of procedure block
72:
73: / Exit the procedure frame, decrement &level, and jump to efail.
74:
75: 1:
76: mov r5,r0
77: mov -(r0),r4
78: mov -(r0),r3
79: mov -(r0),r2
80: mov -(r0),_line
81: mov -(r0),_file
82: mov r5,sp
83: mov (sp)+,r5
84: jmp _efail / pass failure to expression frame
85: #endif PDP11
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.