From ccc75cdd9508a4e19efa22e7c911cc2013f514fa Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 13 Feb 2025 03:29:36 -0800 Subject: Reflection Fixes. (#6346) * Fix 6317. * Fixes #6316. * Fix cmake preset. --------- Co-authored-by: Ellie Hermaszewska --- source/slang/slang-reflection-api.cpp | 7 ++++--- source/slang/slang.cpp | 23 ++++++++++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) (limited to 'source') diff --git a/source/slang/slang-reflection-api.cpp b/source/slang/slang-reflection-api.cpp index d1adfedc0..52047a751 100644 --- a/source/slang/slang-reflection-api.cpp +++ b/source/slang/slang-reflection-api.cpp @@ -1016,9 +1016,10 @@ SLANG_API SlangReflectionType* spReflection_FindTypeByName( SubstitutionSet(genericDeclRef), astBuilder, genericDeclRef.getDecl()->inner); - return convert(DeclRefType::create( - astBuilder, - createDefaultSubstitutionsIfNeeded(astBuilder, nullptr, innerDeclRef))); + if (as(innerDeclRef.getDecl()) || + as(innerDeclRef.getDecl())) + return convert(DeclRefType::create(astBuilder, innerDeclRef)); + return nullptr; } if (as(result)) diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index ee0aa4c14..c316974f1 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -2714,6 +2714,16 @@ Expr* ComponentType::findDeclFromString(String const& name, DiagnosticSink* sink return result; } +bool isSimpleName(String const& name) +{ + for (char c : name) + { + if (!CharUtil::isAlphaOrDigit(c) && c != '_' && c != '$') + return false; + } + return true; +} + Expr* ComponentType::findDeclFromStringInType( Type* type, String const& name, @@ -2743,8 +2753,19 @@ Expr* ComponentType::findDeclFromStringInType( SLANG_AST_BUILDER_RAII(linkage->getASTBuilder()); - Expr* expr = linkage->parseTermString(name, scope); + Expr* expr = nullptr; + if (isSimpleName(name)) + { + auto varExpr = astBuilder->create(); + varExpr->scope = scope; + varExpr->name = getLinkage()->getNamePool()->getName(name); + expr = varExpr; + } + else + { + expr = linkage->parseTermString(name, scope); + } SemanticsContext context(linkage->getSemanticsForReflection()); context = context.allowStaticReferenceToNonStaticMember().withSink(sink); -- cgit v1.2.3