- Timestamp:
- Jul 12, 2019, 10:49:02 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:
- ef5b828
- Parents:
- ee6dbae
- Location:
- src/AST
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Convert.cpp
ree6dbae r7870799 1355 1355 ast::Node * node = nullptr; 1356 1356 /// cache of nodes that might be referenced by readonly<> for de-duplication 1357 std::unordered_map< BaseSyntaxNode *, ast::Node * > cache = {};1357 std::unordered_map< const BaseSyntaxNode *, ast::Node * > cache = {}; 1358 1358 1359 1359 // Local Utilities: … … 1422 1422 to<std::vector>::from( make_labels( std::move( labels ) ) ) 1423 1423 1424 static ast::CV::Qualifiers cv( Type * ty ) { return { ty->get_qualifiers().val }; }1424 static ast::CV::Qualifiers cv( const Type * ty ) { return { ty->tq.val }; } 1425 1425 1426 1426 /// returns true and sets `node` if in cache 1427 bool inCache( BaseSyntaxNode * old ) {1427 bool inCache( const BaseSyntaxNode * old ) { 1428 1428 auto it = cache.find( old ); 1429 1429 if ( it == cache.end() ) return false; … … 1434 1434 // Now all the visit functions: 1435 1435 1436 virtual void visit( ObjectDecl * old ) override final {1436 virtual void visit( const ObjectDecl * old ) override final { 1437 1437 auto&& type = GET_ACCEPT_1(type, Type); 1438 1438 auto&& init = GET_ACCEPT_1(init, Init); … … 1465 1465 } 1466 1466 1467 virtual void visit( FunctionDecl * old ) override final {1467 virtual void visit( const FunctionDecl * old ) override final { 1468 1468 if ( inCache( old ) ) return; 1469 1469 auto decl = new ast::FunctionDecl{ … … 1498 1498 } 1499 1499 1500 virtual void visit( StructDecl * old ) override final {1500 virtual void visit( const StructDecl * old ) override final { 1501 1501 if ( inCache( old ) ) return; 1502 1502 auto decl = new ast::StructDecl( … … 1523 1523 } 1524 1524 1525 virtual void visit( UnionDecl * old ) override final {1525 virtual void visit( const UnionDecl * old ) override final { 1526 1526 if ( inCache( old ) ) return; 1527 1527 auto decl = new ast::UnionDecl( … … 1543 1543 } 1544 1544 1545 virtual void visit( EnumDecl * old ) override final {1545 virtual void visit( const EnumDecl * old ) override final { 1546 1546 if ( inCache( old ) ) return; 1547 1547 auto decl = new ast::EnumDecl( … … 1563 1563 } 1564 1564 1565 virtual void visit( TraitDecl * old ) override final {1565 virtual void visit( const TraitDecl * old ) override final { 1566 1566 if ( inCache( old ) ) return; 1567 1567 auto decl = new ast::TraitDecl( … … 1583 1583 } 1584 1584 1585 virtual void visit( TypeDecl * old ) override final {1585 virtual void visit( const TypeDecl * old ) override final { 1586 1586 if ( inCache( old ) ) return; 1587 1587 auto decl = new ast::TypeDecl{ … … 1603 1603 } 1604 1604 1605 virtual void visit( TypedefDecl * old ) override final {1605 virtual void visit( const TypedefDecl * old ) override final { 1606 1606 auto decl = new ast::TypedefDecl( 1607 1607 old->location, … … 1620 1620 } 1621 1621 1622 virtual void visit( AsmDecl * old ) override final {1622 virtual void visit( const AsmDecl * old ) override final { 1623 1623 auto decl = new ast::AsmDecl{ 1624 1624 old->location, … … 1632 1632 } 1633 1633 1634 virtual void visit( StaticAssertDecl * old ) override final {1634 virtual void visit( const StaticAssertDecl * old ) override final { 1635 1635 auto decl = new ast::StaticAssertDecl{ 1636 1636 old->location, … … 1645 1645 } 1646 1646 1647 virtual void visit( CompoundStmt * old ) override final {1647 virtual void visit( const CompoundStmt * old ) override final { 1648 1648 if ( inCache( old ) ) return; 1649 1649 auto stmt = new ast::CompoundStmt( … … 1657 1657 } 1658 1658 1659 virtual void visit( ExprStmt * old ) override final {1659 virtual void visit( const ExprStmt * old ) override final { 1660 1660 if ( inCache( old ) ) return; 1661 1661 this->node = new ast::ExprStmt( … … 1667 1667 } 1668 1668 1669 virtual void visit( AsmStmt * old ) override final {1669 virtual void visit( const AsmStmt * old ) override final { 1670 1670 if ( inCache( old ) ) return; 1671 1671 this->node = new ast::AsmStmt( … … 1682 1682 } 1683 1683 1684 virtual void visit( DirectiveStmt * old ) override final {1684 virtual void visit( const DirectiveStmt * old ) override final { 1685 1685 if ( inCache( old ) ) return; 1686 1686 this->node = new ast::DirectiveStmt( … … 1692 1692 } 1693 1693 1694 virtual void visit( IfStmt * old ) override final {1694 virtual void visit( const IfStmt * old ) override final { 1695 1695 if ( inCache( old ) ) return; 1696 1696 this->node = new ast::IfStmt( … … 1705 1705 } 1706 1706 1707 virtual void visit( SwitchStmt * old ) override final {1707 virtual void visit( const SwitchStmt * old ) override final { 1708 1708 if ( inCache( old ) ) return; 1709 1709 this->node = new ast::SwitchStmt( … … 1716 1716 } 1717 1717 1718 virtual void visit( CaseStmt * old ) override final {1718 virtual void visit( const CaseStmt * old ) override final { 1719 1719 if ( inCache( old ) ) return; 1720 1720 this->node = new ast::CaseStmt( … … 1727 1727 } 1728 1728 1729 virtual void visit( WhileStmt * old ) override final {1729 virtual void visit( const WhileStmt * old ) override final { 1730 1730 if ( inCache( old ) ) return; 1731 1731 this->node = new ast::WhileStmt( … … 1740 1740 } 1741 1741 1742 virtual void visit( ForStmt * old ) override final {1742 virtual void visit( const ForStmt * old ) override final { 1743 1743 if ( inCache( old ) ) return; 1744 1744 this->node = new ast::ForStmt( … … 1753 1753 } 1754 1754 1755 virtual void visit( BranchStmt * old ) override final {1755 virtual void visit( const BranchStmt * old ) override final { 1756 1756 if ( inCache( old ) ) return; 1757 1757 if (old->computedTarget) { … … 1790 1790 } 1791 1791 1792 virtual void visit( ReturnStmt * old ) override final {1792 virtual void visit( const ReturnStmt * old ) override final { 1793 1793 if ( inCache( old ) ) return; 1794 1794 this->node = new ast::ReturnStmt( … … 1800 1800 } 1801 1801 1802 virtual void visit( ThrowStmt * old ) override final {1802 virtual void visit( const ThrowStmt * old ) override final { 1803 1803 if ( inCache( old ) ) return; 1804 1804 ast::ExceptionKind kind; … … 1824 1824 } 1825 1825 1826 virtual void visit( TryStmt * old ) override final {1826 virtual void visit( const TryStmt * old ) override final { 1827 1827 if ( inCache( old ) ) return; 1828 1828 this->node = new ast::TryStmt( … … 1836 1836 } 1837 1837 1838 virtual void visit( CatchStmt * old ) override final {1838 virtual void visit( const CatchStmt * old ) override final { 1839 1839 if ( inCache( old ) ) return; 1840 1840 ast::ExceptionKind kind; … … 1861 1861 } 1862 1862 1863 virtual void visit( FinallyStmt * old ) override final {1863 virtual void visit( const FinallyStmt * old ) override final { 1864 1864 if ( inCache( old ) ) return; 1865 1865 this->node = new ast::FinallyStmt( … … 1871 1871 } 1872 1872 1873 virtual void visit( WaitForStmt * old ) override final {1873 virtual void visit( const WaitForStmt * old ) override final { 1874 1874 if ( inCache( old ) ) return; 1875 1875 ast::WaitForStmt * stmt = new ast::WaitForStmt( … … 1903 1903 } 1904 1904 1905 virtual void visit( WithStmt * old ) override final {1905 virtual void visit( const WithStmt * old ) override final { 1906 1906 if ( inCache( old ) ) return; 1907 1907 this->node = new ast::WithStmt( … … 1914 1914 } 1915 1915 1916 virtual void visit( NullStmt * old ) override final {1916 virtual void visit( const NullStmt * old ) override final { 1917 1917 if ( inCache( old ) ) return; 1918 1918 this->node = new ast::NullStmt( … … 1923 1923 } 1924 1924 1925 virtual void visit( DeclStmt * old ) override final {1925 virtual void visit( const DeclStmt * old ) override final { 1926 1926 if ( inCache( old ) ) return; 1927 1927 this->node = new ast::DeclStmt( … … 1933 1933 } 1934 1934 1935 virtual void visit( ImplicitCtorDtorStmt * old ) override final {1935 virtual void visit( const ImplicitCtorDtorStmt * old ) override final { 1936 1936 if ( inCache( old ) ) return; 1937 1937 auto stmt = new ast::ImplicitCtorDtorStmt( … … 1990 1990 } 1991 1991 1992 ast::Expr * visitBaseExpr_SkipResultType( Expression * old, ast::Expr * nw) {1992 ast::Expr * visitBaseExpr_SkipResultType( const Expression * old, ast::Expr * nw) { 1993 1993 1994 1994 nw->env = convertTypeSubstitution(old->env); … … 2000 2000 } 2001 2001 2002 ast::Expr * visitBaseExpr( Expression * old, ast::Expr * nw) {2002 ast::Expr * visitBaseExpr( const Expression * old, ast::Expr * nw) { 2003 2003 2004 2004 nw->result = GET_ACCEPT_1(result, Type); … … 2006 2006 } 2007 2007 2008 virtual void visit( ApplicationExpr * old ) override final {2008 virtual void visit( const ApplicationExpr * old ) override final { 2009 2009 this->node = visitBaseExpr( old, 2010 2010 new ast::ApplicationExpr( … … 2016 2016 } 2017 2017 2018 virtual void visit( UntypedExpr * old ) override final {2018 virtual void visit( const UntypedExpr * old ) override final { 2019 2019 this->node = visitBaseExpr( old, 2020 2020 new ast::UntypedExpr( … … 2026 2026 } 2027 2027 2028 virtual void visit( NameExpr * old ) override final {2028 virtual void visit( const NameExpr * old ) override final { 2029 2029 this->node = visitBaseExpr( old, 2030 2030 new ast::NameExpr( … … 2035 2035 } 2036 2036 2037 virtual void visit( CastExpr * old ) override final {2037 virtual void visit( const CastExpr * old ) override final { 2038 2038 this->node = visitBaseExpr( old, 2039 2039 new ast::CastExpr( … … 2045 2045 } 2046 2046 2047 virtual void visit( KeywordCastExpr * old) override final {2047 virtual void visit( const KeywordCastExpr * old) override final { 2048 2048 ast::KeywordCastExpr::Target castTarget = ast::KeywordCastExpr::NUMBER_OF_TARGETS; 2049 2049 switch (old->target) { … … 2070 2070 } 2071 2071 2072 virtual void visit( VirtualCastExpr * old ) override final {2072 virtual void visit( const VirtualCastExpr * old ) override final { 2073 2073 this->node = visitBaseExpr_SkipResultType( old, 2074 2074 new ast::VirtualCastExpr( … … 2080 2080 } 2081 2081 2082 virtual void visit( AddressExpr * old ) override final {2082 virtual void visit( const AddressExpr * old ) override final { 2083 2083 this->node = visitBaseExpr( old, 2084 2084 new ast::AddressExpr( … … 2089 2089 } 2090 2090 2091 virtual void visit( LabelAddressExpr * old ) override final {2091 virtual void visit( const LabelAddressExpr * old ) override final { 2092 2092 this->node = visitBaseExpr( old, 2093 2093 new ast::LabelAddressExpr( … … 2098 2098 } 2099 2099 2100 virtual void visit( UntypedMemberExpr * old ) override final {2100 virtual void visit( const UntypedMemberExpr * old ) override final { 2101 2101 this->node = visitBaseExpr( old, 2102 2102 new ast::UntypedMemberExpr( … … 2108 2108 } 2109 2109 2110 virtual void visit( MemberExpr * old ) override final {2110 virtual void visit( const MemberExpr * old ) override final { 2111 2111 this->node = visitBaseExpr( old, 2112 2112 new ast::MemberExpr( … … 2118 2118 } 2119 2119 2120 virtual void visit( VariableExpr * old ) override final {2120 virtual void visit( const VariableExpr * old ) override final { 2121 2121 auto expr = new ast::VariableExpr( 2122 2122 old->location … … 2129 2129 } 2130 2130 2131 virtual void visit( ConstantExpr * old ) override final {2131 virtual void visit( const ConstantExpr * old ) override final { 2132 2132 ast::ConstantExpr *rslt = new ast::ConstantExpr( 2133 2133 old->location, 2134 2134 GET_ACCEPT_1(result, Type), 2135 old->constant. get_value(),2135 old->constant.rep, 2136 2136 old->constant.ival 2137 2137 ); 2138 rslt->underlyer = getAccept1< ast::Type, Type* >( old->constant. get_type());2138 rslt->underlyer = getAccept1< ast::Type, Type* >( old->constant.type ); 2139 2139 this->node = visitBaseExpr( old, rslt ); 2140 2140 } 2141 2141 2142 virtual void visit( SizeofExpr * old ) override final {2142 virtual void visit( const SizeofExpr * old ) override final { 2143 2143 assert (old->expr || old->type); 2144 2144 assert (! (old->expr && old->type)); … … 2161 2161 } 2162 2162 2163 virtual void visit( AlignofExpr * old ) override final {2163 virtual void visit( const AlignofExpr * old ) override final { 2164 2164 assert (old->expr || old->type); 2165 2165 assert (! (old->expr && old->type)); … … 2182 2182 } 2183 2183 2184 virtual void visit( UntypedOffsetofExpr * old ) override final {2184 virtual void visit( const UntypedOffsetofExpr * old ) override final { 2185 2185 this->node = visitBaseExpr( old, 2186 2186 new ast::UntypedOffsetofExpr( … … 2192 2192 } 2193 2193 2194 virtual void visit( OffsetofExpr * old ) override final {2194 virtual void visit( const OffsetofExpr * old ) override final { 2195 2195 this->node = visitBaseExpr( old, 2196 2196 new ast::OffsetofExpr( … … 2202 2202 } 2203 2203 2204 virtual void visit( OffsetPackExpr * old ) override final {2204 virtual void visit( const OffsetPackExpr * old ) override final { 2205 2205 this->node = visitBaseExpr( old, 2206 2206 new ast::OffsetPackExpr( … … 2211 2211 } 2212 2212 2213 virtual void visit( LogicalExpr * old ) override final {2213 virtual void visit( const LogicalExpr * old ) override final { 2214 2214 this->node = visitBaseExpr( old, 2215 2215 new ast::LogicalExpr( … … 2224 2224 } 2225 2225 2226 virtual void visit( ConditionalExpr * old ) override final {2226 virtual void visit( const ConditionalExpr * old ) override final { 2227 2227 this->node = visitBaseExpr( old, 2228 2228 new ast::ConditionalExpr( … … 2235 2235 } 2236 2236 2237 virtual void visit( CommaExpr * old ) override final {2237 virtual void visit( const CommaExpr * old ) override final { 2238 2238 this->node = visitBaseExpr( old, 2239 2239 new ast::CommaExpr( … … 2245 2245 } 2246 2246 2247 virtual void visit( TypeExpr * old ) override final {2247 virtual void visit( const TypeExpr * old ) override final { 2248 2248 this->node = visitBaseExpr( old, 2249 2249 new ast::TypeExpr( … … 2254 2254 } 2255 2255 2256 virtual void visit( AsmExpr * old ) override final {2256 virtual void visit( const AsmExpr * old ) override final { 2257 2257 this->node = visitBaseExpr( old, 2258 2258 new ast::AsmExpr( … … 2265 2265 } 2266 2266 2267 virtual void visit( ImplicitCopyCtorExpr * old ) override final {2267 virtual void visit( const ImplicitCopyCtorExpr * old ) override final { 2268 2268 auto rslt = new ast::ImplicitCopyCtorExpr( 2269 2269 old->location, … … 2274 2274 } 2275 2275 2276 virtual void visit( ConstructorExpr * old ) override final {2276 virtual void visit( const ConstructorExpr * old ) override final { 2277 2277 this->node = visitBaseExpr( old, 2278 2278 new ast::ConstructorExpr( … … 2283 2283 } 2284 2284 2285 virtual void visit( CompoundLiteralExpr * old ) override final {2285 virtual void visit( const CompoundLiteralExpr * old ) override final { 2286 2286 this->node = visitBaseExpr_SkipResultType( old, 2287 2287 new ast::CompoundLiteralExpr( … … 2293 2293 } 2294 2294 2295 virtual void visit( RangeExpr * old ) override final {2295 virtual void visit( const RangeExpr * old ) override final { 2296 2296 this->node = visitBaseExpr( old, 2297 2297 new ast::RangeExpr( … … 2303 2303 } 2304 2304 2305 virtual void visit( UntypedTupleExpr * old ) override final {2305 virtual void visit( const UntypedTupleExpr * old ) override final { 2306 2306 this->node = visitBaseExpr( old, 2307 2307 new ast::UntypedTupleExpr( … … 2312 2312 } 2313 2313 2314 virtual void visit( TupleExpr * old ) override final {2314 virtual void visit( const TupleExpr * old ) override final { 2315 2315 this->node = visitBaseExpr( old, 2316 2316 new ast::TupleExpr( … … 2321 2321 } 2322 2322 2323 virtual void visit( TupleIndexExpr * old ) override final {2323 virtual void visit( const TupleIndexExpr * old ) override final { 2324 2324 this->node = visitBaseExpr( old, 2325 2325 new ast::TupleIndexExpr( … … 2331 2331 } 2332 2332 2333 virtual void visit( TupleAssignExpr * old ) override final {2333 virtual void visit( const TupleAssignExpr * old ) override final { 2334 2334 this->node = visitBaseExpr_SkipResultType( old, 2335 2335 new ast::TupleAssignExpr( … … 2341 2341 } 2342 2342 2343 virtual void visit( StmtExpr * old ) override final {2343 virtual void visit( const StmtExpr * old ) override final { 2344 2344 auto rslt = new ast::StmtExpr( 2345 2345 old->location, … … 2352 2352 } 2353 2353 2354 virtual void visit( UniqueExpr * old ) override final {2354 virtual void visit( const UniqueExpr * old ) override final { 2355 2355 auto rslt = new ast::UniqueExpr( 2356 2356 old->location, … … 2364 2364 } 2365 2365 2366 virtual void visit( UntypedInitExpr * old ) override final {2366 virtual void visit( const UntypedInitExpr * old ) override final { 2367 2367 std::deque<ast::InitAlternative> initAlts; 2368 2368 for (auto ia : old->initAlts) { … … 2381 2381 } 2382 2382 2383 virtual void visit( InitExpr * old ) override final {2383 virtual void visit( const InitExpr * old ) override final { 2384 2384 this->node = visitBaseExpr( old, 2385 2385 new ast::InitExpr( … … 2391 2391 } 2392 2392 2393 virtual void visit( DeletedExpr * old ) override final {2393 virtual void visit( const DeletedExpr * old ) override final { 2394 2394 this->node = visitBaseExpr( old, 2395 2395 new ast::DeletedExpr( … … 2403 2403 } 2404 2404 2405 virtual void visit( DefaultArgExpr * old ) override final {2405 virtual void visit( const DefaultArgExpr * old ) override final { 2406 2406 this->node = visitBaseExpr( old, 2407 2407 new ast::DefaultArgExpr( … … 2412 2412 } 2413 2413 2414 virtual void visit( GenericExpr * old ) override final {2414 virtual void visit( const GenericExpr * old ) override final { 2415 2415 std::vector<ast::GenericExpr::Association> associations; 2416 2416 for (auto association : old->associations) { … … 2429 2429 } 2430 2430 2431 void visitType( Type * old, ast::Type * type ) {2431 void visitType( const Type * old, ast::Type * type ) { 2432 2432 // Some types do this in their constructor so add a check. 2433 2433 if ( !old->attributes.empty() && type->attributes.empty() ) { … … 2437 2437 } 2438 2438 2439 virtual void visit( VoidType * old ) override final {2439 virtual void visit( const VoidType * old ) override final { 2440 2440 visitType( old, new ast::VoidType{ cv( old ) } ); 2441 2441 } 2442 2442 2443 virtual void visit( BasicType * old ) override final {2443 virtual void visit( const BasicType * old ) override final { 2444 2444 auto type = new ast::BasicType{ (ast::BasicType::Kind)(unsigned)old->kind, cv( old ) }; 2445 2445 // I believe this should always be a BasicType. … … 2450 2450 } 2451 2451 2452 virtual void visit( PointerType * old ) override final {2452 virtual void visit( const PointerType * old ) override final { 2453 2453 visitType( old, new ast::PointerType{ 2454 2454 GET_ACCEPT_1( base, Type ), … … 2460 2460 } 2461 2461 2462 virtual void visit( ArrayType * old ) override final {2462 virtual void visit( const ArrayType * old ) override final { 2463 2463 visitType( old, new ast::ArrayType{ 2464 2464 GET_ACCEPT_1( base, Type ), … … 2470 2470 } 2471 2471 2472 virtual void visit( ReferenceType * old ) override final {2472 virtual void visit( const ReferenceType * old ) override final { 2473 2473 visitType( old, new ast::ReferenceType{ 2474 2474 GET_ACCEPT_1( base, Type ), … … 2477 2477 } 2478 2478 2479 virtual void visit( QualifiedType * old ) override final {2479 virtual void visit( const QualifiedType * old ) override final { 2480 2480 visitType( old, new ast::QualifiedType{ 2481 2481 GET_ACCEPT_1( parent, Type ), … … 2485 2485 } 2486 2486 2487 virtual void visit( FunctionType * old ) override final {2487 virtual void visit( const FunctionType * old ) override final { 2488 2488 auto ty = new ast::FunctionType { 2489 2489 (ast::ArgumentFlag)old->isVarArgs, … … 2496 2496 } 2497 2497 2498 void postvisit( ReferenceToType * old, ast::ReferenceToType * ty ) {2498 void postvisit( const ReferenceToType * old, ast::ReferenceToType * ty ) { 2499 2499 ty->forall = GET_ACCEPT_V( forall, TypeDecl ); 2500 2500 ty->params = GET_ACCEPT_V( parameters, Expr ); … … 2503 2503 } 2504 2504 2505 virtual void visit( StructInstType * old ) override final {2505 virtual void visit( const StructInstType * old ) override final { 2506 2506 ast::StructInstType * ty; 2507 2507 if ( old->baseStruct ) { … … 2521 2521 } 2522 2522 2523 virtual void visit( UnionInstType * old ) override final {2523 virtual void visit( const UnionInstType * old ) override final { 2524 2524 ast::UnionInstType * ty; 2525 2525 if ( old->baseUnion ) { … … 2539 2539 } 2540 2540 2541 virtual void visit( EnumInstType * old ) override final {2541 virtual void visit( const EnumInstType * old ) override final { 2542 2542 ast::EnumInstType * ty; 2543 2543 if ( old->baseEnum ) { … … 2557 2557 } 2558 2558 2559 virtual void visit( TraitInstType * old ) override final {2559 virtual void visit( const TraitInstType * old ) override final { 2560 2560 ast::TraitInstType * ty; 2561 2561 if ( old->baseTrait ) { … … 2575 2575 } 2576 2576 2577 virtual void visit( TypeInstType * old ) override final {2577 virtual void visit( const TypeInstType * old ) override final { 2578 2578 ast::TypeInstType * ty; 2579 2579 if ( old->baseType ) { … … 2595 2595 } 2596 2596 2597 virtual void visit( TupleType * old ) override final {2597 virtual void visit( const TupleType * old ) override final { 2598 2598 visitType( old, new ast::TupleType{ 2599 2599 GET_ACCEPT_V( types, Type ), … … 2603 2603 } 2604 2604 2605 virtual void visit( TypeofType * old ) override final {2605 virtual void visit( const TypeofType * old ) override final { 2606 2606 visitType( old, new ast::TypeofType{ 2607 2607 GET_ACCEPT_1( expr, Expr ), … … 2611 2611 } 2612 2612 2613 virtual void visit( AttrType * ) override final {2613 virtual void visit( const AttrType * ) override final { 2614 2614 assertf( false, "AttrType deprecated in new AST." ); 2615 2615 } 2616 2616 2617 virtual void visit( VarArgsType * old ) override final {2617 virtual void visit( const VarArgsType * old ) override final { 2618 2618 visitType( old, new ast::VarArgsType{ cv( old ) } ); 2619 2619 } 2620 2620 2621 virtual void visit( ZeroType * old ) override final {2621 virtual void visit( const ZeroType * old ) override final { 2622 2622 visitType( old, new ast::ZeroType{ cv( old ) } ); 2623 2623 } 2624 2624 2625 virtual void visit( OneType * old ) override final {2625 virtual void visit( const OneType * old ) override final { 2626 2626 visitType( old, new ast::OneType{ cv( old ) } ); 2627 2627 } 2628 2628 2629 virtual void visit( GlobalScopeType * old ) override final {2629 virtual void visit( const GlobalScopeType * old ) override final { 2630 2630 visitType( old, new ast::GlobalScopeType{} ); 2631 2631 } 2632 2632 2633 virtual void visit( Designation * old ) override final {2633 virtual void visit( const Designation * old ) override final { 2634 2634 this->node = new ast::Designation( 2635 2635 old->location, … … 2638 2638 } 2639 2639 2640 virtual void visit( SingleInit * old ) override final {2640 virtual void visit( const SingleInit * old ) override final { 2641 2641 this->node = new ast::SingleInit( 2642 2642 old->location, … … 2646 2646 } 2647 2647 2648 virtual void visit( ListInit * old ) override final {2648 virtual void visit( const ListInit * old ) override final { 2649 2649 this->node = new ast::ListInit( 2650 2650 old->location, … … 2655 2655 } 2656 2656 2657 virtual void visit( ConstructorInit * old ) override final {2657 virtual void visit( const ConstructorInit * old ) override final { 2658 2658 this->node = new ast::ConstructorInit( 2659 2659 old->location, … … 2664 2664 } 2665 2665 2666 virtual void visit( Constant * ) override final {2666 virtual void visit( const Constant * ) override final { 2667 2667 // Handled in visit( ConstantEpxr * ). 2668 2668 // In the new tree, Constant fields are inlined into containing ConstantExpression. … … 2670 2670 } 2671 2671 2672 virtual void visit( Attribute * old ) override final {2672 virtual void visit( const Attribute * old ) override final { 2673 2673 this->node = new ast::Attribute( 2674 2674 old->name, … … 2677 2677 } 2678 2678 2679 virtual void visit( AttrExpr * ) override final {2679 virtual void visit( const AttrExpr * ) override final { 2680 2680 assertf( false, "AttrExpr deprecated in new AST." ); 2681 2681 } -
src/AST/Expr.hpp
ree6dbae r7870799 47 47 48 48 ParamEntry() : decl( 0 ), declptr( nullptr ), actualType( nullptr ), formalType( nullptr ), expr( nullptr ) {} 49 ParamEntry( 50 UniqueId id, const Decl * declptr, const Type * actual, const Type * formal, 49 ParamEntry( 50 UniqueId id, const Decl * declptr, const Type * actual, const Type * formal, 51 51 const Expr * e ) 52 52 : decl( id ), declptr( declptr ), actualType( actual ), formalType( formal ), expr( e ) {} … … 112 112 case Empty: new(&data.resnSlots) ResnSlots{}; mode = Slots; // fallthrough 113 113 case Slots: return data.resnSlots; 114 case Params: assert (!"Cannot return to resnSlots from Params");114 case Params: assertf(false, "Cannot return to resnSlots from Params"); abort(); 115 115 } 116 return *((ResnSlots*)nullptr);117 116 } 118 117 … … 121 120 return data.resnSlots; 122 121 } 123 assert (!"Mode was not already resnSlots");124 return *((ResnSlots*)nullptr);122 assertf(false, "Mode was not already resnSlots"); 123 abort(); 125 124 } 126 125 … … 131 130 case Params: return data.inferParams; 132 131 } 133 assert(!"unreachable"); 134 return *((InferredParams*)nullptr); 132 assertf(false, "unreachable"); 135 133 } 136 134 … … 139 137 return data.inferParams; 140 138 } 141 assert (!"Mode was not already Params");142 return *((InferredParams*)nullptr);139 assertf(false, "Mode was not already Params"); 140 abort(); 143 141 } 144 142 145 143 void set_inferParams( InferredParams && ps ) { 146 144 switch(mode) { 147 case Slots: 145 case Slots: 148 146 data.resnSlots.~ResnSlots(); 149 147 // fallthrough 150 case Empty: 148 case Empty: 151 149 new(&data.inferParams) InferredParams{ std::move( ps ) }; 152 150 mode = Params; … … 172 170 data.inferParams[p.first] = std::move(p.second); 173 171 } 174 } else assert (!"invalid mode");172 } else assertf(false, "invalid mode"); 175 173 } 176 174 }; … … 384 382 385 383 ConstantExpr( 386 const CodeLocation & loc, const Type * ty, const std::string & r, 384 const CodeLocation & loc, const Type * ty, const std::string & r, 387 385 std::optional<unsigned long long> i ) 388 386 : Expr( loc, ty ), rep( r ), ival( i ) {}
Note:
See TracChangeset
for help on using the changeset viewer.