Changes in src/SynTree/Declaration.h [3ed994e:e67991f]
- File:
-
- 1 edited
-
src/SynTree/Declaration.h (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/Declaration.h
r3ed994e re67991f 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Sun Sep 3 19:24:06 201713 // Update Count : 13 111 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr May 2 10:47:00 2019 13 // Update Count : 135 14 14 // 15 15 … … 19 19 #include <iosfwd> // for ostream 20 20 #include <list> // for list 21 #include <unordered_map> // for unordered_map 21 22 #include <string> // for string, operator+, allocator, to_string 22 23 … … 62 63 void fixUniqueId( void ); 63 64 virtual Declaration *clone() const override = 0; 64 virtual void accept( Visitor &v ) override = 0; 65 virtual void accept( Visitor & v ) override = 0; 66 virtual void accept( Visitor & v ) const override = 0; 65 67 virtual Declaration *acceptMutator( Mutator &m ) override = 0; 66 68 virtual void print( std::ostream &os, Indenter indent = {} ) const override = 0; 67 69 virtual void printShort( std::ostream &os, Indenter indent = {} ) const = 0; 68 70 69 static void dumpIds( std::ostream &os ); 70 static Declaration *declFromId( UniqueId id ); 71 72 private: 71 UniqueId uniqueId; 73 72 Type::StorageClasses storageClasses; 74 UniqueId uniqueId; 73 private: 75 74 }; 76 75 … … 141 140 142 141 virtual ObjectDecl *clone() const override { return new ObjectDecl( *this ); } 143 virtual void accept( Visitor &v ) override { v.visit( this ); } 142 virtual void accept( Visitor & v ) override { v.visit( this ); } 143 virtual void accept( Visitor & v ) const override { v.visit( this ); } 144 144 virtual DeclarationWithType *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 145 145 virtual void print( std::ostream &os, Indenter indent = {} ) const override; … … 166 166 CompoundStmt *get_statements() const { return statements; } 167 167 void set_statements( CompoundStmt *newValue ) { statements = newValue; } 168 bool has_body() const { return NULL != statements; } 168 169 169 170 static FunctionDecl * newFunction( const std::string & name, FunctionType * type, CompoundStmt * statements ); 170 171 171 172 virtual FunctionDecl *clone() const override { return new FunctionDecl( *this ); } 172 virtual void accept( Visitor &v ) override { v.visit( this ); } 173 virtual void accept( Visitor & v ) override { v.visit( this ); } 174 virtual void accept( Visitor & v ) const override { v.visit( this ); } 173 175 virtual DeclarationWithType *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 174 176 virtual void print( std::ostream &os, Indenter indent = {} ) const override; … … 202 204 typedef NamedTypeDecl Parent; 203 205 public: 204 enum Kind { Dtype, Ftype, Ttype };206 enum Kind { Dtype, Ftype, Ttype, NUMBER_OF_KINDS }; 205 207 206 208 Type * init; … … 211 213 TypeDecl::Kind kind; 212 214 bool isComplete; 215 213 216 Data() : kind( (TypeDecl::Kind)-1 ), isComplete( false ) {} 214 217 Data( TypeDecl * typeDecl ) : Data( typeDecl->get_kind(), typeDecl->isComplete() ) {} 215 218 Data( Kind kind, bool isComplete ) : kind( kind ), isComplete( isComplete ) {} 219 Data( const Data& d1, const Data& d2 ) 220 : kind( d1.kind ), isComplete ( d1.isComplete || d2.isComplete ) {} 221 216 222 bool operator==(const Data & other) const { return kind == other.kind && isComplete == other.isComplete; } 217 223 bool operator!=(const Data & other) const { return !(*this == other);} … … 235 241 236 242 virtual TypeDecl *clone() const override { return new TypeDecl( *this ); } 237 virtual void accept( Visitor & v ) override { v.visit( this ); }238 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); }239 virtual void print( std::ostream &os, Indenter indent = {} ) const override;240 241 private: 243 virtual void accept( Visitor & v ) override { v.visit( this ); } 244 virtual void accept( Visitor & v ) const override { v.visit( this ); } 245 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 246 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 247 242 248 Kind kind; 243 249 }; … … 254 260 255 261 virtual TypedefDecl *clone() const override { return new TypedefDecl( *this ); } 256 virtual void accept( Visitor &v ) override { v.visit( this ); } 262 virtual void accept( Visitor & v ) override { v.visit( this ); } 263 virtual void accept( Visitor & v ) const override { v.visit( this ); } 257 264 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 258 265 private: … … 266 273 bool body; 267 274 std::list< Attribute * > attributes; 275 AggregateDecl * parent = nullptr; 268 276 269 277 AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ); … … 280 288 AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; } 281 289 282 virtual void print( std::ostream &os, Indenter indent = {} ) const override ;290 virtual void print( std::ostream &os, Indenter indent = {} ) const override final; 283 291 virtual void printShort( std::ostream &os, Indenter indent = {} ) const override; 284 292 protected: … … 297 305 298 306 virtual StructDecl *clone() const override { return new StructDecl( *this ); } 299 virtual void accept( Visitor & v ) override { v.visit( this ); }300 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); }301 private: 307 virtual void accept( Visitor & v ) override { v.visit( this ); } 308 virtual void accept( Visitor & v ) const override { v.visit( this ); } 309 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 302 310 DeclarationNode::Aggregate kind; 311 private: 303 312 virtual std::string typeString() const override; 304 313 }; … … 311 320 312 321 virtual UnionDecl *clone() const override { return new UnionDecl( *this ); } 313 virtual void accept( Visitor &v ) override { v.visit( this ); } 322 virtual void accept( Visitor & v ) override { v.visit( this ); } 323 virtual void accept( Visitor & v ) const override { v.visit( this ); } 314 324 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 315 325 private: … … 326 336 327 337 virtual EnumDecl *clone() const override { return new EnumDecl( *this ); } 328 virtual void accept( Visitor &v ) override { v.visit( this ); } 329 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 330 private: 331 std::map< std::string, long long int > enumValues; 338 virtual void accept( Visitor & v ) override { v.visit( this ); } 339 virtual void accept( Visitor & v ) const override { v.visit( this ); } 340 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 341 private: 342 std::unordered_map< std::string, long long int > enumValues; 332 343 virtual std::string typeString() const override; 333 344 }; … … 342 353 343 354 virtual TraitDecl *clone() const override { return new TraitDecl( *this ); } 344 virtual void accept( Visitor &v ) override { v.visit( this ); } 345 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 346 private: 347 virtual std::string typeString() const override; 355 virtual void accept( Visitor & v ) override { v.visit( this ); } 356 virtual void accept( Visitor & v ) const override { v.visit( this ); } 357 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 358 private: 359 virtual std::string typeString() const override; 360 }; 361 362 class WithStmt : public Declaration { 363 public: 364 std::list< Expression * > exprs; 365 Statement * stmt; 366 367 WithStmt( const std::list< Expression * > & exprs, Statement * stmt ); 368 WithStmt( const WithStmt & other ); 369 virtual ~WithStmt(); 370 371 virtual WithStmt * clone() const override { return new WithStmt( *this ); } 372 virtual void accept( Visitor & v ) override { v.visit( this ); } 373 virtual void accept( Visitor & v ) const override { v.visit( this ); } 374 virtual Declaration * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 375 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 376 virtual void printShort( std::ostream & os, Indenter indent = {} ) const override { print(os, indent); } 348 377 }; 349 378 … … 360 389 361 390 virtual AsmDecl *clone() const override { return new AsmDecl( *this ); } 362 virtual void accept( Visitor &v ) override { v.visit( this ); } 391 virtual void accept( Visitor & v ) override { v.visit( this ); } 392 virtual void accept( Visitor & v ) const override { v.visit( this ); } 363 393 virtual AsmDecl *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 364 394 virtual void print( std::ostream &os, Indenter indent = {} ) const override; … … 376 406 377 407 virtual StaticAssertDecl * clone() const override { return new StaticAssertDecl( *this ); } 378 virtual void accept( Visitor &v ) override { v.visit( this ); } 408 virtual void accept( Visitor & v ) override { v.visit( this ); } 409 virtual void accept( Visitor & v ) const override { v.visit( this ); } 379 410 virtual StaticAssertDecl * acceptMutator( Mutator &m ) override { return m.mutate( this ); } 380 411 virtual void print( std::ostream &os, Indenter indent = {} ) const override;
Note:
See TracChangeset
for help on using the changeset viewer.