Merge branch 'vadz-py-restore-autodoc-defval'

* vadz-py-restore-autodoc-defval:
  Always include default parameter values in Python autodoc strings
This commit is contained in:
William S Fulton 2019-01-22 07:21:31 +00:00
commit 8a1ad6adc6
3 changed files with 24 additions and 2 deletions

View file

@ -169,3 +169,13 @@ int process2(int from = 0, int _in = 1, int var = 2) { return from; }
int process3(int from, int _in, int var) { return from; }
int process4(int from = 0, int _in = 1, int var = 2) { return from; }
%}
// Autodoc for methods with default arguments not directly representable in
// target language.
%feature(autodoc,0) process_complex_defval;
%feature("compactdefaultargs") process_complex_defval;
%inline %{
const int PROCESS_DEFAULT_VALUE = 17;
typedef long int some_type;
int process_complex_defval(int val = PROCESS_DEFAULT_VALUE, int factor = some_type(-1)) { return val*factor; }
%}

View file

@ -207,3 +207,5 @@ check(inspect.getdoc(process), "process(int _from, int _in, int var) -> int")
check(inspect.getdoc(process2), "process2(int _from=0, int _in=1, int var=2) -> int")
check(inspect.getdoc(process3), "process3(int _from, int _in, int var) -> int")
check(inspect.getdoc(process4), "process4(int _from=0, int _in=1, int var=2) -> int")
check(inspect.getdoc(process_complex_defval), "process_complex_defval(val=PROCESS_DEFAULT_VALUE, factor=some_type(-1)) -> int")

View file

@ -1715,9 +1715,19 @@ public:
// Write default value
if (value && !calling) {
String *new_value = convertValue(value, Getattr(p, "type"));
if (new_value) {
value = new_value;
} else {
// Even if the value is not representable in the target language, still use it in the documentaiton, for compatibility with the previous SWIG versions
// and because it can still be useful to see the C++ expression there.
Node *lookup = Swig_symbol_clookup(value, 0);
if (lookup)
value = Getattr(lookup, "sym:name");
}
Printf(doc, "=%s", value);
if (new_value)
Printf(doc, "=%s", new_value);
Delete(new_value);
Delete(new_value);
}
Delete(type_str);
Delete(made_name);