diff options
| author | Tim Foley <tfoley@nvidia.com> | 2020-06-19 11:48:28 -0700 |
|---|---|---|
| committer | Tim Foley <tfoley@nvidia.com> | 2020-06-19 11:48:28 -0700 |
| commit | 11e377a541023973213ec758fbec68e2772ce7bc (patch) | |
| tree | ff4dfa28c0a66b30e96b5a4fdbc8080f3681d437 /source/slang/slang-emit-cpp.cpp | |
| parent | fc4342b834fbf3f20bcb90574a63859bf34462cd (diff) | |
| parent | 110d15b61ac5d76da001d412eaa4be07f3cd8f4d (diff) | |
Merge remote-tracking branch 'origin/master' into struct-inheritance-and-interfaces
Diffstat (limited to 'source/slang/slang-emit-cpp.cpp')
| -rw-r--r-- | source/slang/slang-emit-cpp.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/source/slang/slang-emit-cpp.cpp b/source/slang/slang-emit-cpp.cpp index accb290fa..4a59f4cf9 100644 --- a/source/slang/slang-emit-cpp.cpp +++ b/source/slang/slang-emit-cpp.cpp @@ -1711,6 +1711,15 @@ void CPPSourceEmitter::_emitWitnessTableDefinitions() m_writer->emit("&KernelContext::"); m_writer->emit(_getWitnessTableWrapperFuncName(funcVal)); } + else if (auto witnessTableVal = as<IRWitnessTable>(entry->getSatisfyingVal())) + { + if (!isFirstEntry) + m_writer->emit(",\n"); + else + isFirstEntry = false; + m_writer->emit("&"); + m_writer->emit(getName(witnessTableVal)); + } else { // TODO: handle other witness table entry types. @@ -1745,16 +1754,11 @@ void CPPSourceEmitter::_maybeEmitWitnessTableTypeDefinition( emitSimpleType(interfaceType); m_writer->emit("\n{\n"); m_writer->indent(); - bool isFirstEntry = true; for (Index i = 0; i < sortedWitnessTableEntries.getCount(); i++) { auto entry = sortedWitnessTableEntries[i]; if (auto funcVal = as<IRFunc>(entry->satisfyingVal.get())) { - if (!isFirstEntry) - m_writer->emit(",\n"); - else - isFirstEntry = false; emitType(funcVal->getResultType()); m_writer->emit(" (KernelContext::*"); m_writer->emit(getName(entry->requirementKey.get())); @@ -1777,6 +1781,13 @@ void CPPSourceEmitter::_maybeEmitWitnessTableTypeDefinition( } m_writer->emit(");\n"); } + else if (auto witnessTableVal = as<IRWitnessTable>(entry->getSatisfyingVal())) + { + emitType(as<IRType>(witnessTableVal->getOperand(0))); + m_writer->emit("* "); + m_writer->emit(getName(entry->requirementKey.get())); + m_writer->emit(";\n"); + } else { // TODO: handle other witness table entry types. |
