V8/usr/src/cmd/hoc/symbol.c

Compare this file to the similar file:
Show the results in this format:

#include "hoc.h"
#include "y.tab.h"

static Symbol *symlist = 0;  /* symbol table: linked list */

Symbol *lookup(s)	/* find s in symbol table */
	char *s;
{
	Symbol *sp;

	for (sp = symlist; sp != (Symbol *) 0; sp = sp->next)
		if (strcmp(sp->name, s) == 0)
			return sp;
	return 0;	/* 0 ==> not found */	
}

Symbol *install(s, t, d)  /* install s in symbol table */
	char *s;
	int t;
	double d;
{
	Symbol *sp;
	char *emalloc();

	sp = (Symbol *) emalloc(sizeof(Symbol));
	sp->name = emalloc(strlen(s)+1); /* +1 for '\0' */
	strcpy(sp->name, s);
	sp->type = t;
	sp->u.val = d;
	sp->next = symlist; /* put at front of list */
	symlist = sp;
	return sp;
}

char *emalloc(n)	/* check return from malloc */
	unsigned n;
{
	char *p, *malloc();

	p = malloc(n);
	if (p == 0)
		execerror("out of memory", (char *) 0);
	return p;
}