diff options
Diffstat (limited to 'source/slang/slang-reflection-api.cpp')
| -rw-r--r-- | source/slang/slang-reflection-api.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/source/slang/slang-reflection-api.cpp b/source/slang/slang-reflection-api.cpp index 8688f5e41..b0d88e954 100644 --- a/source/slang/slang-reflection-api.cpp +++ b/source/slang/slang-reflection-api.cpp @@ -40,6 +40,12 @@ static inline Type* convert(SlangReflectionType* type) static inline SlangReflectionType* convert(Type* type) { + // Prevent the AtomicType struct from being visible to the user + // through the reflection API. + if (auto atomicType = as<AtomicType>(type)) + { + return (SlangReflectionType*)atomicType->getElementType(); + } return (SlangReflectionType*)type; } @@ -586,7 +592,7 @@ SLANG_API SlangReflectionType* spReflectionType_GetElementType(SlangReflectionTy if (auto arrayType = as<ArrayExpressionType>(type)) { - return (SlangReflectionType*)arrayType->getElementType(); + return convert(arrayType->getElementType()); } else if (auto parameterGroupType = as<ParameterGroupType>(type)) { @@ -1026,7 +1032,7 @@ SLANG_API SlangReflectionType* spReflection_FindTypeByName( if (as<ErrorType>(result)) return nullptr; - return (SlangReflectionType*)result; + return convert(result); } catch (...) { @@ -1158,7 +1164,7 @@ SLANG_API SlangReflectionType* spReflectionTypeLayout_GetType( if (!typeLayout) return nullptr; - return (SlangReflectionType*)typeLayout->type; + return convert(typeLayout->type); } SLANG_API SlangTypeKind spReflectionTypeLayout_getKind(SlangReflectionTypeLayout* inTypeLayout) @@ -4227,7 +4233,7 @@ SLANG_API SlangReflectionType* spReflectionTypeParameter_GetConstraintByIndex( { auto constraints = globalGenericParamDecl->getMembersOfType<GenericTypeConstraintDecl>(); - return (SlangReflectionType*)constraints[index]->sup.Ptr(); + return convert(constraints[index]->sup.Ptr()); } // TODO: Add case for entry-point generic parameters. } |
