@@ -12,7 +12,6 @@ SharedASTBuilder::SharedASTBuilder()
12
12
{
13
13
}
14
14
15
-
16
15
void SharedASTBuilder::init (Session* session)
17
16
{
18
17
m_namePool = session->getNamePool ();
@@ -55,14 +54,14 @@ const ReflectClassInfo* SharedASTBuilder::findClassInfo(const UnownedStringSlice
55
54
return m_sliceToTypeMap.TryGetValue (slice, typeInfo) ? typeInfo : nullptr ;
56
55
}
57
56
58
- SyntaxClass<RefObject > SharedASTBuilder::findSyntaxClass (const UnownedStringSlice& slice)
57
+ SyntaxClass<NodeBase > SharedASTBuilder::findSyntaxClass (const UnownedStringSlice& slice)
59
58
{
60
59
const ReflectClassInfo* typeInfo;
61
60
if (m_sliceToTypeMap.TryGetValue (slice, typeInfo))
62
61
{
63
- return SyntaxClass<RefObject >(typeInfo);
62
+ return SyntaxClass<NodeBase >(typeInfo);
64
63
}
65
- return SyntaxClass<RefObject >();
64
+ return SyntaxClass<NodeBase >();
66
65
}
67
66
68
67
const ReflectClassInfo* SharedASTBuilder::findClassInfo (Name* name)
@@ -71,14 +70,14 @@ const ReflectClassInfo* SharedASTBuilder::findClassInfo(Name* name)
71
70
return m_nameToTypeMap.TryGetValue (name, typeInfo) ? typeInfo : nullptr ;
72
71
}
73
72
74
- SyntaxClass<RefObject > SharedASTBuilder::findSyntaxClass (Name* name)
73
+ SyntaxClass<NodeBase > SharedASTBuilder::findSyntaxClass (Name* name)
75
74
{
76
75
const ReflectClassInfo* typeInfo;
77
76
if (m_nameToTypeMap.TryGetValue (name, typeInfo))
78
77
{
79
- return SyntaxClass<RefObject >(typeInfo);
78
+ return SyntaxClass<NodeBase >(typeInfo);
80
79
}
81
- return SyntaxClass<RefObject >();
80
+ return SyntaxClass<NodeBase >();
82
81
}
83
82
84
83
Type* SharedASTBuilder::getStringType ()
@@ -106,7 +105,7 @@ SharedASTBuilder::~SharedASTBuilder()
106
105
// Release built in types..
107
106
for (Index i = 0 ; i < SLANG_COUNT_OF (m_builtinTypes); ++i)
108
107
{
109
- m_builtinTypes[i]. setNull () ;
108
+ m_builtinTypes[i] = nullptr ;
110
109
}
111
110
112
111
if (m_astBuilder)
@@ -115,13 +114,13 @@ SharedASTBuilder::~SharedASTBuilder()
115
114
}
116
115
}
117
116
118
- void SharedASTBuilder::registerBuiltinDecl (RefPtr< Decl> decl, RefPtr< BuiltinTypeModifier> modifier)
117
+ void SharedASTBuilder::registerBuiltinDecl (Decl* decl, BuiltinTypeModifier* modifier)
119
118
{
120
- auto type = DeclRefType::create (m_astBuilder, DeclRef<Decl>(decl. Ptr () , nullptr ));
119
+ auto type = DeclRefType::create (m_astBuilder, DeclRef<Decl>(decl, nullptr ));
121
120
m_builtinTypes[Index (modifier->tag )] = type;
122
121
}
123
122
124
- void SharedASTBuilder::registerMagicDecl (RefPtr< Decl> decl, RefPtr< MagicTypeModifier> modifier)
123
+ void SharedASTBuilder::registerMagicDecl (Decl* decl, MagicTypeModifier* modifier)
125
124
{
126
125
// In some cases the modifier will have been applied to the
127
126
// "inner" declaration of a `GenericDecl`, but what we
@@ -131,94 +130,110 @@ void SharedASTBuilder::registerMagicDecl(RefPtr<Decl> decl, RefPtr<MagicTypeModi
131
130
if (auto genericDecl = as<GenericDecl>(decl->parentDecl ))
132
131
declToRegister = genericDecl;
133
132
134
- m_magicDecls[modifier->name ] = declToRegister. Ptr () ;
133
+ m_magicDecls[modifier->name ] = declToRegister;
135
134
}
136
135
137
- RefPtr< Decl> SharedASTBuilder::findMagicDecl (const String& name)
136
+ Decl* SharedASTBuilder::findMagicDecl (const String& name)
138
137
{
139
138
return m_magicDecls[name].GetValue ();
140
139
}
141
140
142
141
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ASTBuilder !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
143
142
144
- ASTBuilder::ASTBuilder (SharedASTBuilder* sharedASTBuilder):
145
- m_sharedASTBuilder (sharedASTBuilder)
143
+ ASTBuilder::ASTBuilder (SharedASTBuilder* sharedASTBuilder, const String& name):
144
+ m_sharedASTBuilder (sharedASTBuilder),
145
+ m_name (name),
146
+ m_id (sharedASTBuilder->m_id++),
147
+ m_arena (2048 )
146
148
{
147
149
SLANG_ASSERT (sharedASTBuilder);
148
150
}
149
151
150
152
ASTBuilder::ASTBuilder ():
151
- m_sharedASTBuilder (nullptr )
153
+ m_sharedASTBuilder (nullptr ),
154
+ m_id (-1 ),
155
+ m_arena (2048 )
156
+ {
157
+ m_name = " ShadedASTBuilder::m_astBuilder" ;
158
+ }
159
+
160
+ ASTBuilder::~ASTBuilder ()
152
161
{
162
+ for (NodeBase* node : m_nodes)
163
+ {
164
+ const ReflectClassInfo* info = ReflectClassInfo::getInfo (node->astNodeType );
165
+ SLANG_ASSERT (info->m_destroyFunc );
166
+ info->m_destroyFunc (node);
167
+ }
153
168
}
154
169
155
- RefPtr< PtrType> ASTBuilder::getPtrType (RefPtr< Type> valueType)
170
+ PtrType* ASTBuilder::getPtrType (Type* valueType)
156
171
{
157
- return getPtrType (valueType, " PtrType" ). dynamicCast <PtrType>( );
172
+ return dynamicCast<PtrType>( getPtrType (valueType, " PtrType" ));
158
173
}
159
174
160
175
// Construct the type `Out<valueType>`
161
- RefPtr< OutType> ASTBuilder::getOutType (RefPtr< Type> valueType)
176
+ OutType* ASTBuilder::getOutType (Type* valueType)
162
177
{
163
- return getPtrType (valueType, " OutType" ). dynamicCast <OutType>( );
178
+ return dynamicCast<OutType>( getPtrType (valueType, " OutType" ));
164
179
}
165
180
166
- RefPtr< InOutType> ASTBuilder::getInOutType (RefPtr< Type> valueType)
181
+ InOutType* ASTBuilder::getInOutType (Type* valueType)
167
182
{
168
- return getPtrType (valueType, " InOutType" ). dynamicCast <InOutType>( );
183
+ return dynamicCast<InOutType>( getPtrType (valueType, " InOutType" ));
169
184
}
170
185
171
- RefPtr< RefType> ASTBuilder::getRefType (RefPtr< Type> valueType)
186
+ RefType* ASTBuilder::getRefType (Type* valueType)
172
187
{
173
- return getPtrType (valueType, " RefType" ). dynamicCast <RefType>( );
188
+ return dynamicCast<RefType>( getPtrType (valueType, " RefType" ));
174
189
}
175
190
176
- RefPtr< PtrTypeBase> ASTBuilder::getPtrType (RefPtr< Type> valueType, char const * ptrTypeName)
191
+ PtrTypeBase* ASTBuilder::getPtrType (Type* valueType, char const * ptrTypeName)
177
192
{
178
- auto genericDecl = m_sharedASTBuilder->findMagicDecl (ptrTypeName). dynamicCast <GenericDecl>( );
193
+ auto genericDecl = dynamicCast<GenericDecl>( m_sharedASTBuilder->findMagicDecl (ptrTypeName));
179
194
return getPtrType (valueType, genericDecl);
180
195
}
181
196
182
- RefPtr< PtrTypeBase> ASTBuilder::getPtrType (RefPtr< Type> valueType, GenericDecl* genericDecl)
197
+ PtrTypeBase* ASTBuilder::getPtrType (Type* valueType, GenericDecl* genericDecl)
183
198
{
184
199
auto typeDecl = genericDecl->inner ;
185
200
186
201
auto substitutions = create<GenericSubstitution>();
187
202
substitutions->genericDecl = genericDecl;
188
203
substitutions->args .add (valueType);
189
204
190
- auto declRef = DeclRef<Decl>(typeDecl. Ptr () , substitutions);
205
+ auto declRef = DeclRef<Decl>(typeDecl, substitutions);
191
206
auto rsType = DeclRefType::create (this , declRef);
192
207
return as<PtrTypeBase>(rsType);
193
208
}
194
209
195
- RefPtr< ArrayExpressionType> ASTBuilder::getArrayType (Type* elementType, IntVal* elementCount)
210
+ ArrayExpressionType* ASTBuilder::getArrayType (Type* elementType, IntVal* elementCount)
196
211
{
197
- RefPtr< ArrayExpressionType> arrayType = create<ArrayExpressionType>();
212
+ ArrayExpressionType* arrayType = create<ArrayExpressionType>();
198
213
arrayType->baseType = elementType;
199
214
arrayType->arrayLength = elementCount;
200
215
return arrayType;
201
216
}
202
217
203
- RefPtr< VectorExpressionType> ASTBuilder::getVectorType (
204
- RefPtr< Type> elementType,
205
- RefPtr< IntVal> elementCount)
218
+ VectorExpressionType* ASTBuilder::getVectorType (
219
+ Type* elementType,
220
+ IntVal* elementCount)
206
221
{
207
- auto vectorGenericDecl = m_sharedASTBuilder->findMagicDecl (" Vector" ). as <GenericDecl>( );
222
+ auto vectorGenericDecl = as<GenericDecl>( m_sharedASTBuilder->findMagicDecl (" Vector" ));
208
223
209
224
auto vectorTypeDecl = vectorGenericDecl->inner ;
210
225
211
226
auto substitutions = create<GenericSubstitution>();
212
- substitutions->genericDecl = vectorGenericDecl. Ptr () ;
227
+ substitutions->genericDecl = vectorGenericDecl;
213
228
substitutions->args .add (elementType);
214
229
substitutions->args .add (elementCount);
215
230
216
- auto declRef = DeclRef<Decl>(vectorTypeDecl. Ptr () , substitutions);
231
+ auto declRef = DeclRef<Decl>(vectorTypeDecl, substitutions);
217
232
218
- return DeclRefType::create (this , declRef). as <VectorExpressionType>( );
233
+ return as<VectorExpressionType>( DeclRefType::create (this , declRef));
219
234
}
220
235
221
- RefPtr< TypeType> ASTBuilder::getTypeType (Type* type)
236
+ TypeType* ASTBuilder::getTypeType (Type* type)
222
237
{
223
238
return create<TypeType>(type);
224
239
}
0 commit comments