diff options
Diffstat (limited to 'php/ext/google/protobuf/def.c')
-rw-r--r-- | php/ext/google/protobuf/def.c | 57 |
1 files changed, 20 insertions, 37 deletions
diff --git a/php/ext/google/protobuf/def.c b/php/ext/google/protobuf/def.c index f885c145..421b84e5 100644 --- a/php/ext/google/protobuf/def.c +++ b/php/ext/google/protobuf/def.c @@ -115,33 +115,6 @@ static void append_map_entry_name(char *result, const char *field_name, check_upb_status(&status, msg); \ } while (0) -// Define PHP class -#define DEFINE_PROTOBUF_INIT_CLASS(CLASSNAME, CAMELNAME, LOWERNAME) \ - PHP_PROTO_INIT_CLASS_START(CLASSNAME, CAMELNAME, LOWERNAME) \ - PHP_PROTO_INIT_CLASS_END - -#define DEFINE_PROTOBUF_CREATE(NAME, LOWERNAME) \ - PHP_PROTO_OBJECT_CREATE_START(NAME, LOWERNAME) \ - LOWERNAME##_init_c_instance(intern TSRMLS_CC); \ - PHP_PROTO_OBJECT_CREATE_END(NAME, LOWERNAME) - -#define DEFINE_PROTOBUF_FREE(CAMELNAME, LOWERNAME) \ - PHP_PROTO_OBJECT_FREE_START(CAMELNAME, LOWERNAME) \ - LOWERNAME##_free_c(intern TSRMLS_CC); \ - PHP_PROTO_OBJECT_FREE_END - -#define DEFINE_PROTOBUF_DTOR(CAMELNAME, LOWERNAME) \ - PHP_PROTO_OBJECT_DTOR_START(CAMELNAME, LOWERNAME) \ - PHP_PROTO_OBJECT_DTOR_END - -#define DEFINE_CLASS(NAME, LOWERNAME, string_name) \ - zend_class_entry *LOWERNAME##_type; \ - zend_object_handlers *LOWERNAME##_handlers; \ - DEFINE_PROTOBUF_FREE(NAME, LOWERNAME) \ - DEFINE_PROTOBUF_DTOR(NAME, LOWERNAME) \ - DEFINE_PROTOBUF_CREATE(NAME, LOWERNAME) \ - DEFINE_PROTOBUF_INIT_CLASS(string_name, NAME, LOWERNAME) - // ----------------------------------------------------------------------------- // GPBType // ----------------------------------------------------------------------------- @@ -657,7 +630,7 @@ zend_object *internal_generated_pool_php; #endif InternalDescriptorPool *generated_pool; // The actual generated pool -static void init_generated_pool_once(TSRMLS_D) { +void init_generated_pool_once(TSRMLS_D) { if (generated_pool == NULL) { #if PHP_MAJOR_VERSION < 7 MAKE_STD_ZVAL(generated_pool_php); @@ -843,18 +816,11 @@ static void convert_to_class_name_inplace(const char *package, memcpy(classname + i, prefix, prefix_len); } -PHP_METHOD(InternalDescriptorPool, internalAddGeneratedFile) { - char *data = NULL; - PHP_PROTO_SIZE data_len; +void internal_add_generated_file(const char *data, PHP_PROTO_SIZE data_len, + InternalDescriptorPool *pool TSRMLS_DC) { upb_filedef **files; size_t i; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == - FAILURE) { - return; - } - - InternalDescriptorPool *pool = UNBOX(InternalDescriptorPool, getThis()); CHECK_UPB(files = upb_loaddescriptor(data, data_len, &pool, &status), "Parse binary descriptors to internal descriptors failed"); @@ -913,6 +879,8 @@ PHP_METHOD(InternalDescriptorPool, internalAddGeneratedFile) { desc->klass = PHP_PROTO_CE_UNREF(pce); \ } \ add_ce_obj(desc->klass, desc_php); \ + add_proto_obj(upb_##def_type_lower##_fullname(desc->def_type_lower), \ + desc_php); \ efree(classname); \ break; \ } @@ -939,6 +907,21 @@ PHP_METHOD(InternalDescriptorPool, internalAddGeneratedFile) { upb_gfree(files); } +PHP_METHOD(InternalDescriptorPool, internalAddGeneratedFile) { + char *data = NULL; + PHP_PROTO_SIZE data_len; + upb_filedef **files; + size_t i; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == + FAILURE) { + return; + } + + InternalDescriptorPool *pool = UNBOX(InternalDescriptorPool, getThis()); + internal_add_generated_file(data, data_len, pool TSRMLS_CC); +} + PHP_METHOD(DescriptorPool, getDescriptorByClassName) { DescriptorPool *public_pool = UNBOX(DescriptorPool, getThis()); InternalDescriptorPool *pool = public_pool->intern; |