summaryrefslogtreecommitdiffstats
path: root/source/compiler-core/slang-json-native.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-06-17 21:36:10 -0700
committerGitHub <noreply@github.com>2025-06-17 21:36:10 -0700
commit4d517794eaac7dfe6196e9a36d709d66c5720492 (patch)
treea7e65d8307b4e25f2a7bafcc9a2de1666c8b689e /source/compiler-core/slang-json-native.cpp
parentb9799e6137fb1d173cefd823521bb70b09ac435a (diff)
LanguageServer: Enhance auto completion for override. (#7465)
* Add additional completion keywords. * LanguageServer: Enhance auto completion for `override`.
Diffstat (limited to 'source/compiler-core/slang-json-native.cpp')
-rw-r--r--source/compiler-core/slang-json-native.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/source/compiler-core/slang-json-native.cpp b/source/compiler-core/slang-json-native.cpp
index 1f9a4dbc6..930aa611f 100644
--- a/source/compiler-core/slang-json-native.cpp
+++ b/source/compiler-core/slang-json-native.cpp
@@ -205,6 +205,22 @@ SlangResult JSONToNativeConverter::convert(const JSONValue& in, const RttiInfo*
*(UnownedStringSlice*)out = m_container->getString(in);
return SLANG_OK;
}
+ case RttiInfo::Kind::Optional:
+ {
+ if (in.getKind() == JSONValue::Kind::Null)
+ {
+ return SLANG_OK;
+ }
+ typedef List<Byte> Type;
+ const OptionalRttiInfo* optionalRttiInfo =
+ static_cast<const OptionalRttiInfo*>(rttiInfo);
+ auto hasValue = (uint8_t*)out;
+ *hasValue = 1;
+ return convert(
+ in,
+ optionalRttiInfo->m_elementType,
+ (uint8_t*)out + optionalRttiInfo->m_valueOffset);
+ }
case RttiInfo::Kind::List:
{
if (in.getKind() == JSONValue::Kind::Null)
@@ -441,6 +457,24 @@ SlangResult NativeToJSONConverter::convert(const RttiInfo* rttiInfo, const void*
{
return SLANG_E_NOT_IMPLEMENTED;
}
+ case RttiInfo::Kind::Optional:
+ {
+ const OptionalRttiInfo* optionalRttiInfo =
+ static_cast<const OptionalRttiInfo*>(rttiInfo);
+ auto hasValue = (const uint8_t*)in;
+ if (*hasValue)
+ {
+ return convert(
+ optionalRttiInfo->m_elementType,
+ (const uint8_t*)in + optionalRttiInfo->m_valueOffset,
+ out);
+ }
+ else
+ {
+ out = JSONValue::makeNull();
+ return SLANG_OK;
+ }
+ }
case RttiInfo::Kind::List:
{
const ListRttiInfo* listRttiInfo = static_cast<const ListRttiInfo*>(rttiInfo);