summaryrefslogtreecommitdiff
path: root/source/slang/slang-syntax.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-syntax.h')
-rw-r--r--source/slang/slang-syntax.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/source/slang/slang-syntax.h b/source/slang/slang-syntax.h
index 86cc4b902..35c21227c 100644
--- a/source/slang/slang-syntax.h
+++ b/source/slang/slang-syntax.h
@@ -541,6 +541,23 @@ namespace Slang
return SyntaxClass<T>::getClass();
}
+ NodeBase* _dynamicCastImpl(NodeBase* node, SyntaxClassBase const& toClass);
+
+ template<typename T>
+ T* dynamicCast(NodeBase* node)
+ {
+ return (T*) _dynamicCastImpl(node, getClass<T>());
+ }
+
+ template<typename T>
+ const T* dynamicCast(const NodeBase* node) { return dynamicCast<T>(const_cast<NodeBase*>(node)); }
+
+ template<typename T>
+ T* as(NodeBase* node) { return dynamicCast<T>(node); }
+
+ template<typename T>
+ const T* as(const NodeBase* node) { return dynamicCast<T>(const_cast<NodeBase*>(node)); }
+
struct SubstitutionSet
{
RefPtr<Substitutions> substitutions;