Skip to content

Commit 5b78899

Browse files
committed
com: use zend_object* rather than zval*
1 parent 32641fb commit 5b78899

4 files changed

Lines changed: 18 additions & 21 deletions

File tree

‎ext/com_dotnet/com_com.c‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,8 @@ PHP_FUNCTION(com_create_guid)
670670
/* {{{ Connect events from a COM object to a PHP object */
671671
PHP_FUNCTION(com_event_sink)
672672
{
673-
zval *object, *sinkobject;
673+
zend_object *object;
674+
zend_object *sinkobject;
674675
zend_string *sink_str = NULL;
675676
HashTable *sink_ht = NULL;
676677
zend_string *type_lib_name = NULL;
@@ -679,16 +680,16 @@ PHP_FUNCTION(com_event_sink)
679680
ITypeInfo *typeinfo = NULL;
680681

681682
ZEND_PARSE_PARAMETERS_START(2, 3)
682-
Z_PARAM_OBJECT_OF_CLASS(object, php_com_variant_class_entry)
683-
Z_PARAM_OBJECT(sinkobject)
683+
Z_PARAM_OBJ_OF_CLASS(object, php_com_variant_class_entry)
684+
Z_PARAM_OBJ(sinkobject)
684685
Z_PARAM_OPTIONAL
685686
Z_PARAM_ARRAY_HT_OR_STR_OR_NULL(sink_ht, sink_str)
686687
ZEND_PARSE_PARAMETERS_END();
687688

688689
RETVAL_FALSE;
689690

690691
php_com_initialize();
691-
obj = CDNO_FETCH(object);
692+
obj = (php_com_dotnet_object*)object;
692693

693694
if (sink_ht) {
694695
/* 0 => typelibname, 1 => dispname */

‎ext/com_dotnet/com_variant.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ static void php_com_variant_from_zval_ex(VARIANT *v, zval *z, int codepage, VART
115115
break;
116116

117117
case IS_OBJECT:
118-
if (php_com_is_valid_object(z)) {
118+
if (php_com_is_valid_object(Z_OBJ_P(z))) {
119119
obj = CDNO_FETCH(z);
120120
if (V_VT(&obj->v) == VT_DISPATCH) {
121121
/* pass the underlying object */
@@ -132,7 +132,7 @@ static void php_com_variant_from_zval_ex(VARIANT *v, zval *z, int codepage, VART
132132
} else {
133133
/* export the PHP object using our COM wrapper */
134134
V_VT(v) = VT_DISPATCH;
135-
V_DISPATCH(v) = php_com_wrapper_export(z);
135+
V_DISPATCH(v) = php_com_wrapper_export(Z_OBJ_P(z));
136136
}
137137
break;
138138

‎ext/com_dotnet/com_wrapper.c‎

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -499,11 +499,11 @@ static void generate_dispids(php_dispatchex *disp)
499499
}
500500
}
501501

502-
static php_dispatchex *disp_constructor(zval *object)
502+
static php_dispatchex *disp_constructor(zend_object *object)
503503
{
504504
php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex));
505505

506-
trace("constructing a COM wrapper for PHP object %p (%s)\n", object, ZSTR_VAL(Z_OBJCE_P(object)->name));
506+
trace("constructing a COM wrapper for PHP object %p (%s)\n", object, ZSTR_VAL(object->ce->name));
507507

508508
if (disp == NULL)
509509
return NULL;
@@ -516,7 +516,7 @@ static php_dispatchex *disp_constructor(zval *object)
516516

517517

518518
if (object) {
519-
ZVAL_COPY(&disp->object, object);
519+
ZVAL_OBJ_COPY(&disp->object, object);
520520
} else {
521521
ZVAL_UNDEF(&disp->object);
522522
}
@@ -536,7 +536,7 @@ static void disp_destructor(php_dispatchex *disp)
536536
CoTaskMemFree(disp);
537537
}
538538

539-
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid,
539+
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zend_object *val, GUID *sinkid,
540540
HashTable *id_to_name)
541541
{
542542
php_dispatchex *disp = disp_constructor(val);
@@ -572,17 +572,13 @@ PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *si
572572
return (IDispatch*)disp;
573573
}
574574

575-
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zval *val)
575+
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zend_object *val)
576576
{
577577
php_dispatchex *disp = NULL;
578578

579-
if (Z_TYPE_P(val) != IS_OBJECT) {
580-
return NULL;
581-
}
582-
583579
if (php_com_is_valid_object(val)) {
584580
/* pass back its IDispatch directly */
585-
php_com_dotnet_object *obj = CDNO_FETCH(val);
581+
php_com_dotnet_object *obj = (php_com_dotnet_object*)val;
586582

587583
if (obj == NULL)
588584
return NULL;

‎ext/com_dotnet/php_com_dotnet_internal.h‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,17 @@ typedef struct _php_com_dotnet_object {
4444
HashTable *id_of_name_cache;
4545
} php_com_dotnet_object;
4646

47-
static inline bool php_com_is_valid_object(zval *zv)
47+
static inline bool php_com_is_valid_object(zend_object *obj)
4848
{
49-
zend_class_entry *ce = Z_OBJCE_P(zv);
49+
const zend_class_entry *ce = obj->ce;
5050
return zend_string_equals_literal(ce->name, "com") ||
5151
zend_string_equals_literal(ce->name, "dotnet") ||
5252
zend_string_equals_literal(ce->name, "variant");
5353
}
5454

5555
#define CDNO_FETCH(zv) (php_com_dotnet_object*)Z_OBJ_P(zv)
5656
#define CDNO_FETCH_VERIFY(obj, zv) do { \
57-
if (!php_com_is_valid_object(zv)) { \
57+
if (!php_com_is_valid_object(Z_OBJ_P(zv))) { \
5858
php_com_throw_exception(E_UNEXPECTED, "expected a variant object"); \
5959
return; \
6060
} \
@@ -99,8 +99,8 @@ zend_result php_com_do_invoke_byref(php_com_dotnet_object *obj, zend_internal_fu
9999
WORD flags, VARIANT *v, int nargs, zval *args);
100100

101101
/* com_wrapper.c */
102-
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name);
103-
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zval *val);
102+
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zend_object *val, GUID *sinkid, HashTable *id_to_name);
103+
PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zend_object *val);
104104

105105
/* com_persist.c */
106106
void php_com_persist_minit(INIT_FUNC_ARGS);

0 commit comments

Comments
 (0)