summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ast-builder.cpp')
-rw-r--r--source/slang/slang-ast-builder.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/slang/slang-ast-builder.cpp b/source/slang/slang-ast-builder.cpp
index 5da4e9521..a88db3155 100644
--- a/source/slang/slang-ast-builder.cpp
+++ b/source/slang/slang-ast-builder.cpp
@@ -461,6 +461,18 @@ Type* ASTBuilder::getSpecializedBuiltinType(ArrayView<Val*> genericArgs, const c
return rsType;
}
+Type* ASTBuilder::getMagicEnumType(const char* magicEnumName)
+{
+ auto& cache = getSharedASTBuilder()->m_magicEnumTypes;
+ Type* res = nullptr;
+ if (!cache.tryGetValue(magicEnumName, res))
+ {
+ res = getSpecializedBuiltinType({}, magicEnumName);
+ cache.add(magicEnumName, res);
+ }
+ return res;
+}
+
PtrType* ASTBuilder::getPtrType(Type* valueType, Val* accessQualifier, Val* addrSpace)
{
return dynamicCast<PtrType>(getPtrType(valueType, accessQualifier, addrSpace, "PtrType"));
@@ -545,10 +557,12 @@ PtrTypeBase* ASTBuilder::getPtrType(
AddressSpace addrSpace,
char const* ptrTypeName)
{
+ Type* typeOfAccessQualifier = getMagicEnumType("AccessQualifier");
+ Type* typeOfAddressSpace = getMagicEnumType("AddressSpace");
return as<PtrTypeBase>(getPtrType(
valueType,
- getIntVal(getBuiltinType(BaseType::AccessQualifier), (IntegerLiteralValue)accessQualifier),
- getIntVal(getBuiltinType(BaseType::AddressSpace), (IntegerLiteralValue)addrSpace),
+ getIntVal(typeOfAccessQualifier, (IntegerLiteralValue)accessQualifier),
+ getIntVal(typeOfAddressSpace, (IntegerLiteralValue)addrSpace),
ptrTypeName));
}