
#line 29 "../metachop/decomp3.ch"
/*************************************************************************/
#line 29 "../metachop/decomp3.ch"
/*                                                                       */
#line 29 "../metachop/decomp3.ch"
/*        Produced by Metachop version 2.0  -    1989-1995               */
#line 29 "../metachop/decomp3.ch"
/*     Tree      Meta     Chopper      developped    by                  */
#line 29 "../metachop/decomp3.ch"
/*                  Eric Lavillonniere                                   */
#line 29 "../metachop/decomp3.ch"
/*                                                                       */
#line 29 "../metachop/decomp3.ch"
/*************************************************************************/
#line 29 "../metachop/decomp3.ch"
#line 29 "../metachop/decomp3.ch"
#include "token.h"
#line 29 "../metachop/decomp3.ch"
extern int _retVal[50];
#line 29 "../metachop/decomp3.ch"
extern PPTREE _storeVal[50],_nextVal;
#line 29 "../metachop/decomp3.ch"
extern PPTREE stackTree[1024];
#line 29 "../metachop/decomp3.ch"
extern int ptStackTree;
#line 29 "../metachop/decomp3.ch"
#define decomp decomp_metachop
#line 29 "../metachop/decomp3.ch"
#line 29 "../metachop/decomp3.ch"
#ifndef for_elem
#line 29 "../metachop/decomp3.ch"
#line 29 "../metachop/decomp3.ch"
#define for_elem _for_elem
#line 29 "../metachop/decomp3.ch"
#endif
#ifdef INCONNU
#line 29 "../metachop/decomp3.ch"
#line 29 "../metachop/decomp3.ch"
PTREE   for_elem ;
#line 29 "../metachop/decomp3.ch"
#line 29 "../metachop/decomp3.ch"
#endif
#include "decmetac.h"
#include "memges.h"
#include "test.h"

extern char *currentLanguage ;
extern int  cplusGen ;
extern int  line ;

#line 44 "../metachop/decomp3.ch"
#line 44 "../metachop/decomp3.ch"
PTREE LookMeta ( PTREE tree, char *nameVar )
#line 44 "../metachop/decomp3.ch"
{
#line 44 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 44 "../metachop/decomp3.ch"
#line 44 "../metachop/decomp3.ch"
#line 47 "../metachop/decomp3.ch"
    char    *theValue ;
#line 47 "../metachop/decomp3.ch"
#line 48 "../metachop/decomp3.ch"
    PTREE   ret, aux, inter1, catcher ;
#line 48 "../metachop/decomp3.ch"
#line 48 "../metachop/decomp3.ch"
#line 50 "../metachop/decomp3.ch"
    PTREE   retListStat ;
#line 50 "../metachop/decomp3.ch"
#line 50 "../metachop/decomp3.ch"
#line 52 "../metachop/decomp3.ch"
    char    name [20];
#line 52 "../metachop/decomp3.ch"
#line 53 "../metachop/decomp3.ch"
    int varNumber = 0 ;
#line 53 "../metachop/decomp3.ch"
#line 54 "../metachop/decomp3.ch"
    ItPtree it (tree) ;
#line 54 "../metachop/decomp3.ch"
#line 55 "../metachop/decomp3.ch"
    PPTREE  _for_elem ;
#line 55 "../metachop/decomp3.ch"
#line 57 "../metachop/decomp3.ch"
    retListStat = (PPTREE) 0 ;
#line 57 "../metachop/decomp3.ch"
#line 57 "../metachop/decomp3.ch"
#line 58 "../metachop/decomp3.ch"
    while ( for_elem = it++ ) {
#line 58 "../metachop/decomp3.ch"
#line 59 "../metachop/decomp3.ch"
                                    if ( ((_inter = (PPTREE)for_elem,1) && 
#line 59 "../metachop/decomp3.ch"
                                            (NumberTree(_inter) == META) &&
#line 59 "../metachop/decomp3.ch"
                                            (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,1),1) &&
#line 59 "../metachop/decomp3.ch"
                                                (NumberTree(_inter) == TERM_TREE) &&
#line 59 "../metachop/decomp3.ch"
                                                1),
#line 59 "../metachop/decomp3.ch"
                                                (_inter=_storeVal[1],1),_retVal[1]) &&
#line 59 "../metachop/decomp3.ch"
                                            1) ) {
#line 59 "../metachop/decomp3.ch"
#line 60 "../metachop/decomp3.ch"
                                                    theValue = Value(for_elem);
#line 60 "../metachop/decomp3.ch"
#line 61 "../metachop/decomp3.ch"
                                                    if ( *theValue == '(' ) {
#line 61 "../metachop/decomp3.ch"
#line 62 "../metachop/decomp3.ch"
theValue = AllocString(theValue + 1);
#line 62 "../metachop/decomp3.ch"
#line 63 "../metachop/decomp3.ch"
{
#line 63 "../metachop/decomp3.ch"
    PLANG _oldLanguage = pCurrentLanguage;
#line 63 "../metachop/decomp3.ch"
    SwitchLang("metachop");
#line 63 "../metachop/decomp3.ch"
#line 63 "../metachop/decomp3.ch"
    (ret=ReadInString(theValue));
#line 63 "../metachop/decomp3.ch"
    ;
#line 63 "../metachop/decomp3.ch"
    SwitchLangPoint(_oldLanguage);
#line 63 "../metachop/decomp3.ch"
}
#line 63 "../metachop/decomp3.ch"
#line 63 "../metachop/decomp3.ch"
#line 66 "../metachop/decomp3.ch"
if ( ret == (PTREE) - 1 ) {
#line 66 "../metachop/decomp3.ch"
#line 67 "../metachop/decomp3.ch"
                                char    string [MAXLENGTH];
#line 67 "../metachop/decomp3.ch"
#line 68 "../metachop/decomp3.ch"
                                *(theValue + strlen(theValue) - 1) = '\0';
#line 68 "../metachop/decomp3.ch"
#line 69 "../metachop/decomp3.ch"
                                strcpy(string, "Error while parsing : ");
#line 69 "../metachop/decomp3.ch"
#line 70 "../metachop/decomp3.ch"
                                strcat(string, theValue);
#line 70 "../metachop/decomp3.ch"
#line 71 "../metachop/decomp3.ch"
                                strcat(string, "\n");
#line 71 "../metachop/decomp3.ch"
#line 72 "../metachop/decomp3.ch"
                                line = 0 ;
#line 72 "../metachop/decomp3.ch"
#line 73 "../metachop/decomp3.ch"
                                PrintError(string, "", 0, 0, 0, 3, 1);
#line 73 "../metachop/decomp3.ch"
#line 74 "../metachop/decomp3.ch"
                                exit(0);
#line 74 "../metachop/decomp3.ch"
#line 74 "../metachop/decomp3.ch"
                               }
#line 74 "../metachop/decomp3.ch"
#line 76 "../metachop/decomp3.ch"
if ( ((_inter = (PPTREE)ret,1) && 
#line 76 "../metachop/decomp3.ch"
        (NumberTree(_inter) == metachop::IDENT) &&
#line 76 "../metachop/decomp3.ch"
        1) ) {
#line 76 "../metachop/decomp3.ch"
#line 77 "../metachop/decomp3.ch"
                (catcher=ret);
#line 77 "../metachop/decomp3.ch"
#line 77 "../metachop/decomp3.ch"
#line 78 "../metachop/decomp3.ch"
                ((_inter = (PPTREE)ret,1) && 
#line 78 "../metachop/decomp3.ch"
                    ((ret=SonTree(_inter,1)),1) &&
#line 78 "../metachop/decomp3.ch"
                    1);
#line 78 "../metachop/decomp3.ch"
                ;
#line 78 "../metachop/decomp3.ch"
#line 84 "../metachop/decomp3.ch"
                {
#line 84 "../metachop/decomp3.ch"
#line 85 "../metachop/decomp3.ch"
                    ItPtree it (tree) ;
#line 85 "../metachop/decomp3.ch"
#line 86 "../metachop/decomp3.ch"
                    PPTREE  _for_elem ;
#line 86 "../metachop/decomp3.ch"
#line 87 "../metachop/decomp3.ch"
                    while ( for_elem = it++ ) {
#line 87 "../metachop/decomp3.ch"
#line 88 "../metachop/decomp3.ch"
                                                    if ( ((_inter = (PPTREE)for_elem,1) && 
#line 88 "../metachop/decomp3.ch"
                                                            (NumberTree(_inter) == META) &&
#line 88 "../metachop/decomp3.ch"
                                                            1) && !strcmp(Value(for_elem) + 1, theValue) ) {
#line 88 "../metachop/decomp3.ch"
#line 90 "../metachop/decomp3.ch"
{
#line 90 "../metachop/decomp3.ch"
    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 90 "../metachop/decomp3.ch"
    _ptTree0 = StoreRef(CopyTree(ret));
#line 90 "../metachop/decomp3.ch"
    ReplaceTree(for_elem, 1, _ptTree0);
#line 90 "../metachop/decomp3.ch"
}
#line 90 "../metachop/decomp3.ch"
#line 90 "../metachop/decomp3.ch"
#line 90 "../metachop/decomp3.ch"
                                                                                                                 }
#line 90 "../metachop/decomp3.ch"
#line 90 "../metachop/decomp3.ch"
                                                }
#line 90 "../metachop/decomp3.ch"
#line 90 "../metachop/decomp3.ch"
                }
#line 90 "../metachop/decomp3.ch"
#line 97 "../metachop/decomp3.ch"
                {
#line 97 "../metachop/decomp3.ch"
                    PLANG _oldLanguage = pCurrentLanguage;
#line 97 "../metachop/decomp3.ch"
                    SwitchLang("metachop");
#line 97 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
                    {
#line 98 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
                        {
#line 98 "../metachop/decomp3.ch"
                            /* [ metachop::EXP_LIST
                                [ metachop::IDENT "metarep"]
                                [ metachop::EXP_SEQ
                                    [ LIST 
                                        [ META "meta0"]
                                        [ META "meta1"]
                                        [ META "meta2"]
                                    ]
                                ]
                               ]
#line 98 "../metachop/decomp3.ch"
                            */
#line 98 "../metachop/decomp3.ch"
                            TheConstructor(-2,MakeString("metarep"),metachop::IDENT,1,-2,MakeString("meta0"),META,1,
#line 98 "../metachop/decomp3.ch"
                                -2,MakeString("meta1"),META,1,-2,MakeString("meta2"),META,1,-4,LIST,2,LIST,2,LIST,2,metachop::EXP_SEQ,1,metachop::EXP_LIST,2,-3) ;
#line 98 "../metachop/decomp3.ch"
                            inter1 = PopTree ;
#line 98 "../metachop/decomp3.ch"
                            {
#line 98 "../metachop/decomp3.ch"
                                register PPTREE _inter ;
#line 98 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
                                PTREE   _Baum1 ;
#line 98 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
                                PTREE   _Baum0 ;
#line 98 "../metachop/decomp3.ch"
#line 98 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                {
#line 1 "../metachop/decomp3.ch"
                                    PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                                    _ptRes0 = MakeTree(metachop::STRING, 1);
#line 1 "../metachop/decomp3.ch"
                                    _ptTree0 = StoreRef(MakeString(Value(ret)));
#line 1 "../metachop/decomp3.ch"
                                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                                    _Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                metarep("meta0", inter1, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                {
#line 1 "../metachop/decomp3.ch"
                                    PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                                    _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                                    _ptTree0 = StoreRef(MakeString(nameVar));
#line 1 "../metachop/decomp3.ch"
                                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                                    _Baum1 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                metarep("meta1", inter1, _Baum1);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                metarep("meta2", inter1, fathertree(ret));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                            }
#line 1 "../metachop/decomp3.ch"
                        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 104 "../metachop/decomp3.ch"
                        {
#line 104 "../metachop/decomp3.ch"
                            PPTREE _ptTree0= (PPTREE) 0 ;
#line 104 "../metachop/decomp3.ch"
                            retListStat =  AddList( retListStat,inter1);
#line 104 "../metachop/decomp3.ch"
                        }
#line 104 "../metachop/decomp3.ch"
#line 104 "../metachop/decomp3.ch"
#line 105 "../metachop/decomp3.ch"
                    };
#line 105 "../metachop/decomp3.ch"
                    SwitchLangPoint(_oldLanguage);
#line 105 "../metachop/decomp3.ch"
                }
#line 105 "../metachop/decomp3.ch"
#line 105 "../metachop/decomp3.ch"
#line 105 "../metachop/decomp3.ch"
             } else 
#line 106 "../metachop/decomp3.ch"
{
#line 106 "../metachop/decomp3.ch"
#line 107 "../metachop/decomp3.ch"
    sprintf(name, "meta%d", varNumber++);
#line 107 "../metachop/decomp3.ch"
#line 108 "../metachop/decomp3.ch"
    {
#line 108 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 108 "../metachop/decomp3.ch"
        _ptRes0 = MakeTree(META, 1);
#line 108 "../metachop/decomp3.ch"
        _ptTree0 = StoreRef(MakeString(name));
#line 108 "../metachop/decomp3.ch"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 108 "../metachop/decomp3.ch"
        aux = _ptRes0;
#line 108 "../metachop/decomp3.ch"
    }
#line 108 "../metachop/decomp3.ch"
#line 108 "../metachop/decomp3.ch"
#line 112 "../metachop/decomp3.ch"
    {
#line 112 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 112 "../metachop/decomp3.ch"
        if (_ptTree0= fathertree(for_elem)) {
#line 112 "../metachop/decomp3.ch"
            int rank = ranktree(for_elem);
#line 112 "../metachop/decomp3.ch"
            ReplaceTree(_ptTree0,rank,aux);
#line 112 "../metachop/decomp3.ch"
        }
#line 112 "../metachop/decomp3.ch"
        for_elem = aux;
#line 112 "../metachop/decomp3.ch"
    }
#line 112 "../metachop/decomp3.ch"
#line 112 "../metachop/decomp3.ch"
#line 113 "../metachop/decomp3.ch"
    it.Current(for_elem);
#line 113 "../metachop/decomp3.ch"
#line 117 "../metachop/decomp3.ch"
    {
#line 117 "../metachop/decomp3.ch"
        PLANG _oldLanguage = pCurrentLanguage;
#line 117 "../metachop/decomp3.ch"
        SwitchLang("metachop");
#line 117 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
        {
#line 118 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
            {
#line 118 "../metachop/decomp3.ch"
                /* [ metachop::EXP_LIST
                    [ metachop::IDENT "metarep"]
                    [ metachop::EXP_SEQ
                        [ LIST 
                            [ META "meta0"]
                            [ META "meta1"]
                            [ META "ret"]
                        ]
                    ]
                   ]
#line 118 "../metachop/decomp3.ch"
                */
#line 118 "../metachop/decomp3.ch"
                TheConstructor(-2,MakeString("metarep"),metachop::IDENT,1,-2,MakeString("meta0"),META,1,
#line 118 "../metachop/decomp3.ch"
                    -2,MakeString("meta1"),META,1,-2,MakeString("ret"),META,1,-4,LIST,2,LIST,2,LIST,2,metachop::EXP_SEQ,1,metachop::EXP_LIST,2,-3) ;
#line 118 "../metachop/decomp3.ch"
                inter1 = PopTree ;
#line 118 "../metachop/decomp3.ch"
                {
#line 118 "../metachop/decomp3.ch"
                    register PPTREE _inter ;
#line 118 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
                    PTREE   _Baum1 ;
#line 118 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
                    PTREE   _Baum0 ;
#line 118 "../metachop/decomp3.ch"
#line 118 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                    {
#line 1 "../metachop/decomp3.ch"
                        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                        _ptRes0 = MakeTree(metachop::STRING, 1);
#line 1 "../metachop/decomp3.ch"
                        _ptTree0 = StoreRef(MakeString(name));
#line 1 "../metachop/decomp3.ch"
                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                        _Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                    metarep("meta0", inter1, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                    {
#line 1 "../metachop/decomp3.ch"
                        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                        _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                        _ptTree0 = StoreRef(MakeString(nameVar));
#line 1 "../metachop/decomp3.ch"
                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                        _Baum1 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                    metarep("meta1", inter1, _Baum1);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                    metarep("ret", inter1, ret);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                }
#line 1 "../metachop/decomp3.ch"
            }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 123 "../metachop/decomp3.ch"
            {
#line 123 "../metachop/decomp3.ch"
                PPTREE _ptTree0= (PPTREE) 0 ;
#line 123 "../metachop/decomp3.ch"
                retListStat =  AddList( retListStat,inter1);
#line 123 "../metachop/decomp3.ch"
            }
#line 123 "../metachop/decomp3.ch"
#line 123 "../metachop/decomp3.ch"
#line 124 "../metachop/decomp3.ch"
        };
#line 124 "../metachop/decomp3.ch"
        SwitchLangPoint(_oldLanguage);
#line 124 "../metachop/decomp3.ch"
    }
#line 124 "../metachop/decomp3.ch"
#line 124 "../metachop/decomp3.ch"
#line 124 "../metachop/decomp3.ch"
}
#line 124 "../metachop/decomp3.ch"
#line 126 "../metachop/decomp3.ch"
free(theValue);
#line 126 "../metachop/decomp3.ch"
#line 126 "../metachop/decomp3.ch"
                                                                               }
#line 126 "../metachop/decomp3.ch"
#line 126 "../metachop/decomp3.ch"
                                                 }
#line 126 "../metachop/decomp3.ch"
#line 126 "../metachop/decomp3.ch"
                                }
#line 126 "../metachop/decomp3.ch"
#line 133 "../metachop/decomp3.ch"
    if ( !((!retListStat)) ) 
#line 133 "../metachop/decomp3.ch"
#line 134 "../metachop/decomp3.ch"
        {
#line 134 "../metachop/decomp3.ch"
            PLANG _oldLanguage = pCurrentLanguage;
#line 134 "../metachop/decomp3.ch"
            SwitchLang("metachop");
#line 134 "../metachop/decomp3.ch"
#line 135 "../metachop/decomp3.ch"
            {
#line 135 "../metachop/decomp3.ch"
#line 135 "../metachop/decomp3.ch"
                if ( ((_inter = (PPTREE)retListStat,1) && 
#line 135 "../metachop/decomp3.ch"
                        (NumberTree(_inter) == LIST) &&
#line 135 "../metachop/decomp3.ch"
                        1) ) {
#line 135 "../metachop/decomp3.ch"
#line 136 "../metachop/decomp3.ch"
                                {
#line 136 "../metachop/decomp3.ch"
                                    PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 136 "../metachop/decomp3.ch"
                                    _ptRes0 = MakeTree(metachop::COMPOUND, 1);
#line 136 "../metachop/decomp3.ch"
                                    ReplaceTree(_ptRes0, 1, retListStat);
#line 136 "../metachop/decomp3.ch"
                                    retListStat = _ptRes0;
#line 136 "../metachop/decomp3.ch"
                                }
#line 136 "../metachop/decomp3.ch"
#line 136 "../metachop/decomp3.ch"
#line 136 "../metachop/decomp3.ch"
                             }
#line 136 "../metachop/decomp3.ch"
#line 138 "../metachop/decomp3.ch"
                GenTree(retListStat);
#line 138 "../metachop/decomp3.ch"
#line 139 "../metachop/decomp3.ch"
                GCManager(retListStat);
#line 139 "../metachop/decomp3.ch"
#line 140 "../metachop/decomp3.ch"
            };
#line 140 "../metachop/decomp3.ch"
            SwitchLangPoint(_oldLanguage);
#line 140 "../metachop/decomp3.ch"
        }
#line 140 "../metachop/decomp3.ch"
#line 140 "../metachop/decomp3.ch"
#line 141 "../metachop/decomp3.ch"
    return retListStat ;
#line 141 "../metachop/decomp3.ch"
#line 142 "../metachop/decomp3.ch"
}
#line 142 "../metachop/decomp3.ch"

#line 146 "../metachop/decomp3.ch"
#line 146 "../metachop/decomp3.ch"
void englob ( PTREE tree )
#line 146 "../metachop/decomp3.ch"
{
#line 146 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 146 "../metachop/decomp3.ch"
#line 146 "../metachop/decomp3.ch"
#line 149 "../metachop/decomp3.ch"
    PTREE   father, temporary ;
#line 149 "../metachop/decomp3.ch"
#line 149 "../metachop/decomp3.ch"
#line 150 "../metachop/decomp3.ch"
    int rank ;
#line 150 "../metachop/decomp3.ch"
#line 152 "../metachop/decomp3.ch"
    (father=FatherTree(tree));
#line 152 "../metachop/decomp3.ch"
#line 152 "../metachop/decomp3.ch"
#line 153 "../metachop/decomp3.ch"
    if ( !(((_inter = (PPTREE)father,1) && 
#line 153 "../metachop/decomp3.ch"
                (NumberTree(_inter) == LIST) &&
#line 153 "../metachop/decomp3.ch"
                1)) ) {
#line 153 "../metachop/decomp3.ch"
#line 154 "../metachop/decomp3.ch"
                        rank = ranktree(tree);
#line 154 "../metachop/decomp3.ch"
#line 155 "../metachop/decomp3.ch"
                        {
#line 155 "../metachop/decomp3.ch"
                            PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 155 "../metachop/decomp3.ch"
                            _ptRes0 = MakeTree(metachop::COMPOUND, 1);
#line 155 "../metachop/decomp3.ch"
                            _ptTree0 = tree;
#line 155 "../metachop/decomp3.ch"
                            {
#line 155 "../metachop/decomp3.ch"
                                PPTREE _ptTree1= (PPTREE) 0 ;
#line 155 "../metachop/decomp3.ch"
                                _ptTree1 = (PPTREE) 0;
#line 155 "../metachop/decomp3.ch"
                                _ptTree0 = AddList( _ptTree0,_ptTree1);
#line 155 "../metachop/decomp3.ch"
                            }
#line 155 "../metachop/decomp3.ch"
                            ReplaceTree(_ptRes0, 1, _ptTree0);
#line 155 "../metachop/decomp3.ch"
                            temporary = _ptRes0;
#line 155 "../metachop/decomp3.ch"
                        }
#line 155 "../metachop/decomp3.ch"
#line 155 "../metachop/decomp3.ch"
#line 156 "../metachop/decomp3.ch"
                        replacetree(father, rank, temporary);
#line 156 "../metachop/decomp3.ch"
#line 156 "../metachop/decomp3.ch"
                      }
#line 156 "../metachop/decomp3.ch"
#line 158 "../metachop/decomp3.ch"
}
#line 158 "../metachop/decomp3.ch"

#line 165 "../metachop/decomp3.ch"
#line 165 "../metachop/decomp3.ch"
void GenTree ( PTREE tree )
#line 165 "../metachop/decomp3.ch"
{
#line 165 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 165 "../metachop/decomp3.ch"
#line 165 "../metachop/decomp3.ch"
#line 168 "../metachop/decomp3.ch"
    PTREE   ptTree, temporary, list, theList ;
#line 168 "../metachop/decomp3.ch"
#line 168 "../metachop/decomp3.ch"
#line 169 "../metachop/decomp3.ch"
    PTREE   compoundTree ;
#line 169 "../metachop/decomp3.ch"
#line 169 "../metachop/decomp3.ch"
#line 170 "../metachop/decomp3.ch"
    char    varName [20];
#line 170 "../metachop/decomp3.ch"
#line 171 "../metachop/decomp3.ch"
    char    str [5];
#line 171 "../metachop/decomp3.ch"
#line 172 "../metachop/decomp3.ch"
    int inList ;
#line 172 "../metachop/decomp3.ch"
#line 178 "../metachop/decomp3.ch"
    int massageIt ;
#line 178 "../metachop/decomp3.ch"
#line 181 "../metachop/decomp3.ch"
    int varNumber = 0 ;
#line 181 "../metachop/decomp3.ch"
#line 182 "../metachop/decomp3.ch"
    ItPtree it (tree) ;
#line 182 "../metachop/decomp3.ch"
#line 183 "../metachop/decomp3.ch"
    PPTREE  _for_elem ;
#line 183 "../metachop/decomp3.ch"
#line 184 "../metachop/decomp3.ch"
    PTREE   elem ;
#line 184 "../metachop/decomp3.ch"
#line 184 "../metachop/decomp3.ch"
#line 186 "../metachop/decomp3.ch"
    while ( for_elem = it++ ) {
#line 186 "../metachop/decomp3.ch"
#line 187 "../metachop/decomp3.ch"
                                    (elem=for_elem);
#line 187 "../metachop/decomp3.ch"
#line 187 "../metachop/decomp3.ch"
#line 188 "../metachop/decomp3.ch"
                                    switch ( NumberTree(elem) ) {
#line 188 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                        case metachop::PARSE : 
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            (temporary=SonTree(elem, 1));
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                        _Case0 : 
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            ;
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            goto _Case1 ;
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                        case metachop::NODE_TREE : 
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                        _Case1 : 
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            ;
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            goto _Case2 ;
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                        case metachop::NODE_LIST : 
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                        _Case2 : 
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            ;
#line 189 "../metachop/decomp3.ch"
#line 189 "../metachop/decomp3.ch"
                                            goto _Case3 ;
#line 189 "../metachop/decomp3.ch"
#line 193 "../metachop/decomp3.ch"
                                        case metachop::NIL : 
#line 193 "../metachop/decomp3.ch"
#line 193 "../metachop/decomp3.ch"
                                        _Case3 : 
#line 193 "../metachop/decomp3.ch"
#line 193 "../metachop/decomp3.ch"
                                            ;
#line 193 "../metachop/decomp3.ch"
#line 193 "../metachop/decomp3.ch"
                                            (ptTree=for_elem);
#line 193 "../metachop/decomp3.ch"
#line 193 "../metachop/decomp3.ch"
#line 194 "../metachop/decomp3.ch"
                                            massageIt = 0 ;
#line 194 "../metachop/decomp3.ch"
#line 195 "../metachop/decomp3.ch"
                                            inList = 0 ;
#line 195 "../metachop/decomp3.ch"
#line 196 "../metachop/decomp3.ch"
                                            while ( !(((_inter = (PPTREE)ptTree,1) && 
#line 196 "../metachop/decomp3.ch"
                                                            (NumberTree(_inter) == metachop::COMPOUND) &&
#line 196 "../metachop/decomp3.ch"
                                                            1)) ) {
#line 196 "../metachop/decomp3.ch"
#line 197 "../metachop/decomp3.ch"
                                                                    if ( !((ptTree=FatherTree(ptTree))) ) {
#line 197 "../metachop/decomp3.ch"
#line 200 "../metachop/decomp3.ch"
massageIt = 0 ;
#line 200 "../metachop/decomp3.ch"
#line 201 "../metachop/decomp3.ch"
break ;
#line 201 "../metachop/decomp3.ch"
#line 201 "../metachop/decomp3.ch"
                                                                                                              }
#line 201 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
                                                                    switch ( NumberTree(ptTree) ) {
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
                                                                        case metachop::EXP_SEQ : 
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
                                                                        _Case6 : 
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
;
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
goto _Case7 ;
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
                                                                        case metachop::FOREACH : 
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
                                                                        _Case7 : 
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
;
#line 203 "../metachop/decomp3.ch"
#line 203 "../metachop/decomp3.ch"
goto _Case8 ;
#line 203 "../metachop/decomp3.ch"
#line 207 "../metachop/decomp3.ch"
                                                                        case metachop::RETURN : 
#line 207 "../metachop/decomp3.ch"
#line 207 "../metachop/decomp3.ch"
                                                                        _Case8 : 
#line 207 "../metachop/decomp3.ch"
#line 207 "../metachop/decomp3.ch"
;
#line 207 "../metachop/decomp3.ch"
#line 207 "../metachop/decomp3.ch"
massageIt = 1 ;
#line 207 "../metachop/decomp3.ch"
#line 208 "../metachop/decomp3.ch"
inList = 0 ;
#line 208 "../metachop/decomp3.ch"
#line 209 "../metachop/decomp3.ch"
break ;
#line 209 "../metachop/decomp3.ch"
#line 215 "../metachop/decomp3.ch"
                                                                        case LIST : 
#line 215 "../metachop/decomp3.ch"
#line 215 "../metachop/decomp3.ch"
                                                                        _Case9 : 
#line 215 "../metachop/decomp3.ch"
#line 215 "../metachop/decomp3.ch"
;
#line 215 "../metachop/decomp3.ch"
#line 215 "../metachop/decomp3.ch"
if ( !inList ) {
#line 215 "../metachop/decomp3.ch"
#line 216 "../metachop/decomp3.ch"
                    inList = 1 ;
#line 216 "../metachop/decomp3.ch"
#line 217 "../metachop/decomp3.ch"
                    (theList=ptTree);
#line 217 "../metachop/decomp3.ch"
#line 217 "../metachop/decomp3.ch"
#line 217 "../metachop/decomp3.ch"
                 }
#line 217 "../metachop/decomp3.ch"
#line 219 "../metachop/decomp3.ch"
break ;
#line 219 "../metachop/decomp3.ch"
#line 219 "../metachop/decomp3.ch"
                                                                        case metachop::EQU : 
#line 219 "../metachop/decomp3.ch"
#line 219 "../metachop/decomp3.ch"
                                                                        _Case10 : 
#line 219 "../metachop/decomp3.ch"
#line 219 "../metachop/decomp3.ch"
;
#line 219 "../metachop/decomp3.ch"
#line 219 "../metachop/decomp3.ch"
goto _Case11 ;
#line 219 "../metachop/decomp3.ch"
#line 221 "../metachop/decomp3.ch"
                                                                        case metachop::NEQU : 
#line 221 "../metachop/decomp3.ch"
#line 221 "../metachop/decomp3.ch"
                                                                        _Case11 : 
#line 221 "../metachop/decomp3.ch"
#line 221 "../metachop/decomp3.ch"
;
#line 221 "../metachop/decomp3.ch"
#line 221 "../metachop/decomp3.ch"
it.SkipSon(1);
#line 221 "../metachop/decomp3.ch"
#line 221 "../metachop/decomp3.ch"
goto for_continue ;
#line 221 "../metachop/decomp3.ch"
#line 221 "../metachop/decomp3.ch"
goto _Case12 ;
#line 221 "../metachop/decomp3.ch"
#line 223 "../metachop/decomp3.ch"
                                                                        default : 
#line 223 "../metachop/decomp3.ch"
#line 223 "../metachop/decomp3.ch"
                                                                        _Case12 : 
#line 223 "../metachop/decomp3.ch"
#line 223 "../metachop/decomp3.ch"
;
#line 223 "../metachop/decomp3.ch"
#line 223 "../metachop/decomp3.ch"
inList = 0 ;
#line 223 "../metachop/decomp3.ch"
#line 224 "../metachop/decomp3.ch"
break ;
#line 224 "../metachop/decomp3.ch"
                                                                    }
#line 224 "../metachop/decomp3.ch"
#line 224 "../metachop/decomp3.ch"
#line 224 "../metachop/decomp3.ch"
                                                                  }
#line 224 "../metachop/decomp3.ch"
#line 229 "../metachop/decomp3.ch"
                                            (compoundTree=ptTree);
#line 229 "../metachop/decomp3.ch"
#line 229 "../metachop/decomp3.ch"
#line 230 "../metachop/decomp3.ch"
                                            if ( massageIt ) {
#line 230 "../metachop/decomp3.ch"
#line 231 "../metachop/decomp3.ch"
                                                                PTREE   keep ;
#line 231 "../metachop/decomp3.ch"
#line 231 "../metachop/decomp3.ch"
#line 234 "../metachop/decomp3.ch"
                                                                ((_inter = (PPTREE)compoundTree,1) && 
#line 234 "../metachop/decomp3.ch"
                                                                    ((list=SonTree(_inter,1)),1) &&
#line 234 "../metachop/decomp3.ch"
                                                                    1);
#line 234 "../metachop/decomp3.ch"
                                                                ;
#line 234 "../metachop/decomp3.ch"
#line 235 "../metachop/decomp3.ch"
                                                                sprintf(varName, "_Baum%d", varNumber++);
#line 235 "../metachop/decomp3.ch"
#line 236 "../metachop/decomp3.ch"
                                                                {
#line 236 "../metachop/decomp3.ch"
                                                                    /* [ metachop::DECLARATION
                                                                        [ NIL ] 
                                                                        [ metachop::TIDENT [ metachop::IDENT "PTREE"]]
                                                                        [ META "meta0"]
                                                                       ]
#line 236 "../metachop/decomp3.ch"
                                                                    */
#line 236 "../metachop/decomp3.ch"
                                                                    TheConstructor(-4,-2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,-2,MakeString("meta0"),META,1,metachop::DECLARATION,3,-3) ;
#line 236 "../metachop/decomp3.ch"
                                                                    temporary = PopTree ;
#line 236 "../metachop/decomp3.ch"
                                                                    {
#line 236 "../metachop/decomp3.ch"
                                                                        register PPTREE _inter ;
#line 236 "../metachop/decomp3.ch"
#line 236 "../metachop/decomp3.ch"
#line 236 "../metachop/decomp3.ch"
                                                                        PTREE   _Baum0 ;
#line 236 "../metachop/decomp3.ch"
#line 236 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                        {
#line 1 "../metachop/decomp3.ch"
PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
_ptRes0 = MakeTree(LIST, 2);
#line 1 "../metachop/decomp3.ch"
{
#line 1 "../metachop/decomp3.ch"
    PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
    _ptRes1 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
    _ptTree1 = StoreRef(MakeString(varName));
#line 1 "../metachop/decomp3.ch"
    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 1 "../metachop/decomp3.ch"
    _ptTree0 = _ptRes1;
#line 1 "../metachop/decomp3.ch"
}
#line 1 "../metachop/decomp3.ch"
ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
_Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                                                        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                        metarep("meta0", temporary, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                    }
#line 1 "../metachop/decomp3.ch"
                                                                }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 240 "../metachop/decomp3.ch"
                                                                {
#line 240 "../metachop/decomp3.ch"
                                                                    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 240 "../metachop/decomp3.ch"
                                                                    _ptTree0 = temporary;
#line 240 "../metachop/decomp3.ch"
                                                                    {
#line 240 "../metachop/decomp3.ch"
                                                                        PPTREE _ptTree1= (PPTREE) 0 ;
#line 240 "../metachop/decomp3.ch"
                                                                        _ptTree0 = AddList( _ptTree0,list);
#line 240 "../metachop/decomp3.ch"
                                                                    }
#line 240 "../metachop/decomp3.ch"
                                                                    ReplaceTree(compoundTree, 1, _ptTree0);
#line 240 "../metachop/decomp3.ch"
                                                                }
#line 240 "../metachop/decomp3.ch"
#line 240 "../metachop/decomp3.ch"
#line 244 "../metachop/decomp3.ch"
                                                                {
#line 244 "../metachop/decomp3.ch"
                                                                    PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 244 "../metachop/decomp3.ch"
                                                                    _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 244 "../metachop/decomp3.ch"
                                                                    _ptTree0 = StoreRef(MakeString(varName));
#line 244 "../metachop/decomp3.ch"
                                                                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 244 "../metachop/decomp3.ch"
                                                                    ptTree = _ptRes0;
#line 244 "../metachop/decomp3.ch"
                                                                }
#line 244 "../metachop/decomp3.ch"
#line 244 "../metachop/decomp3.ch"
#line 245 "../metachop/decomp3.ch"
                                                                (keep=for_elem);
#line 245 "../metachop/decomp3.ch"
#line 245 "../metachop/decomp3.ch"
#line 246 "../metachop/decomp3.ch"
                                                                {
#line 246 "../metachop/decomp3.ch"
                                                                    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 246 "../metachop/decomp3.ch"
                                                                    if (_ptTree0= fathertree(for_elem)) {
#line 246 "../metachop/decomp3.ch"
                                                                        int rank = ranktree(for_elem);
#line 246 "../metachop/decomp3.ch"
                                                                        ReplaceTree(_ptTree0,rank,ptTree);
#line 246 "../metachop/decomp3.ch"
                                                                    }
#line 246 "../metachop/decomp3.ch"
                                                                }
#line 246 "../metachop/decomp3.ch"
#line 246 "../metachop/decomp3.ch"
#line 250 "../metachop/decomp3.ch"
                                                                {
#line 250 "../metachop/decomp3.ch"
                                                                    /* [ metachop::AFF
                                                                        [ META "meta0"]
                                                                        [ META "for_elem"]
                                                                       ]
#line 250 "../metachop/decomp3.ch"
                                                                    */
#line 250 "../metachop/decomp3.ch"
                                                                    TheConstructor(-2,MakeString("meta0"),META,1,-2,MakeString("for_elem"),META,1,metachop::AFF,2,-3) ;
#line 250 "../metachop/decomp3.ch"
                                                                    temporary = PopTree ;
#line 250 "../metachop/decomp3.ch"
                                                                    {
#line 250 "../metachop/decomp3.ch"
                                                                        register PPTREE _inter ;
#line 250 "../metachop/decomp3.ch"
#line 250 "../metachop/decomp3.ch"
#line 250 "../metachop/decomp3.ch"
                                                                        PTREE   _Baum0 ;
#line 250 "../metachop/decomp3.ch"
#line 250 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                        {
#line 1 "../metachop/decomp3.ch"
PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
_ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
_ptTree0 = StoreRef(MakeString(varName));
#line 1 "../metachop/decomp3.ch"
ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
_Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                                                        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                        metarep("meta0", temporary, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                        metarep("for_elem", temporary, for_elem);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                    }
#line 1 "../metachop/decomp3.ch"
                                                                }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 254 "../metachop/decomp3.ch"
                                                                (theList=FatherTree(theList));
#line 254 "../metachop/decomp3.ch"
#line 254 "../metachop/decomp3.ch"
#line 259 "../metachop/decomp3.ch"
                                                                ((_inter = (PPTREE)theList,1) && 
#line 259 "../metachop/decomp3.ch"
                                                                    ((ptTree=SonTree(_inter,2)),1) &&
#line 259 "../metachop/decomp3.ch"
                                                                    1);
#line 259 "../metachop/decomp3.ch"
                                                                ;
#line 259 "../metachop/decomp3.ch"
#line 260 "../metachop/decomp3.ch"
                                                                {
#line 260 "../metachop/decomp3.ch"
                                                                    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 260 "../metachop/decomp3.ch"
                                                                    _ptTree0 = temporary;
#line 260 "../metachop/decomp3.ch"
                                                                    {
#line 260 "../metachop/decomp3.ch"
                                                                        PPTREE _ptTree1= (PPTREE) 0 ;
#line 260 "../metachop/decomp3.ch"
                                                                        _ptTree0 = AddList( _ptTree0,ptTree);
#line 260 "../metachop/decomp3.ch"
                                                                    }
#line 260 "../metachop/decomp3.ch"
                                                                    ReplaceTree(theList, 2, _ptTree0);
#line 260 "../metachop/decomp3.ch"
                                                                }
#line 260 "../metachop/decomp3.ch"
#line 260 "../metachop/decomp3.ch"
#line 261 "../metachop/decomp3.ch"
                                                                it.Current(temporary);
#line 261 "../metachop/decomp3.ch"
#line 261 "../metachop/decomp3.ch"
                                                              }
#line 261 "../metachop/decomp3.ch"
#line 263 "../metachop/decomp3.ch"
                                            it.SkipSon(1);
#line 263 "../metachop/decomp3.ch"
#line 264 "../metachop/decomp3.ch"
                                            continue ;
#line 264 "../metachop/decomp3.ch"
#line 264 "../metachop/decomp3.ch"
                                            goto _Case4 ;
#line 264 "../metachop/decomp3.ch"
#line 265 "../metachop/decomp3.ch"
                                        case metachop::FOREACH : 
#line 265 "../metachop/decomp3.ch"
#line 265 "../metachop/decomp3.ch"
                                            (temporary=SonTree(elem, 1));
#line 265 "../metachop/decomp3.ch"
#line 265 "../metachop/decomp3.ch"
#line 265 "../metachop/decomp3.ch"
                                        _Case4 : 
#line 265 "../metachop/decomp3.ch"
#line 265 "../metachop/decomp3.ch"
                                            ;
#line 265 "../metachop/decomp3.ch"
#line 269 "../metachop/decomp3.ch"
                                            if ( ((_inter = (PPTREE)temporary,1) && 
#line 269 "../metachop/decomp3.ch"
                                                    (NumberTree(_inter) == metachop::NIL) &&
#line 269 "../metachop/decomp3.ch"
                                                    1) ) 
#line 269 "../metachop/decomp3.ch"
#line 270 "../metachop/decomp3.ch"
                                                it.Current(temporary);
#line 270 "../metachop/decomp3.ch"
#line 271 "../metachop/decomp3.ch"
                                            break ;
#line 271 "../metachop/decomp3.ch"
#line 272 "../metachop/decomp3.ch"
                                        default : 
#line 272 "../metachop/decomp3.ch"
#line 272 "../metachop/decomp3.ch"
                                        _Case5 : 
#line 272 "../metachop/decomp3.ch"
#line 272 "../metachop/decomp3.ch"
                                            ;
#line 272 "../metachop/decomp3.ch"
#line 272 "../metachop/decomp3.ch"
                                            break ;
#line 272 "../metachop/decomp3.ch"
                                    }
#line 272 "../metachop/decomp3.ch"
#line 272 "../metachop/decomp3.ch"
#line 274 "../metachop/decomp3.ch"
                                for_continue : 
#line 274 "../metachop/decomp3.ch"
#line 274 "../metachop/decomp3.ch"
                                    ;
#line 274 "../metachop/decomp3.ch"
#line 274 "../metachop/decomp3.ch"
                                }
#line 274 "../metachop/decomp3.ch"
#line 276 "../metachop/decomp3.ch"
}
#line 276 "../metachop/decomp3.ch"

#line 280 "../metachop/decomp3.ch"
#line 280 "../metachop/decomp3.ch"
PTREE CreateGCClass ( char *name )
#line 280 "../metachop/decomp3.ch"
{
#line 280 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 280 "../metachop/decomp3.ch"
#line 280 "../metachop/decomp3.ch"
#line 280 "../metachop/decomp3.ch"
    PTREE   _Baum0 ;
#line 280 "../metachop/decomp3.ch"
#line 280 "../metachop/decomp3.ch"
#line 283 "../metachop/decomp3.ch"
    char    *nName = (char *)malloc(strlen(name) + 3);
#line 283 "../metachop/decomp3.ch"
#line 284 "../metachop/decomp3.ch"
    PTREE   pattern ;
#line 284 "../metachop/decomp3.ch"
#line 284 "../metachop/decomp3.ch"
#line 287 "../metachop/decomp3.ch"
    strcpy(nName, "__");
#line 287 "../metachop/decomp3.ch"
#line 288 "../metachop/decomp3.ch"
    strcat(nName, name);
#line 288 "../metachop/decomp3.ch"
#line 292 "../metachop/decomp3.ch"
    {
#line 292 "../metachop/decomp3.ch"
        /* [ metachop::DECLARATION
            [ NIL ] 
            [ metachop::TIDENT [ metachop::IDENT "CPTREE"]]
            [ LIST 
                [ metachop::TYP_AFF_CALL
                    [ META "meta0"]
                    [ metachop::ADDR [ META "meta1"]]
                ]
            ]
           ]
#line 292 "../metachop/decomp3.ch"
        */
#line 292 "../metachop/decomp3.ch"
        TheConstructor(-4,-2,MakeString("CPTREE"),metachop::IDENT,1,metachop::TIDENT,1,-2,MakeString("meta0"),META,1,
#line 292 "../metachop/decomp3.ch"
            -2,MakeString("meta1"),META,1,metachop::ADDR,1,metachop::TYP_AFF_CALL,2,-4,LIST,2,metachop::DECLARATION,3,-3) ;
#line 292 "../metachop/decomp3.ch"
        pattern = PopTree ;
#line 292 "../metachop/decomp3.ch"
        {
#line 292 "../metachop/decomp3.ch"
            register PPTREE _inter ;
#line 292 "../metachop/decomp3.ch"
#line 292 "../metachop/decomp3.ch"
#line 292 "../metachop/decomp3.ch"
            PTREE   _Baum1 ;
#line 292 "../metachop/decomp3.ch"
#line 292 "../metachop/decomp3.ch"
#line 292 "../metachop/decomp3.ch"
            PTREE   _Baum0 ;
#line 292 "../metachop/decomp3.ch"
#line 292 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            {
#line 1 "../metachop/decomp3.ch"
                PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                _ptTree0 = StoreRef(MakeString(nName));
#line 1 "../metachop/decomp3.ch"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                _Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
            }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            metarep("meta0", pattern, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            {
#line 1 "../metachop/decomp3.ch"
                PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                _ptTree0 = StoreRef(MakeString(nName + 2));
#line 1 "../metachop/decomp3.ch"
                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                _Baum1 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
            }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            metarep("meta1", pattern, _Baum1);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
        }
#line 1 "../metachop/decomp3.ch"
    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 298 "../metachop/decomp3.ch"
    {
#line 298 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 298 "../metachop/decomp3.ch"
        _ptRes0 = MakeTree(metachop::TYP_AFF_CALL, 2);
#line 298 "../metachop/decomp3.ch"
        {
#line 298 "../metachop/decomp3.ch"
            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 298 "../metachop/decomp3.ch"
            _ptRes1 = MakeTree(META, 1);
#line 298 "../metachop/decomp3.ch"
            _ptTree1 = MakeString("x") ;
#line 298 "../metachop/decomp3.ch"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 298 "../metachop/decomp3.ch"
            _ptTree0 = _ptRes1;
#line 298 "../metachop/decomp3.ch"
        }
#line 298 "../metachop/decomp3.ch"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 298 "../metachop/decomp3.ch"
        {
#line 298 "../metachop/decomp3.ch"
            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 298 "../metachop/decomp3.ch"
            _ptRes1 = MakeTree(META, 1);
#line 298 "../metachop/decomp3.ch"
            _ptTree1 = MakeString("y") ;
#line 298 "../metachop/decomp3.ch"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 298 "../metachop/decomp3.ch"
            _ptTree0 = _ptRes1;
#line 298 "../metachop/decomp3.ch"
        }
#line 298 "../metachop/decomp3.ch"
        ReplaceTree(_ptRes0, 2, _ptTree0);
#line 298 "../metachop/decomp3.ch"
        _Baum0 = _ptRes0;
#line 298 "../metachop/decomp3.ch"
    }
#line 298 "../metachop/decomp3.ch"
#line 298 "../metachop/decomp3.ch"
#line 298 "../metachop/decomp3.ch"
    (pattern=find(_Baum0, pattern));
#line 298 "../metachop/decomp3.ch"
#line 298 "../metachop/decomp3.ch"
#line 301 "../metachop/decomp3.ch"
    free(nName);
#line 301 "../metachop/decomp3.ch"
#line 302 "../metachop/decomp3.ch"
    return pattern ;
#line 302 "../metachop/decomp3.ch"
#line 303 "../metachop/decomp3.ch"
}
#line 303 "../metachop/decomp3.ch"

#line 309 "../metachop/decomp3.ch"
#line 309 "../metachop/decomp3.ch"
PTREE FullCreateGCClass ( PTREE list )
#line 309 "../metachop/decomp3.ch"
{
#line 309 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 309 "../metachop/decomp3.ch"
#line 309 "../metachop/decomp3.ch"
#line 309 "../metachop/decomp3.ch"
    PTREE   _Baum0 ;
#line 309 "../metachop/decomp3.ch"
#line 309 "../metachop/decomp3.ch"
#line 312 "../metachop/decomp3.ch"
    PTREE   pattern, temporary, father ;
#line 312 "../metachop/decomp3.ch"
#line 312 "../metachop/decomp3.ch"
#line 313 "../metachop/decomp3.ch"
    int rank ;
#line 313 "../metachop/decomp3.ch"
#line 315 "../metachop/decomp3.ch"
    {
#line 315 "../metachop/decomp3.ch"
        /* [ metachop::DECLARATION
            [ NIL ] 
            [ metachop::TIDENT [ metachop::IDENT "CPTREE"]]
            [ LIST 
                [ metachop::IDENT "a1"]
                [ metachop::IDENT "a2"]
            ]
           ]
#line 315 "../metachop/decomp3.ch"
        */
#line 315 "../metachop/decomp3.ch"
        TheConstructor(-4,-2,MakeString("CPTREE"),metachop::IDENT,1,metachop::TIDENT,1,-2,MakeString("a1"),metachop::IDENT,1,
#line 315 "../metachop/decomp3.ch"
            -2,MakeString("a2"),metachop::IDENT,1,-4,LIST,2,LIST,2,metachop::DECLARATION,3,-3) ;
#line 315 "../metachop/decomp3.ch"
        pattern = PopTree ;
#line 315 "../metachop/decomp3.ch"
        }
#line 315 "../metachop/decomp3.ch"
#line 315 "../metachop/decomp3.ch"
#line 316 "../metachop/decomp3.ch"
    {
#line 316 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 316 "../metachop/decomp3.ch"
        _ptRes0 = MakeTree(LIST, 2);
#line 316 "../metachop/decomp3.ch"
        {
#line 316 "../metachop/decomp3.ch"
            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 316 "../metachop/decomp3.ch"
            _ptRes1 = MakeTree(META, 1);
#line 316 "../metachop/decomp3.ch"
            _ptTree1 = MakeString("x") ;
#line 316 "../metachop/decomp3.ch"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 316 "../metachop/decomp3.ch"
            _ptTree0 = _ptRes1;
#line 316 "../metachop/decomp3.ch"
        }
#line 316 "../metachop/decomp3.ch"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 316 "../metachop/decomp3.ch"
        {
#line 316 "../metachop/decomp3.ch"
            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 316 "../metachop/decomp3.ch"
            _ptRes1 = MakeTree(META, 1);
#line 316 "../metachop/decomp3.ch"
            _ptTree1 = MakeString("y") ;
#line 316 "../metachop/decomp3.ch"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 316 "../metachop/decomp3.ch"
            _ptTree0 = _ptRes1;
#line 316 "../metachop/decomp3.ch"
        }
#line 316 "../metachop/decomp3.ch"
        ReplaceTree(_ptRes0, 2, _ptTree0);
#line 316 "../metachop/decomp3.ch"
        _Baum0 = _ptRes0;
#line 316 "../metachop/decomp3.ch"
    }
#line 316 "../metachop/decomp3.ch"
#line 316 "../metachop/decomp3.ch"
#line 316 "../metachop/decomp3.ch"
    (temporary=find(_Baum0, pattern));
#line 316 "../metachop/decomp3.ch"
#line 316 "../metachop/decomp3.ch"
#line 317 "../metachop/decomp3.ch"
    {
#line 317 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 317 "../metachop/decomp3.ch"
        if (_ptTree0= fathertree(temporary)) {
#line 317 "../metachop/decomp3.ch"
            int rank = ranktree(temporary);
#line 317 "../metachop/decomp3.ch"
            ReplaceTree(_ptTree0,rank,list);
#line 317 "../metachop/decomp3.ch"
        }
#line 317 "../metachop/decomp3.ch"
    }
#line 317 "../metachop/decomp3.ch"
#line 317 "../metachop/decomp3.ch"
#line 318 "../metachop/decomp3.ch"
    return pattern ;
#line 318 "../metachop/decomp3.ch"
#line 319 "../metachop/decomp3.ch"
}
#line 319 "../metachop/decomp3.ch"

#line 323 "../metachop/decomp3.ch"
#line 323 "../metachop/decomp3.ch"
void GCManager ( PTREE tree )
#line 323 "../metachop/decomp3.ch"
{
#line 323 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 323 "../metachop/decomp3.ch"
#line 323 "../metachop/decomp3.ch"
#line 323 "../metachop/decomp3.ch"
    PTREE   _Baum0 ;
#line 323 "../metachop/decomp3.ch"
#line 323 "../metachop/decomp3.ch"
#line 326 "../metachop/decomp3.ch"
    PTREE   list, pt_list, list_decl, son, son_decl, pattern, temporary, list_init, listClassInit ;
#line 326 "../metachop/decomp3.ch"
#line 326 "../metachop/decomp3.ch"
#line 328 "../metachop/decomp3.ch"
    int somethingDone = 0 ;
#line 328 "../metachop/decomp3.ch"
#line 329 "../metachop/decomp3.ch"
    {
#line 329 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 329 "../metachop/decomp3.ch"
        _ptRes0 = MakeTree(metachop::COMPOUND, 1);
#line 329 "../metachop/decomp3.ch"
        {
#line 329 "../metachop/decomp3.ch"
            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 329 "../metachop/decomp3.ch"
            _ptRes1 = MakeTree(META, 1);
#line 329 "../metachop/decomp3.ch"
            _ptTree1 = MakeString("B") ;
#line 329 "../metachop/decomp3.ch"
            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 329 "../metachop/decomp3.ch"
            _ptTree0 = _ptRes1;
#line 329 "../metachop/decomp3.ch"
        }
#line 329 "../metachop/decomp3.ch"
        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 329 "../metachop/decomp3.ch"
        _Baum0 = _ptRes0;
#line 329 "../metachop/decomp3.ch"
    }
#line 329 "../metachop/decomp3.ch"
#line 329 "../metachop/decomp3.ch"
#line 329 "../metachop/decomp3.ch"
    ItPtree it(tree, _Baum0);
#line 329 "../metachop/decomp3.ch"
#line 330 "../metachop/decomp3.ch"
    PPTREE  _for_elem ;
#line 330 "../metachop/decomp3.ch"
#line 332 "../metachop/decomp3.ch"
    while ( for_elem = it++ ) {
#line 332 "../metachop/decomp3.ch"
#line 333 "../metachop/decomp3.ch"
                                    ((_inter = (PPTREE)for_elem,1) && 
#line 333 "../metachop/decomp3.ch"
                                        ((list=SonTree(_inter,1)),1) &&
#line 333 "../metachop/decomp3.ch"
                                        1);
#line 333 "../metachop/decomp3.ch"
                                    ;
#line 333 "../metachop/decomp3.ch"
#line 334 "../metachop/decomp3.ch"
                                    (pt_list=list);
#line 334 "../metachop/decomp3.ch"
#line 334 "../metachop/decomp3.ch"
#line 335 "../metachop/decomp3.ch"
                                    listClassInit = (PPTREE) 0 ;
#line 335 "../metachop/decomp3.ch"
#line 335 "../metachop/decomp3.ch"
#line 336 "../metachop/decomp3.ch"
                                    list_init = (PPTREE) 0 ;
#line 336 "../metachop/decomp3.ch"
#line 336 "../metachop/decomp3.ch"
#line 337 "../metachop/decomp3.ch"
                                    while ( !((!pt_list)) ) {
#line 337 "../metachop/decomp3.ch"
#line 338 "../metachop/decomp3.ch"
                                                                (son=(pt_list?pt_list.Nextl():(PPTREE)0));
#line 338 "../metachop/decomp3.ch"
#line 338 "../metachop/decomp3.ch"
#line 342 "../metachop/decomp3.ch"
                                                                if ( !(((_inter = (PPTREE)son,1) && 
#line 342 "../metachop/decomp3.ch"
(NumberTree(_inter) == metachop::DECLARATION) &&
#line 342 "../metachop/decomp3.ch"
1)                                                                   ) ) {
#line 342 "../metachop/decomp3.ch"
#line 345 "../metachop/decomp3.ch"
if ( listClassInit ) {
#line 345 "../metachop/decomp3.ch"
#line 346 "../metachop/decomp3.ch"
                        {
#line 346 "../metachop/decomp3.ch"
                            PPTREE _ptTree0= (PPTREE) 0 ;
#line 346 "../metachop/decomp3.ch"
                            _ptTree0 = StoreRef(FullCreateGCClass(listClassInit));
#line 346 "../metachop/decomp3.ch"
                            list_init =  AddList( list_init,_ptTree0);
#line 346 "../metachop/decomp3.ch"
                        }
#line 346 "../metachop/decomp3.ch"
#line 346 "../metachop/decomp3.ch"
#line 346 "../metachop/decomp3.ch"
                      }
#line 346 "../metachop/decomp3.ch"
#line 348 "../metachop/decomp3.ch"
if ( list_init ) {
#line 348 "../metachop/decomp3.ch"
#line 352 "../metachop/decomp3.ch"
                    (temporary=FatherTree(FatherTree(son)));
#line 352 "../metachop/decomp3.ch"
#line 352 "../metachop/decomp3.ch"
#line 355 "../metachop/decomp3.ch"
                    ((_inter = (PPTREE)temporary,1) && 
#line 355 "../metachop/decomp3.ch"
                        ((list=SonTree(_inter,2)),1) &&
#line 355 "../metachop/decomp3.ch"
                        1);
#line 355 "../metachop/decomp3.ch"
                    ;
#line 355 "../metachop/decomp3.ch"
#line 356 "../metachop/decomp3.ch"
                    while ( (son=(list_init?list_init.Nextl():(PPTREE)0)) ) {
#line 356 "../metachop/decomp3.ch"
#line 357 "../metachop/decomp3.ch"
{
#line 357 "../metachop/decomp3.ch"
    PPTREE _ptTree0=(PPTREE) 0;
#line 357 "../metachop/decomp3.ch"
    _ptTree0 = son;
#line 357 "../metachop/decomp3.ch"
    {
#line 357 "../metachop/decomp3.ch"
        PPTREE _ptTree1= (PPTREE) 0 ;
#line 357 "../metachop/decomp3.ch"
        _ptTree0 = AddList( _ptTree0,list);
#line 357 "../metachop/decomp3.ch"
    }
#line 357 "../metachop/decomp3.ch"
    list = _ptTree0;
#line 357 "../metachop/decomp3.ch"
    ;
#line 357 "../metachop/decomp3.ch"
}
#line 357 "../metachop/decomp3.ch"
#line 357 "../metachop/decomp3.ch"
#line 357 "../metachop/decomp3.ch"
                                                                                }
#line 357 "../metachop/decomp3.ch"
#line 359 "../metachop/decomp3.ch"
                    {
#line 359 "../metachop/decomp3.ch"
                        PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 359 "../metachop/decomp3.ch"
                        ReplaceTree(temporary, 2, list);
#line 359 "../metachop/decomp3.ch"
                    }
#line 359 "../metachop/decomp3.ch"
#line 359 "../metachop/decomp3.ch"
#line 359 "../metachop/decomp3.ch"
                  }
#line 359 "../metachop/decomp3.ch"
#line 361 "../metachop/decomp3.ch"
(listClassInit=list_init = (PPTREE) 0 );
#line 361 "../metachop/decomp3.ch"
#line 361 "../metachop/decomp3.ch"
#line 361 "../metachop/decomp3.ch"
                                                                         }
#line 361 "../metachop/decomp3.ch"
#line 363 "../metachop/decomp3.ch"
                                                                if ( ((_inter = (PPTREE)son,1) && 
#line 363 "../metachop/decomp3.ch"
                                                                        (NumberTree(_inter) == metachop::DECLARATION) &&
#line 363 "../metachop/decomp3.ch"
                                                                        (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,2),1) &&
#line 363 "../metachop/decomp3.ch"
(NumberTree(_inter) == metachop::TIDENT) &&
#line 363 "../metachop/decomp3.ch"
(_retVal[2]=((_storeVal[2]=_inter,_inter=SonTree(_inter,1),1) &&
#line 363 "../metachop/decomp3.ch"
    (NumberTree(_inter) == metachop::IDENT) &&
#line 363 "../metachop/decomp3.ch"
    (!strcmp(Value(SonTree(_inter,1)),"PTREE")) &&
#line 363 "../metachop/decomp3.ch"
    1),
#line 363 "../metachop/decomp3.ch"
    (_inter=_storeVal[2],1),_retVal[2]) &&
#line 363 "../metachop/decomp3.ch"
1),
#line 363 "../metachop/decomp3.ch"
(_inter=_storeVal[1],1),_retVal[1]) &&                                  
#line 363 "../metachop/decomp3.ch"
                                                                        ((list_decl=SonTree(_inter,3)),1) &&
#line 363 "../metachop/decomp3.ch"
                                                                        1) ) {
#line 363 "../metachop/decomp3.ch"
#line 364 "../metachop/decomp3.ch"
somethingDone = 1 ;
#line 364 "../metachop/decomp3.ch"
#line 365 "../metachop/decomp3.ch"
while ( !((!list_decl)) ) {
#line 365 "../metachop/decomp3.ch"
#line 366 "../metachop/decomp3.ch"
                                (son_decl=(list_decl?list_decl.Nextl():(PPTREE)0));
#line 366 "../metachop/decomp3.ch"
#line 366 "../metachop/decomp3.ch"
#line 367 "../metachop/decomp3.ch"
#if 0
#line 367 "../metachop/decomp3.ch"
#line 368 "../metachop/decomp3.ch"
                                if ( !(((_inter = (PPTREE)son_decl,1) && 
#line 368 "../metachop/decomp3.ch"
                                            (NumberTree(_inter) == metachop::TYP_AFF) &&
#line 368 "../metachop/decomp3.ch"
                                            1)) ) {
#line 368 "../metachop/decomp3.ch"
#line 368 "../metachop/decomp3.ch"
                                                    PTREE   _Baum1 ;
#line 368 "../metachop/decomp3.ch"
#line 368 "../metachop/decomp3.ch"
#line 372 "../metachop/decomp3.ch"
                                                    (temporary=FatherTree(son_decl));
#line 372 "../metachop/decomp3.ch"
#line 372 "../metachop/decomp3.ch"
#line 373 "../metachop/decomp3.ch"
                                                    {
#line 373 "../metachop/decomp3.ch"
                                                        /* [ metachop::DECLARATION
                                                            [ NIL ] 
                                                            [ metachop::TIDENT [ metachop::IDENT "PTREE"]]
                                                            [ LIST 
                                                                [ metachop::TYP_AFF
                                                                    [ META "son_decl"]
                                                                    [ metachop::INITIALIZER
                                                                        [ metachop::CAST
[ metachop::ABST_DECLARATOR
    [ metachop::TIDENT [ metachop::IDENT "PTREE"]]
    [ NIL ] 
]
[ metachop::INTEGER "0"]
                                                                        ]
                                                                    ]
                                                                ]
                                                            ]
                                                           ]
#line 373 "../metachop/decomp3.ch"
                                                        */
#line 373 "../metachop/decomp3.ch"
                                                        TheConstructor(-4,-2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,-2,MakeString("son_decl"),META,1,
#line 373 "../metachop/decomp3.ch"
                                                            -2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,-4,metachop::ABST_DECLARATOR,2,-2,MakeString("0"),metachop::INTEGER,1,metachop::CAST,2,metachop::INITIALIZER,1,metachop::TYP_AFF,2,-4,LIST,2,metachop::DECLARATION,3,-3) ;
#line 373 "../metachop/decomp3.ch"
                                                        pattern = PopTree ;
#line 373 "../metachop/decomp3.ch"
                                                        {
#line 373 "../metachop/decomp3.ch"
                                                            register PPTREE _inter ;
#line 373 "../metachop/decomp3.ch"
#line 373 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                            metarep("son_decl", pattern, son_decl);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                        }
#line 1 "../metachop/decomp3.ch"
                                                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 374 "../metachop/decomp3.ch"
                                                    {
#line 374 "../metachop/decomp3.ch"
                                                        PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 374 "../metachop/decomp3.ch"
                                                        _ptRes0 = MakeTree(metachop::TYP_AFF, 2);
#line 374 "../metachop/decomp3.ch"
                                                        {
#line 374 "../metachop/decomp3.ch"
                                                            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 374 "../metachop/decomp3.ch"
                                                            _ptRes1 = MakeTree(META, 1);
#line 374 "../metachop/decomp3.ch"
                                                            _ptTree1 = MakeString("x") ;
#line 374 "../metachop/decomp3.ch"
                                                            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 374 "../metachop/decomp3.ch"
                                                            _ptTree0 = _ptRes1;
#line 374 "../metachop/decomp3.ch"
                                                        }
#line 374 "../metachop/decomp3.ch"
                                                        ReplaceTree(_ptRes0, 1, _ptTree0);
#line 374 "../metachop/decomp3.ch"
                                                        {
#line 374 "../metachop/decomp3.ch"
                                                            PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 374 "../metachop/decomp3.ch"
                                                            _ptRes1 = MakeTree(META, 1);
#line 374 "../metachop/decomp3.ch"
                                                            _ptTree1 = MakeString("y") ;
#line 374 "../metachop/decomp3.ch"
                                                            ReplaceTree(_ptRes1, 1, _ptTree1);
#line 374 "../metachop/decomp3.ch"
                                                            _ptTree0 = _ptRes1;
#line 374 "../metachop/decomp3.ch"
                                                        }
#line 374 "../metachop/decomp3.ch"
                                                        ReplaceTree(_ptRes0, 2, _ptTree0);
#line 374 "../metachop/decomp3.ch"
                                                        _Baum1 = _ptRes0;
#line 374 "../metachop/decomp3.ch"
                                                    }
#line 374 "../metachop/decomp3.ch"
#line 374 "../metachop/decomp3.ch"
#line 374 "../metachop/decomp3.ch"
                                                    (pattern=find(_Baum1, pattern));
#line 374 "../metachop/decomp3.ch"
#line 374 "../metachop/decomp3.ch"
#line 376 "../metachop/decomp3.ch"
                                                    {
#line 376 "../metachop/decomp3.ch"
                                                        PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 376 "../metachop/decomp3.ch"
                                                        ReplaceTree(temporary, 1, pattern);
#line 376 "../metachop/decomp3.ch"
                                                    }
#line 376 "../metachop/decomp3.ch"
#line 376 "../metachop/decomp3.ch"
#line 376 "../metachop/decomp3.ch"
                                                  } else 
#line 377 "../metachop/decomp3.ch"
                                {
#line 377 "../metachop/decomp3.ch"
                                }
#line 377 "../metachop/decomp3.ch"
#endif
#line 377 "../metachop/decomp3.ch"
#line 379 "../metachop/decomp3.ch"
                                if ( ((_inter = (PPTREE)son_decl,1) && 
#line 379 "../metachop/decomp3.ch"
                                        (NumberTree(_inter) == metachop::TYP_AFF) &&
#line 379 "../metachop/decomp3.ch"
                                        1) ) {
#line 379 "../metachop/decomp3.ch"
#line 379 "../metachop/decomp3.ch"
                                                PTREE   _Baum2 ;
#line 379 "../metachop/decomp3.ch"
#line 379 "../metachop/decomp3.ch"
#line 384 "../metachop/decomp3.ch"
                                                ((_inter = (PPTREE)son_decl,1) && 
#line 384 "../metachop/decomp3.ch"
                                                    (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,2),1) &&
#line 384 "../metachop/decomp3.ch"
                                                        ((temporary=SonTree(_inter,1)),1) &&
#line 384 "../metachop/decomp3.ch"
                                                        1),
#line 384 "../metachop/decomp3.ch"
                                                        (_inter=_storeVal[1],1),_retVal[1]) &&
#line 384 "../metachop/decomp3.ch"
                                                    1);
#line 384 "../metachop/decomp3.ch"
                                                ;
#line 384 "../metachop/decomp3.ch"
#line 385 "../metachop/decomp3.ch"
                                                {
#line 385 "../metachop/decomp3.ch"
                                                    /* [ metachop::AFF
                                                        [ META "meta0"]
                                                        [ META "temporary"]
                                                       ]
#line 385 "../metachop/decomp3.ch"
                                                    */
#line 385 "../metachop/decomp3.ch"
                                                    TheConstructor(-2,MakeString("meta0"),META,1,-2,MakeString("temporary"),META,1,metachop::AFF,2,-3) ;
#line 385 "../metachop/decomp3.ch"
                                                    pattern = PopTree ;
#line 385 "../metachop/decomp3.ch"
                                                    {
#line 385 "../metachop/decomp3.ch"
                                                        register PPTREE _inter ;
#line 385 "../metachop/decomp3.ch"
#line 385 "../metachop/decomp3.ch"
#line 385 "../metachop/decomp3.ch"
                                                        PTREE   _Baum0 ;
#line 385 "../metachop/decomp3.ch"
#line 385 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                        {
#line 1 "../metachop/decomp3.ch"
                                                            PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                                                            _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                                                            _ptTree0 = StoreRef(MakeString(Value(son_decl)));
#line 1 "../metachop/decomp3.ch"
                                                            ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                                                            _Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                                        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                        metarep("meta0", pattern, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                        metarep("temporary", pattern, temporary);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                    }
#line 1 "../metachop/decomp3.ch"
                                                }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 390 "../metachop/decomp3.ch"
                                                {
#line 390 "../metachop/decomp3.ch"
                                                    PPTREE _ptTree0=(PPTREE) 0;
#line 390 "../metachop/decomp3.ch"
                                                    _ptTree0 = pattern;
#line 390 "../metachop/decomp3.ch"
                                                    {
#line 390 "../metachop/decomp3.ch"
                                                        PPTREE _ptTree1= (PPTREE) 0 ;
#line 390 "../metachop/decomp3.ch"
                                                        _ptTree0 = AddList( _ptTree0,list_init);
#line 390 "../metachop/decomp3.ch"
                                                    }
#line 390 "../metachop/decomp3.ch"
                                                    list_init = _ptTree0;
#line 390 "../metachop/decomp3.ch"
                                                    ;
#line 390 "../metachop/decomp3.ch"
                                                }
#line 390 "../metachop/decomp3.ch"
#line 390 "../metachop/decomp3.ch"
#line 391 "../metachop/decomp3.ch"
                                                {
#line 391 "../metachop/decomp3.ch"
                                                    /* [ metachop::DECLARATION
                                                        [ NIL ] 
                                                        [ metachop::TIDENT [ metachop::IDENT "PTREE"]]
                                                        [ LIST 
                                                            [ metachop::TYP_AFF
                                                                [ META "toto"]
                                                                [ metachop::INITIALIZER
                                                                    [ metachop::CAST
                                                                        [ metachop::ABST_DECLARATOR
[ metachop::TIDENT [ metachop::IDENT "PTREE"]]
[ NIL ] 
                                                                        ]
                                                                        [ metachop::INTEGER "0"]
                                                                    ]
                                                                ]
                                                            ]
                                                        ]
                                                       ]
#line 391 "../metachop/decomp3.ch"
                                                    */
#line 391 "../metachop/decomp3.ch"
                                                    TheConstructor(-4,-2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,-2,MakeString("toto"),META,1,
#line 391 "../metachop/decomp3.ch"
                                                        -2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,-4,metachop::ABST_DECLARATOR,2,-2,MakeString("0"),metachop::INTEGER,1,metachop::CAST,2,metachop::INITIALIZER,1,metachop::TYP_AFF,2,-4,LIST,2,metachop::DECLARATION,3,-3) ;
#line 391 "../metachop/decomp3.ch"
                                                    pattern = PopTree ;
#line 391 "../metachop/decomp3.ch"
                                                    }
#line 391 "../metachop/decomp3.ch"
#line 391 "../metachop/decomp3.ch"
#line 392 "../metachop/decomp3.ch"
                                                {
#line 392 "../metachop/decomp3.ch"
                                                    PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 392 "../metachop/decomp3.ch"
                                                    _ptRes0 = MakeTree(metachop::TYP_AFF, 2);
#line 392 "../metachop/decomp3.ch"
                                                    {
#line 392 "../metachop/decomp3.ch"
                                                        PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 392 "../metachop/decomp3.ch"
                                                        _ptRes1 = MakeTree(META, 1);
#line 392 "../metachop/decomp3.ch"
                                                        _ptTree1 = MakeString("x") ;
#line 392 "../metachop/decomp3.ch"
                                                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 392 "../metachop/decomp3.ch"
                                                        _ptTree0 = _ptRes1;
#line 392 "../metachop/decomp3.ch"
                                                    }
#line 392 "../metachop/decomp3.ch"
                                                    ReplaceTree(_ptRes0, 1, _ptTree0);
#line 392 "../metachop/decomp3.ch"
                                                    {
#line 392 "../metachop/decomp3.ch"
                                                        PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 392 "../metachop/decomp3.ch"
                                                        _ptRes1 = MakeTree(META, 1);
#line 392 "../metachop/decomp3.ch"
                                                        _ptTree1 = MakeString("y") ;
#line 392 "../metachop/decomp3.ch"
                                                        ReplaceTree(_ptRes1, 1, _ptTree1);
#line 392 "../metachop/decomp3.ch"
                                                        _ptTree0 = _ptRes1;
#line 392 "../metachop/decomp3.ch"
                                                    }
#line 392 "../metachop/decomp3.ch"
                                                    ReplaceTree(_ptRes0, 2, _ptTree0);
#line 392 "../metachop/decomp3.ch"
                                                    _Baum2 = _ptRes0;
#line 392 "../metachop/decomp3.ch"
                                                }
#line 392 "../metachop/decomp3.ch"
#line 392 "../metachop/decomp3.ch"
#line 392 "../metachop/decomp3.ch"
                                                (pattern=find(_Baum2, pattern));
#line 392 "../metachop/decomp3.ch"
#line 392 "../metachop/decomp3.ch"
#line 394 "../metachop/decomp3.ch"
                                                ((_inter = (PPTREE)pattern,1) && 
#line 394 "../metachop/decomp3.ch"
                                                    ((pattern=SonTree(_inter,2)),1) &&
#line 394 "../metachop/decomp3.ch"
                                                    1);
#line 394 "../metachop/decomp3.ch"
                                                ;
#line 394 "../metachop/decomp3.ch"
#line 395 "../metachop/decomp3.ch"
                                                {
#line 395 "../metachop/decomp3.ch"
                                                    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 395 "../metachop/decomp3.ch"
                                                    ReplaceTree(son_decl, 2, pattern);
#line 395 "../metachop/decomp3.ch"
                                                }
#line 395 "../metachop/decomp3.ch"
#line 395 "../metachop/decomp3.ch"
#line 395 "../metachop/decomp3.ch"
                                             }
#line 395 "../metachop/decomp3.ch"
#line 397 "../metachop/decomp3.ch"
#if 0
#line 397 "../metachop/decomp3.ch"
#line 398 "../metachop/decomp3.ch"
                                if ( !cplusGen ) {
#line 398 "../metachop/decomp3.ch"
#line 399 "../metachop/decomp3.ch"
                                                    {
#line 399 "../metachop/decomp3.ch"
                                                        /* [ metachop::IF
                                                            [ META "meta0"]
                                                            [ metachop::EXP_LIST
                                                                [ metachop::IDENT "FreeRef"]
                                                                [ META "meta1"]
                                                            ]
                                                            [ NIL ] 
                                                           ]
#line 399 "../metachop/decomp3.ch"
                                                        */
#line 399 "../metachop/decomp3.ch"
                                                        TheConstructor(-2,MakeString("meta0"),META,1,-2,MakeString("FreeRef"),metachop::IDENT,1,-2,MakeString("meta1"),META,1,metachop::EXP_LIST,2,-4,metachop::IF,3,-3) ;
#line 399 "../metachop/decomp3.ch"
                                                        temporary = PopTree ;
#line 399 "../metachop/decomp3.ch"
                                                        {
#line 399 "../metachop/decomp3.ch"
                                                            register PPTREE _inter ;
#line 399 "../metachop/decomp3.ch"
#line 399 "../metachop/decomp3.ch"
#line 399 "../metachop/decomp3.ch"
                                                            PTREE   _Baum1 ;
#line 399 "../metachop/decomp3.ch"
#line 399 "../metachop/decomp3.ch"
#line 399 "../metachop/decomp3.ch"
                                                            PTREE   _Baum0 ;
#line 399 "../metachop/decomp3.ch"
#line 399 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                            {
#line 1 "../metachop/decomp3.ch"
                                                                PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                                                                _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                                                                _ptTree0 = StoreRef(MakeString(Value(son_decl)));
#line 1 "../metachop/decomp3.ch"
                                                                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                                                                _Baum0 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                                            }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                            metarep("meta0", temporary, _Baum0);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                            {
#line 1 "../metachop/decomp3.ch"
                                                                PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 1 "../metachop/decomp3.ch"
                                                                _ptRes0 = MakeTree(metachop::IDENT, 1);
#line 1 "../metachop/decomp3.ch"
                                                                _ptTree0 = StoreRef(MakeString(Value(son_decl)));
#line 1 "../metachop/decomp3.ch"
                                                                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 1 "../metachop/decomp3.ch"
                                                                _Baum1 = _ptRes0;
#line 1 "../metachop/decomp3.ch"
                                                            }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                            metarep("meta1", temporary, _Baum1);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                        }
#line 1 "../metachop/decomp3.ch"
                                                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 404 "../metachop/decomp3.ch"
                                                    {
#line 404 "../metachop/decomp3.ch"
                                                        PPTREE _ptTree0= (PPTREE) 0 ;
#line 404 "../metachop/decomp3.ch"
                                                        list =  AddList( list,temporary);
#line 404 "../metachop/decomp3.ch"
                                                    }
#line 404 "../metachop/decomp3.ch"
#line 404 "../metachop/decomp3.ch"
#line 404 "../metachop/decomp3.ch"
                                                   } else 
#line 405 "../metachop/decomp3.ch"
                                {
#line 405 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
                                    {
#line 406 "../metachop/decomp3.ch"
                                        PPTREE _ptTree0= (PPTREE) 0 ;
#line 406 "../metachop/decomp3.ch"
                                        _ptTree0 = StoreRef(CreateGCClass(Value(son_decl)));
#line 406 "../metachop/decomp3.ch"
                                        listClassInit =  AddList( listClassInit,_ptTree0);
#line 406 "../metachop/decomp3.ch"
                                    }
#line 406 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
                                }
#line 406 "../metachop/decomp3.ch"
#endif
#line 406 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
                            }
#line 406 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
                                                                             }
#line 406 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
                                                              }
#line 406 "../metachop/decomp3.ch"
#line 406 "../metachop/decomp3.ch"
                                }
#line 406 "../metachop/decomp3.ch"
#line 413 "../metachop/decomp3.ch"
}
#line 413 "../metachop/decomp3.ch"

#line 417 "../metachop/decomp3.ch"
#line 417 "../metachop/decomp3.ch"
void GCManagerFunc ( PTREE tree )
#line 417 "../metachop/decomp3.ch"
{
#line 417 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 417 "../metachop/decomp3.ch"
#line 417 "../metachop/decomp3.ch"
#line 420 "../metachop/decomp3.ch"
    PTREE   list, pt_list, son, son_decl, old, temporary, inter1, addref, list_decl, type, list_insert, param, list_name, name ;
#line 420 "../metachop/decomp3.ch"
#line 420 "../metachop/decomp3.ch"
#line 422 "../metachop/decomp3.ch"
    int somethingDone = 0 ;
#line 422 "../metachop/decomp3.ch"
#line 424 "../metachop/decomp3.ch"
    ((_inter = (PPTREE)tree,1) && 
#line 424 "../metachop/decomp3.ch"
        ((type=SonTree(_inter,2)),1) &&
#line 424 "../metachop/decomp3.ch"
        ((param=SonTree(_inter,4)),1) &&
#line 424 "../metachop/decomp3.ch"
        ((pt_list=SonTree(_inter,6)),1) &&
#line 424 "../metachop/decomp3.ch"
        (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,8),1) &&
#line 424 "../metachop/decomp3.ch"
            (NumberTree(_inter) == metachop::COMPOUND) &&
#line 424 "../metachop/decomp3.ch"
            ((list=SonTree(_inter,1)),1) &&
#line 424 "../metachop/decomp3.ch"
            1),
#line 424 "../metachop/decomp3.ch"
            (_inter=_storeVal[1],1),_retVal[1]) &&
#line 424 "../metachop/decomp3.ch"
        1);
#line 424 "../metachop/decomp3.ch"
    ;
#line 424 "../metachop/decomp3.ch"
#line 427 "../metachop/decomp3.ch"
    (old=(temporary=list));
#line 427 "../metachop/decomp3.ch"
#line 427 "../metachop/decomp3.ch"
#line 428 "../metachop/decomp3.ch"
    while ( ((_inter = (PPTREE)temporary,1) && 
#line 428 "../metachop/decomp3.ch"
                (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,1),1) &&
#line 428 "../metachop/decomp3.ch"
                    (NumberTree(_inter) == metachop::DECLARATION) &&
#line 428 "../metachop/decomp3.ch"
                    1),
#line 428 "../metachop/decomp3.ch"
                    (_inter=_storeVal[1],1),_retVal[1]) &&
#line 428 "../metachop/decomp3.ch"
                1) ) {
#line 428 "../metachop/decomp3.ch"
#line 429 "../metachop/decomp3.ch"
                        (old=temporary);
#line 429 "../metachop/decomp3.ch"
#line 429 "../metachop/decomp3.ch"
#line 430 "../metachop/decomp3.ch"
                        (temporary?temporary.Nextl():(PPTREE)0);
#line 430 "../metachop/decomp3.ch"
#line 430 "../metachop/decomp3.ch"
                     }
#line 430 "../metachop/decomp3.ch"
#line 434 "../metachop/decomp3.ch"
    while ( !((!pt_list)) ) {
#line 434 "../metachop/decomp3.ch"
#line 435 "../metachop/decomp3.ch"
                                (son=(pt_list?pt_list.Nextl():(PPTREE)0));
#line 435 "../metachop/decomp3.ch"
#line 435 "../metachop/decomp3.ch"
#line 436 "../metachop/decomp3.ch"
                                if ( ((_inter = (PPTREE)son,1) && 
#line 436 "../metachop/decomp3.ch"
                                        (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,2),1) &&
#line 436 "../metachop/decomp3.ch"
                                            (NumberTree(_inter) == metachop::TIDENT) &&
#line 436 "../metachop/decomp3.ch"
                                            (_retVal[2]=((_storeVal[2]=_inter,_inter=SonTree(_inter,1),1) &&
#line 436 "../metachop/decomp3.ch"
                                                (NumberTree(_inter) == metachop::IDENT) &&
#line 436 "../metachop/decomp3.ch"
                                                (!strcmp(Value(SonTree(_inter,1)),"PTREE")) &&
#line 436 "../metachop/decomp3.ch"
                                                1),
#line 436 "../metachop/decomp3.ch"
                                                (_inter=_storeVal[2],1),_retVal[2]) &&
#line 436 "../metachop/decomp3.ch"
                                            1),
#line 436 "../metachop/decomp3.ch"
                                            (_inter=_storeVal[1],1),_retVal[1]) &&
#line 436 "../metachop/decomp3.ch"
                                        ((list_decl=SonTree(_inter,3)),1) &&
#line 436 "../metachop/decomp3.ch"
                                        1) ) {
#line 436 "../metachop/decomp3.ch"
#line 437 "../metachop/decomp3.ch"
                                                somethingDone = 1 ;
#line 437 "../metachop/decomp3.ch"
#line 438 "../metachop/decomp3.ch"
                                                while ( ((name=(list_decl?list_decl.Nextl():(PPTREE)0))) && ((_inter = (PPTREE)name,1) && 
#line 438 "../metachop/decomp3.ch"
(NumberTree(_inter) == metachop::IDENT) &&
#line 438 "../metachop/decomp3.ch"
1)                                              ) {
#line 438 "../metachop/decomp3.ch"
#line 439 "../metachop/decomp3.ch"
                                                    if ( !cplusGen ) {
#line 439 "../metachop/decomp3.ch"
#line 440 "../metachop/decomp3.ch"
                                                                        {
#line 440 "../metachop/decomp3.ch"
/* [ metachop::EXP_LIST
    [ metachop::IDENT "AddRef"]
    [ META "meta0"]
   ]
#line 440 "../metachop/decomp3.ch"
*/
#line 440 "../metachop/decomp3.ch"
TheConstructor(-2,MakeString("AddRef"),metachop::IDENT,1,-2,MakeString("meta0"),META,1,metachop::EXP_LIST,2,-3) ;
#line 440 "../metachop/decomp3.ch"
addref = PopTree ;
#line 440 "../metachop/decomp3.ch"
{
#line 440 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 440 "../metachop/decomp3.ch"
#line 440 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
    metarep("meta0", addref, copytree(name));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
}                                                                       
#line 1 "../metachop/decomp3.ch"
                                                                        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 441 "../metachop/decomp3.ch"
                                                                        if ( old == temporary ) 
#line 441 "../metachop/decomp3.ch"
#line 442 "../metachop/decomp3.ch"
{
#line 442 "../metachop/decomp3.ch"
    PPTREE _ptTree0=(PPTREE) 0;
#line 442 "../metachop/decomp3.ch"
    _ptTree0 = addref;
#line 442 "../metachop/decomp3.ch"
    {
#line 442 "../metachop/decomp3.ch"
        PPTREE _ptTree1= (PPTREE) 0 ;
#line 442 "../metachop/decomp3.ch"
        _ptTree0 = AddList( _ptTree0,list);
#line 442 "../metachop/decomp3.ch"
    }
#line 442 "../metachop/decomp3.ch"
    list = _ptTree0;
#line 442 "../metachop/decomp3.ch"
    ;
#line 442 "../metachop/decomp3.ch"
}
#line 442 "../metachop/decomp3.ch"
#line 442 "../metachop/decomp3.ch"
                                                                        else 
#line 443 "../metachop/decomp3.ch"
                                                                        {
#line 443 "../metachop/decomp3.ch"
#line 444 "../metachop/decomp3.ch"
{
#line 444 "../metachop/decomp3.ch"
    PPTREE _ptTree0=(PPTREE) 0;
#line 444 "../metachop/decomp3.ch"
    _ptTree0 = addref;
#line 444 "../metachop/decomp3.ch"
    {
#line 444 "../metachop/decomp3.ch"
        PPTREE _ptTree1= (PPTREE) 0 ;
#line 444 "../metachop/decomp3.ch"
        _ptTree0 = AddList( _ptTree0,temporary);
#line 444 "../metachop/decomp3.ch"
    }
#line 444 "../metachop/decomp3.ch"
    temporary = _ptTree0;
#line 444 "../metachop/decomp3.ch"
    ;
#line 444 "../metachop/decomp3.ch"
}
#line 444 "../metachop/decomp3.ch"
#line 444 "../metachop/decomp3.ch"
#line 445 "../metachop/decomp3.ch"
{
#line 445 "../metachop/decomp3.ch"
    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 445 "../metachop/decomp3.ch"
    ReplaceTree(old, 2, temporary);
#line 445 "../metachop/decomp3.ch"
}
#line 445 "../metachop/decomp3.ch"
#line 445 "../metachop/decomp3.ch"
#line 445 "../metachop/decomp3.ch"
                                                                        }
#line 445 "../metachop/decomp3.ch"
#line 447 "../metachop/decomp3.ch"
                                                                        {
#line 447 "../metachop/decomp3.ch"
/* [ metachop::IF
    [ META "meta0"]
    [ metachop::EXP_LIST
        [ metachop::IDENT "FreeRef"]
        [ META "meta1"]
    ]
    [ NIL ] 
   ]
#line 447 "../metachop/decomp3.ch"
*/
#line 447 "../metachop/decomp3.ch"
TheConstructor(-2,MakeString("meta0"),META,1,-2,MakeString("FreeRef"),metachop::IDENT,1,-2,MakeString("meta1"),META,1,metachop::EXP_LIST,2,-4,metachop::IF,3,-3) ;
#line 447 "../metachop/decomp3.ch"
inter1 = PopTree ;
#line 447 "../metachop/decomp3.ch"
{
#line 447 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 447 "../metachop/decomp3.ch"
#line 447 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
    metarep("meta0", inter1, copytree(name));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
    metarep("meta1", inter1, copytree(name));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
}                                                                       
#line 1 "../metachop/decomp3.ch"
                                                                        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 451 "../metachop/decomp3.ch"
                                                                        {
#line 451 "../metachop/decomp3.ch"
PPTREE _ptTree0= (PPTREE) 0 ;
#line 451 "../metachop/decomp3.ch"
list =  AddList( list,inter1);
#line 451 "../metachop/decomp3.ch"
                                                                        }
#line 451 "../metachop/decomp3.ch"
#line 451 "../metachop/decomp3.ch"
#line 451 "../metachop/decomp3.ch"
                                                                       } else 
#line 452 "../metachop/decomp3.ch"
                                                    {
#line 452 "../metachop/decomp3.ch"
#line 453 "../metachop/decomp3.ch"
                                                        {
#line 453 "../metachop/decomp3.ch"
                                                            PPTREE _ptTree0=(PPTREE) 0;
#line 453 "../metachop/decomp3.ch"
                                                            _ptTree0 = list_insert;
#line 453 "../metachop/decomp3.ch"
                                                            {
#line 453 "../metachop/decomp3.ch"
                                                                PPTREE _ptTree1= (PPTREE) 0 ;
#line 453 "../metachop/decomp3.ch"
                                                                _ptTree1 = StoreRef(CreateGCClass(Value(name)));
#line 453 "../metachop/decomp3.ch"
                                                                _ptTree0 = AddList( _ptTree0,_ptTree1);
#line 453 "../metachop/decomp3.ch"
                                                            }
#line 453 "../metachop/decomp3.ch"
                                                            list_insert = _ptTree0;
#line 453 "../metachop/decomp3.ch"
                                                            ;
#line 453 "../metachop/decomp3.ch"
                                                        }
#line 453 "../metachop/decomp3.ch"
#line 453 "../metachop/decomp3.ch"
#line 454 "../metachop/decomp3.ch"
                                                        {
#line 454 "../metachop/decomp3.ch"
                                                            PPTREE _ptTree0= (PPTREE) 0 ;
#line 454 "../metachop/decomp3.ch"
                                                            _ptTree0 = StoreRef(copytree(name));
#line 454 "../metachop/decomp3.ch"
                                                            list_name =  AddList( list_name,_ptTree0);
#line 454 "../metachop/decomp3.ch"
                                                        }
#line 454 "../metachop/decomp3.ch"
#line 454 "../metachop/decomp3.ch"
#line 454 "../metachop/decomp3.ch"
                                                    }
#line 454 "../metachop/decomp3.ch"
#line 454 "../metachop/decomp3.ch"
                                                  }
#line 454 "../metachop/decomp3.ch"
#line 454 "../metachop/decomp3.ch"
                                             }
#line 454 "../metachop/decomp3.ch"
#line 454 "../metachop/decomp3.ch"
                              }
#line 454 "../metachop/decomp3.ch"
#line 462 "../metachop/decomp3.ch"
    while ( (son=(param?param.Nextl():(PPTREE)0)) ) {
#line 462 "../metachop/decomp3.ch"
#line 463 "../metachop/decomp3.ch"
                                                            if ( ((_inter = (PPTREE)son,1) && 
#line 463 "../metachop/decomp3.ch"
                                                                    (NumberTree(_inter) == metachop::DECLARATOR) &&
#line 463 "../metachop/decomp3.ch"
                                                                    (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,1),1) &&
#line 463 "../metachop/decomp3.ch"
                                                                        (NumberTree(_inter) == metachop::TIDENT) &&
#line 463 "../metachop/decomp3.ch"
                                                                        (_retVal[2]=((_storeVal[2]=_inter,_inter=SonTree(_inter,1),1) &&
#line 463 "../metachop/decomp3.ch"
(NumberTree(_inter) == metachop::IDENT) &&
#line 463 "../metachop/decomp3.ch"
(!strcmp(Value(SonTree(_inter,1)),"PTREE")) &&
#line 463 "../metachop/decomp3.ch"
1),
#line 463 "../metachop/decomp3.ch"
(_inter=_storeVal[2],1),_retVal[2]) &&                                  
#line 463 "../metachop/decomp3.ch"
                                                                        1),
#line 463 "../metachop/decomp3.ch"
                                                                        (_inter=_storeVal[1],1),_retVal[1]) &&
#line 463 "../metachop/decomp3.ch"
                                                                    (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,2),(name=_inter),1) &&
#line 463 "../metachop/decomp3.ch"
                                                                        (NumberTree(_inter) == metachop::IDENT) &&
#line 463 "../metachop/decomp3.ch"
                                                                        1),
#line 463 "../metachop/decomp3.ch"
                                                                        (_inter=_storeVal[1],1),_retVal[1]) &&
#line 463 "../metachop/decomp3.ch"
                                                                    1) && !ListFind(list_name, name) ) {
#line 463 "../metachop/decomp3.ch"
#line 465 "../metachop/decomp3.ch"
somethingDone = 1 ;
#line 465 "../metachop/decomp3.ch"
#line 466 "../metachop/decomp3.ch"
if ( !cplusGen ) {
#line 466 "../metachop/decomp3.ch"
#line 467 "../metachop/decomp3.ch"
                    {
#line 467 "../metachop/decomp3.ch"
                        /* [ metachop::EXP_LIST
                            [ metachop::IDENT "AddRef"]
                            [ META "meta0"]
                           ]
#line 467 "../metachop/decomp3.ch"
                        */
#line 467 "../metachop/decomp3.ch"
                        TheConstructor(-2,MakeString("AddRef"),metachop::IDENT,1,-2,MakeString("meta0"),META,1,metachop::EXP_LIST,2,-3) ;
#line 467 "../metachop/decomp3.ch"
                        addref = PopTree ;
#line 467 "../metachop/decomp3.ch"
                        {
#line 467 "../metachop/decomp3.ch"
                            register PPTREE _inter ;
#line 467 "../metachop/decomp3.ch"
#line 467 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                            metarep("meta0", addref, copytree(name));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                        }
#line 1 "../metachop/decomp3.ch"
                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 468 "../metachop/decomp3.ch"
                    if ( old == temporary ) 
#line 468 "../metachop/decomp3.ch"
#line 469 "../metachop/decomp3.ch"
                        {
#line 469 "../metachop/decomp3.ch"
                            PPTREE _ptTree0=(PPTREE) 0;
#line 469 "../metachop/decomp3.ch"
                            _ptTree0 = addref;
#line 469 "../metachop/decomp3.ch"
                            {
#line 469 "../metachop/decomp3.ch"
                                PPTREE _ptTree1= (PPTREE) 0 ;
#line 469 "../metachop/decomp3.ch"
                                _ptTree0 = AddList( _ptTree0,list);
#line 469 "../metachop/decomp3.ch"
                            }
#line 469 "../metachop/decomp3.ch"
                            list = _ptTree0;
#line 469 "../metachop/decomp3.ch"
                            ;
#line 469 "../metachop/decomp3.ch"
                        }
#line 469 "../metachop/decomp3.ch"
#line 469 "../metachop/decomp3.ch"
                    else 
#line 470 "../metachop/decomp3.ch"
                    {
#line 470 "../metachop/decomp3.ch"
#line 471 "../metachop/decomp3.ch"
                        {
#line 471 "../metachop/decomp3.ch"
                            PPTREE _ptTree0=(PPTREE) 0;
#line 471 "../metachop/decomp3.ch"
                            _ptTree0 = addref;
#line 471 "../metachop/decomp3.ch"
                            {
#line 471 "../metachop/decomp3.ch"
                                PPTREE _ptTree1= (PPTREE) 0 ;
#line 471 "../metachop/decomp3.ch"
                                _ptTree0 = AddList( _ptTree0,temporary);
#line 471 "../metachop/decomp3.ch"
                            }
#line 471 "../metachop/decomp3.ch"
                            temporary = _ptTree0;
#line 471 "../metachop/decomp3.ch"
                            ;
#line 471 "../metachop/decomp3.ch"
                        }
#line 471 "../metachop/decomp3.ch"
#line 471 "../metachop/decomp3.ch"
#line 472 "../metachop/decomp3.ch"
                        {
#line 472 "../metachop/decomp3.ch"
                            PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 472 "../metachop/decomp3.ch"
                            ReplaceTree(old, 2, temporary);
#line 472 "../metachop/decomp3.ch"
                        }
#line 472 "../metachop/decomp3.ch"
#line 472 "../metachop/decomp3.ch"
#line 472 "../metachop/decomp3.ch"
                    }
#line 472 "../metachop/decomp3.ch"
#line 474 "../metachop/decomp3.ch"
                    {
#line 474 "../metachop/decomp3.ch"
                        /* [ metachop::IF
                            [ META "meta0"]
                            [ metachop::EXP_LIST
                                [ metachop::IDENT "FreeRef"]
                                [ META "meta1"]
                            ]
                            [ NIL ] 
                           ]
#line 474 "../metachop/decomp3.ch"
                        */
#line 474 "../metachop/decomp3.ch"
                        TheConstructor(-2,MakeString("meta0"),META,1,-2,MakeString("FreeRef"),metachop::IDENT,1,-2,MakeString("meta1"),META,1,metachop::EXP_LIST,2,-4,metachop::IF,3,-3) ;
#line 474 "../metachop/decomp3.ch"
                        inter1 = PopTree ;
#line 474 "../metachop/decomp3.ch"
                        {
#line 474 "../metachop/decomp3.ch"
                            register PPTREE _inter ;
#line 474 "../metachop/decomp3.ch"
#line 474 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                            metarep("meta0", inter1, copytree(name));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                            metarep("meta1", inter1, copytree(name));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                        }
#line 1 "../metachop/decomp3.ch"
                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 478 "../metachop/decomp3.ch"
                    {
#line 478 "../metachop/decomp3.ch"
                        PPTREE _ptTree0= (PPTREE) 0 ;
#line 478 "../metachop/decomp3.ch"
                        list =  AddList( list,inter1);
#line 478 "../metachop/decomp3.ch"
                    }
#line 478 "../metachop/decomp3.ch"
#line 478 "../metachop/decomp3.ch"
#line 478 "../metachop/decomp3.ch"
                   } else 
#line 479 "../metachop/decomp3.ch"
{
#line 479 "../metachop/decomp3.ch"
#line 480 "../metachop/decomp3.ch"
    {
#line 480 "../metachop/decomp3.ch"
        PPTREE _ptTree0=(PPTREE) 0;
#line 480 "../metachop/decomp3.ch"
        _ptTree0 = list_insert;
#line 480 "../metachop/decomp3.ch"
        {
#line 480 "../metachop/decomp3.ch"
            PPTREE _ptTree1= (PPTREE) 0 ;
#line 480 "../metachop/decomp3.ch"
            _ptTree1 = StoreRef(CreateGCClass(Value(name)));
#line 480 "../metachop/decomp3.ch"
            _ptTree0 = AddList( _ptTree0,_ptTree1);
#line 480 "../metachop/decomp3.ch"
        }
#line 480 "../metachop/decomp3.ch"
        list_insert = _ptTree0;
#line 480 "../metachop/decomp3.ch"
        ;
#line 480 "../metachop/decomp3.ch"
    }
#line 480 "../metachop/decomp3.ch"
#line 480 "../metachop/decomp3.ch"
#line 481 "../metachop/decomp3.ch"
    {
#line 481 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0 ;
#line 481 "../metachop/decomp3.ch"
        _ptTree0 = StoreRef(copytree(name));
#line 481 "../metachop/decomp3.ch"
        list_name =  AddList( list_name,_ptTree0);
#line 481 "../metachop/decomp3.ch"
    }
#line 481 "../metachop/decomp3.ch"
#line 481 "../metachop/decomp3.ch"
#line 481 "../metachop/decomp3.ch"
}
#line 481 "../metachop/decomp3.ch"
#line 481 "../metachop/decomp3.ch"
                                                                                                           }
#line 481 "../metachop/decomp3.ch"
#line 481 "../metachop/decomp3.ch"
                                                        }
#line 481 "../metachop/decomp3.ch"
#line 487 "../metachop/decomp3.ch"
    if ( cplusGen && somethingDone ) {
#line 487 "../metachop/decomp3.ch"
#line 488 "../metachop/decomp3.ch"
                                        (list_insert=FullCreateGCClass(list_insert));
#line 488 "../metachop/decomp3.ch"
#line 488 "../metachop/decomp3.ch"
#line 489 "../metachop/decomp3.ch"
                                        if ( old == temporary ) 
#line 489 "../metachop/decomp3.ch"
#line 490 "../metachop/decomp3.ch"
                                            {
#line 490 "../metachop/decomp3.ch"
                                                PPTREE _ptTree0=(PPTREE) 0;
#line 490 "../metachop/decomp3.ch"
                                                _ptTree0 = list_insert;
#line 490 "../metachop/decomp3.ch"
                                                {
#line 490 "../metachop/decomp3.ch"
                                                    PPTREE _ptTree1= (PPTREE) 0 ;
#line 490 "../metachop/decomp3.ch"
                                                    _ptTree0 = AddList( _ptTree0,list);
#line 490 "../metachop/decomp3.ch"
                                                }
#line 490 "../metachop/decomp3.ch"
                                                list = _ptTree0;
#line 490 "../metachop/decomp3.ch"
                                                ;
#line 490 "../metachop/decomp3.ch"
                                            }
#line 490 "../metachop/decomp3.ch"
#line 490 "../metachop/decomp3.ch"
                                        else 
#line 490 "../metachop/decomp3.ch"
#line 492 "../metachop/decomp3.ch"
                                            {
#line 492 "../metachop/decomp3.ch"
                                                PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 492 "../metachop/decomp3.ch"
                                                _ptTree0 = list_insert;
#line 492 "../metachop/decomp3.ch"
                                                {
#line 492 "../metachop/decomp3.ch"
                                                    PPTREE _ptTree1= (PPTREE) 0 ;
#line 492 "../metachop/decomp3.ch"
                                                    _ptTree0 = AddList( _ptTree0,temporary);
#line 492 "../metachop/decomp3.ch"
                                                }
#line 492 "../metachop/decomp3.ch"
                                                ReplaceTree(old, 2, _ptTree0);
#line 492 "../metachop/decomp3.ch"
                                            }
#line 492 "../metachop/decomp3.ch"
#line 492 "../metachop/decomp3.ch"
#line 492 "../metachop/decomp3.ch"
#line 492 "../metachop/decomp3.ch"
                                       }
#line 492 "../metachop/decomp3.ch"
#line 494 "../metachop/decomp3.ch"
    if ( somethingDone ) 
#line 494 "../metachop/decomp3.ch"
#line 495 "../metachop/decomp3.ch"
        {
#line 495 "../metachop/decomp3.ch"
            PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 495 "../metachop/decomp3.ch"
            _sonTree0 = SonTree(tree,8);
#line 495 "../metachop/decomp3.ch"
            {
#line 495 "../metachop/decomp3.ch"
                PPTREE _ptTree1= (PPTREE) 0,_sonTree1= (PPTREE) 0 ;
#line 495 "../metachop/decomp3.ch"
                _ptTree0 = ReplaceTree(_sonTree0, 1, list);
#line 495 "../metachop/decomp3.ch"
            }
#line 495 "../metachop/decomp3.ch"
            ReplaceTree(tree, 8, _ptTree0);
#line 495 "../metachop/decomp3.ch"
        }
#line 495 "../metachop/decomp3.ch"
#line 495 "../metachop/decomp3.ch"
#line 496 "../metachop/decomp3.ch"
}
#line 496 "../metachop/decomp3.ch"

#line 500 "../metachop/decomp3.ch"
#line 500 "../metachop/decomp3.ch"
void GCManagerRetBeg ( PTREE tree )
#line 500 "../metachop/decomp3.ch"
{
#line 500 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 500 "../metachop/decomp3.ch"
#line 500 "../metachop/decomp3.ch"
#line 503 "../metachop/decomp3.ch"
    PTREE   list, construct ;
#line 503 "../metachop/decomp3.ch"
#line 503 "../metachop/decomp3.ch"
#line 504 "../metachop/decomp3.ch"
    int retATree = 0 ;
#line 504 "../metachop/decomp3.ch"
#line 506 "../metachop/decomp3.ch"
    if ( !cplusGen ) {
#line 506 "../metachop/decomp3.ch"
#line 506 "../metachop/decomp3.ch"
                        PTREE   _Baum0 ;
#line 506 "../metachop/decomp3.ch"
#line 506 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
                        {
#line 507 "../metachop/decomp3.ch"
                            PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 507 "../metachop/decomp3.ch"
                            _ptRes0 = MakeTree(metachop::RETURN, 1);
#line 507 "../metachop/decomp3.ch"
                            {
#line 507 "../metachop/decomp3.ch"
                                PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 507 "../metachop/decomp3.ch"
                                _ptRes1 = MakeTree(META, 1);
#line 507 "../metachop/decomp3.ch"
                                _ptTree1 = MakeString("toto") ;
#line 507 "../metachop/decomp3.ch"
                                ReplaceTree(_ptRes1, 1, _ptTree1);
#line 507 "../metachop/decomp3.ch"
                                _ptTree0 = _ptRes1;
#line 507 "../metachop/decomp3.ch"
                            }
#line 507 "../metachop/decomp3.ch"
                            ReplaceTree(_ptRes0, 1, _ptTree0);
#line 507 "../metachop/decomp3.ch"
                            _Baum0 = _ptRes0;
#line 507 "../metachop/decomp3.ch"
                        }
#line 507 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
                        {
#line 507 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
                            ItPtree _iterator1 (tree, _Baum0) ;
#line 507 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
                            PPTREE  _for_elem ;
#line 507 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
                            _iterator1.AllSearch(1);
#line 507 "../metachop/decomp3.ch"
#line 508 "../metachop/decomp3.ch"
                            while ( _for_elem = _iterator1++ ) {
#line 508 "../metachop/decomp3.ch"
#line 507 "../metachop/decomp3.ch"
                                {
#line 507 "../metachop/decomp3.ch"
#line 508 "../metachop/decomp3.ch"
                                    retATree = 1 ;
#line 508 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                    goto for_break1 ;
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                }
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                _iterator1.Current(_for_elem);
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                continue ;
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                            for_continue1 : 
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                _iterator1.Current(_for_elem);
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                _iterator1.SkipSon(1);
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                continue ;
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                            for_break1 : 
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                                break ;
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                            }
#line 509 "../metachop/decomp3.ch"
#line 509 "../metachop/decomp3.ch"
                        }
#line 509 "../metachop/decomp3.ch"
#line 514 "../metachop/decomp3.ch"
                        if ( retATree ) {
#line 514 "../metachop/decomp3.ch"
#line 515 "../metachop/decomp3.ch"
                                            ((_inter = (PPTREE)tree,1) && 
#line 515 "../metachop/decomp3.ch"
                                                (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,8),1) &&
#line 515 "../metachop/decomp3.ch"
                                                    ((list=SonTree(_inter,1)),1) &&
#line 515 "../metachop/decomp3.ch"
                                                    1),
#line 515 "../metachop/decomp3.ch"
                                                    (_inter=_storeVal[1],1),_retVal[1]) &&
#line 515 "../metachop/decomp3.ch"
                                                1);
#line 515 "../metachop/decomp3.ch"
                                            ;
#line 515 "../metachop/decomp3.ch"
#line 516 "../metachop/decomp3.ch"
                                            {
#line 516 "../metachop/decomp3.ch"
                                                /* [ metachop::LABEL
                                                    [ metachop::IDENT "_retLabel"]
                                                    [ metachop::STAT_VOID ]
                                                   ]
#line 516 "../metachop/decomp3.ch"
                                                */
#line 516 "../metachop/decomp3.ch"
                                                TheConstructor(-2,MakeString("_retLabel"),metachop::IDENT,1,metachop::STAT_VOID,0,metachop::LABEL,2,-3) ;
#line 516 "../metachop/decomp3.ch"
                                                construct = PopTree ;
#line 516 "../metachop/decomp3.ch"
                                                }
#line 516 "../metachop/decomp3.ch"
#line 516 "../metachop/decomp3.ch"
#line 517 "../metachop/decomp3.ch"
                                            {
#line 517 "../metachop/decomp3.ch"
                                                PPTREE _ptTree0= (PPTREE) 0 ;
#line 517 "../metachop/decomp3.ch"
                                                list =  AddList( list,construct);
#line 517 "../metachop/decomp3.ch"
                                            }
#line 517 "../metachop/decomp3.ch"
#line 517 "../metachop/decomp3.ch"
#line 518 "../metachop/decomp3.ch"
                                            {
#line 518 "../metachop/decomp3.ch"
                                                PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 518 "../metachop/decomp3.ch"
                                                _sonTree0 = SonTree(tree,8);
#line 518 "../metachop/decomp3.ch"
                                                {
#line 518 "../metachop/decomp3.ch"
                                                    PPTREE _ptTree1= (PPTREE) 0,_sonTree1= (PPTREE) 0 ;
#line 518 "../metachop/decomp3.ch"
                                                    _ptTree0 = ReplaceTree(_sonTree0, 1, list);
#line 518 "../metachop/decomp3.ch"
                                                }
#line 518 "../metachop/decomp3.ch"
                                                ReplaceTree(tree, 8, _ptTree0);
#line 518 "../metachop/decomp3.ch"
                                            }
#line 518 "../metachop/decomp3.ch"
#line 518 "../metachop/decomp3.ch"
#line 518 "../metachop/decomp3.ch"
                                         }
#line 518 "../metachop/decomp3.ch"
#line 518 "../metachop/decomp3.ch"
                       }
#line 518 "../metachop/decomp3.ch"
#line 521 "../metachop/decomp3.ch"
}
#line 521 "../metachop/decomp3.ch"

#line 523 "../metachop/decomp3.ch"
#line 523 "../metachop/decomp3.ch"
void GCManagerRetEnd ( PTREE tree, int retTree )
#line 523 "../metachop/decomp3.ch"
{
#line 523 "../metachop/decomp3.ch"
    register PPTREE _inter ;
#line 523 "../metachop/decomp3.ch"
#line 523 "../metachop/decomp3.ch"
#line 525 "../metachop/decomp3.ch"
    PTREE   sonde, list, construct, son, temporary, ptFather, ptStat, ptListDecl, ptDecl, list_name ;
#line 525 "../metachop/decomp3.ch"
#line 525 "../metachop/decomp3.ch"
#line 527 "../metachop/decomp3.ch"
    MY_TREE tabTree [50];
#line 527 "../metachop/decomp3.ch"
#line 528 "../metachop/decomp3.ch"
    int indTabTree, found = 0 ;
#line 528 "../metachop/decomp3.ch"
#line 529 "../metachop/decomp3.ch"
    char    *ptString ;
#line 529 "../metachop/decomp3.ch"
#line 531 "../metachop/decomp3.ch"
    if ( !cplusGen ) {
#line 531 "../metachop/decomp3.ch"
#line 532 "../metachop/decomp3.ch"
                        {
#line 532 "../metachop/decomp3.ch"
                            /* [ metachop::LABEL
                                [ metachop::IDENT "_retLabel"]
                                [ metachop::STAT_VOID ]
                               ]
#line 532 "../metachop/decomp3.ch"
                            */
#line 532 "../metachop/decomp3.ch"
                            TheConstructor(-2,MakeString("_retLabel"),metachop::IDENT,1,metachop::STAT_VOID,0,metachop::LABEL,2,-3) ;
#line 532 "../metachop/decomp3.ch"
                            sonde = PopTree ;
#line 532 "../metachop/decomp3.ch"
                            }
#line 532 "../metachop/decomp3.ch"
#line 532 "../metachop/decomp3.ch"
#line 533 "../metachop/decomp3.ch"
                        ((_inter = (PPTREE)tree,1) && 
#line 533 "../metachop/decomp3.ch"
                            (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,8),1) &&
#line 533 "../metachop/decomp3.ch"
                                ((list=SonTree(_inter,1)),1) &&
#line 533 "../metachop/decomp3.ch"
                                1),
#line 533 "../metachop/decomp3.ch"
                                (_inter=_storeVal[1],1),_retVal[1]) &&
#line 533 "../metachop/decomp3.ch"
                            1);
#line 533 "../metachop/decomp3.ch"
                        ;
#line 533 "../metachop/decomp3.ch"
#line 534 "../metachop/decomp3.ch"
                        while ( !((!list)) ) {
#line 534 "../metachop/decomp3.ch"
#line 535 "../metachop/decomp3.ch"
                                                (son=(list?list.Nextl():(PPTREE)0));
#line 535 "../metachop/decomp3.ch"
#line 535 "../metachop/decomp3.ch"
#line 536 "../metachop/decomp3.ch"
                                                if ( qcomparetree(son, sonde) ) {
#line 536 "../metachop/decomp3.ch"
#line 537 "../metachop/decomp3.ch"
found = 1 ;
#line 537 "../metachop/decomp3.ch"
#line 538 "../metachop/decomp3.ch"
(ptFather=FatherTree(son));
#line 538 "../metachop/decomp3.ch"
#line 538 "../metachop/decomp3.ch"
#line 539 "../metachop/decomp3.ch"
if ( list ) {
#line 539 "../metachop/decomp3.ch"
#line 540 "../metachop/decomp3.ch"
                ((_inter = (PPTREE)list,1) && 
#line 540 "../metachop/decomp3.ch"
                    ((son=SonTree(_inter,1)),1) &&
#line 540 "../metachop/decomp3.ch"
                    ((temporary=SonTree(_inter,2)),1) &&
#line 540 "../metachop/decomp3.ch"
                    1);
#line 540 "../metachop/decomp3.ch"
                ;
#line 540 "../metachop/decomp3.ch"
#line 541 "../metachop/decomp3.ch"
                {
#line 541 "../metachop/decomp3.ch"
                    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 541 "../metachop/decomp3.ch"
                    list = ReplaceTree(ptFather, 1, son);
#line 541 "../metachop/decomp3.ch"
                    list = ReplaceTree(ptFather, 2, temporary);
#line 541 "../metachop/decomp3.ch"
                }
#line 541 "../metachop/decomp3.ch"
#line 541 "../metachop/decomp3.ch"
#line 541 "../metachop/decomp3.ch"
             } else 
#line 542 "../metachop/decomp3.ch"
{
#line 542 "../metachop/decomp3.ch"
#line 543 "../metachop/decomp3.ch"
    {
#line 543 "../metachop/decomp3.ch"
        PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 543 "../metachop/decomp3.ch"
        if (_ptTree0= fathertree(son)) {
#line 543 "../metachop/decomp3.ch"
            int rank = ranktree(son);
#line 543 "../metachop/decomp3.ch"
            ReplaceTree(_ptTree0,rank,(PPTREE) 0 );
#line 543 "../metachop/decomp3.ch"
        }
#line 543 "../metachop/decomp3.ch"
    }
#line 543 "../metachop/decomp3.ch"
#line 543 "../metachop/decomp3.ch"
#line 543 "../metachop/decomp3.ch"
}
#line 543 "../metachop/decomp3.ch"
#line 545 "../metachop/decomp3.ch"
break ;
#line 545 "../metachop/decomp3.ch"
#line 545 "../metachop/decomp3.ch"
                                                                                   }
#line 545 "../metachop/decomp3.ch"
#line 545 "../metachop/decomp3.ch"
                                               }
#line 545 "../metachop/decomp3.ch"
#line 551 "../metachop/decomp3.ch"
                        if ( found && !((!list)) ) {
#line 551 "../metachop/decomp3.ch"
#line 551 "../metachop/decomp3.ch"
                                                        PTREE   _Baum0 ;
#line 551 "../metachop/decomp3.ch"
#line 551 "../metachop/decomp3.ch"
#line 552 "../metachop/decomp3.ch"
                                                        {
#line 552 "../metachop/decomp3.ch"
                                                            PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 552 "../metachop/decomp3.ch"
                                                            _ptRes0 = MakeTree(metachop::RETURN, 1);
#line 552 "../metachop/decomp3.ch"
                                                            {
#line 552 "../metachop/decomp3.ch"
                                                                PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 552 "../metachop/decomp3.ch"
                                                                _ptRes1 = MakeTree(META, 1);
#line 552 "../metachop/decomp3.ch"
                                                                _ptTree1 = MakeString("toto") ;
#line 552 "../metachop/decomp3.ch"
                                                                ReplaceTree(_ptRes1, 1, _ptTree1);
#line 552 "../metachop/decomp3.ch"
                                                                _ptTree0 = _ptRes1;
#line 552 "../metachop/decomp3.ch"
                                                            }
#line 552 "../metachop/decomp3.ch"
                                                            ReplaceTree(_ptRes0, 1, _ptTree0);
#line 552 "../metachop/decomp3.ch"
                                                            _Baum0 = _ptRes0;
#line 552 "../metachop/decomp3.ch"
                                                        }
#line 552 "../metachop/decomp3.ch"
#line 552 "../metachop/decomp3.ch"
#line 552 "../metachop/decomp3.ch"
                                                        ItPtree it(tree, _Baum0);
#line 552 "../metachop/decomp3.ch"
#line 553 "../metachop/decomp3.ch"
                                                        PPTREE  _for_elem ;
#line 553 "../metachop/decomp3.ch"
#line 554 "../metachop/decomp3.ch"
                                                        (sonde=list);
#line 554 "../metachop/decomp3.ch"
#line 554 "../metachop/decomp3.ch"
#line 555 "../metachop/decomp3.ch"
                                                        while ( for_elem = it++ ) {
#line 555 "../metachop/decomp3.ch"
#line 556 "../metachop/decomp3.ch"
(ptFather=FatherTree(for_elem));
#line 556 "../metachop/decomp3.ch"
#line 556 "../metachop/decomp3.ch"
#line 557 "../metachop/decomp3.ch"
(list=CopyTree(sonde));
#line 557 "../metachop/decomp3.ch"
#line 557 "../metachop/decomp3.ch"
#line 558 "../metachop/decomp3.ch"
indTabTree = 0 ;
#line 558 "../metachop/decomp3.ch"
#line 561 "../metachop/decomp3.ch"
while ( !((!ptFather)) ) {
#line 561 "../metachop/decomp3.ch"
#line 562 "../metachop/decomp3.ch"
                            if ( ((_inter = (PPTREE)ptFather,1) && 
#line 562 "../metachop/decomp3.ch"
                                    (NumberTree(_inter) == metachop::COMPOUND) &&
#line 562 "../metachop/decomp3.ch"
                                    1) ) 
#line 562 "../metachop/decomp3.ch"
#line 563 "../metachop/decomp3.ch"
                                tabTree [indTabTree++] = ptFather ;
#line 563 "../metachop/decomp3.ch"
#line 564 "../metachop/decomp3.ch"
                            (ptFather=FatherTree(ptFather));
#line 564 "../metachop/decomp3.ch"
#line 564 "../metachop/decomp3.ch"
#line 564 "../metachop/decomp3.ch"
                           }
#line 564 "../metachop/decomp3.ch"
#line 566 "../metachop/decomp3.ch"
indTabTree -= 2 ;
#line 566 "../metachop/decomp3.ch"
#line 570 "../metachop/decomp3.ch"
while ( indTabTree >= 0 ) {
#line 570 "../metachop/decomp3.ch"
#line 571 "../metachop/decomp3.ch"
                                (ptStat=tabTree [indTabTree--]);
#line 571 "../metachop/decomp3.ch"
#line 571 "../metachop/decomp3.ch"
#line 572 "../metachop/decomp3.ch"
                                ((_inter = (PPTREE)ptStat,1) && 
#line 572 "../metachop/decomp3.ch"
                                    ((ptStat=SonTree(_inter,1)),1) &&
#line 572 "../metachop/decomp3.ch"
                                    1);
#line 572 "../metachop/decomp3.ch"
                                ;
#line 572 "../metachop/decomp3.ch"
#line 573 "../metachop/decomp3.ch"
                                while ( (ptListDecl=(ptStat?ptStat.Nextl():(PPTREE)0)) ) {
#line 573 "../metachop/decomp3.ch"
#line 574 "../metachop/decomp3.ch"
if ( ((_inter = (PPTREE)ptListDecl,1) && 
#line 574 "../metachop/decomp3.ch"
        (NumberTree(_inter) == metachop::DECLARATION) &&
#line 574 "../metachop/decomp3.ch"
        (_retVal[1]=((_storeVal[1]=_inter,_inter=SonTree(_inter,2),1) &&
#line 574 "../metachop/decomp3.ch"
            (NumberTree(_inter) == metachop::TIDENT) &&
#line 574 "../metachop/decomp3.ch"
            (_retVal[2]=((_storeVal[2]=_inter,_inter=SonTree(_inter,1),1) &&
#line 574 "../metachop/decomp3.ch"
                (NumberTree(_inter) == metachop::IDENT) &&
#line 574 "../metachop/decomp3.ch"
                (!strcmp(Value(SonTree(_inter,1)),"PTREE")) &&
#line 574 "../metachop/decomp3.ch"
                1),
#line 574 "../metachop/decomp3.ch"
                (_inter=_storeVal[2],1),_retVal[2]) &&
#line 574 "../metachop/decomp3.ch"
            1),
#line 574 "../metachop/decomp3.ch"
            (_inter=_storeVal[1],1),_retVal[1]) &&
#line 574 "../metachop/decomp3.ch"
        ((ptListDecl=SonTree(_inter,3)),1) &&
#line 574 "../metachop/decomp3.ch"
        1) ) 
#line 574 "../metachop/decomp3.ch"
#line 577 "../metachop/decomp3.ch"
    while ( ((ptDecl=(ptListDecl?ptListDecl.Nextl():(PPTREE)0))) && ((_inter = (PPTREE)ptDecl,1) && 
#line 577 "../metachop/decomp3.ch"
(NumberTree(_inter) == metachop::IDENT) &&
#line 577 "../metachop/decomp3.ch"
1)  ) {
#line 577 "../metachop/decomp3.ch"
#line 579 "../metachop/decomp3.ch"
        {
#line 579 "../metachop/decomp3.ch"
            /* [ metachop::IF
                [ META "meta0"]
                [ metachop::EXP_LIST
                    [ metachop::IDENT "FreeRef"]
                    [ META "meta1"]
                ]
                [ NIL ] 
               ]
#line 579 "../metachop/decomp3.ch"
            */
#line 579 "../metachop/decomp3.ch"
            TheConstructor(-2,MakeString("meta0"),META,1,-2,MakeString("FreeRef"),metachop::IDENT,1,-2,MakeString("meta1"),META,1,metachop::EXP_LIST,2,-4,metachop::IF,3,-3) ;
#line 579 "../metachop/decomp3.ch"
            temporary = PopTree ;
#line 579 "../metachop/decomp3.ch"
            {
#line 579 "../metachop/decomp3.ch"
                register PPTREE _inter ;
#line 579 "../metachop/decomp3.ch"
#line 579 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                metarep("meta0", temporary, copytree(ptDecl));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                metarep("meta1", temporary, copytree(ptDecl));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            }
#line 1 "../metachop/decomp3.ch"
        }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 583 "../metachop/decomp3.ch"
        {
#line 583 "../metachop/decomp3.ch"
            PPTREE _ptTree0= (PPTREE) 0 ;
#line 583 "../metachop/decomp3.ch"
            list =  AddList( list,temporary);
#line 583 "../metachop/decomp3.ch"
        }
#line 583 "../metachop/decomp3.ch"
#line 583 "../metachop/decomp3.ch"
#line 584 "../metachop/decomp3.ch"
        if ( ListFind(list_name, ptDecl) ) {
#line 584 "../metachop/decomp3.ch"
#line 585 "../metachop/decomp3.ch"
                                                PrintString("Twice use of ");
#line 585 "../metachop/decomp3.ch"
#line 585 "../metachop/decomp3.ch"
                                                WriteString(Value(ptDecl));
#line 585 "../metachop/decomp3.ch"
#line 585 "../metachop/decomp3.ch"
                                                PrintString(" at different levels in ");
#line 585 "../metachop/decomp3.ch"
#line 586 "../metachop/decomp3.ch"
                                                WriteString(Value(SonTree(tree, 3)));
#line 586 "../metachop/decomp3.ch"
#line 587 "../metachop/decomp3.ch"
                                                LNewLine(1);
#line 587 "../metachop/decomp3.ch"
#line 587 "../metachop/decomp3.ch"
#line 588 "../metachop/decomp3.ch"
                                                exit(0);
#line 588 "../metachop/decomp3.ch"
#line 588 "../metachop/decomp3.ch"
                                              } else 
#line 589 "../metachop/decomp3.ch"
        {
#line 589 "../metachop/decomp3.ch"
#line 590 "../metachop/decomp3.ch"
            {
#line 590 "../metachop/decomp3.ch"
                PPTREE _ptTree0= (PPTREE) 0 ;
#line 590 "../metachop/decomp3.ch"
                _ptTree0 = StoreRef(copytree(ptDecl));
#line 590 "../metachop/decomp3.ch"
                list_name =  AddList( list_name,_ptTree0);
#line 590 "../metachop/decomp3.ch"
            }
#line 590 "../metachop/decomp3.ch"
#line 590 "../metachop/decomp3.ch"
#line 590 "../metachop/decomp3.ch"
        }
#line 590 "../metachop/decomp3.ch"
#line 590 "../metachop/decomp3.ch"
      }
#line 590 "../metachop/decomp3.ch"
#line 590 "../metachop/decomp3.ch"
                                                                                             }
#line 590 "../metachop/decomp3.ch"
#line 590 "../metachop/decomp3.ch"
                            }
#line 590 "../metachop/decomp3.ch"
#line 597 "../metachop/decomp3.ch"
if ( !retTree ) {
#line 597 "../metachop/decomp3.ch"
#line 598 "../metachop/decomp3.ch"
                    {
#line 598 "../metachop/decomp3.ch"
                        /* [ metachop::COMPOUND [ META "list"]]
#line 598 "../metachop/decomp3.ch"
                        */
#line 598 "../metachop/decomp3.ch"
                        TheConstructor(-2,MakeString("list"),META,1,metachop::COMPOUND,1,-3) ;
#line 598 "../metachop/decomp3.ch"
                        construct = PopTree ;
#line 598 "../metachop/decomp3.ch"
                        {
#line 598 "../metachop/decomp3.ch"
                            register PPTREE _inter ;
#line 598 "../metachop/decomp3.ch"
#line 598 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                            metarep("list", construct, list);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                        }
#line 1 "../metachop/decomp3.ch"
                    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 599 "../metachop/decomp3.ch"
                    {
#line 599 "../metachop/decomp3.ch"
                        PPTREE _ptTree0= (PPTREE) 0 ;
#line 599 "../metachop/decomp3.ch"
                        list =  AddList( list,for_elem);
#line 599 "../metachop/decomp3.ch"
                    }
#line 599 "../metachop/decomp3.ch"
#line 599 "../metachop/decomp3.ch"
#line 599 "../metachop/decomp3.ch"
                  } else 
#line 600 "../metachop/decomp3.ch"
{
#line 600 "../metachop/decomp3.ch"
#line 601 "../metachop/decomp3.ch"
    {
#line 601 "../metachop/decomp3.ch"
        /* [ metachop::COMPOUND
            [ LIST 
                [ metachop::DECLARATION
                    [ NIL ] 
                    [ metachop::TIDENT [ metachop::IDENT "PTREE"]]
                    [ LIST 
                        [ metachop::TYP_AFF
                            [ metachop::IDENT "_retValueTree"]
                            [ metachop::INITIALIZER
                                [ metachop::CAST
                                    [ metachop::ABST_DECLARATOR
                                        [ metachop::TIDENT [ metachop::IDENT "PTREE"]]
                                        [ NIL ] 
                                    ]
                                    [ metachop::INTEGER "0"]
                                ]
                            ]
                        ]
                    ]
                ]
                [ metachop::AFF
                    [ metachop::IDENT "_retValueTree"]
                    [ META "meta0"]
                ]
                [ metachop::COMPOUND [ META "list"]]
                [ metachop::EXP_LIST
                    [ metachop::IDENT "RemRef"]
                    [ metachop::IDENT "_retValueTree"]
                ]
                [ metachop::RETURN [ metachop::IDENT "_retValueTree"]]
            ]
           ]
#line 601 "../metachop/decomp3.ch"
        */
#line 601 "../metachop/decomp3.ch"
        TheConstructor(-4,-2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,
#line 601 "../metachop/decomp3.ch"
            -2,MakeString("_retValueTree"),metachop::IDENT,1,-2,MakeString("PTREE"),metachop::IDENT,1,metachop::TIDENT,1,-4,metachop::ABST_DECLARATOR,2,-2,MakeString("0"),metachop::INTEGER,1,metachop::CAST,2,metachop::INITIALIZER,1,metachop::TYP_AFF,2,-4,LIST,2,metachop::DECLARATION,3,
#line 601 "../metachop/decomp3.ch"
            -2,MakeString("_retValueTree"),metachop::IDENT,1,-2,MakeString("meta0"),META,1,metachop::AFF,2,-2,MakeString("list"),META,1,metachop::COMPOUND,1,
#line 601 "../metachop/decomp3.ch"
            -2,MakeString("RemRef"),metachop::IDENT,1,-2,MakeString("_retValueTree"),metachop::IDENT,1,metachop::EXP_LIST,2,-2,MakeString("_retValueTree"),metachop::IDENT,1,metachop::RETURN,1,-4,LIST,2,LIST,2,LIST,2,LIST,2,LIST,2,metachop::COMPOUND,1,-3) ;
#line 601 "../metachop/decomp3.ch"
        construct = PopTree ;
#line 601 "../metachop/decomp3.ch"
        {
#line 601 "../metachop/decomp3.ch"
            register PPTREE _inter ;
#line 601 "../metachop/decomp3.ch"
#line 601 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            metarep("meta0", construct, SonTree(for_elem, 1));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
            metarep("list", construct, list);
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
        }
#line 1 "../metachop/decomp3.ch"
    }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
}
#line 1 "../metachop/decomp3.ch"
#line 611 "../metachop/decomp3.ch"
{
#line 611 "../metachop/decomp3.ch"
    PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 611 "../metachop/decomp3.ch"
    if (_ptTree0= fathertree(for_elem)) {
#line 611 "../metachop/decomp3.ch"
        int rank = ranktree(for_elem);
#line 611 "../metachop/decomp3.ch"
        ReplaceTree(_ptTree0,rank,construct);
#line 611 "../metachop/decomp3.ch"
    }
#line 611 "../metachop/decomp3.ch"
    for_elem = construct;
#line 611 "../metachop/decomp3.ch"
}
#line 611 "../metachop/decomp3.ch"
#line 611 "../metachop/decomp3.ch"
#line 612 "../metachop/decomp3.ch"
it.Current(for_elem);
#line 612 "../metachop/decomp3.ch"
#line 613 "../metachop/decomp3.ch"
it.SkipSon(1);
#line 613 "../metachop/decomp3.ch"
#line 613 "../metachop/decomp3.ch"
                                                                                    }
#line 613 "../metachop/decomp3.ch"
#line 613 "../metachop/decomp3.ch"
                                                      }
#line 613 "../metachop/decomp3.ch"
#line 613 "../metachop/decomp3.ch"
                       } else 
#line 616 "../metachop/decomp3.ch"
    {
#line 616 "../metachop/decomp3.ch"
#line 617 "../metachop/decomp3.ch"
        if ( retTree ) {
#line 617 "../metachop/decomp3.ch"
#line 617 "../metachop/decomp3.ch"
                            PTREE   _Baum1 ;
#line 617 "../metachop/decomp3.ch"
#line 617 "../metachop/decomp3.ch"
#line 618 "../metachop/decomp3.ch"
                            {
#line 618 "../metachop/decomp3.ch"
                                PPTREE _ptTree0= (PPTREE) 0,_ptRes0= (PPTREE) 0;
#line 618 "../metachop/decomp3.ch"
                                _ptRes0 = MakeTree(metachop::RETURN, 1);
#line 618 "../metachop/decomp3.ch"
                                {
#line 618 "../metachop/decomp3.ch"
                                    PPTREE _ptTree1= (PPTREE) 0,_ptRes1= (PPTREE) 0;
#line 618 "../metachop/decomp3.ch"
                                    _ptRes1 = MakeTree(META, 1);
#line 618 "../metachop/decomp3.ch"
                                    _ptTree1 = MakeString("toto") ;
#line 618 "../metachop/decomp3.ch"
                                    ReplaceTree(_ptRes1, 1, _ptTree1);
#line 618 "../metachop/decomp3.ch"
                                    _ptTree0 = _ptRes1;
#line 618 "../metachop/decomp3.ch"
                                }
#line 618 "../metachop/decomp3.ch"
                                ReplaceTree(_ptRes0, 1, _ptTree0);
#line 618 "../metachop/decomp3.ch"
                                _Baum1 = _ptRes0;
#line 618 "../metachop/decomp3.ch"
                            }
#line 618 "../metachop/decomp3.ch"
#line 618 "../metachop/decomp3.ch"
#line 618 "../metachop/decomp3.ch"
                            ItPtree it(tree, _Baum1);
#line 618 "../metachop/decomp3.ch"
#line 619 "../metachop/decomp3.ch"
                            PPTREE  _for_elem ;
#line 619 "../metachop/decomp3.ch"
#line 620 "../metachop/decomp3.ch"
                            while ( for_elem = it++ ) {
#line 620 "../metachop/decomp3.ch"
#line 621 "../metachop/decomp3.ch"
                                                            PTREE   newVal = (PTREE)0 ;
#line 621 "../metachop/decomp3.ch"
#line 621 "../metachop/decomp3.ch"
#line 621 "../metachop/decomp3.ch"
                                                            {
#line 621 "../metachop/decomp3.ch"
                                                                /* [ metachop::EXP_LIST
                                                                    [ metachop::IDENT "StoreRef"]
                                                                    [ META "meta0"]
                                                                   ]
#line 621 "../metachop/decomp3.ch"
                                                                */
#line 621 "../metachop/decomp3.ch"
                                                                TheConstructor(-2,MakeString("StoreRef"),metachop::IDENT,1,-2,MakeString("meta0"),META,1,metachop::EXP_LIST,2,-3) ;
#line 621 "../metachop/decomp3.ch"
                                                                newVal = PopTree ;
#line 621 "../metachop/decomp3.ch"
                                                                {
#line 621 "../metachop/decomp3.ch"
                                                                    register PPTREE _inter ;
#line 621 "../metachop/decomp3.ch"
#line 621 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                    metarep("meta0", newVal, sontree(for_elem, 1));
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
                                                                }
#line 1 "../metachop/decomp3.ch"
                                                            }
#line 1 "../metachop/decomp3.ch"
#line 1 "../metachop/decomp3.ch"
#line 622 "../metachop/decomp3.ch"
                                                            {
#line 622 "../metachop/decomp3.ch"
                                                                PPTREE _ptTree0= (PPTREE) 0,_sonTree0= (PPTREE) 0 ;
#line 622 "../metachop/decomp3.ch"
                                                                ReplaceTree(for_elem, 1, newVal);
#line 622 "../metachop/decomp3.ch"
                                                            }
#line 622 "../metachop/decomp3.ch"
#line 622 "../metachop/decomp3.ch"
#line 623 "../metachop/decomp3.ch"
                                                            it.Current(newVal);
#line 623 "../metachop/decomp3.ch"
#line 624 "../metachop/decomp3.ch"
                                                            it.SkipSon(1);
#line 624 "../metachop/decomp3.ch"
#line 624 "../metachop/decomp3.ch"
                                                        }
#line 624 "../metachop/decomp3.ch"
#line 624 "../metachop/decomp3.ch"
                        }
#line 624 "../metachop/decomp3.ch"
#line 624 "../metachop/decomp3.ch"
    }
#line 624 "../metachop/decomp3.ch"
#line 628 "../metachop/decomp3.ch"
}
#line 628 "../metachop/decomp3.ch"
/*Well done my boy */ 
#line 628 "../metachop/decomp3.ch"

