From 765061a77bcf4fe6300721263cc9e0f25595488d Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 10 May 2022 19:42:48 -0700 Subject: Initial support for COM interface in host code. (#2230) Co-authored-by: Yong He Co-authored-by: Theresa Foley <10618364+tangent-vector@users.noreply.github.com> --- source/slang/slang-ir-lower-existential.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-ir-lower-existential.cpp') diff --git a/source/slang/slang-ir-lower-existential.cpp b/source/slang/slang-ir-lower-existential.cpp index ab948bc7a..dfa714a82 100644 --- a/source/slang/slang-ir-lower-existential.cpp +++ b/source/slang/slang-ir-lower-existential.cpp @@ -105,7 +105,16 @@ namespace Slang auto builder = &builderStorage; builder->setInsertBefore(extractInst); - auto element = extractTupleElement(builder, extractInst->getOperand(0), elementId); + IRInst* element = nullptr; + if (extractInst->getOperand(0)->getDataType()->findDecoration()) + { + // If this is an COM interface, the elements (witness table/rtti) are just the interface value itself. + element = extractInst->getOperand(0); + } + else + { + element = extractTupleElement(builder, extractInst->getOperand(0), elementId); + } extractInst->replaceUsesWith(element); extractInst->removeAndDeallocate(); } -- cgit v1.2.3