- Timestamp:
- Mar 9, 2020, 11:09:52 AM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 6565321
- Parents:
- 87f572e (diff), e6cfa8ff (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- src/AST
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Convert.cpp
r87f572e r5b544a6 493 493 } 494 494 495 const ast::Stmt * visit(const ast::SuspendStmt * node ) override final { 496 if ( inCache( node ) ) return nullptr; 497 auto stmt = new SuspendStmt(); 498 stmt->then = get<CompoundStmt>().accept1( node->then ); 499 switch(node->type) { 500 case ast::SuspendStmt::None : stmt->type = SuspendStmt::None ; break; 501 case ast::SuspendStmt::Coroutine: stmt->type = SuspendStmt::Coroutine; break; 502 case ast::SuspendStmt::Generator: stmt->type = SuspendStmt::Generator; break; 503 } 504 return stmtPostamble( stmt, node ); 505 } 506 495 507 const ast::Stmt * visit( const ast::WaitForStmt * node ) override final { 496 508 if ( inCache( node ) ) return nullptr; … … 1859 1871 } 1860 1872 1873 virtual void visit( const SuspendStmt * old ) override final { 1874 if ( inCache( old ) ) return; 1875 ast::SuspendStmt::Type type; 1876 switch (old->type) { 1877 case SuspendStmt::Coroutine: type = ast::SuspendStmt::Coroutine; break; 1878 case SuspendStmt::Generator: type = ast::SuspendStmt::Generator; break; 1879 case SuspendStmt::None : type = ast::SuspendStmt::None ; break; 1880 default: abort(); 1881 } 1882 this->node = new ast::SuspendStmt( 1883 old->location, 1884 GET_ACCEPT_1(then , CompoundStmt), 1885 type, 1886 GET_LABELS_V(old->labels) 1887 ); 1888 cache.emplace( old, this->node ); 1889 } 1890 1861 1891 virtual void visit( const WaitForStmt * old ) override final { 1862 1892 if ( inCache( old ) ) return; -
src/AST/Decl.hpp
r87f572e r5b544a6 259 259 260 260 bool is_coroutine() { return kind == Coroutine; } 261 bool is_monitor() { return kind == Monitor; } 262 bool is_thread() { return kind == Thread; } 261 bool is_generator() { return kind == Generator; } 262 bool is_monitor () { return kind == Monitor ; } 263 bool is_thread () { return kind == Thread ; } 263 264 264 265 const Decl * accept( Visitor & v ) const override { return v.visit( this ); } -
src/AST/Fwd.hpp
r87f572e r5b544a6 53 53 class CatchStmt; 54 54 class FinallyStmt; 55 class SuspendStmt; 55 56 class WaitForStmt; 56 57 class WithStmt; -
src/AST/Pass.hpp
r87f572e r5b544a6 111 111 const ast::Stmt * visit( const ast::CatchStmt * ) override final; 112 112 const ast::Stmt * visit( const ast::FinallyStmt * ) override final; 113 const ast::Stmt * visit( const ast::SuspendStmt * ) override final; 113 114 const ast::Stmt * visit( const ast::WaitForStmt * ) override final; 114 115 const ast::Decl * visit( const ast::WithStmt * ) override final; -
src/AST/Pass.impl.hpp
r87f572e r5b544a6 823 823 824 824 //-------------------------------------------------------------------------- 825 // FinallyStmt 826 template< typename pass_t > 827 const ast::Stmt * ast::Pass< pass_t >::visit( const ast::SuspendStmt * node ) { 828 VISIT_START( node ); 829 830 VISIT( 831 maybe_accept( node, &SuspendStmt::then ); 832 ) 833 834 VISIT_END( Stmt, node ); 835 } 836 837 //-------------------------------------------------------------------------- 825 838 // WaitForStmt 826 839 template< typename pass_t > -
src/AST/Print.cpp
r87f572e r5b544a6 674 674 safe_print( node->body ); 675 675 --indent; 676 677 return node; 678 } 679 680 virtual const ast::Stmt * visit( const ast::SuspendStmt * node ) override final { 681 os << "Suspend Statement"; 682 switch (node->type) { 683 case ast::SuspendStmt::None : os << " with implicit target"; break; 684 case ast::SuspendStmt::Generator: os << " for generator"; break; 685 case ast::SuspendStmt::Coroutine: os << " for coroutine"; break; 686 } 687 os << endl; 688 689 ++indent; 690 if(node->then) { 691 os << indent << " with post statement :" << endl; 692 safe_print( node->then ); 693 } 694 ++indent; 676 695 677 696 return node; -
src/AST/Stmt.hpp
r87f572e r5b544a6 342 342 }; 343 343 344 /// Suspend statement 345 class SuspendStmt final : public Stmt { 346 public: 347 ptr<CompoundStmt> then; 348 enum Type { None, Coroutine, Generator } type = None; 349 350 SuspendStmt( const CodeLocation & loc, const CompoundStmt * then, Type type, std::vector<Label> && labels = {} ) 351 : Stmt(loc, std::move(labels)), then(then), type(type) {} 352 353 const Stmt * accept( Visitor & v ) const override { return v.visit( this ); } 354 private: 355 SuspendStmt * clone() const override { return new SuspendStmt{ *this }; } 356 MUTATE_FRIEND 357 }; 358 344 359 /// Wait for concurrency statement `when (...) waitfor (... , ...) ... timeout(...) ... else ...` 345 360 class WaitForStmt final : public Stmt { -
src/AST/Visitor.hpp
r87f572e r5b544a6 47 47 virtual const ast::Stmt * visit( const ast::CatchStmt * ) = 0; 48 48 virtual const ast::Stmt * visit( const ast::FinallyStmt * ) = 0; 49 virtual const ast::Stmt * visit( const ast::SuspendStmt * ) = 0; 49 50 virtual const ast::Stmt * visit( const ast::WaitForStmt * ) = 0; 50 51 virtual const ast::Decl * visit( const ast::WithStmt * ) = 0;
Note:
See TracChangeset
for help on using the changeset viewer.