@@ -41,12 +41,6 @@ static zend_always_inline bool php_json_check_stack_limit(void)
4141#endif 
4242}
4343
44- static  int  php_json_determine_array_type (const  HashTable  * ht ) /* {{{ */ 
45- {
46- 	return  zend_array_is_list (ht ) ? PHP_JSON_OUTPUT_ARRAY  : PHP_JSON_OUTPUT_OBJECT ;
47- }
48- /* }}} */ 
49- 
5044/* {{{ Pretty printing support functions */ 
5145
5246static  inline  void  php_json_pretty_print_char (smart_str  * buf , int  options , char  c ) /* {{{ */ 
@@ -114,7 +108,7 @@ static inline void php_json_encode_double(smart_str *buf, double d, int options)
114108
115109static  zend_result  php_json_encode_array (smart_str  * buf , zval  * val , int  options , php_json_encoder  * encoder ) /* {{{ */ 
116110{
117- 	int   r ;
111+ 	bool   encode_as_object   =   options   &   PHP_JSON_FORCE_OBJECT ;
118112	bool  need_comma  =  false;
119113	HashTable  * myht , * prop_ht ;
120114	zend_refcounted  * recursion_rc ;
@@ -131,7 +125,7 @@ static zend_result php_json_encode_array(smart_str *buf, zval *val, int options,
131125		myht  =  Z_ARRVAL_P (val );
132126		recursion_rc  =  (zend_refcounted  * )myht ;
133127		prop_ht  =  NULL ;
134- 		r  =  ( options   &   PHP_JSON_FORCE_OBJECT ) ?  PHP_JSON_OUTPUT_OBJECT  :  php_json_determine_array_type (myht );
128+ 		encode_as_object  =  encode_as_object   ||  ! zend_array_is_list (myht );
135129	} else  if  (Z_OBJ_P (val )-> properties  ==  NULL 
136130	 &&  Z_OBJ_HT_P (val )-> get_properties_for  ==  NULL 
137131	 &&  Z_OBJ_HT_P (val )-> get_properties  ==  zend_std_get_properties 
@@ -219,7 +213,7 @@ static zend_result php_json_encode_array(smart_str *buf, zval *val, int options,
219213			 * referenced from a different place in the object graph. */ 
220214			recursion_rc  =  (zend_refcounted  * )obj ;
221215		}
222- 		r  =  PHP_JSON_OUTPUT_OBJECT ;
216+ 		encode_as_object  =  true ;
223217	}
224218
225219	if  (recursion_rc  &&  GC_IS_RECURSIVE (recursion_rc )) {
@@ -231,7 +225,7 @@ static zend_result php_json_encode_array(smart_str *buf, zval *val, int options,
231225
232226	PHP_JSON_HASH_PROTECT_RECURSION (recursion_rc );
233227
234- 	if  (r   ==   PHP_JSON_OUTPUT_ARRAY ) {
228+ 	if  (! encode_as_object ) {
235229		smart_str_appendc (buf , '[' );
236230	} else  {
237231		smart_str_appendc (buf , '{' );
@@ -250,7 +244,7 @@ static zend_result php_json_encode_array(smart_str *buf, zval *val, int options,
250244			zval  tmp ;
251245			ZVAL_UNDEF (& tmp );
252246
253- 			if  (r   ==   PHP_JSON_OUTPUT_ARRAY ) {
247+ 			if  (! encode_as_object ) {
254248				ZEND_ASSERT (Z_TYPE_P (data ) !=  IS_PTR );
255249
256250				if  (need_comma ) {
@@ -262,7 +256,6 @@ static zend_result php_json_encode_array(smart_str *buf, zval *val, int options,
262256				php_json_pretty_print_char (buf , options , '\n' );
263257				php_json_pretty_print_indent (buf , options , encoder );
264258			} else  {
265- 				ZEND_ASSERT (r  ==  PHP_JSON_OUTPUT_OBJECT );
266259				if  (key ) {
267260					if  (ZSTR_VAL (key )[0 ] ==  '\0'  &&  ZSTR_LEN (key ) >  0  &&  Z_TYPE_P (val ) ==  IS_OBJECT ) {
268261						/* Skip protected and private members. */ 
@@ -346,7 +339,7 @@ static zend_result php_json_encode_array(smart_str *buf, zval *val, int options,
346339		php_json_pretty_print_indent (buf , options , encoder );
347340	}
348341
349- 	if  (r   ==   PHP_JSON_OUTPUT_ARRAY ) {
342+ 	if  (! encode_as_object ) {
350343		smart_str_appendc (buf , ']' );
351344	} else  {
352345		smart_str_appendc (buf , '}' );
0 commit comments