git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33641 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			202 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| ? .configure
 | |
| ? .emacs.desktop
 | |
| ? .test
 | |
| ? mytests
 | |
| ? switch_cvs.py
 | |
| ? Source/Modules/mystuff
 | |
| Index: Doc/Manual/Python.html
 | |
| ===================================================================
 | |
| RCS file: /cvsroot/swig/SWIG/Doc/Manual/Python.html,v
 | |
| retrieving revision 1.20
 | |
| diff -u -4 -r1.20 Python.html
 | |
| --- Doc/Manual/Python.html	25 Oct 2004 20:42:08 -0000	1.20
 | |
| +++ Doc/Manual/Python.html	15 Apr 2005 23:11:25 -0000
 | |
| @@ -3869,10 +3869,10 @@
 | |
|  
 | |
|  <H2><a name="Python_nn65"></a>26.10 Docstring Features</H2>
 | |
|  
 | |
|  
 | |
| -Usign docstrings in Python code is becoming more and more important
 | |
| -ans more tools are coming on the scene that take advantage of them,
 | |
| +Using docstrings in Python code is becoming more and more important
 | |
| +and more tools are coming on the scene that take advantage of them,
 | |
|  everything from full-blown documentaiton generators to class browsers
 | |
|  and popup call-tips in Python-aware IDEs.  Given the way that SWIG
 | |
|  generates the proxy code by default, your users will normally get
 | |
|  something like <tt>"function_name(*args)"</tt> in the popup calltip of
 | |
| Index: Lib/python/pyrun.swg
 | |
| ===================================================================
 | |
| RCS file: /cvsroot/swig/SWIG/Lib/python/pyrun.swg,v
 | |
| retrieving revision 1.53
 | |
| diff -u -4 -r1.53 pyrun.swg
 | |
| --- Lib/python/pyrun.swg	11 Dec 2004 23:38:44 -0000	1.53
 | |
| +++ Lib/python/pyrun.swg	15 Apr 2005 23:11:25 -0000
 | |
| @@ -455,9 +455,10 @@
 | |
|  	} else {
 | |
|  	  PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received",
 | |
|  		       type, otype);
 | |
|  	}
 | |
| -	Py_DECREF(str);
 | |
| +	if (str)
 | |
| +          Py_DECREF(str);
 | |
|  	return;
 | |
|        }
 | |
|      }   
 | |
|      PyErr_Format(PyExc_TypeError, "a '%s' is expected", type);
 | |
| Index: Source/Modules/python.cxx
 | |
| ===================================================================
 | |
| RCS file: /cvsroot/swig/SWIG/Source/Modules/python.cxx,v
 | |
| retrieving revision 1.81
 | |
| diff -u -4 -r1.81 python.cxx
 | |
| --- Source/Modules/python.cxx	13 Dec 2004 22:12:47 -0000	1.81
 | |
| +++ Source/Modules/python.cxx	15 Apr 2005 23:11:26 -0000
 | |
| @@ -74,9 +74,9 @@
 | |
|       -modern         - Use modern python features only, without compatibility code\n\
 | |
|       -apply          - Use apply() in proxy classes\n\
 | |
|       -new_vwm        - New value wrapper mode, use only when everything else fails \n\
 | |
|       -new_repr       - Use more informative version of __repr__ in proxy classes\n\
 | |
| -     -old_repr       - Use shorter ald old version of __repr__ in proxy classes\n\
 | |
| +     -old_repr       - Use shorter and old version of __repr__ in proxy classes\n\
 | |
|       -noexcept       - No automatic exception handling\n\
 | |
|       -noh            - Don't generate the output header file\n\
 | |
|       -noproxy        - Don't generate proxy classes \n\n";
 | |
|  
 | |
| @@ -749,10 +749,15 @@
 | |
|          
 | |
|        // Do the param type too?
 | |
|        if (showTypes) {
 | |
|          type =  SwigType_base(type);
 | |
| -	lookup = Swig_symbol_clookup(type, 0);
 | |
| -	if (lookup) type = Getattr(lookup, "sym:name");
 | |
| +        SwigType* qt = SwigType_typedef_resolve_all(type);
 | |
| +        if (SwigType_isenum(qt))
 | |
| +          type = NewString("int");
 | |
| +        else {
 | |
| +          lookup = Swig_symbol_clookup(type, 0);
 | |
| +          if (lookup) type = Getattr(lookup, "sym:name");
 | |
| +        }
 | |
|          Printf(doc, "%s ", type);
 | |
|        }
 | |
|  
 | |
|        if (name) {
 | |
| @@ -853,13 +858,19 @@
 | |
|          }
 | |
|          
 | |
|          switch ( ad_type ) {
 | |
|          case AUTODOC_CLASS:
 | |
| -	  if (CPlusPlus) {
 | |
| -	    Printf(doc, "Proxy of C++ %s class", class_name);
 | |
| -	  } else {
 | |
| -	    Printf(doc, "Proxy of C %s struct", class_name);
 | |
| -	  }
 | |
| +          {
 | |
| +            // Only do the autodoc if there isn't a docstring for the class
 | |
| +            String* str = Getattr(n, "feature:docstring");
 | |
| +            if  (str == NULL || Len(str) == 0) {
 | |
| +              if (CPlusPlus) {
 | |
| +                Printf(doc, "Proxy of C++ %s class", class_name);
 | |
| +              } else {
 | |
| +                Printf(doc, "Proxy of C %s struct", class_name);
 | |
| +              }
 | |
| +            }
 | |
| +          }
 | |
|  	  break;
 | |
|          case AUTODOC_CTOR:
 | |
|            if ( Strcmp(class_name, symname) == 0) {
 | |
|              String* paramList = make_autodocParmList(n, showTypes);
 | |
| @@ -1027,10 +1038,12 @@
 | |
|        Printf(methods,"\t { (char *)\"%s\", (PyCFunction) %s, METH_VARARGS | METH_KEYWORDS, ", name, function);
 | |
|      
 | |
|      if (n && Getattr(n,"feature:callback")) {
 | |
|        if (have_docstring(n)) {
 | |
| +        String* ds = docstring(n, AUTODOC_FUNC, "", false);
 | |
| +        Replaceall(ds, "\n", "\\n");
 | |
|  	Printf(methods,"(char *)\"%s\\nswig_ptr: %s\"",
 | |
| -	       docstring(n, AUTODOC_FUNC, "", false),
 | |
| +	       ds,
 | |
|  	       Getattr(n,"feature:callback:name"));
 | |
|        } else {
 | |
|  	Printf(methods,"(char *)\"swig_ptr: %s\"",Getattr(n,"feature:callback:name"));
 | |
|        }
 | |
| @@ -1950,11 +1963,13 @@
 | |
|  	  Printf(f_shadow, modern ? "(object)" : "(_object)");
 | |
|  	}
 | |
|        }
 | |
|        Printf(f_shadow,":\n");
 | |
| -      if ( have_docstring(n) ) 
 | |
| -          Printv(f_shadow, tab4, docstring(n, AUTODOC_CLASS, tab4), "\n", NIL);
 | |
| -      
 | |
| +      if ( have_docstring(n) ) {
 | |
| +        String* str = docstring(n, AUTODOC_CLASS, tab4);
 | |
| +        if (str != NULL && Len(str)) 
 | |
| +          Printv(f_shadow, tab4, str, "\n", NIL);
 | |
| +      }
 | |
|        if (!modern) {
 | |
|          Printv(f_shadow,tab4,"__swig_setmethods__ = {}\n",NIL);
 | |
|          if (Len(base_class)) {
 | |
|            Printf(f_shadow,"%sfor _s in [%s]: __swig_setmethods__.update(_s.__swig_setmethods__)\n",tab4,base_class);
 | |
| @@ -2139,11 +2154,11 @@
 | |
|  	  Replaceall(pycode,"$action", pyaction);
 | |
|  	  Delete(pyaction);
 | |
|  	  Printv(f_shadow,pycode,"\n",NIL);
 | |
|  	} else {
 | |
| -	  Printv(f_shadow, tab4, "def ", symname, "(*args", (allow_kwargs ? ", **kwargs" : ""), "): ", NIL);
 | |
| +	  Printv(f_shadow, tab4, "def ", symname, "(*args", (allow_kwargs ? ", **kwargs" : ""), "):", NIL);
 | |
|  	  if (!have_addtofunc(n)) {
 | |
| -	    Printv(f_shadow, "return ", funcCallHelper(Swig_name_member(class_name,symname), allow_kwargs), "\n", NIL);
 | |
| +	    Printv(f_shadow, " return ", funcCallHelper(Swig_name_member(class_name,symname), allow_kwargs), "\n", NIL);
 | |
|  	  } else {
 | |
|              Printv(f_shadow, "\n", NIL);
 | |
|              if ( have_docstring(n) )
 | |
|                Printv(f_shadow, tab8, docstring(n, AUTODOC_METHOD, tab8), "\n", NIL);
 | |
| @@ -2175,12 +2190,9 @@
 | |
|        return SWIG_OK;
 | |
|      }
 | |
|      
 | |
|      if (shadow) {
 | |
| -      //
 | |
| -      // static + autodoc/prepend/append + def args not working!!!, disable by now
 | |
| -      //
 | |
| -      if (0 && !classic && !Getattr(n,"feature:python:callback") && have_addtofunc(n)) {
 | |
| +      if ( !classic && !Getattr(n,"feature:python:callback") && have_addtofunc(n)) {
 | |
|          int kw = (check_kwargs(n) && !Getattr(n,"sym:overloaded")) ? 1 : 0;
 | |
|          Printv(f_shadow, tab4, "def ", symname, "(*args", (kw ? ", **kwargs" : ""), "):\n", NIL);
 | |
|          if ( have_docstring(n) )
 | |
|            Printv(f_shadow, tab8, docstring(n, AUTODOC_STATICFUNC, tab8), "\n", NIL);
 | |
| Index: Source/Swig/cwrap.c
 | |
| ===================================================================
 | |
| RCS file: /cvsroot/swig/SWIG/Source/Swig/cwrap.c,v
 | |
| retrieving revision 1.51
 | |
| diff -u -4 -r1.51 cwrap.c
 | |
| --- Source/Swig/cwrap.c	4 Dec 2004 08:33:02 -0000	1.51
 | |
| +++ Source/Swig/cwrap.c	15 Apr 2005 23:11:26 -0000
 | |
| @@ -172,17 +172,26 @@
 | |
|        tycode = SwigType_type(type);
 | |
|        if (tycode == T_REFERENCE) {
 | |
|  	if (pvalue) {
 | |
|  	  SwigType *tvalue;
 | |
| -	  String *defname, *defvalue, *rvalue;
 | |
| +	  String *defname, *defvalue, *rvalue, *qvalue;
 | |
|  	  rvalue = SwigType_typedef_resolve_all(pvalue);
 | |
| +	  qvalue = SwigType_typedef_qualified(rvalue);
 | |
|  	  defname = NewStringf("%s_defvalue", lname);
 | |
|  	  tvalue = Copy(type);
 | |
|  	  SwigType_del_reference(tvalue);
 | |
| -	  defvalue = NewStringf("%s = %s", SwigType_lstr(tvalue,defname), rvalue);
 | |
| +	  tycode = SwigType_type(tvalue);
 | |
| +	  if (tycode != T_USER) {
 | |
| +	    /* plain primitive type, we copy the the def value */
 | |
| +	    defvalue = NewStringf("%s = %s", SwigType_lstr(tvalue,defname),qvalue);
 | |
| +	  } else {
 | |
| +	    /* user type, we copy the reference value */
 | |
| +	    defvalue = NewStringf("%s = %s",SwigType_str(type,defname),qvalue);
 | |
| +	  }
 | |
|  	  Wrapper_add_localv(w,defname, defvalue, NIL);
 | |
|  	  Delete(tvalue);
 | |
|  	  Delete(rvalue);
 | |
| +	  Delete(qvalue);
 | |
|  	  Delete(defname);
 | |
|  	  Delete(defvalue);
 | |
|  	}
 | |
|        }  else if (!pvalue && ((tycode == T_POINTER) || (tycode == T_STRING))) {
 |