diff options
Diffstat (limited to 'source/slang/slang-check-expr.cpp')
| -rw-r--r-- | source/slang/slang-check-expr.cpp | 24 |
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: |
