diff options
| -rw-r--r-- | php-pecl-rdkafka4.spec | 13 | ||||
| -rw-r--r-- | rdkafka-php8.patch | 5075 | 
2 files changed, 3 insertions, 5085 deletions
diff --git a/php-pecl-rdkafka4.spec b/php-pecl-rdkafka4.spec index d5fd8dc..1c05f3f 100644 --- a/php-pecl-rdkafka4.spec +++ b/php-pecl-rdkafka4.spec @@ -1,6 +1,6 @@  # remirepo/fedora spec file for php-pecl-rdkafka4  # -# Copyright (c) 2015-2020 Remi Collet +# Copyright (c) 2015-2021 Remi Collet  # License: CC-BY-SA  # http://creativecommons.org/licenses/by-sa/4.0/  # @@ -26,14 +26,11 @@ License:        MIT  URL:            https://pecl.php.net/package/%{pecl_name}  Source0:        https://pecl.php.net/get/%{pecl_name}-%{version}.tgz -# git checkout master; git diff 4.1.2 -- *h *.c tests/ >/tmp/pp -# + cleanup (version, produce_consume_transactional.phpt) -Patch0:         %{pecl_name}-php8.patch - -BuildRequires:  %{?dtsprefix}gcc  BuildRequires:  make +BuildRequires:  %{?dtsprefix}gcc  BuildRequires:  librdkafka1php-devel  BuildRequires:  %{?scl_prefix}php-devel >= 5.6 +BuildRequires:  %{?scl_prefix}php-devel <  8  BuildRequires:  %{?scl_prefix}php-pear  Requires:       %{?scl_prefix}php(zend-abi) = %{php_zend_api} @@ -89,10 +86,6 @@ sed -e 's/role="test"/role="src"/' \      -i package.xml  cd NTS -%if "%{php_version}" > "8.0" -%patch0 -p1 -b .up -%endif -  # Sanity check, really often broken  extver=$(sed -n '/#define PHP_RDKAFKA_VERSION/{s/.* "//;s/".*$//;p}' php_rdkafka.h)  if test "x${extver}" != "x%{version}"; then diff --git a/rdkafka-php8.patch b/rdkafka-php8.patch deleted file mode 100644 index a574191..0000000 --- a/rdkafka-php8.patch +++ /dev/null @@ -1,5075 +0,0 @@ -diff --git a/conf.c b/conf.c -index 2e4fe99..1ec2e59 100644 ---- a/conf.c -+++ b/conf.c -@@ -31,14 +31,13 @@ - #include "conf.h" - #include "topic_partition.h" - #include "message.h" --#include "zeval.h" -  - zend_class_entry * ce_kafka_conf; - zend_class_entry * ce_kafka_topic_conf; -  - static zend_object_handlers handlers; -  --static void kafka_conf_callback_dtor(kafka_conf_callback *cb TSRMLS_DC) /* {{{ */ -+static void kafka_conf_callback_dtor(kafka_conf_callback *cb) /* {{{ */ - { -     if (cb) { -         zval_ptr_dtor(&cb->fci.function_name); -@@ -46,58 +45,54 @@ static void kafka_conf_callback_dtor(kafka_conf_callback *cb TSRMLS_DC) /* {{{ * -     } - } /* }}} */ -  --void kafka_conf_callbacks_dtor(kafka_conf_callbacks *cbs TSRMLS_DC) /* {{{ */ -+void kafka_conf_callbacks_dtor(kafka_conf_callbacks *cbs) /* {{{ */ - { --    kafka_conf_callback_dtor(cbs->error TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->error); -     cbs->error = NULL; --    kafka_conf_callback_dtor(cbs->rebalance TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->rebalance); -     cbs->rebalance = NULL; --    kafka_conf_callback_dtor(cbs->dr_msg TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->dr_msg); -     cbs->dr_msg = NULL; --    kafka_conf_callback_dtor(cbs->stats TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->stats); -     cbs->stats = NULL; --    kafka_conf_callback_dtor(cbs->consume TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->consume); -     cbs->consume = NULL; --    kafka_conf_callback_dtor(cbs->offset_commit TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->offset_commit); -     cbs->offset_commit = NULL; --    kafka_conf_callback_dtor(cbs->log TSRMLS_CC); -+    kafka_conf_callback_dtor(cbs->log); -     cbs->log = NULL; - } /* }}} */ -  --static void kafka_conf_callback_copy(kafka_conf_callback **to, kafka_conf_callback *from TSRMLS_DC) /* {{{ */ -+static void kafka_conf_callback_copy(kafka_conf_callback **to, kafka_conf_callback *from) /* {{{ */ - { -     if (from) { -         *to = emalloc(sizeof(**to)); -         **to = *from; --#if PHP_MAJOR_VERSION >= 7 -         zval_copy_ctor(&(*to)->fci.function_name); --#else --        Z_ADDREF_P((*to)->fci.function_name); --#endif -     } - } /* }}} */ -  --void kafka_conf_callbacks_copy(kafka_conf_callbacks *to, kafka_conf_callbacks *from TSRMLS_DC) /* {{{ */ -+void kafka_conf_callbacks_copy(kafka_conf_callbacks *to, kafka_conf_callbacks *from) /* {{{ */ - { --    kafka_conf_callback_copy(&to->error, from->error TSRMLS_CC); --    kafka_conf_callback_copy(&to->rebalance, from->rebalance TSRMLS_CC); --    kafka_conf_callback_copy(&to->dr_msg, from->dr_msg TSRMLS_CC); --    kafka_conf_callback_copy(&to->stats, from->stats TSRMLS_CC); --    kafka_conf_callback_copy(&to->consume, from->consume TSRMLS_CC); --    kafka_conf_callback_copy(&to->offset_commit, from->offset_commit TSRMLS_CC); --    kafka_conf_callback_copy(&to->log, from->log TSRMLS_CC); -+    kafka_conf_callback_copy(&to->error, from->error); -+    kafka_conf_callback_copy(&to->rebalance, from->rebalance); -+    kafka_conf_callback_copy(&to->dr_msg, from->dr_msg); -+    kafka_conf_callback_copy(&to->stats, from->stats); -+    kafka_conf_callback_copy(&to->consume, from->consume); -+    kafka_conf_callback_copy(&to->offset_commit, from->offset_commit); -+    kafka_conf_callback_copy(&to->log, from->log); - } /* }}} */ -  --static void kafka_conf_free(zend_object *object TSRMLS_DC) /* {{{ */ -+static void kafka_conf_free(zend_object *object) /* {{{ */ - { --    kafka_conf_object *intern = get_custom_object(kafka_conf_object, object); -+    kafka_conf_object *intern = php_kafka_from_obj(kafka_conf_object, object); -  -     switch (intern->type) { -         case KAFKA_CONF: -             if (intern->u.conf) { -                 rd_kafka_conf_destroy(intern->u.conf); -             } --            kafka_conf_callbacks_dtor(&intern->cbs TSRMLS_CC); -+            kafka_conf_callbacks_dtor(&intern->cbs); -             break; -         case KAFKA_TOPIC_CONF: -             if (intern->u.topic_conf) { -@@ -106,34 +101,32 @@ static void kafka_conf_free(zend_object *object TSRMLS_DC) /* {{{ */ -             break; -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value kafka_conf_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *kafka_conf_new(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     kafka_conf_object *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, kafka_conf_free, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --kafka_conf_object * get_kafka_conf_object(zval *zconf TSRMLS_DC) -+kafka_conf_object * get_kafka_conf_object(zval *zconf) - { --    kafka_conf_object *oconf = get_custom_object_zval(kafka_conf_object, zconf); -+    kafka_conf_object *oconf = Z_RDKAFKA_P(kafka_conf_object, zconf); -  -     if (!oconf->type) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Conf::__construct() has not been called" TSRMLS_CC); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Conf::__construct() has not been called"); -         return NULL; -     } -  -@@ -143,8 +136,7 @@ kafka_conf_object * get_kafka_conf_object(zval *zconf TSRMLS_DC) - static void kafka_conf_error_cb(rd_kafka_t *rk, int err, const char *reason, void *opaque) - { -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) opaque; --    zeval args[3]; --    TSRMLS_FETCH(); -+    zval args[3]; -  -     if (!opaque) { -         return; -@@ -154,15 +146,15 @@ static void kafka_conf_error_cb(rd_kafka_t *rk, int err, const char *reason, voi -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); --    MAKE_STD_ZEVAL(args[2]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -+    ZVAL_NULL(&args[2]); -  --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[0]), &cbs->zrk, 1, 0); --    ZVAL_LONG(P_ZEVAL(args[1]), err); --    RDKAFKA_ZVAL_STRING(P_ZEVAL(args[2]), reason); -+    ZVAL_ZVAL(&args[0], &cbs->zrk, 1, 0); -+    ZVAL_LONG(&args[1], err); -+    ZVAL_STRING(&args[2], reason); -  --    rdkafka_call_function(&cbs->error->fci, &cbs->error->fcc, NULL, 3, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->error->fci, &cbs->error->fcc, NULL, 3, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -172,8 +164,7 @@ static void kafka_conf_error_cb(rd_kafka_t *rk, int err, const char *reason, voi - static void kafka_conf_dr_msg_cb(rd_kafka_t *rk, const rd_kafka_message_t *msg, void *opaque) - { -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) opaque; --    zeval args[2]; --    TSRMLS_FETCH(); -+    zval args[2]; -  -     if (!opaque) { -         return; -@@ -183,13 +174,13 @@ static void kafka_conf_dr_msg_cb(rd_kafka_t *rk, const rd_kafka_message_t *msg, -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -  --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[0]), &cbs->zrk, 1, 0); --    kafka_message_new(P_ZEVAL(args[1]), msg TSRMLS_CC); -+    ZVAL_ZVAL(&args[0], &cbs->zrk, 1, 0); -+    kafka_message_new(&args[1], msg); -  --    rdkafka_call_function(&cbs->dr_msg->fci, &cbs->dr_msg->fcc, NULL, 2, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->dr_msg->fci, &cbs->dr_msg->fcc, NULL, 2, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -198,8 +189,7 @@ static void kafka_conf_dr_msg_cb(rd_kafka_t *rk, const rd_kafka_message_t *msg, - static int kafka_conf_stats_cb(rd_kafka_t *rk, char *json, size_t json_len, void *opaque) - { -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) opaque; --    zeval args[3]; --    TSRMLS_FETCH(); -+    zval args[3]; -  -     if (!opaque) { -         return 0; -@@ -209,15 +199,15 @@ static int kafka_conf_stats_cb(rd_kafka_t *rk, char *json, size_t json_len, void -         return 0; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); --    MAKE_STD_ZEVAL(args[2]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -+    ZVAL_NULL(&args[2]); -  --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[0]), &cbs->zrk, 1, 0); --    RDKAFKA_ZVAL_STRING(P_ZEVAL(args[1]), json); --    ZVAL_LONG(P_ZEVAL(args[2]), json_len); -+    ZVAL_ZVAL(&args[0], &cbs->zrk, 1, 0); -+    ZVAL_STRING(&args[1], json); -+    ZVAL_LONG(&args[2], json_len); -  --    rdkafka_call_function(&cbs->stats->fci, &cbs->stats->fcc, NULL, 3, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->stats->fci, &cbs->stats->fcc, NULL, 3, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -229,8 +219,7 @@ static int kafka_conf_stats_cb(rd_kafka_t *rk, char *json, size_t json_len, void - static void kafka_conf_rebalance_cb(rd_kafka_t *rk, rd_kafka_resp_err_t err, rd_kafka_topic_partition_list_t *partitions, void *opaque) - { -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) opaque; --    zeval args[3]; --    TSRMLS_FETCH(); -+    zval args[3]; -  -     if (!opaque) { -         return; -@@ -240,22 +229,22 @@ static void kafka_conf_rebalance_cb(rd_kafka_t *rk, rd_kafka_resp_err_t err, rd_ -         err = rd_kafka_assign(rk, NULL); -  -         if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --            zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+            zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -             return; -         } -  -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); --    MAKE_STD_ZEVAL(args[2]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -+    ZVAL_NULL(&args[2]); -  --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[0]), &cbs->zrk, 1, 0); --    ZVAL_LONG(P_ZEVAL(args[1]), err); --    kafka_topic_partition_list_to_array(P_ZEVAL(args[2]), partitions TSRMLS_CC); -+    ZVAL_ZVAL(&args[0], &cbs->zrk, 1, 0); -+    ZVAL_LONG(&args[1], err); -+    kafka_topic_partition_list_to_array(&args[2], partitions); -  --    rdkafka_call_function(&cbs->rebalance->fci, &cbs->rebalance->fcc, NULL, 3, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->rebalance->fci, &cbs->rebalance->fcc, NULL, 3, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -265,8 +254,7 @@ static void kafka_conf_rebalance_cb(rd_kafka_t *rk, rd_kafka_resp_err_t err, rd_ - static void kafka_conf_consume_cb(rd_kafka_message_t *msg, void *opaque) - { -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) opaque; --    zeval args[2]; --    TSRMLS_FETCH(); -+    zval args[2]; -  -     if (!opaque) { -         return; -@@ -276,14 +264,14 @@ static void kafka_conf_consume_cb(rd_kafka_message_t *msg, void *opaque) -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -  --    kafka_message_new(P_ZEVAL(args[0]), msg TSRMLS_CC); --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[1]), &cbs->zrk, 1, 0); -+    kafka_message_new(&args[0], msg); -+    ZVAL_ZVAL(&args[1], &cbs->zrk, 1, 0); -  -  --    rdkafka_call_function(&cbs->consume->fci, &cbs->consume->fcc, NULL, 2, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->consume->fci, &cbs->consume->fcc, NULL, 2, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -292,8 +280,7 @@ static void kafka_conf_consume_cb(rd_kafka_message_t *msg, void *opaque) - static void kafka_conf_offset_commit_cb(rd_kafka_t *rk, rd_kafka_resp_err_t err, rd_kafka_topic_partition_list_t *partitions, void *opaque) - { -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) opaque; --    zeval args[3]; --    TSRMLS_FETCH(); -+    zval args[3]; -  -     if (!opaque) { -         return; -@@ -303,15 +290,15 @@ static void kafka_conf_offset_commit_cb(rd_kafka_t *rk, rd_kafka_resp_err_t err, -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); --    MAKE_STD_ZEVAL(args[2]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -+    ZVAL_NULL(&args[2]); -  --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[0]), &cbs->zrk, 1, 0); --    ZVAL_LONG(P_ZEVAL(args[1]), err); --    kafka_topic_partition_list_to_array(P_ZEVAL(args[2]), partitions TSRMLS_CC); -+    ZVAL_ZVAL(&args[0], &cbs->zrk, 1, 0); -+    ZVAL_LONG(&args[1], err); -+    kafka_topic_partition_list_to_array(&args[2], partitions); -  --    rdkafka_call_function(&cbs->offset_commit->fci, &cbs->offset_commit->fcc, NULL, 3, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->offset_commit->fci, &cbs->offset_commit->fcc, NULL, 3, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -320,8 +307,7 @@ static void kafka_conf_offset_commit_cb(rd_kafka_t *rk, rd_kafka_resp_err_t err, -  - static void kafka_conf_log_cb(const rd_kafka_t *rk, int level, const char *facility, const char *message) - { --    zeval args[4]; --    TSRMLS_FETCH(); -+    zval args[4]; -  -     kafka_conf_callbacks *cbs = (kafka_conf_callbacks*) rd_kafka_opaque(rk); -  -@@ -329,17 +315,17 @@ static void kafka_conf_log_cb(const rd_kafka_t *rk, int level, const char *facil -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); --    MAKE_STD_ZEVAL(args[1]); --    MAKE_STD_ZEVAL(args[2]); --    MAKE_STD_ZEVAL(args[3]); -+    ZVAL_NULL(&args[0]); -+    ZVAL_NULL(&args[1]); -+    ZVAL_NULL(&args[2]); -+    ZVAL_NULL(&args[3]); -  --    KAFKA_ZVAL_ZVAL(P_ZEVAL(args[0]), &cbs->zrk, 1, 0); --    ZVAL_LONG(P_ZEVAL(args[1]), level); --    RDKAFKA_ZVAL_STRING(P_ZEVAL(args[2]), facility); --    RDKAFKA_ZVAL_STRING(P_ZEVAL(args[3]), message); -+    ZVAL_ZVAL(&args[0], &cbs->zrk, 1, 0); -+    ZVAL_LONG(&args[1], level); -+    ZVAL_STRING(&args[2], facility); -+    ZVAL_STRING(&args[3], message); -  --    rdkafka_call_function(&cbs->log->fci, &cbs->log->fcc, NULL, 4, args TSRMLS_CC); -+    rdkafka_call_function(&cbs->log->fci, &cbs->log->fcc, NULL, 4, args); -  -     zval_ptr_dtor(&args[0]); -     zval_ptr_dtor(&args[1]); -@@ -357,18 +343,18 @@ PHP_METHOD(RdKafka__Conf, __construct) -     kafka_conf_object *intern; -     zend_error_handling error_handling; -  --    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling TSRMLS_CC); -+    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -+        zend_restore_error_handling(&error_handling); -         return; -     } -  --    intern = get_custom_object_zval(kafka_conf_object, getThis()); -+    intern = Z_RDKAFKA_P(kafka_conf_object, getThis()); -     intern->type = KAFKA_CONF; -     intern->u.conf = rd_kafka_conf_new(); -  --    zend_restore_error_handling(&error_handling TSRMLS_CC); -+    zend_restore_error_handling(&error_handling); - } - /* }}} */ -  -@@ -385,11 +371,11 @@ PHP_METHOD(RdKafka__Conf, dump) -     kafka_conf_object *intern; -     size_t i; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -@@ -410,7 +396,7 @@ PHP_METHOD(RdKafka__Conf, dump) -     for (i = 0; i < cntp; i+=2) { -         const char *key = dump[i]; -         const char *value = dump[i+1]; --        rdkafka_add_assoc_string(return_value, (char*)key, (char*)value); -+        add_assoc_string(return_value, (char*)key, (char*)value); -     } -  -     rd_kafka_conf_dump_free(dump, cntp); -@@ -428,18 +414,18 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__Conf, set) - { -     char *name; --    arglen_t name_len; -+    size_t name_len; -     char *value; --    arglen_t value_len; -+    size_t value_len; -     kafka_conf_object *intern; -     rd_kafka_conf_res_t ret = 0; -     char errstr[512]; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &value, &value_len) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &name, &name_len, &value, &value_len) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -@@ -457,10 +443,10 @@ PHP_METHOD(RdKafka__Conf, set) -  -     switch (ret) { -         case RD_KAFKA_CONF_UNKNOWN: --            zend_throw_exception(ce_kafka_exception, errstr, RD_KAFKA_CONF_UNKNOWN TSRMLS_CC); -+            zend_throw_exception(ce_kafka_exception, errstr, RD_KAFKA_CONF_UNKNOWN); -             return; -         case RD_KAFKA_CONF_INVALID: --            zend_throw_exception(ce_kafka_exception, errstr, RD_KAFKA_CONF_INVALID TSRMLS_CC); -+            zend_throw_exception(ce_kafka_exception, errstr, RD_KAFKA_CONF_INVALID); -             return; -         case RD_KAFKA_CONF_OK: -             break; -@@ -481,16 +467,16 @@ PHP_METHOD(RdKafka__Conf, setDefaultTopicConf) -     kafka_conf_object *topic_conf_intern; -     rd_kafka_topic_conf_t *topic_conf; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &ztopic_conf, ce_kafka_topic_conf) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &ztopic_conf, ce_kafka_topic_conf) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    topic_conf_intern = get_kafka_conf_object(ztopic_conf TSRMLS_CC); -+    topic_conf_intern = get_kafka_conf_object(ztopic_conf); -     if (!topic_conf_intern) { -         return; -     } -@@ -514,16 +500,16 @@ PHP_METHOD(RdKafka__Conf, setErrorCb) -     zend_fcall_info_cache fcc; -     kafka_conf_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (intern->cbs.error) { -         zval_ptr_dtor(&intern->cbs.error->fci.function_name); -@@ -551,16 +537,16 @@ PHP_METHOD(RdKafka__Conf, setDrMsgCb) -     zend_fcall_info_cache fcc; -     kafka_conf_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (intern->cbs.dr_msg) { -         zval_ptr_dtor(&intern->cbs.dr_msg->fci.function_name); -@@ -588,16 +574,16 @@ PHP_METHOD(RdKafka__Conf, setStatsCb) -     zend_fcall_info_cache fcc; -     kafka_conf_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (intern->cbs.stats) { -         zval_ptr_dtor(&intern->cbs.stats->fci.function_name); -@@ -625,16 +611,16 @@ PHP_METHOD(RdKafka__Conf, setRebalanceCb) -     zend_fcall_info_cache fcc; -     kafka_conf_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (intern->cbs.rebalance) { -         zval_ptr_dtor(&intern->cbs.rebalance->fci.function_name); -@@ -662,16 +648,16 @@ PHP_METHOD(RdKafka__Conf, setConsumeCb) -     zend_fcall_info_cache fcc; -     kafka_conf_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (intern->cbs.consume) { -         zval_ptr_dtor(&intern->cbs.consume->fci.function_name); -@@ -699,16 +685,16 @@ PHP_METHOD(RdKafka__Conf, setOffsetCommitCb) -     zend_fcall_info_cache fcc; -     kafka_conf_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (intern->cbs.offset_commit) { -         zval_ptr_dtor(&intern->cbs.offset_commit->fci.function_name); -@@ -737,16 +723,16 @@ PHP_METHOD(RdKafka__Conf, setLogCb) -     kafka_conf_object *conf; -     char errstr[512]; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f", &fci, &fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { -         return; -     } -  --    conf = get_kafka_conf_object(getThis() TSRMLS_CC); -+    conf = get_kafka_conf_object(getThis()); -     if (!conf) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(fci.function_name)); -+    Z_ADDREF_P(&fci.function_name); -  -     if (conf->cbs.log) { -         zval_ptr_dtor(&conf->cbs.log->fci.function_name); -@@ -768,18 +754,18 @@ PHP_METHOD(RdKafka__TopicConf, __construct) -     kafka_conf_object *intern; -     zend_error_handling error_handling; -  --    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling TSRMLS_CC); -+    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -+        zend_restore_error_handling(&error_handling); -         return; -     } -  --    intern = get_custom_object_zval(kafka_conf_object, getThis()); -+    intern = Z_RDKAFKA_P(kafka_conf_object, getThis()); -     intern->type = KAFKA_TOPIC_CONF; -     intern->u.topic_conf = rd_kafka_topic_conf_new(); -  --    zend_restore_error_handling(&error_handling TSRMLS_CC); -+    zend_restore_error_handling(&error_handling); - } - /* }}} */ -  -@@ -795,11 +781,11 @@ PHP_METHOD(RdKafka__TopicConf, setPartitioner) -     zend_long id; -     int32_t (*partitioner) (const rd_kafka_topic_t * rkt, const void * keydata, size_t keylen, int32_t partition_cnt, void * rkt_opaque, void * msg_opaque); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &id) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &id) == FAILURE) { -         return; -     } -  --    intern = get_kafka_conf_object(getThis() TSRMLS_CC); -+    intern = get_kafka_conf_object(getThis()); -     if (!intern) { -         return; -     } -@@ -823,7 +809,7 @@ PHP_METHOD(RdKafka__TopicConf, setPartitioner) -             break; - #endif -         default: --            zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Invalid partitioner given" TSRMLS_CC); -+            zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Invalid partitioner given"); -             return; -     } -  -@@ -854,19 +840,19 @@ static const zend_function_entry kafka_conf_fe[] = { -     PHP_FE_END - }; -  --void kafka_conf_minit(TSRMLS_D) -+void kafka_conf_minit(INIT_FUNC_ARGS) - { -     zend_class_entry tmpce; -  -     handlers = kafka_default_object_handlers; --    set_object_handler_free_obj(&handlers, kafka_conf_free); --    set_object_handler_offset(&handlers, XtOffsetOf(kafka_conf_object, std)); -+    handlers.free_obj = kafka_conf_free; -+    handlers.offset = XtOffsetOf(kafka_conf_object, std); -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "Conf", kafka_conf_fe); --    ce_kafka_conf = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce_kafka_conf = zend_register_internal_class(&tmpce); -     ce_kafka_conf->create_object = kafka_conf_new; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "TopicConf", kafka_topic_conf_fe); --    ce_kafka_topic_conf = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce_kafka_topic_conf = zend_register_internal_class(&tmpce); -     ce_kafka_topic_conf->create_object = kafka_conf_new; - } -diff --git a/conf.h b/conf.h -index 3ec6bcf..9778eb5 100644 ---- a/conf.h -+++ b/conf.h -@@ -49,25 +49,20 @@ typedef struct _kafka_conf_callbacks { - } kafka_conf_callbacks; -  - typedef struct _kafka_conf_object { --#if PHP_MAJOR_VERSION < 7 --    zend_object                 std; --#endif -     kafka_conf_type type; -     union { -         rd_kafka_conf_t         *conf; -         rd_kafka_topic_conf_t   *topic_conf; -     } u; -     kafka_conf_callbacks cbs; --#if PHP_MAJOR_VERSION >= 7 -     zend_object                 std; --#endif - } kafka_conf_object; -  --kafka_conf_object * get_kafka_conf_object(zval *zconf TSRMLS_DC); --void kafka_conf_minit(TSRMLS_D); -+kafka_conf_object * get_kafka_conf_object(zval *zconf); -+void kafka_conf_minit(INIT_FUNC_ARGS); -  --void kafka_conf_callbacks_dtor(kafka_conf_callbacks *cbs TSRMLS_DC); --void kafka_conf_callbacks_copy(kafka_conf_callbacks *to, kafka_conf_callbacks *from TSRMLS_DC); -+void kafka_conf_callbacks_dtor(kafka_conf_callbacks *cbs); -+void kafka_conf_callbacks_copy(kafka_conf_callbacks *to, kafka_conf_callbacks *from); -  - extern zend_class_entry * ce_kafka_conf; - extern zend_class_entry * ce_kafka_topic_conf; -diff --git a/fun.c b/fun.c -index b5231ce..d73e202 100644 ---- a/fun.c -+++ b/fun.c -@@ -26,7 +26,6 @@ - #include "librdkafka/rdkafka.h" - #include "Zend/zend_exceptions.h" - #include "ext/spl/spl_exceptions.h" --#include "zeval.h" -  - /* {{{ arginfo */ - ZEND_BEGIN_ARG_INFO_EX(arginfo_kafka_get_err_descs, 0, 0, 0) -@@ -71,7 +70,7 @@ PHP_FUNCTION(rd_kafka_get_err_descs) -  -     for (i = 0; i < cnt; i++) { -         const struct rd_kafka_err_desc *desc = &errdescs[i]; --        zeval el; -+        zval el; -  -         if (desc->code == 0) { -             if (seen_zero) { -@@ -80,20 +79,20 @@ PHP_FUNCTION(rd_kafka_get_err_descs) -             seen_zero = 1; -         } -  --        MAKE_STD_ZEVAL(el); --        array_init(P_ZEVAL(el)); --        add_assoc_long(P_ZEVAL(el), "code", desc->code); -+        ZVAL_NULL(&el); -+        array_init(&el); -+        add_assoc_long(&el, "code", desc->code); -         if (desc->name) { --            rdkafka_add_assoc_string(P_ZEVAL(el), "name", (char*) desc->name); -+            add_assoc_string(&el, "name", (char*) desc->name); -         } else { --            add_assoc_null(P_ZEVAL(el), "name"); -+            add_assoc_null(&el, "name"); -         } -         if (desc->desc) { --            rdkafka_add_assoc_string(P_ZEVAL(el), "desc", (char*) desc->desc); -+            add_assoc_string(&el, "desc", (char*) desc->desc); -         }else { --            add_assoc_null(P_ZEVAL(el), "desc"); -+            add_assoc_null(&el, "desc"); -         } --        add_next_index_zval(return_value, P_ZEVAL(el)); -+        add_next_index_zval(return_value, &el); -     } - } - /* }}} */ -@@ -106,14 +105,14 @@ PHP_FUNCTION(rd_kafka_err2str) -     zend_long err; -     const char *errstr; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &err) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &err) == FAILURE) { -         return; -     } -  -     errstr = rd_kafka_err2str(err); -  -     if (errstr) { --        RDKAFKA_RETURN_STRING(errstr); -+        RETURN_STRING(errstr); -     } - } - /* }}} */ -@@ -122,7 +121,7 @@ PHP_FUNCTION(rd_kafka_err2str) -  * Returns `errno` */ - PHP_FUNCTION(rd_kafka_errno) - { --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  -@@ -136,7 +135,7 @@ PHP_FUNCTION(rd_kafka_errno2err) - { -     zend_long errnox; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &errnox) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &errnox) == FAILURE) { -         return; -     } -  -@@ -164,7 +163,7 @@ PHP_FUNCTION(rd_kafka_offset_tail) - { -     zend_long cnt; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &cnt) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &cnt) == FAILURE) { -         return; -     } -  -diff --git a/kafka_consumer.c b/kafka_consumer.c -index 5ee209a..f1b596a 100644 ---- a/kafka_consumer.c -+++ b/kafka_consumer.c -@@ -33,24 +33,19 @@ - #include "metadata.h" -  - typedef struct _object_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object             std; --#endif -     rd_kafka_t              *rk; -     kafka_conf_callbacks    cbs; --#if PHP_MAJOR_VERSION >= 7 -     zend_object             std; --#endif - } object_intern; -  - static zend_class_entry * ce; - static zend_object_handlers handlers; -  --static void kafka_consumer_free(zend_object *object TSRMLS_DC) /* {{{ */ -+static void kafka_consumer_free(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -     rd_kafka_resp_err_t err; --    kafka_conf_callbacks_dtor(&intern->cbs TSRMLS_CC); -+    kafka_conf_callbacks_dtor(&intern->cbs); -  -     if (intern->rk) { -         err = rd_kafka_consumer_close(intern->rk); -@@ -63,36 +58,34 @@ static void kafka_consumer_free(zend_object *object TSRMLS_DC) /* {{{ */ -         intern->rk = NULL; -     } -  --    kafka_conf_callbacks_dtor(&intern->cbs TSRMLS_CC); -- --    zend_object_std_dtor(&intern->std TSRMLS_CC); -+    kafka_conf_callbacks_dtor(&intern->cbs); -  --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value kafka_consumer_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *kafka_consumer_new(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, kafka_consumer_free, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *zconsumer TSRMLS_DC) /* {{{ */ -+static object_intern * get_object(zval *zconsumer) /* {{{ */ - { --    object_intern *oconsumer = get_custom_object_zval(object_intern, zconsumer); -+    object_intern *oconsumer = Z_RDKAFKA_P(object_intern, zconsumer); -  -     if (!oconsumer->rk) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\KafkaConsumer::__construct() has not been called"); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\KafkaConsumer::__construct() has not been called"); -         return NULL; -     } -  -@@ -134,19 +127,19 @@ PHP_METHOD(RdKafka__KafkaConsumer, __construct) -     kafka_conf_object *conf_intern; -     rd_kafka_conf_t *conf = NULL; -  --    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling TSRMLS_CC); -+    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &zconf, ce_kafka_conf) == FAILURE) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zconf, ce_kafka_conf) == FAILURE) { -+        zend_restore_error_handling(&error_handling); -         return; -     } -  --    intern = get_custom_object_zval(object_intern, getThis()); -+    intern = Z_RDKAFKA_P(object_intern, getThis()); -  --    conf_intern = get_kafka_conf_object(zconf TSRMLS_CC); -+    conf_intern = get_kafka_conf_object(zconf); -     if (conf_intern) { -         conf = rd_kafka_conf_dup(conf_intern->u.conf); --        kafka_conf_callbacks_copy(&intern->cbs, &conf_intern->cbs TSRMLS_CC); -+        kafka_conf_callbacks_copy(&intern->cbs, &conf_intern->cbs); -         intern->cbs.zrk = *getThis(); -         rd_kafka_conf_set_opaque(conf, &intern->cbs); -     } -@@ -155,15 +148,15 @@ PHP_METHOD(RdKafka__KafkaConsumer, __construct) -         if (conf) { -             rd_kafka_conf_destroy(conf); -         } --        zend_throw_exception(ce_kafka_exception, "\"group.id\" must be configured", 0 TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, "\"group.id\" must be configured", 0); -         return; -     } -  -     rk = rd_kafka_new(RD_KAFKA_CONSUMER, conf, errstr, sizeof(errstr)); -  -     if (rk == NULL) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); --        zend_throw_exception(ce_kafka_exception, errstr, 0 TSRMLS_CC); -+        zend_restore_error_handling(&error_handling); -+        zend_throw_exception(ce_kafka_exception, errstr, 0); -         return; -     } -  -@@ -175,7 +168,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, __construct) -  -     rd_kafka_poll_set_consumer(rk); -  --    zend_restore_error_handling(&error_handling TSRMLS_CC); -+    zend_restore_error_handling(&error_handling); - } - /* }}} */ -  -@@ -193,17 +186,17 @@ PHP_METHOD(RdKafka__KafkaConsumer, assign) -     rd_kafka_resp_err_t err; -     object_intern *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|h!", &htopars) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "|h!", &htopars) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (htopars) { --        topics = array_arg_to_kafka_topic_partition_list(1, htopars TSRMLS_CC); -+        topics = array_arg_to_kafka_topic_partition_list(1, htopars); -         if (!topics) { -             return; -         } -@@ -218,7 +211,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, assign) -     } -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -236,11 +229,11 @@ PHP_METHOD(RdKafka__KafkaConsumer, getAssignment) -     rd_kafka_topic_partition_list_t *topics; -     object_intern *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -248,11 +241,11 @@ PHP_METHOD(RdKafka__KafkaConsumer, getAssignment) -     err = rd_kafka_assignment(intern->rk, &topics); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  --    kafka_topic_partition_list_to_array(return_value, topics TSRMLS_CC); -+    kafka_topic_partition_list_to_array(return_value, topics); -     rd_kafka_topic_partition_list_destroy(topics); - } - /* }}} */ -@@ -271,13 +264,13 @@ PHP_METHOD(RdKafka__KafkaConsumer, subscribe) -     object_intern *intern; -     rd_kafka_topic_partition_list_t *topics; -     rd_kafka_resp_err_t err; --    zeval *zv; -+    zval *zv; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "h", &htopics) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &htopics) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -285,10 +278,10 @@ PHP_METHOD(RdKafka__KafkaConsumer, subscribe) -     topics = rd_kafka_topic_partition_list_new(zend_hash_num_elements(htopics)); -  -     for (zend_hash_internal_pointer_reset_ex(htopics, &pos); --            (zv = rdkafka_hash_get_current_data_ex(htopics, &pos)) != NULL; -+            (zv = zend_hash_get_current_data_ex(htopics, &pos)) != NULL; -             zend_hash_move_forward_ex(htopics, &pos)) { -         convert_to_string_ex(zv); --        rd_kafka_topic_partition_list_add(topics, Z_STRVAL_P(ZEVAL(zv)), RD_KAFKA_PARTITION_UA); -+        rd_kafka_topic_partition_list_add(topics, Z_STRVAL_P(zv), RD_KAFKA_PARTITION_UA); -     } -  -     err = rd_kafka_subscribe(intern->rk, topics); -@@ -296,7 +289,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, subscribe) -     rd_kafka_topic_partition_list_destroy(topics); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -315,11 +308,11 @@ PHP_METHOD(RdKafka__KafkaConsumer, getSubscription) -     object_intern *intern; -     int i; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -327,14 +320,14 @@ PHP_METHOD(RdKafka__KafkaConsumer, getSubscription) -     err = rd_kafka_subscription(intern->rk, &topics); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -     array_init_size(return_value, topics->cnt); -  -     for (i = 0; i < topics->cnt; i++) { --        add_next_index_string(return_value, topics->elems[i].topic ZEVAL_DUP_CC); -+        add_next_index_string(return_value, topics->elems[i].topic); -     } -  -     rd_kafka_topic_partition_list_destroy(topics); -@@ -352,11 +345,11 @@ PHP_METHOD(RdKafka__KafkaConsumer, unsubscribe) -     object_intern *intern; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -364,7 +357,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, unsubscribe) -     err = rd_kafka_unsubscribe(intern->rk); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -383,11 +376,11 @@ PHP_METHOD(RdKafka__KafkaConsumer, consume) -     zend_long timeout_ms; -     rd_kafka_message_t *rkmessage, rkmessage_tmp = {0}; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -399,7 +392,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, consume) -         rkmessage = &rkmessage_tmp; -     } -  --    kafka_message_new(return_value, rkmessage TSRMLS_CC); -+    kafka_message_new(return_value, rkmessage); -  -     if (rkmessage != &rkmessage_tmp) { -         rd_kafka_message_destroy(rkmessage); -@@ -414,44 +407,44 @@ static void consumer_commit(int async, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ -     rd_kafka_topic_partition_list_t *offsets = NULL; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z!", &zarg) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "|z!", &zarg) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (zarg) { --        if (Z_TYPE_P(zarg) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zarg), ce_kafka_message TSRMLS_CC)) { -+        if (Z_TYPE_P(zarg) == IS_OBJECT && instanceof_function(Z_OBJCE_P(zarg), ce_kafka_message)) { -             zval *zerr; -             zval *ztopic; -             zval *zpartition; -             zval *zoffset; -             rd_kafka_topic_partition_t *rktpar; -  --            zerr = rdkafka_read_property(NULL, zarg, ZEND_STRL("err"), 0 TSRMLS_CC); -+            zerr = rdkafka_read_property(NULL, Z_RDKAFKA_PROP_OBJ(zarg), ZEND_STRL("err"), 0); -             if (zerr && Z_TYPE_P(zerr) != IS_NULL && (Z_TYPE_P(zerr) != IS_LONG || Z_LVAL_P(zerr) != RD_KAFKA_RESP_ERR_NO_ERROR)) { --                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message has an error", RD_KAFKA_RESP_ERR__INVALID_ARG TSRMLS_CC); -+                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message has an error", RD_KAFKA_RESP_ERR__INVALID_ARG); -                 return; -             } -  --            ztopic = rdkafka_read_property(NULL, zarg, ZEND_STRL("topic_name"), 0 TSRMLS_CC); -+            ztopic = rdkafka_read_property(NULL, Z_RDKAFKA_PROP_OBJ(zarg), ZEND_STRL("topic_name"), 0); -             if (!ztopic || Z_TYPE_P(ztopic) != IS_STRING) { --                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message's topic_name is not a string", RD_KAFKA_RESP_ERR__INVALID_ARG TSRMLS_CC); -+                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message's topic_name is not a string", RD_KAFKA_RESP_ERR__INVALID_ARG); -                 return; -             } -  --            zpartition = rdkafka_read_property(NULL, zarg, ZEND_STRL("partition"), 0 TSRMLS_CC); -+            zpartition = rdkafka_read_property(NULL, Z_RDKAFKA_PROP_OBJ(zarg), ZEND_STRL("partition"), 0); -             if (!zpartition || Z_TYPE_P(zpartition) != IS_LONG) { --                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message's partition is not an int", RD_KAFKA_RESP_ERR__INVALID_ARG TSRMLS_CC); -+                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message's partition is not an int", RD_KAFKA_RESP_ERR__INVALID_ARG); -                 return; -             } -  --            zoffset = rdkafka_read_property(NULL, zarg, ZEND_STRL("offset"), 0 TSRMLS_CC); -+            zoffset = rdkafka_read_property(NULL, Z_RDKAFKA_PROP_OBJ(zarg), ZEND_STRL("offset"), 0); -             if (!zoffset || Z_TYPE_P(zoffset) != IS_LONG) { --                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message's offset is not an int", RD_KAFKA_RESP_ERR__INVALID_ARG TSRMLS_CC); -+                zend_throw_exception(ce_kafka_exception, "Invalid argument: Specified Message's offset is not an int", RD_KAFKA_RESP_ERR__INVALID_ARG); -                 return; -             } -  -@@ -463,14 +456,14 @@ static void consumer_commit(int async, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ -  -         } else if (Z_TYPE_P(zarg) == IS_ARRAY) { -             HashTable *ary = Z_ARRVAL_P(zarg); --            offsets = array_arg_to_kafka_topic_partition_list(1, ary TSRMLS_CC); -+            offsets = array_arg_to_kafka_topic_partition_list(1, ary); -             if (!offsets) { -                 return; -             } -         } else if (Z_TYPE_P(zarg) != IS_NULL) { -             php_error(E_ERROR, -                     "RdKafka\\KafkaConsumer::%s() expects parameter %d to be %s, %s given", --                    get_active_function_name(TSRMLS_C), -+                    get_active_function_name(), -                     1, -                     "an instance of RdKafka\\Message or an array of RdKafka\\TopicPartition", -                     zend_zval_type_name(zarg)); -@@ -485,7 +478,7 @@ static void consumer_commit(int async, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ -     } -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -527,7 +520,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, close) - { -     object_intern *intern; -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -555,17 +548,17 @@ PHP_METHOD(RdKafka__KafkaConsumer, getMetadata) -     const rd_kafka_metadata_t *metadata; -     kafka_topic_object *only_orkt = NULL; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "bO!l", &all_topics, &only_zrkt, ce_kafka_topic, &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "bO!l", &all_topics, &only_zrkt, ce_kafka_topic, &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (only_zrkt) { --        only_orkt = get_kafka_topic_object(only_zrkt TSRMLS_CC); -+        only_orkt = get_kafka_topic_object(only_zrkt); -         if (!only_orkt) { -             return; -         } -@@ -574,11 +567,11 @@ PHP_METHOD(RdKafka__KafkaConsumer, getMetadata) -     err = rd_kafka_metadata(intern->rk, all_topics, only_orkt ? only_orkt->rkt : NULL, &metadata, timeout_ms); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  --    kafka_metadata_init(return_value, metadata TSRMLS_CC); -+    kafka_metadata_init(return_value, metadata); - } - /* }}} */ -  -@@ -593,7 +586,7 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__KafkaConsumer, newTopic) - { -     char *topic; --    arglen_t topic_len; -+    size_t topic_len; -     rd_kafka_topic_t *rkt; -     object_intern *intern; -     kafka_topic_object *topic_intern; -@@ -601,17 +594,17 @@ PHP_METHOD(RdKafka__KafkaConsumer, newTopic) -     rd_kafka_topic_conf_t *conf = NULL; -     kafka_conf_object *conf_intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|O!", &topic, &topic_len, &zconf, ce_kafka_topic_conf) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|O!", &topic, &topic_len, &zconf, ce_kafka_topic_conf) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (zconf) { --        conf_intern = get_kafka_conf_object(zconf TSRMLS_CC); -+        conf_intern = get_kafka_conf_object(zconf); -         if (conf_intern) { -             conf = rd_kafka_topic_conf_dup(conf_intern->u.topic_conf); -         } -@@ -627,7 +620,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, newTopic) -         return; -     } -  --    topic_intern = get_custom_object_zval(kafka_topic_object, return_value); -+    topic_intern = Z_RDKAFKA_P(kafka_topic_object, return_value); -     if (!topic_intern) { -         return; -     } -@@ -652,16 +645,16 @@ PHP_METHOD(RdKafka__KafkaConsumer, getCommittedOffsets) -     rd_kafka_resp_err_t err; -     rd_kafka_topic_partition_list_t *topics; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "hl", &htopars, &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "hl", &htopars, &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    topics = array_arg_to_kafka_topic_partition_list(1, htopars TSRMLS_CC); -+    topics = array_arg_to_kafka_topic_partition_list(1, htopars); -     if (!topics) { -         return; -     } -@@ -670,10 +663,10 @@ PHP_METHOD(RdKafka__KafkaConsumer, getCommittedOffsets) -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { -         rd_kafka_topic_partition_list_destroy(topics); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } --    kafka_topic_partition_list_to_array(return_value, topics TSRMLS_CC); -+    kafka_topic_partition_list_to_array(return_value, topics); -     rd_kafka_topic_partition_list_destroy(topics); - } - /* }}} */ -@@ -694,16 +687,16 @@ PHP_METHOD(RdKafka__KafkaConsumer, getOffsetPositions) -     rd_kafka_resp_err_t err; -     rd_kafka_topic_partition_list_t *topics; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "h", &htopars) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &htopars) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    topics = array_arg_to_kafka_topic_partition_list(1, htopars TSRMLS_CC); -+    topics = array_arg_to_kafka_topic_partition_list(1, htopars); -     if (!topics) { -         return; -     } -@@ -712,10 +705,10 @@ PHP_METHOD(RdKafka__KafkaConsumer, getOffsetPositions) -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { -         rd_kafka_topic_partition_list_destroy(topics); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } --    kafka_topic_partition_list_to_array(return_value, topics TSRMLS_CC); -+    kafka_topic_partition_list_to_array(return_value, topics); -     rd_kafka_topic_partition_list_destroy(topics); - } - /* }}} */ -@@ -734,16 +727,16 @@ PHP_METHOD(RdKafka__KafkaConsumer, offsetsForTimes) -     zend_long timeout_ms; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "hl", &htopars, &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "hl", &htopars, &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    topicPartitions = array_arg_to_kafka_topic_partition_list(1, htopars TSRMLS_CC); -+    topicPartitions = array_arg_to_kafka_topic_partition_list(1, htopars); -     if (!topicPartitions) { -         return; -     } -@@ -752,10 +745,10 @@ PHP_METHOD(RdKafka__KafkaConsumer, offsetsForTimes) -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { -         rd_kafka_topic_partition_list_destroy(topicPartitions); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } --    kafka_topic_partition_list_to_array(return_value, topicPartitions TSRMLS_CC); -+    kafka_topic_partition_list_to_array(return_value, topicPartitions); -     rd_kafka_topic_partition_list_destroy(topicPartitions); - } - /* }}} */ -@@ -775,20 +768,20 @@ PHP_METHOD(RdKafka__KafkaConsumer, queryWatermarkOffsets) - { -     object_intern *intern; -     char *topic; --    arglen_t topic_length; -+    size_t topic_length; -     long low, high; -     zend_long partition, timeout; -     zval *lowResult, *highResult; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slzzl", &topic, &topic_length, &partition, &lowResult, &highResult, &timeout) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "slzzl", &topic, &topic_length, &partition, &lowResult, &highResult, &timeout) == FAILURE) { -         return; -     } -  --    ZEVAL_DEREF(lowResult); --    ZEVAL_DEREF(highResult); -+    ZVAL_DEREF(lowResult); -+    ZVAL_DEREF(highResult); -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -796,7 +789,7 @@ PHP_METHOD(RdKafka__KafkaConsumer, queryWatermarkOffsets) -     err = rd_kafka_query_watermark_offsets(intern->rk, topic, partition, &low, &high, timeout); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -@@ -825,19 +818,19 @@ static const zend_function_entry fe[] = { /* {{{ */ -     PHP_FE_END - }; /* }}} */ -  --void kafka_kafka_consumer_minit(TSRMLS_D) /* {{{ */ -+void kafka_kafka_consumer_minit(INIT_FUNC_ARGS) /* {{{ */ - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "KafkaConsumer", fe); --    ce = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce = zend_register_internal_class(&tmpce); -     ce->create_object = kafka_consumer_new; -  -     handlers = kafka_default_object_handlers; --    set_object_handler_free_obj(&handlers, kafka_consumer_free); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = kafka_consumer_free; -+    handlers.offset = XtOffsetOf(object_intern, std); -  --    zend_declare_property_null(ce, ZEND_STRL("error_cb"), ZEND_ACC_PRIVATE TSRMLS_CC); --    zend_declare_property_null(ce, ZEND_STRL("rebalance_cb"), ZEND_ACC_PRIVATE TSRMLS_CC); --    zend_declare_property_null(ce, ZEND_STRL("dr_msg_cb"), ZEND_ACC_PRIVATE TSRMLS_CC); -+    zend_declare_property_null(ce, ZEND_STRL("error_cb"), ZEND_ACC_PRIVATE); -+    zend_declare_property_null(ce, ZEND_STRL("rebalance_cb"), ZEND_ACC_PRIVATE); -+    zend_declare_property_null(ce, ZEND_STRL("dr_msg_cb"), ZEND_ACC_PRIVATE); - } /* }}} */ -diff --git a/kafka_consumer.h b/kafka_consumer.h -index 6e86784..cc4be66 100644 ---- a/kafka_consumer.h -+++ b/kafka_consumer.h -@@ -16,4 +16,4 @@ -   +----------------------------------------------------------------------+ - */ -  --void kafka_kafka_consumer_minit(TSRMLS_D); -+void kafka_kafka_consumer_minit(INIT_FUNC_ARGS); -diff --git a/kafka_error_exception.c b/kafka_error_exception.c -index a19527a..19b881c 100644 ---- a/kafka_error_exception.c -+++ b/kafka_error_exception.c -@@ -27,20 +27,19 @@ - #include "Zend/zend_interfaces.h" - #include "Zend/zend_exceptions.h" - #include "kafka_error_exception.h" --#include "zeval.h" -  - zend_class_entry * ce_kafka_error; -  --void create_kafka_error(zval *return_value, const rd_kafka_error_t *error TSRMLS_DC) /* {{{ */ -+void create_kafka_error(zval *return_value, const rd_kafka_error_t *error) /* {{{ */ - { -     object_init_ex(return_value, ce_kafka_error); -  --    zend_update_property_string(ce_kafka_error, return_value, ZEND_STRL("message"), rd_kafka_error_name(error) TSRMLS_CC); --    zend_update_property_long(ce_kafka_error, return_value, ZEND_STRL("code"), rd_kafka_error_code(error) TSRMLS_CC); --    zend_update_property_string(ce_kafka_error, return_value, ZEND_STRL("error_string"), rd_kafka_error_string(error) TSRMLS_CC); --    zend_update_property_bool(ce_kafka_error, return_value, ZEND_STRL("isFatal"), rd_kafka_error_is_fatal(error) TSRMLS_CC); --    zend_update_property_bool(ce_kafka_error, return_value, ZEND_STRL("isRetriable"), rd_kafka_error_is_retriable(error) TSRMLS_CC); --    zend_update_property_bool(ce_kafka_error, return_value, ZEND_STRL("transactionRequiresAbort"), rd_kafka_error_txn_requires_abort(error) TSRMLS_CC); -+    zend_update_property_string(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("message"), rd_kafka_error_name(error)); -+    zend_update_property_long(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("code"), rd_kafka_error_code(error)); -+    zend_update_property_string(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("error_string"), rd_kafka_error_string(error)); -+    zend_update_property_bool(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("isFatal"), rd_kafka_error_is_fatal(error)); -+    zend_update_property_bool(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("isRetriable"), rd_kafka_error_is_retriable(error)); -+    zend_update_property_bool(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("transactionRequiresAbort"), rd_kafka_error_txn_requires_abort(error)); -  -     Z_ADDREF_P(return_value); - } -@@ -59,20 +58,20 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__KafkaErrorException, __construct) - { -     char *message, *error_string = ""; --    arglen_t message_length = 0, error_string_length = 0; -+    size_t message_length = 0, error_string_length = 0; -     zend_bool isFatal = 0, isRetriable = 0, transactionRequiresAbort = 0; -     zend_long code = 0; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|sbbb", &message, &message_length, &code, &error_string, &error_string_length, &isFatal, &isRetriable, &transactionRequiresAbort) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|sbbb", &message, &message_length, &code, &error_string, &error_string_length, &isFatal, &isRetriable, &transactionRequiresAbort) == FAILURE) { -         return; -     } -  --    zend_update_property_string(ce_kafka_error, getThis(), ZEND_STRL("message"), message TSRMLS_CC); --    zend_update_property_long(ce_kafka_error, getThis(), ZEND_STRL("code"), code TSRMLS_CC); --    zend_update_property_string(ce_kafka_error, getThis(), ZEND_STRL("error_string"), error_string TSRMLS_CC); --    zend_update_property_bool(ce_kafka_error, getThis(), ZEND_STRL("isFatal"), isFatal TSRMLS_CC); --    zend_update_property_bool(ce_kafka_error, getThis(), ZEND_STRL("isRetriable"), isRetriable TSRMLS_CC); --    zend_update_property_bool(ce_kafka_error, getThis(), ZEND_STRL("transactionRequiresAbort"), transactionRequiresAbort TSRMLS_CC); -+    zend_update_property_string(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("message"), message); -+    zend_update_property_long(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("code"), code); -+    zend_update_property_string(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("error_string"), error_string); -+    zend_update_property_bool(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("isFatal"), isFatal); -+    zend_update_property_bool(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("isRetriable"), isRetriable); -+    zend_update_property_bool(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("transactionRequiresAbort"), transactionRequiresAbort); - } - /* }}} */ -  -@@ -86,22 +85,18 @@ PHP_METHOD(RdKafka__KafkaErrorException, getErrorString) - { -     zval *res; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    res = rdkafka_read_property(ce_kafka_error, getThis(), ZEND_STRL("error_string"), 0 TSRMLS_CC); -+    res = rdkafka_read_property(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("error_string"), 0); -  -     if (!res || Z_TYPE_P(res) != IS_STRING) { -         return; -     } -  --#if PHP_MAJOR_VERSION >= 7 -     ZVAL_DEREF(res); -     ZVAL_COPY(return_value, res); --#else --    RETURN_ZVAL(res, 1, 0) --#endif - } - /* }}} */ -  -@@ -116,22 +111,18 @@ PHP_METHOD(RdKafka__KafkaErrorException, isFatal) - { -     zval *res; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    res = rdkafka_read_property(ce_kafka_error, getThis(), ZEND_STRL("isFatal"), 0 TSRMLS_CC); -+    res = rdkafka_read_property(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("isFatal"), 0); -  --#if PHP_MAJOR_VERSION >= 7 -     if (!res || (Z_TYPE_P(res) != IS_TRUE && Z_TYPE_P(res) != IS_FALSE)) { -         return; -     } -  -     ZVAL_DEREF(res); -     ZVAL_COPY(return_value, res); --#else --    RETURN_ZVAL(res, 1, 0) --#endif - } - /* }}} */ -  -@@ -145,22 +136,18 @@ PHP_METHOD(RdKafka__KafkaErrorException, isRetriable) - { -     zval *res; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    res = rdkafka_read_property(ce_kafka_error, getThis(), ZEND_STRL("isRetriable"), 0 TSRMLS_CC); -+    res = rdkafka_read_property(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("isRetriable"), 0); -  --#if PHP_MAJOR_VERSION >= 7 -     if (!res || (Z_TYPE_P(res) != IS_TRUE && Z_TYPE_P(res) != IS_FALSE)) { -         return; -     } -  -     ZVAL_DEREF(res); -     ZVAL_COPY(return_value, res); --#else --    RETURN_ZVAL(res, 1, 0) --#endif - } - /* }}} */ -  -@@ -174,22 +161,18 @@ PHP_METHOD(RdKafka__KafkaErrorException, transactionRequiresAbort) - { -     zval *res; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    res = rdkafka_read_property(ce_kafka_error, getThis(), ZEND_STRL("transactionRequiresAbort"), 0 TSRMLS_CC); -+    res = rdkafka_read_property(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("transactionRequiresAbort"), 0); -  --#if PHP_MAJOR_VERSION >= 7 -     if (!res || (Z_TYPE_P(res) != IS_TRUE && Z_TYPE_P(res) != IS_FALSE)) { -         return; -     } -  -     ZVAL_DEREF(res); -     ZVAL_COPY(return_value, res); --#else --    RETURN_ZVAL(res, 1, 0) --#endif - } - /* }}} */ -  -@@ -202,17 +185,17 @@ static const zend_function_entry kafka_error_fe[] = { /* {{{ */ -     PHP_FE_END - }; /* }}} */ -  --void kafka_error_minit(TSRMLS_D) /* {{{ */ -+void kafka_error_minit() /* {{{ */ - { -     zend_class_entry ce; -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "KafkaErrorException", kafka_error_fe); --    ce_kafka_error = rdkafka_register_internal_class_ex(&ce, ce_kafka_exception TSRMLS_CC); -+    ce_kafka_error = zend_register_internal_class_ex(&ce, ce_kafka_exception); -  --    zend_declare_property_null(ce_kafka_error, ZEND_STRL("error_string"), ZEND_ACC_PRIVATE TSRMLS_CC); --    zend_declare_property_bool(ce_kafka_error, ZEND_STRL("isFatal"), 0, ZEND_ACC_PRIVATE TSRMLS_CC); --    zend_declare_property_bool(ce_kafka_error, ZEND_STRL("isRetriable"), 0, ZEND_ACC_PRIVATE TSRMLS_CC); --    zend_declare_property_bool(ce_kafka_error, ZEND_STRL("transactionRequiresAbort"), 0, ZEND_ACC_PRIVATE TSRMLS_CC); -+    zend_declare_property_null(ce_kafka_error, ZEND_STRL("error_string"), ZEND_ACC_PRIVATE); -+    zend_declare_property_bool(ce_kafka_error, ZEND_STRL("isFatal"), 0, ZEND_ACC_PRIVATE); -+    zend_declare_property_bool(ce_kafka_error, ZEND_STRL("isRetriable"), 0, ZEND_ACC_PRIVATE); -+    zend_declare_property_bool(ce_kafka_error, ZEND_STRL("transactionRequiresAbort"), 0, ZEND_ACC_PRIVATE); - } /* }}} */ - #endif -  -diff --git a/kafka_error_exception.h b/kafka_error_exception.h -index 71ad2f3..d44b895 100644 ---- a/kafka_error_exception.h -+++ b/kafka_error_exception.h -@@ -15,11 +15,13 @@ -   | Author: Arnaud Le Blanc <arnaud.lb@gmail.com>                        | -   +----------------------------------------------------------------------+ - */ -+ - #ifdef HAS_RD_KAFKA_TRANSACTIONS -  --#include "zeval.h" - #include "librdkafka/rdkafka.h" -+#include "Zend/zend_interfaces.h" -+ - extern zend_class_entry * ce_kafka_error; --void kafka_error_minit(TSRMLS_D); --void create_kafka_error(zval *return_value, const rd_kafka_error_t *error TSRMLS_DC); -+void kafka_error_minit(); -+void create_kafka_error(zval *return_value, const rd_kafka_error_t *error); - #endif -diff --git a/message.c b/message.c -index d8b7dc3..f4c4c7f 100644 ---- a/message.c -+++ b/message.c -@@ -32,7 +32,7 @@ -  - zend_class_entry * ce_kafka_message; -  --void kafka_message_new(zval *return_value, const rd_kafka_message_t *message TSRMLS_DC) -+void kafka_message_new(zval *return_value, const rd_kafka_message_t *message) - { -     object_init_ex(return_value, ce_kafka_message); -  -@@ -48,24 +48,24 @@ void kafka_message_new(zval *return_value, const rd_kafka_message_t *message TSR -     const void *header_value = NULL; -     size_t header_size = 0; -     zval headers_array; --    size_t i; -+    uint i; - #endif /* HAVE_RD_KAFKA_MESSAGE_HEADERS */ -  --    zend_update_property_long(NULL, return_value, ZEND_STRL("err"), message->err TSRMLS_CC); -+    zend_update_property_long(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("err"), message->err); -  -     if (message->rkt) { --        zend_update_property_string(NULL, return_value, ZEND_STRL("topic_name"), rd_kafka_topic_name(message->rkt) TSRMLS_CC); -+        zend_update_property_string(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("topic_name"), rd_kafka_topic_name(message->rkt)); -     } --    zend_update_property_long(NULL, return_value, ZEND_STRL("partition"), message->partition TSRMLS_CC); -+    zend_update_property_long(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("partition"), message->partition); -     if (message->payload) { --        zend_update_property_long(NULL, return_value, ZEND_STRL("timestamp"), timestamp TSRMLS_CC); --        zend_update_property_stringl(NULL, return_value, ZEND_STRL("payload"), message->payload, message->len TSRMLS_CC); --        zend_update_property_long(NULL, return_value, ZEND_STRL("len"), message->len TSRMLS_CC); -+        zend_update_property_long(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("timestamp"), timestamp); -+        zend_update_property_stringl(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("payload"), message->payload, message->len); -+        zend_update_property_long(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("len"), message->len); -     } -     if (message->key) { --        zend_update_property_stringl(NULL, return_value, ZEND_STRL("key"), message->key, message->key_len TSRMLS_CC); -+        zend_update_property_stringl(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("key"), message->key, message->key_len); -     } --    zend_update_property_long(NULL, return_value, ZEND_STRL("offset"), message->offset TSRMLS_CC); -+    zend_update_property_long(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("offset"), message->offset); -  - #ifdef HAVE_RD_KAFKA_MESSAGE_HEADERS -     if (message->err == RD_KAFKA_RESP_ERR_NO_ERROR) { -@@ -77,28 +77,28 @@ void kafka_message_new(zval *return_value, const rd_kafka_message_t *message TSR -                 if (header_response != RD_KAFKA_RESP_ERR_NO_ERROR) { -                     break; -                 } --                rdkafka_add_assoc_stringl(&headers_array, header_name, (const char*)header_value, header_size); -+                add_assoc_stringl(&headers_array, header_name, (const char*)header_value, header_size); -             } --            zend_update_property(NULL, return_value, ZEND_STRL("headers"), &headers_array TSRMLS_CC); -+            zend_update_property(NULL, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("headers"), &headers_array); -             zval_ptr_dtor(&headers_array); -         } -     } - #endif - } -  --void kafka_message_list_to_array(zval *return_value, rd_kafka_message_t **messages, long size TSRMLS_DC) /* {{{ */ -+void kafka_message_list_to_array(zval *return_value, rd_kafka_message_t **messages, long size) /* {{{ */ - { -     rd_kafka_message_t *msg; --    zeval zmsg; -+    zval zmsg; -     int i; -  -     array_init_size(return_value, size); -  -     for (i = 0; i < size; i++) { -         msg = messages[i]; --        MAKE_STD_ZEVAL(zmsg); --        kafka_message_new(P_ZEVAL(zmsg), msg TSRMLS_CC); --        add_next_index_zval(return_value, P_ZEVAL(zmsg)); -+        ZVAL_NULL(&zmsg); -+        kafka_message_new(&zmsg, msg); -+        add_next_index_zval(return_value, &zmsg); -     } - } /* }}} */ -  -@@ -115,11 +115,11 @@ PHP_METHOD(RdKafka__Message, errstr) -     zval *zpayload; -     const char *errstr; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    zerr = rdkafka_read_property(NULL, getThis(), ZEND_STRL("err"), 0 TSRMLS_CC); -+    zerr = rdkafka_read_property(NULL, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("err"), 0); -  -     if (!zerr || Z_TYPE_P(zerr) != IS_LONG) { -         return; -@@ -128,10 +128,10 @@ PHP_METHOD(RdKafka__Message, errstr) -     errstr = rd_kafka_err2str(Z_LVAL_P(zerr)); -  -     if (errstr) { --        RDKAFKA_RETURN_STRING(errstr); -+        RETURN_STRING(errstr); -     } -  --    zpayload = rdkafka_read_property(NULL, getThis(), ZEND_STRL("payload"), 0 TSRMLS_CC); -+    zpayload = rdkafka_read_property(NULL, Z_RDKAFKA_PROP_OBJ(getThis()), ZEND_STRL("payload"), 0); -  -     if (zpayload && Z_TYPE_P(zpayload) == IS_STRING) { -         RETURN_ZVAL(zpayload, 1, 0); -@@ -144,21 +144,21 @@ static const zend_function_entry kafka_message_fe[] = { -     PHP_FE_END - }; -  --void kafka_message_minit(TSRMLS_D) { /* {{{ */ -+void kafka_message_minit(INIT_FUNC_ARGS) { /* {{{ */ -     zend_class_entry ce; -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "Message", kafka_message_fe); --    ce_kafka_message = zend_register_internal_class(&ce TSRMLS_CC); -- --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("err"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("topic_name"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("timestamp"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("partition"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("payload"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("len"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("key"), ZEND_ACC_PUBLIC TSRMLS_CC); --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("offset"), ZEND_ACC_PUBLIC TSRMLS_CC); -+    ce_kafka_message = zend_register_internal_class(&ce); -+ -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("err"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("topic_name"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("timestamp"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("partition"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("payload"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("len"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("key"), ZEND_ACC_PUBLIC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("offset"), ZEND_ACC_PUBLIC); - #ifdef HAVE_RD_KAFKA_MESSAGE_HEADERS --    zend_declare_property_null(ce_kafka_message, ZEND_STRL("headers"), ZEND_ACC_PUBLIC TSRMLS_CC); -+    zend_declare_property_null(ce_kafka_message, ZEND_STRL("headers"), ZEND_ACC_PUBLIC); - #endif - } /* }}} */ -diff --git a/message.h b/message.h -index 28d75fb..3a0f701 100644 ---- a/message.h -+++ b/message.h -@@ -16,8 +16,8 @@ -   +----------------------------------------------------------------------+ - */ -  --void kafka_message_minit(TSRMLS_D); --void kafka_message_new(zval *return_value, const rd_kafka_message_t *message TSRMLS_DC); --void kafka_message_list_to_array(zval *return_value, rd_kafka_message_t **messages, long size TSRMLS_DC); -+void kafka_message_minit(INIT_FUNC_ARGS); -+void kafka_message_new(zval *return_value, const rd_kafka_message_t *message); -+void kafka_message_list_to_array(zval *return_value, rd_kafka_message_t **messages, long size); -  - extern zend_class_entry * ce_kafka_message; -diff --git a/metadata.c b/metadata.c -index e8baca7..4d3f12d 100644 ---- a/metadata.c -+++ b/metadata.c -@@ -29,101 +29,93 @@ - #include "metadata_broker.h" - #include "metadata_partition.h" - #include "Zend/zend_exceptions.h" --#include "zeval.h" -  - typedef struct _object_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object               std; --#endif -     const rd_kafka_metadata_t *metadata; --#if PHP_MAJOR_VERSION >= 7 -     zend_object               std; --#endif - } object_intern; -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC); -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp); -  - static zend_class_entry * ce; - static zend_object_handlers handlers; -  --static void brokers_collection(zval *return_value, zval *parent, object_intern *intern TSRMLS_DC) { /* {{{ */ --    kafka_metadata_collection_init(return_value, parent, intern->metadata->brokers, intern->metadata->broker_cnt, sizeof(*intern->metadata->brokers), kafka_metadata_broker_ctor TSRMLS_CC); -+static void brokers_collection(zval *return_value, Z_RDKAFKA_OBJ *parent, object_intern *intern) { /* {{{ */ -+    kafka_metadata_collection_init(return_value, parent, intern->metadata->brokers, intern->metadata->broker_cnt, sizeof(*intern->metadata->brokers), kafka_metadata_broker_ctor); - } - /* }}} */ -  --static void topics_collection(zval *return_value, zval *parent, object_intern *intern TSRMLS_DC) { /* {{{ */ --    kafka_metadata_collection_init(return_value, parent, intern->metadata->topics, intern->metadata->topic_cnt, sizeof(*intern->metadata->topics), kafka_metadata_topic_ctor TSRMLS_CC); -+static void topics_collection(zval *return_value, Z_RDKAFKA_OBJ *parent, object_intern *intern) { /* {{{ */ -+    kafka_metadata_collection_init(return_value, parent, intern->metadata->topics, intern->metadata->topic_cnt, sizeof(*intern->metadata->topics), kafka_metadata_topic_ctor); - } - /* }}} */ -  --static void kafka_metadata_free(zend_object *object TSRMLS_DC) /* {{{ */ -+static void kafka_metadata_free(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -  -     if (intern->metadata) { -         rd_kafka_metadata_destroy(intern->metadata); -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value kafka_metadata_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *kafka_metadata_new(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, kafka_metadata_free, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *zmetadata TSRMLS_DC) -+static object_intern * get_object(zval *zmetadata) - { --    object_intern *ometadata = get_custom_object_zval(object_intern, zmetadata); -+    object_intern *ometadata = Z_RDKAFKA_P(object_intern, zmetadata); -  -     if (!ometadata->metadata) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Metadata::__construct() has not been called"); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Metadata::__construct() has not been called"); -         return NULL; -     } -  -     return ometadata; - } -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp) /* {{{ */ - { -     zval ary; -     object_intern *intern; --    zeval brokers; --    zeval topics; -+    zval brokers; -+    zval topics; -  -     *is_temp = 1; -  -     array_init(&ary); -  --    intern = get_object(object TSRMLS_CC); -+    intern = rdkafka_get_debug_object(object_intern, object); -     if (!intern) { -         return Z_ARRVAL(ary); -     } -  --    MAKE_STD_ZEVAL(brokers); --    brokers_collection(P_ZEVAL(brokers), object, intern TSRMLS_CC); --    add_assoc_zval(&ary, "brokers", P_ZEVAL(brokers)); -+    ZVAL_NULL(&brokers); -+    brokers_collection(&brokers, object, intern); -+    add_assoc_zval(&ary, "brokers", &brokers); -  --    MAKE_STD_ZEVAL(topics); --    topics_collection(P_ZEVAL(topics), object, intern TSRMLS_CC); --    add_assoc_zval(&ary, "topics", P_ZEVAL(topics)); -+    ZVAL_NULL(&topics); -+    topics_collection(&topics, object, intern); -+    add_assoc_zval(&ary, "topics", &topics); -  -     add_assoc_long(&ary, "orig_broker_id", intern->metadata->orig_broker_id); --    rdkafka_add_assoc_string(&ary, "orig_broker_name", intern->metadata->orig_broker_name); -+    add_assoc_string(&ary, "orig_broker_name", intern->metadata->orig_broker_name); -  -     return Z_ARRVAL(ary); - } -@@ -143,7 +135,7 @@ PHP_METHOD(RdKafka__Metadata, getOrigBrokerId) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -166,12 +158,12 @@ PHP_METHOD(RdKafka__Metadata, getOrigBrokerName) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    RDKAFKA_RETURN_STRING(intern->metadata->orig_broker_name); -+    RETURN_STRING(intern->metadata->orig_broker_name); - } - /* }}} */ -  -@@ -189,12 +181,12 @@ PHP_METHOD(RdKafka__Metadata, getBrokers) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    brokers_collection(return_value, getThis(), intern TSRMLS_CC); -+    brokers_collection(return_value, Z_RDKAFKA_PROP_OBJ(getThis()), intern); - } - /* }}} */ -  -@@ -212,12 +204,12 @@ PHP_METHOD(RdKafka__Metadata, getTopics) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    topics_collection(return_value, getThis(), intern TSRMLS_CC); -+    topics_collection(return_value, Z_RDKAFKA_PROP_OBJ(getThis()), intern); - } - /* }}} */ -  -@@ -229,26 +221,26 @@ static const zend_function_entry kafka_metadata_fe[] = { -     PHP_FE_END - }; -  --void kafka_metadata_minit(TSRMLS_D) -+void kafka_metadata_minit(INIT_FUNC_ARGS) - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "Metadata", kafka_metadata_fe); --    ce = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce = zend_register_internal_class(&tmpce); -     ce->create_object = kafka_metadata_new; -  -     handlers = kafka_default_object_handlers; -     handlers.get_debug_info = get_debug_info; --    set_object_handler_free_obj(&handlers, kafka_metadata_free); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = kafka_metadata_free; -+    handlers.offset = XtOffsetOf(object_intern, std); -  --    kafka_metadata_topic_minit(TSRMLS_C); --    kafka_metadata_broker_minit(TSRMLS_C); --    kafka_metadata_partition_minit(TSRMLS_C); --    kafka_metadata_collection_minit(TSRMLS_C); -+    kafka_metadata_topic_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_metadata_broker_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_metadata_partition_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_metadata_collection_minit(INIT_FUNC_ARGS_PASSTHRU); - } -  --void kafka_metadata_init(zval *return_value, const rd_kafka_metadata_t *metadata TSRMLS_DC) -+void kafka_metadata_init(zval *return_value, const rd_kafka_metadata_t *metadata) - { -     object_intern *intern; -  -@@ -256,7 +248,7 @@ void kafka_metadata_init(zval *return_value, const rd_kafka_metadata_t *metadata -         return; -     } -  --    intern = get_custom_object_zval(object_intern, return_value); -+    intern = Z_RDKAFKA_P(object_intern, return_value); -     if (!intern) { -         return; -     } -diff --git a/metadata.h b/metadata.h -index 074816f..d09d2db 100644 ---- a/metadata.h -+++ b/metadata.h -@@ -16,5 +16,5 @@ -   +----------------------------------------------------------------------+ - */ -  --void kafka_metadata_minit(TSRMLS_D); --void kafka_metadata_init(zval *return_value, const rd_kafka_metadata_t *metadata TSRMLS_DC); -+void kafka_metadata_minit(INIT_FUNC_ARGS); -+void kafka_metadata_init(zval *return_value, const rd_kafka_metadata_t *metadata); -diff --git a/metadata_broker.c b/metadata_broker.c -index 89655a5..b964231 100644 ---- a/metadata_broker.c -+++ b/metadata_broker.c -@@ -27,68 +27,59 @@ - #include "ext/spl/spl_iterators.h" - #include "Zend/zend_interfaces.h" - #include "Zend/zend_exceptions.h" --#include "zeval.h" -  - typedef struct _object_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object                     std; --#endif -     zval                            zmetadata; -     const rd_kafka_metadata_broker_t *metadata_broker; --#if PHP_MAJOR_VERSION >= 7 -     zend_object                     std; --#endif - } object_intern; -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC); -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp); -  - static zend_class_entry * ce; - static zend_object_handlers handlers; -  --static void free_object(zend_object *object TSRMLS_DC) /* {{{ */ -+static void free_object(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -  -     if (intern->metadata_broker) { -         zval_dtor(&intern->zmetadata); -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value create_object(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *create_object(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  -- --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, free_object, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *zmt TSRMLS_DC) -+static object_intern * get_object(zval *zmt) - { --    object_intern *omt = get_custom_object_zval(object_intern, zmt); -+    object_intern *omt = Z_RDKAFKA_P(object_intern, zmt); -  -     if (!omt->metadata_broker) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Metadata\\Broker::__construct() has not been called"); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Metadata\\Broker::__construct() has not been called"); -         return NULL; -     } -  -     return omt; - } -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp) /* {{{ */ - { -     zval ary; -     object_intern *intern; -@@ -97,13 +88,13 @@ static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -  -     array_init(&ary); -  --    intern = get_object(object TSRMLS_CC); -+    intern = rdkafka_get_debug_object(object_intern, object); -     if (!intern) { -         return Z_ARRVAL(ary); -     } -  -     add_assoc_long(&ary, "id", intern->metadata_broker->id); --    rdkafka_add_assoc_string(&ary, "host", intern->metadata_broker->host); -+    add_assoc_string(&ary, "host", intern->metadata_broker->host); -     add_assoc_long(&ary, "port", intern->metadata_broker->port); -  -     return Z_ARRVAL(ary); -@@ -124,7 +115,7 @@ PHP_METHOD(RdKafka__Metadata__Broker, getId) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -147,12 +138,12 @@ PHP_METHOD(RdKafka__Metadata__Broker, getHost) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    RDKAFKA_RETURN_STRING(intern->metadata_broker->host); -+    RETURN_STRING(intern->metadata_broker->host); - } - /* }}} */ -  -@@ -170,7 +161,7 @@ PHP_METHOD(RdKafka__Metadata__Broker, getPort) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -186,21 +177,21 @@ static const zend_function_entry fe[] = { -     PHP_FE_END - }; -  --void kafka_metadata_broker_minit(TSRMLS_D) -+void kafka_metadata_broker_minit(INIT_FUNC_ARGS) - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "Metadata\\Broker", fe); --    ce = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce = zend_register_internal_class(&tmpce); -     ce->create_object = create_object; -  -     handlers = kafka_default_object_handlers; -     handlers.get_debug_info = get_debug_info; --    set_object_handler_free_obj(&handlers, free_object); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = free_object; -+    handlers.offset = XtOffsetOf(object_intern, std); - } -  --void kafka_metadata_broker_ctor(zval *return_value, zval *zmetadata, const void *data TSRMLS_DC) -+void kafka_metadata_broker_ctor(zval *return_value, zval *zmetadata, const void *data) - { -     rd_kafka_metadata_broker_t *metadata_broker = (rd_kafka_metadata_broker_t*)data; -     object_intern *intern; -@@ -209,7 +200,7 @@ void kafka_metadata_broker_ctor(zval *return_value, zval *zmetadata, const void -         return; -     } -  --    intern = get_custom_object_zval(object_intern, return_value); -+    intern = Z_RDKAFKA_P(object_intern, return_value); -     if (!intern) { -         return; -     } -diff --git a/metadata_broker.h b/metadata_broker.h -index 0cf4e4b..6f64928 100644 ---- a/metadata_broker.h -+++ b/metadata_broker.h -@@ -16,5 +16,5 @@ -   +----------------------------------------------------------------------+ - */ -  --void kafka_metadata_broker_minit(TSRMLS_D); --void kafka_metadata_broker_ctor(zval *return_value, zval *zmetadata, const void *metadata_broker TSRMLS_DC); -+void kafka_metadata_broker_minit(INIT_FUNC_ARGS); -+void kafka_metadata_broker_ctor(zval *return_value, zval *zmetadata, const void *metadata_broker); -diff --git a/metadata_collection.c b/metadata_collection.c -index 62867bc..af986ff 100644 ---- a/metadata_collection.c -+++ b/metadata_collection.c -@@ -28,90 +28,82 @@ - #include "Zend/zend_interfaces.h" - #include "metadata_collection.h" - #include "Zend/zend_exceptions.h" --#include "zeval.h" -  - typedef struct _object_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object                      std; --#endif -     zval                             zmetadata; -     const void                       *items; -     size_t                           item_cnt; -     size_t                           item_size; -     size_t                           position; -     kafka_metadata_collection_ctor_t ctor; --#if PHP_MAJOR_VERSION >= 7 -     zend_object                      std; --#endif - } object_intern; -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC); -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp); -  - static zend_class_entry *ce; - static zend_object_handlers handlers; -  --static void free_object(zend_object *object TSRMLS_DC) /* {{{ */ -+static void free_object(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -  -     if (intern->items) { -         zval_dtor(&intern->zmetadata); -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value create_object(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *create_object(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, free_object, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *zmti TSRMLS_DC) -+static object_intern * get_object(zval *zmti) - { --    object_intern *omti = get_custom_object_zval(object_intern, zmti); -+    object_intern *omti = Z_RDKAFKA_P(object_intern, zmti); -  -     if (!omti->items) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Metadata\\Collection::__construct() has not been called" TSRMLS_CC); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Metadata\\Collection::__construct() has not been called"); -         return NULL; -     } -  -     return omti; - } -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp) /* {{{ */ - { -     zval ary; -     object_intern *intern; -     size_t i; --    zeval item; -+    zval item; -  -     *is_temp = 1; -  -     array_init(&ary); -  --    intern = get_object(object TSRMLS_CC); -+    intern = rdkafka_get_debug_object(object_intern, object); -     if (!intern) { -         return Z_ARRVAL(ary); -     } -      -     for (i = 0; i < intern->item_cnt; i++) { --        MAKE_STD_ZEVAL(item); --        intern->ctor(P_ZEVAL(item), &intern->zmetadata, (char *)intern->items + i * intern->item_size TSRMLS_CC); --        add_next_index_zval(&ary, P_ZEVAL(item)); -+        ZVAL_NULL(&item); -+        intern->ctor(&item, &intern->zmetadata, (char *)intern->items + i * intern->item_size); -+        add_next_index_zval(&ary, &item); -     } -  -     return Z_ARRVAL(ary); -@@ -132,7 +124,7 @@ PHP_METHOD(RdKafka__Metadata__Collection, count) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -155,7 +147,7 @@ PHP_METHOD(RdKafka__Metadata__Collection, rewind) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -178,17 +170,17 @@ PHP_METHOD(RdKafka__Metadata__Collection, current) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (intern->position >= intern->item_cnt) { --        zend_throw_exception(ce_kafka_exception, "Called current() on invalid iterator", 0 TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, "Called current() on invalid iterator", 0); -         return; -     } -  --    intern->ctor(return_value, &intern->zmetadata, (char *)intern->items + intern->position * intern->item_size TSRMLS_CC); -+    intern->ctor(return_value, &intern->zmetadata, (char *)intern->items + intern->position * intern->item_size); - } - /* }}} */ -  -@@ -206,13 +198,13 @@ PHP_METHOD(RdKafka__Metadata__Collection, key) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (intern->position >= intern->item_cnt) { --        zend_throw_exception(ce_kafka_exception, "Called key() on invalid iterator", 0 TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, "Called key() on invalid iterator", 0); -         return; -     } -  -@@ -234,7 +226,7 @@ PHP_METHOD(RdKafka__Metadata__Collection, next) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -257,7 +249,7 @@ PHP_METHOD(RdKafka__Metadata__Collection, valid) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -276,22 +268,22 @@ static const zend_function_entry fe[] = { -     PHP_FE_END - }; -  --void kafka_metadata_collection_minit(TSRMLS_D) -+void kafka_metadata_collection_minit(INIT_FUNC_ARGS) - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka\\Metadata", "Collection", fe); --    ce = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce = zend_register_internal_class(&tmpce); -     ce->create_object = create_object; --    zend_class_implements(ce TSRMLS_CC, 2, spl_ce_Countable, spl_ce_Iterator); -+    zend_class_implements(ce, 2, spl_ce_Countable, spl_ce_Iterator); -  -     handlers = kafka_default_object_handlers; -     handlers.get_debug_info = get_debug_info; --    set_object_handler_free_obj(&handlers, free_object); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = free_object; -+    handlers.offset = XtOffsetOf(object_intern, std); - } -  --void kafka_metadata_collection_init(zval *return_value, zval *zmetadata, const void * items, size_t item_cnt, size_t item_size, kafka_metadata_collection_ctor_t ctor TSRMLS_DC) -+void kafka_metadata_collection_init(zval *return_value, Z_RDKAFKA_OBJ *zmetadata, const void * items, size_t item_cnt, size_t item_size, kafka_metadata_collection_ctor_t ctor) - { -     object_intern *intern; -  -@@ -299,12 +291,14 @@ void kafka_metadata_collection_init(zval *return_value, zval *zmetadata, const v -         return; -     } -  --    intern = get_custom_object_zval(object_intern, return_value); -+    intern = Z_RDKAFKA_P(object_intern, return_value); -     if (!intern) { -         return; -     } -  -+#if PHP_MAJOR_VERSION < 8 -     ZVAL_ZVAL(&intern->zmetadata, zmetadata, 1, 0); -+#endif -     intern->items = items; -     intern->item_cnt = item_cnt; -     intern->item_size = item_size; -diff --git a/metadata_collection.h b/metadata_collection.h -index 55539bb..fff2fd6 100644 ---- a/metadata_collection.h -+++ b/metadata_collection.h -@@ -16,7 +16,7 @@ -   +----------------------------------------------------------------------+ - */ -  --typedef void (*kafka_metadata_collection_ctor_t)(zval *renurn_value, zval *zmetadata, const void *object TSRMLS_DC); -+typedef void (*kafka_metadata_collection_ctor_t)(zval *renurn_value, zval *zmetadata, const void *object); -  --void kafka_metadata_collection_minit(TSRMLS_D); --void kafka_metadata_collection_init(zval *return_value, zval *zmetadata, const void * items, size_t item_cnt, size_t item_size, kafka_metadata_collection_ctor_t ctor TSRMLS_DC); -+void kafka_metadata_collection_minit(INIT_FUNC_ARGS); -+void kafka_metadata_collection_init(zval *return_value, Z_RDKAFKA_OBJ *zmetadata, const void * items, size_t item_cnt, size_t item_size, kafka_metadata_collection_ctor_t ctor); -diff --git a/metadata_partition.c b/metadata_partition.c -index 17f5f3a..7fcabc2 100644 ---- a/metadata_partition.c -+++ b/metadata_partition.c -@@ -30,64 +30,57 @@ - #include "metadata_collection.h" -  - typedef struct _object_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object                     std; --#endif -     zval                            zmetadata; -     const rd_kafka_metadata_partition_t *metadata_partition; --#if PHP_MAJOR_VERSION >= 7 -     zend_object                     std; --#endif - } object_intern; -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC); -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp); -  - static zend_class_entry * ce; - static zend_object_handlers handlers; -  --static void free_object(zend_object *object TSRMLS_DC) /* {{{ */ -+static void free_object(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -  -     if (intern->metadata_partition) { -         zval_dtor(&intern->zmetadata); -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value create_object(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *create_object(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, free_object, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *zmt TSRMLS_DC) -+static object_intern * get_object(zval *zmt) - { --    object_intern *omt = get_custom_object_zval(object_intern, zmt); -+    object_intern *omt = Z_RDKAFKA_P(object_intern, zmt); -  -     if (!omt->metadata_partition) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Metadata\\Partition::__construct() has not been called"); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Metadata\\Partition::__construct() has not been called"); -         return NULL; -     } -  -     return omt; - } -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp) /* {{{ */ - { -     zval ary; -     object_intern *intern; -@@ -96,7 +89,7 @@ static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -  -     array_init(&ary); -  --    intern = get_object(object TSRMLS_CC); -+    intern = rdkafka_get_debug_object(object_intern, object); -     if (!intern) { -         return Z_ARRVAL(ary); -     } -@@ -125,7 +118,7 @@ PHP_METHOD(RdKafka__Metadata__Partition, getId) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -148,7 +141,7 @@ PHP_METHOD(RdKafka__Metadata__Partition, getErr) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -171,7 +164,7 @@ PHP_METHOD(RdKafka__Metadata__Partition, getLeader) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -180,7 +173,7 @@ PHP_METHOD(RdKafka__Metadata__Partition, getLeader) - } - /* }}} */ -  --void int32_ctor(zval *return_value, zval *zmetadata, const void *data TSRMLS_DC) { -+void int32_ctor(zval *return_value, zval *zmetadata, const void *data) { -     ZVAL_LONG(return_value, *(int32_t*)data); - } -  -@@ -198,12 +191,12 @@ PHP_METHOD(RdKafka__Metadata__Partition, getReplicas) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    kafka_metadata_collection_init(return_value, getThis(), intern->metadata_partition->replicas, intern->metadata_partition->replica_cnt, sizeof(*intern->metadata_partition->replicas), int32_ctor TSRMLS_CC); -+    kafka_metadata_collection_init(return_value, Z_RDKAFKA_PROP_OBJ(getThis()), intern->metadata_partition->replicas, intern->metadata_partition->replica_cnt, sizeof(*intern->metadata_partition->replicas), int32_ctor); - } - /* }}} */ -  -@@ -221,12 +214,12 @@ PHP_METHOD(RdKafka__Metadata__Partition, getIsrs) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    kafka_metadata_collection_init(return_value, getThis(), intern->metadata_partition->isrs, intern->metadata_partition->isr_cnt, sizeof(*intern->metadata_partition->isrs), int32_ctor TSRMLS_CC); -+    kafka_metadata_collection_init(return_value, Z_RDKAFKA_PROP_OBJ(getThis()), intern->metadata_partition->isrs, intern->metadata_partition->isr_cnt, sizeof(*intern->metadata_partition->isrs), int32_ctor); - } - /* }}} */ -  -@@ -239,21 +232,21 @@ static const zend_function_entry fe[] = { -     PHP_FE_END - }; -  --void kafka_metadata_partition_minit(TSRMLS_D) -+void kafka_metadata_partition_minit(INIT_FUNC_ARGS) - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "Metadata\\Partition", fe); --    ce = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce = zend_register_internal_class(&tmpce); -     ce->create_object = create_object; -  -     handlers = kafka_default_object_handlers; -     handlers.get_debug_info = get_debug_info; --    set_object_handler_free_obj(&handlers, free_object); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = free_object; -+    handlers.offset = XtOffsetOf(object_intern, std); - } -  --void kafka_metadata_partition_ctor(zval *return_value, zval *zmetadata, const void *data TSRMLS_DC) -+void kafka_metadata_partition_ctor(zval *return_value, zval *zmetadata, const void *data) - { -     rd_kafka_metadata_partition_t *metadata_partition = (rd_kafka_metadata_partition_t*)data; -     object_intern *intern; -@@ -262,7 +255,7 @@ void kafka_metadata_partition_ctor(zval *return_value, zval *zmetadata, const vo -         return; -     } -  --    intern = get_custom_object_zval(object_intern, return_value); -+    intern = Z_RDKAFKA_P(object_intern, return_value); -     if (!intern) { -         return; -     } -diff --git a/metadata_partition.h b/metadata_partition.h -index a3da72c..8ce35b8 100644 ---- a/metadata_partition.h -+++ b/metadata_partition.h -@@ -16,5 +16,5 @@ -   +----------------------------------------------------------------------+ - */ -  --void kafka_metadata_partition_minit(TSRMLS_D); --void kafka_metadata_partition_ctor(zval *return_value, zval *zmetadata, const void *metadata_partition TSRMLS_DC); -+void kafka_metadata_partition_minit(INIT_FUNC_ARGS); -+void kafka_metadata_partition_ctor(zval *return_value, zval *zmetadata, const void *metadata_partition); -diff --git a/metadata_topic.c b/metadata_topic.c -index 6784316..5aeeed7 100644 ---- a/metadata_topic.c -+++ b/metadata_topic.c -@@ -29,91 +29,83 @@ - #include "metadata_partition.h" - #include "metadata_collection.h" - #include "Zend/zend_exceptions.h" --#include "zeval.h" -  - typedef struct _object_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object                     std; --#endif -     zval                            zmetadata; -     const rd_kafka_metadata_topic_t *metadata_topic; --#if PHP_MAJOR_VERSION >= 7 -     zend_object                     std; --#endif - } object_intern; -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC); -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp); -  - static zend_class_entry * ce; - static zend_object_handlers handlers; -  --static void partitions_collection(zval *return_value, zval *parent, object_intern *intern TSRMLS_DC) { /* {{{ */ --    kafka_metadata_collection_init(return_value, parent, intern->metadata_topic->partitions, intern->metadata_topic->partition_cnt, sizeof(*intern->metadata_topic->partitions), kafka_metadata_partition_ctor TSRMLS_CC); -+static void partitions_collection(zval *return_value, Z_RDKAFKA_OBJ *parent, object_intern *intern) { /* {{{ */ -+    kafka_metadata_collection_init(return_value, parent, intern->metadata_topic->partitions, intern->metadata_topic->partition_cnt, sizeof(*intern->metadata_topic->partitions), kafka_metadata_partition_ctor); - } - /* }}} */ -  --static void free_object(zend_object *object TSRMLS_DC) /* {{{ */ -+static void free_object(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -  -     if (intern->metadata_topic) { -         zval_dtor(&intern->zmetadata); -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value create_object(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *create_object(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, free_object, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *zmt TSRMLS_DC) -+static object_intern * get_object(zval *zmt) - { --    object_intern *omt = get_custom_object_zval(object_intern, zmt); -+    object_intern *omt = Z_RDKAFKA_P(object_intern, zmt); -  -     if (!omt->metadata_topic) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Metadata\\Topic::__construct() has not been called"); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Metadata\\Topic::__construct() has not been called"); -         return NULL; -     } -  -     return omt; - } -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp) /* {{{ */ - { -     zval ary; -     object_intern *intern; --    zeval partitions; -+    zval partitions; -  -     *is_temp = 1; -  -     array_init(&ary); -  --    intern = get_object(object TSRMLS_CC); -+    intern = rdkafka_get_debug_object(object_intern, object); -     if (!intern) { -         return Z_ARRVAL(ary); -     } -  --    rdkafka_add_assoc_string(&ary, "topic", intern->metadata_topic->topic); -+    add_assoc_string(&ary, "topic", intern->metadata_topic->topic); -  --    MAKE_STD_ZEVAL(partitions); --    partitions_collection(P_ZEVAL(partitions), object, intern TSRMLS_CC); --    add_assoc_zval(&ary, "partitions", P_ZEVAL(partitions)); -+    ZVAL_NULL(&partitions); -+    partitions_collection(&partitions, object, intern); -+    add_assoc_zval(&ary, "partitions", &partitions); -  -     add_assoc_long(&ary, "err", intern->metadata_topic->err); -  -@@ -135,12 +127,12 @@ PHP_METHOD(RdKafka__Metadata__Topic, getTopic) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    RDKAFKA_RETURN_STRING(intern->metadata_topic->topic); -+    RETURN_STRING(intern->metadata_topic->topic); - } - /* }}} */ -  -@@ -158,7 +150,7 @@ PHP_METHOD(RdKafka__Metadata__Topic, getErr) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -182,12 +174,12 @@ PHP_METHOD(RdKafka__Metadata__Topic, getPartitions) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  --    partitions_collection(return_value, getThis(), intern TSRMLS_CC); -+    partitions_collection(return_value, Z_RDKAFKA_PROP_OBJ(getThis()), intern); - } - /* }}} */ -  -@@ -198,21 +190,21 @@ static const zend_function_entry fe[] = { -     PHP_FE_END - }; -  --void kafka_metadata_topic_minit(TSRMLS_D) -+void kafka_metadata_topic_minit(INIT_FUNC_ARGS) - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka\\Metadata", "Topic", fe); --    ce = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce = zend_register_internal_class(&tmpce); -     ce->create_object = create_object; -  -     handlers = kafka_default_object_handlers; -     handlers.get_debug_info = get_debug_info; --    set_object_handler_free_obj(&handlers, free_object); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = free_object; -+    handlers.offset = XtOffsetOf(object_intern, std); - } -  --void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void *data TSRMLS_DC) -+void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void *data) - { -     rd_kafka_metadata_topic_t *metadata_topic = (rd_kafka_metadata_topic_t*)data; -     object_intern *intern; -@@ -221,7 +213,7 @@ void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void * -         return; -     } -  --    intern = get_custom_object_zval(object_intern, return_value); -+    intern = Z_RDKAFKA_P(object_intern, return_value); -     if (!intern) { -         return; -     } -diff --git a/metadata_topic.h b/metadata_topic.h -index 128fec0..677203d 100644 ---- a/metadata_topic.h -+++ b/metadata_topic.h -@@ -16,5 +16,5 @@ -   +----------------------------------------------------------------------+ - */ -  --void kafka_metadata_topic_minit(TSRMLS_D); --void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void *metadata_topic TSRMLS_DC); -+void kafka_metadata_topic_minit(INIT_FUNC_ARGS); -+void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void *metadata_topic); -diff --git a/php_rdkafka.h b/php_rdkafka.h -index e007877..19bef56 100644 ---- a/php_rdkafka.h -+++ b/php_rdkafka.h -@@ -22,7 +22,6 @@ - #define PHP_RDKAFKA_H -  - #include "librdkafka/rdkafka.h" --#include "compat.h" - #include "conf.h" -  - #ifndef PHP_FE_END -@@ -30,18 +29,13 @@ - #endif -  - typedef struct _kafka_object { --#if PHP_MAJOR_VERSION < 7 --    zend_object             std; --#endif -     rd_kafka_type_t         type; -     rd_kafka_t              *rk; -     kafka_conf_callbacks    cbs; -     HashTable               consuming; - 	HashTable				topics; - 	HashTable				queues; --#if PHP_MAJOR_VERSION >= 7 -     zend_object             std; --#endif - } kafka_object; -  - PHP_METHOD(RdKafka, __construct); -@@ -62,8 +56,4 @@ extern zend_class_entry * ce_kafka_exception; - #	define PHP_RDKAFKA_API - #endif -  --#ifdef ZTS --#include "TSRM.h" --#endif -- - #endif	/* PHP_RDKAFKA_H */ -diff --git a/php_rdkafka_priv.h b/php_rdkafka_priv.h -index 434e0e9..922a88d 100644 ---- a/php_rdkafka_priv.h -+++ b/php_rdkafka_priv.h -@@ -19,53 +19,30 @@ - #ifndef PHP_RDKAFKA_PRIV_H - #define PHP_RDKAFKA_PRIV_H -  --#if PHP_MAJOR_VERSION >= 7 -+#if PHP_MAJOR_VERSION >= 8 -  --typedef zend_object* zend_object_value; -+#define Z_RDKAFKA_OBJ zend_object -  --typedef size_t arglen_t; -+#define Z_RDKAFKA_PROP_OBJ(object) Z_OBJ_P(object) -  --#define STORE_OBJECT(retval, intern, dtor, free, clone) do { \ --    retval = &intern->std; \ --} while (0) -+#define rdkafka_get_debug_object(type, object) php_kafka_from_obj(type, object) -  --#define SET_OBJECT_HANDLERS(retval, _handlers) do { \ --    retval->handlers = _handlers; \ --} while (0) -+#else // PHP 7 -  --#define alloc_object(intern, ce) ecalloc(1, sizeof(*intern) + zend_object_properties_size(ce)) -+#define Z_RDKAFKA_OBJ zval -  --static inline zval * is_zval(zval * zv) { --    return zv; --} -- --#define get_custom_object_zval(type, zobject) \ --    ((type*)((char *)Z_OBJ_P(is_zval(zobject)) - XtOffsetOf(type, std))) -+#define Z_RDKAFKA_PROP_OBJ(object) object -  --static inline zend_object * is_zend_object(zend_object * object) { --    return object; --} -+#define rdkafka_get_debug_object(type, object) get_object(object) -  --#define get_custom_object(type, object) \ --    ((type*)((char *)is_zend_object(object) - XtOffsetOf(type, std))) -+#endif -  --#define free_custom_object(object) /* no-op */ -+#define Z_RDKAFKA_P(php_kafka_type, zobject) php_kafka_from_obj(php_kafka_type, Z_OBJ_P(zobject)) -  --static inline zend_class_entry *rdkafka_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce TSRMLS_DC) --{ --    return zend_register_internal_class_ex(class_entry, parent_ce); --} -- --static inline void set_object_handler_free_obj(zend_object_handlers * handlers, zend_object_free_obj_t free_obj) --{ --    handlers->free_obj = free_obj; --} --static inline void set_object_handler_offset(zend_object_handlers * handlers, size_t offset) --{ --    handlers->offset = offset; --} -+#define php_kafka_from_obj(php_kafka_type, object) \ -+    ((php_kafka_type*)((char *)(object) - XtOffsetOf(php_kafka_type, std))) -  --static inline void rdkafka_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache, zval *retval, uint32_t param_count, zval params[] TSRMLS_DC) -+static inline void rdkafka_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache, zval *retval, uint32_t param_count, zval params[]) - { -     int local_retval; -     zval local_retval_zv; -@@ -81,23 +58,19 @@ static inline void rdkafka_call_function(zend_fcall_info *fci, zend_fcall_info_c -     fci->params = params; -     fci->param_count = param_count; -  --    zend_call_function(fci, fci_cache TSRMLS_CC); -+    zend_call_function(fci, fci_cache); -  -     if (local_retval) { -         zval_ptr_dtor(retval); -     } - } -  --static inline zval *rdkafka_read_property(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zend_bool silent TSRMLS_DC) -+static inline zval *rdkafka_read_property(zend_class_entry *scope, Z_RDKAFKA_OBJ *object, const char *name, size_t name_length, zend_bool silent) - { -     zval rv; --    return zend_read_property(scope, object, name, name_length, silent, &rv TSRMLS_CC); -+    return zend_read_property(scope, object, name, name_length, silent, &rv); - } -  --static inline zval *rdkafka_hash_get_current_data_ex(HashTable *ht, HashPosition *pos) --{ --    return zend_hash_get_current_data_ex(ht, pos); --} -  - static inline char *rdkafka_hash_get_current_key_ex(HashTable *ht, HashPosition *pos) - { -@@ -111,148 +84,7 @@ static inline char *rdkafka_hash_get_current_key_ex(HashTable *ht, HashPosition -     return NULL; - } -  --#define rdkafka_add_assoc_string(arg, key, str) add_assoc_string(arg, key, str) -- --#define rdkafka_add_assoc_stringl(arg, key, str, str_length) add_assoc_stringl(arg, key, str, str_length) -- --#define RDKAFKA_RETURN_STRING(str) RETURN_STRING(str) --#define RDKAFKA_ZVAL_STRING(zv, str) ZVAL_STRING(zv, str) --#else /* PHP < 7 */ -- --typedef long zend_long; --#define ZEND_LONG_FMT "%ld" -- --typedef int arglen_t; -- --#define STORE_OBJECT(retval, intern, dtor, free, clone) do { \ --    void (*___free_object_storage)(zend_object *object TSRMLS_DC) = free; \ --    retval.handle = zend_objects_store_put(&intern->std, dtor, (zend_objects_free_object_storage_t)___free_object_storage, clone TSRMLS_CC); \ --} while (0) -- --#define SET_OBJECT_HANDLERS(retval, _handlers) do { \ --    retval.handlers = _handlers; \ --} while (0) -- --#define alloc_object(intern, ce) ecalloc(1, sizeof(*intern)) -- --#define get_custom_object_zval(type, zobject) \ --    ((type*)zend_object_store_get_object(zobject TSRMLS_CC)) -- --#define get_custom_object(type, object) \ --    ((type*)object) -- --#define free_custom_object(object) efree(object) -- --static inline void *zend_hash_str_add_ptr(HashTable *ht, const char *str, size_t len, void *pData) --{ --    void *pDest; --    zend_hash_add(ht, str, len, &pData, sizeof(pData), &pDest); --    return pDest; --} -- --static inline int zend_hash_str_del(HashTable *ht, const char *str, size_t len) --{ --	return zend_hash_del(ht, str, len); --} -- --static inline zend_bool zend_hash_str_exists(const HashTable *ht, const char *str, size_t len) --{ --    return zend_hash_exists(ht, str, len); --} -- --static inline void *zend_hash_index_add_ptr(HashTable *ht, zend_ulong h, void *pData) --{ --    void *pDest; --    zend_hash_index_update(ht, h, &pData, sizeof(pData), &pDest); --    return pDest; --} -- --static inline zend_class_entry *rdkafka_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce TSRMLS_DC) --{ --    return zend_register_internal_class_ex(class_entry, parent_ce, NULL TSRMLS_CC); --} -- --typedef void (*zend_object_free_obj_t)(zend_object *object); --static inline void set_object_handler_free_obj(zend_object_handlers * handlers, zend_object_free_obj_t free_obj) --{ --    /* no-op */ --} -- --static inline void set_object_handler_offset(zend_object_handlers * handlers, size_t offset) --{ --    /* no-op */ --} -- --static inline void rdkafka_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache, zval **retval, uint32_t param_count, zval *params[] TSRMLS_DC) --{ --    uint32_t i; --    int local_retval; --    zval *local_retval_zv; --    zval ***params_array; -- --    if (retval) { --        local_retval = 0; --    } else { --        local_retval = 1; --        retval = &local_retval_zv; --    } -- --    params_array = (zval ***) emalloc(sizeof(zval **)*param_count); --	for (i = 0; i < param_count; i++) { --        params_array[i] = ¶ms[i]; --    } -- --    fci->retval_ptr_ptr = retval; --    fci->params = params_array; --    fci->param_count = param_count; -- --    zend_call_function(fci, fci_cache TSRMLS_CC); -- --    if (local_retval && *retval) { --        zval_ptr_dtor(retval); --    } -- --    efree(params_array); --} -- --static inline zval *rdkafka_read_property(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zend_bool silent TSRMLS_DC) --{ --    return zend_read_property(scope, object, name, name_length, silent TSRMLS_CC); --} -- --static inline zval **rdkafka_hash_get_current_data_ex(HashTable *ht, HashPosition *pos) --{ --    zval **zv; -- --    if (zend_hash_get_current_data_ex(ht, (void**)&zv, pos) == SUCCESS) { --        return zv; --    } -- --    return NULL; --} -- --static inline char **rdkafka_hash_get_current_key_ex(HashTable *ht, HashPosition *pos) --{ --    char *key = NULL; --    uint  klen; --    ulong index; -- --    if (zend_hash_get_current_key_ex(ht, &key, &klen, &index, 0, pos) == HASH_KEY_IS_STRING) { --        return key; --    } -- --    return NULL; --} -- --#define rdkafka_add_assoc_string(arg, key, str) add_assoc_string(arg, key, str, 1) -- --#define rdkafka_add_assoc_stringl(arg, key, str, str_length) add_assoc_stringl(arg, key, str, str_length, 1) -- --#define RDKAFKA_RETURN_STRING(str) RETURN_STRING(str, 1) --#define RDKAFKA_ZVAL_STRING(zv, str) ZVAL_STRING(zv, str, 1) --#endif -- --kafka_object * get_kafka_object(zval *zrk TSRMLS_DC); -+kafka_object * get_kafka_object(zval *zrk); - void add_consuming_toppar(kafka_object * intern, rd_kafka_topic_t * rkt, int32_t partition); - void del_consuming_toppar(kafka_object * intern, rd_kafka_topic_t * rkt, int32_t partition); - int is_consuming_toppar(kafka_object * intern, rd_kafka_topic_t * rkt, int32_t partition); -diff --git a/queue.c b/queue.c -index 7d661d0..182563a 100644 ---- a/queue.c -+++ b/queue.c -@@ -35,45 +35,43 @@ zend_class_entry * ce_kafka_queue; -  - static zend_object_handlers handlers; -  --static void kafka_queue_free(zend_object *object TSRMLS_DC) /* {{{ */ -+static void kafka_queue_free(zend_object *object) /* {{{ */ - { --    kafka_queue_object *intern = get_custom_object(kafka_queue_object, object); -+    kafka_queue_object *intern = php_kafka_from_obj(kafka_queue_object, object); -  -     if (intern->rkqu) { --        kafka_object *kafka_intern = get_kafka_object(P_ZEVAL(intern->zrk) TSRMLS_CC); -+        kafka_object *kafka_intern = get_kafka_object(&intern->zrk); -         if (kafka_intern) { -             zend_hash_index_del(&kafka_intern->queues, (zend_ulong)intern); -         } -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value kafka_queue_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *kafka_queue_new(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     kafka_queue_object *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, kafka_queue_free, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --kafka_queue_object * get_kafka_queue_object(zval *zrkqu TSRMLS_DC) -+kafka_queue_object * get_kafka_queue_object(zval *zrkqu) - { --    kafka_queue_object *orkqu = get_custom_object_zval(kafka_queue_object, zrkqu); -+    kafka_queue_object *orkqu = Z_RDKAFKA_P(kafka_queue_object, zrkqu); -  -     if (!orkqu->rkqu) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Queue::__construct() has not been called" TSRMLS_CC); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Queue::__construct() has not been called"); -         return NULL; -     } -  -@@ -94,11 +92,11 @@ PHP_METHOD(RdKafka__Queue, consume) -     rd_kafka_message_t *message; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_kafka_queue_object(getThis() TSRMLS_CC); -+    intern = get_kafka_queue_object(getThis()); -     if (!intern) { -         return; -     } -@@ -110,11 +108,11 @@ PHP_METHOD(RdKafka__Queue, consume) -         if (err == RD_KAFKA_RESP_ERR__TIMED_OUT) { -             return; -         } --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  --    kafka_message_new(return_value, message TSRMLS_CC); -+    kafka_message_new(return_value, message); -  -     rd_kafka_message_destroy(message); - } -@@ -129,15 +127,15 @@ static const zend_function_entry kafka_queue_fe[] = { -     PHP_FE_END - }; -  --void kafka_queue_minit(TSRMLS_D) { /* {{{ */ -+void kafka_queue_minit(INIT_FUNC_ARGS) { /* {{{ */ -  -     zend_class_entry ce; -  -     handlers = kafka_default_object_handlers; --    set_object_handler_free_obj(&handlers, kafka_queue_free); --    set_object_handler_offset(&handlers, XtOffsetOf(kafka_queue_object, std)); -+    handlers.free_obj = kafka_queue_free; -+    handlers.offset = XtOffsetOf(kafka_queue_object, std); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "Queue", kafka_queue_fe); --    ce_kafka_queue = zend_register_internal_class(&ce TSRMLS_CC); -+    ce_kafka_queue = zend_register_internal_class(&ce); -     ce_kafka_queue->create_object = kafka_queue_new; - } /* }}} */ -diff --git a/queue.h b/queue.h -index 8d8ab66..c3ecb78 100644 ---- a/queue.h -+++ b/queue.h -@@ -17,17 +17,12 @@ - */ -  - typedef struct _kafka_queue_object { --#if PHP_MAJOR_VERSION < 7 --    zend_object         std; --#endif -     rd_kafka_queue_t    *rkqu; --    zeval               zrk; --#if PHP_MAJOR_VERSION >= 7 -+    zval               zrk; -     zend_object         std; --#endif - } kafka_queue_object; -  --void kafka_queue_minit(TSRMLS_D); --kafka_queue_object * get_kafka_queue_object(zval *zrkqu TSRMLS_DC); -+void kafka_queue_minit(INIT_FUNC_ARGS); -+kafka_queue_object * get_kafka_queue_object(zval *zrkqu); -  - extern zend_class_entry * ce_kafka_queue; -diff --git a/rdkafka.c b/rdkafka.c -index 2accdd9..50cf5b3 100644 ---- a/rdkafka.c -+++ b/rdkafka.c -@@ -70,17 +70,17 @@ static void stop_consuming_toppar_pp(toppar ** tp) { -     rd_kafka_consume_stop((*tp)->rkt, (*tp)->partition); - } -  --static void stop_consuming(kafka_object * intern TSRMLS_DC) { --    zend_hash_apply(&intern->consuming, (apply_func_t)stop_consuming_toppar_pp TSRMLS_CC); -+static void stop_consuming(kafka_object * intern) { -+    zend_hash_apply(&intern->consuming, (apply_func_t)stop_consuming_toppar_pp); - } -  --static void kafka_free(zend_object *object TSRMLS_DC) /* {{{ */ -+static void kafka_free(zend_object *object) /* {{{ */ - { --    kafka_object *intern = get_custom_object(kafka_object, object); -+    kafka_object *intern = php_kafka_from_obj(kafka_object, object); -  -     if (intern->rk) { -         if (intern->type == RD_KAFKA_CONSUMER) { --            stop_consuming(intern TSRMLS_CC); -+            stop_consuming(intern); -             zend_hash_destroy(&intern->consuming); -             zend_hash_destroy(&intern->queues); -         } -@@ -90,11 +90,9 @@ static void kafka_free(zend_object *object TSRMLS_DC) /* {{{ */ -         intern->rk = NULL; -     } -  --    kafka_conf_callbacks_dtor(&intern->cbs TSRMLS_CC); -+    kafka_conf_callbacks_dtor(&intern->cbs); -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  -@@ -116,7 +114,7 @@ static void kafka_topic_object_pre_free(kafka_topic_object ** pp) { -     zval_ptr_dtor(&intern->zrk); - } -  --static void kafka_init(zval *this_ptr, rd_kafka_type_t type, zval *zconf TSRMLS_DC) /* {{{ */ -+static void kafka_init(zval *this_ptr, rd_kafka_type_t type, zval *zconf) /* {{{ */ - { -     char errstr[512]; -     rd_kafka_t *rk; -@@ -124,14 +122,14 @@ static void kafka_init(zval *this_ptr, rd_kafka_type_t type, zval *zconf TSRMLS_ -     kafka_conf_object *conf_intern; -     rd_kafka_conf_t *conf = NULL; -  --    intern = get_custom_object_zval(kafka_object, this_ptr); -+    intern = Z_RDKAFKA_P(kafka_object, this_ptr); -     intern->type = type; -  -     if (zconf) { --        conf_intern = get_kafka_conf_object(zconf TSRMLS_CC); -+        conf_intern = get_kafka_conf_object(zconf); -         if (conf_intern) { -             conf = rd_kafka_conf_dup(conf_intern->u.conf); --            kafka_conf_callbacks_copy(&intern->cbs, &conf_intern->cbs TSRMLS_CC); -+            kafka_conf_callbacks_copy(&intern->cbs, &conf_intern->cbs); -             intern->cbs.zrk = *this_ptr; -             rd_kafka_conf_set_opaque(conf, &intern->cbs); -         } -@@ -140,7 +138,7 @@ static void kafka_init(zval *this_ptr, rd_kafka_type_t type, zval *zconf TSRMLS_ -     rk = rd_kafka_new(type, conf, errstr, sizeof(errstr)); -  -     if (rk == NULL) { --        zend_throw_exception(ce_kafka_exception, errstr, 0 TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, errstr, 0); -         return; -     } -  -@@ -159,28 +157,28 @@ static void kafka_init(zval *this_ptr, rd_kafka_type_t type, zval *zconf TSRMLS_ - } - /* }}} */ -  --static zend_object_value kafka_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *kafka_new(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     kafka_object *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, kafka_free, NULL); --    SET_OBJECT_HANDLERS(retval, &kafka_object_handlers); -+    retval = &intern->std; -+    retval->handlers = &kafka_object_handlers; -  -     return retval; - } - /* }}} */ -  --kafka_object * get_kafka_object(zval *zrk TSRMLS_DC) -+kafka_object * get_kafka_object(zval *zrk) - { --    kafka_object *ork = get_custom_object_zval(kafka_object, zrk); -+    kafka_object *ork = Z_RDKAFKA_P(kafka_object, zrk); -  -     if (!ork->rk) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Kafka::__construct() has not been called" TSRMLS_CC); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Kafka::__construct() has not been called"); -         return NULL; -     } -  -@@ -241,7 +239,7 @@ int is_consuming_toppar(kafka_object * intern, rd_kafka_topic_t * rkt, int32_t p - /* {{{ private constructor */ - PHP_METHOD(RdKafka, __construct) - { --    zend_throw_exception(NULL, "Private constructor", 0 TSRMLS_CC); -+    zend_throw_exception(NULL, "Private constructor", 0); -     return; - } - /* }}} */ -@@ -257,16 +255,16 @@ PHP_METHOD(RdKafka__Consumer, __construct) -     zval *zconf = NULL; -     zend_error_handling error_handling; -  --    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling TSRMLS_CC); -+    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O!", &zconf, ce_kafka_conf) == FAILURE) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "|O!", &zconf, ce_kafka_conf) == FAILURE) { -+        zend_restore_error_handling(&error_handling); -         return; -     } -  --    kafka_init(getThis(), RD_KAFKA_CONSUMER, zconf TSRMLS_CC); -+    kafka_init(getThis(), RD_KAFKA_CONSUMER, zconf); -  --    zend_restore_error_handling(&error_handling TSRMLS_CC); -+    zend_restore_error_handling(&error_handling); - } - /* }}} */ -  -@@ -282,11 +280,11 @@ PHP_METHOD(RdKafka__Consumer, newQueue) -     kafka_object *intern; -     kafka_queue_object *queue_intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -301,7 +299,7 @@ PHP_METHOD(RdKafka__Consumer, newQueue) -         return; -     } -  --    queue_intern = get_custom_object_zval(kafka_queue_object, return_value); -+    queue_intern = Z_RDKAFKA_P(kafka_queue_object, return_value); -     if (!queue_intern) { -         return; -     } -@@ -311,12 +309,9 @@ PHP_METHOD(RdKafka__Consumer, newQueue) -     // Keep a reference to the parent Kafka object, attempts to ensure that -     // the Queue object is destroyed before the Kafka object. -     // This avoids rd_kafka_destroy() hanging. --#if PHP_MAJOR_VERSION >= 7 -     queue_intern->zrk = *getThis(); --#else --    queue_intern->zrk = getThis(); --#endif --    Z_ADDREF_P(P_ZEVAL(queue_intern->zrk)); -+ -+    Z_ADDREF_P(&queue_intern->zrk); -  -     zend_hash_index_add_ptr(&intern->queues, (zend_ulong)queue_intern, queue_intern); - } -@@ -338,14 +333,14 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__Kafka, addBrokers) - { -     char *broker_list; --    arglen_t broker_list_len; -+    size_t broker_list_len; -     kafka_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &broker_list, &broker_list_len) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &broker_list, &broker_list_len) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -372,17 +367,17 @@ PHP_METHOD(RdKafka__Kafka, getMetadata) -     const rd_kafka_metadata_t *metadata; -     kafka_topic_object *only_orkt = NULL; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "bO!l", &all_topics, &only_zrkt, ce_kafka_topic, &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "bO!l", &all_topics, &only_zrkt, ce_kafka_topic, &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (only_zrkt) { --        only_orkt = get_kafka_topic_object(only_zrkt TSRMLS_CC); -+        only_orkt = get_kafka_topic_object(only_zrkt); -         if (!only_orkt) { -             return; -         } -@@ -391,14 +386,14 @@ PHP_METHOD(RdKafka__Kafka, getMetadata) -     err = rd_kafka_metadata(intern->rk, all_topics, only_orkt ? only_orkt->rkt : NULL, &metadata, timeout_ms); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  --    kafka_metadata_init(return_value, metadata TSRMLS_CC); -+    kafka_metadata_init(return_value, metadata); - } - /* }}} */ -- -+  - /* {{{ proto void RdKafka\Kafka::setLogLevel(int $level) -    Specifies the maximum logging level produced by internal kafka logging and debugging */ -  -@@ -411,11 +406,11 @@ PHP_METHOD(RdKafka__Kafka, setLogLevel) -     kafka_object *intern; -     zend_long level; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &level) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &level) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -435,7 +430,7 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__Kafka, newTopic) - { -     char *topic; --    arglen_t topic_len; -+    size_t topic_len; -     rd_kafka_topic_t *rkt; -     kafka_object *intern; -     kafka_topic_object *topic_intern; -@@ -444,17 +439,17 @@ PHP_METHOD(RdKafka__Kafka, newTopic) -     rd_kafka_topic_conf_t *conf = NULL; -     kafka_conf_object *conf_intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|O!", &topic, &topic_len, &zconf, ce_kafka_topic_conf) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|O!", &topic, &topic_len, &zconf, ce_kafka_topic_conf) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (zconf) { --        conf_intern = get_kafka_conf_object(zconf TSRMLS_CC); -+        conf_intern = get_kafka_conf_object(zconf); -         if (conf_intern) { -             conf = rd_kafka_topic_conf_dup(conf_intern->u.topic_conf); -         } -@@ -481,18 +476,15 @@ PHP_METHOD(RdKafka__Kafka, newTopic) -         return; -     } -  --    topic_intern = get_custom_object_zval(kafka_topic_object, return_value); -+    topic_intern = Z_RDKAFKA_P(kafka_topic_object, return_value); -     if (!topic_intern) { -         return; -     } -  -     topic_intern->rkt = rkt; --#if PHP_MAJOR_VERSION >= 7 -     topic_intern->zrk = *getThis(); --#else --    topic_intern->zrk = getThis(); --#endif --    Z_ADDREF_P(P_ZEVAL(topic_intern->zrk)); -+ -+    Z_ADDREF_P(&topic_intern->zrk); -  -     zend_hash_index_add_ptr(&intern->topics, (zend_ulong)topic_intern, topic_intern); - } -@@ -508,11 +500,11 @@ PHP_METHOD(RdKafka__Kafka, getOutQLen) - { -     kafka_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "") == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -533,11 +525,11 @@ PHP_METHOD(RdKafka__Kafka, poll) -     kafka_object *intern; -     zend_long timeout; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -558,11 +550,11 @@ PHP_METHOD(RdKafka__Kafka, flush) -     kafka_object *intern; -     zend_long timeout; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -584,11 +576,11 @@ PHP_METHOD(RdKafka__Kafka, purge) -     kafka_object *intern; -     zend_long purge_flags; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &purge_flags) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &purge_flags) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -613,20 +605,20 @@ PHP_METHOD(RdKafka__Kafka, queryWatermarkOffsets) - { -     kafka_object *intern; -     char *topic; --    arglen_t topic_length; -+    size_t topic_length; -     long low, high; -     zend_long partition, timeout; -     zval *lowResult, *highResult; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "slzzl", &topic, &topic_length, &partition, &lowResult, &highResult, &timeout) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "slzzl", &topic, &topic_length, &partition, &lowResult, &highResult, &timeout) == FAILURE) { -         return; -     } -  --    ZEVAL_DEREF(lowResult); --    ZEVAL_DEREF(highResult); -+    ZVAL_DEREF(lowResult); -+    ZVAL_DEREF(highResult); -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -634,7 +626,7 @@ PHP_METHOD(RdKafka__Kafka, queryWatermarkOffsets) -     err = rd_kafka_query_watermark_offsets(intern->rk, topic, partition, &low, &high, timeout); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -@@ -657,16 +649,16 @@ PHP_METHOD(RdKafka__Kafka, offsetsForTimes) -     zend_long timeout_ms; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "hl", &htopars, &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "hl", &htopars, &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -  --    topicPartitions = array_arg_to_kafka_topic_partition_list(1, htopars TSRMLS_CC); -+    topicPartitions = array_arg_to_kafka_topic_partition_list(1, htopars); -     if (!topicPartitions) { -         return; -     } -@@ -675,15 +667,14 @@ PHP_METHOD(RdKafka__Kafka, offsetsForTimes) -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { -         rd_kafka_topic_partition_list_destroy(topicPartitions); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } --    kafka_topic_partition_list_to_array(return_value, topicPartitions TSRMLS_CC); -+    kafka_topic_partition_list_to_array(return_value, topicPartitions); -     rd_kafka_topic_partition_list_destroy(topicPartitions); - } - /* }}} */ -  -- - /* {{{ proto void RdKafka::setLogger(mixed $logger) -    Sets the log callback */ -  -@@ -697,11 +688,11 @@ PHP_METHOD(RdKafka__Kafka, setLogger) -     zend_long id; -     void (*logger) (const rd_kafka_t * rk, int level, const char *fac, const char *buf); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &id) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &id) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -719,7 +710,7 @@ PHP_METHOD(RdKafka__Kafka, setLogger) -             logger = kafka_log_syslog_print; -             break; -         default: --            zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Invalid logger" TSRMLS_CC); -+            zend_throw_exception_ex(NULL, 0, "Invalid logger"); -             return; -     } -  -@@ -757,21 +748,20 @@ PHP_METHOD(RdKafka__Producer, __construct) -     zval *zconf = NULL; -     zend_error_handling error_handling; -  --    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling TSRMLS_CC); -+    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O!", &zconf, ce_kafka_conf) == FAILURE) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "|O!", &zconf, ce_kafka_conf) == FAILURE) { -+        zend_restore_error_handling(&error_handling); -         return; -     } -  --    kafka_init(getThis(), RD_KAFKA_PRODUCER, zconf TSRMLS_CC); -+    kafka_init(getThis(), RD_KAFKA_PRODUCER, zconf); -  --    zend_restore_error_handling(&error_handling TSRMLS_CC); -+    zend_restore_error_handling(&error_handling); - } - /* }}} */ -  - #ifdef HAS_RD_KAFKA_TRANSACTIONS -- - /* {{{ proto int RdKafka\Producer::initTransactions(int timeout_ms) -    Initializes transactions, needs to be done before producing and starting a transaction */ - ZEND_BEGIN_ARG_INFO_EX(arginfo_kafka_init_transactions, 0, 0, 1) -@@ -784,11 +774,11 @@ PHP_METHOD(RdKafka__Producer, initTransactions) -     zend_long timeout_ms; -     const rd_kafka_error_t *error; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -799,8 +789,8 @@ PHP_METHOD(RdKafka__Producer, initTransactions) -         return; -     } -  --    create_kafka_error(return_value, error TSRMLS_CC); --    zend_throw_exception_object(return_value TSRMLS_CC); -+    create_kafka_error(return_value, error); -+    zend_throw_exception_object(return_value); - } - /* }}} */ -  -@@ -815,7 +805,7 @@ PHP_METHOD(RdKafka__Producer, beginTransaction) -     kafka_object *intern; -     const rd_kafka_error_t *error; -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -826,8 +816,8 @@ PHP_METHOD(RdKafka__Producer, beginTransaction) -         return; -     } -  --    create_kafka_error(return_value, error TSRMLS_CC); --    zend_throw_exception_object(return_value TSRMLS_CC); -+    create_kafka_error(return_value, error); -+    zend_throw_exception_object(return_value); - } - /* }}} */ -  -@@ -844,11 +834,11 @@ PHP_METHOD(RdKafka__Producer, commitTransaction) -     zend_long timeout_ms; -     const rd_kafka_error_t *error; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -859,8 +849,8 @@ PHP_METHOD(RdKafka__Producer, commitTransaction) -         return; -     } -  --    create_kafka_error(return_value, error TSRMLS_CC); --    zend_throw_exception_object(return_value TSRMLS_CC); -+    create_kafka_error(return_value, error); -+    zend_throw_exception_object(return_value); - } - /* }}} */ -  -@@ -877,11 +867,11 @@ PHP_METHOD(RdKafka__Producer, abortTransaction) -     zend_long timeout_ms; -     const rd_kafka_error_t *error; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &timeout_ms) == FAILURE) { -         return; -     } -  --    intern = get_kafka_object(getThis() TSRMLS_CC); -+    intern = get_kafka_object(getThis()); -     if (!intern) { -         return; -     } -@@ -892,11 +882,10 @@ PHP_METHOD(RdKafka__Producer, abortTransaction) -         return; -     } -  --    create_kafka_error(return_value, error TSRMLS_CC); --    zend_throw_exception_object(return_value TSRMLS_CC); -+    create_kafka_error(return_value, error); -+    zend_throw_exception_object(return_value); - } - /* }}} */ -- - #endif -  - static const zend_function_entry kafka_producer_fe[] = { -@@ -935,11 +924,7 @@ void register_err_constants(INIT_FUNC_ARGS) /* {{{ */ -             len = sizeof(buf)-1; -         } -  --#if PHP_MAJOR_VERSION < 7 --		len += 1; --#endif -- --        zend_register_long_constant(buf, len, desc->code, CONST_CS | CONST_PERSISTENT, module_number TSRMLS_CC); -+        zend_register_long_constant(buf, len, desc->code, CONST_CS | CONST_PERSISTENT, module_number); -     } - } /* }}} */ -  -@@ -985,36 +970,36 @@ PHP_MINIT_FUNCTION(rdkafka) -     kafka_default_object_handlers.clone_obj = NULL; -  - 	kafka_object_handlers = kafka_default_object_handlers; --    set_object_handler_free_obj(&kafka_object_handlers, kafka_free); --    set_object_handler_offset(&kafka_object_handlers, XtOffsetOf(kafka_object, std)); -+    kafka_object_handlers.free_obj = kafka_free; -+    kafka_object_handlers.offset = XtOffsetOf(kafka_object, std); -  -     INIT_CLASS_ENTRY(ce, "RdKafka", kafka_fe); --    ce_kafka = zend_register_internal_class(&ce TSRMLS_CC); -+    ce_kafka = zend_register_internal_class(&ce); -     ce_kafka->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; -     ce_kafka->create_object = kafka_new; -  --    zend_declare_property_null(ce_kafka, ZEND_STRL("error_cb"), ZEND_ACC_PRIVATE TSRMLS_CC); --    zend_declare_property_null(ce_kafka, ZEND_STRL("dr_cb"), ZEND_ACC_PRIVATE TSRMLS_CC); -+    zend_declare_property_null(ce_kafka, ZEND_STRL("error_cb"), ZEND_ACC_PRIVATE); -+    zend_declare_property_null(ce_kafka, ZEND_STRL("dr_cb"), ZEND_ACC_PRIVATE); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "Consumer", kafka_consumer_fe); --    ce_kafka_consumer = rdkafka_register_internal_class_ex(&ce, ce_kafka TSRMLS_CC); -+    ce_kafka_consumer = zend_register_internal_class_ex(&ce, ce_kafka); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "Producer", kafka_producer_fe); --    ce_kafka_producer = rdkafka_register_internal_class_ex(&ce, ce_kafka TSRMLS_CC); -+    ce_kafka_producer = zend_register_internal_class_ex(&ce, ce_kafka); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "Exception", NULL); --    ce_kafka_exception = rdkafka_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C) TSRMLS_CC); -+    ce_kafka_exception = zend_register_internal_class_ex(&ce, zend_ce_exception); -  --    kafka_conf_minit(TSRMLS_C); -+    kafka_conf_minit(INIT_FUNC_ARGS_PASSTHRU); - #ifdef HAS_RD_KAFKA_TRANSACTIONS --    kafka_error_minit(TSRMLS_C); -+    kafka_error_minit(); - #endif --    kafka_kafka_consumer_minit(TSRMLS_C); --    kafka_message_minit(TSRMLS_C); --    kafka_metadata_minit(TSRMLS_C); --    kafka_metadata_topic_partition_minit(TSRMLS_C); --    kafka_queue_minit(TSRMLS_C); --    kafka_topic_minit(TSRMLS_C); -+    kafka_kafka_consumer_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_message_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_metadata_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_metadata_topic_partition_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_queue_minit(INIT_FUNC_ARGS_PASSTHRU); -+    kafka_topic_minit(INIT_FUNC_ARGS_PASSTHRU); -  -     return SUCCESS; - } -diff --git a/tests/bug115.phpt b/tests/bug115.phpt -index 5ea0af8..8c1620d 100644 ---- a/tests/bug115.phpt -+++ b/tests/bug115.phpt -@@ -17,12 +17,6 @@ $conf->setErrorCb(function ($producer, $err, $errstr) { -     printf("%s: %s\n", rd_kafka_err2str($err), $errstr); -     exit; - }); --$conf->setDrMsgCb(function ($producer, $msg) use (&$delivered) { --    if ($msg->err) { --        throw new Exception("Message delivery failed: " . $msg->errstr()); --    } --    $delivered++; --}); - $conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -  - $topicName = sprintf("test_rdkafka_%s", uniqid()); -diff --git a/tests/bug74.phpt b/tests/bug74.phpt -index 8cb23fd..04f4857 100644 ---- a/tests/bug74.phpt -+++ b/tests/bug74.phpt -@@ -1,10 +1,14 @@ - --TEST-- - Bug 74 -+--SKIPIF-- -+<?php -+require __DIR__ . '/integration-tests-check.php'; - --FILE-- - <?php -+require __DIR__ . '/integration-tests-check.php'; -  - $conf = new RdKafka\Conf(); --$conf->set('metadata.broker.list', 'localhost:9092'); -+$conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -  - $consumer = new RdKafka\Consumer($conf); - $topic = $consumer->newTopic("batman", null); -diff --git a/tests/conf_setDefaultTopicConf.phpt b/tests/conf_setDefaultTopicConf.phpt -index 6b48505..ad08f3b 100644 ---- a/tests/conf_setDefaultTopicConf.phpt -+++ b/tests/conf_setDefaultTopicConf.phpt -@@ -2,7 +2,7 @@ - RdKafka\Conf::setDefaultTopicConf() - --SKIPIF-- - <?php --if (!method_exists('RdKafka\Conf', 'setDefaultTopicConf')) { -+if (!method_exists('RdKafka\Conf', 'setDefaultTopicConf') || 7 < PHP_MAJOR_VERSION) { -     echo "skip"; - } - ?> -diff --git a/tests/conf_setDefaultTopicConf8.phpt b/tests/conf_setDefaultTopicConf8.phpt -new file mode 100644 -index 0000000..e5fdfe1 ---- /dev/null -+++ b/tests/conf_setDefaultTopicConf8.phpt -@@ -0,0 +1,38 @@ -+--TEST-- -+RdKafka\Conf::setDefaultTopicConf() -+--SKIPIF-- -+<?php -+if (!method_exists('RdKafka\Conf', 'setDefaultTopicConf') || 8 > PHP_MAJOR_VERSION) { -+    echo "skip"; -+} -+?> -+--FILE-- -+<?php -+ -+$conf = new RdKafka\Conf(); -+ -+echo "Setting valid topic conf\n"; -+$conf->setDefaultTopicConf(new RdKafka\TopicConf()); -+ -+echo "Setting invalid topic conf\n"; -+try { -+    $conf->setDefaultTopicConf($conf); -+} catch(TypeError $error) { -+    echo $error->getMessage() . PHP_EOL; -+    echo $error->getFile() . PHP_EOL; -+    echo $error->getLine() . PHP_EOL; -+    echo $error->getCode(); -+} -+ -+--EXPECTF-- -+Setting valid topic conf -+ -+Deprecated: Method RdKafka\Conf::setDefaultTopicConf() is deprecated in %s%econf_setDefaultTopicConf8.php on line 6 -+Setting invalid topic conf -+ -+Deprecated: Method RdKafka\Conf::setDefaultTopicConf() is deprecated in %s%econf_setDefaultTopicConf8.php on line 10 -+RdKafka\Conf::setDefaultTopicConf(): Argument #1 ($topic_conf) must be of type RdKafka\TopicConf, RdKafka\Conf given -+%s%econf_setDefaultTopicConf8.php -+10 -+0 -+ -diff --git a/tests/message_headers.phpt b/tests/message_headers.phpt -index 61436ae..a244089 100644 ---- a/tests/message_headers.phpt -+++ b/tests/message_headers.phpt -@@ -15,13 +15,16 @@ $conf->setErrorCb(function ($producer, $err, $errstr) { -     printf("%s: %s\n", rd_kafka_err2str($err), $errstr); -     exit; - }); -+$conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -+ -+$consumer = new RdKafka\Consumer($conf); -+ - $conf->setDrMsgCb(function ($producer, $msg) use (&$delivered) { -     if ($msg->err) { -         throw new Exception("Message delivery failed: " . $msg->errstr()); -     } -     $delivered++; - }); --$conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -  - $producer = new RdKafka\Producer($conf); -  -@@ -57,8 +60,6 @@ while ($producer->getOutQLen()) { -  - printf("%d messages delivered\n", $delivered); -  --$consumer = new RdKafka\Consumer($conf); -- - $topic = $consumer->newTopic($topicName); - $topic->consumeStart(0, RD_KAFKA_OFFSET_BEGINNING); -  -diff --git a/tests/produce_consume.phpt b/tests/produce_consume.phpt -index c10ed1e..9f87208 100644 ---- a/tests/produce_consume.phpt -+++ b/tests/produce_consume.phpt -@@ -17,13 +17,17 @@ $conf->setErrorCb(function ($producer, $err, $errstr) { -     printf("%s: %s\n", rd_kafka_err2str($err), $errstr); -     exit; - }); -+ -+$conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -+ -+$consumer = new RdKafka\Consumer($conf); -+ - $conf->setDrMsgCb(function ($producer, $msg) use (&$delivered) { -     if ($msg->err) { -         throw new Exception("Message delivery failed: " . $msg->errstr()); -     } -     $delivered++; - }); --$conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -  - $producer = new RdKafka\Producer($conf); -  -@@ -46,8 +50,6 @@ while ($producer->getOutQLen()) { -  - printf("%d messages delivered\n", $delivered); -  --$consumer = new RdKafka\Consumer($conf); -- - $topic = $consumer->newTopic($topicName); - $topic->consumeStart(0, RD_KAFKA_OFFSET_BEGINNING); -  -diff --git a/tests/produce_consume_queue.phpt b/tests/produce_consume_queue.phpt -index 9e3dda1..275daf7 100644 ---- a/tests/produce_consume_queue.phpt -+++ b/tests/produce_consume_queue.phpt -@@ -10,8 +10,6 @@ require __DIR__ . '/integration-tests-check.php'; - $delivered = 0; -  - $conf = new RdKafka\Conf(); --// Required to detect actual reaching of partition EOF for both topics --$conf->set('enable.partition.eof', 'true'); - if (RD_KAFKA_VERSION >= 0x090000 && false !== getenv('TEST_KAFKA_BROKER_VERSION')) { -     $conf->set('broker.version.fallback', getenv('TEST_KAFKA_BROKER_VERSION')); - } -@@ -53,6 +51,19 @@ while ($producer->getOutQLen()) { -  - printf("%d messages delivered\n", $delivered); -  -+$conf = new RdKafka\Conf(); -+// Required to detect actual reaching of partition EOF for both topics -+$conf->set('enable.partition.eof', 'true'); -+if (RD_KAFKA_VERSION >= 0x090000 && false !== getenv('TEST_KAFKA_BROKER_VERSION')) { -+    $conf->set('broker.version.fallback', getenv('TEST_KAFKA_BROKER_VERSION')); -+} -+$conf->setErrorCb(function ($producer, $err, $errstr) { -+    printf("%s: %s\n", rd_kafka_err2str($err), $errstr); -+    exit; -+}); -+ -+$conf->set('metadata.broker.list', getenv('TEST_KAFKA_BROKERS')); -+ - $consumer = new RdKafka\Consumer($conf); -  - $queue = $consumer->newQueue(); -diff --git a/topic.c b/topic.c -index 63ae06a..bc274d6 100644 ---- a/topic.c -+++ b/topic.c -@@ -43,34 +43,32 @@ typedef struct _php_callback { -     zend_fcall_info_cache fcc; - } php_callback; -  --static void kafka_topic_free(zend_object *object TSRMLS_DC) /* {{{ */ -+static void kafka_topic_free(zend_object *object) /* {{{ */ - { --    kafka_topic_object *intern = get_custom_object(kafka_topic_object, object); -+    kafka_topic_object *intern = php_kafka_from_obj(kafka_topic_object, object); -  --    if (ZE_ISDEF(intern->zrk) && intern->rkt) { --        kafka_object *kafka_intern = get_kafka_object(P_ZEVAL(intern->zrk) TSRMLS_CC); -+    if (Z_TYPE(intern->zrk) != IS_UNDEF && intern->rkt) { -+        kafka_object *kafka_intern = get_kafka_object(&intern->zrk); -         if (kafka_intern) { -             zend_hash_index_del(&kafka_intern->topics, (zend_ulong)intern); -         } -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value kafka_topic_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *kafka_topic_new(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     kafka_topic_object *intern; -  --    intern = alloc_object(intern, class_type); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    intern = zend_object_alloc(sizeof(*intern), class_type); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, kafka_topic_free, NULL); --    SET_OBJECT_HANDLERS(retval, &object_handlers); -+    retval = &intern->std; -+    retval->handlers = &object_handlers; -  -     return retval; - } -@@ -80,8 +78,7 @@ static zend_object_value kafka_topic_new(zend_class_entry *class_type TSRMLS_DC) - static void consume_callback(rd_kafka_message_t *msg, void *opaque) - { -     php_callback *cb = (php_callback*) opaque; --    zeval args[1]; --    TSRMLS_FETCH(); -+    zval args[1]; -  -     if (!opaque) { -         return; -@@ -91,21 +88,21 @@ static void consume_callback(rd_kafka_message_t *msg, void *opaque) -         return; -     } -  --    MAKE_STD_ZEVAL(args[0]); -+    ZVAL_NULL(&args[0]); -  --    kafka_message_new(P_ZEVAL(args[0]), msg TSRMLS_CC); -+    kafka_message_new(&args[0], msg); -  --    rdkafka_call_function(&cb->fci, &cb->fcc, NULL, 1, args TSRMLS_CC); -+    rdkafka_call_function(&cb->fci, &cb->fcc, NULL, 1, args); -  -     zval_ptr_dtor(&args[0]); - } -  --kafka_topic_object * get_kafka_topic_object(zval *zrkt TSRMLS_DC) -+kafka_topic_object * get_kafka_topic_object(zval *zrkt) - { --    kafka_topic_object *orkt = get_custom_object_zval(kafka_topic_object, zrkt); -+    kafka_topic_object *orkt = Z_RDKAFKA_P(kafka_topic_object, zrkt); -  -     if (!orkt->rkt) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\Topic::__construct() has not been called" TSRMLS_CC); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\Topic::__construct() has not been called"); -         return NULL; -     } -  -@@ -128,21 +125,21 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeCallback) -     long result; -     kafka_topic_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llf", &partition, &timeout_ms, &cb.fci, &cb.fcc) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "llf", &partition, &timeout_ms, &cb.fci, &cb.fcc) == FAILURE) { -         return; -     } -  -     if (partition < 0 || partition > 0x7FFFFFFF) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -  --    Z_ADDREF_P(P_ZEVAL(cb.fci.function_name)); -+    Z_ADDREF_P(&cb.fci.function_name); -  -     result = rd_kafka_consume_callback(intern->rkt, partition, timeout_ms, consume_callback, &cb); -  -@@ -172,26 +169,26 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeQueueStart) -     rd_kafka_resp_err_t err; -     kafka_object *kafka_intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llO", &partition, &offset, &zrkqu, ce_kafka_queue) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "llO", &partition, &offset, &zrkqu, ce_kafka_queue) == FAILURE) { -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -  --    queue_intern = get_kafka_queue_object(zrkqu TSRMLS_CC); -+    queue_intern = get_kafka_queue_object(zrkqu); -     if (!queue_intern) { -         return; -     } -  --    kafka_intern = get_kafka_object(P_ZEVAL(intern->zrk) TSRMLS_CC); -+    kafka_intern = get_kafka_object(&intern->zrk); -     if (!kafka_intern) { -         return; -     } -@@ -199,7 +196,7 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeQueueStart) -     if (is_consuming_toppar(kafka_intern, intern->rkt, partition)) { -         zend_throw_exception_ex( -             ce_kafka_exception, --            0 TSRMLS_CC, -+            0, -             "%s:" ZEND_LONG_FMT " is already being consumed by the same Consumer instance", -             rd_kafka_topic_name(intern->rkt), -             partition -@@ -211,7 +208,7 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeQueueStart) -  -     if (ret == -1) { -         err = rd_kafka_last_error(); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -@@ -236,21 +233,21 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeStart) -     rd_kafka_resp_err_t err; -     kafka_object *kafka_intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &partition, &offset) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &partition, &offset) == FAILURE) { -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -  --    kafka_intern = get_kafka_object(P_ZEVAL(intern->zrk) TSRMLS_CC); -+    kafka_intern = get_kafka_object(&intern->zrk); -     if (!kafka_intern) { -         return; -     } -@@ -258,7 +255,7 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeStart) -     if (is_consuming_toppar(kafka_intern, intern->rkt, partition)) { -         zend_throw_exception_ex( -             ce_kafka_exception, --            0 TSRMLS_CC, -+            0, -             "%s:" ZEND_LONG_FMT " is already being consumed by the same Consumer instance", -             rd_kafka_topic_name(intern->rkt), -             partition -@@ -270,7 +267,7 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeStart) -  -     if (ret == -1) { -         err = rd_kafka_last_error(); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -@@ -293,21 +290,21 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeStop) -     rd_kafka_resp_err_t err; -     kafka_object *kafka_intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &partition) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &partition) == FAILURE) { -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -  --    kafka_intern = get_kafka_object(P_ZEVAL(intern->zrk) TSRMLS_CC); -+    kafka_intern = get_kafka_object(&intern->zrk); -     if (!kafka_intern) { -         return; -     } -@@ -316,7 +313,7 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeStop) -  -     if (ret == -1) { -         err = rd_kafka_last_error(); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -@@ -340,16 +337,16 @@ PHP_METHOD(RdKafka__ConsumerTopic, consume) -     rd_kafka_message_t *message; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &partition, &timeout_ms) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &partition, &timeout_ms) == FAILURE) { -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -@@ -361,11 +358,11 @@ PHP_METHOD(RdKafka__ConsumerTopic, consume) -         if (err == RD_KAFKA_RESP_ERR__TIMED_OUT) { -             return; -         } --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  --    kafka_message_new(return_value, message TSRMLS_CC); -+    kafka_message_new(return_value, message); -  -     rd_kafka_message_destroy(message); - } -@@ -388,21 +385,21 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeBatch) -     rd_kafka_message_t **rkmessages; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &partition, &timeout_ms, &batch_size) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll", &partition, &timeout_ms, &batch_size) == FAILURE) { -         return; -     } -  -     if (0 >= batch_size) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for batch_size", batch_size TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for batch_size", batch_size); -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -@@ -414,12 +411,12 @@ PHP_METHOD(RdKafka__ConsumerTopic, consumeBatch) -     if (result == -1) { -         free(rkmessages); -         err = rd_kafka_last_error(); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } -  -     if (result >= 0) { --        kafka_message_list_to_array(return_value, rkmessages, result TSRMLS_CC); -+        kafka_message_list_to_array(return_value, rkmessages, result); -         for (i = 0; i < result; ++i) { -             rd_kafka_message_destroy(rkmessages[i]); -         } -@@ -443,16 +440,16 @@ PHP_METHOD(RdKafka__ConsumerTopic, offsetStore) -     zend_long offset; -     rd_kafka_resp_err_t err; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &partition, &offset) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &partition, &offset) == FAILURE) { -         return; -     } -  -     if (partition < 0 || partition > 0x7FFFFFFF) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -@@ -460,7 +457,7 @@ PHP_METHOD(RdKafka__ConsumerTopic, offsetStore) -     err = rd_kafka_offset_store(intern->rkt, partition, offset); -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -502,34 +499,34 @@ PHP_METHOD(RdKafka__ProducerTopic, produce) -     zend_long partition; -     zend_long msgflags; -     char *payload = NULL; --    arglen_t payload_len = 0; -+    size_t payload_len = 0; -     char *key = NULL; --    arglen_t key_len = 0; -+    size_t key_len = 0; -     int ret; -     rd_kafka_resp_err_t err; -     kafka_topic_object *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|s!s!", &partition, &msgflags, &payload, &payload_len, &key, &key_len) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|s!s!", &partition, &msgflags, &payload, &payload_len, &key, &key_len) == FAILURE) { -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  -     if (msgflags != 0 && msgflags != RD_KAFKA_MSG_F_BLOCK) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Invalid value '%ld' for $msgflags", msgflags TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Invalid value '%ld' for $msgflags", msgflags); -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -  -     ret = rd_kafka_produce(intern->rkt, partition, msgflags | RD_KAFKA_MSG_F_COPY, payload, payload_len, key, key_len, NULL); -  -     if (ret == -1) { -         err = rd_kafka_last_error(); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -553,31 +550,31 @@ PHP_METHOD(RdKafka__ProducerTopic, producev) -     zend_long partition; -     zend_long msgflags; -     char *payload = NULL; --    arglen_t payload_len = 0; -+    size_t payload_len = 0; -     char *key = NULL; --    arglen_t key_len = 0; -+    size_t key_len = 0; -     rd_kafka_resp_err_t err; -     kafka_topic_object *intern; -     kafka_object *kafka_intern; -     HashTable *headersParam = NULL; -     HashPosition headersParamPos; -     char *header_key; --    zeval *header_value; -+    zval *header_value; -     rd_kafka_headers_t *headers; -     zend_long timestamp_ms = 0; -     zend_bool timestamp_ms_is_null = 0; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|s!s!h!l!", &partition, &msgflags, &payload, &payload_len, &key, &key_len, &headersParam, ×tamp_ms, ×tamp_ms_is_null) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|s!s!h!l!", &partition, &msgflags, &payload, &payload_len, &key, &key_len, &headersParam, ×tamp_ms, ×tamp_ms_is_null) == FAILURE) { -         return; -     } -  -     if (partition != RD_KAFKA_PARTITION_UA && (partition < 0 || partition > 0x7FFFFFFF)) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Out of range value '%ld' for $partition", partition TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Out of range value '%ld' for $partition", partition); -         return; -     } -  -     if (msgflags != 0 && msgflags != RD_KAFKA_MSG_F_BLOCK) { --        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Invalid value '%ld' for $msgflags", msgflags TSRMLS_CC); -+        zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Invalid value '%ld' for $msgflags", msgflags); -         return; -     } -  -@@ -585,12 +582,12 @@ PHP_METHOD(RdKafka__ProducerTopic, producev) -         timestamp_ms = 0; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -  -     if (headersParam != NULL && zend_hash_num_elements(headersParam) > 0) { -         headers = rd_kafka_headers_new(zend_hash_num_elements(headersParam)); -         for (zend_hash_internal_pointer_reset_ex(headersParam, &headersParamPos); --                (header_value = rdkafka_hash_get_current_data_ex(headersParam, &headersParamPos)) != NULL && -+                (header_value = zend_hash_get_current_data_ex(headersParam, &headersParamPos)) != NULL && -                 (header_key = rdkafka_hash_get_current_key_ex(headersParam, &headersParamPos)) != NULL; -                 zend_hash_move_forward_ex(headersParam, &headersParamPos)) { -             convert_to_string_ex(header_value); -@@ -598,15 +595,15 @@ PHP_METHOD(RdKafka__ProducerTopic, producev) -                 headers, -                 header_key, -                 -1, // Auto detect header title length --                Z_STRVAL_P(ZEVAL(header_value)), --                Z_STRLEN_P(ZEVAL(header_value)) -+                Z_STRVAL_P(header_value), -+                Z_STRLEN_P(header_value) -             ); -         } -     } else { -         headers = rd_kafka_headers_new(0); -     } -  --    kafka_intern = get_kafka_object(P_ZEVAL(intern->zrk) TSRMLS_CC); -+    kafka_intern = get_kafka_object(&intern->zrk); -     if (!kafka_intern) { -         return; -     } -@@ -625,7 +622,7 @@ PHP_METHOD(RdKafka__ProducerTopic, producev) -  -     if (err != RD_KAFKA_RESP_ERR_NO_ERROR) { -         rd_kafka_headers_destroy(headers); --        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err TSRMLS_CC); -+        zend_throw_exception(ce_kafka_exception, rd_kafka_err2str(err), err); -         return; -     } - } -@@ -654,12 +651,12 @@ PHP_METHOD(RdKafka__Topic, getName) -         return; -     } -  --    intern = get_kafka_topic_object(getThis() TSRMLS_CC); -+    intern = get_kafka_topic_object(getThis()); -     if (!intern) { -         return; -     } -  --    RDKAFKA_RETURN_STRING(rd_kafka_topic_name(intern->rkt)); -+    RETURN_STRING(rd_kafka_topic_name(intern->rkt)); - } - /* }}} */ -  -@@ -668,26 +665,26 @@ static const zend_function_entry kafka_topic_fe[] = { -     PHP_FE_END - }; -  --void kafka_topic_minit(TSRMLS_D) { /* {{{ */ -+void kafka_topic_minit(INIT_FUNC_ARGS) { /* {{{ */ -  -     zend_class_entry ce; -  -     memcpy(&object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); -     object_handlers.clone_obj = NULL; --    set_object_handler_free_obj(&object_handlers, kafka_topic_free); --    set_object_handler_offset(&object_handlers, XtOffsetOf(kafka_topic_object, std)); -+    object_handlers.free_obj = kafka_topic_free; -+    object_handlers.offset = XtOffsetOf(kafka_topic_object, std); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "Topic", kafka_topic_fe); --    ce_kafka_topic = zend_register_internal_class(&ce TSRMLS_CC); -+    ce_kafka_topic = zend_register_internal_class(&ce); -     ce_kafka_topic->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; -     ce_kafka_topic->create_object = kafka_topic_new; -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "ConsumerTopic", kafka_consumer_topic_fe); --    ce_kafka_consumer_topic = rdkafka_register_internal_class_ex(&ce, ce_kafka_topic TSRMLS_CC); -+    ce_kafka_consumer_topic = zend_register_internal_class_ex(&ce, ce_kafka_topic); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "KafkaConsumerTopic", kafka_kafka_consumer_topic_fe); --    ce_kafka_kafka_consumer_topic = rdkafka_register_internal_class_ex(&ce, ce_kafka_topic TSRMLS_CC); -+    ce_kafka_kafka_consumer_topic = zend_register_internal_class_ex(&ce, ce_kafka_topic); -  -     INIT_NS_CLASS_ENTRY(ce, "RdKafka", "ProducerTopic", kafka_producer_topic_fe); --    ce_kafka_producer_topic = rdkafka_register_internal_class_ex(&ce, ce_kafka_topic TSRMLS_CC); -+    ce_kafka_producer_topic = zend_register_internal_class_ex(&ce, ce_kafka_topic); - } /* }}} */ -diff --git a/topic.h b/topic.h -index 07f49ae..4e712e9 100644 ---- a/topic.h -+++ b/topic.h -@@ -16,21 +16,14 @@ -   +----------------------------------------------------------------------+ - */ -  --#include "zeval.h" -- - typedef struct _kafka_topic_object { --#if PHP_MAJOR_VERSION < 7 --    zend_object         std; --#endif -     rd_kafka_topic_t    *rkt; --    zeval               zrk; --#if PHP_MAJOR_VERSION >= 7 -+    zval               zrk; -     zend_object         std; --#endif - } kafka_topic_object; -  --void kafka_topic_minit(TSRMLS_D); --kafka_topic_object * get_kafka_topic_object(zval *zrkt TSRMLS_DC); -+void kafka_topic_minit(INIT_FUNC_ARGS); -+kafka_topic_object * get_kafka_topic_object(zval *zrkt); -  - extern zend_class_entry * ce_kafka_consumer_topic; - extern zend_class_entry * ce_kafka_kafka_consumer_topic; -diff --git a/topic_partition.c b/topic_partition.c -index 2e6d334..9d1b1f7 100644 ---- a/topic_partition.c -+++ b/topic_partition.c -@@ -29,64 +29,61 @@ - #include "Zend/zend_exceptions.h" - #include "ext/spl/spl_exceptions.h" - #include "topic_partition.h" --#include "zeval.h" -  - typedef kafka_topic_partition_intern object_intern; -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC); -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp); -  - zend_class_entry * ce_kafka_topic_partition; -  - static zend_object_handlers handlers; -  --static void free_object(zend_object *object TSRMLS_DC) /* {{{ */ -+static void free_object(zend_object *object) /* {{{ */ - { --    object_intern *intern = get_custom_object(object_intern, object); -+    object_intern *intern = php_kafka_from_obj(object_intern, object); -  -     if (intern->topic) { -         efree(intern->topic); -     } -  --    zend_object_std_dtor(&intern->std TSRMLS_CC); -- --    free_custom_object(intern); -+    zend_object_std_dtor(&intern->std); - } - /* }}} */ -  --static zend_object_value create_object(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ -+static zend_object *create_object(zend_class_entry *class_type) /* {{{ */ - { --    zend_object_value retval; -+    zend_object* retval; -     object_intern *intern; -  -     intern = ecalloc(1, sizeof(*intern)); --    zend_object_std_init(&intern->std, class_type TSRMLS_CC); -+    zend_object_std_init(&intern->std, class_type); -     object_properties_init(&intern->std, class_type); -  --    STORE_OBJECT(retval, intern, (zend_objects_store_dtor_t) zend_objects_destroy_object, free_object, NULL); --    SET_OBJECT_HANDLERS(retval, &handlers); -+    retval = &intern->std; -+    retval->handlers = &handlers; -  -     return retval; - } - /* }}} */ -  --static object_intern * get_object(zval *z TSRMLS_DC) /* {{{ */ -+static object_intern * get_object(zval *z) /* {{{ */ - { --    object_intern * intern = get_custom_object_zval(object_intern, z); -+    object_intern *intern = Z_RDKAFKA_P(object_intern, z); -  -     if (!intern->topic) { --        zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "RdKafka\\TopicPartition::__construct() has not been called"); -+        zend_throw_exception_ex(NULL, 0, "RdKafka\\TopicPartition::__construct() has not been called"); -         return NULL; -     } -  -     return intern; - } /* }}} */ -  --kafka_topic_partition_intern * get_topic_partition_object(zval *z TSRMLS_DC) /* {{{ */ -+kafka_topic_partition_intern * get_topic_partition_object(zval *z) /* {{{ */ - { --    return get_object(z TSRMLS_CC); -+    return get_object(z); - } /* }}} */ -  --static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -+static HashTable *get_debug_info(Z_RDKAFKA_OBJ *object, int *is_temp) /* {{{ */ - { -     zval ary; -     object_intern *intern; -@@ -95,13 +92,14 @@ static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ -  -     array_init(&ary); -  --    intern = get_object(object TSRMLS_CC); -+    intern = rdkafka_get_debug_object(object_intern, object); -+ -     if (!intern) { -         return Z_ARRVAL(ary); -     } -  -     if (intern->topic) { --        rdkafka_add_assoc_string(&ary, "topic", intern->topic); -+        add_assoc_string(&ary, "topic", intern->topic); -     } else { -         add_assoc_null(&ary, "topic"); -     } -@@ -113,11 +111,11 @@ static HashTable *get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */ - } - /* }}} */ -  --void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int64_t offset TSRMLS_DC) /* {{{ */ -+void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int64_t offset) /* {{{ */ - { -     object_intern *intern; -  --    intern = get_custom_object_zval(object_intern, zobj); -+    intern = Z_RDKAFKA_P(object_intern, zobj); -     if (!intern) { -         return; -     } -@@ -131,51 +129,51 @@ void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int -     intern->offset = offset; - } /* }}} */ -  --void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list TSRMLS_DC) /* {{{ */ -+void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list) /* {{{ */ - { -     rd_kafka_topic_partition_t *topar; --    zeval ztopar; -+    zval ztopar; -     int i; -  -     array_init_size(return_value, list->cnt); -  -     for (i = 0; i < list->cnt; i++) { -         topar = &list->elems[i]; --        MAKE_STD_ZEVAL(ztopar); --        object_init_ex(P_ZEVAL(ztopar), ce_kafka_topic_partition); --        kafka_topic_partition_init(P_ZEVAL(ztopar), topar->topic, topar->partition, topar->offset TSRMLS_CC); --        add_next_index_zval(return_value, P_ZEVAL(ztopar)); -+        ZVAL_NULL(&ztopar); -+        object_init_ex(&ztopar, ce_kafka_topic_partition); -+        kafka_topic_partition_init(&ztopar, topar->topic, topar->partition, topar->offset); -+        add_next_index_zval(return_value, &ztopar); -     } - } /* }}} */ -  --rd_kafka_topic_partition_list_t * array_arg_to_kafka_topic_partition_list(int argnum, HashTable *ary TSRMLS_DC) { /* {{{ */ -+rd_kafka_topic_partition_list_t * array_arg_to_kafka_topic_partition_list(int argnum, HashTable *ary) { /* {{{ */ -  -     HashPosition pos; -     rd_kafka_topic_partition_list_t *list; --    zeval *zv; -+    zval *zv; -  -     list = rd_kafka_topic_partition_list_new(zend_hash_num_elements(ary)); -  -     for (zend_hash_internal_pointer_reset_ex(ary, &pos); --            (zv = rdkafka_hash_get_current_data_ex(ary, &pos)) != NULL; -+            (zv = zend_hash_get_current_data_ex(ary, &pos)) != NULL; -             zend_hash_move_forward_ex(ary, &pos)) { -         kafka_topic_partition_intern *topar_intern; -         rd_kafka_topic_partition_t *topar; -  --        if (Z_TYPE_P(ZEVAL(zv)) != IS_OBJECT || !instanceof_function(Z_OBJCE_P(ZEVAL(zv)), ce_kafka_topic_partition TSRMLS_CC)) { -+        if (Z_TYPE_P(zv) != IS_OBJECT || !instanceof_function(Z_OBJCE_P(zv), ce_kafka_topic_partition)) { -             const char *space; --            const char *class_name = get_active_class_name(&space TSRMLS_CC); -+            const char *class_name = get_active_class_name(&space); -             rd_kafka_topic_partition_list_destroy(list); -             php_error(E_ERROR, -                     "Argument %d passed to %s%s%s() must be an array of RdKafka\\TopicPartition, at least one element is a(n) %s", -                     argnum, -                     class_name, space, --                    get_active_function_name(TSRMLS_C), --                    zend_zval_type_name(ZEVAL(zv))); -+                    get_active_function_name(), -+                    zend_zval_type_name(zv)); -             return NULL; -         } -  --        topar_intern = get_topic_partition_object(ZEVAL(zv) TSRMLS_CC); -+        topar_intern = get_topic_partition_object(zv); -         if (!topar_intern) { -             rd_kafka_topic_partition_list_destroy(list); -             return NULL; -@@ -201,21 +199,21 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__TopicPartition, __construct) - { -     char *topic; --    arglen_t topic_len; -+    size_t topic_len; -     zend_long partition; -     zend_long offset = 0; -     zend_error_handling error_handling; -  --    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling TSRMLS_CC); -+    zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling); -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", &topic, &topic_len, &partition, &offset) == FAILURE) { --        zend_restore_error_handling(&error_handling TSRMLS_CC); -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l", &topic, &topic_len, &partition, &offset) == FAILURE) { -+        zend_restore_error_handling(&error_handling); -         return; -     } -  --    kafka_topic_partition_init(getThis(), topic, partition, offset TSRMLS_CC); -+    kafka_topic_partition_init(getThis(), topic, partition, offset); -  --    zend_restore_error_handling(&error_handling TSRMLS_CC); -+    zend_restore_error_handling(&error_handling); - } - /* }}} */ -  -@@ -233,13 +231,13 @@ PHP_METHOD(RdKafka__TopicPartition, getTopic) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -  -     if (intern->topic) { --        RDKAFKA_RETURN_STRING(intern->topic); -+        RETURN_STRING(intern->topic); -     } else { -         RETURN_NULL(); -     } -@@ -256,14 +254,14 @@ ZEND_END_ARG_INFO() - PHP_METHOD(RdKafka__TopicPartition, setTopic) - { -     char * topic; --    arglen_t topic_len; -+    size_t topic_len; -     object_intern *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &topic, &topic_len) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &topic, &topic_len) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -292,7 +290,7 @@ PHP_METHOD(RdKafka__TopicPartition, getPartition) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -313,11 +311,11 @@ PHP_METHOD(RdKafka__TopicPartition, setPartition) -     zend_long partition; -     object_intern *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &partition) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &partition) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -342,7 +340,7 @@ PHP_METHOD(RdKafka__TopicPartition, getOffset) -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -363,11 +361,11 @@ PHP_METHOD(RdKafka__TopicPartition, setOffset) -     zend_long offset; -     object_intern *intern; -  --    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &offset) == FAILURE) { -+    if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &offset) == FAILURE) { -         return; -     } -  --    intern = get_object(getThis() TSRMLS_CC); -+    intern = get_object(getThis()); -     if (!intern) { -         return; -     } -@@ -389,16 +387,16 @@ static const zend_function_entry fe[] = { /* {{{ */ -     PHP_FE_END - }; /* }}} */ -  --void kafka_metadata_topic_partition_minit(TSRMLS_D) /* {{{ */ -+void kafka_metadata_topic_partition_minit(INIT_FUNC_ARGS) /* {{{ */ - { -     zend_class_entry tmpce; -  -     INIT_NS_CLASS_ENTRY(tmpce, "RdKafka", "TopicPartition", fe); --    ce_kafka_topic_partition = zend_register_internal_class(&tmpce TSRMLS_CC); -+    ce_kafka_topic_partition = zend_register_internal_class(&tmpce); -     ce_kafka_topic_partition->create_object = create_object; -  -     handlers = kafka_default_object_handlers; -     handlers.get_debug_info = get_debug_info; --    set_object_handler_free_obj(&handlers, free_object); --    set_object_handler_offset(&handlers, XtOffsetOf(object_intern, std)); -+    handlers.free_obj = free_object; -+    handlers.offset = XtOffsetOf(object_intern, std); - } /* }}} */ -diff --git a/topic_partition.h b/topic_partition.h -index cbc0f43..f2d405d 100644 ---- a/topic_partition.h -+++ b/topic_partition.h -@@ -17,23 +17,18 @@ - */ -  - typedef struct _kafka_topic_partition_intern { --#if PHP_MAJOR_VERSION < 7 --    zend_object std; --#endif -     char        *topic; -     int32_t     partition; -     int64_t     offset; --#if PHP_MAJOR_VERSION >= 7 -     zend_object std; --#endif - } kafka_topic_partition_intern; -  --void kafka_metadata_topic_partition_minit(TSRMLS_D); -+void kafka_metadata_topic_partition_minit(INIT_FUNC_ARGS); -  --kafka_topic_partition_intern * get_topic_partition_object(zval *z TSRMLS_DC); --void kafka_topic_partition_init(zval *z, char *topic, int32_t partition, int64_t offset TSRMLS_DC); -+kafka_topic_partition_intern * get_topic_partition_object(zval *z); -+void kafka_topic_partition_init(zval *z, char *topic, int32_t partition, int64_t offset); -  --void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list TSRMLS_DC); --rd_kafka_topic_partition_list_t * array_arg_to_kafka_topic_partition_list(int argnum, HashTable *ary TSRMLS_DC); -+void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list); -+rd_kafka_topic_partition_list_t * array_arg_to_kafka_topic_partition_list(int argnum, HashTable *ary); -  - extern zend_class_entry * ce_kafka_topic_partition;  | 
