mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 16:20:11 -04:00
interrogate: support implicit typecast operators in some cases
For example, this will let us pass a ConfigVariableFilename to anything that accepts a Filename, just like in C++. Does not work if the return value if the typecast operator requires management.
This commit is contained in:
parent
21f5e77467
commit
c4b657b5b2
@ -1089,6 +1089,27 @@ write_class_details(ostream &out, Object *obj) {
|
||||
}
|
||||
}
|
||||
|
||||
// Are there any implicit cast operators that can cast this object to our
|
||||
// desired pointer?
|
||||
for (Function *func : obj->_methods) {
|
||||
for (FunctionRemap *remap : func->_remaps) {
|
||||
if (remap->_type == FunctionRemap::T_typecast_method &&
|
||||
is_remap_legal(remap) &&
|
||||
!remap->_return_type->return_value_needs_management() &&
|
||||
(remap->_cppfunc->_storage_class & CPPInstance::SC_explicit) == 0 &&
|
||||
TypeManager::is_pointer(remap->_return_type->get_new_type())) {
|
||||
|
||||
CPPType *cast_type = remap->_return_type->get_orig_type();
|
||||
CPPType *obj_type = TypeManager::unwrap(TypeManager::resolve_type(remap->_return_type->get_new_type()));
|
||||
string return_expr = "(" + cast_type->get_local_name(&parser) + ")*local_this";
|
||||
out << " // " << *remap->_cppfunc << "\n";
|
||||
out << " if (requested_type == Dtool_Ptr_" << make_safe_name(obj_type->get_local_name(&parser)) << ") {\n";
|
||||
out << " return (void *)(" << remap->_return_type->get_return_expr(return_expr) << ");\n";
|
||||
out << " }\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
out << " return nullptr;\n";
|
||||
out << "}\n\n";
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user