Unverified Commit 22503a01 authored by Paul Yang's avatar Paul Yang Committed by GitHub

fix for API change in PHP 7.3 (#4898)

parent e529d162
...@@ -253,7 +253,7 @@ PHP_METHOD(Descriptor, getField) { ...@@ -253,7 +253,7 @@ PHP_METHOD(Descriptor, getField) {
#else #else
field_hashtable_value = field_hashtable_value =
field_descriptor_type->create_object(field_descriptor_type TSRMLS_CC); field_descriptor_type->create_object(field_descriptor_type TSRMLS_CC);
--GC_REFCOUNT(field_hashtable_value); GC_DELREF(field_hashtable_value);
#endif #endif
FieldDescriptor *field_php = FieldDescriptor *field_php =
UNBOX_HASHTABLE_VALUE(FieldDescriptor, field_hashtable_value); UNBOX_HASHTABLE_VALUE(FieldDescriptor, field_hashtable_value);
...@@ -264,7 +264,7 @@ PHP_METHOD(Descriptor, getField) { ...@@ -264,7 +264,7 @@ PHP_METHOD(Descriptor, getField) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(field_hashtable_value, 1, 0); RETURN_ZVAL(field_hashtable_value, 1, 0);
#else #else
++GC_REFCOUNT(field_hashtable_value); GC_ADDREF(field_hashtable_value);
RETURN_OBJ(field_hashtable_value); RETURN_OBJ(field_hashtable_value);
#endif #endif
} }
...@@ -492,7 +492,7 @@ PHP_METHOD(FieldDescriptor, getEnumType) { ...@@ -492,7 +492,7 @@ PHP_METHOD(FieldDescriptor, getEnumType) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0); RETURN_ZVAL(desc, 1, 0);
#else #else
++GC_REFCOUNT(desc); GC_ADDREF(desc);
RETURN_OBJ(desc); RETURN_OBJ(desc);
#endif #endif
} }
...@@ -512,7 +512,7 @@ PHP_METHOD(FieldDescriptor, getMessageType) { ...@@ -512,7 +512,7 @@ PHP_METHOD(FieldDescriptor, getMessageType) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0); RETURN_ZVAL(desc, 1, 0);
#else #else
++GC_REFCOUNT(desc); GC_ADDREF(desc);
RETURN_OBJ(desc); RETURN_OBJ(desc);
#endif #endif
} }
...@@ -585,7 +585,7 @@ PHP_METHOD(Oneof, getField) { ...@@ -585,7 +585,7 @@ PHP_METHOD(Oneof, getField) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(field_hashtable_value, 1, 0); RETURN_ZVAL(field_hashtable_value, 1, 0);
#else #else
++GC_REFCOUNT(field_hashtable_value); GC_ADDREF(field_hashtable_value);
RETURN_OBJ(field_hashtable_value); RETURN_OBJ(field_hashtable_value);
#endif #endif
} }
...@@ -703,7 +703,7 @@ PHP_METHOD(DescriptorPool, getGeneratedPool) { ...@@ -703,7 +703,7 @@ PHP_METHOD(DescriptorPool, getGeneratedPool) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(generated_pool_php, 1, 0); RETURN_ZVAL(generated_pool_php, 1, 0);
#else #else
++GC_REFCOUNT(generated_pool_php); GC_ADDREF(generated_pool_php);
RETURN_OBJ(generated_pool_php); RETURN_OBJ(generated_pool_php);
#endif #endif
} }
...@@ -713,7 +713,7 @@ PHP_METHOD(InternalDescriptorPool, getGeneratedPool) { ...@@ -713,7 +713,7 @@ PHP_METHOD(InternalDescriptorPool, getGeneratedPool) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(internal_generated_pool_php, 1, 0); RETURN_ZVAL(internal_generated_pool_php, 1, 0);
#else #else
++GC_REFCOUNT(internal_generated_pool_php); GC_ADDREF(internal_generated_pool_php);
RETURN_OBJ(internal_generated_pool_php); RETURN_OBJ(internal_generated_pool_php);
#endif #endif
} }
...@@ -1033,7 +1033,7 @@ PHP_METHOD(DescriptorPool, getDescriptorByClassName) { ...@@ -1033,7 +1033,7 @@ PHP_METHOD(DescriptorPool, getDescriptorByClassName) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0); RETURN_ZVAL(desc, 1, 0);
#else #else
++GC_REFCOUNT(desc); GC_ADDREF(desc);
RETURN_OBJ(desc); RETURN_OBJ(desc);
#endif #endif
} }
...@@ -1070,7 +1070,7 @@ PHP_METHOD(DescriptorPool, getEnumDescriptorByClassName) { ...@@ -1070,7 +1070,7 @@ PHP_METHOD(DescriptorPool, getEnumDescriptorByClassName) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
RETURN_ZVAL(desc, 1, 0); RETURN_ZVAL(desc, 1, 0);
#else #else
++GC_REFCOUNT(desc); GC_ADDREF(desc);
RETURN_OBJ(desc); RETURN_OBJ(desc);
#endif #endif
} }
...@@ -577,7 +577,7 @@ static void map_slot_value(upb_fieldtype_t type, const void* from, ...@@ -577,7 +577,7 @@ static void map_slot_value(upb_fieldtype_t type, const void* from,
break; break;
case UPB_TYPE_MESSAGE: case UPB_TYPE_MESSAGE:
*(zend_object**)to = Z_OBJ_P(*(zval**)from); *(zend_object**)to = Z_OBJ_P(*(zval**)from);
++GC_REFCOUNT(*(zend_object**)to); GC_ADDREF(*(zend_object**)to);
break; break;
#endif #endif
default: default:
......
...@@ -192,7 +192,8 @@ static inline void php_proto_map_string_release(void *value) { ...@@ -192,7 +192,8 @@ static inline void php_proto_map_string_release(void *value) {
} }
static inline void php_proto_map_object_release(void *value) { static inline void php_proto_map_object_release(void *value) {
zend_object* object = *(zend_object**)value; zend_object* object = *(zend_object**)value;
if(--GC_REFCOUNT(object) == 0) { GC_DELREF(object);
if(GC_REFCOUNT(object) == 0) {
zend_objects_store_del(object); zend_objects_store_del(object);
} }
} }
...@@ -302,7 +303,8 @@ static bool map_index_unset(Map *intern, const char* keyval, int length) { ...@@ -302,7 +303,8 @@ static bool map_index_unset(Map *intern, const char* keyval, int length) {
zval_ptr_dtor(upb_value_memory(&old_value)); zval_ptr_dtor(upb_value_memory(&old_value));
#else #else
zend_object* object = *(zend_object**)upb_value_memory(&old_value); zend_object* object = *(zend_object**)upb_value_memory(&old_value);
if(--GC_REFCOUNT(object) == 0) { GC_DELREF(object);
if(GC_REFCOUNT(object) == 0) {
zend_objects_store_del(object); zend_objects_store_del(object);
} }
#endif #endif
......
...@@ -869,7 +869,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Cardinality", ...@@ -869,7 +869,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Cardinality",
zend_declare_class_constant_long(field_cardinality_type, zend_declare_class_constant_long(field_cardinality_type,
"CARDINALITY_REPEATED", 20, 3 TSRMLS_CC); "CARDINALITY_REPEATED", 20, 3 TSRMLS_CC);
const char *alias = "Google\\Protobuf\\Field_Cardinality"; const char *alias = "Google\\Protobuf\\Field_Cardinality";
#if PHP_VERSION_ID < 70300
zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type TSRMLS_CC); zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type TSRMLS_CC);
#else
zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type, 1);
#endif
PHP_PROTO_INIT_ENUMCLASS_END PHP_PROTO_INIT_ENUMCLASS_END
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -924,7 +928,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Kind", ...@@ -924,7 +928,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Kind",
zend_declare_class_constant_long(field_kind_type, zend_declare_class_constant_long(field_kind_type,
"TYPE_SINT64", 11, 18 TSRMLS_CC); "TYPE_SINT64", 11, 18 TSRMLS_CC);
const char *alias = "Google\\Protobuf\\Field_Kind"; const char *alias = "Google\\Protobuf\\Field_Kind";
#if PHP_VERSION_ID < 70300
zend_register_class_alias_ex(alias, strlen(alias), field_kind_type TSRMLS_CC); zend_register_class_alias_ex(alias, strlen(alias), field_kind_type TSRMLS_CC);
#else
zend_register_class_alias_ex(alias, strlen(alias), field_kind_type, 1);
#endif
PHP_PROTO_INIT_ENUMCLASS_END PHP_PROTO_INIT_ENUMCLASS_END
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -104,7 +104,7 @@ void add_def_obj(const void* def, PHP_PROTO_HASHTABLE_VALUE value) { ...@@ -104,7 +104,7 @@ void add_def_obj(const void* def, PHP_PROTO_HASHTABLE_VALUE value) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
Z_ADDREF_P(value); Z_ADDREF_P(value);
#else #else
++GC_REFCOUNT(value); GC_ADDREF(value);
#endif #endif
add_to_table(upb_def_to_php_obj_map, def, value); add_to_table(upb_def_to_php_obj_map, def, value);
} }
...@@ -117,7 +117,7 @@ void add_ce_obj(const void* ce, PHP_PROTO_HASHTABLE_VALUE value) { ...@@ -117,7 +117,7 @@ void add_ce_obj(const void* ce, PHP_PROTO_HASHTABLE_VALUE value) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
Z_ADDREF_P(value); Z_ADDREF_P(value);
#else #else
++GC_REFCOUNT(value); GC_ADDREF(value);
#endif #endif
add_to_table(ce_to_php_obj_map, ce, value); add_to_table(ce_to_php_obj_map, ce, value);
} }
...@@ -134,7 +134,7 @@ void add_proto_obj(const char* proto, PHP_PROTO_HASHTABLE_VALUE value) { ...@@ -134,7 +134,7 @@ void add_proto_obj(const char* proto, PHP_PROTO_HASHTABLE_VALUE value) {
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
Z_ADDREF_P(value); Z_ADDREF_P(value);
#else #else
++GC_REFCOUNT(value); GC_ADDREF(value);
#endif #endif
add_to_strtable(proto_to_php_obj_map, proto, strlen(proto), value); add_to_strtable(proto_to_php_obj_map, proto, strlen(proto), value);
} }
...@@ -235,7 +235,8 @@ static PHP_GSHUTDOWN_FUNCTION(protobuf) { ...@@ -235,7 +235,8 @@ static PHP_GSHUTDOWN_FUNCTION(protobuf) {
static void php_proto_hashtable_descriptor_release(zval* value) { static void php_proto_hashtable_descriptor_release(zval* value) {
void* ptr = Z_PTR_P(value); void* ptr = Z_PTR_P(value);
zend_object* object = *(zend_object**)ptr; zend_object* object = *(zend_object**)ptr;
if(--GC_REFCOUNT(object) == 0) { GC_DELREF(object);
if(GC_REFCOUNT(object) == 0) {
zend_objects_store_del(object); zend_objects_store_del(object);
} }
efree(ptr); efree(ptr);
......
...@@ -46,6 +46,11 @@ ...@@ -46,6 +46,11 @@
// PHP7 Wrappers // PHP7 Wrappers
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#if PHP_VERSION_ID < 70300
#define GC_ADDREF(h) ++GC_REFCOUNT(h)
#define GC_DELREF(h) --GC_REFCOUNT(h)
#endif
#if PHP_MAJOR_VERSION < 7 #if PHP_MAJOR_VERSION < 7
#define php_proto_zend_literal const zend_literal* #define php_proto_zend_literal const zend_literal*
...@@ -496,7 +501,7 @@ static inline int php_proto_zend_hash_get_current_data_ex(HashTable* ht, ...@@ -496,7 +501,7 @@ static inline int php_proto_zend_hash_get_current_data_ex(HashTable* ht,
PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \ PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ; \
WRAPPED_OBJ = OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY); \ WRAPPED_OBJ = OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY); \
OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \ OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ); \
--GC_REFCOUNT(WRAPPED_OBJ); GC_DELREF(WRAPPED_OBJ);
#define PHP_PROTO_CE_DECLARE zend_class_entry* #define PHP_PROTO_CE_DECLARE zend_class_entry*
#define PHP_PROTO_CE_UNREF(ce) (ce) #define PHP_PROTO_CE_UNREF(ce) (ce)
......
...@@ -200,7 +200,7 @@ bool native_slot_set_by_array(upb_fieldtype_t type, ...@@ -200,7 +200,7 @@ bool native_slot_set_by_array(upb_fieldtype_t type,
} }
#else #else
DEREF(memory, zval*) = value; DEREF(memory, zval*) = value;
++GC_REFCOUNT(Z_OBJ_P(value)); GC_ADDREF(Z_OBJ_P(value));
#endif #endif
break; break;
} }
...@@ -251,7 +251,7 @@ bool native_slot_set_by_map(upb_fieldtype_t type, const zend_class_entry* klass, ...@@ -251,7 +251,7 @@ bool native_slot_set_by_map(upb_fieldtype_t type, const zend_class_entry* klass,
} }
#else #else
DEREF(memory, zend_object*) = Z_OBJ_P(value); DEREF(memory, zend_object*) = Z_OBJ_P(value);
++GC_REFCOUNT(Z_OBJ_P(value)); GC_ADDREF(Z_OBJ_P(value));
#endif #endif
break; break;
} }
...@@ -428,7 +428,7 @@ void native_slot_get_by_map_value(upb_fieldtype_t type, const void* memory, ...@@ -428,7 +428,7 @@ void native_slot_get_by_map_value(upb_fieldtype_t type, const void* memory,
ZVAL_ZVAL(CACHED_PTR_TO_ZVAL_PTR(cache), value, 1, 0); ZVAL_ZVAL(CACHED_PTR_TO_ZVAL_PTR(cache), value, 1, 0);
} }
#else #else
++GC_REFCOUNT(*(zend_object**)memory); GC_ADDREF(*(zend_object**)memory);
ZVAL_OBJ(cache, *(zend_object**)memory); ZVAL_OBJ(cache, *(zend_object**)memory);
#endif #endif
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment