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| void* LookupClientData(Class*, Ptree*);
36|
37| Ptree* GetInsertedPtree();
38| Ptree* GetAppendedPtree();
39|
40| Ptree* TranslateMetaclassDecl(Ptree* decl);
41| Ptree* TranslateClassSpec(Ptree* spec, Ptree* userkey,
42| Ptree* class_def, Class* metaobject);
43| Ptree* TranslateTemplateInstantiation(Ptree* spec, Ptree* userkey,
44| Ptree* class_def, Class* metaobject);
45| Ptree* ConstructClass(Class* metaobject);
46|
47| Ptree* ConstructAccessSpecifier(int access);
48| Ptree* ConstructMember(void* );
49|
50| Ptree* TranslateStorageSpecifiers(Ptree*);
51| Ptree* TranslateTemplateFunction(Ptree* temp_def, Ptree* impl);
52| Class* MakeMetaobjectForCfunctions();
53| Ptree* TranslateFunctionImplementation(Ptree*);
54| Ptree* MakeMemberDeclarator(bool record,
55| void* ,
56| PtreeDeclarator*);
57| Ptree* RecordArgsAndTranslateFbody(Class*, Ptree* args, Ptree* body);
58| Ptree* TranslateFunctionBody(Ptree*);
59| Ptree* TranslateBlock(Ptree*);
60| Ptree* TranslateArgDeclList(bool, Ptree*, Ptree*);
61| Ptree* TranslateInitializeArgs(PtreeDeclarator*, Ptree*);
62| Ptree* TranslateAssignInitializer(PtreeDeclarator*, Ptree*);
63| Ptree* TranslateUserAccessSpec(Ptree*);
64| Ptree* TranslateAssign(Ptree*);
65| Ptree* TranslateInfix(Ptree*);
66| Ptree* TranslateUnary(Ptree*);
67| Ptree* TranslateArray(Ptree*);
68| Ptree* TranslatePostfix(Ptree*);
69| Ptree* TranslateFuncall(Ptree*);
70| Ptree* TranslateDotMember(Ptree*);
71| Ptree* TranslateArrowMember(Ptree*);
72| Ptree* TranslateThis(Ptree*);
73| Ptree* TranslateVariable(Ptree*);
74| Ptree* TranslateUserStatement(Ptree*);
75| Ptree* TranslateStaticUserStatement(Ptree*);
76| Ptree* TranslateNew2(Ptree*, Ptree*, Ptree*, Ptree*, Ptree*,
77| Ptree*, Ptree*);
78| Ptree* TranslateDelete(Ptree*);
79|
80| private:
81| static Class* GetClassMetaobject(TypeInfo&);
82| PtreeArray* RecordMembers(Ptree*, Ptree*, Class*);
83| void RecordMemberDeclaration(Ptree* mem, PtreeArray* tspec_list);
84| Ptree* TranslateStorageSpecifiers2(Ptree* rest);
85|
86| static Ptree* CheckMemberEquiv(Ptree*, Ptree*);
87| static Ptree* CheckEquiv(Ptree* p, Ptree* q) {
88| return Ptree::Equiv(p, q) ? 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_statement, after_statement;
100| PtreeArray before_toplevel, after_toplevel;
101| PtreeArray inserted_declarations;
102| ClientDataLink* client_data;
103| };
104|
105| #endif /* _classwalk_h */