Refactor Code and Support phpinterfaces, factory dispatch
- rewire return of type SWIGTYPE
- {NULL, NULL, NULL} to ZEND_FE_END
- feature:warnfilter - 462 of missing setter
- refactor code of return type (replaced)
- support conversion_operator
This commit is contained in:
parent
25397f0ab9
commit
ae71fc2266
4 changed files with 125 additions and 53 deletions
|
|
@ -95,7 +95,15 @@ if (!dcast) {
|
|||
Type *dobj = dynamic_cast<Type *>($1);
|
||||
if (dobj) {
|
||||
dcast = 1;
|
||||
SWIG_SetPointerZval(return_value, SWIG_as_voidptr(dobj),$descriptor(Type *), $owner);
|
||||
zend_object *std = NULL;
|
||||
if ($newobj) {
|
||||
zend_class_entry *ce = zend_lookup_class(zend_string_init("Type", sizeof("Type")-1, 0));
|
||||
std = ce->create_object(ce);
|
||||
}
|
||||
else {
|
||||
std = $zend_obj;
|
||||
}
|
||||
SWIG_SetZval(return_value, $newobj , $c_obj, SWIG_as_voidptr(dobj), $descriptor(Type *), std);
|
||||
}
|
||||
}%enddef
|
||||
|
||||
|
|
@ -104,6 +112,6 @@ if (!dcast) {
|
|||
int dcast = 0;
|
||||
%formacro(%_factory_dispatch, Types)
|
||||
if (!dcast) {
|
||||
SWIG_SetPointerZval(return_value, SWIG_as_voidptr($1),$descriptor, $owner);
|
||||
SWIG_SetZval(return_value, $newobj , $c_obj, SWIG_as_voidptr($1), $descriptor, $zend_obj);
|
||||
}
|
||||
}%enddef
|
||||
|
|
|
|||
|
|
@ -421,13 +421,45 @@
|
|||
#ifdef __cplusplus
|
||||
{
|
||||
$&1_ltype resultobj = new $1_ltype((const $1_ltype &) $1);
|
||||
SWIG_SetPointerZval(return_value, (void *)resultobj, $&1_descriptor, 1);
|
||||
SWIG_SetZval(return_value, $newobj , $c_obj, (void *)resultobj, $&1_descriptor, $zend_obj);
|
||||
swig_object_wrapper *obj = NULL;
|
||||
|
||||
HashTable * ht = NULL;
|
||||
|
||||
obj = (swig_object_wrapper *) Z_FETCH_OBJ_P(return_value);
|
||||
obj->ptr = (void *)resultobj;
|
||||
ht = Z_OBJ_HT_P(return_value)->get_properties(return_value);
|
||||
if(ht) {
|
||||
zval zv;
|
||||
ZVAL_RES(&zv,zend_register_resource(resultobj,*(int *)($&1_descriptor->clientdata)));
|
||||
zend_hash_str_add(ht, "_cPtr", sizeof("_cPtr") - 1, &zv);
|
||||
}
|
||||
if ($newobj == 1)
|
||||
obj->newobject = 1;
|
||||
else
|
||||
obj->newobject = 0;
|
||||
}
|
||||
#else
|
||||
{
|
||||
$&1_ltype resultobj = ($&1_ltype) emalloc(sizeof($1_type));
|
||||
memcpy(resultobj, &$1, sizeof($1_type));
|
||||
SWIG_SetPointerZval(return_value, (void *)resultobj, $&1_descriptor, 1);
|
||||
SWIG_SetZval(return_value, $newobj , $c_obj, (void *)resultobj, $&1_descriptor, $zend_obj);
|
||||
swig_object_wrapper *obj = NULL;
|
||||
|
||||
HashTable * ht = NULL;
|
||||
|
||||
obj = (swig_object_wrapper *) Z_FETCH_OBJ_P(return_value);
|
||||
obj->ptr = (void *)resultobj;
|
||||
ht = Z_OBJ_HT_P(return_value)->get_properties(return_value);
|
||||
if(ht) {
|
||||
zval zv;
|
||||
ZVAL_RES(&zv,zend_register_resource(resultobj,*(int *)($&1_descriptor->clientdata)));
|
||||
zend_hash_str_add(ht, "_cPtr", sizeof("_cPtr") - 1, &zv);
|
||||
}
|
||||
if ($newobj)
|
||||
obj->newobject = 1;
|
||||
else
|
||||
obj->newobject = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -225,21 +225,6 @@ SWIG_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
static char const_name[] = "swig_runtime_data_type_pointer";
|
||||
static swig_module_info *SWIG_Php_GetModule() {
|
||||
zval *pointer = zend_get_constant_str(const_name, sizeof(const_name) - 1);
|
||||
if (pointer) {
|
||||
if (Z_TYPE_P(pointer) == IS_LONG) {
|
||||
return (swig_module_info *) pointer->value.lval;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void SWIG_Php_SetModule(swig_module_info *pointer) {
|
||||
REGISTER_MAIN_LONG_CONSTANT(const_name, (long) pointer, CONST_PERSISTENT | CONST_CS);
|
||||
}
|
||||
|
||||
static void
|
||||
SWIG_SetZval( zval *zv, int object, int class_obj ,void *ptr, swig_type_info *type, zend_object *std) {
|
||||
|
||||
|
|
@ -266,3 +251,19 @@ static inline
|
|||
swig_object_wrapper * php_fetch_object(zend_object *obj) {
|
||||
return (swig_object_wrapper *)((char *)obj - XtOffsetOf(swig_object_wrapper, std));
|
||||
}
|
||||
|
||||
static char const_name[] = "swig_runtime_data_type_pointer";
|
||||
static swig_module_info *SWIG_Php_GetModule() {
|
||||
zval *pointer = zend_get_constant_str(const_name, sizeof(const_name) - 1);
|
||||
if (pointer) {
|
||||
if (Z_TYPE_P(pointer) == IS_LONG) {
|
||||
return (swig_module_info *) pointer->value.lval;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void SWIG_Php_SetModule(swig_module_info *pointer) {
|
||||
REGISTER_MAIN_LONG_CONSTANT(const_name, (long) pointer, CONST_PERSISTENT | CONST_CS);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue