PSEUDOCODE COMMENTS
1 parse primary operand or subexpression primary()
2 advance to next token
3 if token == [ or (
4 loop:
5 if token == [ subscript
6 if operand not in symbol table
7 issue "can't subscript"
8 bypass subscript expression skip()
9 enforce ] token
10 return <request no fetch>
11 if operand is an address
12 FETCH INTO PRIMARY if necessary
13 else
14 issue "can't subscript"
15 set <request no fetch> for return k=0
16 save staging buffer address setstage()
17 set <not constant> in temporary array is2[TC]=0
18 parse subscript expression level1()
19 enforce ] token
20 if subscript is a constant ...[constant]
21 purge subscript code clearstage()
22 if subscript is not zero
23 if operand is an integer
24 double constant
25 generate GETw2n
26 else generate GETw2n
27 generate ADD12
28 else if operand is an integer ...[variable]
29 generate DBL1
30 generate ADD12
31 pass <not an address> is[TA]=0
32 pass indirect type from symbol table is[TI]
33 set <request fetch> for return k=1
34 else
35 if token == ( function call
36 if not symbol table reference
37 INDIRECT CALL callfunc(0)
38 else if not a function reference
39 if <request fetch>
40 and not already fetched is[CV]==0
41 FETCH OPERAND fetch()
42 INDIRECT CALL callfunc(0)
43 else DIRECT CALL callfunc(ptr)
44 pass <not symbol table reference> is[ST]=0
45 pass <not constant> is[TC]=0
46 pass <reference fetched> is[CV]=0
47 set <request no fetch> for return k=0
48 else return <pre-set fetch request>
49 loop back
50 if operand is in symbol table and is a function no (
51 generate POINTm
52 pass <not symbol table reference> is[ST]=0
53 return <request no fetch>
54 return <fetch request from below>