* Copyright (c) 1983, 1995 Eric P. Allman
* Copyright (c) 1988, 1993
* The Regents of the University of California. All rights reserved.
* %sccs.include.redist.c%
static char sccsid
[] = "@(#)stab.c 8.2 (Berkeley) %G%";
** 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
);
** STABAPPLY -- apply function to all stab entries
** func -- the function to apply. It will be given one
** parameter (the stab entry).
** arg -- an arbitrary argument, passed to func.
void (*func
)__P((STAB
*, int));
for (shead
= SymTab
; shead
< &SymTab
[STABSIZE
]; shead
++)
for (s
= *shead
; s
!= NULL
; s
= s
->s_next
)
printf("stabapply: trying %d/%s\n",