@@ -5565,7 +5565,6 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
5565
5565
USE_OPLINE
5566
5566
zend_free_op free_op1 ;
5567
5567
zval * array_ptr , * result ;
5568
- HashTable * fe_ht ;
5569
5568
5570
5569
SAVE_OPLINE ();
5571
5570
@@ -5582,9 +5581,6 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
5582
5581
ZEND_VM_NEXT_OPCODE ();
5583
5582
} else if (OP1_TYPE != IS_CONST && EXPECTED (Z_TYPE_P (array_ptr ) == IS_OBJECT )) {
5584
5583
if (!Z_OBJCE_P (array_ptr )-> get_iterator ) {
5585
- HashPosition pos = 0 ;
5586
- Bucket * p ;
5587
-
5588
5584
result = EX_VAR (opline -> result .var );
5589
5585
ZVAL_COPY_VALUE (result , array_ptr );
5590
5586
if (OP1_TYPE != IS_TMP_VAR ) {
@@ -5597,26 +5593,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
5597
5593
}
5598
5594
Z_OBJ_P (array_ptr )-> properties = zend_array_dup (Z_OBJ_P (array_ptr )-> properties );
5599
5595
}
5600
- fe_ht = Z_OBJPROP_P (array_ptr );
5601
- pos = 0 ;
5602
- p = fe_ht -> arData ;
5603
- while (1 ) {
5604
- if (UNEXPECTED (pos >= fe_ht -> nNumUsed )) {
5605
- FREE_OP1_IF_VAR ();
5606
- Z_FE_ITER_P (EX_VAR (opline -> result .var )) = (uint32_t )-1 ;
5607
- ZEND_VM_JMP (OP_JMP_ADDR (opline , opline -> op2 ));
5608
- }
5609
- if (EXPECTED (Z_TYPE (p -> val ) != IS_UNDEF ) &&
5610
- (EXPECTED (Z_TYPE (p -> val ) != IS_INDIRECT ) ||
5611
- (EXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) != IS_UNDEF ) &&
5612
- EXPECTED (zend_check_property_access (Z_OBJ_P (array_ptr ), p -> key ) == SUCCESS )))
5613
- ) {
5614
- break ;
5615
- }
5616
- pos ++ ;
5617
- p ++ ;
5618
- }
5619
- Z_FE_ITER_P (EX_VAR (opline -> result .var )) = zend_hash_iterator_add (fe_ht , pos );
5596
+ Z_FE_ITER_P (EX_VAR (opline -> result .var )) = zend_hash_iterator_add (Z_OBJPROP_P (array_ptr ), 0 );
5620
5597
5621
5598
FREE_OP1_IF_VAR ();
5622
5599
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
@@ -5685,9 +5662,6 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
5685
5662
USE_OPLINE
5686
5663
zend_free_op free_op1 ;
5687
5664
zval * array_ptr , * array_ref ;
5688
- HashTable * fe_ht ;
5689
- HashPosition pos = 0 ;
5690
- Bucket * p ;
5691
5665
5692
5666
SAVE_OPLINE ();
5693
5667
@@ -5718,23 +5692,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
5718
5692
} else {
5719
5693
SEPARATE_ARRAY (array_ptr );
5720
5694
}
5721
- fe_ht = Z_ARRVAL_P (array_ptr );
5722
- p = fe_ht -> arData ;
5723
- while (1 ) {
5724
- if (UNEXPECTED (pos >= fe_ht -> nNumUsed )) {
5725
- FREE_OP1_VAR_PTR ();
5726
- Z_FE_ITER_P (EX_VAR (opline -> result .var )) = (uint32_t )-1 ;
5727
- ZEND_VM_JMP (OP_JMP_ADDR (opline , opline -> op2 ));
5728
- }
5729
- if (EXPECTED (Z_TYPE (p -> val ) != IS_UNDEF ) &&
5730
- (EXPECTED (Z_TYPE (p -> val ) != IS_INDIRECT ) ||
5731
- EXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) != IS_UNDEF ))) {
5732
- break ;
5733
- }
5734
- pos ++ ;
5735
- p ++ ;
5736
- }
5737
- Z_FE_ITER_P (EX_VAR (opline -> result .var )) = zend_hash_iterator_add (fe_ht , pos );
5695
+ Z_FE_ITER_P (EX_VAR (opline -> result .var )) = zend_hash_iterator_add (Z_ARRVAL_P (array_ptr ), 0 );
5738
5696
5739
5697
FREE_OP1_VAR_PTR ();
5740
5698
ZEND_VM_NEXT_OPCODE ();
@@ -5758,25 +5716,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
5758
5716
}
5759
5717
Z_OBJ_P (array_ptr )-> properties = zend_array_dup (Z_OBJ_P (array_ptr )-> properties );
5760
5718
}
5761
- fe_ht = Z_OBJPROP_P (array_ptr );
5762
- p = fe_ht -> arData ;
5763
- while (1 ) {
5764
- if (UNEXPECTED (pos >= fe_ht -> nNumUsed )) {
5765
- FREE_OP1_VAR_PTR ();
5766
- Z_FE_ITER_P (EX_VAR (opline -> result .var )) = (uint32_t )-1 ;
5767
- ZEND_VM_JMP (OP_JMP_ADDR (opline , opline -> op2 ));
5768
- }
5769
- if (EXPECTED (Z_TYPE (p -> val ) != IS_UNDEF ) &&
5770
- (EXPECTED (Z_TYPE (p -> val ) != IS_INDIRECT ) ||
5771
- (EXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) != IS_UNDEF ) &&
5772
- EXPECTED (zend_check_property_access (Z_OBJ_P (array_ptr ), p -> key ) == SUCCESS )))
5773
- ) {
5774
- break ;
5775
- }
5776
- pos ++ ;
5777
- p ++ ;
5778
- }
5779
- Z_FE_ITER_P (EX_VAR (opline -> result .var )) = zend_hash_iterator_add (fe_ht , pos );
5719
+ Z_FE_ITER_P (EX_VAR (opline -> result .var )) = zend_hash_iterator_add (Z_OBJPROP_P (array_ptr ), 0 );
5780
5720
5781
5721
FREE_OP1_VAR_PTR ();
5782
5722
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ();
@@ -5880,20 +5820,19 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
5880
5820
}
5881
5821
value = & p -> val ;
5882
5822
value_type = Z_TYPE_INFO_P (value );
5883
- if (value_type == IS_UNDEF ) {
5884
- pos ++ ;
5885
- p ++ ;
5886
- continue ;
5887
- } else if (UNEXPECTED (value_type == IS_INDIRECT )) {
5888
- value = Z_INDIRECT_P (value );
5889
- value_type = Z_TYPE_INFO_P (value );
5890
- if (UNEXPECTED (value_type == IS_UNDEF )) {
5891
- pos ++ ;
5892
- p ++ ;
5893
- continue ;
5823
+ if (EXPECTED (value_type != IS_UNDEF )) {
5824
+ if (UNEXPECTED (value_type == IS_INDIRECT )) {
5825
+ value = Z_INDIRECT_P (value );
5826
+ value_type = Z_TYPE_INFO_P (value );
5827
+ if (EXPECTED (value_type != IS_UNDEF )) {
5828
+ break ;
5829
+ }
5830
+ } else {
5831
+ break ;
5894
5832
}
5895
5833
}
5896
- break ;
5834
+ pos ++ ;
5835
+ p ++ ;
5897
5836
}
5898
5837
Z_FE_POS_P (array ) = pos + 1 ;
5899
5838
if (opline -> result_type & (IS_TMP_VAR |IS_CV )) {
@@ -5920,25 +5859,20 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
5920
5859
5921
5860
value = & p -> val ;
5922
5861
value_type = Z_TYPE_INFO_P (value );
5923
- if (UNEXPECTED (value_type == IS_UNDEF )) {
5924
- pos ++ ;
5925
- p ++ ;
5926
- continue ;
5927
- } else if (UNEXPECTED (value_type == IS_INDIRECT )) {
5928
- value = Z_INDIRECT_P (value );
5929
- value_type = Z_TYPE_INFO_P (value );
5930
- if (UNEXPECTED (value_type == IS_UNDEF )) {
5931
- pos ++ ;
5932
- p ++ ;
5933
- continue ;
5934
- }
5935
- if (UNEXPECTED (zend_check_property_access (Z_OBJ_P (array ), p -> key ) == FAILURE )) {
5936
- pos ++ ;
5937
- p ++ ;
5938
- continue ;
5862
+ if (EXPECTED (value_type != IS_UNDEF )) {
5863
+ if (UNEXPECTED (value_type == IS_INDIRECT )) {
5864
+ value = Z_INDIRECT_P (value );
5865
+ value_type = Z_TYPE_INFO_P (value );
5866
+ if (EXPECTED (value_type != IS_UNDEF )
5867
+ && EXPECTED (zend_check_property_access (Z_OBJ_P (array ), p -> key ) == SUCCESS )) {
5868
+ break ;
5869
+ }
5870
+ } else {
5871
+ break ;
5939
5872
}
5940
5873
}
5941
- break ;
5874
+ pos ++ ;
5875
+ p ++ ;
5942
5876
}
5943
5877
if (opline -> result_type & (IS_TMP_VAR |IS_CV )) {
5944
5878
if (UNEXPECTED (!p -> key )) {
@@ -5953,20 +5887,8 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
5953
5887
ZVAL_STRINGL (EX_VAR (opline -> result .var ), prop_name , prop_name_len );
5954
5888
}
5955
5889
}
5956
- while (1 ) {
5957
- pos ++ ;
5958
- if (pos >= fe_ht -> nNumUsed ) {
5959
- pos = HT_INVALID_IDX ;
5960
- break ;
5961
- }
5962
- p ++ ;
5963
- if (EXPECTED (Z_TYPE (p -> val ) != IS_UNDEF ) &&
5964
- (EXPECTED (Z_TYPE (p -> val ) != IS_INDIRECT ) ||
5965
- (EXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) != IS_UNDEF ) &&
5966
- EXPECTED (zend_check_property_access (Z_OBJ_P (array ), p -> key ) == SUCCESS )))
5967
- ) {
5968
- break ;
5969
- }
5890
+ if (++ pos >= fe_ht -> nNumUsed ) {
5891
+ pos = HT_INVALID_IDX ;
5970
5892
}
5971
5893
EG (ht_iterators )[Z_FE_ITER_P (array )].pos = pos ;
5972
5894
} else {
@@ -6060,20 +5982,19 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
6060
5982
}
6061
5983
value = & p -> val ;
6062
5984
value_type = Z_TYPE_INFO_P (value );
6063
- if (UNEXPECTED (value_type == IS_UNDEF )) {
6064
- pos ++ ;
6065
- p ++ ;
6066
- continue ;
6067
- } else if (UNEXPECTED (value_type == IS_INDIRECT )) {
6068
- value = Z_INDIRECT_P (value );
6069
- value_type = Z_TYPE_INFO_P (value );
6070
- if (UNEXPECTED (value_type == IS_UNDEF )) {
6071
- pos ++ ;
6072
- p ++ ;
6073
- continue ;
5985
+ if (EXPECTED (value_type != IS_UNDEF )) {
5986
+ if (UNEXPECTED (value_type == IS_INDIRECT )) {
5987
+ value = Z_INDIRECT_P (value );
5988
+ value_type = Z_TYPE_INFO_P (value );
5989
+ if (EXPECTED (value_type != IS_UNDEF )) {
5990
+ break ;
5991
+ }
5992
+ } else {
5993
+ break ;
6074
5994
}
6075
5995
}
6076
- break ;
5996
+ pos ++ ;
5997
+ p ++ ;
6077
5998
}
6078
5999
if (opline -> result_type & (IS_TMP_VAR |IS_CV )) {
6079
6000
if (!p -> key ) {
@@ -6082,18 +6003,8 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
6082
6003
ZVAL_STR_COPY (EX_VAR (opline -> result .var ), p -> key );
6083
6004
}
6084
6005
}
6085
- while (1 ) {
6086
- pos ++ ;
6087
- if (pos >= fe_ht -> nNumUsed ) {
6088
- pos = HT_INVALID_IDX ;
6089
- break ;
6090
- }
6091
- p ++ ;
6092
- if (EXPECTED (Z_TYPE (p -> val ) != IS_UNDEF ) &&
6093
- (EXPECTED (Z_TYPE (p -> val ) != IS_INDIRECT ) ||
6094
- EXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) != IS_UNDEF ))) {
6095
- break ;
6096
- }
6006
+ if (++ pos >= fe_ht -> nNumUsed ) {
6007
+ pos = HT_INVALID_IDX ;
6097
6008
}
6098
6009
EG (ht_iterators )[Z_FE_ITER_P (EX_VAR (opline -> op1 .var ))].pos = pos ;
6099
6010
} else if (EXPECTED (Z_TYPE_P (array ) == IS_OBJECT )) {
@@ -6113,23 +6024,18 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
6113
6024
6114
6025
value = & p -> val ;
6115
6026
value_type = Z_TYPE_INFO_P (value );
6116
- if (UNEXPECTED (value_type == IS_UNDEF )) {
6117
- pos ++ ;
6118
- p ++ ;
6119
- continue ;
6120
- } else if (UNEXPECTED (value_type == IS_INDIRECT )) {
6121
- value = Z_INDIRECT_P (value );
6122
- value_type = Z_TYPE_INFO_P (value );
6123
- if (UNEXPECTED (value_type == IS_UNDEF )) {
6124
- pos ++ ;
6125
- p ++ ;
6126
- continue ;
6027
+ if (EXPECTED (value_type != IS_UNDEF )) {
6028
+ if (UNEXPECTED (value_type == IS_INDIRECT )) {
6029
+ value = Z_INDIRECT_P (value );
6030
+ value_type = Z_TYPE_INFO_P (value );
6031
+ if (EXPECTED (value_type != IS_UNDEF )
6032
+ && EXPECTED (zend_check_property_access (Z_OBJ_P (array ), p -> key ) == SUCCESS )) {
6033
+ break ;
6034
+ }
6035
+ } else {
6036
+ break ;
6127
6037
}
6128
6038
}
6129
- if (UNEXPECTED (!p -> key ) ||
6130
- EXPECTED (zend_check_property_access (Z_OBJ_P (array ), p -> key ) == SUCCESS )) {
6131
- break ;
6132
- }
6133
6039
pos ++ ;
6134
6040
p ++ ;
6135
6041
}
@@ -6146,20 +6052,8 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
6146
6052
ZVAL_STRINGL (EX_VAR (opline -> result .var ), prop_name , prop_name_len );
6147
6053
}
6148
6054
}
6149
- while (1 ) {
6150
- pos ++ ;
6151
- if (pos >= fe_ht -> nNumUsed ) {
6152
- pos = HT_INVALID_IDX ;
6153
- break ;
6154
- }
6155
- p ++ ;
6156
- if ((EXPECTED (Z_TYPE (p -> val ) != IS_UNDEF ) &&
6157
- (EXPECTED (Z_TYPE (p -> val ) != IS_INDIRECT ) ||
6158
- EXPECTED (Z_TYPE_P (Z_INDIRECT (p -> val )) != IS_UNDEF ))) &&
6159
- (UNEXPECTED (!p -> key ) ||
6160
- EXPECTED (zend_check_property_access (Z_OBJ_P (array ), p -> key ) == SUCCESS ))) {
6161
- break ;
6162
- }
6055
+ if (++ pos >= fe_ht -> nNumUsed ) {
6056
+ pos = HT_INVALID_IDX ;
6163
6057
}
6164
6058
EG (ht_iterators )[Z_FE_ITER_P (EX_VAR (opline -> op1 .var ))].pos = pos ;
6165
6059
} else {
0 commit comments