summaryrefslogtreecommitdiffstats
path: root/source/slang/slang.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang.cpp')
-rw-r--r--source/slang/slang.cpp23
1 files changed, 22 insertions, 1 deletions
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>();
+ 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);