@@ -49,7 +49,7 @@ typedef struct _spl_fixedarray { /* {{{ */
49
49
/* }}} */
50
50
51
51
typedef struct _spl_fixedarray_object { /* {{{ */
52
- spl_fixedarray * array ;
52
+ spl_fixedarray array ;
53
53
zend_function * fptr_offset_get ;
54
54
zend_function * fptr_offset_set ;
55
55
zend_function * fptr_offset_has ;
@@ -148,13 +148,8 @@ static HashTable* spl_fixedarray_object_get_gc(zval *obj, zval **table, int *n)
148
148
spl_fixedarray_object * intern = Z_SPLFIXEDARRAY_P (obj );
149
149
HashTable * ht = zend_std_get_properties (obj );
150
150
151
- if (intern -> array ) {
152
- * table = intern -> array -> elements ;
153
- * n = (int )intern -> array -> size ;
154
- } else {
155
- * table = NULL ;
156
- * n = 0 ;
157
- }
151
+ * table = intern -> array .elements ;
152
+ * n = (int )intern -> array .size ;
158
153
159
154
return ht ;
160
155
}
@@ -166,21 +161,21 @@ static HashTable* spl_fixedarray_object_get_properties(zval *obj) /* {{{{ */
166
161
HashTable * ht = zend_std_get_properties (obj );
167
162
zend_long i = 0 ;
168
163
169
- if (intern -> array ) {
164
+ if (intern -> array . size > 0 ) {
170
165
zend_long j = zend_hash_num_elements (ht );
171
166
172
- for (i = 0 ; i < intern -> array -> size ; i ++ ) {
173
- if (!Z_ISUNDEF (intern -> array -> elements [i ])) {
174
- zend_hash_index_update (ht , i , & intern -> array -> elements [i ]);
175
- if (Z_REFCOUNTED (intern -> array -> elements [i ])){
176
- Z_ADDREF (intern -> array -> elements [i ]);
167
+ for (i = 0 ; i < intern -> array . size ; i ++ ) {
168
+ if (!Z_ISUNDEF (intern -> array . elements [i ])) {
169
+ zend_hash_index_update (ht , i , & intern -> array . elements [i ]);
170
+ if (Z_REFCOUNTED (intern -> array . elements [i ])){
171
+ Z_ADDREF (intern -> array . elements [i ]);
177
172
}
178
173
} else {
179
174
zend_hash_index_update (ht , i , & EG (uninitialized_zval ));
180
175
}
181
176
}
182
- if (j > intern -> array -> size ) {
183
- for (i = intern -> array -> size ; i < j ; ++ i ) {
177
+ if (j > intern -> array . size ) {
178
+ for (i = intern -> array . size ; i < j ; ++ i ) {
184
179
zend_hash_index_del (ht , i );
185
180
}
186
181
}
@@ -195,15 +190,14 @@ static void spl_fixedarray_object_free_storage(zend_object *object) /* {{{ */
195
190
spl_fixedarray_object * intern = spl_fixed_array_from_obj (object );
196
191
zend_long i ;
197
192
198
- if (intern -> array ) {
199
- for (i = 0 ; i < intern -> array -> size ; i ++ ) {
200
- zval_ptr_dtor (& (intern -> array -> elements [i ]));
193
+ if (intern -> array . size > 0 ) {
194
+ for (i = 0 ; i < intern -> array . size ; i ++ ) {
195
+ zval_ptr_dtor (& (intern -> array . elements [i ]));
201
196
}
202
197
203
- if (intern -> array -> size > 0 && intern -> array -> elements ) {
204
- efree (intern -> array -> elements );
198
+ if (intern -> array . size > 0 && intern -> array . elements ) {
199
+ efree (intern -> array . elements );
205
200
}
206
- efree (intern -> array );
207
201
}
208
202
209
203
zend_object_std_dtor (& intern -> std );
@@ -229,14 +223,8 @@ static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, z
229
223
if (orig && clone_orig ) {
230
224
spl_fixedarray_object * other = Z_SPLFIXEDARRAY_P (orig );
231
225
intern -> ce_get_iterator = other -> ce_get_iterator ;
232
- if (!other -> array ) {
233
- /* leave a empty object, will be dtor later by CLONE handler */
234
- zend_throw_exception (spl_ce_RuntimeException , "The instance wasn't initialized properly" , 0 );
235
- } else {
236
- intern -> array = emalloc (sizeof (spl_fixedarray ));
237
- spl_fixedarray_init (intern -> array , other -> array -> size );
238
- spl_fixedarray_copy (intern -> array , other -> array );
239
- }
226
+ spl_fixedarray_init (& intern -> array , other -> array .size );
227
+ spl_fixedarray_copy (& intern -> array , & other -> array );
240
228
}
241
229
242
230
while (parent ) {
@@ -341,13 +329,13 @@ static inline zval *spl_fixedarray_object_read_dimension_helper(spl_fixedarray_o
341
329
index = Z_LVAL_P (offset );
342
330
}
343
331
344
- if (index < 0 || intern -> array == NULL || index >= intern -> array -> size ) {
332
+ if (index < 0 || index >= intern -> array . size ) {
345
333
zend_throw_exception (spl_ce_RuntimeException , "Index invalid or out of range" , 0 );
346
334
return NULL ;
347
- } else if (Z_ISUNDEF (intern -> array -> elements [index ])) {
335
+ } else if (Z_ISUNDEF (intern -> array . elements [index ])) {
348
336
return NULL ;
349
337
} else {
350
- return & intern -> array -> elements [index ];
338
+ return & intern -> array . elements [index ];
351
339
}
352
340
}
353
341
/* }}} */
@@ -394,15 +382,15 @@ static inline void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_o
394
382
index = Z_LVAL_P (offset );
395
383
}
396
384
397
- if (index < 0 || intern -> array == NULL || index >= intern -> array -> size ) {
385
+ if (index < 0 || index >= intern -> array . size ) {
398
386
zend_throw_exception (spl_ce_RuntimeException , "Index invalid or out of range" , 0 );
399
387
return ;
400
388
} else {
401
- if (!Z_ISUNDEF (intern -> array -> elements [index ])) {
402
- zval_ptr_dtor (& (intern -> array -> elements [index ]));
389
+ if (!Z_ISUNDEF (intern -> array . elements [index ])) {
390
+ zval_ptr_dtor (& (intern -> array . elements [index ]));
403
391
}
404
392
ZVAL_DEREF (value );
405
- ZVAL_COPY (& intern -> array -> elements [index ], value );
393
+ ZVAL_COPY (& intern -> array . elements [index ], value );
406
394
}
407
395
}
408
396
/* }}} */
@@ -442,12 +430,12 @@ static inline void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_o
442
430
index = Z_LVAL_P (offset );
443
431
}
444
432
445
- if (index < 0 || intern -> array == NULL || index >= intern -> array -> size ) {
433
+ if (index < 0 || index >= intern -> array . size ) {
446
434
zend_throw_exception (spl_ce_RuntimeException , "Index invalid or out of range" , 0 );
447
435
return ;
448
436
} else {
449
- zval_ptr_dtor (& (intern -> array -> elements [index ]));
450
- ZVAL_UNDEF (& intern -> array -> elements [index ]);
437
+ zval_ptr_dtor (& (intern -> array . elements [index ]));
438
+ ZVAL_UNDEF (& intern -> array . elements [index ]);
451
439
}
452
440
}
453
441
/* }}} */
@@ -481,13 +469,13 @@ static inline int spl_fixedarray_object_has_dimension_helper(spl_fixedarray_obje
481
469
index = Z_LVAL_P (offset );
482
470
}
483
471
484
- if (index < 0 || intern -> array == NULL || index >= intern -> array -> size ) {
472
+ if (index < 0 || index >= intern -> array . size ) {
485
473
retval = 0 ;
486
474
} else {
487
- if (Z_ISUNDEF (intern -> array -> elements [index ])) {
475
+ if (Z_ISUNDEF (intern -> array . elements [index ])) {
488
476
retval = 0 ;
489
477
} else if (check_empty ) {
490
- if (zend_is_true (& intern -> array -> elements [index ])) {
478
+ if (zend_is_true (& intern -> array . elements [index ])) {
491
479
retval = 1 ;
492
480
} else {
493
481
retval = 0 ;
@@ -535,14 +523,12 @@ static int spl_fixedarray_object_count_elements(zval *object, zend_long *count)
535
523
if (!Z_ISUNDEF (rv )) {
536
524
* count = zval_get_long (& rv );
537
525
zval_ptr_dtor (& rv );
538
- return SUCCESS ;
526
+ } else {
527
+ * count = 0 ;
539
528
}
540
- } else if (intern -> array ) {
541
- * count = intern -> array -> size ;
542
- return SUCCESS ;
529
+ } else {
530
+ * count = intern -> array .size ;
543
531
}
544
-
545
- * count = 0 ;
546
532
return SUCCESS ;
547
533
}
548
534
/* }}} */
@@ -566,13 +552,12 @@ SPL_METHOD(SplFixedArray, __construct)
566
552
567
553
intern = Z_SPLFIXEDARRAY_P (object );
568
554
569
- if (intern -> array ) {
555
+ if (intern -> array . size > 0 ) {
570
556
/* called __construct() twice, bail out */
571
557
return ;
572
558
}
573
559
574
- intern -> array = emalloc (sizeof (spl_fixedarray ));
575
- spl_fixedarray_init (intern -> array , size );
560
+ spl_fixedarray_init (& intern -> array , size );
576
561
}
577
562
/* }}} */
578
563
@@ -588,18 +573,17 @@ SPL_METHOD(SplFixedArray, __wakeup)
588
573
return ;
589
574
}
590
575
591
- if (! intern -> array ) {
576
+ if (intern -> array . size == 0 ) {
592
577
int index = 0 ;
593
578
int size = zend_hash_num_elements (intern_ht );
594
579
595
- intern -> array = emalloc (sizeof (spl_fixedarray ));
596
- spl_fixedarray_init (intern -> array , size );
580
+ spl_fixedarray_init (& intern -> array , size );
597
581
598
582
ZEND_HASH_FOREACH_VAL (intern_ht , data ) {
599
583
if (Z_REFCOUNTED_P (data )) {
600
584
Z_ADDREF_P (data );
601
585
}
602
- ZVAL_COPY_VALUE (& intern -> array -> elements [index ], data );
586
+ ZVAL_COPY_VALUE (& intern -> array . elements [index ], data );
603
587
index ++ ;
604
588
} ZEND_HASH_FOREACH_END ();
605
589
@@ -622,10 +606,7 @@ SPL_METHOD(SplFixedArray, count)
622
606
}
623
607
624
608
intern = Z_SPLFIXEDARRAY_P (object );
625
- if (intern -> array ) {
626
- RETURN_LONG (intern -> array -> size );
627
- }
628
- RETURN_LONG (0 );
609
+ RETURN_LONG (intern -> array .size );
629
610
}
630
611
/* }}} */
631
612
@@ -642,13 +623,13 @@ SPL_METHOD(SplFixedArray, toArray)
642
623
intern = Z_SPLFIXEDARRAY_P (getThis ());
643
624
644
625
array_init (return_value );
645
- if (intern -> array ) {
626
+ if (intern -> array . size > 0 ) {
646
627
int i = 0 ;
647
- for (; i < intern -> array -> size ; i ++ ) {
648
- if (!Z_ISUNDEF (intern -> array -> elements [i ])) {
649
- zend_hash_index_update (Z_ARRVAL_P (return_value ), i , & intern -> array -> elements [i ]);
650
- if (Z_REFCOUNTED (intern -> array -> elements [i ])) {
651
- Z_ADDREF (intern -> array -> elements [i ]);
628
+ for (; i < intern -> array . size ; i ++ ) {
629
+ if (!Z_ISUNDEF (intern -> array . elements [i ])) {
630
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), i , & intern -> array . elements [i ]);
631
+ if (Z_REFCOUNTED (intern -> array . elements [i ])) {
632
+ Z_ADDREF (intern -> array . elements [i ]);
652
633
}
653
634
} else {
654
635
zend_hash_index_update (Z_ARRVAL_P (return_value ), i , & EG (uninitialized_zval ));
@@ -663,7 +644,7 @@ SPL_METHOD(SplFixedArray, toArray)
663
644
SPL_METHOD (SplFixedArray , fromArray )
664
645
{
665
646
zval * data ;
666
- spl_fixedarray * array ;
647
+ spl_fixedarray array ;
667
648
spl_fixedarray_object * intern ;
668
649
int num ;
669
650
zend_bool save_indexes = 1 ;
@@ -672,7 +653,6 @@ SPL_METHOD(SplFixedArray, fromArray)
672
653
return ;
673
654
}
674
655
675
- array = ecalloc (1 , sizeof (spl_fixedarray ));
676
656
num = zend_hash_num_elements (Z_ARRVAL_P (data ));
677
657
678
658
if (num > 0 && save_indexes ) {
@@ -683,7 +663,6 @@ SPL_METHOD(SplFixedArray, fromArray)
683
663
684
664
ZEND_HASH_FOREACH_KEY (Z_ARRVAL_P (data ), num_index , str_index ) {
685
665
if (str_index != NULL || (zend_long )num_index < 0 ) {
686
- efree (array );
687
666
zend_throw_exception_ex (spl_ce_InvalidArgumentException , 0 , "array must contain only positive integer keys" );
688
667
return ;
689
668
}
@@ -695,30 +674,29 @@ SPL_METHOD(SplFixedArray, fromArray)
695
674
696
675
tmp = max_index + 1 ;
697
676
if (tmp <= 0 ) {
698
- efree (array );
699
677
zend_throw_exception_ex (spl_ce_InvalidArgumentException , 0 , "integer overflow detected" );
700
678
return ;
701
679
}
702
- spl_fixedarray_init (array , tmp );
680
+ spl_fixedarray_init (& array , tmp );
703
681
704
682
ZEND_HASH_FOREACH_KEY_VAL (Z_ARRVAL_P (data ), num_index , str_index , element ) {
705
683
ZVAL_DEREF (element );
706
- ZVAL_COPY (& array -> elements [num_index ], element );
684
+ ZVAL_COPY (& array . elements [num_index ], element );
707
685
} ZEND_HASH_FOREACH_END ();
708
686
709
687
} else if (num > 0 && !save_indexes ) {
710
688
zval * element ;
711
689
zend_long i = 0 ;
712
690
713
- spl_fixedarray_init (array , num );
691
+ spl_fixedarray_init (& array , num );
714
692
715
693
ZEND_HASH_FOREACH_VAL (Z_ARRVAL_P (data ), element ) {
716
694
ZVAL_DEREF (element );
717
- ZVAL_COPY (& array -> elements [i ], element );
695
+ ZVAL_COPY (& array . elements [i ], element );
718
696
i ++ ;
719
697
} ZEND_HASH_FOREACH_END ();
720
698
} else {
721
- spl_fixedarray_init (array , 0 );
699
+ spl_fixedarray_init (& array , 0 );
722
700
}
723
701
724
702
object_init_ex (return_value , spl_ce_SplFixedArray );
@@ -740,10 +718,7 @@ SPL_METHOD(SplFixedArray, getSize)
740
718
}
741
719
742
720
intern = Z_SPLFIXEDARRAY_P (object );
743
- if (intern -> array ) {
744
- RETURN_LONG (intern -> array -> size );
745
- }
746
- RETURN_LONG (0 );
721
+ RETURN_LONG (intern -> array .size );
747
722
}
748
723
/* }}} */
749
724
@@ -765,11 +740,8 @@ SPL_METHOD(SplFixedArray, setSize)
765
740
}
766
741
767
742
intern = Z_SPLFIXEDARRAY_P (object );
768
- if (!intern -> array ) {
769
- intern -> array = ecalloc (1 , sizeof (spl_fixedarray ));
770
- }
771
743
772
- spl_fixedarray_resize (intern -> array , size );
744
+ spl_fixedarray_resize (& intern -> array , size );
773
745
RETURN_TRUE ;
774
746
}
775
747
/* }}} */
@@ -873,7 +845,7 @@ static int spl_fixedarray_it_valid(zend_object_iterator *iter) /* {{{ */
873
845
return zend_user_it_valid (iter );
874
846
}
875
847
876
- if (object -> current >= 0 && object -> array && object -> current < object -> array -> size ) {
848
+ if (object -> current >= 0 && object -> current < object -> array . size ) {
877
849
return SUCCESS ;
878
850
}
879
851
@@ -967,7 +939,7 @@ SPL_METHOD(SplFixedArray, valid)
967
939
return ;
968
940
}
969
941
970
- RETURN_BOOL (intern -> current >= 0 && intern -> array && intern -> current < intern -> array -> size );
942
+ RETURN_BOOL (intern -> current >= 0 && intern -> current < intern -> array . size );
971
943
}
972
944
/* }}} */
973
945
0 commit comments