Modules | Files | Inheritance Tree | Inheritance Graph | Name Index | Config
File: Synopsis/Parser/C++/occ/classwalk.h
    1| /*
    2|   Copyright (C) 1997-2000 Shigeru Chiba, University of Tsukuba.
    3| 
    4|   Permission to use, copy, distribute and modify this software and   
    5|   its documentation for any purpose is hereby granted without fee,        
    6|   provided that the above copyright notice appear in all copies and that 
    7|   both that copyright notice and this permission notice appear in 
    8|   supporting documentation.
    9| 
   10|   Shigeru Chiba makes no representations about the suitability of this 
   11|   software for any purpose.  It is provided "as is" without express or
   12|   implied warranty.
   13| */
   14| 
   15| #ifndef _classwalk_h
   16| #define _classwalk_h
   17| 
   18| #include "ptree-core.h"
   19| #include "walker.h"
   20| 
   21| class ClassWalker : public Walker {
   22| public:
   23|     ClassWalker(Parser* p) : Walker(p) { client_data = nil; }
   24|     ClassWalker(Parser* p, Environment* e)
   25|         : Walker(p, e) { client_data = nil; }
   26|     ClassWalker(Environment* e) : Walker(e) { client_data = nil; }
   27|     ClassWalker(Walker* w) : Walker(w) { client_data = nil; }
   28| 
   29|     bool IsClassWalker();
   30|     void InsertBeforeStatement(Ptree*);
   31|     void AppendAfterStatement(Ptree*);
   32|     void InsertBeforeToplevel(Ptree*);
   33|     void AppendAfterToplevel(Ptree*);
   34|     bool InsertDeclaration(Ptree*, Class*, Ptree*, void*);
   35|     voidLookupClientData(Class*, Ptree*);
   36| 
   37|     PtreeGetInsertedPtree();
   38|     PtreeGetAppendedPtree();
   39| 
   40|     PtreeTranslateMetaclassDecl(Ptree* decl);
   41|     PtreeTranslateClassSpec(Ptree* spec, Ptree* userkey,
   42|                             Ptree* class_def, Class* metaobject);
   43|     PtreeTranslateTemplateInstantiation(Ptree* spec, Ptree* userkey,
   44|                                     Ptree* class_def, Class* metaobject);
   45|     PtreeConstructClass(Class* metaobject);
   46| 
   47|     PtreeConstructAccessSpecifier(int access);
   48|     PtreeConstructMember(void/* i.e. ChangedMemberList::Mem* */);
   49| 
   50|     PtreeTranslateStorageSpecifiers(Ptree*);
   51|     PtreeTranslateTemplateFunction(Ptree* temp_def, Ptree* impl);
   52|     Class* MakeMetaobjectForCfunctions();
   53|     PtreeTranslateFunctionImplementation(Ptree*);
   54|     PtreeMakeMemberDeclarator(bool record,
   55|                              void/* aka ChangedMemberList::Mem* */,
   56|                       PtreeDeclarator*);
   57|     PtreeRecordArgsAndTranslateFbody(Class*, Ptree* args, Ptree* body);
   58|     PtreeTranslateFunctionBody(Ptree*);
   59|     PtreeTranslateBlock(Ptree*);
   60|     PtreeTranslateArgDeclList(boolPtree*, Ptree*);
   61|     PtreeTranslateInitializeArgs(PtreeDeclarator*, Ptree*);
   62|     PtreeTranslateAssignInitializer(PtreeDeclarator*, Ptree*);
   63|     PtreeTranslateUserAccessSpec(Ptree*);
   64|     PtreeTranslateAssign(Ptree*);
   65|     PtreeTranslateInfix(Ptree*);
   66|     PtreeTranslateUnary(Ptree*);
   67|     PtreeTranslateArray(Ptree*);
   68|     PtreeTranslatePostfix(Ptree*);
   69|     PtreeTranslateFuncall(Ptree*);
   70|     PtreeTranslateDotMember(Ptree*);
   71|     PtreeTranslateArrowMember(Ptree*);
   72|     PtreeTranslateThis(Ptree*);
   73|     PtreeTranslateVariable(Ptree*);
   74|     PtreeTranslateUserStatement(Ptree*);
   75|     PtreeTranslateStaticUserStatement(Ptree*);
   76|     PtreeTranslateNew2(Ptree*, Ptree*, Ptree*, Ptree*, Ptree*,
   77|                       Ptree*, Ptree*);
   78|     PtreeTranslateDelete(Ptree*);
   79| 
   80| private:
   81|     static Class* GetClassMetaobject(TypeInfo&);
   82|     PtreeArrayRecordMembers(Ptree*, Ptree*, Class*);
   83|     void RecordMemberDeclaration(Ptree* mem, PtreeArray* tspec_list);
   84|     PtreeTranslateStorageSpecifiers2(Ptree* rest);
   85| 
   86|     static PtreeCheckMemberEquiv(Ptree*, Ptree*);
   87|     static PtreeCheckEquiv(Ptree* p, Ptree* q) {
   88|         return Ptree::Equiv(pq) ? p : q;
   89|     }
   90| 
   91| private:
   92|     struct ClientDataLink : public LightObject {
   93|         ClientDataLink*        next;
   94|         Class*        metaobject;
   95|         Ptree*        key;
   96|         void*         data;
   97|     };
   98| 
   99|     PtreeArray before_statementafter_statement;
  100|     PtreeArray before_toplevelafter_toplevel;
  101|     PtreeArray inserted_declarations;
  102|     ClientDataLinkclient_data;
  103| };
  104| 
  105| #endif /* _classwalk_h */