Skip to content

Commit 52026c7

Browse files
authored
Merge branch 'master' into findtypebynamefix
2 parents 92fc3aa + 43c1467 commit 52026c7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1658
-1564
lines changed

source/slang/slang-ast-base.h

+23-27
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414
namespace Slang
1515
{
1616

17-
// Signals to C++ extractor that RefObject is a base class, that isn't reflected to C++ extractor
18-
SLANG_REFLECT_BASE_CLASS(RefObject)
19-
2017
struct ReflectClassInfo;
2118

22-
class NodeBase : public RefObject
19+
class NodeBase
2320
{
2421
SLANG_ABSTRACT_CLASS(NodeBase)
22+
SLANG_CLASS_ROOT
2523

2624
// MUST be called before used. Called automatically via the ASTBuilder.
2725
// Note that the astBuilder is not stored in the NodeBase derived types by default.
@@ -91,14 +89,14 @@ class Val : public NodeBase
9189

9290
// construct a new value by applying a set of parameter
9391
// substitutions to this one
94-
RefPtr<Val> substitute(ASTBuilder* astBuilder, SubstitutionSet subst);
92+
Val* substitute(ASTBuilder* astBuilder, SubstitutionSet subst);
9593

9694
// Lower-level interface for substitution. Like the basic
9795
// `Substitute` above, but also takes a by-reference
9896
// integer parameter that should be incremented when
9997
// returning a modified value (this can help the caller
10098
// decide whether they need to do anything).
101-
RefPtr<Val> substituteImpl(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff);
99+
Val* substituteImpl(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff);
102100

103101
bool equalsVal(Val* val);
104102
String toString();
@@ -109,7 +107,7 @@ class Val : public NodeBase
109107
}
110108

111109
// Overrides should be public so base classes can access
112-
RefPtr<Val> _substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff);
110+
Val* _substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff);
113111
bool _equalsValOverride(Val* val);
114112
String _toStringOverride();
115113
HashCode _getHashCodeOverride();
@@ -154,17 +152,15 @@ class Type: public Val
154152

155153
Type* getCanonicalType();
156154

157-
~Type();
158-
159155
// Overrides should be public so base classes can access
160-
RefPtr<Val> _substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff);
156+
Val* _substituteImplOverride(ASTBuilder* astBuilder, SubstitutionSet subst, int* ioDiff);
161157
bool _equalsValOverride(Val* val);
162158
bool _equalsImplOverride(Type* type);
163-
RefPtr<Type> _createCanonicalTypeOverride();
159+
Type* _createCanonicalTypeOverride();
164160

165161
protected:
166162
bool equalsImpl(Type* type);
167-
RefPtr<Type> createCanonicalType();
163+
Type* createCanonicalType();
168164

169165
Type* canonicalType = nullptr;
170166

@@ -184,17 +180,17 @@ class Substitutions: public NodeBase
184180
SLANG_ABSTRACT_CLASS(Substitutions)
185181

186182
// The next outer that this one refines.
187-
RefPtr<Substitutions> outer;
183+
Substitutions* outer = nullptr;
188184

189185
// Apply a set of substitutions to the bindings in this substitution
190-
RefPtr<Substitutions> applySubstitutionsShallow(ASTBuilder* astBuilder, SubstitutionSet substSet, RefPtr<Substitutions> substOuter, int* ioDiff);
186+
Substitutions* applySubstitutionsShallow(ASTBuilder* astBuilder, SubstitutionSet substSet, Substitutions* substOuter, int* ioDiff);
191187

192188
// Check if these are equivalent substitutions to another set
193189
bool equals(Substitutions* subst);
194190
HashCode getHashCode() const;
195191

196192
// Overrides should be public so base classes can access
197-
RefPtr<Substitutions> _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, RefPtr<Substitutions> substOuter, int* ioDiff);
193+
Substitutions* _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, Substitutions* substOuter, int* ioDiff);
198194
bool _equalsOverride(Substitutions* subst);
199195
HashCode _getHashCodeOverride() const;
200196
};
@@ -205,13 +201,13 @@ class GenericSubstitution : public Substitutions
205201

206202
// The generic declaration that defines the
207203
// parameters we are binding to arguments
208-
GenericDecl* genericDecl;
204+
GenericDecl* genericDecl = nullptr;
209205

210206
// The actual values of the arguments
211-
List<RefPtr<Val> > args;
207+
List<Val* > args;
212208

213209
// Overrides should be public so base classes can access
214-
RefPtr<Substitutions> _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, RefPtr<Substitutions> substOuter, int* ioDiff);
210+
Substitutions* _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, Substitutions* substOuter, int* ioDiff);
215211
bool _equalsOverride(Substitutions* subst);
216212
HashCode _getHashCodeOverride() const;
217213
};
@@ -225,11 +221,11 @@ class ThisTypeSubstitution : public Substitutions
225221

226222
// A witness that shows that the concrete type used to
227223
// specialize the interface conforms to the interface.
228-
RefPtr<SubtypeWitness> witness;
224+
SubtypeWitness* witness = nullptr;
229225

230226
// Overrides should be public so base classes can access
231227
// The actual type that provides the lookup scope for an associated type
232-
RefPtr<Substitutions> _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, RefPtr<Substitutions> substOuter, int* ioDiff);
228+
Substitutions* _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, Substitutions* substOuter, int* ioDiff);
233229
bool _equalsOverride(Substitutions* subst);
234230
HashCode _getHashCodeOverride() const;
235231
};
@@ -238,22 +234,22 @@ class GlobalGenericParamSubstitution : public Substitutions
238234
{
239235
SLANG_CLASS(GlobalGenericParamSubstitution)
240236
// the type_param decl to be substituted
241-
GlobalGenericParamDecl* paramDecl;
237+
GlobalGenericParamDecl* paramDecl = nullptr;
242238

243239
// the actual type to substitute in
244-
RefPtr<Type> actualType;
240+
Type* actualType = nullptr;
245241

246242
struct ConstraintArg
247243
{
248-
RefPtr<Decl> decl;
249-
RefPtr<Val> val;
244+
Decl* decl = nullptr;
245+
Val* val = nullptr;
250246
};
251247

252248
// the values that satisfy any constraints on the type parameter
253249
List<ConstraintArg> constraintArgs;
254250

255251
// Overrides should be public so base classes can access
256-
RefPtr<Substitutions> _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, RefPtr<Substitutions> substOuter, int* ioDiff);
252+
Substitutions* _applySubstitutionsShallowOverride(ASTBuilder* astBuilder, SubstitutionSet substSet, Substitutions* substOuter, int* ioDiff);
257253
bool _equalsOverride(Substitutions* subst);
258254
HashCode _getHashCodeOverride() const;
259255
};
@@ -276,7 +272,7 @@ class Modifier : public SyntaxNode
276272
void accept(IModifierVisitor* visitor, void* extra);
277273

278274
// Next modifier in linked list of modifiers on same piece of syntax
279-
RefPtr<Modifier> next;
275+
Modifier* next = nullptr;
280276

281277
// The keyword that was used to introduce t that was used to name this modifier.
282278
Name* name;
@@ -293,7 +289,7 @@ class ModifiableSyntaxNode : public SyntaxNode
293289
Modifiers modifiers;
294290

295291
template<typename T>
296-
FilteredModifierList<T> getModifiersOfType() { return FilteredModifierList<T>(modifiers.first.Ptr()); }
292+
FilteredModifierList<T> getModifiersOfType() { return FilteredModifierList<T>(modifiers.first); }
297293

298294
// Find the first modifier of a given type, or return `nullptr` if none is found.
299295
template<typename T>

source/slang/slang-ast-builder.cpp

+53-38
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ SharedASTBuilder::SharedASTBuilder()
1212
{
1313
}
1414

15-
1615
void SharedASTBuilder::init(Session* session)
1716
{
1817
m_namePool = session->getNamePool();
@@ -55,14 +54,14 @@ const ReflectClassInfo* SharedASTBuilder::findClassInfo(const UnownedStringSlice
5554
return m_sliceToTypeMap.TryGetValue(slice, typeInfo) ? typeInfo : nullptr;
5655
}
5756

58-
SyntaxClass<RefObject> SharedASTBuilder::findSyntaxClass(const UnownedStringSlice& slice)
57+
SyntaxClass<NodeBase> SharedASTBuilder::findSyntaxClass(const UnownedStringSlice& slice)
5958
{
6059
const ReflectClassInfo* typeInfo;
6160
if (m_sliceToTypeMap.TryGetValue(slice, typeInfo))
6261
{
63-
return SyntaxClass<RefObject>(typeInfo);
62+
return SyntaxClass<NodeBase>(typeInfo);
6463
}
65-
return SyntaxClass<RefObject>();
64+
return SyntaxClass<NodeBase>();
6665
}
6766

6867
const ReflectClassInfo* SharedASTBuilder::findClassInfo(Name* name)
@@ -71,14 +70,14 @@ const ReflectClassInfo* SharedASTBuilder::findClassInfo(Name* name)
7170
return m_nameToTypeMap.TryGetValue(name, typeInfo) ? typeInfo : nullptr;
7271
}
7372

74-
SyntaxClass<RefObject> SharedASTBuilder::findSyntaxClass(Name* name)
73+
SyntaxClass<NodeBase> SharedASTBuilder::findSyntaxClass(Name* name)
7574
{
7675
const ReflectClassInfo* typeInfo;
7776
if (m_nameToTypeMap.TryGetValue(name, typeInfo))
7877
{
79-
return SyntaxClass<RefObject>(typeInfo);
78+
return SyntaxClass<NodeBase>(typeInfo);
8079
}
81-
return SyntaxClass<RefObject>();
80+
return SyntaxClass<NodeBase>();
8281
}
8382

8483
Type* SharedASTBuilder::getStringType()
@@ -106,7 +105,7 @@ SharedASTBuilder::~SharedASTBuilder()
106105
// Release built in types..
107106
for (Index i = 0; i < SLANG_COUNT_OF(m_builtinTypes); ++i)
108107
{
109-
m_builtinTypes[i].setNull();
108+
m_builtinTypes[i] = nullptr;
110109
}
111110

112111
if (m_astBuilder)
@@ -115,13 +114,13 @@ SharedASTBuilder::~SharedASTBuilder()
115114
}
116115
}
117116

118-
void SharedASTBuilder::registerBuiltinDecl(RefPtr<Decl> decl, RefPtr<BuiltinTypeModifier> modifier)
117+
void SharedASTBuilder::registerBuiltinDecl(Decl* decl, BuiltinTypeModifier* modifier)
119118
{
120-
auto type = DeclRefType::create(m_astBuilder, DeclRef<Decl>(decl.Ptr(), nullptr));
119+
auto type = DeclRefType::create(m_astBuilder, DeclRef<Decl>(decl, nullptr));
121120
m_builtinTypes[Index(modifier->tag)] = type;
122121
}
123122

124-
void SharedASTBuilder::registerMagicDecl(RefPtr<Decl> decl, RefPtr<MagicTypeModifier> modifier)
123+
void SharedASTBuilder::registerMagicDecl(Decl* decl, MagicTypeModifier* modifier)
125124
{
126125
// In some cases the modifier will have been applied to the
127126
// "inner" declaration of a `GenericDecl`, but what we
@@ -131,94 +130,110 @@ void SharedASTBuilder::registerMagicDecl(RefPtr<Decl> decl, RefPtr<MagicTypeModi
131130
if (auto genericDecl = as<GenericDecl>(decl->parentDecl))
132131
declToRegister = genericDecl;
133132

134-
m_magicDecls[modifier->name] = declToRegister.Ptr();
133+
m_magicDecls[modifier->name] = declToRegister;
135134
}
136135

137-
RefPtr<Decl> SharedASTBuilder::findMagicDecl(const String& name)
136+
Decl* SharedASTBuilder::findMagicDecl(const String& name)
138137
{
139138
return m_magicDecls[name].GetValue();
140139
}
141140

142141
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ASTBuilder !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
143142

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)
146148
{
147149
SLANG_ASSERT(sharedASTBuilder);
148150
}
149151

150152
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()
152161
{
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+
}
153168
}
154169

155-
RefPtr<PtrType> ASTBuilder::getPtrType(RefPtr<Type> valueType)
170+
PtrType* ASTBuilder::getPtrType(Type* valueType)
156171
{
157-
return getPtrType(valueType, "PtrType").dynamicCast<PtrType>();
172+
return dynamicCast<PtrType>(getPtrType(valueType, "PtrType"));
158173
}
159174

160175
// Construct the type `Out<valueType>`
161-
RefPtr<OutType> ASTBuilder::getOutType(RefPtr<Type> valueType)
176+
OutType* ASTBuilder::getOutType(Type* valueType)
162177
{
163-
return getPtrType(valueType, "OutType").dynamicCast<OutType>();
178+
return dynamicCast<OutType>(getPtrType(valueType, "OutType"));
164179
}
165180

166-
RefPtr<InOutType> ASTBuilder::getInOutType(RefPtr<Type> valueType)
181+
InOutType* ASTBuilder::getInOutType(Type* valueType)
167182
{
168-
return getPtrType(valueType, "InOutType").dynamicCast<InOutType>();
183+
return dynamicCast<InOutType>(getPtrType(valueType, "InOutType"));
169184
}
170185

171-
RefPtr<RefType> ASTBuilder::getRefType(RefPtr<Type> valueType)
186+
RefType* ASTBuilder::getRefType(Type* valueType)
172187
{
173-
return getPtrType(valueType, "RefType").dynamicCast<RefType>();
188+
return dynamicCast<RefType>(getPtrType(valueType, "RefType"));
174189
}
175190

176-
RefPtr<PtrTypeBase> ASTBuilder::getPtrType(RefPtr<Type> valueType, char const* ptrTypeName)
191+
PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, char const* ptrTypeName)
177192
{
178-
auto genericDecl = m_sharedASTBuilder->findMagicDecl(ptrTypeName).dynamicCast<GenericDecl>();
193+
auto genericDecl = dynamicCast<GenericDecl>(m_sharedASTBuilder->findMagicDecl(ptrTypeName));
179194
return getPtrType(valueType, genericDecl);
180195
}
181196

182-
RefPtr<PtrTypeBase> ASTBuilder::getPtrType(RefPtr<Type> valueType, GenericDecl* genericDecl)
197+
PtrTypeBase* ASTBuilder::getPtrType(Type* valueType, GenericDecl* genericDecl)
183198
{
184199
auto typeDecl = genericDecl->inner;
185200

186201
auto substitutions = create<GenericSubstitution>();
187202
substitutions->genericDecl = genericDecl;
188203
substitutions->args.add(valueType);
189204

190-
auto declRef = DeclRef<Decl>(typeDecl.Ptr(), substitutions);
205+
auto declRef = DeclRef<Decl>(typeDecl, substitutions);
191206
auto rsType = DeclRefType::create(this, declRef);
192207
return as<PtrTypeBase>(rsType);
193208
}
194209

195-
RefPtr<ArrayExpressionType> ASTBuilder::getArrayType(Type* elementType, IntVal* elementCount)
210+
ArrayExpressionType* ASTBuilder::getArrayType(Type* elementType, IntVal* elementCount)
196211
{
197-
RefPtr<ArrayExpressionType> arrayType = create<ArrayExpressionType>();
212+
ArrayExpressionType* arrayType = create<ArrayExpressionType>();
198213
arrayType->baseType = elementType;
199214
arrayType->arrayLength = elementCount;
200215
return arrayType;
201216
}
202217

203-
RefPtr<VectorExpressionType> ASTBuilder::getVectorType(
204-
RefPtr<Type> elementType,
205-
RefPtr<IntVal> elementCount)
218+
VectorExpressionType* ASTBuilder::getVectorType(
219+
Type* elementType,
220+
IntVal* elementCount)
206221
{
207-
auto vectorGenericDecl = m_sharedASTBuilder->findMagicDecl("Vector").as<GenericDecl>();
222+
auto vectorGenericDecl = as<GenericDecl>(m_sharedASTBuilder->findMagicDecl("Vector"));
208223

209224
auto vectorTypeDecl = vectorGenericDecl->inner;
210225

211226
auto substitutions = create<GenericSubstitution>();
212-
substitutions->genericDecl = vectorGenericDecl.Ptr();
227+
substitutions->genericDecl = vectorGenericDecl;
213228
substitutions->args.add(elementType);
214229
substitutions->args.add(elementCount);
215230

216-
auto declRef = DeclRef<Decl>(vectorTypeDecl.Ptr(), substitutions);
231+
auto declRef = DeclRef<Decl>(vectorTypeDecl, substitutions);
217232

218-
return DeclRefType::create(this, declRef).as<VectorExpressionType>();
233+
return as<VectorExpressionType>(DeclRefType::create(this, declRef));
219234
}
220235

221-
RefPtr<TypeType> ASTBuilder::getTypeType(Type* type)
236+
TypeType* ASTBuilder::getTypeType(Type* type)
222237
{
223238
return create<TypeType>(type);
224239
}

0 commit comments

Comments
 (0)