Changes in src/AST/Convert.cpp [f6cc734e:e67991f]
- File:
-
- 1 edited
-
src/AST/Convert.cpp (modified) (95 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Convert.cpp
rf6cc734e re67991f 518 518 } 519 519 520 const ast:: Stmt* visit( const ast::WithStmt * node ) override final {520 const ast::Decl * visit( const ast::WithStmt * node ) override final { 521 521 if ( inCache( node ) ) return nullptr; 522 522 auto stmt = new WithStmt( … … 524 524 get<Statement>().accept1( node->stmt ) 525 525 ); 526 return stmtPostamble( stmt, node ); 526 declPostamble( stmt, node ); 527 return nullptr; 527 528 } 528 529 … … 607 608 608 609 tgt->result = get<Type>().accept1(src->result); 609 // Unconditionally use a clone of the result type.610 // We know this will leak some objects: much of the immediate conversion result.611 // In some cases, using the conversion result directly gives unintended object sharing.612 // A parameter (ObjectDecl, a child of a FunctionType) is shared by the weak-ref cache.613 // But tgt->result must be fully owned privately by tgt.614 // Applying these conservative copies here means615 // - weak references point at the declaration's copy, not these expr.result copies (good)616 // - we copy more objects than really needed (bad, tolerated)617 if (tgt->result) {618 tgt->result = tgt->result->clone();619 }620 610 return visitBaseExpr_skipResultType(src, tgt); 621 611 } … … 1050 1040 get<Expression>().accept1(node->expr), 1051 1041 inCache(node->deleteStmt) ? 1052 this->node:1053 get< BaseSyntaxNode>().accept1(node->deleteStmt)1042 strict_dynamic_cast<Declaration*>(this->node) : 1043 get<Declaration>().accept1(node->deleteStmt) 1054 1044 ) 1055 1045 ); … … 1366 1356 ast::Node * node = nullptr; 1367 1357 /// cache of nodes that might be referenced by readonly<> for de-duplication 1368 std::unordered_map< BaseSyntaxNode *, ast::Node * > cache = {};1358 std::unordered_map< const BaseSyntaxNode *, ast::Node * > cache = {}; 1369 1359 1370 1360 // Local Utilities: … … 1433 1423 to<std::vector>::from( make_labels( std::move( labels ) ) ) 1434 1424 1435 static ast::CV::Qualifiers cv( Type * ty ) { return { ty->get_qualifiers().val }; }1425 static ast::CV::Qualifiers cv( const Type * ty ) { return { ty->tq.val }; } 1436 1426 1437 1427 /// returns true and sets `node` if in cache 1438 bool inCache( BaseSyntaxNode * old ) {1428 bool inCache( const BaseSyntaxNode * old ) { 1439 1429 auto it = cache.find( old ); 1440 1430 if ( it == cache.end() ) return false; … … 1445 1435 // Now all the visit functions: 1446 1436 1447 virtual void visit( ObjectDecl * old ) override final {1437 virtual void visit( const ObjectDecl * old ) override final { 1448 1438 auto&& type = GET_ACCEPT_1(type, Type); 1449 1439 auto&& init = GET_ACCEPT_1(init, Init); … … 1476 1466 } 1477 1467 1478 virtual void visit( FunctionDecl * old ) override final {1468 virtual void visit( const FunctionDecl * old ) override final { 1479 1469 if ( inCache( old ) ) return; 1480 1470 auto decl = new ast::FunctionDecl{ … … 1509 1499 } 1510 1500 1511 virtual void visit( StructDecl * old ) override final {1501 virtual void visit( const StructDecl * old ) override final { 1512 1502 if ( inCache( old ) ) return; 1513 1503 auto decl = new ast::StructDecl( … … 1534 1524 } 1535 1525 1536 virtual void visit( UnionDecl * old ) override final {1526 virtual void visit( const UnionDecl * old ) override final { 1537 1527 if ( inCache( old ) ) return; 1538 1528 auto decl = new ast::UnionDecl( … … 1554 1544 } 1555 1545 1556 virtual void visit( EnumDecl * old ) override final {1546 virtual void visit( const EnumDecl * old ) override final { 1557 1547 if ( inCache( old ) ) return; 1558 1548 auto decl = new ast::EnumDecl( … … 1574 1564 } 1575 1565 1576 virtual void visit( TraitDecl * old ) override final {1566 virtual void visit( const TraitDecl * old ) override final { 1577 1567 if ( inCache( old ) ) return; 1578 1568 auto decl = new ast::TraitDecl( … … 1594 1584 } 1595 1585 1596 virtual void visit( TypeDecl * old ) override final {1586 virtual void visit( const TypeDecl * old ) override final { 1597 1587 if ( inCache( old ) ) return; 1598 1588 auto decl = new ast::TypeDecl{ … … 1614 1604 } 1615 1605 1616 virtual void visit( TypedefDecl * old ) override final {1606 virtual void visit( const TypedefDecl * old ) override final { 1617 1607 auto decl = new ast::TypedefDecl( 1618 1608 old->location, … … 1631 1621 } 1632 1622 1633 virtual void visit( AsmDecl * old ) override final {1623 virtual void visit( const AsmDecl * old ) override final { 1634 1624 auto decl = new ast::AsmDecl{ 1635 1625 old->location, … … 1643 1633 } 1644 1634 1645 virtual void visit( StaticAssertDecl * old ) override final {1635 virtual void visit( const StaticAssertDecl * old ) override final { 1646 1636 auto decl = new ast::StaticAssertDecl{ 1647 1637 old->location, … … 1656 1646 } 1657 1647 1658 virtual void visit( CompoundStmt * old ) override final {1648 virtual void visit( const CompoundStmt * old ) override final { 1659 1649 if ( inCache( old ) ) return; 1660 1650 auto stmt = new ast::CompoundStmt( … … 1668 1658 } 1669 1659 1670 virtual void visit( ExprStmt * old ) override final {1660 virtual void visit( const ExprStmt * old ) override final { 1671 1661 if ( inCache( old ) ) return; 1672 1662 this->node = new ast::ExprStmt( … … 1678 1668 } 1679 1669 1680 virtual void visit( AsmStmt * old ) override final {1670 virtual void visit( const AsmStmt * old ) override final { 1681 1671 if ( inCache( old ) ) return; 1682 1672 this->node = new ast::AsmStmt( … … 1693 1683 } 1694 1684 1695 virtual void visit( DirectiveStmt * old ) override final {1685 virtual void visit( const DirectiveStmt * old ) override final { 1696 1686 if ( inCache( old ) ) return; 1697 1687 this->node = new ast::DirectiveStmt( … … 1703 1693 } 1704 1694 1705 virtual void visit( IfStmt * old ) override final {1695 virtual void visit( const IfStmt * old ) override final { 1706 1696 if ( inCache( old ) ) return; 1707 1697 this->node = new ast::IfStmt( … … 1716 1706 } 1717 1707 1718 virtual void visit( SwitchStmt * old ) override final {1708 virtual void visit( const SwitchStmt * old ) override final { 1719 1709 if ( inCache( old ) ) return; 1720 1710 this->node = new ast::SwitchStmt( … … 1727 1717 } 1728 1718 1729 virtual void visit( CaseStmt * old ) override final {1719 virtual void visit( const CaseStmt * old ) override final { 1730 1720 if ( inCache( old ) ) return; 1731 1721 this->node = new ast::CaseStmt( … … 1738 1728 } 1739 1729 1740 virtual void visit( WhileStmt * old ) override final {1730 virtual void visit( const WhileStmt * old ) override final { 1741 1731 if ( inCache( old ) ) return; 1742 1732 this->node = new ast::WhileStmt( … … 1751 1741 } 1752 1742 1753 virtual void visit( ForStmt * old ) override final {1743 virtual void visit( const ForStmt * old ) override final { 1754 1744 if ( inCache( old ) ) return; 1755 1745 this->node = new ast::ForStmt( … … 1764 1754 } 1765 1755 1766 virtual void visit( BranchStmt * old ) override final {1756 virtual void visit( const BranchStmt * old ) override final { 1767 1757 if ( inCache( old ) ) return; 1768 1758 if (old->computedTarget) { … … 1801 1791 } 1802 1792 1803 virtual void visit( ReturnStmt * old ) override final {1793 virtual void visit( const ReturnStmt * old ) override final { 1804 1794 if ( inCache( old ) ) return; 1805 1795 this->node = new ast::ReturnStmt( … … 1811 1801 } 1812 1802 1813 virtual void visit( ThrowStmt * old ) override final {1803 virtual void visit( const ThrowStmt * old ) override final { 1814 1804 if ( inCache( old ) ) return; 1815 1805 ast::ExceptionKind kind; … … 1835 1825 } 1836 1826 1837 virtual void visit( TryStmt * old ) override final {1827 virtual void visit( const TryStmt * old ) override final { 1838 1828 if ( inCache( old ) ) return; 1839 1829 this->node = new ast::TryStmt( … … 1847 1837 } 1848 1838 1849 virtual void visit( CatchStmt * old ) override final {1839 virtual void visit( const CatchStmt * old ) override final { 1850 1840 if ( inCache( old ) ) return; 1851 1841 ast::ExceptionKind kind; … … 1872 1862 } 1873 1863 1874 virtual void visit( FinallyStmt * old ) override final {1864 virtual void visit( const FinallyStmt * old ) override final { 1875 1865 if ( inCache( old ) ) return; 1876 1866 this->node = new ast::FinallyStmt( … … 1882 1872 } 1883 1873 1884 virtual void visit( WaitForStmt * old ) override final {1874 virtual void visit( const WaitForStmt * old ) override final { 1885 1875 if ( inCache( old ) ) return; 1886 1876 ast::WaitForStmt * stmt = new ast::WaitForStmt( … … 1914 1904 } 1915 1905 1916 virtual void visit( WithStmt * old ) override final {1906 virtual void visit( const WithStmt * old ) override final { 1917 1907 if ( inCache( old ) ) return; 1918 1908 this->node = new ast::WithStmt( 1919 1909 old->location, 1920 1910 GET_ACCEPT_V(exprs, Expr), 1921 GET_ACCEPT_1(stmt, Stmt), 1922 GET_LABELS_V(old->labels) 1911 GET_ACCEPT_1(stmt, Stmt) 1923 1912 ); 1924 1913 cache.emplace( old, this->node ); 1925 1914 } 1926 1915 1927 virtual void visit( NullStmt * old ) override final {1916 virtual void visit( const NullStmt * old ) override final { 1928 1917 if ( inCache( old ) ) return; 1929 1918 this->node = new ast::NullStmt( … … 1934 1923 } 1935 1924 1936 virtual void visit( DeclStmt * old ) override final {1925 virtual void visit( const DeclStmt * old ) override final { 1937 1926 if ( inCache( old ) ) return; 1938 1927 this->node = new ast::DeclStmt( … … 1944 1933 } 1945 1934 1946 virtual void visit( ImplicitCtorDtorStmt * old ) override final {1935 virtual void visit( const ImplicitCtorDtorStmt * old ) override final { 1947 1936 if ( inCache( old ) ) return; 1948 1937 auto stmt = new ast::ImplicitCtorDtorStmt( … … 2001 1990 } 2002 1991 2003 ast::Expr * visitBaseExpr_SkipResultType( Expression * old, ast::Expr * nw) {1992 ast::Expr * visitBaseExpr_SkipResultType( const Expression * old, ast::Expr * nw) { 2004 1993 2005 1994 nw->env = convertTypeSubstitution(old->env); … … 2011 2000 } 2012 2001 2013 ast::Expr * visitBaseExpr( Expression * old, ast::Expr * nw) {2002 ast::Expr * visitBaseExpr( const Expression * old, ast::Expr * nw) { 2014 2003 2015 2004 nw->result = GET_ACCEPT_1(result, Type); … … 2017 2006 } 2018 2007 2019 virtual void visit( ApplicationExpr * old ) override final {2008 virtual void visit( const ApplicationExpr * old ) override final { 2020 2009 this->node = visitBaseExpr( old, 2021 2010 new ast::ApplicationExpr( … … 2027 2016 } 2028 2017 2029 virtual void visit( UntypedExpr * old ) override final {2018 virtual void visit( const UntypedExpr * old ) override final { 2030 2019 this->node = visitBaseExpr( old, 2031 2020 new ast::UntypedExpr( … … 2037 2026 } 2038 2027 2039 virtual void visit( NameExpr * old ) override final {2028 virtual void visit( const NameExpr * old ) override final { 2040 2029 this->node = visitBaseExpr( old, 2041 2030 new ast::NameExpr( … … 2046 2035 } 2047 2036 2048 virtual void visit( CastExpr * old ) override final {2037 virtual void visit( const CastExpr * old ) override final { 2049 2038 this->node = visitBaseExpr( old, 2050 2039 new ast::CastExpr( … … 2056 2045 } 2057 2046 2058 virtual void visit( KeywordCastExpr * old) override final {2047 virtual void visit( const KeywordCastExpr * old) override final { 2059 2048 ast::KeywordCastExpr::Target castTarget = ast::KeywordCastExpr::NUMBER_OF_TARGETS; 2060 2049 switch (old->target) { … … 2081 2070 } 2082 2071 2083 virtual void visit( VirtualCastExpr * old ) override final {2072 virtual void visit( const VirtualCastExpr * old ) override final { 2084 2073 this->node = visitBaseExpr_SkipResultType( old, 2085 2074 new ast::VirtualCastExpr( … … 2091 2080 } 2092 2081 2093 virtual void visit( AddressExpr * old ) override final {2082 virtual void visit( const AddressExpr * old ) override final { 2094 2083 this->node = visitBaseExpr( old, 2095 2084 new ast::AddressExpr( … … 2100 2089 } 2101 2090 2102 virtual void visit( LabelAddressExpr * old ) override final {2091 virtual void visit( const LabelAddressExpr * old ) override final { 2103 2092 this->node = visitBaseExpr( old, 2104 2093 new ast::LabelAddressExpr( … … 2109 2098 } 2110 2099 2111 virtual void visit( UntypedMemberExpr * old ) override final {2100 virtual void visit( const UntypedMemberExpr * old ) override final { 2112 2101 this->node = visitBaseExpr( old, 2113 2102 new ast::UntypedMemberExpr( … … 2119 2108 } 2120 2109 2121 virtual void visit( MemberExpr * old ) override final {2110 virtual void visit( const MemberExpr * old ) override final { 2122 2111 this->node = visitBaseExpr( old, 2123 2112 new ast::MemberExpr( … … 2129 2118 } 2130 2119 2131 virtual void visit( VariableExpr * old ) override final {2120 virtual void visit( const VariableExpr * old ) override final { 2132 2121 auto expr = new ast::VariableExpr( 2133 2122 old->location … … 2140 2129 } 2141 2130 2142 virtual void visit( ConstantExpr * old ) override final {2131 virtual void visit( const ConstantExpr * old ) override final { 2143 2132 ast::ConstantExpr *rslt = new ast::ConstantExpr( 2144 2133 old->location, 2145 2134 GET_ACCEPT_1(result, Type), 2146 old->constant. get_value(),2135 old->constant.rep, 2147 2136 old->constant.ival 2148 2137 ); 2149 rslt->underlyer = getAccept1< ast::Type, Type* >( old->constant. get_type());2138 rslt->underlyer = getAccept1< ast::Type, Type* >( old->constant.type ); 2150 2139 this->node = visitBaseExpr( old, rslt ); 2151 2140 } 2152 2141 2153 virtual void visit( SizeofExpr * old ) override final {2142 virtual void visit( const SizeofExpr * old ) override final { 2154 2143 assert (old->expr || old->type); 2155 2144 assert (! (old->expr && old->type)); … … 2172 2161 } 2173 2162 2174 virtual void visit( AlignofExpr * old ) override final {2163 virtual void visit( const AlignofExpr * old ) override final { 2175 2164 assert (old->expr || old->type); 2176 2165 assert (! (old->expr && old->type)); … … 2193 2182 } 2194 2183 2195 virtual void visit( UntypedOffsetofExpr * old ) override final {2184 virtual void visit( const UntypedOffsetofExpr * old ) override final { 2196 2185 this->node = visitBaseExpr( old, 2197 2186 new ast::UntypedOffsetofExpr( … … 2203 2192 } 2204 2193 2205 virtual void visit( OffsetofExpr * old ) override final {2194 virtual void visit( const OffsetofExpr * old ) override final { 2206 2195 this->node = visitBaseExpr( old, 2207 2196 new ast::OffsetofExpr( … … 2213 2202 } 2214 2203 2215 virtual void visit( OffsetPackExpr * old ) override final {2204 virtual void visit( const OffsetPackExpr * old ) override final { 2216 2205 this->node = visitBaseExpr( old, 2217 2206 new ast::OffsetPackExpr( … … 2222 2211 } 2223 2212 2224 virtual void visit( LogicalExpr * old ) override final {2213 virtual void visit( const LogicalExpr * old ) override final { 2225 2214 this->node = visitBaseExpr( old, 2226 2215 new ast::LogicalExpr( … … 2235 2224 } 2236 2225 2237 virtual void visit( ConditionalExpr * old ) override final {2226 virtual void visit( const ConditionalExpr * old ) override final { 2238 2227 this->node = visitBaseExpr( old, 2239 2228 new ast::ConditionalExpr( … … 2246 2235 } 2247 2236 2248 virtual void visit( CommaExpr * old ) override final {2237 virtual void visit( const CommaExpr * old ) override final { 2249 2238 this->node = visitBaseExpr( old, 2250 2239 new ast::CommaExpr( … … 2256 2245 } 2257 2246 2258 virtual void visit( TypeExpr * old ) override final {2247 virtual void visit( const TypeExpr * old ) override final { 2259 2248 this->node = visitBaseExpr( old, 2260 2249 new ast::TypeExpr( … … 2265 2254 } 2266 2255 2267 virtual void visit( AsmExpr * old ) override final {2256 virtual void visit( const AsmExpr * old ) override final { 2268 2257 this->node = visitBaseExpr( old, 2269 2258 new ast::AsmExpr( … … 2276 2265 } 2277 2266 2278 virtual void visit( ImplicitCopyCtorExpr * old ) override final {2267 virtual void visit( const ImplicitCopyCtorExpr * old ) override final { 2279 2268 auto rslt = new ast::ImplicitCopyCtorExpr( 2280 2269 old->location, … … 2285 2274 } 2286 2275 2287 virtual void visit( ConstructorExpr * old ) override final {2276 virtual void visit( const ConstructorExpr * old ) override final { 2288 2277 this->node = visitBaseExpr( old, 2289 2278 new ast::ConstructorExpr( … … 2294 2283 } 2295 2284 2296 virtual void visit( CompoundLiteralExpr * old ) override final {2285 virtual void visit( const CompoundLiteralExpr * old ) override final { 2297 2286 this->node = visitBaseExpr_SkipResultType( old, 2298 2287 new ast::CompoundLiteralExpr( … … 2304 2293 } 2305 2294 2306 virtual void visit( RangeExpr * old ) override final {2295 virtual void visit( const RangeExpr * old ) override final { 2307 2296 this->node = visitBaseExpr( old, 2308 2297 new ast::RangeExpr( … … 2314 2303 } 2315 2304 2316 virtual void visit( UntypedTupleExpr * old ) override final {2305 virtual void visit( const UntypedTupleExpr * old ) override final { 2317 2306 this->node = visitBaseExpr( old, 2318 2307 new ast::UntypedTupleExpr( … … 2323 2312 } 2324 2313 2325 virtual void visit( TupleExpr * old ) override final {2314 virtual void visit( const TupleExpr * old ) override final { 2326 2315 this->node = visitBaseExpr( old, 2327 2316 new ast::TupleExpr( … … 2332 2321 } 2333 2322 2334 virtual void visit( TupleIndexExpr * old ) override final {2323 virtual void visit( const TupleIndexExpr * old ) override final { 2335 2324 this->node = visitBaseExpr( old, 2336 2325 new ast::TupleIndexExpr( … … 2342 2331 } 2343 2332 2344 virtual void visit( TupleAssignExpr * old ) override final {2333 virtual void visit( const TupleAssignExpr * old ) override final { 2345 2334 this->node = visitBaseExpr_SkipResultType( old, 2346 2335 new ast::TupleAssignExpr( … … 2352 2341 } 2353 2342 2354 virtual void visit( StmtExpr * old ) override final {2343 virtual void visit( const StmtExpr * old ) override final { 2355 2344 auto rslt = new ast::StmtExpr( 2356 2345 old->location, … … 2363 2352 } 2364 2353 2365 virtual void visit( UniqueExpr * old ) override final {2354 virtual void visit( const UniqueExpr * old ) override final { 2366 2355 auto rslt = new ast::UniqueExpr( 2367 2356 old->location, … … 2375 2364 } 2376 2365 2377 virtual void visit( UntypedInitExpr * old ) override final {2366 virtual void visit( const UntypedInitExpr * old ) override final { 2378 2367 std::deque<ast::InitAlternative> initAlts; 2379 2368 for (auto ia : old->initAlts) { … … 2392 2381 } 2393 2382 2394 virtual void visit( InitExpr * old ) override final {2383 virtual void visit( const InitExpr * old ) override final { 2395 2384 this->node = visitBaseExpr( old, 2396 2385 new ast::InitExpr( … … 2402 2391 } 2403 2392 2404 virtual void visit( DeletedExpr * old ) override final {2393 virtual void visit( const DeletedExpr * old ) override final { 2405 2394 this->node = visitBaseExpr( old, 2406 2395 new ast::DeletedExpr( … … 2408 2397 GET_ACCEPT_1(expr, Expr), 2409 2398 inCache(old->deleteStmt) ? 2410 this->node:2411 GET_ACCEPT_1(deleteStmt, Node)2412 ) 2413 ); 2414 } 2415 2416 virtual void visit( DefaultArgExpr * old ) override final {2399 strict_dynamic_cast<ast::Decl*>(this->node) : 2400 GET_ACCEPT_1(deleteStmt, Decl) 2401 ) 2402 ); 2403 } 2404 2405 virtual void visit( const DefaultArgExpr * old ) override final { 2417 2406 this->node = visitBaseExpr( old, 2418 2407 new ast::DefaultArgExpr( … … 2423 2412 } 2424 2413 2425 virtual void visit( GenericExpr * old ) override final {2414 virtual void visit( const GenericExpr * old ) override final { 2426 2415 std::vector<ast::GenericExpr::Association> associations; 2427 2416 for (auto association : old->associations) { … … 2440 2429 } 2441 2430 2442 void visitType( Type * old, ast::Type * type ) {2431 void visitType( const Type * old, ast::Type * type ) { 2443 2432 // Some types do this in their constructor so add a check. 2444 2433 if ( !old->attributes.empty() && type->attributes.empty() ) { … … 2448 2437 } 2449 2438 2450 virtual void visit( VoidType * old ) override final {2439 virtual void visit( const VoidType * old ) override final { 2451 2440 visitType( old, new ast::VoidType{ cv( old ) } ); 2452 2441 } 2453 2442 2454 virtual void visit( BasicType * old ) override final {2443 virtual void visit( const BasicType * old ) override final { 2455 2444 auto type = new ast::BasicType{ (ast::BasicType::Kind)(unsigned)old->kind, cv( old ) }; 2456 2445 // I believe this should always be a BasicType. … … 2461 2450 } 2462 2451 2463 virtual void visit( PointerType * old ) override final {2452 virtual void visit( const PointerType * old ) override final { 2464 2453 visitType( old, new ast::PointerType{ 2465 2454 GET_ACCEPT_1( base, Type ), … … 2471 2460 } 2472 2461 2473 virtual void visit( ArrayType * old ) override final {2462 virtual void visit( const ArrayType * old ) override final { 2474 2463 visitType( old, new ast::ArrayType{ 2475 2464 GET_ACCEPT_1( base, Type ), … … 2481 2470 } 2482 2471 2483 virtual void visit( ReferenceType * old ) override final {2472 virtual void visit( const ReferenceType * old ) override final { 2484 2473 visitType( old, new ast::ReferenceType{ 2485 2474 GET_ACCEPT_1( base, Type ), … … 2488 2477 } 2489 2478 2490 virtual void visit( QualifiedType * old ) override final {2479 virtual void visit( const QualifiedType * old ) override final { 2491 2480 visitType( old, new ast::QualifiedType{ 2492 2481 GET_ACCEPT_1( parent, Type ), … … 2496 2485 } 2497 2486 2498 virtual void visit( FunctionType * old ) override final {2487 virtual void visit( const FunctionType * old ) override final { 2499 2488 auto ty = new ast::FunctionType { 2500 2489 (ast::ArgumentFlag)old->isVarArgs, … … 2507 2496 } 2508 2497 2509 void postvisit( ReferenceToType * old, ast::ReferenceToType * ty ) {2498 void postvisit( const ReferenceToType * old, ast::ReferenceToType * ty ) { 2510 2499 ty->forall = GET_ACCEPT_V( forall, TypeDecl ); 2511 2500 ty->params = GET_ACCEPT_V( parameters, Expr ); … … 2514 2503 } 2515 2504 2516 virtual void visit( StructInstType * old ) override final {2505 virtual void visit( const StructInstType * old ) override final { 2517 2506 ast::StructInstType * ty; 2518 2507 if ( old->baseStruct ) { … … 2532 2521 } 2533 2522 2534 virtual void visit( UnionInstType * old ) override final {2523 virtual void visit( const UnionInstType * old ) override final { 2535 2524 ast::UnionInstType * ty; 2536 2525 if ( old->baseUnion ) { … … 2550 2539 } 2551 2540 2552 virtual void visit( EnumInstType * old ) override final {2541 virtual void visit( const EnumInstType * old ) override final { 2553 2542 ast::EnumInstType * ty; 2554 2543 if ( old->baseEnum ) { … … 2568 2557 } 2569 2558 2570 virtual void visit( TraitInstType * old ) override final {2559 virtual void visit( const TraitInstType * old ) override final { 2571 2560 ast::TraitInstType * ty; 2572 2561 if ( old->baseTrait ) { … … 2586 2575 } 2587 2576 2588 virtual void visit( TypeInstType * old ) override final {2577 virtual void visit( const TypeInstType * old ) override final { 2589 2578 ast::TypeInstType * ty; 2590 2579 if ( old->baseType ) { … … 2606 2595 } 2607 2596 2608 virtual void visit( TupleType * old ) override final {2597 virtual void visit( const TupleType * old ) override final { 2609 2598 visitType( old, new ast::TupleType{ 2610 2599 GET_ACCEPT_V( types, Type ), … … 2614 2603 } 2615 2604 2616 virtual void visit( TypeofType * old ) override final {2605 virtual void visit( const TypeofType * old ) override final { 2617 2606 visitType( old, new ast::TypeofType{ 2618 2607 GET_ACCEPT_1( expr, Expr ), … … 2622 2611 } 2623 2612 2624 virtual void visit( AttrType * ) override final {2613 virtual void visit( const AttrType * ) override final { 2625 2614 assertf( false, "AttrType deprecated in new AST." ); 2626 2615 } 2627 2616 2628 virtual void visit( VarArgsType * old ) override final {2617 virtual void visit( const VarArgsType * old ) override final { 2629 2618 visitType( old, new ast::VarArgsType{ cv( old ) } ); 2630 2619 } 2631 2620 2632 virtual void visit( ZeroType * old ) override final {2621 virtual void visit( const ZeroType * old ) override final { 2633 2622 visitType( old, new ast::ZeroType{ cv( old ) } ); 2634 2623 } 2635 2624 2636 virtual void visit( OneType * old ) override final {2625 virtual void visit( const OneType * old ) override final { 2637 2626 visitType( old, new ast::OneType{ cv( old ) } ); 2638 2627 } 2639 2628 2640 virtual void visit( GlobalScopeType * old ) override final {2629 virtual void visit( const GlobalScopeType * old ) override final { 2641 2630 visitType( old, new ast::GlobalScopeType{} ); 2642 2631 } 2643 2632 2644 virtual void visit( Designation * old ) override final {2633 virtual void visit( const Designation * old ) override final { 2645 2634 this->node = new ast::Designation( 2646 2635 old->location, … … 2649 2638 } 2650 2639 2651 virtual void visit( SingleInit * old ) override final {2640 virtual void visit( const SingleInit * old ) override final { 2652 2641 this->node = new ast::SingleInit( 2653 2642 old->location, … … 2657 2646 } 2658 2647 2659 virtual void visit( ListInit * old ) override final {2648 virtual void visit( const ListInit * old ) override final { 2660 2649 this->node = new ast::ListInit( 2661 2650 old->location, … … 2666 2655 } 2667 2656 2668 virtual void visit( ConstructorInit * old ) override final {2657 virtual void visit( const ConstructorInit * old ) override final { 2669 2658 this->node = new ast::ConstructorInit( 2670 2659 old->location, … … 2675 2664 } 2676 2665 2677 virtual void visit( Constant * ) override final {2666 virtual void visit( const Constant * ) override final { 2678 2667 // Handled in visit( ConstantEpxr * ). 2679 2668 // In the new tree, Constant fields are inlined into containing ConstantExpression. … … 2681 2670 } 2682 2671 2683 virtual void visit( Attribute * old ) override final {2672 virtual void visit( const Attribute * old ) override final { 2684 2673 this->node = new ast::Attribute( 2685 2674 old->name, … … 2688 2677 } 2689 2678 2690 virtual void visit( AttrExpr * ) override final {2679 virtual void visit( const AttrExpr * ) override final { 2691 2680 assertf( false, "AttrExpr deprecated in new AST." ); 2692 2681 }
Note:
See TracChangeset
for help on using the changeset viewer.