summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/lua/LuaBridge/detail/CFunctions.h23
-rw-r--r--libs/lua/LuaBridge/detail/Namespace.h16
-rwxr-xr-xtools/fmt-luadoc.php1
3 files changed, 40 insertions, 0 deletions
diff --git a/libs/lua/LuaBridge/detail/CFunctions.h b/libs/lua/LuaBridge/detail/CFunctions.h
index 15bc7022b3..9f1712995a 100644
--- a/libs/lua/LuaBridge/detail/CFunctions.h
+++ b/libs/lua/LuaBridge/detail/CFunctions.h
@@ -379,6 +379,29 @@ struct CFunc
};
+ template <class T, class R>
+ struct CastClass
+ {
+ static int f (lua_State* L)
+ {
+ T * const t = Userdata::get <T> (L, 1, false );
+ Stack <R*>::push (L, dynamic_cast<R*>(t));
+ return 1;
+ }
+ };
+
+ template <class T, class R>
+ struct CastConstClass
+ {
+ static int f (lua_State* L)
+ {
+ T const* const t = Userdata::get <T> (L, 1, true);
+ Stack <R const*>::push (L, dynamic_cast<R const*>(t));
+ return 1;
+ }
+ };
+
+
template <class T>
struct PtrNullCheck
{
diff --git a/libs/lua/LuaBridge/detail/Namespace.h b/libs/lua/LuaBridge/detail/Namespace.h
index 590f25be4a..79a0786d40 100644
--- a/libs/lua/LuaBridge/detail/Namespace.h
+++ b/libs/lua/LuaBridge/detail/Namespace.h
@@ -1048,6 +1048,22 @@ private:
return *this;
}
+ template <class U>
+ Class <T>& addCast (char const* name)
+ {
+ PRINTDOC("Cast", _name << name,
+ type_name< U >(),
+ type_name< U >() << " (" << type_name< T >() << "::*)()")
+
+ assert (lua_istable (L, -1));
+ lua_pushcclosure (L, &CFunc::CastClass <T, U>::f, 0);
+ rawsetfield (L, -3, name); // class table
+
+ lua_pushcclosure (L, &CFunc::CastConstClass <T, U>::f, 0);
+ rawsetfield (L, -4, name); // const table
+ return *this;
+ }
+
};
/** C Array to/from table */
diff --git a/tools/fmt-luadoc.php b/tools/fmt-luadoc.php
index b3d2c0eb71..7f7b35d589 100755
--- a/tools/fmt-luadoc.php
+++ b/tools/fmt-luadoc.php
@@ -384,6 +384,7 @@ foreach ($doc as $b) {
'cand' => canonical_decl ($b)
);
break;
+ case "Cast":
case "Weak/Shared Pointer Cast":
checkclass ($b);
$classlist[luafn2class ($b['lua'])]['cast'][] = array (