Revert support for %extend and memberin typemaps added in swig-1.3.39. The memberin typemaps are ignored again for member variables within a %extend block. Documentation inconsistency reported by Torsten Landschoff.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11762 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b9817010fb
commit
2bd190dbf1
9 changed files with 85 additions and 38 deletions
|
|
@ -458,6 +458,7 @@ C_TEST_CASES += \
|
|||
li_cpointer \
|
||||
li_math \
|
||||
long_long \
|
||||
memberin_extend_c \
|
||||
name \
|
||||
nested \
|
||||
nested_structs \
|
||||
|
|
|
|||
|
|
@ -12,8 +12,19 @@ struct ExtendMe {
|
|||
%{
|
||||
#include <map>
|
||||
std::map<ExtendMe*, char *> ExtendMeStringMap;
|
||||
#define ExtendMe_thing_set(self_, val_) ExtendMeStringMap[self_]
|
||||
#define ExtendMe_thing_get(self_) ExtendMeStringMap[self_]
|
||||
void ExtendMe_thing_set(ExtendMe *self, const char *val) {
|
||||
char *old_val = ExtendMeStringMap[self];
|
||||
delete [] old_val;
|
||||
if (val) {
|
||||
ExtendMeStringMap[self] = new char[strlen(val)+1];
|
||||
strcpy(ExtendMeStringMap[self], val);
|
||||
} else {
|
||||
ExtendMeStringMap[self] = 0;
|
||||
}
|
||||
}
|
||||
char * ExtendMe_thing_get(ExtendMe *self) {
|
||||
return ExtendMeStringMap[self];
|
||||
}
|
||||
%}
|
||||
|
||||
%extend ExtendMe {
|
||||
|
|
|
|||
25
Examples/test-suite/memberin_extend_c.i
Normal file
25
Examples/test-suite/memberin_extend_c.i
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
%module memberin_extend_c
|
||||
|
||||
/* Example from the Manual, section 5.5.6: "Adding member functions to C structures" */
|
||||
|
||||
%{
|
||||
typedef struct {
|
||||
char name[50];
|
||||
} Person;
|
||||
%}
|
||||
|
||||
typedef struct {
|
||||
%extend {
|
||||
char *name;
|
||||
}
|
||||
} Person;
|
||||
|
||||
/* Specific implementation of set/get functions */
|
||||
%{
|
||||
char *Person_name_get(Person *p) {
|
||||
return p->name;
|
||||
}
|
||||
void Person_name_set(Person *p, char *val) {
|
||||
strncpy(p->name,val,50);
|
||||
}
|
||||
%}
|
||||
6
Examples/test-suite/python/memberin_extend_c_runme.py
Normal file
6
Examples/test-suite/python/memberin_extend_c_runme.py
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
import memberin_extend_c
|
||||
|
||||
t = memberin_extend_c.Person()
|
||||
t.name = "some name"
|
||||
if t.name != "some name":
|
||||
raise RuntimeError("some name wrong")
|
||||
Loading…
Add table
Add a link
Reference in a new issue