- Timestamp:
- Jun 19, 2024, 3:20:39 PM (16 months ago)
- Branches:
- master
- Children:
- 57e43cd
- Parents:
- 1725989
- Location:
- src/AST
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Expr.cpp
r1725989 r525f7ad 282 282 : Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), expr( nullptr ), type( t ) {} 283 283 284 // --- CountExpr 285 286 CountExpr::CountExpr( const CodeLocation & loc, const Type * t ) 287 : Expr( loc, new BasicType( BasicKind::LongUnsignedInt) ), type( t ) {} 288 284 289 // --- AlignofExpr 285 290 -
src/AST/Expr.hpp
r1725989 r525f7ad 494 494 }; 495 495 496 class CountExpr final : public Expr { 497 public: 498 ptr<Type> type; 499 500 CountExpr( const CodeLocation & loc, const Type * t ); 501 502 const Expr * accept( Visitor & v )const override { return v.visit( this ); } 503 private: 504 CountExpr * clone() const override { return new CountExpr( *this ); } 505 MUTATE_FRIEND 506 }; 507 496 508 /// alignof expression, e.g. `alignof(int)`, `alignof 3+4` 497 509 class AlignofExpr final : public Expr { -
src/AST/Fwd.hpp
r1725989 r525f7ad 85 85 class ConstantExpr; 86 86 class SizeofExpr; 87 class CountExpr; 87 88 class AlignofExpr; 88 89 class UntypedOffsetofExpr; -
src/AST/Pass.hpp
r1725989 r525f7ad 172 172 const ast::Expr * visit( const ast::ConstantExpr * ) override final; 173 173 const ast::Expr * visit( const ast::SizeofExpr * ) override final; 174 const ast::Expr * visit( const ast::CountExpr * ) override final; 174 175 const ast::Expr * visit( const ast::AlignofExpr * ) override final; 175 176 const ast::Expr * visit( const ast::UntypedOffsetofExpr * ) override final; -
src/AST/Pass.impl.hpp
r1725989 r525f7ad 802 802 maybe_accept_top( node, &ForStmt::cond ); 803 803 maybe_accept_top( node, &ForStmt::inc ); 804 maybe_accept_top( node, &ForStmt::range_over ); 804 805 maybe_accept_as_compound( node, &ForStmt::body ); 805 806 } … … 1323 1324 } 1324 1325 1326 VISIT_END( Expr, node ); 1327 } 1328 1329 //-------------------------------------------------------------------------- 1330 // CountExpr 1331 template< typename core_t > 1332 const ast::Expr * ast::Pass< core_t >::visit( const ast::CountExpr * node ) { 1333 VISIT_START( node ); 1334 if ( __visit_children() ) { 1335 { 1336 guard_symtab guard { *this }; 1337 maybe_accept( node, &CountExpr::result ); 1338 } 1339 maybe_accept( node, &CountExpr::type ); 1340 } 1325 1341 VISIT_END( Expr, node ); 1326 1342 } -
src/AST/Print.cpp
r1725989 r525f7ad 1143 1143 } 1144 1144 1145 virtual const ast::Expr * visit( const ast::CountExpr * node ) override final { 1146 os << "Count Expression on: "; 1147 ++indent; 1148 node->type->accept( *this ); 1149 --indent; 1150 postprint( node ); 1151 return node; 1152 } 1153 1145 1154 virtual const ast::Expr * visit( const ast::AlignofExpr * node ) override final { 1146 1155 os << "Alignof Expression on: "; -
src/AST/Stmt.hpp
r1725989 r525f7ad 237 237 ptr<Expr> cond; 238 238 ptr<Expr> inc; 239 ptr<Expr> range_over; 239 240 ptr<Stmt> body; 240 241 ptr<Stmt> else_; … … 242 243 ForStmt( const CodeLocation & loc, const std::vector<ptr<Stmt>> && inits, const Expr * cond, 243 244 const Expr * inc, const Stmt * body, const std::vector<Label> && label = {} ) 244 : Stmt(loc, std::move(label)), inits(std::move(inits)), cond(cond), inc(inc), body(body), else_(nullptr) {} 245 : Stmt(loc, std::move(label)), inits(std::move(inits)), cond(cond), inc(inc), 246 range_over(nullptr), body(body), else_(nullptr) {} 245 247 246 248 ForStmt( const CodeLocation & loc, const std::vector<ptr<Stmt>> && inits, const Expr * cond, 247 249 const Expr * inc, const Stmt * body, const Stmt * else_, const std::vector<Label> && labels = {} ) 248 : Stmt(loc, std::move(labels)), inits(std::move(inits)), cond(cond), inc(inc), body(body), else_(else_) {} 250 : Stmt(loc, std::move(labels)), inits(std::move(inits)), cond(cond), inc(inc), 251 range_over(nullptr), body(body), else_(else_) {} 252 253 ForStmt( const CodeLocation & loc, const std::vector<ptr<Stmt>> && inits, const Expr * range_over, 254 const Stmt * body, const Stmt * else_ ) 255 : Stmt(loc, std::move(labels)), inits(std::move(inits)), range_over(range_over), body(body), else_(else_) {} 249 256 250 257 const Stmt * accept( Visitor & v ) const override { return v.visit( this ); } -
src/AST/Visitor.hpp
r1725989 r525f7ad 75 75 virtual const ast::Expr * visit( const ast::ConstantExpr * ) = 0; 76 76 virtual const ast::Expr * visit( const ast::SizeofExpr * ) = 0; 77 virtual const ast::Expr * visit( const ast::CountExpr * ) = 0; 77 78 virtual const ast::Expr * visit( const ast::AlignofExpr * ) = 0; 78 79 virtual const ast::Expr * visit( const ast::UntypedOffsetofExpr * ) = 0;
Note:
See TracChangeset
for help on using the changeset viewer.