summaryrefslogtreecommitdiff
path: root/source/slang/ir.h
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2019-01-31 13:35:03 -0800
committerGitHub <noreply@github.com>2019-01-31 13:35:03 -0800
commitbcb361db7c5a6f8baa9b2012b9ee9778421f1386 (patch)
tree9e5e1703e3b06e109bae6db136bbc2e816f96a2f /source/slang/ir.h
parentc1fe5f295e843d10e24ae0d053fc3813a29aec89 (diff)
parentf20c64c348393602ed2a9c873386345cc4b493e8 (diff)
Merge branch 'master' into crashfix
Diffstat (limited to 'source/slang/ir.h')
-rw-r--r--source/slang/ir.h26
1 files changed, 23 insertions, 3 deletions
diff --git a/source/slang/ir.h b/source/slang/ir.h
index 343f5b79b..bbb68cdda 100644
--- a/source/slang/ir.h
+++ b/source/slang/ir.h
@@ -407,15 +407,35 @@ struct IRInst
void _insertAt(IRInst* inPrev, IRInst* inNext, IRInst* inParent);
};
-// `dynamic_cast` equivalent
template<typename T>
-T* as(IRInst* inst, T* /* */ = nullptr)
+T* dynamicCast(IRInst* inst)
{
if (inst && T::isaImpl(inst->op))
- return (T*) inst;
+ return static_cast<T*>(inst);
return nullptr;
}
+template<typename T>
+const T* dynamicCast(const IRInst* inst)
+{
+ if (inst && T::isaImpl(inst->op))
+ return static_cast<const T*>(inst);
+ return nullptr;
+}
+
+// `dynamic_cast` equivalent (we just use dynamicCast)
+template<typename T>
+T* as(IRInst* inst)
+{
+ return dynamicCast<T>(inst);
+}
+
+template<typename T>
+const T* as(const IRInst* inst)
+{
+ return dynamicCast<T>(inst);
+}
+
// `static_cast` equivalent, with debug validation
template<typename T>
T* cast(IRInst* inst, T* /* */ = nullptr)