Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Expr.hpp

    r99da267 rae265b55  
    5050
    5151        ParamEntry() : decl( 0 ), declptr( nullptr ), actualType( nullptr ), formalType( nullptr ), expr( nullptr ) {}
    52         ParamEntry( 
    53                 UniqueId id, const Decl * declptr, const Type * actual, const Type * formal, 
     52        ParamEntry(
     53                UniqueId id, const Decl * declptr, const Type * actual, const Type * formal,
    5454                const Expr * e )
    5555        : decl( id ), declptr( declptr ), actualType( actual ), formalType( formal ), expr( e ) {}
     
    115115                        case Empty: new(&data.resnSlots) ResnSlots{}; mode = Slots; // fallthrough
    116116                        case Slots: return data.resnSlots;
    117                         case Params: assert(!"Cannot return to resnSlots from Params");
     117                        case Params: assertf(false, "Cannot return to resnSlots from Params"); abort();
    118118                        }
    119                         return *((ResnSlots*)nullptr);
     119                        assertf(false, "unreachable");
    120120                }
    121121
     
    124124                                return data.resnSlots;
    125125                        }
    126                         assert(!"Mode was not already resnSlots");
    127                         return *((ResnSlots*)nullptr);
     126                        assertf(false, "Mode was not already resnSlots");
     127                        abort();
    128128                }
    129129
     
    134134                        case Params: return data.inferParams;
    135135                        }
    136                         assert(!"unreachable");
    137                         return *((InferredParams*)nullptr);
     136                        assertf(false, "unreachable");
    138137                }
    139138
     
    142141                                return data.inferParams;
    143142                        }
    144                         assert(!"Mode was not already Params");
    145                         return *((InferredParams*)nullptr);
     143                        assertf(false, "Mode was not already Params");
     144                        abort();
    146145                }
    147146
    148147                void set_inferParams( InferredParams && ps ) {
    149148                        switch(mode) {
    150                         case Slots: 
     149                        case Slots:
    151150                                data.resnSlots.~ResnSlots();
    152151                                // fallthrough
    153                         case Empty: 
     152                        case Empty:
    154153                                new(&data.inferParams) InferredParams{ std::move( ps ) };
    155154                                mode = Params;
     
    175174                                        data.inferParams[p.first] = std::move(p.second);
    176175                                }
    177                         } else assert(!"invalid mode");
     176                        } else assertf(false, "invalid mode");
    178177                }
    179178        };
     
    359358        MemberExpr * clone() const override { return new MemberExpr{ *this }; }
    360359        MUTATE_FRIEND
     360
     361        // Custructor overload meant only for AST conversion
     362        enum NoOpConstruction { NoOpConstructionChosen };
     363        MemberExpr( const CodeLocation & loc, const DeclWithType * mem, const Expr * agg,
     364            NoOpConstruction overloadSelector );
     365        friend class ::ConverterOldToNew;
     366        friend class ::ConverterNewToOld;
    361367};
    362368
     
    387393
    388394        ConstantExpr(
    389                 const CodeLocation & loc, const Type * ty, const std::string & r, 
     395                const CodeLocation & loc, const Type * ty, const std::string & r,
    390396                        std::optional<unsigned long long> i )
    391397        : Expr( loc, ty ), rep( r ), ival( i ) {}
     
    773779public:
    774780        ptr<Expr> expr;
    775         readonly<Node> deleteStmt;
    776 
    777         DeletedExpr( const CodeLocation & loc, const Expr * e, const Node * del )
     781        readonly<Decl> deleteStmt;
     782
     783        DeletedExpr( const CodeLocation & loc, const Expr * e, const Decl * del )
    778784        : Expr( loc, e->result ), expr( e ), deleteStmt( del ) { assert( expr->result ); }
    779785
Note: See TracChangeset for help on using the changeset viewer.