summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-witness-table-wrapper.h
blob: 27008b085edcf75a6529df71b9463c071f5244eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// slang-ir-witness-table-wrapper.h
#pragma once

namespace Slang
{
struct SharedGenericsLoweringContext;

/// This pass generates wrapper functions for witness table function entries.
///
/// Enabled for generation of dynamic dispatch code only.
///
/// Functions that are used to satisfy interface requirement have concrete
/// type signatures for `this` and `associatedtype` parameters/return values.
/// However, when they are called from a witness table, the callee only have a
/// raw pointer for this arguments, since the conrete type is not known to the
/// callee. Therefore, we need to generate wrappers for each member function
/// callable through a witness table, so that the wrapper functions take general void*
/// pointer for arguments whose type is unknown at call sites, and convert them
/// to concrete types and calls the actual implementation.
void generateWitnessTableWrapperFunctions(SharedGenericsLoweringContext* sharedContext);

} // namespace Slang