1 // The symbol table is a simple array of struct U.
6 // put symbol at index n
9 std_symbol(char *s
, int n
)
16 // symbol lookup, create symbol if need be
23 for (i
= 0; i
< NSYM
; i
++) {
24 if (symtab
[i
].u
.printname
== 0)
26 if (strcmp(s
, symtab
[i
].u
.printname
) == 0)
30 stop("symbol table overflow");
32 p
->u
.printname
= (char *)malloc(strlen(s
)+1);
33 strcpy(p
->u
.printname
,s
);
37 // get the symbol's printname
44 return p
->u
.printname
;
47 // clears the arglist too
50 set_binding(U
*p
, U
*q
)
54 binding
[p
- symtab
] = q
;
55 arglist
[p
- symtab
] = symbol(NIL
);
63 return binding
[p
- symtab
];
67 set_binding_and_arglist(U
*p
, U
*q
, U
*r
)
71 binding
[p
- symtab
] = q
;
72 arglist
[p
- symtab
] = r
;
80 return arglist
[p
- symtab
];
83 // get symbol's number from ptr
90 return (int) (p
- symtab
);
93 // push indexed symbol
105 for (i
= 0; i
< NSYM
; i
++) {
106 binding
[i
] = symtab
+ i
;
107 arglist
[i
] = symbol(NIL
);