diff options
| author | Yong He <yonghe@outlook.com> | 2020-08-14 10:04:32 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-14 10:04:32 -0700 |
| commit | b37a7770d9781515f70047665d12680a5838406d (patch) | |
| tree | 19b322499f920c23a868bd0db2e54a628d76a41d /source/slang/slang-ir-lower-generic-function.cpp | |
| parent | 99366e7c37e8b537b4eac8f3104db7296ceba586 (diff) | |
Lower existential types. (#1497)
Co-authored-by: Tim Foley <tfoleyNV@users.noreply.github.com>
Diffstat (limited to 'source/slang/slang-ir-lower-generic-function.cpp')
| -rw-r--r-- | source/slang/slang-ir-lower-generic-function.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/source/slang/slang-ir-lower-generic-function.cpp b/source/slang/slang-ir-lower-generic-function.cpp index 1d90625a4..360e3cdbb 100644 --- a/source/slang/slang-ir-lower-generic-function.cpp +++ b/source/slang/slang-ir-lower-generic-function.cpp @@ -167,8 +167,9 @@ namespace Slang } } loweredType = builder.createInterfaceType(newEntries.getCount(), (IRInst**)newEntries.getBuffer()); - interfaceType->transferDecorationsTo(loweredType); - interfaceType->replaceUsesWith(loweredType); + IRCloneEnv cloneEnv; + cloneInstDecorationsAndChildren(&cloneEnv, &sharedContext->sharedBuilderStorage, + interfaceType, loweredType); sharedContext->loweredInterfaceTypes.Add(interfaceType, loweredType); sharedContext->mapLoweredInterfaceToOriginal[loweredType] = interfaceType; return loweredType; @@ -272,6 +273,16 @@ namespace Slang } } + void replaceLoweredInterfaceTypes() + { + for (auto lowered : sharedContext->loweredInterfaceTypes) + { + lowered.Key->replaceUsesWith(lowered.Value); + } + // Update hash keys of globalNumberingMap, since the types are modified. + sharedContext->sharedBuilderStorage.deduplicateAndRebuildGlobalNumberingMap(); + } + void processModule() { // We start by initializing our shared IR building state, @@ -303,6 +314,8 @@ namespace Slang } } } + + replaceLoweredInterfaceTypes(); } }; void lowerGenericFunctions(SharedGenericsLoweringContext* sharedContext) |
