summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-lower-generic-function.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-08-14 10:04:32 -0700
committerGitHub <noreply@github.com>2020-08-14 10:04:32 -0700
commitb37a7770d9781515f70047665d12680a5838406d (patch)
tree19b322499f920c23a868bd0db2e54a628d76a41d /source/slang/slang-ir-lower-generic-function.cpp
parent99366e7c37e8b537b4eac8f3104db7296ceba586 (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.cpp17
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)