Clang-format before editing.
authorDavid Given <dg@cowlark.com>
Mon, 10 Sep 2018 20:25:14 +0000 (22:25 +0200)
committerDavid Given <dg@cowlark.com>
Mon, 10 Sep 2018 20:25:14 +0000 (22:25 +0200)
mach/proto/as/comm5.c

index e7d45c7..0703f3b 100644 (file)
@@ -5,26 +5,26 @@
  */
 /* @(#)comm5.c 1.1 */
 
-#include       "comm0.h"
-#include       "comm1.h"
-#include       "y.tab.h"
-
-extern YYSTYPE yylval;
-
-static void    readcode(int);
-static int     induo(int);
-static int     inident(int);
-static int     innumber(int);
-static int     instring(int);
-static int     inescape(void);
-static int     infbsym(const char *);
-
-int
-yylex(void)
+#include "comm0.h"
+#include "comm1.h"
+#include "y.tab.h"
+
+extern YYSTYPE yylval;
+
+static void readcode(int);
+static int induo(int);
+static int inident(int);
+static int innumber(int);
+static int instring(int);
+static int inescape(void);
+static int infbsym(const char*);
+
+int yylex(void)
 {
        int c, c0, c1;
 
-       if (pass == PASS_1) {
+       if (pass == PASS_1)
+       {
                /* scan the input file */
                do
                        c = nextchar();
@@ -33,126 +33,149 @@ yylex(void)
                        c = inident(c);
                else if (isdigit(c))
                        c = innumber(c);
-               else switch (c) {
-               case '=':
-               case '<':
-               case '>':
-               case '|':
-               case '&':
-                       c = induo(c); break;
-               case ASC_SQUO:
-               case ASC_DQUO:
-                       c = instring(c); break;
-               case ASC_COMM:
-                       do
-                               c = nextchar();
-                       while (c != '\n' && c != '\0');
-                       break;
-               case CTRL('A'):
-                       c = CODE1; readcode(1); break;
-               case CTRL('B'):
-                       c = CODE2; readcode(2); break;
-               case CTRL('C'):
-                       c = CODE4; readcode(4); break;
-               }
+               else
+                       switch (c)
+                       {
+                               case '=':
+                               case '<':
+                               case '>':
+                               case '|':
+                               case '&':
+                                       c = induo(c);
+                                       break;
+                               case ASC_SQUO:
+                               case ASC_DQUO:
+                                       c = instring(c);
+                                       break;
+                               case ASC_COMM:
+                                       do
+                                               c = nextchar();
+                                       while (c != '\n' && c != '\0');
+                                       break;
+                               case CTRL('A'):
+                                       c = CODE1;
+                                       readcode(1);
+                                       break;
+                               case CTRL('B'):
+                                       c = CODE2;
+                                       readcode(2);
+                                       break;
+                               case CTRL('C'):
+                                       c = CODE4;
+                                       readcode(4);
+                                       break;
+                       }
 
                /* produce the intermediate token file */
                if (c <= 0)
-                       return(0);
-               if (c < 256) {
+                       return (0);
+               if (c < 256)
+               {
                        putc(c, tempfile);
                        putc(0, tempfile);
-               } else {
+               }
+               else
+               {
                        putval(c);
                }
-       } else {
+       }
+       else
+       {
                /* read from intermediate token file */
                c0 = getc(tempfile);
                if (c0 == EOF)
-                       return(0);
+                       return (0);
                c1 = getc(tempfile);
                if (c1 == EOF)
-                       return(0);
+                       return (0);
 
                c = c0 + (c1 << 8);
                if (c >= 256)
                        c = getval(c);
        }
        curr_token = c;
-       return(c);
+       return (c);
 }
 
-void
-putval(int c)
+void putval(int c)
 {
        valu_t v;
        int n = 0;
-       char *p = 0;
+       charp = 0;
 
        assert(c == (c & 0xffff));
-       switch (c) {
-       case CODE1:
-               n = 1; goto putnum;
-       case CODE2:
-               n = 2; goto putnum;
-       case CODE4:
-               n = 4; goto putnum;
-       case NUMBER:
-               v = yylval.y_valu;
-               for (n = 0; n < sizeof(v); n++) {
-                       if (v == 0)
-                               break;
-                       v >>= 8;
-               }
-               assert(n <= 4);
-               c = NUMBER0 + n;
-       putnum:
-               putc(c, tempfile);
-               putc(c >> 8, tempfile);
-               v = yylval.y_valu;
-               while (--n >= 0)
-                       putc((int) (v >> (n*8)), tempfile);
-               return;
-       case IDENT:
-       case FBSYM:
-               n = sizeof(item_t *);
-               p = (char *) &yylval.y_item; break;
+       switch (c)
+       {
+               case CODE1:
+                       n = 1;
+                       goto putnum;
+               case CODE2:
+                       n = 2;
+                       goto putnum;
+               case CODE4:
+                       n = 4;
+                       goto putnum;
+               case NUMBER:
+                       v = yylval.y_valu;
+                       for (n = 0; n < sizeof(v); n++)
+                       {
+                               if (v == 0)
+                                       break;
+                               v >>= 8;
+                       }
+                       assert(n <= 4);
+                       c = NUMBER0 + n;
+               putnum:
+                       putc(c, tempfile);
+                       putc(c >> 8, tempfile);
+                       v = yylval.y_valu;
+                       while (--n >= 0)
+                               putc((int)(v >> (n * 8)), tempfile);
+                       return;
+               case IDENT:
+               case FBSYM:
+                       n = sizeof(item_t*);
+                       p = (char*)&yylval.y_item;
+                       break;
 #ifdef ASLD
-       case MODULE:
-               n = sizeof(char *);
-               p = (char *) &yylval.y_strp; break;
+               case MODULE:
+                       n = sizeof(char*);
+                       p = (char*)&yylval.y_strp;
+                       break;
 #endif
-       case STRING:
-               v = stringlen;
-               putc(c, tempfile);
-               putc(c >> 8, tempfile);
-               for (n = 0; n < sizeof(v); n++) {
-                       if (v == 0)
-                               break;
-                       v >>= 8;
-               }
-               assert(n <= 4);
-               putc(n, tempfile);
-               v = stringlen;
-               while (--n >= 0)
-                       putc((int) (v >> (n*8)), tempfile);
-               p = stringbuf;
-               n = stringlen;
-               while (--n >= 0)
-                       putc(*p++, tempfile);
-               return;
-       case OP_EQ:
-       case OP_NE:
-       case OP_LE:
-       case OP_GE:
-       case OP_LL:
-       case OP_RR:
-       case OP_OO:
-       case OP_AA:
-               break;
-       default:
-               n = sizeof(word_t);
-               p = (char *) &yylval.y_word; break;
+               case STRING:
+                       v = stringlen;
+                       putc(c, tempfile);
+                       putc(c >> 8, tempfile);
+                       for (n = 0; n < sizeof(v); n++)
+                       {
+                               if (v == 0)
+                                       break;
+                               v >>= 8;
+                       }
+                       assert(n <= 4);
+                       putc(n, tempfile);
+                       v = stringlen;
+                       while (--n >= 0)
+                               putc((int)(v >> (n * 8)), tempfile);
+                       p = stringbuf;
+                       n = stringlen;
+                       while (--n >= 0)
+                               putc(*p++, tempfile);
+                       return;
+               case OP_EQ:
+               case OP_NE:
+               case OP_LE:
+               case OP_GE:
+               case OP_LL:
+               case OP_RR:
+               case OP_OO:
+               case OP_AA:
+                       break;
+               default:
+                       n = sizeof(word_t);
+                       p = (char*)&yylval.y_word;
+                       break;
        }
        putc(c, tempfile);
        putc(c >> 8, tempfile);
@@ -160,151 +183,171 @@ putval(int c)
                putc(*p++, tempfile);
 }
 
-int
-getval(int c)
+int getval(int c)
 {
        int n = 0;
        valu_t v;
-       char *p = 0;
-
-       switch (c) {
-       case CODE1:
-               n = 1; goto getnum;
-       case CODE2:
-               n = 2; goto getnum;
-       case CODE4:
-               n = 4; goto getnum;
-       case NUMBER0:
-               c = NUMBER; goto getnum;
-       case NUMBER1:
-               n = 1; c = NUMBER; goto getnum;
-       case NUMBER2:
-               n = 2; c = NUMBER; goto getnum;
-       case NUMBER3:
-               n = 3; c = NUMBER; goto getnum;
-       case NUMBER:
-               n = 4;
-       getnum:
-               v = 0;
-               while (--n >= 0) {
-                       v <<= 8;
-                       v |= getc(tempfile);
-               }
-               yylval.y_valu = v;
-               return(c);
-       case IDENT:
-       case FBSYM:
-               n = sizeof(item_t *);
-               p = (char *) &yylval.y_item; break;
+       char* p = 0;
+
+       switch (c)
+       {
+               case CODE1:
+                       n = 1;
+                       goto getnum;
+               case CODE2:
+                       n = 2;
+                       goto getnum;
+               case CODE4:
+                       n = 4;
+                       goto getnum;
+               case NUMBER0:
+                       c = NUMBER;
+                       goto getnum;
+               case NUMBER1:
+                       n = 1;
+                       c = NUMBER;
+                       goto getnum;
+               case NUMBER2:
+                       n = 2;
+                       c = NUMBER;
+                       goto getnum;
+               case NUMBER3:
+                       n = 3;
+                       c = NUMBER;
+                       goto getnum;
+               case NUMBER:
+                       n = 4;
+               getnum:
+                       v = 0;
+                       while (--n >= 0)
+                       {
+                               v <<= 8;
+                               v |= getc(tempfile);
+                       }
+                       yylval.y_valu = v;
+                       return (c);
+               case IDENT:
+               case FBSYM:
+                       n = sizeof(item_t*);
+                       p = (char*)&yylval.y_item;
+                       break;
 #ifdef ASLD
-       case MODULE:
-               n = sizeof(char *);
-               p = (char *) &yylval.y_strp; break;
+               case MODULE:
+                       n = sizeof(char*);
+                       p = (char*)&yylval.y_strp;
+                       break;
 #endif
-       case STRING:
-               getval(getc(tempfile)+NUMBER0);
-               stringlen = n = yylval.y_valu;
-               p = stringbuf;
-               p[n] = '\0'; break;
-       case OP_EQ:
-       case OP_NE:
-       case OP_LE:
-       case OP_GE:
-       case OP_LL:
-       case OP_RR:
-       case OP_OO:
-       case OP_AA:
-               break;
-       default:
-               n = sizeof(word_t);
-               p = (char *) &yylval.y_word; break;
+               case STRING:
+                       getval(getc(tempfile) + NUMBER0);
+                       stringlen = n = yylval.y_valu;
+                       p = stringbuf;
+                       p[n] = '\0';
+                       break;
+               case OP_EQ:
+               case OP_NE:
+               case OP_LE:
+               case OP_GE:
+               case OP_LL:
+               case OP_RR:
+               case OP_OO:
+               case OP_AA:
+                       break;
+               default:
+                       n = sizeof(word_t);
+                       p = (char*)&yylval.y_word;
+                       break;
        }
        while (--n >= 0)
                *p++ = getc(tempfile);
-       return(c);
+       return (c);
 }
 
 /* ---------- lexical scan in pass 1 ---------- */
 
-int
-nextchar(void)
+int nextchar(void)
 {
        int c;
 
-       if (peekc != -1) {
+       if (peekc != -1)
+       {
                c = peekc;
                peekc = -1;
-               return(c);
+               return (c);
        }
 #ifdef ASLD
        if (archmode && --archsize < 0)
-               return(0);
+               return (0);
 #endif
        if ((c = getc(input)) == EOF)
-               return(0);
+               return (0);
        if (isascii(c) == 0)
                fatal("non-ascii character");
 #ifdef LISTING
        if (listflag & 0440)
                putc(c, listfile);
 #endif
-       return(c);
+       return (c);
 }
 
-static void
-readcode(int n)
+static void readcode(int n)
 {
        int c;
 
        yylval.y_valu = 0;
-       do {
+       do
+       {
                if (
 #ifdef ASLD
-                       (archmode && --archsize < 0)
-                       ||
+                   (archmode && --archsize < 0) ||
 #endif
-                       (c = getc(input)) == EOF
-               )
+                   (c = getc(input)) == EOF)
                        fatal("unexpected EOF in compact input");
                yylval.y_valu <<= 8;
                yylval.y_valu |= c;
        } while (--n);
 }
 
-static int
-induo(int c)
+static int induo(int c)
 {
        static short duo[] = {
-               ('='<<8) | '=', OP_EQ,
-               ('<'<<8) | '>', OP_NE,
-               ('<'<<8) | '=', OP_LE,
-               ('>'<<8) | '=', OP_GE,
-               ('<'<<8) | '<', OP_LL,
-               ('>'<<8) | '>', OP_RR,
-               ('|'<<8) | '|', OP_OO,
-               ('&'<<8) | '&', OP_AA,
-               0  /* terminates array */
+               ('=' << 8) | '=',
+               OP_EQ,
+               ('<' << 8) | '>',
+               OP_NE,
+               ('<' << 8) | '=',
+               OP_LE,
+               ('>' << 8) | '=',
+               OP_GE,
+               ('<' << 8) | '<',
+               OP_LL,
+               ('>' << 8) | '>',
+               OP_RR,
+               ('|' << 8) | '|',
+               OP_OO,
+               ('&' << 8) | '&',
+               OP_AA,
+               0 /* terminates array */
        };
-       short *p;
+       shortp;
 
-       c = (c<<8) | nextchar();
+       c = (c << 8) | nextchar();
        for (p = duo; *p; p++)
                if (*p++ == c)
-                       return(*p++);
+                       return (*p++);
        peekc = c & 0377;
-       return(c>>8);
+       return (c >> 8);
 }
 
-static char name[NAMEMAX+1];
+static char name[NAMEMAX + 1];
 
-static int
-inident(int c)
+static int inident(int c)
 {
-       char *p = name;
-       item_t *ip;
+       charp = name;
+       item_tip;
        int n = NAMEMAX;
 
-       do {
+       do
+       {
                if (--n >= 0)
                        *p++ = c;
                c = nextchar();
@@ -312,49 +355,52 @@ inident(int c)
        *p = '\0';
        peekc = c;
        ip = item_search(name);
-       if (ip == 0) {
+       if (ip == 0)
+       {
                ip = item_alloc(S_UND);
                ip->i_name = remember(name);
                /* printf("ident %s %o\n", ip->i_name, ip); */
                unresolved++;
-               item_insert(ip, H_LOCAL + (hashindex%H_SIZE));
-       } else if (hashindex < H_SIZE) {
+               item_insert(ip, H_LOCAL + (hashindex % H_SIZE));
+       }
+       else if (hashindex < H_SIZE)
+       {
                assert(H_KEY == 0);
-               yylval.y_word = (word_t) ip->i_valu;
-               return(ip->i_type);
+               yylval.y_word = (word_t)ip->i_valu;
+               return (ip->i_type);
        }
        yylval.y_item = ip;
-       return(IDENT);
+       return (IDENT);
 }
 
 #ifdef ASLD
-char *
-readident(int c)
+char* readident(int c)
 {
        int n = NAMEMAX;
-       char *p = name;
+       charp = name;
 
-       do {
+       do
+       {
                if (--n >= 0)
                        *p++ = c;
                c = nextchar();
        } while (ISALNUM(c));
        *p++ = '\0';
        peekc = c;
-       return(name);
+       return (name);
 }
 #endif
 
-static int
-innumber(int c)
+static int innumber(int c)
 {
-       char *p;
+       charp;
        int radix;
-       static char num[20+1];
+       static char num[20 + 1];
 
        p = num;
        radix = 20;
-       do {
+       do
+       {
                if (--radix < 0)
                        fatal("number too long");
                if (isupper(c))
@@ -367,21 +413,26 @@ innumber(int c)
        c = *--p;
        p = num;
        radix = 10;
-       if (*p == '0') {
+       if (*p == '0')
+       {
                radix = 8;
                p++;
-               if (*p == 'x') {
+               if (*p == 'x')
+               {
                        radix = 16;
                        p++;
-               } else if (*p == 'b') {
+               }
+               else if (*p == 'b')
+               {
                        radix = 2;
                        p++;
                }
        }
        if (radix != 16 && (c == 'f' || c == 'b'))
-               return(infbsym(num));
+               return (infbsym(num));
        yylval.y_valu = 0;
-       while (c = *p++) {
+       while (c = *p++)
+       {
                if (c > '9')
                        c -= ('a' - '9' - 1);
                c -= '0';
@@ -389,26 +440,29 @@ innumber(int c)
                        serror("digit exceeds radix");
                yylval.y_valu = yylval.y_valu * radix + c;
        }
-       return(NUMBER);
+       return (NUMBER);
 }
 
-static int
-instring(int termc)
+static int instring(int termc)
 {
-       char *p;
+       charp;
        int c;
        static int maxstring = 0;
 
-       if (! maxstring) {
+       if (!maxstring)
+       {
                maxstring = STRINGMAX;
-               if ((stringbuf = malloc(maxstring)) == 0) {
+               if ((stringbuf = malloc(maxstring)) == 0)
+               {
                        fatal("out of memory");
                }
        }
        p = stringbuf;
-       for (;;) {
+       for (;;)
+       {
                c = nextchar();
-               if (c == '\n' || c == '\0') {
+               if (c == '\n' || c == '\0')
+               {
                        peekc = c;
                        serror("non-terminated string");
                        break;
@@ -417,10 +471,12 @@ instring(int termc)
                        break;
                if (c == '\\')
                        c = inescape();
-               if (p >= &stringbuf[maxstring - 1]) {
+               if (p >= &stringbuf[maxstring - 1])
+               {
                        int cnt = p - stringbuf;
 
-                       if ((stringbuf = realloc(stringbuf, maxstring += 256)) == 0) {
+                       if ((stringbuf = realloc(stringbuf, maxstring += 256)) == 0)
+                       {
                                fatal("out of memory");
                        }
                        p = stringbuf + cnt;
@@ -429,57 +485,69 @@ instring(int termc)
        }
        stringlen = p - stringbuf;
        *p = '\0';
-       return(STRING);
+       return (STRING);
 }
 
-static int
-inescape(void)
+static int inescape(void)
 {
        int c, j, r;
 
        c = nextchar();
-       if (c >= '0' && c <= '7') {
+       if (c >= '0' && c <= '7')
+       {
                r = c - '0';
-               for (j = 0; j < 2; j++) {
+               for (j = 0; j < 2; j++)
+               {
                        c = nextchar();
-                       if (c < '0' || c > '7') {
+                       if (c < '0' || c > '7')
+                       {
                                peekc = c;
-                               return(r);
+                               return (r);
                        }
                        r <<= 3;
                        r += (c - '0');
                }
-               return(r);
+               return (r);
        }
-       switch (c) {
-       case 'b':       return('\b');
-       case 'f':       return('\f');
-       case 'n':       return('\n');
-       case 'r':       return('\r');
-       case 't':       return('\t');
-       case '\'':      return('\'');
-       case '"':       return('"');
+       switch (c)
+       {
+               case 'b':
+                       return ('\b');
+               case 'f':
+                       return ('\f');
+               case 'n':
+                       return ('\n');
+               case 'r':
+                       return ('\r');
+               case 't':
+                       return ('\t');
+               case '\'':
+                       return ('\'');
+               case '"':
+                       return ('"');
        }
-       return(c);
+       return (c);
 }
 
-static int
-infbsym(const char *p)
+static int infbsym(const char* p)
 {
        int lab;
-       item_t *ip;
+       item_tip;
 
        lab = *p++ - '0';
-       if ((unsigned)lab < 10) {
-               if (*p++ == 'f') {
-                       ip = fb_ptr[FB_FORW+lab];
-                       if (ip == 0) {
+       if ((unsigned)lab < 10)
+       {
+               if (*p++ == 'f')
+               {
+                       ip = fb_ptr[FB_FORW + lab];
+                       if (ip == 0)
+                       {
                                ip = fb_alloc(lab);
-                               fb_ptr[FB_FORW+lab] = ip;
+                               fb_ptr[FB_FORW + lab] = ip;
                        }
                        goto ok;
                }
-               ip = fb_ptr[FB_BACK+lab];
+               ip = fb_ptr[FB_BACK + lab];
                if (ip != 0 && *p == 0)
                        goto ok;
        }
@@ -487,32 +555,33 @@ infbsym(const char *p)
        ip = fb_alloc(0);
 ok:
        yylval.y_item = ip;
-       return(FBSYM);
+       return (FBSYM);
 }
 
-int
-hash(const char *p)
+int hash(const char* p)
 {
        unsigned short h;
        int c;
 
        h = 0;
-       while (c = *p++) {
+       while (c = *p++)
+       {
                h <<= 2;
                h += c;
        }
-       return(h % H_SIZE);
+       return (h % H_SIZE);
 }
 
-item_t *
-item_search(const char *p)
+item_t* item_search(const char* p)
 {
        int h;
-       item_t *ip;
+       item_tip;
 
-       for (h = hash(p); h < H_TOTAL; h += H_SIZE) {
+       for (h = hash(p); h < H_TOTAL; h += H_SIZE)
+       {
                ip = hashtab[h];
-               while (ip != 0) {
+               while (ip != 0)
+               {
                        if (strcmp(p, ip->i_name) == 0)
                                goto done;
                        ip = ip->i_next;
@@ -520,25 +589,24 @@ item_search(const char *p)
        }
 done:
        hashindex = h;
-       return(ip);
+       return (ip);
 }
 
-void
-item_insert(item_t *ip, int h)
+void item_insert(item_t* ip, int h)
 {
        ip->i_next = hashtab[h];
        hashtab[h] = ip;
 }
 
-item_t *
-item_alloc(int typ)
+item_t* item_alloc(int typ)
 {
-       item_t *ip;
+       item_tip;
        static int nleft = 0;
-       static item_t *next;
+       static item_tnext;
 
-       if (--nleft < 0) {
-               next = (item_t *) malloc(MEMINCR);
+       if (--nleft < 0)
+       {
+               next = (item_t*)malloc(MEMINCR);
                if (next == 0)
                        fatal("out of memory");
                nleft += (MEMINCR / sizeof(item_t));
@@ -548,36 +616,34 @@ item_alloc(int typ)
        ip->i_type = typ;
        ip->i_name = 0;
        ip->i_valu = 0;
-       return(ip);
+       return (ip);
 }
 
-item_t *
-fb_alloc(int lab)
+item_t* fb_alloc(int lab)
 {
        item_t *ip, *p;
 
        ip = item_alloc(S_UND);
-       p = fb_ptr[FB_TAIL+lab];
+       p = fb_ptr[FB_TAIL + lab];
        if (p == 0)
-               fb_ptr[FB_HEAD+lab] = ip;
+               fb_ptr[FB_HEAD + lab] = ip;
        else
                p->i_next = ip;
-       fb_ptr[FB_TAIL+lab] = ip;
-       return(ip);
+       fb_ptr[FB_TAIL + lab] = ip;
+       return (ip);
 }
 
-item_t *
-fb_shift(int lab)
+item_t* fb_shift(int lab)
 {
-       item_t *ip;
+       item_tip;
 
-       ip = fb_ptr[FB_FORW+lab];
+       ip = fb_ptr[FB_FORW + lab];
        if (ip == 0)
                if (pass == PASS_1)
                        ip = fb_alloc(lab);
                else
-                       ip = fb_ptr[FB_HEAD+lab];
-       fb_ptr[FB_BACK+lab] = ip;
-       fb_ptr[FB_FORW+lab] = ip->i_next;
-       return(ip);
+                       ip = fb_ptr[FB_HEAD + lab];
+       fb_ptr[FB_BACK + lab] = ip;
+       fb_ptr[FB_FORW + lab] = ip->i_next;
+       return (ip);
 }