diff options
| author | Yong He <yonghe@outlook.com> | 2024-08-14 18:41:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-14 18:41:48 -0700 |
| commit | 071f1b6062b459928ebfd6f2f60a8d6ad021112b (patch) | |
| tree | 2ba65eb40f39701db6fc775a9258ec8079d161a0 /source/slang/slang-mangle.cpp | |
| parent | 35a3d32c87f079749f6b100d01b289c3da02d7d6 (diff) | |
Variadic Generics Part 1: parsing and type checking. (#4833)
Diffstat (limited to 'source/slang/slang-mangle.cpp')
| -rw-r--r-- | source/slang/slang-mangle.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
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<ExpandType>(type)) + { + emitRaw(context, "Tx"); + emitType(context, expandType->getPatternType()); + } + else if (auto eachType = as<EachType>(type)) + { + emitRaw(context, "Te"); + emitType(context, eachType->getElementType()); + } + else if (auto typePack = as<ConcreteTypePack>(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<GenericTypePackParamDecl>()) + { + genericParameterCount++; + } else { } @@ -499,13 +520,17 @@ namespace Slang emit(context, genericParameterCount); - OrderedDictionary<GenericTypeParamDecl*, List<Type*>> genericConstraints; + OrderedDictionary<GenericTypeParamDeclBase*, List<Type*>> genericConstraints; for (auto mm : getMembers(context->astBuilder, parentGenericDeclRef)) { if (auto genericTypeParamDecl = mm.as<GenericTypeParamDecl>()) { emitRaw(context, "T"); } + if (auto genericTypePackParamDecl = mm.as<GenericTypePackParamDecl>()) + { + emitRaw(context, "TP"); + } else if (auto genericValueParamDecl = mm.as<GenericValueParamDecl>()) { emitRaw(context, "v"); |
