Annotation of 41BSD/cmd/ratfor/r0.c, revision 1.1.1.1

1.1       root        1: #include "r.h"
                      2: 
                      3: int    swlevel = -1;
                      4: int    swexit[5];
                      5: int    nextcase[5];
                      6: 
                      7: swcode() {
                      8:        transfer = 0;
                      9:        putcom("switch");
                     10:        swlevel++;
                     11:        if (swlevel >= 5)
                     12:                error("Switches nested > 5");
                     13:        swexit[swlevel] = yyval = genlab(1);
                     14:        outcode("\tI");
                     15:        outnum(yyval);
                     16:        outcode(" = ");
                     17:        balpar();
                     18:        outdon();
                     19:        nextcase[swlevel] = 0;
                     20:        indent++;
                     21: }
                     22: 
                     23: getcase() {
                     24:        int t, lpar;
                     25:        char token[100];
                     26: 
                     27:        if (nextcase[swlevel] != 0) {
                     28:                outgoto(swexit[swlevel]);
                     29:                outcont(nextcase[swlevel]);
                     30:        }
                     31:        indent--;
                     32:        outcode("\tif(.not.(");
                     33:        do {
                     34:                outcode("I");
                     35:                outnum(swexit[swlevel]);
                     36:                outcode(".eq.(");
                     37:                lpar = 0;
                     38:                do {
                     39:                        if ((t=gtok(token)) == ':')
                     40:                                break;
                     41:                        if (t == '(')
                     42:                                lpar++;
                     43:                        else if (t == ')')
                     44:                                lpar--;
                     45:                        else if (t == ',') {
                     46:                                if (lpar == 0)
                     47:                                        break;
                     48:                                }
                     49:                        outcode(token);
                     50:                } while (lpar >= 0);
                     51:                if (lpar < 0)
                     52:                        error("Missing left parenthesis in case");
                     53:                if (t == ',')
                     54:                        outcode(").or.");
                     55:        } while (t != ':');
                     56:        if (lpar != 0)
                     57:                error("Missing parenthesis in case");
                     58:        outcode(")))");
                     59:        nextcase[swlevel] = genlab(1);
                     60:        outgoto(nextcase[swlevel]);
                     61:        indent++;
                     62: }
                     63: 
                     64: getdefault() {
                     65:        char token[20];
                     66:        if (gnbtok(token) != ':')
                     67:                error("Missing colon after default");
                     68:        outgoto(swexit[swlevel]);
                     69:        outcont(nextcase[swlevel]);
                     70:        indent--;
                     71:        putcom("default");
                     72:        indent++;
                     73: }
                     74: 
                     75: endsw(n, def) {
                     76:        if (def == 0)
                     77:                outcont(nextcase[swlevel]);
                     78:        swlevel--;
                     79:        if (swlevel < -1)
                     80:                error("Switches unwound too far");
                     81:        indent--;
                     82:        outcont(n);
                     83: }

unix.superglobalmegacorp.com

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