/usr/include/luabind/detail
NameSizeModeActions
call.hpp91580644editdlrm
call_function.hpp187260644editdlrm
call_member.hpp137210644editdlrm
call_operator_iterate.hpp21940644editdlrm
class_registry.hpp29400644editdlrm
class_rep.hpp62350644editdlrm
constructor.hpp36910644editdlrm
convert_to_lua.hpp29240644editdlrm
debug.hpp22730644editdlrm
decorate_type.hpp65920644editdlrm
deduce_signature.hpp20160644editdlrm
enum_maker.hpp35420644editdlrm
format_signature.hpp36090644editdlrm
garbage_collector.hpp18620644editdlrm
has_get_pointer.hpp29600644editdlrm
inheritance.hpp41970644editdlrm
instance_holder.hpp31080644editdlrm
link_compatibility.hpp19940644editdlrm
make_instance.hpp28110644editdlrm
most_derived.hpp16020644editdlrm
object.hpp333940644editdlrm
object_call.hpp18990644editdlrm
object_rep.hpp44710644editdlrm
operator_id.hpp24650644editdlrm
other.hpp32900644editdlrm
pcall.hpp14580644editdlrm
pointee_sizeof.hpp18400644editdlrm
policy.hpp283400644editdlrm
primitives.hpp18560644editdlrm
property.hpp7820644editdlrm
signature_match.hpp21710644editdlrm
stack_utils.hpp16400644editdlrm
typetraits.hpp54390644editdlrm
yes_no.hpp13240644editdlrm
Edit: /usr/include/luabind/detail/make_instance.hpp (2811B)
// Copyright Daniel Wallin 2009. Use, modification and distribution is // subject to the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef LUABIND_DETAIL_MAKE_INSTANCE_090310_HPP # define LUABIND_DETAIL_MAKE_INSTANCE_090310_HPP # include # include # include namespace luabind { namespace detail { template std::pair get_dynamic_class_aux( lua_State* L, T const* p, mpl::true_) { lua_rawgetp(L, LUA_REGISTRYINDEX, &classid_map_tag); class_id_map& class_ids = *static_cast( lua_touserdata(L, -1)); lua_pop(L, 1); return std::make_pair( class_ids.get_local(typeid(*p)) , dynamic_cast(const_cast(p)) ); } template std::pair get_dynamic_class_aux( lua_State*, T const* p, mpl::false_) { return std::make_pair( registered_class::id, static_cast(const_cast(p))); } template std::pair get_dynamic_class(lua_State* L, T* p) { return get_dynamic_class_aux(L, p, boost::is_polymorphic()); } template class_rep* get_pointee_class(class_map const& classes, T*) { return classes.get(registered_class::id); } template class_rep* get_pointee_class(lua_State* L, P const& p, class_id dynamic_id) { lua_rawgetp(L, LUA_REGISTRYINDEX, &class_map_tag); class_map const& classes = *static_cast( lua_touserdata(L, -1)); lua_pop(L, 1); class_rep* cls = classes.get(dynamic_id); if (!cls) cls = get_pointee_class(classes, get_pointer(p)); return cls; } // Create an appropriate instance holder for the given pointer like object. template void make_instance(lua_State* L, P p) { std::pair dynamic = get_dynamic_class(L, get_pointer(p)); class_rep* cls = get_pointee_class(L, p, dynamic.first); if (!cls) { throw std::runtime_error("Trying to use unregistered class"); } object_rep* instance = push_new_instance(L, cls); typedef pointer_holder

holder_type; void* storage = instance->allocate(sizeof(holder_type)); try { #ifdef LUABIND_USE_CXX11 new (storage) holder_type(std::move(p), dynamic.first, dynamic.second); #else new (storage) holder_type(p, dynamic.first, dynamic.second); #endif } catch (...) { instance->deallocate(storage); lua_pop(L, 1); throw; } instance->set_instance(static_cast(storage)); } }} // namespace luabind::detail #endif // LUABIND_DETAIL_MAKE_INSTANCE_090310_HPP