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

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

extern errcode sequenceOPempty();
extern errcode recordOPget_1();
extern errcode recordOPcopy1();
extern errcode b_applyinfo();
extern errcode oneofOPmake_1();
extern errcode oneofOPmake_3();
extern errcode b_typeinfo();
extern errcode oneofOPmake_5();
extern errcode oneofOPmake_2();

/**** BEGIN PROCEDURE b_duspecs ****/

errcode b_duspecs(e, specs, ret_1)
CLUREF e;
CLUREF specs;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF inf;
    enter_proc(6);

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

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

  LINE(10);
                {
                CLUREF T_3_1;
                generic_CLU_proc.type_owns = 0;
                generic_CLU_proc.proc = recordOPcopy1;
                CUR_PROC_VAR.proc = &generic_CLU_proc;
                err = recordOPcopy1(inf, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                inf.num = T_3_1.num;
                }
                }
            else {

  LINE(11);
                {
                CLUREF T_3_1;
                err = b_applyinfo(e, inf, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                inf.num = T_3_1.num;
                }
                }}/* end if */

  LINE(13);
            {
            {
            CLUREF T_2_1;
            CellAlloc(1, inf.num, T_2_1);
            ret_1->num = T_2_1.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    case 3: 
         {CLUREF T_1_2;
        T_1_2.num = specs.cell->value;
        inf.num = T_1_2.num;

  LINE(15);
            {
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_typeinfo(e, inf, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(3, T_2_1.num, T_2_2);
            ret_1->num = T_2_2.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    case 5: 
         {CLUREF T_1_3;
        T_1_3.num = specs.cell->value;
        inf.num = T_1_3.num;

  LINE(17);
            {
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_typeinfo(e, inf, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(5, T_2_1.num, T_2_2);
            ret_1->num = T_2_2.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    case 2: 
         {CLUREF T_1_4;
        T_1_4.num = specs.cell->value;
        inf.num = T_1_4.num;

  LINE(19);
            {
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_typeinfo(e, inf, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(2, T_2_1.num, T_2_2);
            ret_1->num = T_2_2.num;
            }
            {signal (ERR_ok);}}
            break;
            }
    default: {

  LINE(21);
        {
        {
        ret_1->num = specs.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 b_duspecs ****/


extern errcode recordOPget_2();
extern errcode b_parameters();
extern errcode c_envOPbegin_scope();
extern errcode c_envOPpush_parms();
extern errcode b_idnkinds();
extern errcode sequenceOPnew();
extern errcode sequenceOPelements();
extern errcode recordOPset_1();
extern errcode b_typesetlist();
extern errcode recordOPget_3();
extern errcode sequenceOPaddh();
extern errcode c_envOPend_scope();

/**** BEGIN PROCEDURE b_typeinfo ****/

errcode b_typeinfo(e, info, ret_1)
CLUREF e;
CLUREF info;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF parms;
    CLUREF nparms;
    CLUREF empty;
    CLUREF nopers;
    CLUREF inf;
    enter_proc(25);

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

  LINE(27);
    {
        {CLUREF T_1_1;
        err = b_parameters(e, parms, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        nparms.num = T_1_1.num;
        }
        }

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

  LINE(29);
    {
    err = c_envOPpush_parms(e, parms, nparms);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(30);
    {
    err = b_idnkinds(e, nparms);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(31);
    {
        {CLUREF T_1_1;
        err = sequenceOPempty(parms, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        empty.num = T_1_1.num;
        }
        }

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

  LINE(33);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    CLUREF T_1_4;
        T_1_1.num = info.vec->data[0];
        T_1_3.num = T_1_1.vec->size; 
        T_1_4 = T_1_1;
        for (T_1_2.num = 1; T_1_2.num <= T_1_3.num; T_1_2.num++) {
            inf.num = T_1_4.vec->data[T_1_2.num - 1];

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

  LINE(35);
                {
                CLUREF T_3_1;
                generic_CLU_proc.type_owns = 0;
                generic_CLU_proc.proc = recordOPcopy1;
                CUR_PROC_VAR.proc = &generic_CLU_proc;
                err = recordOPcopy1(inf, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                inf.num = T_3_1.num;
                }

  LINE(36);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                T_3_1.num = inf.vec->data[0];
                generic_CLU_proc.type_owns = 0;
                generic_CLU_proc.proc = recordOPcopy1;
                CUR_PROC_VAR.proc = &generic_CLU_proc;
                err = recordOPcopy1(T_3_1, &T_3_2);
                if (err != ERR_ok) goto ex_0;
                inf.vec->data[0]  = T_3_2.num;
                }
                }
            else {

  LINE(37);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                CLUREF T_3_3;
                CLUREF T_3_4;
                CLUREF T_3_5;
                CLUREF T_3_6;
                RecordAlloc(3, T_3_1);
                T_3_2.num = inf.vec->data[1];
                T_3_1.vec->data[1]  = T_3_2.num;
                T_3_3.num = inf.vec->data[2];
                err = b_typesetlist(e, T_3_3, &T_3_4);
                if (err != ERR_ok) goto ex_0;
                T_3_1.vec->data[2]  = T_3_4.num;
                T_3_5.num = inf.vec->data[0];
                err = b_applyinfo(e, T_3_5, &T_3_6);
                if (err != ERR_ok) goto ex_0;
                T_3_1.vec->data[0]  = T_3_6.num;
                inf.num = T_3_1.num;
                }
                }}/* end if */

  LINE(41);
            {
            CLUREF T_2_1;
            err = sequenceOPaddh(nopers, inf, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            nopers.num = T_2_1.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(43);
    {
    err = c_envOPend_scope(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(44);
    {
    {
    CLUREF T_1_1;
    RecordAlloc(2, T_1_1);
    T_1_1.vec->data[1]  = nparms.num;
    T_1_1.vec->data[0]  = nopers.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 b_typeinfo ****/


extern errcode b_get_idn();
extern errcode b_opspeclist();

/**** BEGIN PROCEDURE b_typesetlist ****/

errcode b_typesetlist(e, reqs, ret_1)
CLUREF e;
CLUREF reqs;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nreqs;
    CLUREF req;
    enter_proc(48);

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

  LINE(50);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = reqs.vec->size; 
        T_1_3 = reqs;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            req.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(51);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
            CLUREF T_2_5;
            CLUREF T_2_6;
            RecordAlloc(2, T_2_1);
            T_2_2.num = req.vec->data[1];
            err = b_get_idn(e, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1]  = T_2_3.num;
            T_2_4.num = req.vec->data[0];
            err = b_opspeclist(e, T_2_4, &T_2_5);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[0]  = T_2_5.num;
            err = sequenceOPaddh(nreqs, T_2_1, &T_2_6);
            if (err != ERR_ok) goto ex_0;
            nreqs.num = T_2_6.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(55);
    {
    {
    ret_1->num = nreqs.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 b_typesetlist ****/


extern errcode idnOPget_kind();
extern errcode exprOPget_abs();
extern errcode typespecOPget_abs();

/**** BEGIN PROCEDURE b_get_idn ****/

errcode b_get_idn(e, i, ret_1)
CLUREF e;
CLUREF i;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF k;
    CLUREF xa;
    CLUREF ta;
    enter_proc(58);

  LINE(59);
    {
    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 1: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        k.num = T_1_2.num;

  LINE(61);
            {
            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 13: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                xa.num = T_2_2.num;

  LINE(63);
                    {
                    {
                    ret_1->num = xa.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            case 25: 
                 {CLUREF T_2_3;
                T_2_3.num = T_2_1.cell->value;
                xa.num = T_2_3.num;

  LINE(65);
                    {
                    CLUREF T_3_1;
                    err = typespecOPget_abs(xa, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    switch (T_3_1.cell->tag) {
                    case 5: 
                         {CLUREF T_3_2;
                        T_3_2.num = T_3_1.cell->value;
                        ta.num = T_3_2.num;

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

  LINE(74);
    {
    {
    ret_1->num = i.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 b_get_idn ****/


extern errcode b_type();

/**** BEGIN PROCEDURE b_applyinfo ****/

errcode b_applyinfo(e, info, ret_1)
CLUREF e;
CLUREF info;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF parms;
    CLUREF nparms;
    CLUREF t;
    enter_proc(77);

  LINE(78);
    {
        {CLUREF T_1_1;
        T_1_1.num = info.vec->data[0];
        parms.num = T_1_1.num;
        }
        }

  LINE(79);
    {
        {CLUREF T_1_1;
        err = b_parameters(e, parms, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        nparms.num = T_1_1.num;
        }
        }

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

  LINE(81);
    {
    err = c_envOPpush_parms(e, parms, nparms);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(82);
    {
    err = b_idnkinds(e, nparms);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(83);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = info.vec->data[1];
        err = b_type(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        t.num = T_1_2.num;
        }
        }

  LINE(84);
    {
    err = c_envOPend_scope(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(85);
    {
    {
    CLUREF T_1_1;
    RecordAlloc(2, T_1_1);
    T_1_1.vec->data[0]  = nparms.num;
    T_1_1.vec->data[1]  = t.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 b_applyinfo ****/


extern errcode c_envOPpush_parm();

/**** BEGIN PROCEDURE b_operdecllist ****/

errcode b_operdecllist(e, i, set, ret_1)
CLUREF e;
CLUREF i;
CLUREF set;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF opers;
    enter_proc(89);

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

  LINE(91);
    {
    CLUREF T_1_1;
    T_1_1.num = set.vec->data[1];
    err = c_envOPpush_parm(e, T_1_1, i);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(92);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = set.vec->data[0];
        err = b_opspeclist(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        opers.num = T_1_2.num;
        }
        }

  LINE(93);
    {
    err = c_envOPend_scope(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(94);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    sequenceOPnew2(CLU_1, &T_1_1);
    RecordAlloc(2, T_1_2);
    T_1_2.vec->data[1]  = opers.num;
    T_1_2.vec->data[0]  = 0;
    T_1_1.vec->data[0] = T_1_2.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 b_operdecllist ****/


extern errcode idnOPcreate();
extern errcode idnOPget_str();

/**** BEGIN PROCEDURE b_parameters ****/

errcode b_parameters(e, parms, ret_1)
CLUREF e;
CLUREF parms;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nparms;
    CLUREF i;
    enter_proc(98);

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

  LINE(100);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = parms.vec->size; 
        T_1_3 = parms;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            i.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(101);
            {
            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 = idnOPget_kind(i, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            err = idnOPcreate(T_2_1, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            err = sequenceOPaddh(nparms, T_2_3, &T_2_4);
            if (err != ERR_ok) goto ex_0;
            nparms.num = T_2_4.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(103);
    {
    {
    ret_1->num = nparms.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 b_parameters ****/


extern errcode idnOPset_kind();
extern errcode oneofOPmake_6();
extern errcode oneofOPmake_10();

/**** BEGIN PROCEDURE b_idnkinds ****/

errcode b_idnkinds(e, parms)
CLUREF e;
CLUREF parms;
    {
    errcode err;
    errcode ecode2;
    CLUREF i;
    CLUREF k;
    enter_proc(106);

  LINE(107);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = parms.vec->size; 
        T_1_3 = parms;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            i.num = T_1_3.vec->data[T_1_1.num - 1];

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

  LINE(110);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    err = b_opspeclist(e, k, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    CellAlloc(6, T_3_1.num, T_3_2);
                    err = idnOPset_kind(i, T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    }
                    break;
                    }
            case 10: 
                 {CLUREF T_2_3;
                T_2_3.num = T_2_1.cell->value;
                k.num = T_2_3.num;

  LINE(112);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    err = b_type(e, k, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    CellAlloc(10, T_3_1.num, T_3_2);
                    err = idnOPset_kind(i, T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    }
                    break;
                    }
            case 5: 
                 {CLUREF T_2_4;
                T_2_4.num = T_2_1.cell->value;
                k.num = T_2_4.num;

  LINE(114);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    err = b_opspeclist(e, k, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    CellAlloc(5, T_3_1.num, T_3_2);
                    err = idnOPset_kind(i, T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    }
                    break;
                    }
            default: {
            }
            }
            }
        }
    }
    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 b_idnkinds ****/


extern errcode b_exprlist();

/**** BEGIN PROCEDURE b_opspeclist ****/

errcode b_opspeclist(e, ops, ret_1)
CLUREF e;
CLUREF ops;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nops;
    CLUREF op;
    enter_proc(120);

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

  LINE(122);
    {
    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++) {
            op.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(123);
            {
            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;
            RecordAlloc(3, T_2_1);
            T_2_2.num = op.vec->data[0];
            T_2_1.vec->data[0]  = T_2_2.num;
            T_2_3.num = op.vec->data[1];
            err = b_exprlist(e, T_2_3, &T_2_4);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1]  = T_2_4.num;
            T_2_5.num = op.vec->data[2];
            err = b_type(e, T_2_5, &T_2_6);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[2]  = T_2_6.num;
            err = sequenceOPaddh(nops, T_2_1, &T_2_7);
            if (err != ERR_ok) goto ex_0;
            nops.num = T_2_7.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(128);
    {
    {
    ret_1->num = nops.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 b_opspeclist ****/


extern errcode oneofOPmake_7();
extern errcode b_typelist();
extern errcode recordOPget_4();
extern errcode c_envOPget_unknown_type();
extern errcode c_envOPget_type();

/**** BEGIN PROCEDURE b_type ****/

errcode b_type(e, t, ret_1)
CLUREF e;
CLUREF t;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nta;
    CLUREF dut;
    CLUREF st;
    CLUREF parms;
    CLUREF parm;
    CLUREF at;
    CLUREF sigs;
    CLUREF sig;
    CLUREF ta;
    CLUREF x;
    CLUREF tt;
    CLUREF ot;
    CLUREF cop;
    enter_proc(131);

  LINE(133);
    {
    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;
        dut.num = T_1_2.num;

  LINE(135);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
            CLUREF T_2_5;
            RecordAlloc(2, T_2_1);
            T_2_2.num = dut.vec->data[0];
            T_2_1.vec->data[0]  = T_2_2.num;
            T_2_3.num = dut.vec->data[1];
            err = b_exprlist(e, T_2_3, &T_2_4);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1]  = T_2_4.num;
            CellAlloc(3, T_2_1.num, T_2_5);
            nta.num = T_2_5.num;
            }
            break;
            }
    case 7: 
         {CLUREF T_1_3;
        T_1_3.num = T_1_1.cell->value;
        st.num = T_1_3.num;

  LINE(139);
            {
                {CLUREF T_2_1;
                err = sequenceOPnew(&T_2_1);
                if (err != ERR_ok) goto ex_0;
                parms.num = T_2_1.num;
                }
                }

  LINE(140);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = st.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++) {
                    parm.num = T_2_4.vec->data[T_2_2.num - 1];

  LINE(141);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    CLUREF T_3_5;
                    RecordAlloc(2, T_3_1);
                    T_3_2.num = parm.vec->data[0];
                    T_3_1.vec->data[0]  = T_3_2.num;
                    T_3_3.num = parm.vec->data[1];
                    err = b_type(e, T_3_3, &T_3_4);
                    if (err != ERR_ok) goto ex_0;
                    T_3_1.vec->data[1]  = T_3_4.num;
                    err = sequenceOPaddh(parms, T_3_1, &T_3_5);
                    if (err != ERR_ok) goto ex_0;
                    parms.num = T_3_5.num;
                    }
                }
            }
            end_inline_for_1:;

  LINE(145);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            RecordAlloc(2, T_2_1);
            T_2_2.num = st.vec->data[0];
            T_2_1.vec->data[0]  = T_2_2.num;
            T_2_1.vec->data[1]  = parms.num;
            CellAlloc(7, T_2_1.num, T_2_3);
            nta.num = T_2_3.num;
            }
            break;
            }
    case 2: 
         {CLUREF T_1_4;
        T_1_4.num = T_1_1.cell->value;
        at.num = T_1_4.num;

  LINE(148);
            {
                {CLUREF T_2_1;
                err = sequenceOPnew(&T_2_1);
                if (err != ERR_ok) goto ex_0;
                sigs.num = T_2_1.num;
                }
                }

  LINE(149);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
                T_2_1.num = at.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(150);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    CLUREF T_3_5;
                    RecordAlloc(2, T_3_1);
                    T_3_2.num = sig.vec->data[0];
                    T_3_1.vec->data[0]  = T_3_2.num;
                    T_3_3.num = sig.vec->data[1];
                    err = b_typelist(e, T_3_3, &T_3_4);
                    if (err != ERR_ok) goto ex_0;
                    T_3_1.vec->data[1]  = T_3_4.num;
                    err = sequenceOPaddh(sigs, T_3_1, &T_3_5);
                    if (err != ERR_ok) goto ex_0;
                    sigs.num = T_3_5.num;
                    }
                }
            }
            end_inline_for_2:;

  LINE(154);
            {
            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;
            RecordAlloc(4, T_2_1);
            T_2_2.num = at.vec->data[1];
            T_2_1.vec->data[1]  = T_2_2.num;
            T_2_3.num = at.vec->data[0];
            err = b_typelist(e, T_2_3, &T_2_4);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[0]  = T_2_4.num;
            T_2_5.num = at.vec->data[3];
            err = b_typelist(e, T_2_5, &T_2_6);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[3]  = T_2_6.num;
            T_2_1.vec->data[2]  = sigs.num;
            CellAlloc(2, T_2_1.num, T_2_7);
            nta.num = T_2_7.num;
            }
            break;
            }
    case 5: 
         {CLUREF T_1_5;
        T_1_5.num = T_1_1.cell->value;
        ta.num = T_1_5.num;

  LINE(160);
            {
            CLUREF T_2_1;
            err = idnOPget_kind(ta, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            switch (T_2_1.cell->tag) {
            case 1: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                x.num = T_2_2.num;

  LINE(162);
                    {
                    CLUREF T_3_1;
                    err = exprOPget_abs(x, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    switch (T_3_1.cell->tag) {
                    case 25: 
                         {CLUREF T_3_2;
                        T_3_2.num = T_3_1.cell->value;
                        tt.num = T_3_2.num;

  LINE(164);
                            {
                            {
                            ret_1->num = tt.num;
                            }
                            {signal (ERR_ok);}}
                            break;
                            }
                    case 4: 
                         {
                            break;
                            }
                    default: {
                    }
                    }
                    }

  LINE(168);
                    {
                    {
                    CLUREF T_3_1;
                    err = c_envOPget_unknown_type(e, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    ret_1->num = T_3_1.num;
                    }
                    {signal (ERR_ok);}}
                    break;
                    }
            default: {

  LINE(170);
                {
                {
                ret_1->num = t.num;
                }
                {signal (ERR_ok);}}
            }
            }
            }
            break;
            }
    case 6: 
         {CLUREF T_1_6;
        T_1_6.num = T_1_1.cell->value;
        ot.num = T_1_6.num;

  LINE(173);
            {
            switch (ot.cell->tag) {
            case 1: 
                 {CLUREF T_2_1;
                T_2_1.num = ot.cell->value;
                dut.num = T_2_1.num;

  LINE(175);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    CLUREF T_3_5;
                    RecordAlloc(2, T_3_1);
                    T_3_2.num = dut.vec->data[0];
                    T_3_1.vec->data[0]  = T_3_2.num;
                    T_3_3.num = dut.vec->data[1];
                    err = b_exprlist(e, T_3_3, &T_3_4);
                    if (err != ERR_ok) goto ex_0;
                    T_3_1.vec->data[1]  = T_3_4.num;
                    CellAlloc(1, T_3_1.num, T_3_5);
                    ot.num = T_3_5.num;
                    }
                    break;
                    }
            case 2: 
                 {CLUREF T_2_2;
                T_2_2.num = ot.cell->value;
                cop.num = T_2_2.num;

  LINE(179);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    CLUREF T_3_5;
                    CLUREF T_3_6;
                    CLUREF T_3_7;
                    RecordAlloc(3, T_3_1);
                    T_3_2.num = cop.vec->data[2];
                    err = b_type(e, T_3_2, &T_3_3);
                    if (err != ERR_ok) goto ex_0;
                    T_3_1.vec->data[2]  = T_3_3.num;
                    T_3_4.num = cop.vec->data[0];
                    T_3_1.vec->data[0]  = T_3_4.num;
                    T_3_5.num = cop.vec->data[1];
                    err = b_exprlist(e, T_3_5, &T_3_6);
                    if (err != ERR_ok) goto ex_0;
                    T_3_1.vec->data[1]  = T_3_6.num;
                    CellAlloc(2, T_3_1.num, T_3_7);
                    ot.num = T_3_7.num;
                    }
                    break;
                    }
            case 3: 
                 {CLUREF T_2_3;
                T_2_3.num = ot.cell->value;
                tt.num = T_2_3.num;

  LINE(184);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    err = b_type(e, tt, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    CellAlloc(3, T_3_1.num, T_3_2);
                    ot.num = T_3_2.num;
                    }
                    break;
                    }
            }
            }

  LINE(186);
            {
            CLUREF T_2_1;
            CellAlloc(6, ot.num, T_2_1);
            nta.num = T_2_1.num;
            }
            break;
            }
    default: {

  LINE(188);
        {
        {
        ret_1->num = t.num;
        }
        {signal (ERR_ok);}}
    }
    }
    }

  LINE(190);
    {
    {
    CLUREF T_1_1;
    err = c_envOPget_type(e, nta, &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 b_type ****/



/**** BEGIN PROCEDURE b_typelist ****/

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

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

  LINE(195);
    {
    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(196);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_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(198);
    {
    {
    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 b_typelist ****/


extern errcode exprOPset_typespec();
extern errcode exprOPget_typespec();
extern errcode oneofOPmake_25();
extern errcode oneofOPmake_16();
extern errcode b_expr();
extern errcode c_envOPget_du();
extern errcode oneofOPmake_20();
extern errcode oneofOPmake_11();
extern errcode exprOPcreate();

/**** BEGIN PROCEDURE b_expr ****/

errcode b_expr(e, x, ret_1)
CLUREF e;
CLUREF x;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nxa;
    CLUREF xa;
    CLUREF k;
    CLUREF inv;
    CLUREF dut;
    CLUREF cop;
    enter_proc(201);

  LINE(202);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = exprOPget_typespec(x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    err = b_type(e, T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    err = exprOPset_typespec(x, T_1_2);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(204);
    {
    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 25: 
         {CLUREF T_1_2;
        T_1_2.num = T_1_1.cell->value;
        xa.num = T_1_2.num;

  LINE(206);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_type(e, xa, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(25, T_2_1.num, T_2_2);
            nxa.num = T_2_2.num;
            }
            break;
            }
    case 13: 
         {CLUREF T_1_3;
        T_1_3.num = T_1_1.cell->value;
        xa.num = T_1_3.num;

  LINE(208);
            {
            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 1: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                k.num = T_2_2.num;

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

  LINE(212);
                {
                {
                ret_1->num = x.num;
                }
                {signal (ERR_ok);}}
            }
            }
            }
            break;
            }
    case 16: 
         {CLUREF T_1_4;
        T_1_4.num = T_1_1.cell->value;
        inv.num = T_1_4.num;

  LINE(215);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
            CLUREF T_2_5;
            CLUREF T_2_6;
            RecordAlloc(2, T_2_1);
            T_2_2.num = inv.vec->data[0];
            err = b_expr(e, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[0]  = T_2_3.num;
            T_2_4.num = inv.vec->data[1];
            err = b_exprlist(e, T_2_4, &T_2_5);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1]  = T_2_5.num;
            CellAlloc(16, T_2_1.num, T_2_6);
            nxa.num = T_2_6.num;
            }
            break;
            }
    case 3: 
         {CLUREF T_1_5;
        T_1_5.num = T_1_1.cell->value;
        dut.num = T_1_5.num;

  LINE(219);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
            CLUREF T_2_5;
            CLUREF T_2_6;
            RecordAlloc(2, T_2_1);
            T_2_2.num = dut.vec->data[0];
            err = c_envOPget_du(e, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[0]  = T_2_3.num;
            T_2_4.num = dut.vec->data[1];
            err = b_exprlist(e, T_2_4, &T_2_5);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1]  = T_2_5.num;
            CellAlloc(3, T_2_1.num, T_2_6);
            nxa.num = T_2_6.num;
            }
            break;
            }
    case 20: 
         {CLUREF T_1_6;
        T_1_6.num = T_1_1.cell->value;
        cop.num = T_1_6.num;

  LINE(223);
            {
            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;
            RecordAlloc(3, T_2_1);
            T_2_2.num = cop.vec->data[2];
            err = b_type(e, T_2_2, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[2]  = T_2_3.num;
            T_2_4.num = cop.vec->data[0];
            T_2_1.vec->data[0]  = T_2_4.num;
            T_2_5.num = cop.vec->data[1];
            err = b_exprlist(e, T_2_5, &T_2_6);
            if (err != ERR_ok) goto ex_0;
            T_2_1.vec->data[1]  = T_2_6.num;
            CellAlloc(20, T_2_1.num, T_2_7);
            nxa.num = T_2_7.num;
            }
            break;
            }
    case 11: 
         {CLUREF T_1_7;
        T_1_7.num = T_1_1.cell->value;
        xa.num = T_1_7.num;

  LINE(228);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_type(e, xa, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            CellAlloc(11, T_2_1.num, T_2_2);
            nxa.num = T_2_2.num;
            }
            break;
            }
    default: {

  LINE(230);
        {
        {
        ret_1->num = x.num;
        }
        {signal (ERR_ok);}}
    }
    }
    }

  LINE(232);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    err = exprOPget_typespec(x, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    err = b_type(e, T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    err = exprOPcreate(nxa, T_1_2, &T_1_3);
    if (err != ERR_ok) goto ex_0;
    ret_1->num = T_1_3.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 b_expr ****/



/**** BEGIN PROCEDURE b_exprlist ****/

errcode b_exprlist(e, exprs, ret_1)
CLUREF e;
CLUREF exprs;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nexprs;
    CLUREF x;
    enter_proc(235);

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

  LINE(237);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = exprs.vec->size; 
        T_1_3 = exprs;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            x.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(238);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = b_expr(e, x, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            err = sequenceOPaddh(nexprs, T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            nexprs.num = T_2_2.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(240);
    {
    {
    ret_1->num = nexprs.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 b_exprlist ****/

