Annotation of researchv10no/cmd/prefer/prefawk/parse.c, revision 1.1.1.1

1.1       root        1: #define DEBUG
                      2: #include <stdio.h>
                      3: #include "awk.h"
                      4: #include "y.tab.h"
                      5: 
                      6: Node *nodealloc(n)
                      7: {
                      8:        register Node *x;
                      9:        x = (Node *) Malloc(sizeof(Node) + (n-1)*sizeof(Node *));
                     10:        if (x == NULL)
                     11:                error(FATAL, "out of space in nodealloc");
                     12:        x->nnext = NULL;
                     13:        x->lineno = lineno;
                     14:        return(x);
                     15: }
                     16: 
                     17: Node *exptostat(a) Node *a;
                     18: {
                     19:        a->ntype = NSTAT;
                     20:        return(a);
                     21: }
                     22: 
                     23: Node *node0(a)
                     24: {
                     25:        register Node *x;
                     26:        x = nodealloc(0);
                     27:        x->nobj = a;
                     28:        return(x);
                     29: }
                     30: 
                     31: Node *node1(a,b) Node *b;
                     32: {
                     33:        register Node *x;
                     34:        x = nodealloc(1);
                     35:        x->nobj = a;
                     36:        x->narg[0]=b;
                     37:        return(x);
                     38: }
                     39: 
                     40: Node *node2(a,b,c) Node *b, *c;
                     41: {
                     42:        register Node *x;
                     43:        x = nodealloc(2);
                     44:        x->nobj = a;
                     45:        x->narg[0] = b;
                     46:        x->narg[1] = c;
                     47:        return(x);
                     48: }
                     49: 
                     50: Node *node3(a,b,c,d) Node *b, *c, *d;
                     51: {
                     52:        register Node *x;
                     53:        x = nodealloc(3);
                     54:        x->nobj = a;
                     55:        x->narg[0] = b;
                     56:        x->narg[1] = c;
                     57:        x->narg[2] = d;
                     58:        return(x);
                     59: }
                     60: 
                     61: Node *node4(a,b,c,d,e) Node *b, *c, *d, *e;
                     62: {
                     63:        register Node *x;
                     64:        x = nodealloc(4);
                     65:        x->nobj = a;
                     66:        x->narg[0] = b;
                     67:        x->narg[1] = c;
                     68:        x->narg[2] = d;
                     69:        x->narg[3] = e;
                     70:        return(x);
                     71: }
                     72: 
                     73: Node *stat3(a,b,c,d) Node *b, *c, *d;
                     74: {
                     75:        register Node *x;
                     76:        x = node3(a,b,c,d);
                     77:        x->ntype = NSTAT;
                     78:        return(x);
                     79: }
                     80: 
                     81: Node *op2(a,b,c) Node *b, *c;
                     82: {
                     83:        register Node *x;
                     84:        x = node2(a,b,c);
                     85:        x->ntype = NEXPR;
                     86:        return(x);
                     87: }
                     88: 
                     89: Node *op1(a,b) Node *b;
                     90: {
                     91:        register Node *x;
                     92:        x = node1(a,b);
                     93:        x->ntype = NEXPR;
                     94:        return(x);
                     95: }
                     96: 
                     97: Node *stat1(a,b) Node *b;
                     98: {
                     99:        register Node *x;
                    100:        x = node1(a,b);
                    101:        x->ntype = NSTAT;
                    102:        return(x);
                    103: }
                    104: 
                    105: Node *op3(a,b,c,d) Node *b, *c, *d;
                    106: {
                    107:        register Node *x;
                    108:        x = node3(a,b,c,d);
                    109:        x->ntype = NEXPR;
                    110:        return(x);
                    111: }
                    112: 
                    113: Node *op4(a,b,c,d,e) Node *b, *c, *d, *e;
                    114: {
                    115:        register Node *x;
                    116:        x = node4(a,b,c,d,e);
                    117:        x->ntype = NEXPR;
                    118:        return(x);
                    119: }
                    120: 
                    121: Node *stat2(a,b,c) Node *b, *c;
                    122: {
                    123:        register Node *x;
                    124:        x = node2(a,b,c);
                    125:        x->ntype = NSTAT;
                    126:        return(x);
                    127: }
                    128: 
                    129: Node *stat4(a,b,c,d,e) Node *b, *c, *d, *e;
                    130: {
                    131:        register Node *x;
                    132:        x = node4(a,b,c,d,e);
                    133:        x->ntype = NSTAT;
                    134:        return(x);
                    135: }
                    136: 
                    137: Node *valtonode(a, b) Cell *a;
                    138: {
                    139:        register Node *x;
                    140: 
                    141:        a->ctype = OCELL;
                    142:        a->csub = b;
                    143:        x = node1(0, a);
                    144:        x->ntype = b == CFLD ? NFIELD : NVALUE;
                    145:        return(x);
                    146: }
                    147: 
                    148: Node *rectonode()
                    149: {
                    150:        /* return valtonode(lookup("$0", symtab), CFLD); */
                    151:        return valtonode(recloc, CFLD);
                    152: }
                    153: 
                    154: Node *makearr(p) Node *p;
                    155: {
                    156:        Cell *cp;
                    157: 
                    158:        if (isvalue(p)) {
                    159:                cp = (Cell *) (p->narg[0]);
                    160:                if (isfunc(cp))
                    161:                        yyerror("%s is a function, not an array", cp->nval);
                    162:                else if (!isarr(cp)) {
                    163:                        xfree(cp->sval);
                    164:                        cp->sval = (uchar *) makesymtab(NSYMTAB);
                    165:                        cp->tval = ARR;
                    166:                }
                    167:        }
                    168:        return p;
                    169: }
                    170: 
                    171: Node *pa2stat(a,b,c) Node *a, *b, *c;
                    172: {
                    173:        register Node *x;
                    174:        x = node4(PASTAT2, a, b, c, (Node *) paircnt);
                    175:        paircnt++;
                    176:        x->ntype = NSTAT;
                    177:        return(x);
                    178: }
                    179: 
                    180: Node *linkum(a,b) Node *a, *b;
                    181: {
                    182:        register Node *c;
                    183: 
                    184:        if (errorflag)  /* don't link things that are wrong */
                    185:                return a;
                    186:        if (a == NULL) return(b);
                    187:        else if (b == NULL) return(a);
                    188:        for (c = a; c->nnext != NULL; c = c->nnext)
                    189:                ;
                    190:        c->nnext = b;
                    191:        return(a);
                    192: }
                    193: 
                    194: defn(v, vl, st)        /* turn on FCN bit in definition */
                    195:        Cell *v;
                    196:        Node *st, *vl;  /* body of function, arglist */
                    197: {
                    198:        Node *p;
                    199:        int n;
                    200: 
                    201:        if (isarr(v)) {
                    202:                yyerror("`%s' is an array name and a function name", v->nval);
                    203:                return;
                    204:        }
                    205:        v->tval = FCN;
                    206:        v->sval = (uchar *) st;
                    207:        n = 0;  /* count arguments */
                    208:        for (p = vl; p; p = p->nnext)
                    209:                n++;
                    210:        v->fval = n;
                    211:        dprintf("defining func %s (%d args)\n", v->nval, n);
                    212: }
                    213: 
                    214: isarg(s)       /* is s in argument list for current function? */
                    215:        uchar *s;
                    216: {
                    217:        extern Node *arglist;
                    218:        Node *p = arglist;
                    219:        int n;
                    220: 
                    221:        for (n = 0; p != 0; p = p->nnext, n++)
                    222:                if (strcmp(((Cell *)(p->narg[0]))->nval, s) == 0)
                    223:                        return n;
                    224:        return -1;
                    225: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.