|
|
1.1 root 1: LOGICAL FUNCTION INTEXT(LL, L1, L2, BR)
2: C
3: C LL POINTS TO DSA ENTRY OF FCN NAME
4: C L1 POINTS INTO STACK TO BEGINNING OF ARGS
5: C L2 POINTS INTO STACK TO LAST ARG ENTRY
6: C BR .TRUE. MEANS LOOK FOR BOTH EXTERNALS ND INTRINS
7: C BR FALSE MEANS JUST LOOK FOR EXTERNALS
8: C ROUTINE CHECKS FOR REFERENCES TO INTRINSIC OR BASIC EXTERNAL
9: C FCNS; RETURNS TRUE IF FINDS INTRINSIC FCN. CHECKS INTRINSICS
10: C ARGS FOR USAGE, TYPE AND NUMBER. MARKS POSSIBLE BASIC EXTDRNAL
11: C FCNS SENT DOWN TO IT
12: C
13: INTEGER STACK, BL, PDSA, DSA, FCN(6), Z
14: LOGICAL BR
15: COMMON /CEXPRS/ LSTACK, STACK(620)
16: COMMON /CTABL/ LDSA, PDSA, DSA(5000)
17: COMMON /INTS/ Z(346)
18: COMMON /FACTS/ NAME, NOST, ITYP, IASF
19: DATA BL /1H /
20: INTEXT = .FALSE.
21: CALL S5UNPK(DSA(LL+4), FCN(1), 6)
22: K = 1
23: DO 40 I=1,55
24: K1 = K + 1
25: K2 = K1 + Z(K) - 1
26: L = 0
27: DO 10 J=K1,K2
28: L = L + 1
29: IF (FCN(L).NE.Z(J)) GO TO 30
30: 10 CONTINUE
31: IF (L.EQ.6) GO TO 60
32: L = L + 1
33: DO 20 J=L,6
34: IF (FCN(J).NE.BL) GO TO 30
35: 20 CONTINUE
36: GO TO 60
37: 30 K = K2 + 2
38: 40 CONTINUE
39: 50 RETURN
40: C
41: C DIFFERENTIATES BETWEEN A POSSIBLE BASIC EXTERNAL AND POSSIBLE
42: C INTRINSIC FCN
43: C
44: 60 L = MOD(Z(K2+1),1024)/512
45: C
46: C IF POSSIBLE BASIC EXTERNAL CHECK TYPE AND SET IT IF NOT ALREADY
47: C EXPLICITLY SET
48: C
49: IF (L.NE.1) GO TO 70
50: L = IGATT1(LL,1)
51: IF (L/8.GE.1) GO TO 190
52: L = MOD(Z(K2+1),8)
53: IF (BR) L = L + 8
54: CALL SATT1(LL, 1, L)
55: C
56: C MARK AS USED IN PASS 1
57: C
58: GO TO 190
59: C
60: C CHEKC IF IN EXTERNAL STMT IF SO NOT AN INTRINSIC
61: C
62: 70 IF (.NOT.BR) GO TO 50
63: L = IGATT1(LL,8)
64: IF (L.EQ.13) GO TO 50
65: C
66: C CHECK IF EXPLICITLY TYPES DIFFERENTLY THAN EXPECTED
67: C
68: L = IGATT1(LL,1)
69: J = MOD(Z(K2+1),8)
70: IF (L.GE.8) GO TO 80
71: CALL SATT1(LL, 1, J+8)
72: GO TO 90
73: 80 IF (J.NE.MOD(L,8)) GO TO 50
74: C
75: C K POINTS TO THE FUNCTION ENTRY IN Z
76: C K1 POINTS TO FIRST LETTER IN FCN-NAME; K2 TO LAST LETTER
77: C FIELDS IN ATTRIBUTE WORD ARE AS FOLLOWS:
78: C BITS 0-2 TYPE FCN
79: C BITS 3-5 TYPE ARGS
80: C BIT 6 IF 1, FIXED NO ARGS; IF 0 VARIABLE NO OF ARGS
81: C BITS 7-8 MINIMUM NUMBER OF ARGS
82: C BITS 9 IF 0, INTRINSIC; IF 1 BASIC EXTERNAL
83: C BITS 10 IF 1 USED IN PASS 1; ELSE NOT REFERENCED
84: C
85: C FCN IS INTRINSIC
86: C CHECK NUMBER OF ARGS
87: C
88: 90 I = MOD(Z(K2+1),128)/64
89: J = MOD(Z(K2+1),512)/128
90: IF (I) 100, 100, 120
91: C
92: C VARIABLE NUMBER OF ARGS ALLOWED
93: C MUST BE AT LEAST J
94: C
95: 100 IF ((L2-L1+1)/2.GE.J) GO TO 130
96: 110 CALL ERROR2(29H INCORRECT NUMBER OF ARGS IN , 29, DSA(LL+4),
97: * 1, 1, 1)
98: GO TO 180
99: C
100: C FIXED NUMBER OF ARGS
101: C
102: 120 IF ((L2-L1+1)/2.NE.J) GO TO 110
103: C
104: C CHECK THRU ARG LIST OR PROPER TYPE ID AS AN ARG;
105: C CHECK TYPE AND THAT ARGS ARE SCALARS
106: C
107: 130 L = MOD(Z(K2+1),64)/8
108: DO 170 N=L1,L2,2
109: C
110: C CHECK FOR EXPRESSION AS ARG
111: C
112: IF (STACK(N).EQ.0) GO TO 160
113: C
114: C CHECK USAGE
115: C
116: I = IGATT1(STACK(N),8)
117: IF (I.EQ.10 .OR. ((I.EQ.2 .OR. I.EQ.5 .OR. I.EQ.14) .AND.
118: * STACK(N+1).NE.6)) GO TO 160
119: IF (I.NE.0) GO TO 140
120: CALL SATT1(STACK(N), 8, 10)
121: GO TO 160
122: 140 IF (I.EQ.1 .AND. ITYP.NE.31) GO TO 150
123: I = STACK(N)
124: IF (DSA(I+2).EQ.IASF) GO TO 160
125: 150 CALL ERROR2(40H ILLEGAL ARGUMENT IN INTRINSIC REFERENCE, 40,
126: * DSA(LL+4), 1, 1, 1)
127: GO TO 170
128: C
129: C CHECK STRUCTURE
130: C
131: 160 IF (STACK(N+1)/8.EQ.1) CALL ERROR2(
132: * 48H ILLEGAL STRUCTURE OF ARG IN INTRINSIC REFERENCE, 48,
133: * DSA(LL+4), 1, 1, 1)
134: C
135: C CHECK TYPE
136: C
137: IF (MOD(STACK(N+1),8).NE.L) CALL ERROR2(
138: * 43H ILLEGAL TYPE OF ARG IN INTRINSIC REFERENCE, 43,
139: * DSA(LL+4), 1, 1, 1)
140: 170 CONTINUE
141: 180 INTEXT = .TRUE.
142: I = IGATT1(LL,8)
143: IF (I.NE.0) GO TO 190
144: CALL SATT1(LL, 8, 14)
145: C
146: C MARK FCN AS USED
147: C
148: 190 K = Z(K2+1)/1024
149: IF (K.EQ.0) Z(K2+1) = Z(K2+1) + 1024
150: GO TO 50
151: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.