@@ -192,66 +192,44 @@ void InternalDescriptorPool_add_generated_file(
192192 for (i = 0 ; i < upb_filedef_defcount (files[0 ]); i++) {
193193 const upb_def *def = upb_filedef_def (files[0 ], i);
194194 switch (upb_def_type (def)) {
195- case UPB_DEF_MSG : {
196- const upb_msgdef *msgdef = upb_downcast_msgdef (def);
197- const char *fullname = upb_msgdef_fullname (msgdef);
198- const char *php_namespace = upb_filedef_phpnamespace (files[0 ]);
199- const char *prefix_given = upb_filedef_phpprefix (files[0 ]);
200- size_t classname_len = strlen (fullname) + 5 ;
201- if (prefix_given != NULL ) {
202- classname_len += strlen (prefix_given);
203- }
204- if (php_namespace != NULL ) {
205- classname_len += strlen (php_namespace);
206- }
207- char *classname = ALLOC_N (char , classname_len);
208- memset (classname, 0 , classname_len);
209- const char *package = upb_filedef_package (files[0 ]);
210- classname_no_prefix (fullname, package, classname);
211- const char *prefix = classname_prefix (classname, prefix_given, package);
212- convert_to_class_name_inplace (package, php_namespace, prefix, classname);
213- register_upbdef (classname, def);
214- FREE (classname);
215- break ;
216- }
217- // #define CASE_TYPE(def_type, def_type_lower, desc_type, desc_type_lower) \
218- // case UPB_DEF_##def_type: { \
219- // const upb_##def_type_lower *def_type_lower = \
220- // upb_downcast_##def_type_lower(def); \
221- // /* Unlike other messages, MapEntry is shared by all map fields and doesn't \
222- // * have generated PHP class.*/ \
223- // if (upb_def_type(def) == UPB_DEF_MSG && \
224- // upb_msgdef_mapentry(upb_downcast_msgdef(def))) { \
225- // break; \
226- // } \
227- // /* Prepend '.' to package name to make it absolute. In the 5 additional \
228- // * bytes allocated, one for '.', one for trailing 0, and 3 for 'GPB' if \
229- // * given message is google.protobuf.Empty.*/ \
230- // const char *fullname = upb_##def_type_lower##_fullname(def_type_lower); \
231- // const char *php_namespace = upb_filedef_phpnamespace(files[0]); \
232- // const char *prefix_given = upb_filedef_phpprefix(files[0]); \
233- // size_t classname_len = strlen(fullname) + 5; \
234- // if (prefix_given != NULL) { \
235- // classname_len += strlen(prefix_given); \
236- // } \
237- // if (php_namespace != NULL) { \
238- // classname_len += strlen(php_namespace); \
239- // } \
240- // char *classname = ALLOC_N(char, classname_len); \
241- // const char *package = upb_filedef_package(files[0]); \
242- // classname_no_prefix(fullname, package, classname); \
243- // const char *prefix = classname_prefix(classname, prefix_given, package); \
244- // convert_to_class_name_inplace(package, php_namespace, prefix, classname); \
245- // PROTO_CLASS* klass = lookup_class(classname); \
246- // add_class2def(klass, def); \
247- // FREE(classname); \
248- // break; \
249- // }
250- //
251- // CASE_TYPE(MSG, msgdef, Descriptor, descriptor)
252- // CASE_TYPE(ENUM, enumdef, EnumDescriptor, enum_descriptor)
253- // #undef CASE_TYPE
254- //
195+ #define CASE_TYPE (def_type, def_type_lower, desc_type ) \
196+ case UPB_DEF_ ##def_type: { \
197+ const upb_##def_type_lower *def_type_lower = \
198+ upb_downcast_##def_type_lower (def); \
199+ /* Unlike other messages, MapEntry is shared by all map fields and doesn't \
200+ * have generated PHP class.*/ \
201+ if (upb_def_type (def) == UPB_DEF_MSG && \
202+ upb_msgdef_mapentry (upb_downcast_msgdef (def))) { \
203+ break ; \
204+ } \
205+ /* Prepend '.' to package name to make it absolute. In the 5 additional \
206+ * bytes allocated, one for '.', one for trailing 0, and 3 for 'GPB' if \
207+ * given message is google.protobuf.Empty.*/ \
208+ const char *fullname = upb_##def_type_lower##_fullname (def_type_lower); \
209+ const char *php_namespace = upb_filedef_phpnamespace (files[0 ]); \
210+ const char *prefix_given = upb_filedef_phpprefix (files[0 ]); \
211+ size_t classname_len = strlen (fullname) + 5 ; \
212+ if (prefix_given != NULL ) { \
213+ classname_len += strlen (prefix_given); \
214+ } \
215+ if (php_namespace != NULL ) { \
216+ classname_len += strlen (php_namespace); \
217+ } \
218+ char *classname = ALLOC_N (char , classname_len); \
219+ memset (classname, 0 , classname_len); \
220+ const char *package = upb_filedef_package (files[0 ]); \
221+ classname_no_prefix (fullname, package, classname); \
222+ const char *prefix = classname_prefix (classname, prefix_given, package); \
223+ convert_to_class_name_inplace (package, php_namespace, prefix, classname); \
224+ register_upbdef (classname, def); \
225+ FREE (classname); \
226+ break ; \
227+ }
228+
229+ CASE_TYPE (MSG , msgdef, Descriptor)
230+ CASE_TYPE (ENUM , enumdef, EnumDescriptor)
231+ #undef CASE_TYPE
232+
255233 default :
256234 break ;
257235 }
@@ -271,3 +249,73 @@ void InternalDescriptorPool_add_generated_file(
271249 upb_filedef_unref (files[0 ], &pool);
272250 upb_gfree (files);
273251}
252+
253+ void DescriptorPool_init_c_instance (
254+ DescriptorPool *pool TSRMLS_DC ) {
255+ pool->intern = NULL ;
256+ }
257+
258+ void DescriptorPool_free_c (
259+ DescriptorPool *pool TSRMLS_DC ) {}
260+
261+ // -----------------------------------------------------------------------------
262+ // Descriptor
263+ // -----------------------------------------------------------------------------
264+
265+ void Descriptor_init_c_instance (
266+ Descriptor *self TSRMLS_DC ) {
267+ self->intern = NULL ;
268+ self->klass = NULL ;
269+ }
270+
271+ void Descriptor_free_c (
272+ Descriptor *self TSRMLS_DC ) {}
273+
274+ // -----------------------------------------------------------------------------
275+ // EnumDescriptor
276+ // -----------------------------------------------------------------------------
277+
278+ void EnumDescriptor_init_c_instance (
279+ EnumDescriptor *self TSRMLS_DC ) {
280+ self->intern = NULL ;
281+ }
282+
283+ void EnumDescriptor_free_c (
284+ EnumDescriptor *self TSRMLS_DC ) {}
285+
286+ // -----------------------------------------------------------------------------
287+ // EnumValueDescriptor
288+ // -----------------------------------------------------------------------------
289+
290+ void EnumValueDescriptor_init_c_instance (
291+ EnumValueDescriptor *self TSRMLS_DC ) {
292+ self->name = NULL ;
293+ self->number = 0 ;
294+ }
295+
296+ void EnumValueDescriptor_free_c (
297+ EnumValueDescriptor *self TSRMLS_DC ) {}
298+
299+ // -----------------------------------------------------------------------------
300+ // FieldDescriptor
301+ // -----------------------------------------------------------------------------
302+
303+ void FieldDescriptor_init_c_instance (
304+ FieldDescriptor *self TSRMLS_DC ) {
305+ self->intern = NULL ;
306+ }
307+
308+ void FieldDescriptor_free_c (
309+ FieldDescriptor *self TSRMLS_DC ) {}
310+
311+ // -----------------------------------------------------------------------------
312+ // OneofDescriptor
313+ // -----------------------------------------------------------------------------
314+
315+ void OneofDescriptor_init_c_instance (
316+ OneofDescriptor *self TSRMLS_DC ) {
317+ self->intern = NULL ;
318+ }
319+
320+ void OneofDescriptor_free_c (
321+ OneofDescriptor *self TSRMLS_DC ) {}
0 commit comments