File: enter.c

package info (click to toggle)
icmake 7.18.00-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 2,840 kB
  • sloc: ansic: 7,784; makefile: 3,811; sh: 319; cpp: 83
file content (36 lines) | stat: -rw-r--r-- 1,061 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
                            E N T E R . C
*/

#include "iccomp.h"

void enter()
{
    register size_t
        n_defined;
    register SYMBOL_
        *sym;

    n_defined = entertab->n_defined;

    if (looksym(entertab) != n_defined)     /* look for symbol in active tab. */
    {                                       /* message if multiply defined */
        semantic("%s multiply defined", lexstring);
        return;
    }

    if (entertab->n_allocated == n_defined) /* full table ? */
        entertab->symbol =                  /* room for 20 more symbols */
            xrealloc(entertab->symbol,
                     (entertab->n_allocated += 20) * sizeof(SYMBOL_));

    sym = entertab->symbol + n_defined;

    sym->name = xstrdup(lexstring);         /* set the name of the var */
    sym->var.type = vartype;                /* set the type of the var */

    if (entertab == &global)                /* clear new global entry */
        memset (&sym->var.vu, 0, sizeof(VAR_UNION_));

    entertab->n_defined++;                  /* next free */
}