summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-02-05 22:35:36 -0800
committerGitHub <noreply@github.com>2025-02-05 22:35:36 -0800
commit6b63ff0265ee9bdb8229bb12c71c223c00de0ffa (patch)
tree8010accc99d1f5f20465e8eeb2012f37a6f5534f /source/slang/slang-lower-to-ir.cpp
parent78f26f076d406a3818800b57afe4d0c2eb166269 (diff)
Allow tuples to work with initializer list. (#6301)
* Allow tuples to work with initiailizer list. * Update definition of C-Style types.
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
-rw-r--r--source/slang/slang-lower-to-ir.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index cac157f9b..36003dcb2 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -4701,6 +4701,16 @@ struct ExprLoweringVisitorBase : public ExprVisitor<Derived, LoweredValInfo>
{
return LoweredValInfo::simple(getBuilder()->getNullPtrValue(irType));
}
+ else if (auto tupleType = as<TupleType>(type))
+ {
+ List<IRInst*> args;
+ for (Index i = 0; i < tupleType->getMemberCount(); i++)
+ {
+ args.add(getSimpleVal(context, getDefaultVal(tupleType->getMember(i))));
+ }
+ return LoweredValInfo::simple(
+ getBuilder()->emitMakeTuple(irType, args.getCount(), args.getBuffer()));
+ }
else if (auto declRefType = as<DeclRefType>(type))
{
DeclRef<Decl> declRef = declRefType->getDeclRef();
@@ -4925,9 +4935,16 @@ struct ExprLoweringVisitorBase : public ExprVisitor<Derived, LoweredValInfo>
args.add(irDefaultValue);
}
}
-
- return LoweredValInfo::simple(
- getBuilder()->emitMakeStruct(irType, args.getCount(), args.getBuffer()));
+ if (as<TupleType>(type))
+ {
+ return LoweredValInfo::simple(
+ getBuilder()->emitMakeTuple(irType, args.getCount(), args.getBuffer()));
+ }
+ else
+ {
+ return LoweredValInfo::simple(
+ getBuilder()->emitMakeStruct(irType, args.getCount(), args.getBuffer()));
+ }
}
}