Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>
#include "hoc.h"
#include "y.tab.h"

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

Symbol*
lookup(char* s) /* find s in symbol table */
{
        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(char* s, int t, double d)  /* install s in symbol table */
{
        Symbol *sp;

        sp = 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;
}

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

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

Formal*
formallist(Symbol *formal, Formal *list)        /* add formal to list */
{
        Formal *f;

        f = emalloc(sizeof(Formal));
        f->sym = formal;
        f->save = 0;
        f->next = list;
        return f;
}