summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-04-08 10:56:00 -0400
committerGitHub <noreply@github.com>2020-04-08 10:56:00 -0400
commita9214f34358b2fc0bf61ef90e3719a13b180b423 (patch)
tree115b49d976f871a9f529436e201cf2f4a1a59401 /source/slang/slang-lower-to-ir.cpp
parentba232e44cbb016a4e7c111b42458394027369c5e (diff)
Remove static struct members from layout and reflection (#1310)
* * Added MemberFilterStyle - controls action of FilteredMemberList and FilteredMemberRefList * Splt out template implementations * Use more standard method names dofr FilteredMemberRefList * Added reflect-static.slang test * Added isNotEmpty/isEmpty to filtered lists * Added ability to index into filtered list (so not require building of array) * Default MemberFilterStyle to All. * Remove explicit MemberFilterStyle::All
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
-rw-r--r--source/slang/slang-lower-to-ir.cpp34
1 files changed, 14 insertions, 20 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index a52f67b8a..009e776bb 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -582,7 +582,7 @@ LoweredValInfo emitCallToDeclRef(
DeclRef<GetterDecl> getterDeclRef;
bool justAGetter = true;
- for (auto accessorDeclRef : getMembersOfType<AccessorDecl>(subscriptDeclRef))
+ for (auto accessorDeclRef : getMembersOfType<AccessorDecl>(subscriptDeclRef, MemberFilterStyle::Instance))
{
// We want to track whether this subscript has any accessors other than
// `get` (assuming that everything except `get` can be used for setting...).
@@ -786,8 +786,8 @@ top:
// in case the `get` operation has a natural translation for
// a target, while the general `ref` case does not...)
- auto getters = getMembersOfType<GetterDecl>(boundSubscriptInfo->declRef);
- if (getters.Count())
+ auto getters = getMembersOfType<GetterDecl>(boundSubscriptInfo->declRef, MemberFilterStyle::Instance);
+ if (getters.getCount())
{
lowered = emitCallToDeclRef(
context,
@@ -798,8 +798,8 @@ top:
goto top;
}
- auto refAccessors = getMembersOfType<RefAccessorDecl>(boundSubscriptInfo->declRef);
- if(refAccessors.Count())
+ auto refAccessors = getMembersOfType<RefAccessorDecl>(boundSubscriptInfo->declRef, MemberFilterStyle::Instance);
+ if(refAccessors.getCount())
{
// The `ref` accessor will return a pointer to the value, so
// we need to reflect that in the type of our `call` instruction.
@@ -2198,11 +2198,8 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo>
if (auto aggTypeDeclRef = declRef.as<AggTypeDecl>())
{
List<IRInst*> args;
- for (auto ff : getMembersOfType<VarDecl>(aggTypeDeclRef))
+ for (auto ff : getMembersOfType<VarDecl>(aggTypeDeclRef, MemberFilterStyle::Instance))
{
- if (ff.getDecl()->HasModifier<HLSLStaticModifier>())
- continue;
-
auto irFieldVal = getSimpleVal(context, getDefaultVal(ff));
args.add(irFieldVal);
}
@@ -2322,11 +2319,8 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo>
if (auto aggTypeDeclRef = declRef.as<AggTypeDecl>())
{
UInt argCounter = 0;
- for (auto ff : getMembersOfType<VarDecl>(aggTypeDeclRef))
+ for (auto ff : getMembersOfType<VarDecl>(aggTypeDeclRef, MemberFilterStyle::Instance))
{
- if (ff.getDecl()->HasModifier<HLSLStaticModifier>())
- continue;
-
UInt argIndex = argCounter++;
if (argIndex < argCount)
{
@@ -3908,15 +3902,15 @@ LoweredValInfo tryGetAddress(
// where we really want/need a pointer to be able to make progress.
//
if(mode != TryGetAddressMode::Aggressive
- && getMembersOfType<SetterDecl>(subscriptInfo->declRef).Count())
+ && getMembersOfType<SetterDecl>(subscriptInfo->declRef, MemberFilterStyle::Instance).isNonEmpty())
{
// There is a setter that we should consider using,
// so don't go and aggressively collapse things just yet.
return val;
}
- auto refAccessors = getMembersOfType<RefAccessorDecl>(subscriptInfo->declRef);
- if(refAccessors.Count())
+ auto refAccessors = getMembersOfType<RefAccessorDecl>(subscriptInfo->declRef, MemberFilterStyle::Instance);
+ if(refAccessors.isNonEmpty())
{
// The `ref` accessor will return a pointer to the value, so
// we need to reflect that in the type of our `call` instruction.
@@ -4140,8 +4134,8 @@ top:
auto subscriptInfo = left.getBoundSubscriptInfo();
// Search for an appropriate "setter" declaration
- auto setters = getMembersOfType<SetterDecl>(subscriptInfo->declRef);
- if (setters.Count())
+ auto setters = getMembersOfType<SetterDecl>(subscriptInfo->declRef, MemberFilterStyle::Instance);
+ if (setters.isNonEmpty())
{
auto allArgs = subscriptInfo->args;
addArgs(context, &allArgs, right);
@@ -4155,8 +4149,8 @@ top:
return;
}
- auto refAccessors = getMembersOfType<RefAccessorDecl>(subscriptInfo->declRef);
- if(refAccessors.Count())
+ auto refAccessors = getMembersOfType<RefAccessorDecl>(subscriptInfo->declRef, MemberFilterStyle::Instance);
+ if(refAccessors.isNonEmpty())
{
// The `ref` accessor will return a pointer to the value, so
// we need to reflect that in the type of our `call` instruction.