| [87701b6] | 1 | // | 
|---|
|  | 2 | // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo | 
|---|
|  | 3 | // | 
|---|
|  | 4 | // The contents of this file are covered under the licence agreement in the | 
|---|
|  | 5 | // file "LICENCE" distributed with Cforall. | 
|---|
|  | 6 | // | 
|---|
|  | 7 | // Node.hpp -- | 
|---|
|  | 8 | // | 
|---|
|  | 9 | // Author           : Thierry Delisle | 
|---|
|  | 10 | // Created On       : Thu May 16 14:16:00 2019 | 
|---|
| [2d019af] | 11 | // Last Modified By : Peter A. Buhr | 
|---|
| [3b0bc16] | 12 | // Last Modified On : Tue Feb  1 09:09:39 2022 | 
|---|
|  | 13 | // Update Count     : 3 | 
|---|
| [87701b6] | 14 | // | 
|---|
|  | 15 |  | 
|---|
|  | 16 | #include "Node.hpp" | 
|---|
|  | 17 | #include "Fwd.hpp" | 
|---|
| [10a1225] | 18 |  | 
|---|
| [9ea38de] | 19 | #include <csignal>  // MEMORY DEBUG -- for raise | 
|---|
| [733074e] | 20 | #include <iostream> | 
|---|
|  | 21 |  | 
|---|
| [10a1225] | 22 | #include "Attribute.hpp" | 
|---|
| [87701b6] | 23 | #include "Decl.hpp" | 
|---|
|  | 24 | #include "Expr.hpp" | 
|---|
| [10a1225] | 25 | #include "Init.hpp" | 
|---|
| [87701b6] | 26 | #include "Stmt.hpp" | 
|---|
|  | 27 | #include "Type.hpp" | 
|---|
| [10a1225] | 28 | #include "TypeSubstitution.hpp" | 
|---|
| [87701b6] | 29 |  | 
|---|
| [461046f] | 30 | #include "Print.hpp" | 
|---|
|  | 31 |  | 
|---|
| [bcb311b] | 32 | /// MEMORY DEBUG -- allows breaking on ref-count changes of dynamically chosen object. | 
|---|
| [9ea38de] | 33 | /// Process to use in GDB: | 
|---|
|  | 34 | ///   break ast::Node::_trap() | 
|---|
|  | 35 | ///   run | 
|---|
|  | 36 | ///   set variable MEM_TRAP_OBJ = <target> | 
|---|
|  | 37 | ///   disable <first breakpoint> | 
|---|
|  | 38 | ///   continue | 
|---|
|  | 39 | void * MEM_TRAP_OBJ = nullptr; | 
|---|
|  | 40 |  | 
|---|
| [bcb311b] | 41 | void _trap( const void * node ) { | 
|---|
|  | 42 | if ( node == MEM_TRAP_OBJ ) std::raise(SIGTRAP); | 
|---|
| [9ea38de] | 43 | } | 
|---|
|  | 44 |  | 
|---|
| [52a4d69] | 45 | [[noreturn]] static inline void strict_fail(const ast::Node * node) { | 
|---|
|  | 46 | assertf(node, "strict_as had nullptr input."); | 
|---|
|  | 47 | const ast::ParseNode * parse = dynamic_cast<const ast::ParseNode *>( node ); | 
|---|
|  | 48 | if ( nullptr == parse ) { | 
|---|
| [943bfad] | 49 | assertf(false, "%s (no location)", toString(node).c_str()); | 
|---|
| [52a4d69] | 50 | } else if ( parse->location.isUnset() ) { | 
|---|
| [943bfad] | 51 | assertf(false, "%s (unset location)", toString(node).c_str()); | 
|---|
| [52a4d69] | 52 | } else { | 
|---|
| [943bfad] | 53 | assertf(false, "%s (at %s:%d)", toString(node).c_str(), | 
|---|
| [52a4d69] | 54 | parse->location.filename.c_str(), parse->location.first_line); | 
|---|
|  | 55 | } | 
|---|
|  | 56 | } | 
|---|
|  | 57 |  | 
|---|
|  | 58 | template< typename node_t, enum ast::Node::ref_type ref_t > | 
|---|
|  | 59 | void ast::ptr_base<node_t, ref_t>::_strict_fail() const { | 
|---|
|  | 60 | strict_fail(node); | 
|---|
|  | 61 | } | 
|---|
|  | 62 |  | 
|---|
| [87701b6] | 63 | template< typename node_t, enum ast::Node::ref_type ref_t > | 
|---|
| [bcb311b] | 64 | void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { | 
|---|
|  | 65 | node->increment(ref_t); | 
|---|
|  | 66 | _trap( node ); | 
|---|
|  | 67 | } | 
|---|
| [87701b6] | 68 |  | 
|---|
|  | 69 | template< typename node_t, enum ast::Node::ref_type ref_t > | 
|---|
| [7d0881c] | 70 | void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node, bool do_delete ) { | 
|---|
| [bcb311b] | 71 | _trap( node ); | 
|---|
| [52a4d69] | 72 | node->decrement( ref_t, do_delete ); | 
|---|
| [bcb311b] | 73 | } | 
|---|
| [87701b6] | 74 |  | 
|---|
| [4864a73] | 75 | template< typename node_t, enum ast::Node::ref_type ref_t > | 
|---|
| [52a4d69] | 76 | void ast::ptr_base<node_t, ref_t>::_check() const { | 
|---|
| [e0e9a0b] | 77 | // if(node) assert(node->was_ever_strong == false || node->strong_count > 0); | 
|---|
|  | 78 | } | 
|---|
| [4864a73] | 79 |  | 
|---|
| [10a1225] | 80 | template< typename node_t, enum ast::Node::ref_type ref_t > | 
|---|
| [76ed81f] | 81 | node_t * ast::ptr_base<node_t, ref_t>::get_and_mutate() { | 
|---|
| [10a1225] | 82 | // get mutable version of `n` | 
|---|
|  | 83 | auto r = mutate( node ); | 
|---|
|  | 84 | // re-assign mutable version in case `mutate()` produced a new pointer | 
|---|
|  | 85 | assign( r ); | 
|---|
|  | 86 | return r; | 
|---|
|  | 87 | } | 
|---|
|  | 88 |  | 
|---|
| [76ed81f] | 89 | template< typename node_t, enum ast::Node::ref_type ref_t > | 
|---|
|  | 90 | node_t * ast::ptr_base<node_t, ref_t>::set_and_mutate( const node_t * n ) { | 
|---|
|  | 91 | // ensure ownership of `n` by this node to avoid spurious single-owner mutates | 
|---|
|  | 92 | assign( n ); | 
|---|
|  | 93 | // return mutable version | 
|---|
|  | 94 | return get_and_mutate(); | 
|---|
|  | 95 | } | 
|---|
|  | 96 |  | 
|---|
| [733074e] | 97 | std::ostream & ast::operator<< ( std::ostream & out, const ast::Node * node ) { | 
|---|
| [461046f] | 98 | print(out, node); | 
|---|
| [733074e] | 99 | return out; | 
|---|
|  | 100 | } | 
|---|
|  | 101 |  | 
|---|
| [87701b6] | 102 | template class ast::ptr_base< ast::Node, ast::Node::ref_type::weak >; | 
|---|
|  | 103 | template class ast::ptr_base< ast::Node, ast::Node::ref_type::strong >; | 
|---|
|  | 104 | template class ast::ptr_base< ast::ParseNode, ast::Node::ref_type::weak >; | 
|---|
|  | 105 | template class ast::ptr_base< ast::ParseNode, ast::Node::ref_type::strong >; | 
|---|
|  | 106 | template class ast::ptr_base< ast::Decl, ast::Node::ref_type::weak >; | 
|---|
|  | 107 | template class ast::ptr_base< ast::Decl, ast::Node::ref_type::strong >; | 
|---|
|  | 108 | template class ast::ptr_base< ast::DeclWithType, ast::Node::ref_type::weak >; | 
|---|
|  | 109 | template class ast::ptr_base< ast::DeclWithType, ast::Node::ref_type::strong >; | 
|---|
|  | 110 | template class ast::ptr_base< ast::ObjectDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 111 | template class ast::ptr_base< ast::ObjectDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 112 | template class ast::ptr_base< ast::FunctionDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 113 | template class ast::ptr_base< ast::FunctionDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 114 | template class ast::ptr_base< ast::AggregateDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 115 | template class ast::ptr_base< ast::AggregateDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 116 | template class ast::ptr_base< ast::StructDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 117 | template class ast::ptr_base< ast::StructDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 118 | template class ast::ptr_base< ast::UnionDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 119 | template class ast::ptr_base< ast::UnionDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 120 | template class ast::ptr_base< ast::EnumDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 121 | template class ast::ptr_base< ast::EnumDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 122 | template class ast::ptr_base< ast::TraitDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 123 | template class ast::ptr_base< ast::TraitDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 124 | template class ast::ptr_base< ast::NamedTypeDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 125 | template class ast::ptr_base< ast::NamedTypeDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 126 | template class ast::ptr_base< ast::TypeDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 127 | template class ast::ptr_base< ast::TypeDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 128 | template class ast::ptr_base< ast::TypedefDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 129 | template class ast::ptr_base< ast::TypedefDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 130 | template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 131 | template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::strong >; | 
|---|
| [2d019af] | 132 | template class ast::ptr_base< ast::DirectiveDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 133 | template class ast::ptr_base< ast::DirectiveDecl, ast::Node::ref_type::strong >; | 
|---|
| [87701b6] | 134 | template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::weak >; | 
|---|
|  | 135 | template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::strong >; | 
|---|
|  | 136 | template class ast::ptr_base< ast::Stmt, ast::Node::ref_type::weak >; | 
|---|
|  | 137 | template class ast::ptr_base< ast::Stmt, ast::Node::ref_type::strong >; | 
|---|
|  | 138 | template class ast::ptr_base< ast::CompoundStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 139 | template class ast::ptr_base< ast::CompoundStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 140 | template class ast::ptr_base< ast::ExprStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 141 | template class ast::ptr_base< ast::ExprStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 142 | template class ast::ptr_base< ast::AsmStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 143 | template class ast::ptr_base< ast::AsmStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 144 | template class ast::ptr_base< ast::DirectiveStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 145 | template class ast::ptr_base< ast::DirectiveStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 146 | template class ast::ptr_base< ast::IfStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 147 | template class ast::ptr_base< ast::IfStmt, ast::Node::ref_type::strong >; | 
|---|
| [3b0bc16] | 148 | template class ast::ptr_base< ast::WhileDoStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 149 | template class ast::ptr_base< ast::WhileDoStmt, ast::Node::ref_type::strong >; | 
|---|
| [87701b6] | 150 | template class ast::ptr_base< ast::ForStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 151 | template class ast::ptr_base< ast::ForStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 152 | template class ast::ptr_base< ast::SwitchStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 153 | template class ast::ptr_base< ast::SwitchStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 154 | template class ast::ptr_base< ast::CaseStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 155 | template class ast::ptr_base< ast::CaseStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 156 | template class ast::ptr_base< ast::BranchStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 157 | template class ast::ptr_base< ast::BranchStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 158 | template class ast::ptr_base< ast::ReturnStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 159 | template class ast::ptr_base< ast::ReturnStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 160 | template class ast::ptr_base< ast::ThrowStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 161 | template class ast::ptr_base< ast::ThrowStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 162 | template class ast::ptr_base< ast::TryStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 163 | template class ast::ptr_base< ast::TryStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 164 | template class ast::ptr_base< ast::CatchStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 165 | template class ast::ptr_base< ast::CatchStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 166 | template class ast::ptr_base< ast::FinallyStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 167 | template class ast::ptr_base< ast::FinallyStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 168 | template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 169 | template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 170 | template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 171 | template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 172 | template class ast::ptr_base< ast::DeclStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 173 | template class ast::ptr_base< ast::DeclStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 174 | template class ast::ptr_base< ast::NullStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 175 | template class ast::ptr_base< ast::NullStmt, ast::Node::ref_type::strong >; | 
|---|
|  | 176 | template class ast::ptr_base< ast::ImplicitCtorDtorStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 177 | template class ast::ptr_base< ast::ImplicitCtorDtorStmt, ast::Node::ref_type::strong >; | 
|---|
| [6cebfef] | 178 | template class ast::ptr_base< ast::MutexStmt, ast::Node::ref_type::weak >; | 
|---|
|  | 179 | template class ast::ptr_base< ast::MutexStmt, ast::Node::ref_type::strong >; | 
|---|
| [87701b6] | 180 | template class ast::ptr_base< ast::Expr, ast::Node::ref_type::weak >; | 
|---|
|  | 181 | template class ast::ptr_base< ast::Expr, ast::Node::ref_type::strong >; | 
|---|
|  | 182 | template class ast::ptr_base< ast::ApplicationExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 183 | template class ast::ptr_base< ast::ApplicationExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 184 | template class ast::ptr_base< ast::UntypedExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 185 | template class ast::ptr_base< ast::UntypedExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 186 | template class ast::ptr_base< ast::NameExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 187 | template class ast::ptr_base< ast::NameExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 188 | template class ast::ptr_base< ast::AddressExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 189 | template class ast::ptr_base< ast::AddressExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 190 | template class ast::ptr_base< ast::LabelAddressExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 191 | template class ast::ptr_base< ast::LabelAddressExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 192 | template class ast::ptr_base< ast::CastExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 193 | template class ast::ptr_base< ast::CastExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 194 | template class ast::ptr_base< ast::KeywordCastExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 195 | template class ast::ptr_base< ast::KeywordCastExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 196 | template class ast::ptr_base< ast::VirtualCastExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 197 | template class ast::ptr_base< ast::VirtualCastExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 198 | template class ast::ptr_base< ast::MemberExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 199 | template class ast::ptr_base< ast::MemberExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 200 | template class ast::ptr_base< ast::UntypedMemberExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 201 | template class ast::ptr_base< ast::UntypedMemberExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 202 | template class ast::ptr_base< ast::VariableExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 203 | template class ast::ptr_base< ast::VariableExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 204 | template class ast::ptr_base< ast::ConstantExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 205 | template class ast::ptr_base< ast::ConstantExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 206 | template class ast::ptr_base< ast::SizeofExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 207 | template class ast::ptr_base< ast::SizeofExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 208 | template class ast::ptr_base< ast::AlignofExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 209 | template class ast::ptr_base< ast::AlignofExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 210 | template class ast::ptr_base< ast::UntypedOffsetofExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 211 | template class ast::ptr_base< ast::UntypedOffsetofExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 212 | template class ast::ptr_base< ast::OffsetofExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 213 | template class ast::ptr_base< ast::OffsetofExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 214 | template class ast::ptr_base< ast::OffsetPackExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 215 | template class ast::ptr_base< ast::OffsetPackExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 216 | template class ast::ptr_base< ast::LogicalExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 217 | template class ast::ptr_base< ast::LogicalExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 218 | template class ast::ptr_base< ast::ConditionalExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 219 | template class ast::ptr_base< ast::ConditionalExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 220 | template class ast::ptr_base< ast::CommaExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 221 | template class ast::ptr_base< ast::CommaExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 222 | template class ast::ptr_base< ast::TypeExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 223 | template class ast::ptr_base< ast::TypeExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 224 | template class ast::ptr_base< ast::AsmExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 225 | template class ast::ptr_base< ast::AsmExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 226 | template class ast::ptr_base< ast::ImplicitCopyCtorExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 227 | template class ast::ptr_base< ast::ImplicitCopyCtorExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 228 | template class ast::ptr_base< ast::ConstructorExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 229 | template class ast::ptr_base< ast::ConstructorExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 230 | template class ast::ptr_base< ast::CompoundLiteralExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 231 | template class ast::ptr_base< ast::CompoundLiteralExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 232 | template class ast::ptr_base< ast::RangeExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 233 | template class ast::ptr_base< ast::RangeExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 234 | template class ast::ptr_base< ast::UntypedTupleExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 235 | template class ast::ptr_base< ast::UntypedTupleExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 236 | template class ast::ptr_base< ast::TupleExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 237 | template class ast::ptr_base< ast::TupleExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 238 | template class ast::ptr_base< ast::TupleIndexExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 239 | template class ast::ptr_base< ast::TupleIndexExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 240 | template class ast::ptr_base< ast::TupleAssignExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 241 | template class ast::ptr_base< ast::TupleAssignExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 242 | template class ast::ptr_base< ast::StmtExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 243 | template class ast::ptr_base< ast::StmtExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 244 | template class ast::ptr_base< ast::UniqueExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 245 | template class ast::ptr_base< ast::UniqueExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 246 | template class ast::ptr_base< ast::UntypedInitExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 247 | template class ast::ptr_base< ast::UntypedInitExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 248 | template class ast::ptr_base< ast::InitExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 249 | template class ast::ptr_base< ast::InitExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 250 | template class ast::ptr_base< ast::DeletedExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 251 | template class ast::ptr_base< ast::DeletedExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 252 | template class ast::ptr_base< ast::DefaultArgExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 253 | template class ast::ptr_base< ast::DefaultArgExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 254 | template class ast::ptr_base< ast::GenericExpr, ast::Node::ref_type::weak >; | 
|---|
|  | 255 | template class ast::ptr_base< ast::GenericExpr, ast::Node::ref_type::strong >; | 
|---|
|  | 256 | template class ast::ptr_base< ast::Type, ast::Node::ref_type::weak >; | 
|---|
|  | 257 | template class ast::ptr_base< ast::Type, ast::Node::ref_type::strong >; | 
|---|
|  | 258 | template class ast::ptr_base< ast::VoidType, ast::Node::ref_type::weak >; | 
|---|
|  | 259 | template class ast::ptr_base< ast::VoidType, ast::Node::ref_type::strong >; | 
|---|
|  | 260 | template class ast::ptr_base< ast::BasicType, ast::Node::ref_type::weak >; | 
|---|
|  | 261 | template class ast::ptr_base< ast::BasicType, ast::Node::ref_type::strong >; | 
|---|
|  | 262 | template class ast::ptr_base< ast::PointerType, ast::Node::ref_type::weak >; | 
|---|
|  | 263 | template class ast::ptr_base< ast::PointerType, ast::Node::ref_type::strong >; | 
|---|
|  | 264 | template class ast::ptr_base< ast::ArrayType, ast::Node::ref_type::weak >; | 
|---|
|  | 265 | template class ast::ptr_base< ast::ArrayType, ast::Node::ref_type::strong >; | 
|---|
|  | 266 | template class ast::ptr_base< ast::ReferenceType, ast::Node::ref_type::weak >; | 
|---|
|  | 267 | template class ast::ptr_base< ast::ReferenceType, ast::Node::ref_type::strong >; | 
|---|
|  | 268 | template class ast::ptr_base< ast::QualifiedType, ast::Node::ref_type::weak >; | 
|---|
|  | 269 | template class ast::ptr_base< ast::QualifiedType, ast::Node::ref_type::strong >; | 
|---|
|  | 270 | template class ast::ptr_base< ast::FunctionType, ast::Node::ref_type::weak >; | 
|---|
|  | 271 | template class ast::ptr_base< ast::FunctionType, ast::Node::ref_type::strong >; | 
|---|
| [98e8b3b] | 272 | template class ast::ptr_base< ast::BaseInstType, ast::Node::ref_type::weak >; | 
|---|
|  | 273 | template class ast::ptr_base< ast::BaseInstType, ast::Node::ref_type::strong >; | 
|---|
| [87701b6] | 274 | template class ast::ptr_base< ast::StructInstType, ast::Node::ref_type::weak >; | 
|---|
|  | 275 | template class ast::ptr_base< ast::StructInstType, ast::Node::ref_type::strong >; | 
|---|
|  | 276 | template class ast::ptr_base< ast::UnionInstType, ast::Node::ref_type::weak >; | 
|---|
|  | 277 | template class ast::ptr_base< ast::UnionInstType, ast::Node::ref_type::strong >; | 
|---|
|  | 278 | template class ast::ptr_base< ast::EnumInstType, ast::Node::ref_type::weak >; | 
|---|
|  | 279 | template class ast::ptr_base< ast::EnumInstType, ast::Node::ref_type::strong >; | 
|---|
|  | 280 | template class ast::ptr_base< ast::TraitInstType, ast::Node::ref_type::weak >; | 
|---|
|  | 281 | template class ast::ptr_base< ast::TraitInstType, ast::Node::ref_type::strong >; | 
|---|
|  | 282 | template class ast::ptr_base< ast::TypeInstType, ast::Node::ref_type::weak >; | 
|---|
|  | 283 | template class ast::ptr_base< ast::TypeInstType, ast::Node::ref_type::strong >; | 
|---|
|  | 284 | template class ast::ptr_base< ast::TupleType, ast::Node::ref_type::weak >; | 
|---|
|  | 285 | template class ast::ptr_base< ast::TupleType, ast::Node::ref_type::strong >; | 
|---|
|  | 286 | template class ast::ptr_base< ast::TypeofType, ast::Node::ref_type::weak >; | 
|---|
|  | 287 | template class ast::ptr_base< ast::TypeofType, ast::Node::ref_type::strong >; | 
|---|
|  | 288 | template class ast::ptr_base< ast::VarArgsType, ast::Node::ref_type::weak >; | 
|---|
|  | 289 | template class ast::ptr_base< ast::VarArgsType, ast::Node::ref_type::strong >; | 
|---|
|  | 290 | template class ast::ptr_base< ast::ZeroType, ast::Node::ref_type::weak >; | 
|---|
|  | 291 | template class ast::ptr_base< ast::ZeroType, ast::Node::ref_type::strong >; | 
|---|
|  | 292 | template class ast::ptr_base< ast::OneType, ast::Node::ref_type::weak >; | 
|---|
|  | 293 | template class ast::ptr_base< ast::OneType, ast::Node::ref_type::strong >; | 
|---|
|  | 294 | template class ast::ptr_base< ast::GlobalScopeType, ast::Node::ref_type::weak >; | 
|---|
|  | 295 | template class ast::ptr_base< ast::GlobalScopeType, ast::Node::ref_type::strong >; | 
|---|
|  | 296 | template class ast::ptr_base< ast::Designation, ast::Node::ref_type::weak >; | 
|---|
|  | 297 | template class ast::ptr_base< ast::Designation, ast::Node::ref_type::strong >; | 
|---|
|  | 298 | template class ast::ptr_base< ast::Init, ast::Node::ref_type::weak >; | 
|---|
|  | 299 | template class ast::ptr_base< ast::Init, ast::Node::ref_type::strong >; | 
|---|
|  | 300 | template class ast::ptr_base< ast::SingleInit, ast::Node::ref_type::weak >; | 
|---|
|  | 301 | template class ast::ptr_base< ast::SingleInit, ast::Node::ref_type::strong >; | 
|---|
|  | 302 | template class ast::ptr_base< ast::ListInit, ast::Node::ref_type::weak >; | 
|---|
|  | 303 | template class ast::ptr_base< ast::ListInit, ast::Node::ref_type::strong >; | 
|---|
|  | 304 | template class ast::ptr_base< ast::ConstructorInit, ast::Node::ref_type::weak >; | 
|---|
|  | 305 | template class ast::ptr_base< ast::ConstructorInit, ast::Node::ref_type::strong >; | 
|---|
|  | 306 | template class ast::ptr_base< ast::Attribute, ast::Node::ref_type::weak >; | 
|---|
|  | 307 | template class ast::ptr_base< ast::Attribute, ast::Node::ref_type::strong >; | 
|---|
|  | 308 | template class ast::ptr_base< ast::TypeSubstitution, ast::Node::ref_type::weak >; | 
|---|
| [52a4d69] | 309 | template class ast::ptr_base< ast::TypeSubstitution, ast::Node::ref_type::strong >; | 
|---|