make %callback more uniform and usable

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6435 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2004-10-18 07:35:18 +00:00
commit c7982bbdc8
6 changed files with 35 additions and 16 deletions

View file

@ -8,11 +8,11 @@
extern int do_op(int a, int b, int (*op)(int, int)); extern int do_op(int a, int b, int (*op)(int, int));
/* Now install a bunch of "ops" as constants */ /* Now install a bunch of "ops" as constants */
%callback("%(upper)s") %callback("%(upper)s");
int add(int, int); int add(int, int);
int sub(int, int); int sub(int, int);
int mul(int, int); int mul(int, int);
%nocallback %nocallback;
extern int (*funcvar)(int,int); extern int (*funcvar)(int,int);

View file

@ -8,11 +8,11 @@
extern int do_op(int a, int b, int (*op)(int, int)); extern int do_op(int a, int b, int (*op)(int, int));
/* Now install a bunch of "ops" as constants */ /* Now install a bunch of "ops" as constants */
%callback("%(upper)s") %callback("%(upper)s");
int add(int, int); int add(int, int);
int sub(int, int); int sub(int, int);
int mul(int, int); int mul(int, int);
%nocallback %nocallback;
extern int (*funcvar)(int,int); extern int (*funcvar)(int,int);

View file

@ -1,14 +1,13 @@
%module callback %module callback
%pythoncallback(1); %callback(1) foo;
%pythoncallback(1) foo; %callback(1) foof;
%pythoncallback(1) A::bar; %callback(1) A::bar;
%pythoncallback(1) A::foom; %callback(1) A::foom;
%pythoncallback(1) foo_T; %callback("%s_Cb_Ptr") foo_T; // old style, still works.
%inline %{ %inline %{
int foo(int a) { int foo(int a) {
return a; return a;
} }

View file

@ -108,6 +108,17 @@ These methods "may be called" if needed.
*/ */
%define %pythoncallback(FLAG) %feature("python:callback",#FLAG) %enddef #define %pythoncallback(x) %feature("python:callback",`x`)
%define %nopythoncallback %feature("python:callback","") %enddef #define %nopythoncallback %feature("python:callback","")
/* Support for the old %callback directive name */
#ifdef %callback
#undef %callback
#endif
#define %callback(x) %pythoncallback(x)
#ifdef %nocallback
#undef %nocallback
#endif
#define %nocallback %nopythoncallback; %feature("callback","")

View file

@ -44,8 +44,8 @@
/* Experimental */ /* Experimental */
#define %callback(x) %feature("callback") `x`; #define %callback(x) %feature("callback",`x`)
#define %nocallback %feature("callback",""); #define %nocallback %feature("callback","")
/* Directives for attribute functions */ /* Directives for attribute functions */

View file

@ -502,8 +502,17 @@ public:
int functionHandler(Node *n) { int functionHandler(Node *n) {
if (Getattr(n,"feature:python:callback")) { String *pcb = Getattr(n,"feature:python:callback");
if (pcb && (Strcmp(pcb,"0") == 0)) {
Setattr(n,"feature:python:callback","");
pcb = 0;
}
if (pcb) {
if (Strcmp(pcb,"1") == 0) {
Setattr(n,"feature:callback","%s_cb_ptr"); Setattr(n,"feature:callback","%s_cb_ptr");
} else {
Setattr(n,"feature:callback",pcb);
}
autodoc_l dlevel = autodoc_level(Getattr(n, "feature:autodoc")); autodoc_l dlevel = autodoc_level(Getattr(n, "feature:autodoc"));
if (dlevel != NO_AUTODOC && dlevel > TYPES_AUTODOC) { if (dlevel != NO_AUTODOC && dlevel > TYPES_AUTODOC) {
Setattr(n,"feature:autodoc","1"); Setattr(n,"feature:autodoc","1");