* Copyright (c) 1983 Eric P. Allman
* Copyright (c) 1988 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
static char sccsid
[] = "@(#)stab.c 5.6 (Berkeley) 1/1/89";
** STAB -- manage the symbol table
** name -- the name to be looked up or inserted.
** type -- the type of symbol.
** ST_ENTER -- enter the name if not
** ST_FIND -- find it only.
** pointer to a STAB entry for this name.
** NULL if not found and not entered.
** can update the symbol table.
static STAB
*SymTab
[STABSIZE
];
printf("STAB: %s %d ", name
, type
);
** Compute the hashing function
** We could probably do better....
for (p
= name
; *p
!= '\0'; p
++)
hfunc
= (((hfunc
<< 7) | lower(*p
)) & 077777) % STABSIZE
;
printf("(hfunc=%d) ", hfunc
);
while ((s
= *ps
) != NULL
&& (strcasecmp(name
, s
->s_name
) || s
->s_type
!= type
))
if (s
!= NULL
|| op
== ST_FIND
)
long *lp
= (long *) s
->s_class
;
printf("type %d val %lx %lx %lx %lx\n",
s
->s_type
, lp
[0], lp
[1], lp
[2], lp
[3]);
** Make a new entry and link it in.
s
= (STAB
*) xalloc(sizeof *s
);
bzero((char *) s
, sizeof *s
);
s
->s_name
= newstr(name
);