ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cpattern.h
Go to the documentation of this file.
1 
2 #ifndef BDWY_CPATTERN_H
3 #define BDWY_CPATTERN_H
4 
5 class exprPatternNode;
6 class stmtPatternNode;
7 class typePatternNode;
8 
9 // ----------------------------------------------------------------------
10 // Expression pattern node
11 // ----------------------------------------------------------------------
12 
13 class exprPatternNode : public exprNode
14 {
15 private:
16 
19  string _name;
20 
26 
27 public:
28 
31  exprPatternNode(const parserID * var);
32 
37 
38  inline string & name() { return _name; }
39  inline const string & name() const { return _name; }
40  inline void name(string nm) { _name = nm; }
41 
42  inline annVariable * variable() const { return _variable; }
44 
46 
49  void lookup(procedureAnn * procedure,
50  Annotations * annotations);
51 
54  virtual void eval() {}
55 
62 
63  virtual void visit(Visitor * the_visitor);
64  virtual void walk(Walker & the_walker);
65  virtual Node * change(Changer & the_changer, bool redispatch = false);
66 
68 
69  // -- Dataflow (No-op)
70 
71  virtual void dataflow(FlowVal * v, FlowProblem & fp) {}
72 
73  // -- Clone
74 
75  virtual Node * clone() const { return new exprPatternNode ( *this ); }
76 
77  // -- Output
78 
79  virtual void output_expr(output_context & ct, Node * par, int prec, Assoc assoc);
80 };
81 
82 // ----------------------------------------------------------------------
83 // Statement pattern node
84 // ----------------------------------------------------------------------
85 
86 class stmtPatternNode : public stmtNode
87 {
88 private:
89 
92  string _name;
93 
99 
100 public:
101 
104  stmtPatternNode(const parserID * var);
105 
110 
111  inline string & name() { return _name; }
112  inline const string & name() const { return _name; }
113  inline void name(string nm) { _name = nm; }
114 
115  inline annVariable * variable() const { return _variable; }
117 
119 
122  void lookup(procedureAnn * procedure,
123  Annotations * annotations);
124 
129 
130  virtual void visit(Visitor * the_visitor);
131  virtual void walk(Walker & the_walker);
132  virtual Node * change(Changer & the_changer, bool redispatch = false);
133 
135 
136  // -- Dataflow (No-op)
137 
138  virtual void dataflow(FlowVal * v, FlowProblem & fp) {}
139 
140  // -- Clone
141 
142  virtual Node * clone() const { return new stmtPatternNode ( *this ); }
143 
144  // -- Output
145 
146  virtual void output_stmt(output_context & ct, Node * par);
147 };
148 
149 // ----------------------------------------------------------------------
150 // Type pattern node
151 // ----------------------------------------------------------------------
152 
153 class typePatternNode : public typeNode
154 {
155 private:
156 
159  string _name;
160 
166 
167 public:
168 
171  typePatternNode(const parserID * var);
172 
177 
178  inline string & name() { return _name; }
179  inline const string & name() const { return _name; }
180  inline void name(string nm) { _name = nm; }
181 
182  inline annVariable * variable() const { return _variable; }
184 
186 
189  void lookup(procedureAnn * procedure,
190  Annotations * annotations);
191 
194  bool qualified_equal_to(typeNode * node2,
195  bool strict_toplevel, bool strict_recursive)
196  { return false; }
197 
202 
203  virtual void visit(Visitor * the_visitor);
204  virtual void walk(Walker & the_walker);
205  virtual Node * change(Changer & the_changer, bool redispatch = false);
206 
208 
209  // -- Clone
210 
211  virtual Node * clone() const { return new typePatternNode ( *this ); }
212 
213  // -- Output
214 
215  virtual void output_type(output_context & ct, Node * par, Assoc context, Type_qualifiers q);
216 
217 };
218 
219 // ----------------------------------------------------------------------
220 // Pattern expander
221 // ----------------------------------------------------------------------
222 
223 class callsiteEntry;
224 
225 class patternExpander : public Changer
226 {
227 private:
228 
234  callsiteEntry * _callsite;
235 
240  propertyAnalyzer * _analyzer;
241 
247 
248 public:
249 
250  patternExpander(callsiteEntry * callsite,
251  propertyAnalyzer * analyzer,
252  Annotations * annotations);
253 
254  virtual Node * at_expr(exprNode * the_expr, Order ord);
255  virtual Node * at_stmt(stmtNode * the_stmt, Order ord);
256  virtual Node * at_type(typeNode * the_type, Order ord);
257 };
258 
259 #endif /* BDWY_CPATTERN_H */
260