| [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
 | 
|---|
 | 11 | // Last Modified By :
 | 
|---|
 | 12 | // Last Modified On :
 | 
|---|
 | 13 | // Update Count     :
 | 
|---|
 | 14 | //
 | 
|---|
 | 15 | 
 | 
|---|
 | 16 | #include "Node.hpp"
 | 
|---|
 | 17 | #include "Fwd.hpp"
 | 
|---|
| [10a1225] | 18 | 
 | 
|---|
| [733074e] | 19 | #include <iostream>
 | 
|---|
 | 20 | 
 | 
|---|
| [10a1225] | 21 | #include "Attribute.hpp"
 | 
|---|
| [87701b6] | 22 | #include "Decl.hpp"
 | 
|---|
 | 23 | #include "Expr.hpp"
 | 
|---|
| [10a1225] | 24 | #include "Init.hpp"
 | 
|---|
| [87701b6] | 25 | #include "Stmt.hpp"
 | 
|---|
 | 26 | #include "Type.hpp"
 | 
|---|
| [10a1225] | 27 | #include "TypeSubstitution.hpp"
 | 
|---|
| [87701b6] | 28 | 
 | 
|---|
| [461046f] | 29 | #include "Print.hpp"
 | 
|---|
 | 30 | 
 | 
|---|
| [87701b6] | 31 | template< typename node_t, enum ast::Node::ref_type ref_t >
 | 
|---|
 | 32 | void ast::ptr_base<node_t, ref_t>::_inc( const node_t * node ) { node->increment(ref_t); }
 | 
|---|
 | 33 | 
 | 
|---|
 | 34 | template< typename node_t, enum ast::Node::ref_type ref_t >
 | 
|---|
 | 35 | void ast::ptr_base<node_t, ref_t>::_dec( const node_t * node ) { node->decrement(ref_t); }
 | 
|---|
 | 36 | 
 | 
|---|
| [10a1225] | 37 | template< typename node_t, enum ast::Node::ref_type ref_t >
 | 
|---|
| [76ed81f] | 38 | node_t * ast::ptr_base<node_t, ref_t>::get_and_mutate() {
 | 
|---|
| [10a1225] | 39 |         // get mutable version of `n`
 | 
|---|
 | 40 |         auto r = mutate( node );
 | 
|---|
 | 41 |         // re-assign mutable version in case `mutate()` produced a new pointer
 | 
|---|
 | 42 |         assign( r );
 | 
|---|
 | 43 |         return r;
 | 
|---|
 | 44 | }
 | 
|---|
 | 45 | 
 | 
|---|
| [76ed81f] | 46 | template< typename node_t, enum ast::Node::ref_type ref_t >
 | 
|---|
 | 47 | node_t * ast::ptr_base<node_t, ref_t>::set_and_mutate( const node_t * n ) {
 | 
|---|
 | 48 |         // ensure ownership of `n` by this node to avoid spurious single-owner mutates
 | 
|---|
 | 49 |         assign( n );
 | 
|---|
 | 50 |         // return mutable version
 | 
|---|
 | 51 |         return get_and_mutate();
 | 
|---|
 | 52 | }
 | 
|---|
 | 53 | 
 | 
|---|
| [733074e] | 54 | std::ostream & ast::operator<< ( std::ostream & out, const ast::Node * node ) {
 | 
|---|
| [461046f] | 55 |         print(out, node);
 | 
|---|
| [733074e] | 56 |         return out;
 | 
|---|
 | 57 | }
 | 
|---|
 | 58 | 
 | 
|---|
| [87701b6] | 59 | template class ast::ptr_base< ast::Node, ast::Node::ref_type::weak >;
 | 
|---|
 | 60 | template class ast::ptr_base< ast::Node, ast::Node::ref_type::strong >;
 | 
|---|
 | 61 | template class ast::ptr_base< ast::ParseNode, ast::Node::ref_type::weak >;
 | 
|---|
 | 62 | template class ast::ptr_base< ast::ParseNode, ast::Node::ref_type::strong >;
 | 
|---|
 | 63 | template class ast::ptr_base< ast::Decl, ast::Node::ref_type::weak >;
 | 
|---|
 | 64 | template class ast::ptr_base< ast::Decl, ast::Node::ref_type::strong >;
 | 
|---|
 | 65 | template class ast::ptr_base< ast::DeclWithType, ast::Node::ref_type::weak >;
 | 
|---|
 | 66 | template class ast::ptr_base< ast::DeclWithType, ast::Node::ref_type::strong >;
 | 
|---|
 | 67 | template class ast::ptr_base< ast::ObjectDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 68 | template class ast::ptr_base< ast::ObjectDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 69 | template class ast::ptr_base< ast::FunctionDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 70 | template class ast::ptr_base< ast::FunctionDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 71 | template class ast::ptr_base< ast::AggregateDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 72 | template class ast::ptr_base< ast::AggregateDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 73 | template class ast::ptr_base< ast::StructDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 74 | template class ast::ptr_base< ast::StructDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 75 | template class ast::ptr_base< ast::UnionDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 76 | template class ast::ptr_base< ast::UnionDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 77 | template class ast::ptr_base< ast::EnumDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 78 | template class ast::ptr_base< ast::EnumDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 79 | template class ast::ptr_base< ast::TraitDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 80 | template class ast::ptr_base< ast::TraitDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 81 | template class ast::ptr_base< ast::NamedTypeDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 82 | template class ast::ptr_base< ast::NamedTypeDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 83 | template class ast::ptr_base< ast::TypeDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 84 | template class ast::ptr_base< ast::TypeDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 85 | template class ast::ptr_base< ast::TypedefDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 86 | template class ast::ptr_base< ast::TypedefDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 87 | template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 88 | template class ast::ptr_base< ast::AsmDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 89 | template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::weak >;
 | 
|---|
 | 90 | template class ast::ptr_base< ast::StaticAssertDecl, ast::Node::ref_type::strong >;
 | 
|---|
 | 91 | template class ast::ptr_base< ast::Stmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 92 | template class ast::ptr_base< ast::Stmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 93 | template class ast::ptr_base< ast::CompoundStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 94 | template class ast::ptr_base< ast::CompoundStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 95 | template class ast::ptr_base< ast::ExprStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 96 | template class ast::ptr_base< ast::ExprStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 97 | template class ast::ptr_base< ast::AsmStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 98 | template class ast::ptr_base< ast::AsmStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 99 | template class ast::ptr_base< ast::DirectiveStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 100 | template class ast::ptr_base< ast::DirectiveStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 101 | template class ast::ptr_base< ast::IfStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 102 | template class ast::ptr_base< ast::IfStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 103 | template class ast::ptr_base< ast::WhileStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 104 | template class ast::ptr_base< ast::WhileStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 105 | template class ast::ptr_base< ast::ForStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 106 | template class ast::ptr_base< ast::ForStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 107 | template class ast::ptr_base< ast::SwitchStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 108 | template class ast::ptr_base< ast::SwitchStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 109 | template class ast::ptr_base< ast::CaseStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 110 | template class ast::ptr_base< ast::CaseStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 111 | template class ast::ptr_base< ast::BranchStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 112 | template class ast::ptr_base< ast::BranchStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 113 | template class ast::ptr_base< ast::ReturnStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 114 | template class ast::ptr_base< ast::ReturnStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 115 | template class ast::ptr_base< ast::ThrowStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 116 | template class ast::ptr_base< ast::ThrowStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 117 | template class ast::ptr_base< ast::TryStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 118 | template class ast::ptr_base< ast::TryStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 119 | template class ast::ptr_base< ast::CatchStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 120 | template class ast::ptr_base< ast::CatchStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 121 | template class ast::ptr_base< ast::FinallyStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 122 | template class ast::ptr_base< ast::FinallyStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 123 | template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 124 | template class ast::ptr_base< ast::WaitForStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 125 | template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 126 | template class ast::ptr_base< ast::WithStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 127 | template class ast::ptr_base< ast::DeclStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 128 | template class ast::ptr_base< ast::DeclStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 129 | template class ast::ptr_base< ast::NullStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 130 | template class ast::ptr_base< ast::NullStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 131 | template class ast::ptr_base< ast::ImplicitCtorDtorStmt, ast::Node::ref_type::weak >;
 | 
|---|
 | 132 | template class ast::ptr_base< ast::ImplicitCtorDtorStmt, ast::Node::ref_type::strong >;
 | 
|---|
 | 133 | template class ast::ptr_base< ast::Expr, ast::Node::ref_type::weak >;
 | 
|---|
 | 134 | template class ast::ptr_base< ast::Expr, ast::Node::ref_type::strong >;
 | 
|---|
 | 135 | template class ast::ptr_base< ast::ApplicationExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 136 | template class ast::ptr_base< ast::ApplicationExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 137 | template class ast::ptr_base< ast::UntypedExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 138 | template class ast::ptr_base< ast::UntypedExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 139 | template class ast::ptr_base< ast::NameExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 140 | template class ast::ptr_base< ast::NameExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 141 | template class ast::ptr_base< ast::AddressExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 142 | template class ast::ptr_base< ast::AddressExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 143 | template class ast::ptr_base< ast::LabelAddressExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 144 | template class ast::ptr_base< ast::LabelAddressExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 145 | template class ast::ptr_base< ast::CastExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 146 | template class ast::ptr_base< ast::CastExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 147 | template class ast::ptr_base< ast::KeywordCastExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 148 | template class ast::ptr_base< ast::KeywordCastExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 149 | template class ast::ptr_base< ast::VirtualCastExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 150 | template class ast::ptr_base< ast::VirtualCastExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 151 | template class ast::ptr_base< ast::MemberExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 152 | template class ast::ptr_base< ast::MemberExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 153 | template class ast::ptr_base< ast::UntypedMemberExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 154 | template class ast::ptr_base< ast::UntypedMemberExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 155 | template class ast::ptr_base< ast::VariableExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 156 | template class ast::ptr_base< ast::VariableExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 157 | template class ast::ptr_base< ast::ConstantExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 158 | template class ast::ptr_base< ast::ConstantExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 159 | template class ast::ptr_base< ast::SizeofExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 160 | template class ast::ptr_base< ast::SizeofExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 161 | template class ast::ptr_base< ast::AlignofExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 162 | template class ast::ptr_base< ast::AlignofExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 163 | template class ast::ptr_base< ast::UntypedOffsetofExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 164 | template class ast::ptr_base< ast::UntypedOffsetofExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 165 | template class ast::ptr_base< ast::OffsetofExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 166 | template class ast::ptr_base< ast::OffsetofExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 167 | template class ast::ptr_base< ast::OffsetPackExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 168 | template class ast::ptr_base< ast::OffsetPackExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 169 | template class ast::ptr_base< ast::LogicalExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 170 | template class ast::ptr_base< ast::LogicalExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 171 | template class ast::ptr_base< ast::ConditionalExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 172 | template class ast::ptr_base< ast::ConditionalExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 173 | template class ast::ptr_base< ast::CommaExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 174 | template class ast::ptr_base< ast::CommaExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 175 | template class ast::ptr_base< ast::TypeExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 176 | template class ast::ptr_base< ast::TypeExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 177 | template class ast::ptr_base< ast::AsmExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 178 | template class ast::ptr_base< ast::AsmExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 179 | template class ast::ptr_base< ast::ImplicitCopyCtorExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 180 | template class ast::ptr_base< ast::ImplicitCopyCtorExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 181 | template class ast::ptr_base< ast::ConstructorExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 182 | template class ast::ptr_base< ast::ConstructorExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 183 | template class ast::ptr_base< ast::CompoundLiteralExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 184 | template class ast::ptr_base< ast::CompoundLiteralExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 185 | template class ast::ptr_base< ast::RangeExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 186 | template class ast::ptr_base< ast::RangeExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 187 | template class ast::ptr_base< ast::UntypedTupleExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 188 | template class ast::ptr_base< ast::UntypedTupleExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 189 | template class ast::ptr_base< ast::TupleExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 190 | template class ast::ptr_base< ast::TupleExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 191 | template class ast::ptr_base< ast::TupleIndexExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 192 | template class ast::ptr_base< ast::TupleIndexExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 193 | template class ast::ptr_base< ast::TupleAssignExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 194 | template class ast::ptr_base< ast::TupleAssignExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 195 | template class ast::ptr_base< ast::StmtExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 196 | template class ast::ptr_base< ast::StmtExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 197 | template class ast::ptr_base< ast::UniqueExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 198 | template class ast::ptr_base< ast::UniqueExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 199 | template class ast::ptr_base< ast::UntypedInitExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 200 | template class ast::ptr_base< ast::UntypedInitExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 201 | template class ast::ptr_base< ast::InitExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 202 | template class ast::ptr_base< ast::InitExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 203 | template class ast::ptr_base< ast::DeletedExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 204 | template class ast::ptr_base< ast::DeletedExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 205 | template class ast::ptr_base< ast::DefaultArgExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 206 | template class ast::ptr_base< ast::DefaultArgExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 207 | template class ast::ptr_base< ast::GenericExpr, ast::Node::ref_type::weak >;
 | 
|---|
 | 208 | template class ast::ptr_base< ast::GenericExpr, ast::Node::ref_type::strong >;
 | 
|---|
 | 209 | template class ast::ptr_base< ast::Type, ast::Node::ref_type::weak >;
 | 
|---|
 | 210 | template class ast::ptr_base< ast::Type, ast::Node::ref_type::strong >;
 | 
|---|
 | 211 | template class ast::ptr_base< ast::VoidType, ast::Node::ref_type::weak >;
 | 
|---|
 | 212 | template class ast::ptr_base< ast::VoidType, ast::Node::ref_type::strong >;
 | 
|---|
 | 213 | template class ast::ptr_base< ast::BasicType, ast::Node::ref_type::weak >;
 | 
|---|
 | 214 | template class ast::ptr_base< ast::BasicType, ast::Node::ref_type::strong >;
 | 
|---|
 | 215 | template class ast::ptr_base< ast::PointerType, ast::Node::ref_type::weak >;
 | 
|---|
 | 216 | template class ast::ptr_base< ast::PointerType, ast::Node::ref_type::strong >;
 | 
|---|
 | 217 | template class ast::ptr_base< ast::ArrayType, ast::Node::ref_type::weak >;
 | 
|---|
 | 218 | template class ast::ptr_base< ast::ArrayType, ast::Node::ref_type::strong >;
 | 
|---|
 | 219 | template class ast::ptr_base< ast::ReferenceType, ast::Node::ref_type::weak >;
 | 
|---|
 | 220 | template class ast::ptr_base< ast::ReferenceType, ast::Node::ref_type::strong >;
 | 
|---|
 | 221 | template class ast::ptr_base< ast::QualifiedType, ast::Node::ref_type::weak >;
 | 
|---|
 | 222 | template class ast::ptr_base< ast::QualifiedType, ast::Node::ref_type::strong >;
 | 
|---|
 | 223 | template class ast::ptr_base< ast::FunctionType, ast::Node::ref_type::weak >;
 | 
|---|
 | 224 | template class ast::ptr_base< ast::FunctionType, ast::Node::ref_type::strong >;
 | 
|---|
 | 225 | template class ast::ptr_base< ast::ReferenceToType, ast::Node::ref_type::weak >;
 | 
|---|
 | 226 | template class ast::ptr_base< ast::ReferenceToType, ast::Node::ref_type::strong >;
 | 
|---|
 | 227 | template class ast::ptr_base< ast::StructInstType, ast::Node::ref_type::weak >;
 | 
|---|
 | 228 | template class ast::ptr_base< ast::StructInstType, ast::Node::ref_type::strong >;
 | 
|---|
 | 229 | template class ast::ptr_base< ast::UnionInstType, ast::Node::ref_type::weak >;
 | 
|---|
 | 230 | template class ast::ptr_base< ast::UnionInstType, ast::Node::ref_type::strong >;
 | 
|---|
 | 231 | template class ast::ptr_base< ast::EnumInstType, ast::Node::ref_type::weak >;
 | 
|---|
 | 232 | template class ast::ptr_base< ast::EnumInstType, ast::Node::ref_type::strong >;
 | 
|---|
 | 233 | template class ast::ptr_base< ast::TraitInstType, ast::Node::ref_type::weak >;
 | 
|---|
 | 234 | template class ast::ptr_base< ast::TraitInstType, ast::Node::ref_type::strong >;
 | 
|---|
 | 235 | template class ast::ptr_base< ast::TypeInstType, ast::Node::ref_type::weak >;
 | 
|---|
 | 236 | template class ast::ptr_base< ast::TypeInstType, ast::Node::ref_type::strong >;
 | 
|---|
 | 237 | template class ast::ptr_base< ast::TupleType, ast::Node::ref_type::weak >;
 | 
|---|
 | 238 | template class ast::ptr_base< ast::TupleType, ast::Node::ref_type::strong >;
 | 
|---|
 | 239 | template class ast::ptr_base< ast::TypeofType, ast::Node::ref_type::weak >;
 | 
|---|
 | 240 | template class ast::ptr_base< ast::TypeofType, ast::Node::ref_type::strong >;
 | 
|---|
 | 241 | template class ast::ptr_base< ast::VarArgsType, ast::Node::ref_type::weak >;
 | 
|---|
 | 242 | template class ast::ptr_base< ast::VarArgsType, ast::Node::ref_type::strong >;
 | 
|---|
 | 243 | template class ast::ptr_base< ast::ZeroType, ast::Node::ref_type::weak >;
 | 
|---|
 | 244 | template class ast::ptr_base< ast::ZeroType, ast::Node::ref_type::strong >;
 | 
|---|
 | 245 | template class ast::ptr_base< ast::OneType, ast::Node::ref_type::weak >;
 | 
|---|
 | 246 | template class ast::ptr_base< ast::OneType, ast::Node::ref_type::strong >;
 | 
|---|
 | 247 | template class ast::ptr_base< ast::GlobalScopeType, ast::Node::ref_type::weak >;
 | 
|---|
 | 248 | template class ast::ptr_base< ast::GlobalScopeType, ast::Node::ref_type::strong >;
 | 
|---|
 | 249 | template class ast::ptr_base< ast::Designation, ast::Node::ref_type::weak >;
 | 
|---|
 | 250 | template class ast::ptr_base< ast::Designation, ast::Node::ref_type::strong >;
 | 
|---|
 | 251 | template class ast::ptr_base< ast::Init, ast::Node::ref_type::weak >;
 | 
|---|
 | 252 | template class ast::ptr_base< ast::Init, ast::Node::ref_type::strong >;
 | 
|---|
 | 253 | template class ast::ptr_base< ast::SingleInit, ast::Node::ref_type::weak >;
 | 
|---|
 | 254 | template class ast::ptr_base< ast::SingleInit, ast::Node::ref_type::strong >;
 | 
|---|
 | 255 | template class ast::ptr_base< ast::ListInit, ast::Node::ref_type::weak >;
 | 
|---|
 | 256 | template class ast::ptr_base< ast::ListInit, ast::Node::ref_type::strong >;
 | 
|---|
 | 257 | template class ast::ptr_base< ast::ConstructorInit, ast::Node::ref_type::weak >;
 | 
|---|
 | 258 | template class ast::ptr_base< ast::ConstructorInit, ast::Node::ref_type::strong >;
 | 
|---|
 | 259 | template class ast::ptr_base< ast::Attribute, ast::Node::ref_type::weak >;
 | 
|---|
 | 260 | template class ast::ptr_base< ast::Attribute, ast::Node::ref_type::strong >;
 | 
|---|
 | 261 | template class ast::ptr_base< ast::TypeSubstitution, ast::Node::ref_type::weak >;
 | 
|---|
 | 262 | template class ast::ptr_base< ast::TypeSubstitution, ast::Node::ref_type::strong >;
 | 
|---|