From 4d517794eaac7dfe6196e9a36d709d66c5720492 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 17 Jun 2025 21:36:10 -0700 Subject: LanguageServer: Enhance auto completion for override. (#7465) * Add additional completion keywords. * LanguageServer: Enhance auto completion for `override`. --- source/core/slang-rtti-util.cpp | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'source/core/slang-rtti-util.cpp') diff --git a/source/core/slang-rtti-util.cpp b/source/core/slang-rtti-util.cpp index 92f45a3bf..01571cab1 100644 --- a/source/core/slang-rtti-util.cpp +++ b/source/core/slang-rtti-util.cpp @@ -336,6 +336,7 @@ RttiTypeFuncs RttiUtil::getDefaultTypeFuncs(const RttiInfo* rttiInfo) case RttiInfo::Kind::List: return ListFuncs::getFuncs(); case RttiInfo::Kind::Struct: + case RttiInfo::Kind::Optional: return StructArrayFuncs::getFuncs(); default: break; @@ -556,6 +557,10 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) const OtherRttiInfo* otherRttiInfo = static_cast(rttiInfo); return otherRttiInfo->m_isDefaultFunc && otherRttiInfo->m_isDefaultFunc(rttiInfo, src); } + case RttiInfo::Kind::Optional: + { + return *(const bool*)src == (_getIntDefaultValue(defaultValue) != 0); + } default: { return false; @@ -660,6 +665,11 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) return true; } + case RttiInfo::Kind::Optional: + { + const OptionalRttiInfo* optionalRttiInfo = static_cast(type); + return canMemCpy(optionalRttiInfo->m_elementType); + } default: { return type->isBuiltIn(); @@ -723,6 +733,11 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) return true; } + case RttiInfo::Kind::Optional: + { + const OptionalRttiInfo* optionalRttiInfo = static_cast(type); + return canZeroInit(optionalRttiInfo->m_elementType); + } default: { return type->isBuiltIn(); @@ -783,6 +798,11 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) } while (structRttiInfo); return false; } + case RttiInfo::Kind::Optional: + { + const OptionalRttiInfo* optionalRttiInfo = static_cast(type); + return hasDtor(optionalRttiInfo->m_elementType); + } default: { return !type->isBuiltIn(); @@ -894,6 +914,19 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) return; } + case RttiInfo::Kind::Optional: + { + const OptionalRttiInfo* optionalRttiInfo = + static_cast(rttiInfo); + ctorArray(typeMap, GetRttiInfo::get(), dst, stride, count); + ctorArray( + typeMap, + optionalRttiInfo->m_elementType, + dst + optionalRttiInfo->m_valueOffset, + stride, + count); + return; + } } SLANG_ASSERT(!"Unexpected"); @@ -1005,6 +1038,20 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) return; } + case RttiInfo::Kind::Optional: + { + const OptionalRttiInfo* optionalRttiInfo = + static_cast(rttiInfo); + copyArray(typeMap, GetRttiInfo::get(), dst, src, stride, count); + copyArray( + typeMap, + optionalRttiInfo->m_elementType, + dst + optionalRttiInfo->m_valueOffset, + src + optionalRttiInfo->m_valueOffset, + stride, + count); + return; + } } SLANG_ASSERT(!"Unexpected"); @@ -1091,6 +1138,19 @@ static bool _isStructDefault(const StructRttiInfo* type, const void* src) return; } + case RttiInfo::Kind::Optional: + { + const OptionalRttiInfo* optionalRttiInfo = + static_cast(rttiInfo); + dtorArray(typeMap, GetRttiInfo::get(), dst, stride, count); + dtorArray( + typeMap, + optionalRttiInfo->m_elementType, + dst + optionalRttiInfo->m_valueOffset, + stride, + count); + return; + } } SLANG_ASSERT(!"Unexpected"); -- cgit v1.2.3