Modules |
Files |
Inheritance Tree |
Inheritance Graph |
Name Index |
Config
File: Synopsis/Parser/C++/occ/walker.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 _walker_h
16| #define _walker_h
17|
18| #include "types.h"
19|
20| class Environment;
21| class TypeInfo;
22| class Class;
23| class Parser;
24| class Ptree;
25| class PtreeDeclarator;
26|
27| class Walker : public LightObject {
28| public:
29| Walker(Parser*);
30| Walker(Parser*, Environment*);
31| Walker(Environment*);
32| Walker(Walker*);
33|
34| Ptree* Translate(Ptree*);
35| void Typeof(Ptree*, TypeInfo&);
36|
37| virtual bool IsClassWalker();
38|
39|
40| virtual Ptree* TranslatePtree(Ptree*);
41| virtual void TypeofPtree(Ptree*, TypeInfo&);
42|
43| virtual Ptree* TranslateTypedef(Ptree*);
44| virtual Ptree* TranslateTemplateDecl(Ptree*);
45| virtual Ptree* TranslateTemplateInstantiation(Ptree*);
46| virtual Ptree* TranslateTemplateInstantiation(Ptree*, Ptree*,
47| Ptree*, Class*);
48| virtual Class* MakeTemplateInstantiationMetaobject(
49| Ptree* full_class_spec, Ptree* userkey, Ptree* class_spec);
50| virtual Ptree* TranslateExternTemplate(Ptree*);
51| virtual Ptree* TranslateTemplateClass(Ptree*, Ptree*);
52| virtual Class* MakeTemplateClassMetaobject(Ptree*, Ptree*, Ptree*);
53| virtual Ptree* TranslateTemplateFunction(Ptree*, Ptree*);
54| virtual Ptree* TranslateMetaclassDecl(Ptree*);
55| virtual Ptree* TranslateLinkageSpec(Ptree*);
56| virtual Ptree* TranslateNamespaceSpec(Ptree*);
57| virtual Ptree* TranslateUsing(Ptree*);
58| virtual Ptree* TranslateDeclaration(Ptree*);
59| virtual Ptree* TranslateStorageSpecifiers(Ptree*);
60| virtual Ptree* TranslateDeclarators(Ptree*);
61| virtual Ptree* TranslateDeclarator(bool, PtreeDeclarator*);
62| static bool GetArgDeclList(PtreeDeclarator*, Ptree*&);
63| virtual Ptree* TranslateArgDeclList(bool, Ptree*, Ptree*);
64| static Ptree* TranslateArgDeclList2(bool, Environment*, bool, bool, int,
65| Ptree*);
66| static Ptree* FillArgumentName(Ptree*, Ptree*, int arg_name);
67| virtual Ptree* TranslateInitializeArgs(PtreeDeclarator*, Ptree*);
68| virtual Ptree* TranslateAssignInitializer(PtreeDeclarator*, Ptree*);
69| virtual Ptree* TranslateFunctionImplementation(Ptree*);
70| virtual Ptree* RecordArgsAndTranslateFbody(Class*, Ptree* args,
71| Ptree* body);
72| virtual Ptree* TranslateFunctionBody(Ptree*);
73| virtual Ptree* TranslateBrace(Ptree*);
74| virtual Ptree* TranslateBlock(Ptree*);
75| virtual Ptree* TranslateClassBody(Ptree*, Ptree*, Class*);
76|
77| virtual Ptree* TranslateClassSpec(Ptree*);
78| virtual Class* MakeClassMetaobject(Ptree*, Ptree*, Ptree*);
79| virtual Ptree* TranslateClassSpec(Ptree*, Ptree*, Ptree*, Class*);
80| virtual Ptree* TranslateEnumSpec(Ptree*);
81|
82| virtual Ptree* TranslateAccessSpec(Ptree*);
83| virtual Ptree* TranslateAccessDecl(Ptree*);
84| virtual Ptree* TranslateUserAccessSpec(Ptree*);
85|
86| virtual Ptree* TranslateIf(Ptree*);
87| virtual Ptree* TranslateSwitch(Ptree*);
88| virtual Ptree* TranslateWhile(Ptree*);
89| virtual Ptree* TranslateDo(Ptree*);
90| virtual Ptree* TranslateFor(Ptree*);
91| virtual Ptree* TranslateTry(Ptree*);
92| virtual Ptree* TranslateBreak(Ptree*);
93| virtual Ptree* TranslateContinue(Ptree*);
94| virtual Ptree* TranslateReturn(Ptree*);
95| virtual Ptree* TranslateGoto(Ptree*);
96| virtual Ptree* TranslateCase(Ptree*);
97| virtual Ptree* TranslateDefault(Ptree*);
98| virtual Ptree* TranslateLabel(Ptree*);
99| virtual Ptree* TranslateExprStatement(Ptree*);
100|
101| virtual Ptree* TranslateTypespecifier(Ptree*);
102|
103| virtual Ptree* TranslateComma(Ptree*);
104| virtual Ptree* TranslateAssign(Ptree*);
105| virtual Ptree* TranslateCond(Ptree*);
106| virtual Ptree* TranslateInfix(Ptree*);
107| virtual Ptree* TranslatePm(Ptree*);
108| virtual Ptree* TranslateCast(Ptree*);
109| virtual Ptree* TranslateUnary(Ptree*);
110| virtual Ptree* TranslateThrow(Ptree*);
111| virtual Ptree* TranslateSizeof(Ptree*);
112| virtual Ptree* TranslateTypeid(Ptree*);
113| virtual Ptree* TranslateTypeof(Ptree*);
114| virtual Ptree* TranslateNew(Ptree*);
115| virtual Ptree* TranslateNew2(Ptree*, Ptree*, Ptree*, Ptree*,
116| Ptree*, Ptree*, Ptree*);
117| virtual Ptree* TranslateNew3(Ptree* type);
118| virtual Ptree* TranslateDelete(Ptree*);
119| virtual Ptree* TranslateThis(Ptree*);
120| virtual Ptree* TranslateVariable(Ptree*);
121| virtual Ptree* TranslateFstyleCast(Ptree*);
122| virtual Ptree* TranslateArray(Ptree*);
123| virtual Ptree* TranslateFuncall(Ptree*);
124| virtual Ptree* TranslatePostfix(Ptree*);
125| virtual Ptree* TranslateUserStatement(Ptree*);
126| virtual Ptree* TranslateDotMember(Ptree*);
127| virtual Ptree* TranslateArrowMember(Ptree*);
128| virtual Ptree* TranslateParen(Ptree*);
129| virtual Ptree* TranslateStaticUserStatement(Ptree*);
130|
131| virtual void TypeofComma(Ptree*, TypeInfo&);
132| virtual void TypeofAssign(Ptree*, TypeInfo&);
133| virtual void TypeofCond(Ptree*, TypeInfo&);
134| virtual void TypeofInfix(Ptree*, TypeInfo&);
135| virtual void TypeofPm(Ptree*, TypeInfo&);
136| virtual void TypeofCast(Ptree*, TypeInfo&);
137| virtual void TypeofUnary(Ptree*, TypeInfo&);
138| virtual void TypeofThrow(Ptree*, TypeInfo&);
139| virtual void TypeofSizeof(Ptree*, TypeInfo&);
140| virtual void TypeofTypeid(Ptree*, TypeInfo&);
141| virtual void TypeofTypeof(Ptree*, TypeInfo&);
142| virtual void TypeofNew(Ptree*, TypeInfo&);
143| virtual void TypeofDelete(Ptree*, TypeInfo&);
144| virtual void TypeofThis(Ptree*, TypeInfo&);
145| virtual void TypeofVariable(Ptree*, TypeInfo&);
146| virtual void TypeofFstyleCast(Ptree*, TypeInfo&);
147| virtual void TypeofArray(Ptree*, TypeInfo&);
148| virtual void TypeofFuncall(Ptree*, TypeInfo&);
149| virtual void TypeofPostfix(Ptree*, TypeInfo&);
150| virtual void TypeofUserStatement(Ptree*, TypeInfo&);
151| virtual void TypeofDotMember(Ptree*, TypeInfo&);
152| virtual void TypeofArrowMember(Ptree*, TypeInfo&);
153| virtual void TypeofParen(Ptree*, TypeInfo&);
154| virtual void TypeofStaticUserStatement(Ptree*, TypeInfo&);
155|
156| public:
157| struct NameScope {
158| Environment* env;
159| Walker* walker;
160| };
161|
162| void NewScope();
163| void NewScope(Class*);
164| Environment* ExitScope();
165| void RecordBaseclassEnv(Ptree*);
166| NameScope ChangeScope(Environment*);
167| void RestoreScope(NameScope&);
168|
169| protected:
170| Ptree* TranslateDeclarators(Ptree*, bool);
171| Class* LookupMetaclass(Ptree*, Ptree*, Ptree*, bool);
172|
173| private:
174| Class* LookupBaseMetaclass(Ptree*, Ptree*, bool);
175|
176| public:
177| Ptree* TranslateNewDeclarator(Ptree* decl);
178| Ptree* TranslateNewDeclarator2(Ptree* decl);
179| Ptree* TranslateArguments(Ptree*);
180| static Ptree* GetClassOrEnumSpec(Ptree*);
181| static Ptree* GetClassTemplateSpec(Ptree*);
182| static Ptree* StripCvFromIntegralType(Ptree*);
183| static void SetDeclaratorComments(Ptree*, Ptree*);
184| static Ptree* FindLeftLeaf(Ptree* node, Ptree*& parent);
185| static void SetLeafComments(Ptree*, Ptree*);
186| static Ptree* NthDeclarator(Ptree*, int&);
187| static Ptree* FindDeclarator(Ptree*, char*, int, char*, int&,
188| Environment*);
189| static bool MatchedDeclarator(Ptree*, char*, int, char*, Environment*);
190| static bool WhichDeclarator(Ptree*, Ptree*, int&, Environment*);
191|
192| void ErrorMessage(char*, Ptree*, Ptree*);
193| void WarningMessage(char*, Ptree*, Ptree*);
194|
195| static void InaccurateErrorMessage(char*, Ptree*, Ptree*);
196| static void InaccurateWarningMessage(char*, Ptree*, Ptree*);
197|
198| static void ChangeDefaultMetaclass(char*);
199|
200| public:
201| Parser* GetParser() { return parser; }
202|
203| protected:
204| Environment* env;
205| Parser* parser;
206|
207| public:
208| static char* argument_name;
209|
210| private:
211| static Parser* default_parser;
212| static char* default_metaclass;
213| };
214|
215| #endif /* _walker_h */