summaryrefslogtreecommitdiff
path: root/source/slang-capture-replay/slang-module.cpp
diff options
context:
space:
mode:
authorSai Praveen Bangaru <31557731+saipraveenb25@users.noreply.github.com>2024-07-18 13:11:19 -0400
committerGitHub <noreply@github.com>2024-07-18 13:11:19 -0400
commit0d06ebcefb36a19710d87832fc1ea027e21281af (patch)
tree05ac5af6fa26a658348335eac3d63199b6949507 /source/slang-capture-replay/slang-module.cpp
parent89e836d42822e69dcaa4eb0a366d8c66e5aaa7e4 (diff)
Initial implementation for decl-tree reflection API (#4666)
* Initial implementation for decl-tree reflection API This patch adds Slang API methods for walking all the declarations in the AST. We expose this functionality through an abstract `DeclReflection` class that can be a type, function or a variable declaration. We also provide ways to cast the decl to a `FunctionReflection`, `TypeReflection` or `VariableReflection` and traverse through the child nodes (for instance, a struct type will have component variable declarations) This patch also adds `ISlangInternal` as an internal COM interface to allow us to cast IGlobalSession to the internal Session pointer while bypassing any wrappers (such as the capture interface) * Update slang.h * Remove `ISlangInternal` (its causing a diamond pattern w.r.t `ISlangUnknown`) and use `ComPtr` for proper ref management. * Update unit-test-decl-tree-reflection.cpp * Change `FunctionDeclBase` to use `DeclRef` instead of directly using the decl. * Update slang-reflection-api.cpp
Diffstat (limited to 'source/slang-capture-replay/slang-module.cpp')
-rw-r--r--source/slang-capture-replay/slang-module.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/source/slang-capture-replay/slang-module.cpp b/source/slang-capture-replay/slang-module.cpp
index 8a1a80126..273faa59d 100644
--- a/source/slang-capture-replay/slang-module.cpp
+++ b/source/slang-capture-replay/slang-module.cpp
@@ -27,6 +27,14 @@ namespace SlangCapture
return nullptr;
}
+ SLANG_NO_THROW slang::DeclReflection* ModuleCapture::getModuleReflection()
+ {
+ // No need to capture this call as it is just a query.
+ slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+ slang::DeclReflection* res = (slang::DeclReflection*)m_actualModule->getModuleReflection();
+ return res;
+ }
+
SLANG_NO_THROW SlangResult ModuleCapture::findEntryPointByName(
char const* name,
slang::IEntryPoint** outEntryPoint)