From 071f1b6062b459928ebfd6f2f60a8d6ad021112b Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 14 Aug 2024 18:41:48 -0700 Subject: Variadic Generics Part 1: parsing and type checking. (#4833) --- source/slang/slang-mangle.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-mangle.cpp') diff --git a/source/slang/slang-mangle.cpp b/source/slang/slang-mangle.cpp index 779a6f090..7951ddc38 100644 --- a/source/slang/slang-mangle.cpp +++ b/source/slang/slang-mangle.cpp @@ -266,6 +266,23 @@ namespace Slang emitType(context, andType->getLeft()); emitType(context, andType->getRight()); } + else if (auto expandType = as(type)) + { + emitRaw(context, "Tx"); + emitType(context, expandType->getPatternType()); + } + else if (auto eachType = as(type)) + { + emitRaw(context, "Te"); + emitType(context, eachType->getElementType()); + } + else if (auto typePack = as(type)) + { + emitRaw(context, "Tp"); + emit(context, typePack->getTypeCount()); + for (Index i = 0; i < typePack->getTypeCount(); i++) + emitType(context, typePack->getElementType(i)); + } else { SLANG_UNEXPECTED("unimplemented case in type mangling"); @@ -492,6 +509,10 @@ namespace Slang { genericParameterCount++; } + else if (mm.is()) + { + genericParameterCount++; + } else { } @@ -499,13 +520,17 @@ namespace Slang emit(context, genericParameterCount); - OrderedDictionary> genericConstraints; + OrderedDictionary> genericConstraints; for (auto mm : getMembers(context->astBuilder, parentGenericDeclRef)) { if (auto genericTypeParamDecl = mm.as()) { emitRaw(context, "T"); } + if (auto genericTypePackParamDecl = mm.as()) + { + emitRaw(context, "TP"); + } else if (auto genericValueParamDecl = mm.as()) { emitRaw(context, "v"); -- cgit v1.2.3