
/* This file was automatically generated by pclu.*/

#include "pclu_err.h"
#include "pclu_sys.h"


extern errcode c_type();
extern errcode typespecOPequal();
extern errcode c_envOPget_type_type();
extern errcode idnOPcreate();
extern errcode idnOPget_str();
extern errcode oneofOPmake_6();
extern errcode sequenceOPnew();
extern errcode c_envOPget_type();
extern errcode oneofOPmake_5();
extern errcode oneofOPmake_25();
extern errcode boolOPnot();
extern errcode c_envOPget_null_type();
extern errcode c_envOPget_bool_type();
extern errcode c_envOPget_int_type();
extern errcode c_envOPget_real_type();
extern errcode c_envOPget_char_type();
extern errcode c_envOPget_str_type();
extern errcode c_envOPerr();
extern errcode oneofOPmake_10();
extern errcode oneofOPmake_13();
extern errcode oneofOPmake_1();
extern errcode exprOPcreate();
CLUREF STR_parameter_040_047;
CLUREF STR__047_040declared_040with_040illegal_040type;
static int c_parm_type_own_init = 0;

/**** BEGIN PROCEDURE c_parm_type ****/

errcode c_parm_type(e, i, t, ret_1, ret_2)
CLUREF e;
CLUREF i;
CLUREF t;
CLUREF *ret_1;
CLUREF *ret_2;
    {
    errcode err;
    errcode ecode2;
    CLUREF xa;
    CLUREF ni;
    CLUREF nt;
        if (c_parm_type_own_init == 0) {
        stringOPcons("parameter \'", CLU_1, CLU_11, &STR_parameter_040_047);
        stringOPcons("\' declared with illegal type", CLU_1, CLU_28, &STR__047_040declared_040with_040illegal_040type);
        c_parm_type_own_init = 1;
    }
    enter_proc(6);

  LINE(7);
    {
    CLUREF T_1_1;
    err = c_type(e, t, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    t.num = T_1_1.num;
    }

  LINE(9);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = c_envOPget_type_type(e, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    err = typespecOPequal(t, T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    if (T_1_2.num == true) {

  LINE(10);
        {
            {CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
            err = idnOPget_str(i, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            err = sequenceOPnew(&T_2_2);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(6, T_2_2.num, T_2_3);
            err = idnOPcreate(T_2_1, T_2_3, &T_2_4);
            if (err != ERR_ok) goto ex_0;
            ni.num = T_2_4.num;
            }
            }

  LINE(11);
        {
            {CLUREF T_2_1;
            CLUREF T_2_2;
            CellAlloc(5, ni.num, T_2_1);
            err = c_envOPget_type(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            nt.num = T_2_2.num;
            }
            }

  LINE(12);
        {
        CLUREF T_2_1;
        CellAlloc(25, nt.num, T_2_1);
        xa.num = T_2_1.num;
        }
        }
    else {

  LINE(13);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        CLUREF T_2_4;
        CLUREF T_2_5;
        CLUREF T_2_6;
        CLUREF T_2_7;
        CLUREF T_2_8;
        CLUREF T_2_9;
        CLUREF T_2_10;
        CLUREF T_2_11;
        CLUREF T_2_12;
        CLUREF T_2_13;
        CLUREF T_2_14;
        CLUREF T_2_15;
        CLUREF T_2_16;
        CLUREF T_2_17;
        CLUREF T_2_18;
        err = c_envOPget_null_type(e, &T_2_6);
        if (err != ERR_ok) goto ex_0;
        err = typespecOPequal(t, T_2_6, &T_2_7);
        if (err != ERR_ok) goto ex_0;
        T_2_5.num = T_2_7.num;
        if (!T_2_7.num) {
            err = c_envOPget_bool_type(e, &T_2_8);
            if (err != ERR_ok) goto ex_0;
            err = typespecOPequal(t, T_2_8, &T_2_9);
            if (err != ERR_ok) goto ex_0;
            T_2_5.num = T_2_9.num;
        }
        T_2_4.num = T_2_5.num;
        if (!T_2_5.num) {
            err = c_envOPget_int_type(e, &T_2_10);
            if (err != ERR_ok) goto ex_0;
            err = typespecOPequal(t, T_2_10, &T_2_11);
            if (err != ERR_ok) goto ex_0;
            T_2_4.num = T_2_11.num;
        }
        T_2_3.num = T_2_4.num;
        if (!T_2_4.num) {
            err = c_envOPget_real_type(e, &T_2_12);
            if (err != ERR_ok) goto ex_0;
            err = typespecOPequal(t, T_2_12, &T_2_13);
            if (err != ERR_ok) goto ex_0;
            T_2_3.num = T_2_13.num;
        }
        T_2_2.num = T_2_3.num;
        if (!T_2_3.num) {
            err = c_envOPget_char_type(e, &T_2_14);
            if (err != ERR_ok) goto ex_0;
            err = typespecOPequal(t, T_2_14, &T_2_15);
            if (err != ERR_ok) goto ex_0;
            T_2_2.num = T_2_15.num;
        }
        T_2_1.num = T_2_2.num;
        if (!T_2_2.num) {
            err = c_envOPget_str_type(e, &T_2_16);
            if (err != ERR_ok) goto ex_0;
            err = typespecOPequal(t, T_2_16, &T_2_17);
            if (err != ERR_ok) goto ex_0;
            T_2_1.num = T_2_17.num;
        }
        T_2_18.num = T_2_1.num ^ 1;
        if (T_2_18.num == true) {

  LINE(15);
            {
            CLUREF T_3_1;
            CLUREF T_3_2;
            sequenceOPnew2(CLU_3, &T_3_1);
            T_3_1.vec->data[0] = STR_parameter_040_047.num;
            err = idnOPget_str(i, &T_3_2);
            if (err != ERR_ok) goto ex_0;
            T_3_1.vec->data[1] = T_3_2.num;
            T_3_1.vec->data[2] = STR__047_040declared_040with_040illegal_040type.num;
            err = c_envOPerr(e, T_3_1);
            if (err != ERR_ok) goto ex_0;
            }
            }
            }/* end if */

  LINE(18);
        {
            {CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            err = idnOPget_str(i, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(10, t.num, T_2_2);
            err = idnOPcreate(T_2_1, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            ni.num = T_2_3.num;
            }
            }

  LINE(19);
        {
        CLUREF T_2_1;
        CellAlloc(13, ni.num, T_2_1);
        xa.num = T_2_1.num;
        }
        }}/* end if */

  LINE(21);
    {
    {
    ret_1->num = t.num;
    }
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = exprOPcreate(xa, t, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    CellAlloc(1, T_1_1.num, T_1_2);
    ret_2->num = T_1_2.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_parm_type ****/


extern errcode c_equate_expr();
extern errcode oneofOPmake_7();
extern errcode c_xtypeset();
extern errcode c_pathname();

/**** BEGIN PROCEDURE c_equateval ****/

errcode c_equateval(e, val, ret_1)
CLUREF e;
CLUREF val;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF x;
    CLUREF set;
    CLUREF d;
    enter_proc(24);

  LINE(25);
    {
    switch (val.cell->tag) {
    case 2: 
         {CLUREF T_1_1;
        T_1_1.num = val.cell->value;
        x.num = T_1_1.num;

  LINE(27);
            {
            {
            CLUREF T_2_1;
            err = c_equate_expr(e, x, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    case 3: 
         {CLUREF T_1_2;
        T_1_2.num = val.cell->value;
        set.num = T_1_2.num;

  LINE(29);
            {
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = c_xtypeset(e, set, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(7, T_2_1.num, T_2_2);
            ret_1->num = T_2_2.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    case 1: 
         {CLUREF T_1_3;
        T_1_3.num = val.cell->value;
        d.num = T_1_3.num;

  LINE(31);
            {
            {
            CLUREF T_2_1;
            err = c_pathname(e, d, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    }
    }
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_equateval ****/


extern errcode exprOPget_abs();
extern errcode idnOPget_kind();
extern errcode c_expr();
extern errcode e_expr();
extern errcode exprOPset_abs();
extern errcode exprOPset_typespec();
extern errcode exprOPget_typespec();

/**** BEGIN PROCEDURE c_equate_expr ****/

errcode c_equate_expr(e, x, ret_1)
CLUREF e;
CLUREF x;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF xa;
    CLUREF k;
    CLUREF nx;
    enter_proc(35);

  LINE(36);
    {
    CLUREF T_1_1;
    err = exprOPget_abs(x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    switch (T_1_1.cell->tag) {
    case 13: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        xa.num = T_1_2.num;

  LINE(38);
            {
            CLUREF T_2_1;
            err = idnOPget_kind(xa, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            switch (T_2_1.cell->tag) {
            case 7: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                k.num = T_2_2.num;

  LINE(40);
                    {
                    {
                    CLUREF T_3_1;
                    CellAlloc(7, k.num, T_3_1);
                    ret_1->num = T_3_1.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            default: {
            }
            }
            }
            break;
            }
    default: {
    }
    }
    }

  LINE(45);
    {
    CLUREF T_1_1;
    err = c_expr(e, x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(46);
    {
        {CLUREF T_1_1;
        err = e_expr(e, x, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        nx.num = T_1_1.num;
        }
        }

  LINE(47);
    {
    CLUREF T_1_1;
    err = exprOPget_abs(nx, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    err = exprOPset_abs(x, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(48);
    {
    CLUREF T_1_1;
    err = exprOPget_typespec(nx, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    err = exprOPset_typespec(x, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(49);
    {
    {
    CLUREF T_1_1;
    CellAlloc(1, x.num, T_1_1);
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_equate_expr ****/


extern errcode recordOPget_2();
extern errcode recordOPget_1();
extern errcode recordOPget_3();
extern errcode c_envOPchecking_specs();
extern errcode c_envOPbegin_specs();
extern errcode c_envOPscopify();
extern errcode c_envOPdeclare();
extern errcode recordOPset_2();
extern errcode c_envOPequates();
extern errcode c_operdecllist();
extern errcode c_envOPend_specs();
extern errcode c_envOPbuilding_specs();
extern errcode c_envOPbegin_scope();
extern errcode c_envOPbegin_recheck();
extern errcode c_add_opspecs();
extern errcode c_envOPend_recheck();
extern errcode c_envOPend_scope();
extern errcode sequenceOPelements();
extern errcode sequenceOPaddh();

/**** BEGIN PROCEDURE c_xtypeset ****/

errcode c_xtypeset(e, set, ret_1)
CLUREF e;
CLUREF set;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF i;
    CLUREF eqs;
    CLUREF ops;
    CLUREF nt;
    CLUREF x;
    CLUREF nops;
    CLUREF od;
    CLUREF op;
    enter_proc(52);

  LINE(53);
    {
        {CLUREF T_1_1;
        T_1_1.num = set.vec->data[1];
        i.num = T_1_1.num;
        }
        }

  LINE(54);
    {
        {CLUREF T_1_1;
        T_1_1.num = set.vec->data[0];
        eqs.num = T_1_1.num;
        }
        }

  LINE(55);
    {
        {CLUREF T_1_1;
        T_1_1.num = set.vec->data[2];
        ops.num = T_1_1.num;
        }
        }

  LINE(56);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = c_envOPchecking_specs(e, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    T_1_2.num = T_1_1.num ^ 1;
    if (T_1_2.num == true) {

  LINE(57);
        {
        err = c_envOPbegin_specs(e);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(58);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        CLUREF T_2_4;
        err = idnOPget_str(i, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        err = sequenceOPnew(&T_2_2);
        if (err != ERR_ok) goto ex_0;
        CellAlloc(5, T_2_2.num, T_2_3);
        err = idnOPcreate(T_2_1, T_2_3, &T_2_4);
        if (err != ERR_ok) goto ex_0;
        i.num = T_2_4.num;
        }

  LINE(59);
        {
        err = c_envOPscopify(e, i);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(60);
        {
            {CLUREF T_2_1;
            CLUREF T_2_2;
            CellAlloc(5, i.num, T_2_1);
            err = c_envOPget_type(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            nt.num = T_2_2.num;
            }
            }

  LINE(61);
        {
            {CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CellAlloc(25, nt.num, T_2_1);
            err = c_envOPget_type_type(e, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            err = exprOPcreate(T_2_1, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            x.num = T_2_3.num;
            }
            }

  LINE(62);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        T_2_1.num = set.vec->data[1];
        CellAlloc(1, x.num, T_2_2);
        err = c_envOPdeclare(e, T_2_1, T_2_2);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(63);
        {
        set.vec->data[1]  = i.num;
        }

  LINE(64);
        {
        err = c_envOPequates(e, eqs);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(65);
        {
        err = c_operdecllist(e, ops);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(66);
        {
        err = c_envOPend_specs(e);
        if (err != ERR_ok) goto ex_0;
        }
        }
        }/* end if */

  LINE(68);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = c_envOPbuilding_specs(e, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    T_1_2.num = T_1_1.num ^ 1;
    if (T_1_2.num == true) {

  LINE(69);
        {
        err = c_envOPbegin_scope(e);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(70);
        {
        err = c_envOPbegin_recheck(e, CLU_1);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(71);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        err = sequenceOPnew(&T_2_1);
        if (err != ERR_ok) goto ex_0;
        CellAlloc(6, T_2_1.num, T_2_2);
        err = c_envOPdeclare(e, i, T_2_2);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(72);
        {
        err = c_add_opspecs(e, i, ops);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(73);
        {
        err = c_operdecllist(e, ops);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(74);
        {
        err = c_envOPend_recheck(e, CLU_1);
        if (err != ERR_ok) goto ex_0;
        }

  LINE(75);
        {
        err = c_envOPend_scope(e);
        if (err != ERR_ok) goto ex_0;
        }
        }
        }/* end if */

  LINE(77);
    {
        {CLUREF T_1_1;
        err = sequenceOPnew(&T_1_1);
        if (err != ERR_ok) goto ex_0;
        nops.num = T_1_1.num;
        }
        }

  LINE(78);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = ops.vec->size; 
        T_1_3 = ops;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            od.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(79);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = od.vec->data[1];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    op.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(80);
                    {
                    CLUREF T_3_1;
                    err = sequenceOPaddh(nops, op, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    nops.num = T_3_1.num;
                    }
                }
            }
            end_inline_for_2:;
        }
    }
    end_inline_for_1:;

  LINE(83);
    {
    {
    CLUREF T_1_1;
    RecordAlloc(2, T_1_1);
    T_1_1.vec->data[1]  = i.num;
    T_1_1.vec->data[0]  = nops.num;
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_xtypeset ****/


extern errcode c_envOPget_du();
extern errcode xlibOPlookup();
extern errcode xlibOPget_du();
extern errcode c_get_idnkind();

/**** BEGIN PROCEDURE c_pathname ****/

errcode c_pathname(e, path, ret_1)
CLUREF e;
CLUREF path;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF gen;
    enter_proc(87);

  LINE(88);
    {
        {CLUREF T_2_1;
        CLUREF T_2_2;
        err = xlibOPlookup(path, &T_2_1);
        if (err != ERR_ok) goto ex_1;
        err = c_envOPget_du(e, T_2_1, &T_2_2);
        if (err != ERR_ok) goto ex_1;
        gen.num = T_2_2.num;
        }
        }
        goto end_1;
        ex_1:
            if ((err == ERR_not_found)) {

  LINE(90);
                {
                CLUREF T_2_1;
                CLUREF T_2_2;
                err = xlibOPget_du(path, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                err = c_envOPget_du(e, T_2_1, &T_2_2);
                if (err != ERR_ok) goto ex_0;
                gen.num = T_2_2.num;
                }

  LINE(91);
                {
                {
                CLUREF T_2_1;
                err = c_get_idnkind(e, gen, CLU_2, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                ret_1->num = T_2_1.num;
                }
                {signal (ERR_ok);}}
            }
            else {
                goto ex_0;
            }
        end_1:;

  LINE(93);
    {
    {
    CLUREF T_1_1;
    err = c_get_idnkind(e, gen, CLU_0, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_pathname ****/


extern errcode oneofOPmake_2();
extern errcode c_get_duspecs();
extern errcode sequenceOPempty();
extern errcode oneofOPmake_3();
extern errcode intOPequal();

/**** BEGIN PROCEDURE c_get_idnkind ****/

errcode c_get_idnkind(e, gen, want, ret_1)
CLUREF e;
CLUREF gen;
CLUREF want;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF k;
    CLUREF clut;
    CLUREF xa;
    CLUREF t;
    CLUREF specs;
    CLUREF inf;
    CLUREF ot;
    CLUREF ta;
    enter_proc(96);

  LINE(97);
    {
        {CLUREF T_1_1;
        CellAlloc(2, gen.num, T_1_1);
        k.num = T_1_1.num;
        }
        }

  LINE(98);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        RecordAlloc(2, T_1_1);
        T_1_1.vec->data[0]  = gen.num;
        err = sequenceOPnew(&T_1_2);
        if (err != ERR_ok) goto ex_0;
        T_1_1.vec->data[1]  = T_1_2.num;
        clut.num = T_1_1.num;
        }
        }

  LINE(102);
    {
        {CLUREF T_1_1;
        err = c_get_duspecs(e, gen, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        specs.num = T_1_1.num;
        }
        }

  LINE(103);
    {
    switch (specs.cell->tag) {
    case 1: 
         {CLUREF T_1_1;
        T_1_1.num = specs.cell->value;
        inf.num = T_1_1.num;

  LINE(105);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            T_2_1.num = inf.vec->data[0];
            err = sequenceOPempty(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_3.num = T_2_2.num ^ 1;
            if (T_2_3.num == true) {

  LINE(106);
                {
                {
                ret_1->num = k.num;
                }
                {signal (ERR_ok);}}
                }
                }/* end if */

  LINE(107);
            {
            CLUREF T_2_1;
            CellAlloc(3, clut.num, T_2_1);
            xa.num = T_2_1.num;
            }

  LINE(108);
            {
            CLUREF T_2_1;
            T_2_1.num = inf.vec->data[1];
            t.num = T_2_1.num;
            }
            break;
            }
    case 3: 
         {CLUREF T_1_2;
        T_1_2.num = specs.cell->value;
        inf.num = T_1_2.num;

  LINE(110);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            T_2_1.num = inf.vec->data[1];
            err = sequenceOPempty(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_3.num = T_2_2.num ^ 1;
            if (T_2_3.num == true) {

  LINE(111);
                {
                {
                ret_1->num = k.num;
                }
                {signal (ERR_ok);}}
                }
                }/* end if */

  LINE(112);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CellAlloc(3, clut.num, T_2_1);
            err = c_envOPget_type(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(25, T_2_2.num, T_2_3);
            xa.num = T_2_3.num;
            }

  LINE(113);
            {
            CLUREF T_2_1;
            err = c_envOPget_type_type(e, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            t.num = T_2_1.num;
            }
            break;
            }
    case 5: 
    case 2: 
         {

  LINE(115);
            {
            {
            ret_1->num = k.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    default: {

  LINE(117);
        {
        CLUREF T_2_1;
        T_2_1.num = (want.num == 0)? true : false;
        if (T_2_1.num == true) {

  LINE(118);
            {
            {
            ret_1->num = k.num;
            }
            {signal (ERR_ok);}}
            }
        else {
        CLUREF T_2_2;
        T_2_2.num = (want.num == 2)? true : false;
        if (T_2_2.num == true) {

  LINE(120);
            {
            CLUREF T_3_1;
            CellAlloc(3, clut.num, T_3_1);
            xa.num = T_3_1.num;
            }

  LINE(121);
            {
                {CLUREF T_3_1;
                CellAlloc(1, clut.num, T_3_1);
                ot.num = T_3_1.num;
                }
                }

  LINE(122);
            {
            CLUREF T_3_1;
            CLUREF T_3_2;
            CellAlloc(6, ot.num, T_3_1);
            err = c_envOPget_type(e, T_3_1, &T_3_2);
            if (err != ERR_ok) goto ex_0;
            t.num = T_3_2.num;
            }
            }
        else {

  LINE(123);
            {
                {CLUREF T_3_1;
                CellAlloc(3, clut.num, T_3_1);
                ta.num = T_3_1.num;
                }
                }

  LINE(124);
            {
            CLUREF T_3_1;
            CLUREF T_3_2;
            err = c_envOPget_type(e, ta, &T_3_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(25, T_3_1.num, T_3_2);
            xa.num = T_3_2.num;
            }

  LINE(125);
            {
            CLUREF T_3_1;
            err = c_envOPget_type_type(e, &T_3_1);
            if (err != ERR_ok) goto ex_0;
            t.num = T_3_1.num;
            }
            }}}/* end if */
    }
    }
    }

  LINE(128);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = exprOPcreate(xa, t, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    CellAlloc(1, T_1_1.num, T_1_2);
    ret_1->num = T_1_2.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_get_idnkind ****/


extern errcode c_envOPbegin_type_scope();
extern errcode sequenceOPindexes();
extern errcode sequenceOPfetch();
extern errcode c_const();
extern errcode exprOPequal();
extern errcode sequenceOPreplace();
extern errcode c_envOPend_type_scope();

/**** BEGIN PROCEDURE c_constlist ****/

errcode c_constlist(e, exprs, ret_1)
CLUREF e;
CLUREF exprs;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF i;
    CLUREF ox;
    CLUREF nx;
    enter_proc(131);

  LINE(132);
    {
    err = c_envOPbegin_type_scope(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(133);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
        T_1_2.num = exprs.vec->size; 
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            i.num = T_1_1.num;

  LINE(134);
            {
                {CLUREF T_2_1;
                if (i.num < 1 || i.num > exprs.vec->size ) {
                    err = ERR_bounds;
                    goto ex_0;}
                T_2_1.num = exprs.vec->data[i.num - 1];
                ox.num = T_2_1.num;
                }
                }

  LINE(135);
            {
                {CLUREF T_2_1;
                err = c_const(e, ox, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                nx.num = T_2_1.num;
                }
                }

  LINE(136);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = exprOPequal(nx, ox, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            T_2_2.num = T_2_1.num ^ 1;
            if (T_2_2.num == true) {

  LINE(137);
                {
                CLUREF T_3_1;
                err = sequenceOPreplace(exprs, i, nx, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                exprs.num = T_3_1.num;
                }
                }
                }/* end if */
        }
    }
    end_inline_for_1:;

  LINE(139);
    {
    err = c_envOPend_type_scope(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(140);
    {
    {
    ret_1->num = exprs.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_constlist ****/


extern errcode oneofOPis_6();
extern errcode typespecOPget_abs();

/**** BEGIN PROCEDURE c_const ****/

errcode c_const(e, x, ret_1)
CLUREF e;
CLUREF x;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF xa;
    CLUREF ta;
    enter_proc(143);

  LINE(144);
    {
    CLUREF T_1_1;
    err = c_expr(e, x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(145);
    {
    CLUREF T_1_1;
    err = exprOPget_abs(x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    switch (T_1_1.cell->tag) {
    case 3: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        xa.num = T_1_2.num;

  LINE(147);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            err = exprOPget_typespec(x, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            err = typespecOPget_abs(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            if (T_2_2.cell->tag == 6) T_2_3.num = true; else T_2_3.num = false;
            if (T_2_3.num == true) {

  LINE(148);
                {
                    {CLUREF T_3_1;
                    CellAlloc(3, xa.num, T_3_1);
                    ta.num = T_3_1.num;
                    }
                    }

  LINE(149);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                err = c_envOPget_type(e, ta, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                CellAlloc(25, T_3_1.num, T_3_2);
                err = exprOPset_abs(x, T_3_2);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(150);
                {
                CLUREF T_3_1;
                err = c_envOPget_type_type(e, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                err = exprOPset_typespec(x, T_3_1);
                if (err != ERR_ok) goto ex_0;
                }
                }
                }/* end if */
            break;
            }
    default: {
    }
    }
    }

  LINE(154);
    {
    {
    CLUREF T_1_1;
    err = e_expr(e, x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_const ****/


extern errcode typespecOPget_id();
extern errcode c_envOPerr1();
extern errcode c_envOPtypes_illegal();
extern errcode c_envOPrechecking_types();
extern errcode c_type1();
extern errcode c_constlist();
extern errcode recordOPset_1();
extern errcode c_typelist();
extern errcode recordOPset_4();
extern errcode recordOPget_4();
extern errcode c_exceptionlist();
extern errcode c_idn_type();
extern errcode c_idn_gen();
extern errcode c_xsel_type();
extern errcode c_envOPfix_type();
extern errcode c_gen_parms();
CLUREF STR_illegal_040use_040of_040_047cvt_047;
CLUREF STR_illegal_040use_040of_040type_040_047type_047;
static int c_type_own_init = 0;

/**** BEGIN PROCEDURE c_type ****/

errcode c_type(e, t, ret_1)
CLUREF e;
CLUREF t;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF abs;
    CLUREF ta;
    CLUREF spec;
    CLUREF i;
    CLUREF old;
        if (c_type_own_init == 0) {
        stringOPcons("illegal use of \'cvt\'", CLU_1, CLU_20, &STR_illegal_040use_040of_040_047cvt_047);
        stringOPcons("illegal use of type \'type\'", CLU_1, CLU_26, &STR_illegal_040use_040of_040type_040_047type_047);
        c_type_own_init = 1;
    }
    enter_proc(157);

  LINE(158);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    err = typespecOPget_id(t, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    T_1_2.num = (T_1_1.num == 0)? true : false;
    T_1_3.num = T_1_2.num ^ 1;
    if (T_1_3.num == true) {

  LINE(159);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        err = c_envOPchecking_specs(e, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        T_2_2.num = T_2_1.num ^ 1;
        if (T_2_2.num == true) {

  LINE(160);
            {
            CLUREF T_3_1;
            err = typespecOPget_abs(t, &T_3_1);
            if (err != ERR_ok) goto ex_0;
            switch (T_3_1.cell->tag) {
            case 4: 
                 {

  LINE(162);
                    {
                    err = c_envOPerr1(e, STR_illegal_040use_040of_040_047cvt_047);
                    if (err != ERR_ok) goto ex_0;
                    }
                    break;
                    }
            case 8: 
                 {

  LINE(164);
                    {
                    CLUREF T_4_1;
                    err = c_envOPtypes_illegal(e, &T_4_1);
                    if (err != ERR_ok) goto ex_0;
                    if (T_4_1.num == true) {

  LINE(165);
                        {
                        err = c_envOPerr1(e, STR_illegal_040use_040of_040type_040_047type_047);
                        if (err != ERR_ok) goto ex_0;
                        }
                        }
                        }/* end if */
                    break;
                    }
            default: {
            }
            }
            }
            }
        else {
        CLUREF T_2_3;
        err = c_envOPrechecking_types(e, &T_2_3);
        if (err != ERR_ok) goto ex_0;
        if (T_2_3.num == true) {

  LINE(170);
            {
            err = c_type1(e, t);
            if (err != ERR_ok) goto ex_0;
            }
            }
            }}/* end if */

  LINE(171);
        {
        {
        ret_1->num = t.num;
        }
        {signal (ERR_ok);}}
        }
        }/* end if */

  LINE(173);
    {
        {CLUREF T_1_1;
        err = typespecOPget_abs(t, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        abs.num = T_1_1.num;
        }
        }

  LINE(174);
    {
    switch (abs.cell->tag) {
    case 3: 
         {CLUREF T_1_1;
        T_1_1.num = abs.cell->value;
        ta.num = T_1_1.num;

  LINE(176);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = ta.vec->data[1];
            err = c_constlist(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            ta.vec->data[1]  = T_2_2.num;
            }
            break;
            }
    case 7: 
         {CLUREF T_1_2;
        T_1_2.num = abs.cell->value;
        ta.num = T_1_2.num;

  LINE(178);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = ta.vec->data[1];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    spec.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(179);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    T_3_1.num = spec.vec->data[1];
                    err = c_type(e, T_3_1, &T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    spec.vec->data[1]  = T_3_2.num;
                    }
                }
            }
            end_inline_for_1:;
            break;
            }
    case 2: 
         {CLUREF T_1_3;
        T_1_3.num = abs.cell->value;
        ta.num = T_1_3.num;

  LINE(182);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = ta.vec->data[0];
            err = c_typelist(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            ta.vec->data[0]  = T_2_2.num;
            }

  LINE(183);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = ta.vec->data[3];
            err = c_typelist(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            ta.vec->data[3]  = T_2_2.num;
            }

  LINE(184);
            {
            CLUREF T_2_1;
            T_2_1.num = ta.vec->data[2];
            err = c_exceptionlist(e, T_2_1);
            if (err != ERR_ok) goto ex_0;
            }
            break;
            }
    case 5: 
         {CLUREF T_1_4;
        T_1_4.num = abs.cell->value;
        i.num = T_1_4.num;

  LINE(186);
            {
            CLUREF T_2_1;
            err = c_idn_type(e, i, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            abs.num = T_2_1.num;
            }
            break;
            }
    case 10: 
         {CLUREF T_1_5;
        T_1_5.num = abs.cell->value;
        ta.num = T_1_5.num;

  LINE(188);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            T_2_1.num = ta.vec->data[1];
            err = sequenceOPempty(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_3.num = T_2_2.num ^ 1;
            if (T_2_3.num == true) {

  LINE(189);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                T_3_1.num = ta.vec->data[1];
                err = c_constlist(e, T_3_1, &T_3_2);
                if (err != ERR_ok) goto ex_0;
                ta.vec->data[1]  = T_3_2.num;
                }

  LINE(190);
                {
                CLUREF T_3_1;
                err = c_idn_gen(e, ta, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                abs.num = T_3_1.num;
                }
                }
            else {

  LINE(191);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                T_3_1.num = ta.vec->data[0];
                err = c_idn_type(e, T_3_1, &T_3_2);
                if (err != ERR_ok) goto ex_0;
                abs.num = T_3_2.num;
                }
                }}/* end if */
            break;
            }
    case 11: 
         {CLUREF T_1_6;
        T_1_6.num = abs.cell->value;
        ta.num = T_1_6.num;

  LINE(194);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = ta.vec->data[1];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    spec.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(195);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    T_3_1.num = spec.vec->data[1];
                    err = c_type(e, T_3_1, &T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    spec.vec->data[1]  = T_3_2.num;
                    }
                }
            }
            end_inline_for_2:;

  LINE(197);
            {
            CLUREF T_2_1;
            err = c_xsel_type(e, ta, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            abs.num = T_2_1.num;
            }
            break;
            }
    default: {
    }
    }
    }

  LINE(201);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = c_envOPfix_type(e, abs, &T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    t.num = T_1_1.num;
    old.num = T_1_2.num;
    }

  LINE(202);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    T_1_2.num = old.num ^ 1;
    T_1_1.num = T_1_2.num;
    if (!T_1_2.num) {
        err = c_envOPrechecking_types(e, &T_1_3);
        if (err != ERR_ok) goto ex_0;
        T_1_1.num = T_1_3.num;
    }
    if (T_1_1.num == true) {

  LINE(203);
        {
        CLUREF T_2_1;
        err = typespecOPget_abs(t, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        switch (T_2_1.cell->tag) {
        case 3: 
             {CLUREF T_2_2;
            T_2_2.num = T_2_1.cell->value;
            ta.num = T_2_2.num;

  LINE(205);
                {
                CLUREF T_3_1;
                err = c_gen_parms(e, ta, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                }
                break;
                }
        default: {
        }
        }
        }
        }
        }/* end if */

  LINE(209);
    {
    {
    ret_1->num = t.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_type ****/



/**** BEGIN PROCEDURE c_type1 ****/

errcode c_type1(e, t)
CLUREF e;
CLUREF t;
    {
    errcode err;
    errcode ecode2;
    CLUREF ta;
    CLUREF x;
    CLUREF xa;
    CLUREF spec;
    CLUREF tt;
    CLUREF sig;
    enter_proc(212);

  LINE(213);
    {
    CLUREF T_1_1;
    err = typespecOPget_abs(t, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    switch (T_1_1.cell->tag) {
    case 3: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        ta.num = T_1_2.num;

  LINE(215);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            T_2_1.num = ta.vec->data[1];
            err = sequenceOPempty(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_3.num = T_2_2.num ^ 1;
            if (T_2_3.num == true) {

  LINE(216);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                CLUREF T_3_3;
                CLUREF T_3_4;
                    T_3_1.num = ta.vec->data[1];
                    T_3_3.num = T_3_1.vec->size; 
                    T_3_4 = T_3_1;
                    for (T_3_2.num = 1; T_3_2.num <= T_3_3.num; T_3_2.num++) {
                        x.num = T_3_4.vec->data[T_3_2.num - 1];

  LINE(217);
                        {
                        CLUREF T_4_1;
                        err = exprOPget_abs(x, &T_4_1);
                        if (err != ERR_ok) goto ex_0;
                        switch (T_4_1.cell->tag) {
                        case 25: 
                             {CLUREF T_4_2;
                            T_4_2.num = T_4_1.cell->value;
                            xa.num = T_4_2.num;

  LINE(219);
                                {
                                err = c_type1(e, xa);
                                if (err != ERR_ok) goto ex_0;
                                }
                                break;
                                }
                        default: {
                        }
                        }
                        }
                    }
                }
                end_inline_for_1:;

  LINE(223);
                {
                CLUREF T_3_1;
                err = c_gen_parms(e, ta, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                }
                }
                }/* end if */
            break;
            }
    case 7: 
         {CLUREF T_1_3;
        T_1_3.num = T_1_1.cell->value;
        ta.num = T_1_3.num;

  LINE(226);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = ta.vec->data[1];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    spec.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(227);
                    {
                    CLUREF T_3_1;
                    T_3_1.num = spec.vec->data[1];
                    err = c_type1(e, T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    }
                }
            }
            end_inline_for_2:;
            break;
            }
    case 2: 
         {CLUREF T_1_4;
        T_1_4.num = T_1_1.cell->value;
        ta.num = T_1_4.num;

  LINE(230);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = ta.vec->data[0];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    tt.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(231);
                    {
                    err = c_type1(e, tt);
                    if (err != ERR_ok) goto ex_0;
                    }
                }
            }
            end_inline_for_3:;

  LINE(233);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = ta.vec->data[3];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    tt.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(234);
                    {
                    err = c_type1(e, tt);
                    if (err != ERR_ok) goto ex_0;
                    }
                }
            }
            end_inline_for_4:;

  LINE(236);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = ta.vec->data[2];
                T_2_3.num = T_2_1.vec->size; 
                T_2_4 = T_2_1;
                for (T_2_2.num = 1; T_2_2.num <= T_2_3.num; T_2_2.num++) {
                    sig.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(237);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                        T_3_1.num = sig.vec->data[1];
                        T_3_3.num = T_3_1.vec->size; 
                        T_3_4 = T_3_1;
                        for (T_3_2.num = 1; T_3_2.num <= T_3_3.num; T_3_2.num++) {
                            tt.num = T_3_4.vec->data[T_3_2.num - 1];

  LINE(238);
                            {
                            err = c_type1(e, tt);
                            if (err != ERR_ok) goto ex_0;
                            }
                        }
                    }
                    end_inline_for_6:;
                }
            }
            end_inline_for_5:;
            break;
            }
    default: {
    }
    }
    }
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: {signal(ERR_ok);}
    }

/**** END PROCEDURE c_type1 ****/



/**** BEGIN PROCEDURE c_typelist ****/

errcode c_typelist(e, types, ret_1)
CLUREF e;
CLUREF types;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF ntypes;
    CLUREF t;
    enter_proc(245);

  LINE(246);
    {
        {CLUREF T_1_1;
        err = sequenceOPnew(&T_1_1);
        if (err != ERR_ok) goto ex_0;
        ntypes.num = T_1_1.num;
        }
        }

  LINE(247);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = types.vec->size; 
        T_1_3 = types;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            t.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(248);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = c_type(e, t, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            err = sequenceOPaddh(ntypes, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            ntypes.num = T_2_2.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(250);
    {
    {
    ret_1->num = ntypes.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_typelist ****/


extern errcode stringOPequal();
CLUREF STR_failure;
CLUREF STR__047failure_047_040listed_040in_040signals_040clause;
static int c_exceptionlist_own_init = 0;

/**** BEGIN PROCEDURE c_exceptionlist ****/

errcode c_exceptionlist(e, sigs)
CLUREF e;
CLUREF sigs;
    {
    errcode err;
    errcode ecode2;
    CLUREF sig;
        if (c_exceptionlist_own_init == 0) {
        stringOPcons("failure", CLU_1, CLU_7, &STR_failure);
        stringOPcons("\'failure\' listed in signals clause", CLU_1, CLU_34, &STR__047failure_047_040listed_040in_040signals_040clause);
        c_exceptionlist_own_init = 1;
    }
    enter_proc(253);

  LINE(254);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = sigs.vec->size; 
        T_1_3 = sigs;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            sig.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(255);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = sig.vec->data[1];
            err = c_typelist(e, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            sig.vec->data[1]  = T_2_2.num;
            }

  LINE(256);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = sig.vec->data[0];
            T_2_2.num = ((T_2_1.str->size != STR_failure.str->size)? false :
                !(bcmp(T_2_1.str->data, STR_failure.str->data, T_2_1.str->size)));
            if (T_2_2.num == true) {

  LINE(257);
                {
                err = c_envOPerr1(e, STR__047failure_047_040listed_040in_040signals_040clause);
                if (err != ERR_ok) goto ex_0;
                }
                }
                }/* end if */
        }
    }
    end_inline_for_1:;
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: {signal(ERR_ok);}
    }

/**** END PROCEDURE c_exceptionlist ****/


extern errcode c_envOPlookup();
extern errcode oneofOPmake_9();
CLUREF STR__047;
CLUREF STR__047_040does_040not_040name_040a_040type_040generator;
static int c_idn_gen_own_init = 0;

/**** BEGIN PROCEDURE c_idn_gen ****/

errcode c_idn_gen(e, xt, ret_1)
CLUREF e;
CLUREF xt;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF i;
    CLUREF parms;
    CLUREF k;
    CLUREF dut;
    CLUREF t;
        if (c_idn_gen_own_init == 0) {
        stringOPcons("\'", CLU_1, CLU_1, &STR__047);
        stringOPcons("\' does not name a type generator", CLU_1, CLU_32, &STR__047_040does_040not_040name_040a_040type_040generator);
        c_idn_gen_own_init = 1;
    }
    enter_proc(261);

  LINE(262);
    {
        {CLUREF T_1_1;
        T_1_1.num = xt.vec->data[0];
        i.num = T_1_1.num;
        }
        }

  LINE(263);
    {
        {CLUREF T_1_1;
        T_1_1.num = xt.vec->data[1];
        parms.num = T_1_1.num;
        }
        }

  LINE(264);
    {
    CLUREF T_1_1;
    err = idnOPget_kind(i, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    switch (T_1_1.cell->tag) {
    case 2: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        k.num = T_1_2.num;

  LINE(266);
            {
                {CLUREF T_2_1;
                RecordAlloc(2, T_2_1);
                T_2_1.vec->data[0]  = k.num;
                T_2_1.vec->data[1]  = parms.num;
                dut.num = T_2_1.num;
                }
                }

  LINE(268);
            {
                {CLUREF T_2_1;
                err = c_gen_parms(e, dut, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                t.num = T_2_1.num;
                }
                }

  LINE(269);
            {
            CLUREF T_2_1;
            err = typespecOPget_abs(t, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            switch (T_2_1.cell->tag) {
            case 8: 
            case 6: 
                 {

  LINE(271);
                    {
                    {
                    CLUREF T_3_1;
                    CellAlloc(3, dut.num, T_3_1);
                    ret_1->num = T_3_1.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            default: {

  LINE(273);
                {
                {
                CLUREF T_3_1;
                err = typespecOPget_abs(t, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                ret_1->num = T_3_1.num;
                }
                {signal (ERR_ok);}}
            }
            }
            }
            break;
            }
    case 8: 
         {

  LINE(276);
            {
            err = c_envOPlookup(e, i, CLU_0);
            if (err != ERR_ok) goto ex_0;
            }

  LINE(277);
            {
            {
            CLUREF T_2_1;
            err = c_idn_gen(e, xt, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    default: {
    }
    }
    }

  LINE(280);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    sequenceOPnew2(CLU_3, &T_1_1);
    T_1_1.vec->data[0] = STR__047.num;
    err = idnOPget_str(i, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    T_1_1.vec->data[1] = T_1_2.num;
    T_1_1.vec->data[2] = STR__047_040does_040not_040name_040a_040type_040generator.num;
    err = c_envOPerr(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(281);
    {
    {
    CLUREF T_1_1;
    CellAlloc(9, nil, T_1_1);
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_idn_gen ****/


CLUREF STR__047_040does_040not_040name_040a_040type;
CLUREF STR_use_040of_040variable_040_047;
CLUREF STR__047_040as_040a_040type_040constant;
CLUREF STR_use_040of_040generator_040_047;
CLUREF STR__047_040as_040a_040type;
static int c_idn_type_own_init = 0;

/**** BEGIN PROCEDURE c_idn_type ****/

errcode c_idn_type(e, i, ret_1)
CLUREF e;
CLUREF i;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF k;
    CLUREF xa;
        if (c_idn_type_own_init == 0) {
        stringOPcons("\'", CLU_1, CLU_1, &STR__047);
        stringOPcons("\' does not name a type", CLU_1, CLU_22, &STR__047_040does_040not_040name_040a_040type);
        stringOPcons("use of variable \'", CLU_1, CLU_17, &STR_use_040of_040variable_040_047);
        stringOPcons("\' as a type constant", CLU_1, CLU_20, &STR__047_040as_040a_040type_040constant);
        stringOPcons("use of generator \'", CLU_1, CLU_18, &STR_use_040of_040generator_040_047);
        stringOPcons("\' as a type", CLU_1, CLU_11, &STR__047_040as_040a_040type);
        c_idn_type_own_init = 1;
    }
    enter_proc(284);

  LINE(285);
    {
    CLUREF T_1_1;
    err = idnOPget_kind(i, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    switch (T_1_1.cell->tag) {
    case 6: 
    case 5: 
         {

  LINE(287);
            {
            {
            CLUREF T_2_1;
            CellAlloc(5, i.num, T_2_1);
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    case 1: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        k.num = T_1_2.num;

  LINE(289);
            {
            CLUREF T_2_1;
            err = exprOPget_abs(k, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            switch (T_2_1.cell->tag) {
            case 25: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                xa.num = T_2_2.num;

  LINE(291);
                    {
                    {
                    CLUREF T_3_1;
                    err = typespecOPget_abs(xa, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    ret_1->num = T_3_1.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            case 4: 
                 {

  LINE(293);
                    {
                    {
                    CLUREF T_3_1;
                    CellAlloc(9, nil, T_3_1);
                    ret_1->num = T_3_1.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            case 3: 
                 {CLUREF T_2_3;
                T_2_3.num = T_2_1.cell->value;
                xa.num = T_2_3.num;

  LINE(295);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    err = exprOPget_typespec(k, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    err = typespecOPget_abs(T_3_1, &T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    if (T_3_2.cell->tag == 6) T_3_3.num = true; else T_3_3.num = false;
                    if (T_3_3.num == true) {

  LINE(296);
                        {
                        {
                        CLUREF T_4_1;
                        CellAlloc(3, xa.num, T_4_1);
                        ret_1->num = T_4_1.num;
                        }
                        {signal (ERR_ok);}}
                        }
                        }/* end if */
                    break;
                    }
            default: {
            }
            }
            }

  LINE(299);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            sequenceOPnew2(CLU_3, &T_2_1);
            T_2_1.vec->data[0] = STR__047.num;
            err = idnOPget_str(i, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1] = T_2_2.num;
            T_2_1.vec->data[2] = STR__047_040does_040not_040name_040a_040type.num;
            err = c_envOPerr(e, T_2_1);
            if (err != ERR_ok) goto ex_0;
            }
            break;
            }
    case 9: 
    case 4: 
         {CLUREF T_1_3;
        T_1_3.num = T_1_1.cell->value;
        k.num = T_1_3.num;

  LINE(301);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            sequenceOPnew2(CLU_3, &T_2_1);
            T_2_1.vec->data[0] = STR_use_040of_040variable_040_047.num;
            err = idnOPget_str(i, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1] = T_2_2.num;
            T_2_1.vec->data[2] = STR__047_040as_040a_040type_040constant.num;
            err = c_envOPerr(e, T_2_1);
            if (err != ERR_ok) goto ex_0;
            }
            break;
            }
    case 2: 
         {

  LINE(303);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            sequenceOPnew2(CLU_3, &T_2_1);
            T_2_1.vec->data[0] = STR_use_040of_040generator_040_047.num;
            err = idnOPget_str(i, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1] = T_2_2.num;
            T_2_1.vec->data[2] = STR__047_040as_040a_040type.num;
            err = c_envOPerr(e, T_2_1);
            if (err != ERR_ok) goto ex_0;
            }
            break;
            }
    case 8: 
         {

  LINE(305);
            {
            err = c_envOPlookup(e, i, CLU_1);
            if (err != ERR_ok) goto ex_0;
            }

  LINE(306);
            {
            {
            CLUREF T_2_1;
            err = c_idn_type(e, i, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    default: {

  LINE(308);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        sequenceOPnew2(CLU_3, &T_2_1);
        T_2_1.vec->data[0] = STR__047.num;
        err = idnOPget_str(i, &T_2_2);
        if (err != ERR_ok) goto ex_0;
        T_2_1.vec->data[1] = T_2_2.num;
        T_2_1.vec->data[2] = STR__047_040does_040not_040name_040a_040type.num;
        err = c_envOPerr(e, T_2_1);
        if (err != ERR_ok) goto ex_0;
        }
    }
    }
    }

  LINE(310);
    {
    {
    CLUREF T_1_1;
    CellAlloc(9, nil, T_1_1);
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_idn_type ****/


CLUREF STR__047_040does_040not_040name_040a_040selector_040type_040generator;
static int c_xsel_type_own_init = 0;

/**** BEGIN PROCEDURE c_xsel_type ****/

errcode c_xsel_type(e, xsel, ret_1)
CLUREF e;
CLUREF xsel;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF i;
    CLUREF k;
    CLUREF specs;
        if (c_xsel_type_own_init == 0) {
        stringOPcons("\'", CLU_1, CLU_1, &STR__047);
        stringOPcons("\' does not name a selector type generator", CLU_1, CLU_41, &STR__047_040does_040not_040name_040a_040selector_040type_040generator);
        c_xsel_type_own_init = 1;
    }
    enter_proc(313);

  LINE(314);
    {
        {CLUREF T_1_1;
        T_1_1.num = xsel.vec->data[0];
        i.num = T_1_1.num;
        }
        }

  LINE(315);
    {
    CLUREF T_1_1;
    err = idnOPget_kind(i, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    switch (T_1_1.cell->tag) {
    case 2: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        k.num = T_1_2.num;

  LINE(317);
            {
                {CLUREF T_2_1;
                err = c_get_duspecs(e, k, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                specs.num = T_2_1.num;
                }
                }

  LINE(318);
            {
            switch (specs.cell->tag) {
            case 5: 
            case 4: 
                 {

  LINE(320);
                    {
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    RecordAlloc(2, T_3_1);
                    T_3_1.vec->data[0]  = k.num;
                    T_3_2.num = xsel.vec->data[1];
                    T_3_1.vec->data[1]  = T_3_2.num;
                    CellAlloc(7, T_3_1.num, T_3_3);
                    ret_1->num = T_3_3.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            default: {
            }
            }
            }
            break;
            }
    case 8: 
         {

  LINE(325);
            {
            err = c_envOPlookup(e, i, CLU_0);
            if (err != ERR_ok) goto ex_0;
            }

  LINE(326);
            {
            {
            CLUREF T_2_1;
            err = c_xsel_type(e, xsel, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    default: {
    }
    }
    }

  LINE(329);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    sequenceOPnew2(CLU_3, &T_1_1);
    T_1_1.vec->data[0] = STR__047.num;
    err = idnOPget_str(i, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    T_1_1.vec->data[1] = T_1_2.num;
    T_1_1.vec->data[2] = STR__047_040does_040not_040name_040a_040selector_040type_040generator.num;
    err = c_envOPerr(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(330);
    {
    {
    CLUREF T_1_1;
    CellAlloc(9, nil, T_1_1);
    ret_1->num = T_1_1.num;
    }
    {signal (ERR_ok);}}
    goto end_0;
    ex_0:
        {
            if (err == ERR_failure) {signal(ERR_failure);}
            elist[0] = _pclu_erstr(err);
            {signal(ERR_failure);}
        }
    end_0: elist[0].str = no_return_values_STRING;
        {signal(ERR_failure);}
    }

/**** END PROCEDURE c_xsel_type ****/

