Updated SWIG patches to CWIG CVS 20040130.

Added a new patch that changes addtofunc to pythonAppend and adds pythonPrepend.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25420 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2004-01-31 01:11:51 +00:00
parent 8a942c3dd3
commit 0cb6df6e3d
4 changed files with 219 additions and 18 deletions

View File

@@ -13,13 +13,14 @@ source tree soon.
swig.python-docstring.patch Adds "autodoc" and "docstring" features. swig.python-docstring.patch Adds "autodoc" and "docstring" features.
See SF Patch #883402
swig.xmlout.patch Fixes a couple problems in the XML output swig.xmlout.patch Fixes a couple problems in the XML output
of SWIG: an extra "/>" was removed and of SWIG: an extra "/>" was removed and
newlines in attribute values were changed newlines in attribute values were changed
to the #10; entity reference so they will to the #10; entity reference so they will
be preserved by parsers. be preserved by parsers.
See SF Patch #883402
Also, added options for dumping or Also, added options for dumping or
writing to a file the XML of the parse writing to a file the XML of the parse
@@ -30,6 +31,13 @@ swig.xmlout.patch Fixes a couple problems in the XML output
See SF Patch #864689 See SF Patch #864689
swig.python-prepend.patch Changes the "addtofunc" feature to
"pythonappend" and also adds a
"pythonprepend" feature that prepends
pythoncode to the begining of a
SWIG-generated proxy function or method.
------------------------------------------------------------------------ ------------------------------------------------------------------------
These patches have already been checked in to SWIG's CVS and are in These patches have already been checked in to SWIG's CVS and are in
the 1.3.20 release. the 1.3.20 release.

View File

@@ -1,10 +1,10 @@
Index: Source/Modules/python.cxx Index: Source/Modules/python.cxx
=================================================================== ===================================================================
RCS file: /cvsroot/SWIG/Source/Modules/python.cxx,v RCS file: /cvsroot/SWIG/Source/Modules/python.cxx,v
retrieving revision 1.39 retrieving revision 1.40
diff -u -4 -r1.39 python.cxx diff -u -4 -r1.40 python.cxx
--- Source/Modules/python.cxx 22 Jan 2004 22:42:17 -0000 1.39 --- Source/Modules/python.cxx 24 Jan 2004 00:25:31 -0000 1.40
+++ Source/Modules/python.cxx 24 Jan 2004 00:18:12 -0000 +++ Source/Modules/python.cxx 30 Jan 2004 22:22:16 -0000
@@ -50,8 +50,17 @@ @@ -50,8 +50,17 @@
static int have_constructor; static int have_constructor;
static int have_repr; static int have_repr;
@@ -301,7 +301,7 @@ diff -u -4 -r1.39 python.cxx
* Check if there is a %addtofunc directive and it has text * Check if there is a %addtofunc directive and it has text
* ------------------------------------------------------------ */ * ------------------------------------------------------------ */
@@ -1698,9 +1953,11 @@ @@ -1731,9 +1986,11 @@
Printf(f_shadow, modern ? "(object)" : "(_object)"); Printf(f_shadow, modern ? "(object)" : "(_object)");
} }
} }
@@ -314,7 +314,7 @@ diff -u -4 -r1.39 python.cxx
Printv(f_shadow,tab4,"__swig_setmethods__ = {}\n",NIL); Printv(f_shadow,tab4,"__swig_setmethods__ = {}\n",NIL);
if (Len(base_class)) { if (Len(base_class)) {
Printf(f_shadow,"%sfor _s in [%s]: __swig_setmethods__.update(_s.__swig_setmethods__)\n",tab4,base_class); Printf(f_shadow,"%sfor _s in [%s]: __swig_setmethods__.update(_s.__swig_setmethods__)\n",tab4,base_class);
@@ -1833,16 +2090,22 @@ @@ -1866,16 +2123,22 @@
Delete(pyaction); Delete(pyaction);
Printv(f_shadow,pycode,"\n",NIL); Printv(f_shadow,pycode,"\n",NIL);
} else { } else {
@@ -344,7 +344,7 @@ diff -u -4 -r1.39 python.cxx
} }
} }
@@ -1857,14 +2120,20 @@ @@ -1890,14 +2153,20 @@
virtual int staticmemberfunctionHandler(Node *n) { virtual int staticmemberfunctionHandler(Node *n) {
String *symname = Getattr(n,"sym:name"); String *symname = Getattr(n,"sym:name");
Language::staticmemberfunctionHandler(n); Language::staticmemberfunctionHandler(n);
@@ -369,7 +369,7 @@ diff -u -4 -r1.39 python.cxx
" = staticmethod(", symname, ")\n", NIL); " = staticmethod(", symname, ")\n", NIL);
if (!modern) { if (!modern) {
@@ -1949,8 +2218,10 @@ @@ -1982,8 +2251,10 @@
} }
Printv(f_shadow, tab4, "def __init__(self, *args", Printv(f_shadow, tab4, "def __init__(self, *args",
@@ -380,7 +380,7 @@ diff -u -4 -r1.39 python.cxx
if (!modern) { if (!modern) {
Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', ", Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', ",
funcCallHelper(Swig_name_construct(symname), allow_kwargs), ")\n", NIL); funcCallHelper(Swig_name_construct(symname), allow_kwargs), ")\n", NIL);
@@ -1964,9 +2235,9 @@ @@ -1997,9 +2268,9 @@
Printv(f_shadow, tab8, "self.thisown = 1\n", NIL); Printv(f_shadow, tab8, "self.thisown = 1\n", NIL);
Printv(f_shadow, tab8, "del newobj.thisown\n", NIL); Printv(f_shadow, tab8, "del newobj.thisown\n", NIL);
} }
@@ -391,7 +391,7 @@ diff -u -4 -r1.39 python.cxx
} }
have_constructor = 1; have_constructor = 1;
} else { } else {
@@ -1982,8 +2253,10 @@ @@ -2015,8 +2286,10 @@
} else { } else {
Printv(f_shadow_stubs, "\ndef ", symname, "(*args", Printv(f_shadow_stubs, "\ndef ", symname, "(*args",
@@ -402,7 +402,7 @@ diff -u -4 -r1.39 python.cxx
funcCallHelper(Swig_name_construct(symname), allow_kwargs), "\n", NIL); funcCallHelper(Swig_name_construct(symname), allow_kwargs), "\n", NIL);
Printv(f_shadow_stubs, tab4, "val.thisown = 1\n", NIL); Printv(f_shadow_stubs, tab4, "val.thisown = 1\n", NIL);
if ( have_addtofunc(n) ) if ( have_addtofunc(n) )
@@ -2015,13 +2288,15 @@ @@ -2048,13 +2321,15 @@
Delete(pyaction); Delete(pyaction);
Printv(f_shadow,pycode,"\n", NIL); Printv(f_shadow,pycode,"\n", NIL);
} else { } else {

View File

@@ -0,0 +1,193 @@
--- Source/Modules/mystuff/python.cxx.18 2004-01-30 15:22:49.000000000 -0800
+++ Source/Modules/python.cxx 2004-01-30 16:27:22.000000000 -0800
@@ -426,19 +426,21 @@
* functions.
* ------------------------------------------------------------ */
void emitFunctionShadowHelper(Node *n, File *f_dest, String *name, int kw) {
- if ( ! have_addtofunc(n) && ! have_docstring(n) ) {
- /* If there is no addtofunc or docstring directive then just assign from the extension module */
+ if ( !have_pythonprepend(n) && !have_pythonappend(n) && !have_docstring(n) ) {
+ /* If there is no pythonappend or docstring directive then just assign from the extension module */
Printv(f_dest, "\n", name, " = ", module, ".", name, "\n", NIL);
} else {
/* Otherwise make a wrapper function to insert the code into */
Printv(f_dest, "\ndef ", name, "(*args", (kw ? ", **kwargs" : ""), "):\n", NIL);
if ( have_docstring(n) )
Printv(f_dest, tab4, docstring(n, AUTODOC_FUNC, tab4), "\n", NIL);
- if ( have_addtofunc(n) ) {
+ if ( have_pythonprepend(n) )
+ Printv(f_dest, tab4, pythonprepend(n), "\n", NIL);
+ if ( have_pythonappend(n) ) {
Printv(f_dest, tab4, "val = ", funcCallHelper(name, kw), "\n", NIL);
- Printv(f_dest, tab4, addtofunc(n), "\n", NIL);
+ Printv(f_dest, tab4, pythonappend(n), "\n", NIL);
Printv(f_dest, tab4, "return val\n", NIL);
} else {
Printv(f_dest, tab4, "return ", funcCallHelper(name, kw), "\n", NIL);
}
@@ -696,24 +698,49 @@
}
/* ------------------------------------------------------------
- * have_addtofunc()
- * Check if there is a %addtofunc directive and it has text
+ * have_pythonprepend()
+ * Check if there is a %pythonprepend directive and it has text
* ------------------------------------------------------------ */
- bool have_addtofunc(Node *n) {
- String* str = Getattr(n, "feature:addtofunc");
+ bool have_pythonprepend(Node *n) {
+ String* str = Getattr(n, "feature:pythonprepend");
return (str != NULL && Len(str) > 0);
}
/* ------------------------------------------------------------
- * addtofunc()
- * Get the %addtofunc code, stripping off {} if neccessary
+ * pythonprepend()
+ * Get the %pythonprepend code, stripping off {} if neccessary
* ------------------------------------------------------------ */
- String *addtofunc(Node *n) {
- String* str = Getattr(n, "feature:addtofunc");
+ String *pythonprepend(Node *n) {
+ String* str = Getattr(n, "feature:pythonprepend");
+ char* t = Char(str);
+ if (*t == '{') {
+ Delitem(str ,0);
+ Delitem(str,DOH_END);
+ }
+ return str;
+ }
+
+ /* ------------------------------------------------------------
+ * have_pythonappend()
+ * Check if there is a %pythonappend directive and it has text
+ * ------------------------------------------------------------ */
+
+ bool have_pythonappend(Node *n) {
+ String* str = Getattr(n, "feature:pythonappend");
+ return (str != NULL && Len(str) > 0);
+ }
+
+ /* ------------------------------------------------------------
+ * pythonappend()
+ * Get the %pythonappend code, stripping off {} if neccessary
+ * ------------------------------------------------------------ */
+
+ String *pythonappend(Node *n) {
+ String* str = Getattr(n, "feature:pythonappend");
char* t = Char(str);
if (*t == '{') {
Delitem(str ,0);
Delitem(str,DOH_END);
@@ -2124,17 +2151,19 @@
Printv(f_shadow,pycode,"\n",NIL);
} else {
Printv(f_shadow, tab4, "def ", symname, "(*args", (allow_kwargs ? ", **kwargs" : ""), "):", NIL);
- if ( ! have_addtofunc(n) && ! have_docstring(n)) {
+ if ( !have_pythonprepend(n) && !have_pythonappend(n) && !have_docstring(n)) {
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_FUNC, tab8), "\n", NIL);
- if ( have_addtofunc(n) ) {
+ if ( have_pythonprepend(n) )
+ Printv(f_shadow, tab8, pythonprepend(n), "\n", NIL);
+ if ( have_pythonappend(n) ) {
Printv(f_shadow, tab8, "val = ", funcCallHelper(Swig_name_member(class_name,symname), allow_kwargs), "\n", NIL);
- Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
+ Printv(f_shadow, tab8, pythonappend(n), "\n", NIL);
Printv(f_shadow, tab8, "return val\n\n", NIL);
} else {
Printv(f_shadow, tab8, "return ", funcCallHelper(Swig_name_member(class_name,symname), allow_kwargs), "\n\n", NIL);
}
@@ -2153,16 +2182,18 @@
virtual int staticmemberfunctionHandler(Node *n) {
String *symname = Getattr(n,"sym:name");
Language::staticmemberfunctionHandler(n);
if (shadow) {
- if ( !classic && (have_addtofunc(n) || have_docstring(n)) ) {
+ if ( !classic && (have_pythonprepend(n) || have_pythonappend(n) || have_docstring(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);
- if ( have_addtofunc(n) ) {
+ if ( have_pythonprepend(n) )
+ Printv(f_shadow, tab8, pythonprepend(n), "\n", NIL);
+ if ( have_pythonappend(n) ) {
Printv(f_shadow, tab8, "val = ", funcCallHelper(Swig_name_member(class_name, symname), kw), "\n", NIL);
- Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
+ Printv(f_shadow, tab8, pythonappend(n), "\n", NIL);
Printv(f_shadow, tab8, "return val\n\n", NIL);
} else {
Printv(f_shadow, tab8, "return ", funcCallHelper(Swig_name_member(class_name, symname), kw), "\n\n", NIL);
}
@@ -2253,8 +2284,10 @@
Printv(f_shadow, tab4, "def __init__(self, *args",
(allow_kwargs ? ", **kwargs" : ""), "):\n", NIL);
if ( have_docstring(n) )
Printv(f_shadow, tab8, docstring(n, AUTODOC_CTOR, tab8), "\n", NIL);
+ if ( have_pythonprepend(n) )
+ Printv(f_shadow, tab8, pythonprepend(n), "\n", NIL);
Printv(f_shadow, pass_self, NIL);
if (!modern) {
Printv(f_shadow, tab8, "_swig_setattr(self, ", rclassname, ", 'this', ",
funcCallHelper(Swig_name_construct(symname), allow_kwargs), ")\n", NIL);
@@ -2267,10 +2300,10 @@
Printv(f_shadow, tab8, "self.this = newobj.this\n", NIL);
Printv(f_shadow, tab8, "self.thisown = 1\n", NIL);
Printv(f_shadow, tab8, "del newobj.thisown\n", NIL);
}
- if ( have_addtofunc(n) )
- Printv(f_shadow, tab8, addtofunc(n), "\n\n", NIL);
+ if ( have_pythonappend(n) )
+ Printv(f_shadow, tab8, pythonappend(n), "\n\n", NIL);
Delete(pass_self);
}
have_constructor = 1;
} else {
@@ -2288,13 +2321,15 @@
Printv(f_shadow_stubs, "\ndef ", symname, "(*args",
(allow_kwargs ? ", **kwargs" : ""), "):\n", NIL);
if ( have_docstring(n) )
Printv(f_shadow_stubs, tab4, docstring(n, AUTODOC_CTOR, tab4), "\n", NIL);
+ if ( have_pythonprepend(n) )
+ Printv(f_shadow_stubs, tab4, pythonprepend(n), "\n", NIL);
Printv(f_shadow_stubs, tab4, "val = ",
funcCallHelper(Swig_name_construct(symname), allow_kwargs), "\n", NIL);
Printv(f_shadow_stubs, tab4, "val.thisown = 1\n", NIL);
- if ( have_addtofunc(n) )
- Printv(f_shadow_stubs, tab4, addtofunc(n), "\n", NIL);
+ if ( have_pythonappend(n) )
+ Printv(f_shadow_stubs, tab4, pythonappend(n), "\n", NIL);
Printv(f_shadow_stubs, tab4, "return val\n", NIL);
}
}
}
@@ -2323,13 +2358,16 @@
} else {
Printv(f_shadow, tab4, "def __del__(self, destroy=", module, ".", Swig_name_destroy(symname), "):\n", NIL);
if ( have_docstring(n) )
Printv(f_shadow, tab8, docstring(n, AUTODOC_DTOR, tab8), "\n", NIL);
- if ( have_addtofunc(n) )
- Printv(f_shadow, tab8, addtofunc(n), "\n", NIL);
+ if ( have_pythonprepend(n) )
+ Printv(f_shadow, tab8, pythonprepend(n), "\n", NIL);
Printv(f_shadow, tab8, "try:\n", NIL);
Printv(f_shadow, tab8, tab4, "if self.thisown: destroy(self)\n", NIL);
- Printv(f_shadow, tab8, "except: pass\n\n", NIL);
+ Printv(f_shadow, tab8, "except: pass\n", NIL);
+ if ( have_pythonappend(n) )
+ Printv(f_shadow, tab8, pythonappend(n), "\n", NIL);
+ Printv(f_shadow, "\n", NIL);
}
}
return SWIG_OK;
}

View File

@@ -1,10 +1,10 @@
Index: Source/Swig/swig.h Index: Source/Swig/swig.h
=================================================================== ===================================================================
RCS file: /cvsroot/SWIG/Source/Swig/swig.h,v RCS file: /cvsroot/SWIG/Source/Swig/swig.h,v
retrieving revision 1.80 retrieving revision 1.81
diff -u -4 -r1.80 swig.h diff -u -4 -r1.81 swig.h
--- Source/Swig/swig.h 22 Jan 2004 22:42:18 -0000 1.80 --- Source/Swig/swig.h 27 Jan 2004 23:39:35 -0000 1.81
+++ Source/Swig/swig.h 22 Jan 2004 22:51:44 -0000 +++ Source/Swig/swig.h 30 Jan 2004 22:22:10 -0000
@@ -364,8 +364,10 @@ @@ -364,8 +364,10 @@
extern void Swig_print_tags(File *obj, Node *root); extern void Swig_print_tags(File *obj, Node *root);
extern void Swig_print_tree(Node *obj); extern void Swig_print_tree(Node *obj);
@@ -22,7 +22,7 @@ RCS file: /cvsroot/SWIG/Source/Modules/main.cxx,v
retrieving revision 1.33 retrieving revision 1.33
diff -u -4 -r1.33 main.cxx diff -u -4 -r1.33 main.cxx
--- Source/Modules/main.cxx 22 Jan 2004 22:42:15 -0000 1.33 --- Source/Modules/main.cxx 22 Jan 2004 22:42:15 -0000 1.33
+++ Source/Modules/main.cxx 22 Jan 2004 22:51:45 -0000 +++ Source/Modules/main.cxx 30 Jan 2004 22:22:11 -0000
@@ -91,15 +91,17 @@ @@ -91,15 +91,17 @@
-w+321,401,-402 \n\ -w+321,401,-402 \n\
\n\ \n\
@@ -90,7 +90,7 @@ RCS file: /cvsroot/SWIG/Source/Modules/xml.cxx,v
retrieving revision 1.10 retrieving revision 1.10
diff -u -4 -r1.10 xml.cxx diff -u -4 -r1.10 xml.cxx
--- Source/Modules/xml.cxx 22 Jan 2004 22:42:18 -0000 1.10 --- Source/Modules/xml.cxx 22 Jan 2004 22:42:18 -0000 1.10
+++ Source/Modules/xml.cxx 22 Jan 2004 22:51:45 -0000 +++ Source/Modules/xml.cxx 30 Jan 2004 22:22:11 -0000
@@ -197,18 +197,19 @@ @@ -197,18 +197,19 @@
Replaceall( o, "&", "&" ); Replaceall( o, "&", "&" );
Replaceall( o, "<", "&lt;" ); Replaceall( o, "<", "&lt;" );