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

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


extern errcode c_envOPset_line();
extern errcode recordOPget_6();
extern errcode recordOPget_4();
extern errcode sequenceOPempty();
extern errcode recordOPget_8();
extern errcode c_new_module();
extern errcode boolOPnot();
extern errcode stringOPequal();
extern errcode duOPget_unique();
extern errcode idnOPget_str();
extern errcode idnOPcreate();
extern errcode idnOPget_kind();
extern errcode recordOPset_4();
extern errcode c_envOPbegin_scope();
extern errcode c_setup_opers();
extern errcode c_type_specs();
extern errcode b_typeinfo();
extern errcode intOPequal();
extern errcode oneofOPmake_3();
extern errcode oneofOPmake_5();
extern errcode oneofOPmake_2();
extern errcode fixup_new_module();
extern errcode c_type_main();
extern errcode c_envOPend_scope();
extern errcode recordOPset_1();
extern errcode sequenceOPsubseq();
extern errcode recordOPget_1();

/**** BEGIN PROCEDURE c_typedefn ****/

errcode c_typedefn(e, def, kind)
CLUREF e;
CLUREF def;
CLUREF kind;
    {
    errcode err;
    errcode ecode2;
    CLUREF i;
    CLUREF want;
    CLUREF mod;
    CLUREF specs;
    CLUREF info;
    CLUREF extsize;
    CLUREF ninfo;
    CLUREF nspecs;
    enter_proc(6);

  LINE(7);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[5];
    err = c_envOPset_line(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(8);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[3];
        i.num = T_1_1.num;
        }
        }

  LINE(10);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    T_1_1.num = def.vec->data[7];
    err = sequenceOPempty(T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    if (T_1_2.num == true) {

  LINE(11);
        {
        want.num = 1;
        }
        }
    else {

  LINE(12);
        {
        want.num = 0;
        }
        }}/* end if */

  LINE(14);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        err = c_new_module(e, i, want, &T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        mod.num = T_1_1.num;
        specs.num = T_1_2.num;
        }
        }

  LINE(15);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    CLUREF T_1_4;
    err = duOPget_unique(mod, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    err = idnOPget_str(i, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    T_1_3.num = ((T_1_1.str->size != T_1_2.str->size)? false :
        !(bcmp(T_1_1.str->data, T_1_2.str->data, T_1_1.str->size)));
    T_1_4.num = T_1_3.num ^ 1;
    if (T_1_4.num == true) {

  LINE(16);
        {
        CLUREF T_2_1;
        CLUREF T_2_2;
        CLUREF T_2_3;
        err = duOPget_unique(mod, &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;
        i.num = T_2_3.num;
        }

  LINE(17);
        {
        def.vec->data[3]  = i.num;
        }
        }
        }/* end if */

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

  LINE(20);
    {
    err = c_setup_opers(e, def);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(21);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        err = c_type_specs(e, def, mod, &T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        info.num = T_1_1.num;
        extsize.num = T_1_2.num;
        }
        }

  LINE(22);
    {
        {CLUREF T_1_1;
        err = b_typeinfo(e, info, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        ninfo.num = T_1_1.num;
        }
        }

  LINE(24);
    {
    CLUREF T_1_1;
    T_1_1.num = (kind.num == 0)? true : false;
    if (T_1_1.num == true) {

  LINE(25);
        {
        CLUREF T_2_1;
        CellAlloc(3, ninfo.num, T_2_1);
        nspecs.num = T_2_1.num;
        }
        }
    else {
    CLUREF T_1_2;
    T_1_2.num = (kind.num == 1)? true : false;
    if (T_1_2.num == true) {

  LINE(27);
        {
        CLUREF T_2_1;
        CellAlloc(5, ninfo.num, T_2_1);
        nspecs.num = T_2_1.num;
        }
        }
    else {

  LINE(28);
        {
        CLUREF T_2_1;
        CellAlloc(2, ninfo.num, T_2_1);
        nspecs.num = T_2_1.num;
        }
        }}}/* end if */

  LINE(29);
    {
    err = fixup_new_module(e, i, mod, nspecs);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(30);
    {
    err = c_type_main(e, def, info);
    if (err != ERR_ok) goto ex_0;
    }

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

  LINE(32);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    T_1_1.num = ninfo.vec->data[0];
    err = sequenceOPsubseq(T_1_1, CLU_1, extsize, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    ninfo.vec->data[0]  = T_1_2.num;
    }
    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_typedefn ****/


extern errcode recordOPget_7();
extern errcode oneofOPmake_8();
extern errcode sequenceOPelements();
extern errcode c_envOPdeclare();
extern errcode recordOPget_5();
extern errcode c_member();
extern errcode oneofOPis_8();
extern errcode idnOPset_kind();
extern errcode c_envOPerr();
extern errcode stringOPconcat();
extern errcode recordOPset_5();
CLUREF STR_redeclaration_040of_040_047;
CLUREF STR__047;
CLUREF STR__045;
CLUREF STR_operation_040_047;
CLUREF STR__047_040not_040defined;
static int c_setup_opers_own_init = 0;

/**** BEGIN PROCEDURE c_setup_opers ****/

errcode c_setup_opers(e, def)
CLUREF e;
CLUREF def;
    {
    errcode err;
    errcode ecode2;
    CLUREF extops;
    CLUREF uk;
    CLUREF i;
    CLUREF op;
    CLUREF n;
        if (c_setup_opers_own_init == 0) {
        stringOPcons("redeclaration of \'", CLU_1, CLU_18, &STR_redeclaration_040of_040_047);
        stringOPcons("\'", CLU_1, CLU_1, &STR__047);
        stringOPcons("%", CLU_1, CLU_1, &STR__045);
        stringOPcons("operation \'", CLU_1, CLU_11, &STR_operation_040_047);
        stringOPcons("\' not defined", CLU_1, CLU_13, &STR__047_040not_040defined);
        c_setup_opers_own_init = 1;
    }
    enter_proc(35);

  LINE(36);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[6];
        extops.num = T_1_1.num;
        }
        }

  LINE(37);
    {
        {CLUREF T_1_1;
        CellAlloc(8, nil, T_1_1);
        uk.num = T_1_1.num;
        }
        }

  LINE(38);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = extops.vec->size; 
        T_1_3 = extops;
        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(39);
            {
            err = c_envOPdeclare(e, i, uk);
            if (err != ERR_ok) goto ex_0;
            }
        }
    }
    end_inline_for_1:;

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

  LINE(42);
            {
            CLUREF T_2_1;
            T_2_1.num = op.vec->data[6];
            err = c_envOPset_line(e, T_2_1);
            if (err != ERR_ok) goto ex_0;
            }

  LINE(43);
            {
                {CLUREF T_2_1;
                T_2_1.num = op.vec->data[4];
                i.num = T_2_1.num;
                }
                }

  LINE(44);
            {
                {CLUREF T_2_1;
                err = idnOPget_str(i, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                n.num = T_2_1.num;
                }
                }

  LINE(45);
            {
            CLUREF T_2_1;
            err = c_member(i, extops, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            if (T_2_1.num == true) {

  LINE(46);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                err = idnOPget_kind(i, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                if (T_3_1.cell->tag == 8) T_3_2.num = true; else T_3_2.num = false;
                if (T_3_2.num == true) {

  LINE(47);
                    {
                    CLUREF T_4_1;
                    CellAlloc(3, n.num, T_4_1);
                    err = idnOPset_kind(i, T_4_1);
                    if (err != ERR_ok) goto ex_0;
                    }
                    }
                else {

  LINE(48);
                    {
                    CLUREF T_4_1;
                    CLUREF T_4_2;
                    sequenceOPnew2(CLU_3, &T_4_1);
                    T_4_1.vec->data[0] = STR_redeclaration_040of_040_047.num;
                    err = idnOPget_str(i, &T_4_2);
                    if (err != ERR_ok) goto ex_0;
                    T_4_1.vec->data[1] = T_4_2.num;
                    T_4_1.vec->data[2] = STR__047.num;
                    err = c_envOPerr(e, T_4_1);
                    if (err != ERR_ok) goto ex_0;
                    }
                    }}/* end if */
                }
            else {

  LINE(51);
                {
                CLUREF T_3_1;
                err = stringOPconcat(STR__045, n, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                n.num = T_3_1.num;
                }

  LINE(52);
                {
                CLUREF T_3_1;
                CellAlloc(3, n.num, T_3_1);
                err = c_envOPdeclare(e, i, T_3_1);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(53);
                {
                CLUREF T_3_1;
                err = idnOPcreate(n, uk, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                op.vec->data[4]  = T_3_1.num;
                }
                }}/* end if */
        }
    }
    end_inline_for_2:;

  LINE(56);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[5];
    err = c_envOPset_line(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(57);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = extops.vec->size; 
        T_1_3 = extops;
        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(58);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            err = idnOPget_kind(i, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            if (T_2_1.cell->tag == 8) T_2_2.num = true; else T_2_2.num = false;
            if (T_2_2.num == true) {

  LINE(59);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                sequenceOPnew2(CLU_3, &T_3_1);
                T_3_1.vec->data[0] = STR_operation_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_040not_040defined.num;
                err = c_envOPerr(e, T_3_1);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(60);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                err = idnOPget_str(i, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                CellAlloc(3, T_3_1.num, T_3_2);
                err = idnOPset_kind(i, T_3_2);
                if (err != ERR_ok) goto ex_0;
                }
                }
                }/* end if */
        }
    }
    end_inline_for_3:;
    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_setup_opers ****/


extern errcode idnOPequal();

/**** BEGIN PROCEDURE c_member ****/

errcode c_member(i, idns, ret_1)
CLUREF i;
CLUREF idns;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF id;
    enter_proc(65);

  LINE(66);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = idns.vec->size; 
        T_1_3 = idns;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            id.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(67);
            {
            CLUREF T_2_1;
            err = idnOPequal(i, id, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            if (T_2_1.num == true) {
                {
                {
                ret_1->tf = true;
                }
                {signal (ERR_ok);}}
                }
                }/* end if */
        }
    }
    end_inline_for_1:;

  LINE(69);
    {
    {
    ret_1->tf = false;
    }
    {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_member ****/


extern errcode recordOPget_10();
extern errcode recordOPget_3();
extern errcode c_envOPbegin_specs();
extern errcode c_envOPeval_parms();
extern errcode c_parameters();
extern errcode recordOPset_9();
extern errcode c_up_type();
extern errcode c_envOPset_up_type();
extern errcode recordOPget_9();
extern errcode c_envOPeval_equates();
extern errcode recordOPset_2();
extern errcode c_down_type();
extern errcode c_envOPset_down_type();
extern errcode recordOPget_2();
extern errcode c_restrictlist();
extern errcode c_add_restricts();
extern errcode sequenceOPnew();
extern errcode c_oper_specs();
extern errcode charOPequal();
extern errcode stringOPfetch();
extern errcode sequenceOPaddh();
extern errcode c_envOPend_specs();
extern errcode sequenceOPconcat();
extern errcode sequenceOPsize();

/**** BEGIN PROCEDURE c_type_specs ****/

errcode c_type_specs(e, def, mod, ret_1, ret_2)
CLUREF e;
CLUREF def;
CLUREF mod;
CLUREF *ret_1;
CLUREF *ret_2;
    {
    errcode err;
    errcode ecode2;
    CLUREF dparms;
    CLUREF reqs;
    CLUREF equates;
    CLUREF opers;
    CLUREF nparms;
    CLUREF extinfo;
    CLUREF intinfo;
    CLUREF op;
    CLUREF inf;
    enter_proc(72);

  LINE(73);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[7];
        dparms.num = T_1_1.num;
        }
        }

  LINE(74);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[9];
        reqs.num = T_1_1.num;
        }
        }

  LINE(75);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[2];
        equates.num = T_1_1.num;
        }
        }

  LINE(76);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[0];
        opers.num = T_1_1.num;
        }
        }

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

  LINE(78);
    {
    err = c_envOPeval_parms(e, dparms, equates);
    if (err != ERR_ok) goto ex_0;
    }

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

  LINE(80);
    {
    CLUREF T_1_1;
    err = c_up_type(e, mod, nparms, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    def.vec->data[8]  = T_1_1.num;
    }

  LINE(81);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[8];
    err = c_envOPset_up_type(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(82);
    {
    err = c_envOPeval_equates(e);
    if (err != ERR_ok) goto ex_0;
    }

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

  LINE(84);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[1];
    err = c_envOPset_down_type(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(85);
    {
    err = c_restrictlist(e, reqs);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(86);
    {
    err = c_add_restricts(e, reqs);
    if (err != ERR_ok) goto ex_0;
    }

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

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

  LINE(89);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = opers.vec->size; 
        T_1_3 = opers;
        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(90);
            {
                {CLUREF T_2_1;
                err = c_oper_specs(e, op, &T_2_1);
                if (err != ERR_ok) goto ex_0;
                inf.num = T_2_1.num;
                }
                }

  LINE(91);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            CLUREF T_2_4;
            T_2_1.num = inf.vec->data[1];
            err = stringOPfetch(T_2_1, CLU_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            T_2_3.ch = '%';
            T_2_4.num = (T_2_2.ch == T_2_3.ch)? true : false;
            if (T_2_4.num == true) {

  LINE(92);
                {
                CLUREF T_3_1;
                err = sequenceOPaddh(intinfo, inf, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                intinfo.num = T_3_1.num;
                }
                }
            else {

  LINE(93);
                {
                CLUREF T_3_1;
                err = sequenceOPaddh(extinfo, inf, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                extinfo.num = T_3_1.num;
                }
                }}/* end if */
        }
    }
    end_inline_for_1:;

  LINE(96);
    {
    err = c_envOPend_specs(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(97);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    RecordAlloc(2, T_1_1);
    T_1_1.vec->data[1]  = nparms.num;
    err = sequenceOPconcat(extinfo, intinfo, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    T_1_1.vec->data[0]  = T_1_2.num;
    ret_1->num = T_1_1.num;
    }
    {
    CLUREF T_1_3;
    T_1_3.num = extinfo.vec->size;
    ret_2->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 c_type_specs ****/


extern errcode c_push_parms();
extern errcode c_envOPbegin_recheck();
extern errcode c_envOPequates();
extern errcode c_envOPend_recheck();
extern errcode c_initlist();
extern errcode c_oper_main();

/**** BEGIN PROCEDURE c_type_main ****/

errcode c_type_main(e, def, info)
CLUREF e;
CLUREF def;
CLUREF info;
    {
    errcode err;
    errcode ecode2;
    CLUREF opers;
    CLUREF op;
    enter_proc(102);

  LINE(103);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[5];
    err = c_envOPset_line(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

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

  LINE(105);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    T_1_1.num = def.vec->data[7];
    T_1_2.num = info.vec->data[1];
    err = c_push_parms(e, T_1_1, T_1_2);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(106);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    T_1_1.num = info.vec->data[1];
    err = sequenceOPempty(T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    T_1_3.num = T_1_2.num ^ 1;
    err = c_envOPbegin_recheck(e, T_1_3);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(107);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[2];
    err = c_envOPequates(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(108);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[9];
    err = c_restrictlist(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(109);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    T_1_1.num = info.vec->data[1];
    err = sequenceOPempty(T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    T_1_3.num = T_1_2.num ^ 1;
    err = c_envOPend_recheck(e, T_1_3);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(110);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[4];
    err = c_initlist(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

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

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

  LINE(113);
            {
            err = c_oper_main(e, op, opers);
            if (err != ERR_ok) goto ex_0;
            }
        }
    }
    end_inline_for_1:;

  LINE(115);
    {
    err = c_envOPend_scope(e);
    if (err != ERR_ok) goto ex_0;
    }
    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_type_main ****/


extern errcode c_envOPget_type_type();
extern errcode oneofOPmake_25();
extern errcode c_envOPget_type();
extern errcode exprOPcreate();
extern errcode oneofOPmake_13();

/**** BEGIN PROCEDURE c_up_type ****/

errcode c_up_type(e, gen, parms, ret_1)
CLUREF e;
CLUREF gen;
CLUREF parms;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF exprs;
    CLUREF tt;
    CLUREF i;
    CLUREF ta;
    CLUREF xa;
    CLUREF k;
    enter_proc(118);

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

  LINE(120);
    {
        {CLUREF T_1_1;
        err = c_envOPget_type_type(e, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        tt.num = T_1_1.num;
        }
        }

  LINE(121);
    {
    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(122);
            {
            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: 
                 {

  LINE(124);
                    {
                        {CLUREF T_3_1;
                        CellAlloc(5, i.num, T_3_1);
                        ta.num = T_3_1.num;
                        }
                        }

  LINE(125);
                    {
                        {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(126);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    err = exprOPcreate(xa, tt, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    err = sequenceOPaddh(exprs, T_3_1, &T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    exprs.num = T_3_2.num;
                    }
                    break;
                    }
            case 10: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                k.num = T_2_2.num;

  LINE(128);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CellAlloc(13, i.num, T_3_1);
                    err = exprOPcreate(T_3_1, k, &T_3_2);
                    if (err != ERR_ok) goto ex_0;
                    err = sequenceOPaddh(exprs, T_3_2, &T_3_3);
                    if (err != ERR_ok) goto ex_0;
                    exprs.num = T_3_3.num;
                    }
                    break;
                    }
            default: {
            }
            }
            }
        }
    }
    end_inline_for_1:;

  LINE(133);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    RecordAlloc(2, T_1_1);
    T_1_1.vec->data[0]  = gen.num;
    T_1_1.vec->data[1]  = exprs.num;
    CellAlloc(3, T_1_1.num, T_1_2);
    err = c_envOPget_type(e, 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 c_up_type ****/


extern errcode equateOPis_rep();
extern errcode equateOPget_line();
extern errcode equateOPget_idn();
extern errcode exprOPget_abs();
extern errcode oneofOPis_6();
extern errcode typespecOPget_abs();
extern errcode exprOPget_typespec();
extern errcode exprOPset_abs();
extern errcode exprOPset_typespec();
extern errcode c_envOPerr1();
extern errcode c_envOPget_unknown_type();
CLUREF STR_REP_040not_040equated_040to_040a_040type;
CLUREF STR_REP_040undefined;
static int c_down_type_own_init = 0;

/**** BEGIN PROCEDURE c_down_type ****/

errcode c_down_type(e, eqs, ret_1)
CLUREF e;
CLUREF eqs;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF eq;
    CLUREF k;
    CLUREF xa;
    CLUREF ta;
    CLUREF t;
        if (c_down_type_own_init == 0) {
        stringOPcons("REP not equated to a type", CLU_1, CLU_25, &STR_REP_040not_040equated_040to_040a_040type);
        stringOPcons("REP undefined", CLU_1, CLU_13, &STR_REP_040undefined);
        c_down_type_own_init = 1;
    }
    enter_proc(137);

  LINE(138);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = eqs.vec->size; 
        T_1_3 = eqs;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            eq.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(139);
            {
            CLUREF T_2_1;
            err = equateOPis_rep(eq, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            if (T_2_1.num == true) {

  LINE(140);
                {
                CLUREF T_3_1;
                err = equateOPget_line(eq, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                err = c_envOPset_line(e, T_3_1);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(141);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                err = equateOPget_idn(eq, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                err = idnOPget_kind(T_3_1, &T_3_2);
                if (err != ERR_ok) goto ex_0;
                switch (T_3_2.cell->tag) {
                case 1: 
                     {CLUREF T_3_3;
                    T_3_3.num = T_3_2.cell->value;
                    k.num = T_3_3.num;

  LINE(143);
                        {
                        CLUREF T_4_1;
                        err = exprOPget_abs(k, &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(145);
                                {
                                {
                                ret_1->num = xa.num;
                                }
                                {signal (ERR_ok);}}
                                break;
                                }
                        case 3: 
                             {CLUREF T_4_3;
                            T_4_3.num = T_4_1.cell->value;
                            xa.num = T_4_3.num;

  LINE(147);
                                {
                                CLUREF T_5_1;
                                CLUREF T_5_2;
                                CLUREF T_5_3;
                                err = exprOPget_typespec(k, &T_5_1);
                                if (err != ERR_ok) goto ex_0;
                                err = typespecOPget_abs(T_5_1, &T_5_2);
                                if (err != ERR_ok) goto ex_0;
                                if (T_5_2.cell->tag == 6) T_5_3.num = true; else T_5_3.num = false;
                                if (T_5_3.num == true) {

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

  LINE(149);
                                    {
                                        {CLUREF T_6_1;
                                        err = c_envOPget_type(e, ta, &T_6_1);
                                        if (err != ERR_ok) goto ex_0;
                                        t.num = T_6_1.num;
                                        }
                                        }

  LINE(150);
                                    {
                                    CLUREF T_6_1;
                                    CellAlloc(25, t.num, T_6_1);
                                    err = exprOPset_abs(k, T_6_1);
                                    if (err != ERR_ok) goto ex_0;
                                    }

  LINE(151);
                                    {
                                    CLUREF T_6_1;
                                    err = c_envOPget_type_type(e, &T_6_1);
                                    if (err != ERR_ok) goto ex_0;
                                    err = exprOPset_typespec(k, T_6_1);
                                    if (err != ERR_ok) goto ex_0;
                                    }

  LINE(152);
                                    {
                                    {
                                    ret_1->num = t.num;
                                    }
                                    {signal (ERR_ok);}}
                                    }
                                    }/* end if */
                                break;
                                }
                        default: {
                        }
                        }
                        }
                        break;
                        }
                default: {
                }
                }
                }

  LINE(158);
                {
                err = c_envOPerr1(e, STR_REP_040not_040equated_040to_040a_040type);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(159);
                {
                {
                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);}}
                }
                }/* end if */
        }
    }
    end_inline_for_1:;

  LINE(162);
    {
    err = c_envOPerr1(e, STR_REP_040undefined);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(163);
    {
    {
    CLUREF T_1_1;
    err = c_envOPget_unknown_type(e, &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_down_type ****/


extern errcode c_envOPset_varlist();
extern errcode recordOPget_12();
extern errcode recordOPget_13();
extern errcode c_decllist1();
extern errcode c_typelist1();
extern errcode recordOPget_11();
extern errcode recordOPset_11();
extern errcode c_exceptionlist1();
extern errcode c_oper_requires();
extern errcode recordOPset_10();

/**** BEGIN PROCEDURE c_oper_specs ****/

errcode c_oper_specs(e, def, ret_1)
CLUREF e;
CLUREF def;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF dparms;
    CLUREF reqs;
    CLUREF nparms;
    CLUREF args;
    CLUREF vals;
    CLUREF ivals;
    CLUREF sigs;
    CLUREF at;
    CLUREF xreqs;
    CLUREF t;
    CLUREF n;
    enter_proc(166);

  LINE(167);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[6];
    err = c_envOPset_line(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(168);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[11];
    err = c_envOPset_varlist(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(169);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[7];
        dparms.num = T_1_1.num;
        }
        }

  LINE(170);
    {
        {CLUREF T_1_1;
        T_1_1.num = def.vec->data[12];
        reqs.num = T_1_1.num;
        }
        }

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

  LINE(172);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[2];
    err = c_envOPeval_parms(e, dparms, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(173);
    {
        {CLUREF T_1_1;
        err = c_parameters(e, dparms, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        nparms.num = T_1_1.num;
        }
        }

  LINE(174);
    {
    err = c_envOPeval_equates(e);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(175);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[0];
        err = c_decllist1(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        args.num = T_1_2.num;
        }
        }

  LINE(176);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        CLUREF T_1_3;
        T_1_1.num = def.vec->data[10];
        err = c_typelist1(e, T_1_1, &T_1_2, &T_1_3);
        if (err != ERR_ok) goto ex_0;
        vals.num = T_1_2.num;
        ivals.num = T_1_3.num;
        }
        }

  LINE(177);
    {
    def.vec->data[10]  = ivals.num;
    }

  LINE(178);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[8];
        err = c_exceptionlist1(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        sigs.num = T_1_2.num;
        }
        }

  LINE(179);
    {
    err = c_restrictlist(e, reqs);
    if (err != ERR_ok) goto ex_0;
    }

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

  LINE(181);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        RecordAlloc(4, T_1_1);
        T_1_2.num = def.vec->data[3];
        T_1_1.vec->data[1]  = T_1_2.num;
        T_1_1.vec->data[0]  = args.num;
        T_1_1.vec->data[3]  = vals.num;
        T_1_1.vec->data[2]  = sigs.num;
        at.num = T_1_1.num;
        }
        }

  LINE(185);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[12];
        err = c_oper_requires(e, T_1_1, nparms, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        xreqs.num = T_1_2.num;
        }
        }

  LINE(186);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        CellAlloc(2, at.num, T_1_1);
        err = c_envOPget_type(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        t.num = T_1_2.num;
        }
        }

  LINE(187);
    {
    def.vec->data[9]  = t.num;
    }

  LINE(188);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[4];
        err = idnOPget_str(T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        n.num = T_1_2.num;
        }
        }

  LINE(189);
    {
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    RecordAlloc(3, T_1_1);
    T_1_1.vec->data[1]  = n.num;
    T_1_1.vec->data[2]  = xreqs.num;
    RecordAlloc(2, T_1_2);
    T_1_2.vec->data[0]  = nparms.num;
    T_1_2.vec->data[1]  = t.num;
    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 c_oper_specs ****/


extern errcode c_add_requires();
extern errcode c_apply_main1();
extern errcode c_rem_requires();

/**** BEGIN PROCEDURE c_oper_main ****/

errcode c_oper_main(e, def, infos)
CLUREF e;
CLUREF def;
CLUREF infos;
    {
    errcode err;
    errcode ecode2;
    CLUREF n;
    CLUREF info;
    CLUREF reqs;
    enter_proc(195);

  LINE(196);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[4];
        err = idnOPget_str(T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        n.num = T_1_2.num;
        }
        }

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

  LINE(198);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = info.vec->data[1];
            T_2_2.num = ((n.str->size != T_2_1.str->size)? false :
                !(bcmp(n.str->data, T_2_1.str->data, n.str->size)));
            if (T_2_2.num == true) {

  LINE(199);
                {
                    {CLUREF T_3_1;
                    T_3_1.num = info.vec->data[2];
                    reqs.num = T_3_1.num;
                    }
                    }

  LINE(200);
                {
                err = c_add_requires(e, reqs);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(201);
                {
                CLUREF T_3_1;
                CLUREF T_3_2;
                T_3_1.num = info.vec->data[0];
                T_3_2.num = T_3_1.vec->data[0];
                err = c_apply_main1(e, def, T_3_2);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(202);
                {
                err = c_rem_requires(e, reqs);
                if (err != ERR_ok) goto ex_0;
                }

  LINE(203);
                {
                {signal (ERR_ok);}}
                }
                }/* 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_oper_main ****/


extern errcode c_type();
extern errcode c_envOPnew_apply();
extern errcode arrayOPtrim();
extern errcode c_stmt();

/**** BEGIN PROCEDURE c_apply_main1 ****/

errcode c_apply_main1(e, def, nparms)
CLUREF e;
CLUREF def;
CLUREF nparms;
    {
    errcode err;
    errcode ecode2;
    CLUREF args;
    CLUREF vals;
    CLUREF ivals;
    CLUREF sigs;
    CLUREF s;
    enter_proc(208);

  LINE(209);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[6];
    err = c_envOPset_line(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(210);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[11];
    err = c_envOPset_varlist(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

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

  LINE(212);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[7];
    err = c_push_parms(e, T_1_1, nparms);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(213);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = sequenceOPempty(nparms, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    T_1_2.num = T_1_1.num ^ 1;
    err = c_envOPbegin_recheck(e, T_1_2);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(214);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[0];
        err = c_decllist1(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        args.num = T_1_2.num;
        }
        }

  LINE(215);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        CLUREF T_1_3;
        T_1_1.num = def.vec->data[10];
        err = c_typelist1(e, T_1_1, &T_1_2, &T_1_3);
        if (err != ERR_ok) goto ex_0;
        vals.num = T_1_2.num;
        ivals.num = T_1_3.num;
        }
        }

  LINE(216);
    {
    def.vec->data[10]  = ivals.num;
    }

  LINE(217);
    {
        {CLUREF T_1_1;
        CLUREF T_1_2;
        T_1_1.num = def.vec->data[8];
        err = c_exceptionlist1(e, T_1_1, &T_1_2);
        if (err != ERR_ok) goto ex_0;
        sigs.num = T_1_2.num;
        }
        }

  LINE(218);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[12];
    err = c_restrictlist(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(219);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[2];
    err = c_envOPequates(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(220);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[6];
    err = c_envOPset_line(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(221);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    T_1_1.num = def.vec->data[9];
    err = c_type(e, T_1_1, &T_1_2);
    if (err != ERR_ok) goto ex_0;
    def.vec->data[9]  = T_1_2.num;
    }

  LINE(222);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    RecordAlloc(4, T_1_1);
    T_1_2.num = def.vec->data[3];
    T_1_1.vec->data[1]  = T_1_2.num;
    T_1_1.vec->data[0]  = args.num;
    T_1_1.vec->data[3]  = vals.num;
    T_1_1.vec->data[2]  = sigs.num;
    err = c_envOPnew_apply(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(226);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    err = sequenceOPempty(nparms, &T_1_1);
    if (err != ERR_ok) goto ex_0;
    T_1_2.num = T_1_1.num ^ 1;
    err = c_envOPend_recheck(e, T_1_2);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(227);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[5];
    err = c_initlist(e, T_1_1);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(228);
    {
    CLUREF T_1_1;
    T_1_1.num = def.vec->data[11];
    err = arrayOPtrim(T_1_1, CLU_1, CLU_0);
    if (err != ERR_ok) goto ex_0;
    }

  LINE(229);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
    CLUREF T_1_4;
        T_1_1.num = def.vec->data[1];
        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++) {
            s.num = T_1_4.vec->data[T_1_2.num - 1];

  LINE(230);
            {
            err = c_stmt(e, s);
            if (err != ERR_ok) goto ex_0;
            }
        }
    }
    end_inline_for_1:;

  LINE(232);
    {
    err = c_envOPend_scope(e);
    if (err != ERR_ok) goto ex_0;
    }
    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_apply_main1 ****/


extern errcode oneofOPmake_6();

/**** BEGIN PROCEDURE c_add_requires ****/

errcode c_add_requires(e, reqs)
CLUREF e;
CLUREF reqs;
    {
    errcode err;
    errcode ecode2;
    CLUREF req;
    CLUREF k;
    enter_proc(235);

  LINE(236);
    {
    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(237);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = req.vec->data[1];
            err = idnOPget_kind(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            switch (T_2_2.cell->tag) {
            case 6: 
                 {CLUREF T_2_3;
                T_2_3.num = T_2_2.cell->value;
                k.num = T_2_3.num;

  LINE(239);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    T_3_1.num = req.vec->data[1];
                    T_3_2.num = req.vec->data[0];
                    err = sequenceOPconcat(k, T_3_2, &T_3_3);
                    if (err != ERR_ok) goto ex_0;
                    CellAlloc(6, T_3_3.num, T_3_4);
                    err = idnOPset_kind(T_3_1, T_3_4);
                    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 c_add_requires ****/


extern errcode intOPsub();

/**** BEGIN PROCEDURE c_rem_requires ****/

errcode c_rem_requires(e, reqs)
CLUREF e;
CLUREF reqs;
    {
    errcode err;
    errcode ecode2;
    CLUREF req;
    CLUREF k;
    enter_proc(245);

  LINE(246);
    {
    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(247);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            T_2_1.num = req.vec->data[1];
            err = idnOPget_kind(T_2_1, &T_2_2);
            if (err != ERR_ok) goto ex_0;
            switch (T_2_2.cell->tag) {
            case 6: 
                 {CLUREF T_2_3;
                T_2_3.num = T_2_2.cell->value;
                k.num = T_2_3.num;

  LINE(249);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    CLUREF T_3_3;
                    CLUREF T_3_4;
                    CLUREF T_3_5;
                    T_3_1.num = k.vec->size;
                    T_3_2.num = req.vec->data[0];
                    T_3_3.num = T_3_2.vec->size;
                    T_3_4.num = T_3_1.num - T_3_3.num;
                     if ((T_3_4.num >= 0 && T_3_1.num < 0 && (-T_3_3.num) < 0) || 
                         (T_3_4.num <= 0 && T_3_1.num > 0 && (-T_3_3.num) > 0)) {
                        err = ERR_overflow;
                        goto ex_0;}
                    err = sequenceOPsubseq(k, CLU_1, T_3_4, &T_3_5);
                    if (err != ERR_ok) goto ex_0;
                    k.num = T_3_5.num;
                    }

  LINE(251);
                    {
                    CLUREF T_3_1;
                    CLUREF T_3_2;
                    T_3_1.num = req.vec->data[1];
                    CellAlloc(6, k.num, T_3_2);
                    err = idnOPset_kind(T_3_1, 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 c_rem_requires ****/


extern errcode c_envOPget_cvt_type();
extern errcode c_envOPget_down_type();
extern errcode c_envOPbuilding_specs();
extern errcode c_envOPget_up_type();
extern errcode typespecOPequal();
extern errcode c_envOPadd_var();

/**** BEGIN PROCEDURE c_decllist1 ****/

errcode c_decllist1(e, decls, ret_1)
CLUREF e;
CLUREF decls;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF types;
    CLUREF cvt_;
    CLUREF down_;
    CLUREF nt;
    CLUREF d;
    CLUREF dt;
    CLUREF at;
    CLUREF i;
    enter_proc(257);

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

  LINE(259);
    {
        {CLUREF T_1_1;
        err = c_envOPget_cvt_type(e, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        cvt_.num = T_1_1.num;
        }
        }

  LINE(260);
    {
        {CLUREF T_1_1;
        err = c_envOPget_down_type(e, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        down_.num = T_1_1.num;
        }
        }

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

  LINE(263);
        {
        CLUREF T_2_1;
        err = c_envOPget_up_type(e, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        nt.num = T_2_1.num;
        }
        }
    else {

  LINE(264);
        {
        nt.num = cvt_.num;
        }
        }}/* end if */

  LINE(266);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
    CLUREF T_1_3;
        T_1_2.num = decls.vec->size; 
        T_1_3 = decls;
        for (T_1_1.num = 1; T_1_1.num <= T_1_2.num; T_1_1.num++) {
            d.num = T_1_3.vec->data[T_1_1.num - 1];

  LINE(267);
            {
                {CLUREF T_2_1;
                T_2_1.num = d.vec->data[1];
                dt.num = T_2_1.num;
                }
                }

  LINE(269);
            {
            CLUREF T_2_1;
            err = typespecOPequal(dt, cvt_, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            if (T_2_1.num == true) {

  LINE(270);
                {
                dt.num = down_.num;
                }

  LINE(271);
                {
                at.num = nt.num;
                }
                }
            else {

  LINE(272);
                {
                CLUREF T_3_1;
                err = c_type(e, dt, &T_3_1);
                if (err != ERR_ok) goto ex_0;
                dt.num = T_3_1.num;
                }

  LINE(273);
                {
                d.vec->data[1]  = dt.num;
                }

  LINE(274);
                {
                at.num = dt.num;
                }
                }}/* end if */

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

  LINE(277);
                    {
                    err = c_envOPadd_var(e, i, dt);
                    if (err != ERR_ok) goto ex_0;
                    }

  LINE(278);
                    {
                    CLUREF T_3_1;
                    err = sequenceOPaddh(types, at, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    types.num = T_3_1.num;
                    }
                }
            }
            end_inline_for_2:;
        }
    }
    end_inline_for_1:;

  LINE(281);
    {
    {
    ret_1->num = types.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_decllist1 ****/


extern errcode sequenceOPindexes();
extern errcode sequenceOPfetch();

/**** BEGIN PROCEDURE c_typelist1 ****/

errcode c_typelist1(e, types, ret_1, ret_2)
CLUREF e;
CLUREF types;
CLUREF *ret_1;
CLUREF *ret_2;
    {
    errcode err;
    errcode ecode2;
    CLUREF cvt_;
    CLUREF nt;
    CLUREF xtypes;
    CLUREF itypes;
    CLUREF i;
    CLUREF t;
    CLUREF xt;
    enter_proc(284);

  LINE(285);
    {
        {CLUREF T_1_1;
        err = c_envOPget_cvt_type(e, &T_1_1);
        if (err != ERR_ok) goto ex_0;
        cvt_.num = T_1_1.num;
        }
        }

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

  LINE(288);
        {
        CLUREF T_2_1;
        err = c_envOPget_up_type(e, &T_2_1);
        if (err != ERR_ok) goto ex_0;
        nt.num = T_2_1.num;
        }
        }
    else {

  LINE(289);
        {
        nt.num = cvt_.num;
        }
        }}/* end if */

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

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

  LINE(293);
    {
    CLUREF T_1_1;
    CLUREF T_1_2;
        T_1_2.num = types.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(294);
            {
                {CLUREF T_2_1;
                if (i.num < 1 || i.num > types.vec->size ) {
                    err = ERR_bounds;
                    goto ex_0;}
                T_2_1.num = types.vec->data[i.num - 1];
                t.num = T_2_1.num;
                }
                }

  LINE(296);
            {
            CLUREF T_2_1;
            err = typespecOPequal(t, cvt_, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            if (T_2_1.num == true) {

  LINE(297);
                {
                xt.num = nt.num;
                }
                }
            else {

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

  LINE(299);
                {
                xt.num = t.num;
                }
                }}/* end if */

  LINE(301);
            {
            CLUREF T_2_1;
            err = sequenceOPaddh(xtypes, xt, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            xtypes.num = T_2_1.num;
            }

  LINE(302);
            {
            CLUREF T_2_1;
            err = sequenceOPaddh(itypes, t, &T_2_1);
            if (err != ERR_ok) goto ex_0;
            itypes.num = T_2_1.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(304);
    {
    {
    ret_1->num = xtypes.num;
    }
    {
    ret_2->num = itypes.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_typelist1 ****/



/**** BEGIN PROCEDURE c_exceptionlist1 ****/

errcode c_exceptionlist1(e, sigs, ret_1)
CLUREF e;
CLUREF sigs;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF nsigs;
    CLUREF sig;
    CLUREF types;
    CLUREF itypes;
    enter_proc(307);

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

  LINE(309);
    {
    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(310);
            {
                {CLUREF T_2_1;
                CLUREF T_2_2;
                CLUREF T_2_3;
                T_2_1.num = sig.vec->data[1];
                err = c_typelist1(e, T_2_1, &T_2_2, &T_2_3);
                if (err != ERR_ok) goto ex_0;
                types.num = T_2_2.num;
                itypes.num = T_2_3.num;
                }
                }

  LINE(311);
            {
            sig.vec->data[1]  = itypes.num;
            }

  LINE(312);
            {
            CLUREF T_2_1;
            CLUREF T_2_2;
            CLUREF T_2_3;
            RecordAlloc(2, T_2_1);
            T_2_2.num = sig.vec->data[0];
            T_2_1.vec->data[0]  = T_2_2.num;
            T_2_1.vec->data[1]  = types.num;
            err = sequenceOPaddh(nsigs, T_2_1, &T_2_3);
            if (err != ERR_ok) goto ex_0;
            nsigs.num = T_2_3.num;
            }
        }
    }
    end_inline_for_1:;

  LINE(315);
    {
    {
    ret_1->num = nsigs.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_exceptionlist1 ****/


extern errcode c_add_opspecs();
extern errcode c_new_requires();

/**** BEGIN PROCEDURE c_oper_requires ****/

errcode c_oper_requires(e, reqs, parms, ret_1)
CLUREF e;
CLUREF reqs;
CLUREF parms;
CLUREF *ret_1;
    {
    errcode err;
    errcode ecode2;
    CLUREF xreqs;
    CLUREF req;
    CLUREF i;
    CLUREF rk;
    CLUREF opers;
    enter_proc(318);

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

  LINE(321);
    {
    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(322);
            {
                {CLUREF T_2_1;
                T_2_1.num = req.vec->data[0];
                i.num = T_2_1.num;
                }
                }

  LINE(323);
            {
            CLUREF T_2_1;
            T_2_1.num = req.vec->data[1];
            switch (T_2_1.cell->tag) {
            case 1: 
                 {CLUREF T_2_2;
                T_2_2.num = T_2_1.cell->value;
                rk.num = T_2_2.num;

  LINE(325);
                    {
                    CLUREF T_3_1;
                    err = c_member(i, parms, &T_3_1);
                    if (err != ERR_ok) goto ex_0;
                    if (T_3_1.num == true) {

  LINE(326);
                        {
                        err = c_add_opspecs(e, i, rk);
                        if (err != ERR_ok) goto ex_0;
                        }
                        }
                    else {

  LINE(327);
                        {
                            {CLUREF T_4_1;
                            CLUREF T_4_2;
                            err = sequenceOPnew(&T_4_1);
                            if (err != ERR_ok) goto ex_0;
                            err = c_new_requires(T_4_1, rk, &T_4_2);
                            if (err != ERR_ok) goto ex_0;
                            opers.num = T_4_2.num;
                            }
                            }

  LINE(329);
                        {
                        CLUREF T_4_1;
                        CLUREF T_4_2;
                        RecordAlloc(2, T_4_1);
                        T_4_1.vec->data[1]  = i.num;
                        T_4_1.vec->data[0]  = opers.num;
                        err = sequenceOPaddh(xreqs, T_4_1, &T_4_2);
                        if (err != ERR_ok) goto ex_0;
                        xreqs.num = T_4_2.num;
                        }
                        }}/* end if */
                    break;
                    }
            default: {
            }
            }
            }
        }
    }
    end_inline_for_1:;

  LINE(336);
    {
    {
    ret_1->num = xreqs.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_oper_requires ****/

