diff options
Diffstat (limited to 'source/slang/slang-ast-builder.cpp')
| -rw-r--r-- | source/slang/slang-ast-builder.cpp | 18 |
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)); } |
