Add PHP typemaps for pointer to method.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11768 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d277354167
commit
67bbac4872
6 changed files with 62 additions and 3 deletions
|
|
@ -2,10 +2,12 @@ Version 1.3.41 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
2009-12-03: olly
|
2009-12-03: olly
|
||||||
[PHP] Add typemaps for long long and unsigned long long.
|
[PHP] Add typemaps for long long and unsigned long long, and for
|
||||||
|
pointer to method.
|
||||||
|
|
||||||
2009-12-02: olly
|
2009-12-02: olly
|
||||||
[PHP] Fix warning and rename of reserved class name to be case insensitive.
|
[PHP] Fix warning and rename of reserved class name to be case
|
||||||
|
insensitive.
|
||||||
|
|
||||||
2009-12-01: wsfulton
|
2009-12-01: wsfulton
|
||||||
Revert support for %extend and memberin typemaps added in swig-1.3.39. The
|
Revert support for %extend and memberin typemaps added in swig-1.3.39. The
|
||||||
|
|
|
||||||
|
|
@ -51,3 +51,6 @@
|
||||||
c.module_number = module_number;
|
c.module_number = module_number;
|
||||||
zend_register_constant( &c TSRMLS_CC );
|
zend_register_constant( &c TSRMLS_CC );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handled as a global variable. */
|
||||||
|
%typemap(consttab) SWIGTYPE (CLASS::*) "";
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,16 @@
|
||||||
zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var, sizeof(zval *), NULL);
|
zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var, sizeof(zval *), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%typemap(varinit) SWIGTYPE (CLASS::*)
|
||||||
|
{
|
||||||
|
void * p = emalloc(sizeof($1));
|
||||||
|
memcpy(p, &$1, sizeof($1));
|
||||||
|
zval * resource;
|
||||||
|
MAKE_STD_ZVAL(resource);
|
||||||
|
ZEND_REGISTER_RESOURCE(resource, p, le_member_ptr);
|
||||||
|
zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&resource, sizeof(zval *), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
%typemap(varin) int, unsigned int, short, unsigned short, long, unsigned long, signed char, unsigned char, enum SWIGTYPE
|
%typemap(varin) int, unsigned int, short, unsigned short, long, unsigned long, signed char, unsigned char, enum SWIGTYPE
|
||||||
{
|
{
|
||||||
zval **z_var;
|
zval **z_var;
|
||||||
|
|
@ -216,6 +226,15 @@
|
||||||
$1 = ($1_ltype)_temp;
|
$1 = ($1_ltype)_temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%typemap(varin) SWIGTYPE (CLASS::*)
|
||||||
|
{
|
||||||
|
zval **z_var;
|
||||||
|
|
||||||
|
zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
|
||||||
|
void * p = (void*)zend_fetch_resource(*z_var TSRMLS_CC, -1, SWIG_MEMBER_PTR, NULL, 1, le_member_ptr);
|
||||||
|
memcpy(&$1, p, sizeof($1));
|
||||||
|
}
|
||||||
|
|
||||||
%typemap(varout) int,
|
%typemap(varout) int,
|
||||||
unsigned int,
|
unsigned int,
|
||||||
unsigned short,
|
unsigned short,
|
||||||
|
|
@ -328,4 +347,12 @@ deliberate error cos this code looks bogus to me
|
||||||
SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0);
|
SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%typemap(varout) SWIGTYPE (CLASS::*)
|
||||||
|
{
|
||||||
|
void * p = emalloc(sizeof($1));
|
||||||
|
memcpy(p, &$1, sizeof($1));
|
||||||
|
zval * resource;
|
||||||
|
MAKE_STD_ZVAL(resource);
|
||||||
|
ZEND_REGISTER_RESOURCE(resource, p, le_member_ptr);
|
||||||
|
zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&resource, sizeof(zval *), NULL);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -354,6 +354,23 @@
|
||||||
SWIG_SetPointerZval($input, (void *)&$1_name, $1_descriptor, $owner);
|
SWIG_SetPointerZval($input, (void *)&$1_name, $1_descriptor, $owner);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
%typemap(out) SWIGTYPE (CLASS::*)
|
||||||
|
{
|
||||||
|
void * p = emalloc(sizeof($1));
|
||||||
|
memcpy(p, &$1, sizeof($1));
|
||||||
|
zval * resource;
|
||||||
|
MAKE_STD_ZVAL(resource);
|
||||||
|
ZEND_REGISTER_RESOURCE(resource, p, le_member_ptr);
|
||||||
|
|
||||||
|
SWIG_SetPointerZval(return_value, (void *)&$1, $1_descriptor, $owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(in) SWIGTYPE (CLASS::*)
|
||||||
|
{
|
||||||
|
void * p = (void*)zend_fetch_resource($input TSRMLS_CC, -1, SWIG_MEMBER_PTR, NULL, 1, le_member_ptr);
|
||||||
|
memcpy(&$1, p, sizeof($1));
|
||||||
|
}
|
||||||
|
|
||||||
%typemap(out) SWIGTYPE *DYNAMIC,
|
%typemap(out) SWIGTYPE *DYNAMIC,
|
||||||
SWIGTYPE &DYNAMIC
|
SWIGTYPE &DYNAMIC
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -8,5 +8,6 @@
|
||||||
%init %{
|
%init %{
|
||||||
SWIG_php_minit {
|
SWIG_php_minit {
|
||||||
SWIG_InitializeModule(0);
|
SWIG_InitializeModule(0);
|
||||||
|
le_member_ptr = zend_register_list_destructors_ex(member_ptr_dtor, NULL, SWIG_MEMBER_PTR, module_number);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -261,3 +261,12 @@ static void SWIG_Php_SetModule(swig_module_info *pointer) {
|
||||||
TSRMLS_FETCH();
|
TSRMLS_FETCH();
|
||||||
REGISTER_MAIN_LONG_CONSTANT(const_name, (long) pointer, 0);
|
REGISTER_MAIN_LONG_CONSTANT(const_name, (long) pointer, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SWIG_MEMBER_PTR ((char*)"CLASS::*")
|
||||||
|
|
||||||
|
static void member_ptr_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) {
|
||||||
|
efree(rsrc->ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int le_member_ptr;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue