Преглед на файлове

interrogate: Do not consider `make()` with explicit kwargs for coercion

Unless this parameter has a default value
rdb преди 3 години
родител
ревизия
e09f78b987
променени са 1 файла, в които са добавени 7 реда и са изтрити 2 реда
  1. 7 2
      dtool/src/interrogate/functionRemap.cxx

+ 7 - 2
dtool/src/interrogate/functionRemap.cxx

@@ -872,8 +872,13 @@ setup_properties(const InterrogateFunction &ifunc, InterfaceMaker *interface_mak
     } else if (fname == "make") {
       if (!_has_this && _parameters.size() >= 1 &&
           TypeManager::is_pointer(_return_type->get_new_type())) {
-        // We can use this for coercion.
-        _flags |= F_coerce_constructor;
+        // We can use this for coercion, except if this is a kwargs param that
+        // does not have a default value.
+        if ((_flags & F_explicit_args) == 0 ||
+            _parameters.size() != first_param + 2 ||
+            _parameters[first_param + 1]._remap->has_default_value()) {
+          _flags |= F_coerce_constructor;
+        }
       }
 
       if (_args_type == InterfaceMaker::AT_varargs) {