Changes in / [501b08a:6dbeef7]
- Files:
-
- 5 edited
-
doc/bibliography/pl.bib (modified) (2 diffs)
-
src/ControlStruct/ForExprMutator.cc (modified) (4 diffs)
-
src/ControlStruct/LabelFixer.cc (modified) (7 diffs)
-
src/ControlStruct/LabelGenerator.cc (modified) (3 diffs)
-
src/SynTree/Statement.h (modified) (23 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/bibliography/pl.bib
r501b08a r6dbeef7 2300 2300 } 2301 2301 2302 @article{Ritchie93,2303 keywords = {C, history},2304 contributer = {pabuhr@plg},2305 author = {Ritchie, Dennis M.},2306 title = {The Development of the {C} Language},2307 journal = sigplan,2308 volume = 28,2309 number = 3,2310 month = mar,2311 year = 1993,2312 pages = {201--208},2313 url = {http://doi.acm.org/10.1145/155360.155580},2314 publisher = {ACM},2315 address = {New York, NY, USA},2316 }2317 2318 2302 @article{design, 2319 2303 keywords = {Smalltalk, designing classes}, … … 2323 2307 journal = joop, 2324 2308 year = 1988, 2325 volume = 1, 2326 number = 2, 2327 pages = {22-35}, 2309 volume = 1, number = 2, pages = {22-35}, 2328 2310 comment = { 2329 2311 Abstract classes represent standard protocols. ``It is better to -
src/ControlStruct/ForExprMutator.cc
r501b08a r6dbeef7 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Mon Mar 11 22:26:52 201913 // Update Count : 1 411 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Aug 18 10:22:00 2017 13 // Update Count : 12 14 14 // 15 15 … … 21 21 22 22 namespace ControlStruct { 23 Statement * hoist( Statement * originalStmt, std::list<Statement *> &init ) {23 Statement *hoist( Statement *originalStmt, std::list<Statement *> &init ) { 24 24 // If no hoisting is needed, skip: 25 25 if ( 0 == init.size() ) { … … 29 29 // Create compound statement, move initializers outside, 30 30 // the resut of the original stays as is. 31 CompoundStmt * block = new CompoundStmt();32 std::list<Statement *> & stmts = block->get_kids();31 CompoundStmt *block = new CompoundStmt(); 32 std::list<Statement *> &stmts = block->get_kids(); 33 33 stmts.splice( stmts.end(), init ); 34 34 … … 38 38 } 39 39 40 Statement * ForExprMutator::postmutate( IfStmt *ifStmt ) {40 Statement *ForExprMutator::postmutate( IfStmt *ifStmt ) { 41 41 return hoist( ifStmt, ifStmt->initialization ); 42 42 } 43 Statement * ForExprMutator::postmutate( ForStmt *forStmt ) {43 Statement *ForExprMutator::postmutate( ForStmt *forStmt ) { 44 44 // hoist any initializer declarations to make them C89 (rather than C99) 45 45 return hoist( forStmt, forStmt->initialization ); 46 46 } 47 Statement * ForExprMutator::postmutate( WhileStmt *whileStmt ) {47 Statement *ForExprMutator::postmutate( WhileStmt *whileStmt ) { 48 48 return hoist( whileStmt, whileStmt->initialization ); 49 49 } -
src/ControlStruct/LabelFixer.cc
r501b08a r6dbeef7 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Mon Mar 11 22:26:02 201913 // Update Count : 15 911 // Last Modified By : Rob Schluntz 12 // Last Modified On : Tue Jul 28 13:32:43 2015 13 // Update Count : 156 14 14 // 15 15 … … 32 32 } 33 33 34 LabelFixer::LabelFixer( LabelGenerator * gen ) : generator ( gen ) {34 LabelFixer::LabelFixer( LabelGenerator *gen ) : generator ( gen ) { 35 35 if ( generator == 0 ) 36 36 generator = LabelGenerator::getGenerator(); … … 49 49 50 50 // prune to at most one label definition for each statement 51 void LabelFixer::previsit( Statement * stmt ) {51 void LabelFixer::previsit( Statement *stmt ) { 52 52 std::list< Label > &labels = stmt->get_labels(); 53 53 … … 58 58 } 59 59 60 void LabelFixer::previsit( BranchStmt * branchStmt ) {60 void LabelFixer::previsit( BranchStmt *branchStmt ) { 61 61 previsit( ( Statement *)branchStmt ); 62 62 … … 75 75 76 76 77 // sets the definition of the labelTable entry to be the provided statement for every label in the list78 // parameter. Happens for every kind of statement79 Label LabelFixer::setLabelsDef( std::list< Label > & llabel, Statement *definition ) {77 // sets the definition of the labelTable entry to be the provided 78 // statement for every label in the list parameter. Happens for every kind of statement 79 Label LabelFixer::setLabelsDef( std::list< Label > &llabel, Statement *definition ) { 80 80 assert( definition != 0 ); 81 81 assert( llabel.size() > 0 ); … … 100 100 } // for 101 101 102 // produce one of the labels attached to this statement to be temporarily used as the canonical label 102 // produce one of the labels attached to this statement to be 103 // temporarily used as the canonical label 103 104 return labelTable[ llabel.front() ]->get_label(); 104 105 } … … 116 117 117 118 // Builds a table that maps a label to its defining statement. 118 std::map<Label, Statement * > * LabelFixer::resolveJumps() throw ( SemanticErrorException ) {119 std::map<Label, Statement * > *LabelFixer::resolveJumps() throw ( SemanticErrorException ) { 119 120 std::map< Label, Statement * > *ret = new std::map< Label, Statement * >(); 120 121 for ( std::map< Label, Entry * >::iterator i = labelTable.begin(); i != labelTable.end(); ++i ) { -
src/ControlStruct/LabelGenerator.cc
r501b08a r6dbeef7 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Mon Mar 11 22:23:20 201913 // Update Count : 1 511 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Aug 14 14:14:00 2015 13 // Update Count : 14 14 14 // 15 15 … … 24 24 25 25 namespace ControlStruct { 26 LabelGenerator * LabelGenerator::labelGenerator = 0;26 LabelGenerator *LabelGenerator::labelGenerator = 0; 27 27 28 LabelGenerator * LabelGenerator::getGenerator() {28 LabelGenerator *LabelGenerator::getGenerator() { 29 29 if ( LabelGenerator::labelGenerator == 0 ) 30 30 LabelGenerator::labelGenerator = new LabelGenerator(); 31 31 32 return labelGenerator; 32 33 } … … 37 38 if ( stmt && ! stmt->get_labels().empty() ) { 38 39 os << "_" << stmt->get_labels().front() << "__"; 39 } // if40 } 40 41 std::string ret = os.str(); 41 42 Label l( ret ); -
src/SynTree/Statement.h
r501b08a r6dbeef7 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Mar 12 09:01:53 201913 // Update Count : 8312 // Last Modified On : Thu Mar 8 14:53:02 2018 13 // Update Count : 78 14 14 // 15 15 … … 19 19 #include <list> // for list 20 20 #include <memory> // for allocator 21 #include <vector> // for vector21 #include <vector> // for vector 22 22 23 23 #include "BaseSyntaxNode.h" // for BaseSyntaxNode … … 43 43 const std::list<Label> & get_labels() const { return labels; } 44 44 45 virtual Statement * clone() const override = 0;46 virtual void accept( Visitor & v ) override = 0;47 virtual Statement * acceptMutator( Mutator &m ) override = 0;48 virtual void print( std::ostream & os, Indenter indent = {} ) const override;45 virtual Statement *clone() const override = 0; 46 virtual void accept( Visitor &v ) override = 0; 47 virtual Statement *acceptMutator( Mutator &m ) override = 0; 48 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 49 49 }; 50 50 … … 55 55 CompoundStmt(); 56 56 CompoundStmt( std::list<Statement *> stmts ); 57 CompoundStmt( const CompoundStmt & other );57 CompoundStmt( const CompoundStmt &other ); 58 58 virtual ~CompoundStmt(); 59 59 … … 62 62 void push_front( Statement * stmt ) { kids.push_front( stmt ); } 63 63 64 virtual CompoundStmt * clone() const override { return new CompoundStmt( *this ); }65 virtual void accept( Visitor & v ) override { v.visit( this ); }66 virtual CompoundStmt * acceptMutator( Mutator &m ) override { return m.mutate( this ); }67 virtual void print( std::ostream & os, Indenter indent = {} ) const override;64 virtual CompoundStmt *clone() const override { return new CompoundStmt( *this ); } 65 virtual void accept( Visitor &v ) override { v.visit( this ); } 66 virtual CompoundStmt *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 67 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 68 68 }; 69 69 … … 72 72 NullStmt( const std::list<Label> & labels = {} ); 73 73 74 virtual NullStmt * clone() const override { return new NullStmt( *this ); }75 virtual void accept( Visitor & v ) override { v.visit( this ); }76 virtual NullStmt * acceptMutator( Mutator &m ) override { return m.mutate( this ); }77 virtual void print( std::ostream & os, Indenter indent = {} ) const override;74 virtual NullStmt *clone() const override { return new NullStmt( *this ); } 75 virtual void accept( Visitor &v ) override { v.visit( this ); } 76 virtual NullStmt *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 77 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 78 78 }; 79 79 80 80 class ExprStmt : public Statement { 81 81 public: 82 Expression * expr;83 84 ExprStmt( Expression * expr );85 ExprStmt( const ExprStmt & other );82 Expression *expr; 83 84 ExprStmt( Expression *expr ); 85 ExprStmt( const ExprStmt &other ); 86 86 virtual ~ExprStmt(); 87 87 88 Expression * get_expr() { return expr; }89 void set_expr( Expression * newValue ) { expr = newValue; }90 91 virtual ExprStmt * clone() const override { return new ExprStmt( *this ); }92 virtual void accept( Visitor & v ) override { v.visit( this ); }93 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }94 virtual void print( std::ostream & os, Indenter indent = {} ) const override;88 Expression *get_expr() { return expr; } 89 void set_expr( Expression *newValue ) { expr = newValue; } 90 91 virtual ExprStmt *clone() const override { return new ExprStmt( *this ); } 92 virtual void accept( Visitor &v ) override { v.visit( this ); } 93 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 94 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 95 95 }; 96 96 … … 98 98 public: 99 99 bool voltile; 100 Expression * instruction;100 Expression *instruction; 101 101 std::list<Expression *> output, input; 102 102 std::list<ConstantExpr *> clobber; 103 103 std::list<Label> gotolabels; 104 104 105 AsmStmt( bool voltile, Expression * instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels );106 AsmStmt( const AsmStmt & other );105 AsmStmt( bool voltile, Expression *instruction, std::list<Expression *> output, std::list<Expression *> input, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels ); 106 AsmStmt( const AsmStmt &other ); 107 107 virtual ~AsmStmt(); 108 108 … … 114 114 void set_output( const std::list<Expression *> & newValue ) { output = newValue; } 115 115 std::list<Expression *> & get_input() { return input; } 116 void set_input( const std::list<Expression *> & newValue ) { input = newValue; }116 void set_input( const std::list<Expression *> &newValue ) { input = newValue; } 117 117 std::list<ConstantExpr *> & get_clobber() { return clobber; } 118 void set_clobber( const std::list<ConstantExpr *> & newValue ) { clobber = newValue; }118 void set_clobber( const std::list<ConstantExpr *> &newValue ) { clobber = newValue; } 119 119 std::list<Label> & get_gotolabels() { return gotolabels; } 120 void set_gotolabels( const std::list<Label> & newValue ) { gotolabels = newValue; }120 void set_gotolabels( const std::list<Label> &newValue ) { gotolabels = newValue; } 121 121 122 122 virtual AsmStmt * clone() const { return new AsmStmt( *this ); } … … 141 141 class IfStmt : public Statement { 142 142 public: 143 Expression * condition;144 Statement * thenPart;145 Statement * elsePart;143 Expression *condition; 144 Statement *thenPart; 145 Statement *elsePart; 146 146 std::list<Statement *> initialization; 147 147 148 IfStmt( Expression * condition, Statement * thenPart, Statement *elsePart,148 IfStmt( Expression *condition, Statement *thenPart, Statement *elsePart, 149 149 std::list<Statement *> initialization = std::list<Statement *>() ); 150 IfStmt( const IfStmt & other );150 IfStmt( const IfStmt &other ); 151 151 virtual ~IfStmt(); 152 152 153 std::list<Statement *> & get_initialization() { return initialization; }154 Expression * get_condition() { return condition; }155 void set_condition( Expression * newValue ) { condition = newValue; }156 Statement * get_thenPart() { return thenPart; }157 void set_thenPart( Statement * newValue ) { thenPart = newValue; }158 Statement * get_elsePart() { return elsePart; }159 void set_elsePart( Statement * newValue ) { elsePart = newValue; }160 161 virtual IfStmt * clone() const override { return new IfStmt( *this ); }162 virtual void accept( Visitor & v ) override { v.visit( this ); }163 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }164 virtual void print( std::ostream & os, Indenter indent = {} ) const override;153 std::list<Statement *> &get_initialization() { return initialization; } 154 Expression *get_condition() { return condition; } 155 void set_condition( Expression *newValue ) { condition = newValue; } 156 Statement *get_thenPart() { return thenPart; } 157 void set_thenPart( Statement *newValue ) { thenPart = newValue; } 158 Statement *get_elsePart() { return elsePart; } 159 void set_elsePart( Statement *newValue ) { elsePart = newValue; } 160 161 virtual IfStmt *clone() const override { return new IfStmt( *this ); } 162 virtual void accept( Visitor &v ) override { v.visit( this ); } 163 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 164 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 165 165 }; 166 166 … … 170 170 std::list<Statement *> statements; 171 171 172 SwitchStmt( Expression * condition, const std::list<Statement *> &statements );173 SwitchStmt( const SwitchStmt & other );172 SwitchStmt( Expression *condition, const std::list<Statement *> &statements ); 173 SwitchStmt( const SwitchStmt &other ); 174 174 virtual ~SwitchStmt(); 175 175 176 Expression * get_condition() { return condition; }177 void set_condition( Expression * newValue ) { condition = newValue; }176 Expression *get_condition() { return condition; } 177 void set_condition( Expression *newValue ) { condition = newValue; } 178 178 179 179 std::list<Statement *> & get_statements() { return statements; } 180 180 181 virtual void accept( Visitor & v ) override { v.visit( this ); }182 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }183 184 virtual SwitchStmt * clone() const override { return new SwitchStmt( *this ); }185 virtual void print( std::ostream & os, Indenter indent = {} ) const override;181 virtual void accept( Visitor &v ) override { v.visit( this ); } 182 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 183 184 virtual SwitchStmt *clone() const override { return new SwitchStmt( *this ); } 185 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 186 186 187 187 }; … … 192 192 std::list<Statement *> stmts; 193 193 194 CaseStmt( Expression * conditions, const std::list<Statement *> &stmts, bool isdef = false ) throw (SemanticErrorException);195 CaseStmt( const CaseStmt & other );194 CaseStmt( Expression *conditions, const std::list<Statement *> &stmts, bool isdef = false ) throw (SemanticErrorException); 195 CaseStmt( const CaseStmt &other ); 196 196 virtual ~CaseStmt(); 197 197 … … 201 201 void set_default(bool b) { _isDefault = b; } 202 202 203 Expression * & get_condition() { return condition; }204 void set_condition( Expression * newValue ) { condition = newValue; }205 206 std::list<Statement *> & get_statements() { return stmts; }207 void set_statements( std::list<Statement *> & newValue ) { stmts = newValue; }208 209 virtual void accept( Visitor & v ) override { v.visit( this ); }210 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }211 212 virtual CaseStmt * clone() const override { return new CaseStmt( *this ); }213 virtual void print( std::ostream & os, Indenter indent = {} ) const override;203 Expression * &get_condition() { return condition; } 204 void set_condition( Expression *newValue ) { condition = newValue; } 205 206 std::list<Statement *> &get_statements() { return stmts; } 207 void set_statements( std::list<Statement *> &newValue ) { stmts = newValue; } 208 209 virtual void accept( Visitor &v ) override { v.visit( this ); } 210 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 211 212 virtual CaseStmt *clone() const override { return new CaseStmt( *this ); } 213 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 214 214 private: 215 215 bool _isDefault; … … 218 218 class WhileStmt : public Statement { 219 219 public: 220 Expression * condition;221 Statement * body;220 Expression *condition; 221 Statement *body; 222 222 std::list<Statement *> initialization; 223 223 bool isDoWhile; 224 224 225 WhileStmt( Expression * condition, Statement * body, std::list<Statement *> & initialization, bool isDoWhile = false ); 226 WhileStmt( const WhileStmt & other ); 225 WhileStmt( Expression *condition, 226 Statement *body, std::list<Statement *> & initialization, bool isDoWhile = false ); 227 WhileStmt( const WhileStmt &other ); 227 228 virtual ~WhileStmt(); 228 229 229 Expression * get_condition() { return condition; }230 void set_condition( Expression * newValue ) { condition = newValue; }231 Statement * get_body() { return body; }232 void set_body( Statement * newValue ) { body = newValue; }230 Expression *get_condition() { return condition; } 231 void set_condition( Expression *newValue ) { condition = newValue; } 232 Statement *get_body() { return body; } 233 void set_body( Statement *newValue ) { body = newValue; } 233 234 bool get_isDoWhile() { return isDoWhile; } 234 235 void set_isDoWhile( bool newValue ) { isDoWhile = newValue; } 235 236 236 virtual WhileStmt * clone() const override { return new WhileStmt( *this ); }237 virtual void accept( Visitor & v ) override { v.visit( this ); }238 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }239 virtual void print( std::ostream & os, Indenter indent = {} ) const override;237 virtual WhileStmt *clone() const override { return new WhileStmt( *this ); } 238 virtual void accept( Visitor &v ) override { v.visit( this ); } 239 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 240 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 240 241 }; 241 242 … … 243 244 public: 244 245 std::list<Statement *> initialization; 245 Expression * condition; 246 Expression * increment; 247 Statement * body; 248 249 ForStmt( std::list<Statement *> initialization, Expression * condition = 0, Expression * increment = 0, Statement * body = 0 ); 250 ForStmt( const ForStmt & other ); 246 Expression *condition; 247 Expression *increment; 248 Statement *body; 249 250 ForStmt( std::list<Statement *> initialization, 251 Expression *condition = 0, Expression *increment = 0, Statement *body = 0 ); 252 ForStmt( const ForStmt &other ); 251 253 virtual ~ForStmt(); 252 254 253 std::list<Statement *> & get_initialization() { return initialization; }254 Expression * get_condition() { return condition; }255 void set_condition( Expression * newValue ) { condition = newValue; }256 Expression * get_increment() { return increment; }257 void set_increment( Expression * newValue ) { increment = newValue; }258 Statement * get_body() { return body; }259 void set_body( Statement * newValue ) { body = newValue; }260 261 virtual ForStmt * clone() const override { return new ForStmt( *this ); }262 virtual void accept( Visitor & v ) override { v.visit( this ); }263 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }264 virtual void print( std::ostream & os, Indenter indent = {} ) const override;255 std::list<Statement *> &get_initialization() { return initialization; } 256 Expression *get_condition() { return condition; } 257 void set_condition( Expression *newValue ) { condition = newValue; } 258 Expression *get_increment() { return increment; } 259 void set_increment( Expression *newValue ) { increment = newValue; } 260 Statement *get_body() { return body; } 261 void set_body( Statement *newValue ) { body = newValue; } 262 263 virtual ForStmt *clone() const override { return new ForStmt( *this ); } 264 virtual void accept( Visitor &v ) override { v.visit( this ); } 265 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 266 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 265 267 }; 266 268 … … 272 274 const Label originalTarget; 273 275 Label target; 274 Expression * computedTarget;276 Expression *computedTarget; 275 277 Type type; 276 278 277 279 BranchStmt( Label target, Type ) throw (SemanticErrorException); 278 BranchStmt( Expression * computedTarget, Type ) throw (SemanticErrorException);280 BranchStmt( Expression *computedTarget, Type ) throw (SemanticErrorException); 279 281 280 282 Label get_originalTarget() { return originalTarget; } … … 282 284 void set_target( Label newValue ) { target = newValue; } 283 285 284 Expression * get_computedTarget() { return computedTarget; }286 Expression *get_computedTarget() { return computedTarget; } 285 287 void set_target( Expression * newValue ) { computedTarget = newValue; } 286 288 287 289 Type get_type() { return type; } 288 const char * get_typename() { return brType[ type ]; }289 290 virtual BranchStmt * clone() const override { return new BranchStmt( *this ); }291 virtual void accept( Visitor & v ) override { v.visit( this ); }292 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }293 virtual void print( std::ostream & os, Indenter indent = {} ) const override;290 const char *get_typename() { return brType[ type ]; } 291 292 virtual BranchStmt *clone() const override { return new BranchStmt( *this ); } 293 virtual void accept( Visitor &v ) override { v.visit( this ); } 294 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 295 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 294 296 private: 295 static const char * brType[];297 static const char *brType[]; 296 298 }; 297 299 298 300 class ReturnStmt : public Statement { 299 301 public: 300 Expression * expr;301 302 ReturnStmt( Expression * expr );303 ReturnStmt( const ReturnStmt & other );302 Expression *expr; 303 304 ReturnStmt( Expression *expr ); 305 ReturnStmt( const ReturnStmt &other ); 304 306 virtual ~ReturnStmt(); 305 307 306 Expression * get_expr() { return expr; }307 void set_expr( Expression * newValue ) { expr = newValue; }308 309 virtual ReturnStmt * clone() const override { return new ReturnStmt( *this ); }310 virtual void accept( Visitor & v ) override { v.visit( this ); }311 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }312 virtual void print( std::ostream & os, Indenter indent = {} ) const override;308 Expression *get_expr() { return expr; } 309 void set_expr( Expression *newValue ) { expr = newValue; } 310 311 virtual ReturnStmt *clone() const override { return new ReturnStmt( *this ); } 312 virtual void accept( Visitor &v ) override { v.visit( this ); } 313 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 314 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 313 315 }; 314 316 … … 322 324 323 325 ThrowStmt( Kind kind, Expression * expr, Expression * target = nullptr ); 324 ThrowStmt( const ThrowStmt & other );326 ThrowStmt( const ThrowStmt &other ); 325 327 virtual ~ThrowStmt(); 326 328 … … 331 333 void set_target( Expression * newTarget ) { target = newTarget; } 332 334 333 virtual ThrowStmt * clone() const override { return new ThrowStmt( *this ); }334 virtual void accept( Visitor & v ) override { v.visit( this ); }335 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }336 virtual void print( std::ostream & os, Indenter indent = {} ) const override;335 virtual ThrowStmt *clone() const override { return new ThrowStmt( *this ); } 336 virtual void accept( Visitor &v ) override { v.visit( this ); } 337 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 338 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 337 339 }; 338 340 … … 343 345 FinallyStmt * finallyBlock; 344 346 345 TryStmt( CompoundStmt * tryBlock, std::list<CatchStmt *> & handlers, FinallyStmt *finallyBlock = 0 );346 TryStmt( const TryStmt & other );347 TryStmt( CompoundStmt *tryBlock, std::list<CatchStmt *> &handlers, FinallyStmt *finallyBlock = 0 ); 348 TryStmt( const TryStmt &other ); 347 349 virtual ~TryStmt(); 348 350 349 CompoundStmt * get_block() const { return block; }350 void set_block( CompoundStmt * newValue ) { block = newValue; }351 CompoundStmt *get_block() const { return block; } 352 void set_block( CompoundStmt *newValue ) { block = newValue; } 351 353 std::list<CatchStmt *>& get_catchers() { return handlers; } 352 354 353 FinallyStmt * get_finally() const { return finallyBlock; }354 void set_finally( FinallyStmt * newValue ) { finallyBlock = newValue; }355 356 virtual TryStmt * clone() const override { return new TryStmt( *this ); }357 virtual void accept( Visitor & v ) override { v.visit( this ); }358 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }359 virtual void print( std::ostream & os, Indenter indent = {} ) const override;355 FinallyStmt *get_finally() const { return finallyBlock; } 356 void set_finally( FinallyStmt *newValue ) { finallyBlock = newValue; } 357 358 virtual TryStmt *clone() const override { return new TryStmt( *this ); } 359 virtual void accept( Visitor &v ) override { v.visit( this ); } 360 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 361 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 360 362 }; 361 363 … … 365 367 366 368 const Kind kind; 367 Declaration * decl;368 Expression * cond;369 Statement * body;370 371 CatchStmt( Kind kind, Declaration * decl,372 Expression * cond, Statement *body );373 CatchStmt( const CatchStmt & other );369 Declaration *decl; 370 Expression *cond; 371 Statement *body; 372 373 CatchStmt( Kind kind, Declaration *decl, 374 Expression *cond, Statement *body ); 375 CatchStmt( const CatchStmt &other ); 374 376 virtual ~CatchStmt(); 375 377 376 378 Kind get_kind() { return kind; } 377 Declaration * get_decl() { return decl; }378 void set_decl( Declaration * newValue ) { decl = newValue; }379 Expression * get_cond() { return cond; }380 void set_cond( Expression * newCond ) { cond = newCond; }381 Statement * get_body() { return body; }382 void set_body( Statement * newValue ) { body = newValue; }383 384 virtual CatchStmt * clone() const override { return new CatchStmt( *this ); }385 virtual void accept( Visitor & v ) override { v.visit( this ); }386 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }387 virtual void print( std::ostream & os, Indenter indent = {} ) const override;379 Declaration *get_decl() { return decl; } 380 void set_decl( Declaration *newValue ) { decl = newValue; } 381 Expression *get_cond() { return cond; } 382 void set_cond( Expression *newCond ) { cond = newCond; } 383 Statement *get_body() { return body; } 384 void set_body( Statement *newValue ) { body = newValue; } 385 386 virtual CatchStmt *clone() const override { return new CatchStmt( *this ); } 387 virtual void accept( Visitor &v ) override { v.visit( this ); } 388 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 389 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 388 390 }; 389 391 390 392 class FinallyStmt : public Statement { 391 393 public: 392 CompoundStmt * block;393 394 FinallyStmt( CompoundStmt * block );395 FinallyStmt( const FinallyStmt & other );394 CompoundStmt *block; 395 396 FinallyStmt( CompoundStmt *block ); 397 FinallyStmt( const FinallyStmt &other ); 396 398 virtual ~FinallyStmt(); 397 399 398 CompoundStmt * get_block() const { return block; }399 void set_block( CompoundStmt * newValue ) { block = newValue; }400 401 virtual FinallyStmt * clone() const override { return new FinallyStmt( *this ); }402 virtual void accept( Visitor & v ) override { v.visit( this ); }403 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }404 virtual void print( std::ostream & os, Indenter indent = {} ) const override;400 CompoundStmt *get_block() const { return block; } 401 void set_block( CompoundStmt *newValue ) { block = newValue; } 402 403 virtual FinallyStmt *clone() const override { return new FinallyStmt( *this ); } 404 virtual void accept( Visitor &v ) override { v.visit( this ); } 405 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 406 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 405 407 }; 406 408 … … 436 438 } orelse; 437 439 438 virtual WaitForStmt * clone() const override { return new WaitForStmt( *this ); }439 virtual void accept( Visitor & v ) override { v.visit( this ); }440 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }441 virtual void print( std::ostream & os, Indenter indent = {} ) const override;440 virtual WaitForStmt *clone() const override { return new WaitForStmt( *this ); } 441 virtual void accept( Visitor &v ) override { v.visit( this ); } 442 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 443 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 442 444 443 445 }; … … 462 464 class DeclStmt : public Statement { 463 465 public: 464 Declaration * decl;465 466 DeclStmt( Declaration * decl );467 DeclStmt( const DeclStmt & other );466 Declaration *decl; 467 468 DeclStmt( Declaration *decl ); 469 DeclStmt( const DeclStmt &other ); 468 470 virtual ~DeclStmt(); 469 471 470 Declaration * get_decl() const { return decl; } 471 void set_decl( Declaration * newValue ) { decl = newValue; } 472 473 virtual DeclStmt * clone() const override { return new DeclStmt( *this ); } 474 virtual void accept( Visitor & v ) override { v.visit( this ); } 475 virtual Statement * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 476 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 477 }; 478 479 480 /// represents an implicit application of a constructor or destructor. Qualifiers are replaced immediately before and 481 /// after the call so that qualified objects can be constructed with the same functions as unqualified objects. 472 Declaration *get_decl() const { return decl; } 473 void set_decl( Declaration *newValue ) { decl = newValue; } 474 475 virtual DeclStmt *clone() const override { return new DeclStmt( *this ); } 476 virtual void accept( Visitor &v ) override { v.visit( this ); } 477 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 478 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 479 }; 480 481 482 /// represents an implicit application of a constructor or destructor. Qualifiers are replaced 483 /// immediately before and after the call so that qualified objects can be constructed 484 /// with the same functions as unqualified objects. 482 485 class ImplicitCtorDtorStmt : public Statement { 483 486 public: … … 489 492 virtual ~ImplicitCtorDtorStmt(); 490 493 491 Statement * get_callStmt() const { return callStmt; }494 Statement *get_callStmt() const { return callStmt; } 492 495 void set_callStmt( Statement * newValue ) { callStmt = newValue; } 493 496 494 virtual ImplicitCtorDtorStmt * clone() const override { return new ImplicitCtorDtorStmt( *this ); }495 virtual void accept( Visitor & v ) override { v.visit( this ); }496 virtual Statement * acceptMutator( Mutator &m ) override { return m.mutate( this ); }497 virtual void print( std::ostream & os, Indenter indent = {} ) const override;497 virtual ImplicitCtorDtorStmt *clone() const override { return new ImplicitCtorDtorStmt( *this ); } 498 virtual void accept( Visitor &v ) override { v.visit( this ); } 499 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 500 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 498 501 }; 499 502
Note:
See TracChangeset
for help on using the changeset viewer.