Browse Source

interrogate: support unicode characters in Python 3 for 'char' arg

Fixes #626
rdb 6 years ago
parent
commit
204cbe4464
1 changed files with 6 additions and 5 deletions
  1. 6 5
      dtool/src/interrogate/interfaceMakerPythonNative.cxx

+ 6 - 5
dtool/src/interrogate/interfaceMakerPythonNative.cxx

@@ -4937,13 +4937,14 @@ write_function_instance(ostream &out, FunctionRemap *remap,
       expected_params += "NoneType";
       expected_params += "NoneType";
 
 
     } else if (TypeManager::is_char(type)) {
     } else if (TypeManager::is_char(type)) {
-      indent(out, indent_level) << "char " << param_name << default_expr << ";\n";
+      indent(out, indent_level) << "char *" << param_name << "_str;\n";
+      indent(out, indent_level) << "Py_ssize_t " << param_name << "_len;\n";
 
 
-      format_specifiers += "c";
-      parameter_list += ", &" + param_name;
+      format_specifiers += "s#";
+      parameter_list += ", &" + param_name + "_str, &" + param_name + "_len";
+      extra_param_check << " && " << param_name << "_len == 1";
 
 
-      // extra_param_check << " && isascii(" << param_name << ")";
-      pexpr_string = "(char) " + param_name;
+      pexpr_string = param_name + "_str[0]";
       expected_params += "char";
       expected_params += "char";
       only_pyobjects = false;
       only_pyobjects = false;