summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-check-expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
-rw-r--r--source/slang/slang-check-expr.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index 0c0b1ec9d..205575a81 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -2484,6 +2484,30 @@ Expr* SemanticsExprVisitor::visitParenExpr(ParenExpr* expr)
return expr;
}
+Expr* SemanticsExprVisitor::visitTupleExpr(TupleExpr* expr)
+{
+ List<Type*> elementTypes;
+ for (auto& element : expr->elements)
+ {
+ element = CheckTerm(element);
+ auto elementType = element->type.type;
+ if (auto concreteTypePack = as<ConcreteTypePack>(elementType))
+ {
+ // We need to flatten the type pack into a tuple type
+ for (Index i = 0; i < concreteTypePack->getTypeCount(); i++)
+ {
+ elementTypes.add(concreteTypePack->getElementType(i));
+ }
+ }
+ else
+ {
+ elementTypes.add(element->type.type);
+ }
+ }
+ expr->type = m_astBuilder->getTupleType(elementTypes.getArrayView());
+ return expr;
+}
+
void SemanticsVisitor::maybeDiagnoseThisNotLValue(Expr* expr)
{
// We will try to handle expressions of the form: