summaryrefslogtreecommitdiff
path: root/docs/design/casting.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/design/casting.md')
-rw-r--r--docs/design/casting.md4
1 files changed, 3 insertions, 1 deletions
diff --git a/docs/design/casting.md b/docs/design/casting.md
index 522e1d707..6c4b119eb 100644
--- a/docs/design/casting.md
+++ b/docs/design/casting.md
@@ -7,7 +7,7 @@ C++'s built in mechanisms for casting (principally dynamic_cast) is problematic
* There are types which we want to 'dynamic_cast' that do not have, and we do not want to have a Vtbl (for example Slang::IRInst).
* There are types which a 'dynamic_cast' doesn't do quite what we want (for example casting on Type* derived types typically wants to work on their canonical type)
-* We may want to replace use of dynamic_cast in the future for speed/space or other reasons in the future
+* We may want to replace use of dynamic_cast in the future for speed/space or other reasons
* It is common in the code base when using a 'smart pointer' type to cast it, but still return a smart pointer
To deal with these issues we need casting within Slang to follow it's own methodology. In summary it is as follows...
@@ -18,6 +18,8 @@ To deal with these issues we need casting within Slang to follow it's own method
* If you want to *literally* do a dynamic cast use 'dynamicCast' free function.
* This guarantees the returned pointer points to the same object (like normal dynamic_cast)
* If you want to return a smart pointer from a cast from a smart pointer use the .as or .dynamicCast *methods*
+* If you want to determine if an 'as' cast is possible on a smart pointer use the .is method
+ * Doing so will produce more efficient code because a new smart pointer does not need to be constructed
These functions will also work with types that do not have Vtbl - like IRInst derived types.