interrogate: temp hack to make encrypt_string return bytes

Fixes #684
This commit is contained in:
rdb 2019-07-10 09:54:57 +02:00
parent bac376541f
commit e080d33e31
1 changed files with 15 additions and 3 deletions

View File

@ -6393,9 +6393,21 @@ pack_return_value(ostream &out, int indent_level, FunctionRemap *remap,
TypeManager::is_vector_unsigned_char(type)) {
// Most types are now handled by the many overloads of Dtool_WrapValue,
// defined in py_panda.h.
indent(out, indent_level)
<< "return Dtool_WrapValue(" << return_expr << ");\n";
if (!remap->_has_this && remap->_cppfunc != nullptr &&
remap->_cppfunc->get_simple_name() == "encrypt_string" &&
return_expr == "return_value") {
// Temporary hack to fix #684 to avoid an ABI change.
out << "#if PY_MAJOR_VERSION >= 3\n";
indent(out, indent_level)
<< "return PyBytes_FromStringAndSize((char *)return_value.data(), (Py_ssize_t)return_value.size());\n";
out << "#else\n";
indent(out, indent_level)
<< "return PyString_FromStringAndSize((char *)return_value.data(), (Py_ssize_t)return_value.size());\n";
out << "#endif\n";
} else {
indent(out, indent_level)
<< "return Dtool_WrapValue(" << return_expr << ");\n";
}
} else if (TypeManager::is_pointer(type)) {
bool is_const = TypeManager::is_const_pointer_to_anything(type);
bool owns_memory = remap->_return_value_needs_management;