Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Stmt.hpp

    rc570806 r37cdd97  
    2727
    2828// Must be included in *all* AST classes; should be #undef'd at the end of the file
    29 #define MUTATE_FRIEND \
    30     template<typename node_t> friend node_t * mutate(const node_t * node); \
    31         template<typename node_t> friend node_t * shallowCopy(const node_t * node);
     29#define MUTATE_FRIEND template<typename node_t> friend node_t * mutate(const node_t * node);
    3230
    3331namespace ast {
     
    344342};
    345343
     344/// Suspend statement
     345class SuspendStmt final : public Stmt {
     346public:
     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 ); }
     354private:
     355        SuspendStmt * clone() const override { return new SuspendStmt{ *this }; }
     356        MUTATE_FRIEND
     357};
     358
    346359/// Wait for concurrency statement `when (...) waitfor (... , ...) ... timeout(...) ... else ...`
    347360class WaitForStmt final : public Stmt {
     
    399412class ImplicitCtorDtorStmt final : public Stmt {
    400413public:
    401         ptr<Stmt> callStmt;
     414        readonly<Stmt> callStmt;
    402415
    403416        ImplicitCtorDtorStmt( const CodeLocation & loc, const Stmt * callStmt,
Note: See TracChangeset for help on using the changeset viewer.