summaryrefslogtreecommitdiff
path: root/ext/spl
diff options
context:
space:
mode:
Diffstat (limited to 'ext/spl')
-rw-r--r--ext/spl/config.m41
-rw-r--r--ext/spl/php_spl.c716
-rw-r--r--ext/spl/php_spl.h8
-rw-r--r--ext/spl/php_spl.stub.php36
-rw-r--r--ext/spl/php_spl_arginfo.h99
-rw-r--r--ext/spl/spl_array.c666
-rw-r--r--ext/spl/spl_array.h2
-rw-r--r--ext/spl/spl_array.stub.php248
-rw-r--r--ext/spl/spl_array_arginfo.h246
-rw-r--r--ext/spl/spl_directory.c1329
-rw-r--r--ext/spl/spl_directory.h2
-rw-r--r--ext/spl/spl_directory.stub.php296
-rw-r--r--ext/spl/spl_directory_arginfo.h473
-rw-r--r--ext/spl/spl_dllist.c441
-rw-r--r--ext/spl/spl_dllist.h2
-rw-r--r--ext/spl/spl_dllist.stub.php115
-rw-r--r--ext/spl/spl_dllist_arginfo.h146
-rw-r--r--ext/spl/spl_engine.c11
-rw-r--r--ext/spl/spl_engine.h55
-rw-r--r--ext/spl/spl_exceptions.c2
-rw-r--r--ext/spl/spl_exceptions.h2
-rw-r--r--ext/spl/spl_fixedarray.c673
-rw-r--r--ext/spl/spl_fixedarray.h2
-rw-r--r--ext/spl/spl_fixedarray.stub.php52
-rw-r--r--ext/spl/spl_fixedarray_arginfo.h71
-rw-r--r--ext/spl/spl_functions.c4
-rw-r--r--ext/spl/spl_functions.h15
-rw-r--r--ext/spl/spl_heap.c323
-rw-r--r--ext/spl/spl_heap.h2
-rw-r--r--ext/spl/spl_heap.stub.php135
-rw-r--r--ext/spl/spl_heap_arginfo.h157
-rw-r--r--ext/spl/spl_iterators.c1516
-rw-r--r--ext/spl/spl_iterators.h3
-rw-r--r--ext/spl/spl_iterators.stub.php397
-rw-r--r--ext/spl/spl_iterators_arginfo.h593
-rw-r--r--ext/spl/spl_observer.c558
-rw-r--r--ext/spl/spl_observer.h2
-rw-r--r--ext/spl/spl_observer.stub.php155
-rw-r--r--ext/spl/spl_observer_arginfo.h214
-rw-r--r--ext/spl/tests/AppendIterator_invalid_ctor.phpt14
-rw-r--r--ext/spl/tests/ArrayObject_exchange_array_during_sorting.phpt10
-rw-r--r--ext/spl/tests/ArrayObject_illegal_offset.phpt39
-rw-r--r--ext/spl/tests/ArrayObject_illegal_offset_leak.phpt11
-rw-r--r--ext/spl/tests/CallbackFilterIteratorTest-002.phpt35
-rw-r--r--ext/spl/tests/CallbackFilterIteratorTest.phpt17
-rw-r--r--ext/spl/tests/DirectoryIterator_by_reference.phpt4
-rw-r--r--ext/spl/tests/DirectoryIterator_empty_constructor.phpt14
-rw-r--r--ext/spl/tests/RecursiveCallbackFilterIteratorTest.phpt27
-rw-r--r--ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt2
-rw-r--r--ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt2
-rw-r--r--ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt2
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_add_invalid_offset.phpt8
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_add_null_offset.phpt10
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_consistent_iterator_mode.phpt39
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_debug-info.phpt16
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_getIteratorMode.phpt5
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_isEmpty_empty.phpt6
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_isEmpty_not-empty.phpt16
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_offsetExists_success.phpt6
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_offsetGet_param_array.phpt2
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_offsetGet_param_string.phpt2
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_offsetUnset_greater_than_elements.phpt2
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_offsetUnset_negative-parameter.phpt26
-rw-r--r--ext/spl/tests/SplDoublyLinkedList_offsetUnset_parameter-larger-num-elements.phpt26
-rw-r--r--ext/spl/tests/SplFileInfo_getInode_basic.phpt2
-rw-r--r--ext/spl/tests/SplFileInfo_setFileClass_error.phpt4
-rw-r--r--ext/spl/tests/SplFileInfo_setInfoClass_error.phpt4
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_basic.phpt8
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt8
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt19
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt8
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt19
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_escape_empty.phpt2
-rw-r--r--ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt11
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv.phpt9
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv_002.phpt2
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv_variation13.phpt12
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv_variation14.phpt12
-rw-r--r--ext/spl/tests/SplFileObject_fputcsv_variation15.phpt2
-rw-r--r--ext/spl/tests/SplFileObject_fstat_with_basic_fstat_disabled.phpt64
-rw-r--r--ext/spl/tests/SplFileObject_ftruncate_error_001.phpt4
-rw-r--r--ext/spl/tests/SplFileObject_fwrite_variation_001.phpt2
-rw-r--r--ext/spl/tests/SplFileObject_fwrite_variation_002.phpt2
-rw-r--r--ext/spl/tests/SplFileObject_key_error001.phpt4
-rw-r--r--ext/spl/tests/SplFileObject_next_variation002.phpt2
-rw-r--r--ext/spl/tests/SplFileObject_seek_error_001.phpt17
-rw-r--r--ext/spl/tests/SplFileObject_setCsvControl_error001.phpt10
-rw-r--r--ext/spl/tests/SplFileObject_setCsvControl_error002.phpt10
-rw-r--r--ext/spl/tests/SplFileObject_setCsvControl_error003.phpt10
-rw-r--r--ext/spl/tests/SplFileObject_setCsvControl_variation002.phpt2
-rw-r--r--ext/spl/tests/SplFixedArray__construct_param_array.phpt6
-rw-r--r--ext/spl/tests/SplFixedArray__construct_param_string.phpt6
-rw-r--r--ext/spl/tests/SplFixedArray_change_size_during_iteration.phpt43
-rw-r--r--ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt6
-rw-r--r--ext/spl/tests/SplFixedArray_fromarray_indexes.phpt4
-rw-r--r--ext/spl/tests/SplFixedArray_fromarray_non_indexes.phpt6
-rw-r--r--ext/spl/tests/SplFixedArray_indirect_modification.phpt14
-rw-r--r--ext/spl/tests/SplFixedArray_key_setsize.phpt20
-rw-r--r--ext/spl/tests/SplFixedArray_nested_foreach.phpt19
-rw-r--r--ext/spl/tests/SplFixedArray_offsetExists_less_than_zero.phpt2
-rw-r--r--ext/spl/tests/SplFixedArray_offsetUnset_string.phpt18
-rw-r--r--ext/spl/tests/SplFixedArray_override_getIterator.phpt46
-rw-r--r--ext/spl/tests/SplObjectStorage_getHash.phpt2
-rw-r--r--ext/spl/tests/SplObjectStorage_offsetGet_missing_object.phpt4
-rw-r--r--ext/spl/tests/SplObjectStorage_unserialize_bad.phpt3
-rw-r--r--ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter2.phpt2
-rw-r--r--ext/spl/tests/SplObjectStorage_unserialize_nested.phpt1
-rw-r--r--ext/spl/tests/SplQueue_setIteratorMode_param_lifo.phpt6
-rw-r--r--ext/spl/tests/SplTempFileObject_constructor_error.phpt2
-rw-r--r--ext/spl/tests/arrayIterator_ksort_basic1.phpt24
-rw-r--r--ext/spl/tests/arrayObject___construct_basic2.phpt48
-rw-r--r--ext/spl/tests/arrayObject___construct_basic3.phpt48
-rw-r--r--ext/spl/tests/arrayObject___construct_basic4.phpt50
-rw-r--r--ext/spl/tests/arrayObject___construct_basic5.phpt50
-rw-r--r--ext/spl/tests/arrayObject___construct_basic6.phpt4
-rw-r--r--ext/spl/tests/arrayObject___construct_error1.phpt4
-rw-r--r--ext/spl/tests/arrayObject___construct_error2.phpt12
-rw-r--r--ext/spl/tests/arrayObject_asort_basic1.phpt16
-rw-r--r--ext/spl/tests/arrayObject_asort_basic2.phpt14
-rw-r--r--ext/spl/tests/arrayObject_clone_basic3.phpt2
-rw-r--r--ext/spl/tests/arrayObject_count_basic1.phpt14
-rw-r--r--ext/spl/tests/arrayObject_exchangeArray_basic3.phpt36
-rw-r--r--ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt62
-rw-r--r--ext/spl/tests/arrayObject_ksort_basic1.phpt16
-rw-r--r--ext/spl/tests/arrayObject_ksort_basic2.phpt14
-rw-r--r--ext/spl/tests/arrayObject_magicMethods1.phpt44
-rw-r--r--ext/spl/tests/arrayObject_magicMethods2.phpt42
-rw-r--r--ext/spl/tests/arrayObject_magicMethods3.phpt44
-rw-r--r--ext/spl/tests/arrayObject_magicMethods4.phpt46
-rw-r--r--ext/spl/tests/arrayObject_magicMethods5.phpt42
-rw-r--r--ext/spl/tests/arrayObject_magicMethods6.phpt46
-rw-r--r--ext/spl/tests/arrayObject_natcasesort_basic1.phpt22
-rw-r--r--ext/spl/tests/arrayObject_natsort_basic1.phpt22
-rw-r--r--ext/spl/tests/arrayObject_setFlags_basic1.phpt6
-rw-r--r--ext/spl/tests/arrayObject_setFlags_basic2.phpt8
-rw-r--r--ext/spl/tests/arrayObject_setIteratorClass_error1.phpt29
-rw-r--r--ext/spl/tests/arrayObject_uasort_basic1.phpt6
-rw-r--r--ext/spl/tests/arrayObject_uasort_error1.phpt22
-rw-r--r--ext/spl/tests/arrayObject_uksort_basic1.phpt6
-rw-r--r--ext/spl/tests/arrayObject_uksort_error1.phpt22
-rw-r--r--ext/spl/tests/array_001.phpt11
-rw-r--r--ext/spl/tests/array_002.phpt3
-rw-r--r--ext/spl/tests/array_003.phpt21
-rw-r--r--ext/spl/tests/array_004.phpt12
-rw-r--r--ext/spl/tests/array_005.phpt99
-rw-r--r--ext/spl/tests/array_006.phpt15
-rw-r--r--ext/spl/tests/array_007.phpt29
-rw-r--r--ext/spl/tests/array_008.phpt15
-rw-r--r--ext/spl/tests/array_009.phpt5
-rw-r--r--ext/spl/tests/array_009a.phpt21
-rw-r--r--ext/spl/tests/array_010.phpt11
-rw-r--r--ext/spl/tests/array_011.phpt5
-rw-r--r--ext/spl/tests/array_012.phpt21
-rw-r--r--ext/spl/tests/array_013.phpt21
-rw-r--r--ext/spl/tests/array_014.phpt19
-rw-r--r--ext/spl/tests/array_015.phpt11
-rw-r--r--ext/spl/tests/array_016.phpt7
-rw-r--r--ext/spl/tests/array_017.phpt171
-rw-r--r--ext/spl/tests/array_018.phptbin632 -> 631 bytes
-rw-r--r--ext/spl/tests/array_019.phpt11
-rw-r--r--ext/spl/tests/array_020.phpt57
-rw-r--r--ext/spl/tests/array_021.phpt16
-rw-r--r--ext/spl/tests/array_022.phpt22
-rw-r--r--ext/spl/tests/array_024.phpt2
-rw-r--r--ext/spl/tests/array_026.phpt4
-rw-r--r--ext/spl/tests/array_027.phpt1
-rw-r--r--ext/spl/tests/bug28822.phpt2
-rw-r--r--ext/spl/tests/bug31185.phpt36
-rw-r--r--ext/spl/tests/bug32134.phpt5
-rw-r--r--ext/spl/tests/bug32394.phpt2
-rw-r--r--ext/spl/tests/bug33136.phpt35
-rw-r--r--ext/spl/tests/bug34548.phpt16
-rw-r--r--ext/spl/tests/bug36258.phpt8
-rw-r--r--ext/spl/tests/bug36287.phpt18
-rw-r--r--ext/spl/tests/bug36825.phpt16
-rw-r--r--ext/spl/tests/bug36941.phpt2
-rw-r--r--ext/spl/tests/bug37457.phpt78
-rw-r--r--ext/spl/tests/bug38325.phpt2
-rw-r--r--ext/spl/tests/bug38618.phpt5
-rw-r--r--ext/spl/tests/bug40036.phpt2
-rw-r--r--ext/spl/tests/bug40091.phpt10
-rw-r--r--ext/spl/tests/bug40442.phpt2
-rw-r--r--ext/spl/tests/bug40872.phpt34
-rw-r--r--ext/spl/tests/bug41691.phpt12
-rw-r--r--ext/spl/tests/bug41828.phpt7
-rw-r--r--ext/spl/tests/bug42364.phpt2
-rw-r--r--ext/spl/tests/bug42703.phpt24
-rw-r--r--ext/spl/tests/bug45216.phpt25
-rw-r--r--ext/spl/tests/bug45614.phpt12
-rw-r--r--ext/spl/tests/bug45622.phpt4
-rw-r--r--ext/spl/tests/bug45622b.phpt12
-rw-r--r--ext/spl/tests/bug46051.phpt5
-rw-r--r--ext/spl/tests/bug46053.phpt1
-rw-r--r--ext/spl/tests/bug46160.phpt4
-rw-r--r--ext/spl/tests/bug46569.csv5
-rw-r--r--ext/spl/tests/bug46569.phpt14
-rw-r--r--ext/spl/tests/bug47534.phpt1
-rw-r--r--ext/spl/tests/bug48023.phpt2
-rw-r--r--ext/spl/tests/bug48361.phpt2
-rw-r--r--ext/spl/tests/bug49263.phpt2
-rw-r--r--ext/spl/tests/bug50579.phpt18
-rw-r--r--ext/spl/tests/bug51068.phpt4
-rw-r--r--ext/spl/tests/bug51119.phpt21
-rw-r--r--ext/spl/tests/bug51374.phpt2
-rw-r--r--ext/spl/tests/bug53071.phpt14
-rw-r--r--ext/spl/tests/bug53362.phpt6
-rw-r--r--ext/spl/tests/bug54281.phpt4
-rw-r--r--ext/spl/tests/bug54291.phpt3
-rw-r--r--ext/spl/tests/bug54292.phpt6
-rw-r--r--ext/spl/tests/bug54304.phpt10
-rw-r--r--ext/spl/tests/bug54323.phpt5
-rw-r--r--ext/spl/tests/bug54384.phpt51
-rw-r--r--ext/spl/tests/bug55701.phpt15
-rw-r--r--ext/spl/tests/bug60201.phpt4
-rw-r--r--ext/spl/tests/bug61326.phpt1
-rw-r--r--ext/spl/tests/bug61347.phpt7
-rw-r--r--ext/spl/tests/bug61453.phpt10
-rw-r--r--ext/spl/tests/bug61828.phpt14
-rw-r--r--ext/spl/tests/bug62004.phpt17
-rw-r--r--ext/spl/tests/bug62004.txt4
-rw-r--r--ext/spl/tests/bug62672.phpt1
-rw-r--r--ext/spl/tests/bug62904.phpt1
-rw-r--r--ext/spl/tests/bug62978.phpt19
-rw-r--r--ext/spl/tests/bug64023.phpt3
-rw-r--r--ext/spl/tests/bug65006.phpt41
-rw-r--r--ext/spl/tests/bug65213.phpt2
-rw-r--r--ext/spl/tests/bug65328.phpt1
-rw-r--r--ext/spl/tests/bug65387.phpt52
-rw-r--r--ext/spl/tests/bug65545.phpt20
-rw-r--r--ext/spl/tests/bug66127.phpt3
-rw-r--r--ext/spl/tests/bug66702.phpt1
-rw-r--r--ext/spl/tests/bug66834.phpt50
-rw-r--r--ext/spl/tests/bug67359.phpt24
-rw-r--r--ext/spl/tests/bug67539.phpt11
-rw-r--r--ext/spl/tests/bug67582.phpt4
-rw-r--r--ext/spl/tests/bug68128.phpt6
-rw-r--r--ext/spl/tests/bug68175.phpt2
-rw-r--r--ext/spl/tests/bug68479.phpt4
-rw-r--r--ext/spl/tests/bug68825.phpt2
-rw-r--r--ext/spl/tests/bug69108.phpt6
-rw-r--r--ext/spl/tests/bug69335.phpt8
-rw-r--r--ext/spl/tests/bug69845.phpt6
-rw-r--r--ext/spl/tests/bug69970.phpt12
-rw-r--r--ext/spl/tests/bug70068.phpt2
-rw-r--r--ext/spl/tests/bug70166.phpt2
-rw-r--r--ext/spl/tests/bug70168.phpt2
-rw-r--r--ext/spl/tests/bug70169.phpt2
-rw-r--r--ext/spl/tests/bug70365.phpt21
-rw-r--r--ext/spl/tests/bug70366.phpt20
-rw-r--r--ext/spl/tests/bug70730.phpt24
-rw-r--r--ext/spl/tests/bug70852.phpt6
-rw-r--r--ext/spl/tests/bug70959.phpt15
-rw-r--r--ext/spl/tests/bug71028.phpt2
-rw-r--r--ext/spl/tests/bug71202.phpt40
-rw-r--r--ext/spl/tests/bug71204.phpt4
-rw-r--r--ext/spl/tests/bug71236.phpt23
-rw-r--r--ext/spl/tests/bug71412.phpt4
-rw-r--r--ext/spl/tests/bug71617.phpt34
-rw-r--r--ext/spl/tests/bug71735.phpt6
-rw-r--r--ext/spl/tests/bug72051.phpt10
-rw-r--r--ext/spl/tests/bug72684.phpt4
-rw-r--r--ext/spl/tests/bug72884.phpt1
-rw-r--r--ext/spl/tests/bug72888.phpt6
-rw-r--r--ext/spl/tests/bug73029.phpt2
-rw-r--r--ext/spl/tests/bug73423.phpt6
-rw-r--r--ext/spl/tests/bug73629.phpt2
-rw-r--r--ext/spl/tests/bug73686.phpt6
-rw-r--r--ext/spl/tests/bug73896.phpt8
-rw-r--r--ext/spl/tests/bug74372.phpt2
-rw-r--r--ext/spl/tests/bug74519.phpt6
-rw-r--r--ext/spl/tests/bug74669.phpt2
-rw-r--r--ext/spl/tests/bug75049.phpt3
-rw-r--r--ext/spl/tests/bug75173.phpt1
-rw-r--r--ext/spl/tests/bug75717.phpt2
-rw-r--r--ext/spl/tests/bug76367.phpt2
-rw-r--r--ext/spl/tests/bug77298.phpt1
-rw-r--r--ext/spl/tests/bug77431.phpt7
-rw-r--r--ext/spl/tests/bug78863.phpt2
-rw-r--r--ext/spl/tests/bug79432.phpt14
-rw-r--r--ext/spl/tests/bug79710.phpt2
-rw-r--r--ext/spl/tests/bug79987.phpt38
-rw-r--r--ext/spl/tests/bug80719.phpt10
-rw-r--r--ext/spl/tests/class_implements_basic.phpt8
-rw-r--r--ext/spl/tests/class_implements_basic2.phpt8
-rw-r--r--ext/spl/tests/class_implements_variation.phpt8
-rw-r--r--ext/spl/tests/class_implements_variation1.phpt100
-rw-r--r--ext/spl/tests/class_uses_basic.phpt8
-rw-r--r--ext/spl/tests/class_uses_basic2.phpt10
-rw-r--r--ext/spl/tests/class_uses_variation.phpt8
-rw-r--r--ext/spl/tests/class_uses_variation1.phpt96
-rw-r--r--ext/spl/tests/countable_count_variation1.phpt34
-rw-r--r--ext/spl/tests/dit_001.phpt2
-rw-r--r--ext/spl/tests/dit_001_noglob.phpt2
-rw-r--r--ext/spl/tests/dit_002.phpt66
-rw-r--r--ext/spl/tests/dit_003.phpt4
-rw-r--r--ext/spl/tests/dit_004.phpt18
-rw-r--r--ext/spl/tests/dit_005.phpt2
-rw-r--r--ext/spl/tests/dit_006.phpt2
-rw-r--r--ext/spl/tests/dllist_001.phpt3
-rw-r--r--ext/spl/tests/dllist_002.phpt3
-rw-r--r--ext/spl/tests/dllist_003.phpt3
-rw-r--r--ext/spl/tests/dllist_004.phpt3
-rw-r--r--ext/spl/tests/dllist_005.phpt3
-rw-r--r--ext/spl/tests/dllist_006.phpt9
-rw-r--r--ext/spl/tests/dllist_007.phpt3
-rw-r--r--ext/spl/tests/dllist_008.phpt2
-rw-r--r--ext/spl/tests/dllist_010.phpt2
-rw-r--r--ext/spl/tests/dllist_011.phpt2
-rw-r--r--ext/spl/tests/dllist_012.phpt2
-rw-r--r--ext/spl/tests/dllist_013.phpt9
-rw-r--r--ext/spl/tests/dllist_memleak.phpt3
-rw-r--r--ext/spl/tests/dualiterator.inc378
-rw-r--r--ext/spl/tests/dualiterator_001.phpt13
-rw-r--r--ext/spl/tests/fileobject_001.phpt6
-rw-r--r--ext/spl/tests/fileobject_002.phpt25
-rw-r--r--ext/spl/tests/fileobject_003.phpt65
-rw-r--r--ext/spl/tests/fileobject_004.phpt2
-rw-r--r--ext/spl/tests/fileobject_005.phpt16
-rw-r--r--ext/spl/tests/fileobject_getcurrentline_basic.phpt2
-rw-r--r--ext/spl/tests/fileobject_setmaxlinelen_error001.phpt6
-rw-r--r--ext/spl/tests/filesystemiterator_flags.phpt14
-rw-r--r--ext/spl/tests/fixedarray_001.phpt2
-rw-r--r--ext/spl/tests/fixedarray_002.phpt6
-rw-r--r--ext/spl/tests/fixedarray_003.phpt88
-rw-r--r--ext/spl/tests/fixedarray_004.phpt6
-rw-r--r--ext/spl/tests/fixedarray_005.phpt20
-rw-r--r--ext/spl/tests/fixedarray_006.phpt8
-rw-r--r--ext/spl/tests/fixedarray_007.phpt10
-rw-r--r--ext/spl/tests/fixedarray_008.phpt10
-rw-r--r--ext/spl/tests/fixedarray_009.phpt8
-rw-r--r--ext/spl/tests/fixedarray_012.phpt4
-rw-r--r--ext/spl/tests/fixedarray_013.phpt6
-rw-r--r--ext/spl/tests/fixedarray_014.phpt6
-rw-r--r--ext/spl/tests/fixedarray_015.phpt6
-rw-r--r--ext/spl/tests/fixedarray_018.phpt2
-rw-r--r--ext/spl/tests/fixedarray_019.phpt51
-rw-r--r--ext/spl/tests/fixedarray_021.phpt28
-rw-r--r--ext/spl/tests/heap_001.phpt3
-rw-r--r--ext/spl/tests/heap_002.phpt3
-rw-r--r--ext/spl/tests/heap_003.phpt3
-rw-r--r--ext/spl/tests/heap_004.phpt3
-rw-r--r--ext/spl/tests/heap_005.phpt3
-rw-r--r--ext/spl/tests/heap_006.phpt3
-rw-r--r--ext/spl/tests/heap_007.phpt3
-rw-r--r--ext/spl/tests/heap_008.phpt3
-rw-r--r--ext/spl/tests/heap_009.phpt12
-rw-r--r--ext/spl/tests/heap_010.phpt2
-rw-r--r--ext/spl/tests/heap_011.phpt2
-rw-r--r--ext/spl/tests/heap_012.phpt2
-rw-r--r--ext/spl/tests/heap_corruption.phpt54
-rw-r--r--ext/spl/tests/heap_current_variation_001.phpt8
-rw-r--r--ext/spl/tests/heap_top_variation_002.phpt12
-rw-r--r--ext/spl/tests/heap_top_variation_003.phpt4
-rw-r--r--ext/spl/tests/iterator_001.phpt99
-rw-r--r--ext/spl/tests/iterator_002.phpt51
-rw-r--r--ext/spl/tests/iterator_003.phpt99
-rw-r--r--ext/spl/tests/iterator_004.phpt91
-rw-r--r--ext/spl/tests/iterator_005.phpt27
-rw-r--r--ext/spl/tests/iterator_006.phpt5
-rw-r--r--ext/spl/tests/iterator_007.phpt119
-rw-r--r--ext/spl/tests/iterator_008.phpt61
-rw-r--r--ext/spl/tests/iterator_009.phpt55
-rw-r--r--ext/spl/tests/iterator_010.phpt5
-rw-r--r--ext/spl/tests/iterator_011.phpt9
-rw-r--r--ext/spl/tests/iterator_012.phpt5
-rw-r--r--ext/spl/tests/iterator_013.phpt13
-rw-r--r--ext/spl/tests/iterator_014.phpt105
-rw-r--r--ext/spl/tests/iterator_015.phpt47
-rw-r--r--ext/spl/tests/iterator_016.phpt65
-rw-r--r--ext/spl/tests/iterator_018.phpt51
-rw-r--r--ext/spl/tests/iterator_021.phpt165
-rw-r--r--ext/spl/tests/iterator_022.phpt193
-rw-r--r--ext/spl/tests/iterator_023.phpt193
-rw-r--r--ext/spl/tests/iterator_024.phpt7
-rw-r--r--ext/spl/tests/iterator_025.phpt29
-rw-r--r--ext/spl/tests/iterator_026.phpt11
-rw-r--r--ext/spl/tests/iterator_027.phpt13
-rw-r--r--ext/spl/tests/iterator_028.phpt18
-rw-r--r--ext/spl/tests/iterator_029.phpt7
-rw-r--r--ext/spl/tests/iterator_030.phpt11
-rw-r--r--ext/spl/tests/iterator_031.phpt73
-rw-r--r--ext/spl/tests/iterator_032.phpt15
-rw-r--r--ext/spl/tests/iterator_033.phpt11
-rw-r--r--ext/spl/tests/iterator_034.phpt183
-rw-r--r--ext/spl/tests/iterator_036.phpt8
-rw-r--r--ext/spl/tests/iterator_037.phpt90
-rw-r--r--ext/spl/tests/iterator_038.phpt6
-rw-r--r--ext/spl/tests/iterator_039.phpt75
-rw-r--r--ext/spl/tests/iterator_040.phpt19
-rw-r--r--ext/spl/tests/iterator_041.phpt141
-rw-r--r--ext/spl/tests/iterator_041a.phpt143
-rw-r--r--ext/spl/tests/iterator_041b.phpt151
-rw-r--r--ext/spl/tests/iterator_042.phpt21
-rw-r--r--ext/spl/tests/iterator_043.phpt3
-rw-r--r--ext/spl/tests/iterator_044.phpt98
-rw-r--r--ext/spl/tests/iterator_045.phpt106
-rw-r--r--ext/spl/tests/iterator_046.phpt45
-rw-r--r--ext/spl/tests/iterator_047.phpt93
-rw-r--r--ext/spl/tests/iterator_048.phpt19
-rw-r--r--ext/spl/tests/iterator_049.phpt3
-rw-r--r--ext/spl/tests/iterator_049b.phptbin632 -> 613 bytes
-rw-r--r--ext/spl/tests/iterator_050.phpt19
-rw-r--r--ext/spl/tests/iterator_051.phpt19
-rw-r--r--ext/spl/tests/iterator_052.phpt47
-rw-r--r--ext/spl/tests/iterator_053.phpt47
-rw-r--r--ext/spl/tests/iterator_054.phpt19
-rw-r--r--ext/spl/tests/iterator_055.phpt19
-rw-r--r--ext/spl/tests/iterator_056.phpt26
-rw-r--r--ext/spl/tests/iterator_057.phpt4
-rw-r--r--ext/spl/tests/iterator_058.phpt14
-rw-r--r--ext/spl/tests/iterator_062.phpt8
-rw-r--r--ext/spl/tests/iterator_067.phpt6
-rw-r--r--ext/spl/tests/iterator_068.phpt26
-rw-r--r--ext/spl/tests/iterator_069.phpt2
-rw-r--r--ext/spl/tests/iterator_070.phpt2
-rw-r--r--ext/spl/tests/iterator_071.phpt2
-rw-r--r--ext/spl/tests/iterator_count.phpt12
-rw-r--r--ext/spl/tests/iterator_to_array.phpt11
-rw-r--r--ext/spl/tests/iterator_to_array_nonscalar_keys.phpt22
-rw-r--r--ext/spl/tests/multiple_iterator_001.phpt36
-rw-r--r--ext/spl/tests/observer_001.phpt86
-rw-r--r--ext/spl/tests/observer_002.phpt181
-rw-r--r--ext/spl/tests/observer_003.phpt17
-rw-r--r--ext/spl/tests/observer_004.phpt27
-rw-r--r--ext/spl/tests/observer_005.phpt51
-rw-r--r--ext/spl/tests/observer_006.phpt27
-rw-r--r--ext/spl/tests/observer_007.phpt3
-rw-r--r--ext/spl/tests/observer_008.phpt3
-rw-r--r--ext/spl/tests/observer_009.phpt3
-rw-r--r--ext/spl/tests/observer_010.phpt1
-rw-r--r--ext/spl/tests/pqueue_001.phpt3
-rw-r--r--ext/spl/tests/pqueue_002.phpt3
-rw-r--r--ext/spl/tests/pqueue_003.phpt3
-rw-r--r--ext/spl/tests/pqueue_004.phpt3
-rw-r--r--ext/spl/tests/pqueue_compare_basic.phpt3
-rw-r--r--ext/spl/tests/recursiveIteratorIterator_beginchildren_error.phpt2
-rw-r--r--ext/spl/tests/recursiveIteratorIterator_callHasChildren_error.phpt2
-rw-r--r--ext/spl/tests/recursiveIteratorIterator_endchildren_error.phpt2
-rw-r--r--ext/spl/tests/recursiveIteratorIterator_nextelement_error.phpt2
-rw-r--r--ext/spl/tests/recursive_tree_iterator_001.phpt60
-rw-r--r--ext/spl/tests/recursive_tree_iterator_002.phpt10
-rw-r--r--ext/spl/tests/recursive_tree_iterator_003.phpt6
-rw-r--r--ext/spl/tests/recursive_tree_iterator_004.phpt36
-rw-r--r--ext/spl/tests/recursive_tree_iterator_005.phpt42
-rw-r--r--ext/spl/tests/recursive_tree_iterator_006.phpt74
-rw-r--r--ext/spl/tests/recursive_tree_iterator_007.phpt24
-rw-r--r--ext/spl/tests/recursive_tree_iterator_008.phpt27
-rw-r--r--ext/spl/tests/recursive_tree_iterator_setpostfix.phpt38
-rw-r--r--ext/spl/tests/recursivecomparedualiterator.inc86
-rw-r--r--ext/spl/tests/recursivedualiterator.inc92
-rw-r--r--ext/spl/tests/regexIterator_setMode_error.phpt16
-rw-r--r--ext/spl/tests/spl_001.phpt4
-rw-r--r--ext/spl/tests/spl_002.phpt10
-rw-r--r--ext/spl/tests/spl_003.phpt3
-rw-r--r--ext/spl/tests/spl_004.phpt57
-rw-r--r--ext/spl/tests/spl_006.phpt2
-rw-r--r--ext/spl/tests/spl_007.phpt3
-rw-r--r--ext/spl/tests/spl_autoload_001.phpt22
-rw-r--r--ext/spl/tests/spl_autoload_002.phpt16
-rw-r--r--ext/spl/tests/spl_autoload_003.phpt15
-rw-r--r--ext/spl/tests/spl_autoload_004.phpt5
-rw-r--r--ext/spl/tests/spl_autoload_005.phpt26
-rw-r--r--ext/spl/tests/spl_autoload_006.phpt5
-rw-r--r--ext/spl/tests/spl_autoload_007.phpt68
-rw-r--r--ext/spl/tests/spl_autoload_008.phpt82
-rw-r--r--ext/spl/tests/spl_autoload_009.phpt7
-rw-r--r--ext/spl/tests/spl_autoload_010.phpt3
-rw-r--r--ext/spl/tests/spl_autoload_011.phpt1
-rw-r--r--ext/spl/tests/spl_autoload_012.phpt5
-rw-r--r--ext/spl/tests/spl_autoload_013.phpt4
-rw-r--r--ext/spl/tests/spl_autoload_014.phpt4
-rw-r--r--ext/spl/tests/spl_autoload_bug48541.phpt2
-rw-r--r--ext/spl/tests/spl_autoload_called_scope.phpt33
-rw-r--r--ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt14
-rw-r--r--ext/spl/tests/spl_autoload_warn_on_false_do_throw.phpt16
-rw-r--r--ext/spl/tests/spl_caching_iterator_constructor_flags.phpt16
-rw-r--r--ext/spl/tests/spl_cachingiterator___toString_basic.phpt2
-rw-r--r--ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt2
-rw-r--r--ext/spl/tests/spl_heap_count_basic.phpt4
-rw-r--r--ext/spl/tests/spl_heap_is_empty_basic.phpt5
-rw-r--r--ext/spl/tests/spl_iterator_apply_error.phpt10
-rw-r--r--ext/spl/tests/spl_iterator_apply_error_001.phpt6
-rw-r--r--ext/spl/tests/spl_iterator_caching_count_basic.phpt2
-rw-r--r--ext/spl/tests/spl_iterator_caching_count_error.phpt2
-rw-r--r--ext/spl/tests/spl_iterator_caching_getcache_error.phpt2
-rw-r--r--ext/spl/tests/spl_iterator_getcallchildren.phpt10
-rw-r--r--ext/spl/tests/spl_iterator_iterator_constructor.phpt4
-rw-r--r--ext/spl/tests/spl_iterator_to_array_error.phpt18
-rw-r--r--ext/spl/tests/spl_limit_iterator_check_limits.phpt19
-rw-r--r--ext/spl/tests/spl_object_id.phpt8
-rw-r--r--ext/spl/tests/spl_pq_top_error_corrupt.phpt14
-rw-r--r--ext/spl/tests/spl_pqueue_gc.phpt2
-rw-r--r--ext/spl/tests/unserialize.phpt22
493 files changed, 10206 insertions, 9056 deletions
diff --git a/ext/spl/config.m4 b/ext/spl/config.m4
index 8e0d31f3e2..6e6973646d 100644
--- a/ext/spl/config.m4
+++ b/ext/spl/config.m4
@@ -1,3 +1,4 @@
PHP_NEW_EXTENSION(spl, php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c, no,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
PHP_INSTALL_HEADERS([ext/spl], [php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_dllist.h spl_heap.h spl_fixedarray.h])
PHP_ADD_EXTENSION_DEP(spl, pcre, true)
+PHP_ADD_EXTENSION_DEP(spl, standard, true)
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index b147a96128..09c876b45f 100644
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -25,6 +23,7 @@
#include "php_main.h"
#include "ext/standard/info.h"
#include "php_spl.h"
+#include "php_spl_arginfo.h"
#include "spl_functions.h"
#include "spl_engine.h"
#include "spl_array.h"
@@ -48,16 +47,11 @@ ZEND_DECLARE_MODULE_GLOBALS(spl)
#define SPL_DEFAULT_FILE_EXTENSIONS ".inc,.php"
-static zend_function *spl_autoload_fn = NULL;
-static zend_function *spl_autoload_call_fn = NULL;
-
-/* {{{ PHP_GINIT_FUNCTION
- */
+/* {{{ PHP_GINIT_FUNCTION */
static PHP_GINIT_FUNCTION(spl)
{
- spl_globals->autoload_extensions = NULL;
- spl_globals->autoload_functions = NULL;
- spl_globals->autoload_running = 0;
+ spl_globals->autoload_extensions = NULL;
+ spl_globals->autoload_functions = NULL;
}
/* }}} */
@@ -81,8 +75,7 @@ static zend_class_entry * spl_find_ce_by_name(zend_string *name, zend_bool autol
return ce;
}
-/* {{{ proto array class_parents(object instance [, bool autoload = true])
- Return an array containing the names of all parent classes */
+/* {{{ Return an array containing the names of all parent classes */
PHP_FUNCTION(class_parents)
{
zval *obj;
@@ -90,12 +83,12 @@ PHP_FUNCTION(class_parents)
zend_bool autoload = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &obj, &autoload) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (Z_TYPE_P(obj) != IS_OBJECT && Z_TYPE_P(obj) != IS_STRING) {
- php_error_docref(NULL, E_WARNING, "object or string expected");
- RETURN_FALSE;
+ zend_argument_type_error(1, "must be of type object|string, %s given", zend_zval_type_name(obj));
+ RETURN_THROWS();
}
if (Z_TYPE_P(obj) == IS_STRING) {
@@ -115,8 +108,7 @@ PHP_FUNCTION(class_parents)
}
/* }}} */
-/* {{{ proto array class_implements(mixed what [, bool autoload ])
- Return all classes and interfaces implemented by SPL */
+/* {{{ Return all classes and interfaces implemented by SPL */
PHP_FUNCTION(class_implements)
{
zval *obj;
@@ -124,11 +116,11 @@ PHP_FUNCTION(class_implements)
zend_class_entry *ce;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &obj, &autoload) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (Z_TYPE_P(obj) != IS_OBJECT && Z_TYPE_P(obj) != IS_STRING) {
- php_error_docref(NULL, E_WARNING, "object or string expected");
- RETURN_FALSE;
+ zend_argument_type_error(1, "must be of type object|string, %s given", zend_zval_type_name(obj));
+ RETURN_THROWS();
}
if (Z_TYPE_P(obj) == IS_STRING) {
@@ -144,8 +136,7 @@ PHP_FUNCTION(class_implements)
}
/* }}} */
-/* {{{ proto array class_uses(mixed what [, bool autoload ])
- Return all traits used by a class. */
+/* {{{ Return all traits used by a class. */
PHP_FUNCTION(class_uses)
{
zval *obj;
@@ -153,11 +144,11 @@ PHP_FUNCTION(class_uses)
zend_class_entry *ce;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &obj, &autoload) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (Z_TYPE_P(obj) != IS_OBJECT && Z_TYPE_P(obj) != IS_STRING) {
- php_error_docref(NULL, E_WARNING, "object or string expected");
- RETURN_FALSE;
+ zend_argument_type_error(1, "must be of type object|string, %s given", zend_zval_type_name(obj));
+ RETURN_THROWS();
}
if (Z_TYPE_P(obj) == IS_STRING) {
@@ -233,12 +224,11 @@ PHP_FUNCTION(class_uses)
SPL_ADD_CLASS(UnderflowException, z_list, sub, allow, ce_flags); \
SPL_ADD_CLASS(UnexpectedValueException, z_list, sub, allow, ce_flags); \
-/* {{{ proto array spl_classes()
- Return an array containing the names of all clsses and interfaces defined in SPL */
+/* {{{ Return an array containing the names of all clsses and interfaces defined in SPL */
PHP_FUNCTION(spl_classes)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
array_init(return_value);
@@ -305,16 +295,19 @@ static int spl_autoload(zend_string *class_name, zend_string *lc_name, const cha
return 0;
} /* }}} */
-/* {{{ proto void spl_autoload(string class_name [, string file_extensions])
- Default implementation for __autoload() */
+/* {{{ Default autoloader implementation */
PHP_FUNCTION(spl_autoload)
{
int pos_len, pos1_len;
char *pos, *pos1;
- zend_string *class_name, *lc_name, *file_exts = SPL_G(autoload_extensions);
+ zend_string *class_name, *lc_name, *file_exts = NULL;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|S!", &class_name, &file_exts) == FAILURE) {
+ RETURN_THROWS();
+ }
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|S", &class_name, &file_exts) == FAILURE) {
- RETURN_FALSE;
+ if (!file_exts) {
+ file_exts = SPL_G(autoload_extensions);
}
if (file_exts == NULL) { /* autoload_extensions is not initialized, set to defaults */
@@ -342,15 +335,15 @@ PHP_FUNCTION(spl_autoload)
zend_string_release(lc_name);
} /* }}} */
-/* {{{ proto string spl_autoload_extensions([string file_extensions])
- Register and return default file extensions for spl_autoload */
+/* {{{ Register and return default file extensions for spl_autoload */
PHP_FUNCTION(spl_autoload_extensions)
{
zend_string *file_exts = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S", &file_exts) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S!", &file_exts) == FAILURE) {
+ RETURN_THROWS();
}
+
if (file_exts) {
if (SPL_G(autoload_extensions)) {
zend_string_release_ex(SPL_G(autoload_extensions), 0);
@@ -368,124 +361,109 @@ PHP_FUNCTION(spl_autoload_extensions)
typedef struct {
zend_function *func_ptr;
- zval obj;
- zval closure;
+ zend_object *obj;
+ zend_object *closure;
zend_class_entry *ce;
} autoload_func_info;
-static void autoload_func_info_dtor(zval *element)
-{
- autoload_func_info *alfi = (autoload_func_info*)Z_PTR_P(element);
- if (!Z_ISUNDEF(alfi->obj)) {
- zval_ptr_dtor(&alfi->obj);
+static void autoload_func_info_destroy(autoload_func_info *alfi) {
+ if (alfi->obj) {
+ zend_object_release(alfi->obj);
}
if (alfi->func_ptr &&
UNEXPECTED(alfi->func_ptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
zend_string_release_ex(alfi->func_ptr->common.function_name, 0);
zend_free_trampoline(alfi->func_ptr);
}
- if (!Z_ISUNDEF(alfi->closure)) {
- zval_ptr_dtor(&alfi->closure);
+ if (alfi->closure) {
+ zend_object_release(alfi->closure);
}
efree(alfi);
}
-/* {{{ proto void spl_autoload_call(string class_name)
- Try all registered autoload function to load the requested class */
-PHP_FUNCTION(spl_autoload_call)
+static void autoload_func_info_zval_dtor(zval *element)
{
- zval *class_name, retval;
- zend_string *lc_name, *func_name;
- autoload_func_info *alfi;
+ autoload_func_info_destroy(Z_PTR_P(element));
+}
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &class_name) == FAILURE || Z_TYPE_P(class_name) != IS_STRING) {
- return;
+static autoload_func_info *autoload_func_info_from_fci(
+ zend_fcall_info *fci, zend_fcall_info_cache *fcc) {
+ autoload_func_info *alfi = emalloc(sizeof(autoload_func_info));
+ alfi->ce = fcc->calling_scope;
+ alfi->func_ptr = fcc->function_handler;
+ alfi->obj = fcc->object;
+ if (alfi->obj) {
+ GC_ADDREF(alfi->obj);
+ }
+ if (Z_TYPE(fci->function_name) == IS_OBJECT) {
+ alfi->closure = Z_OBJ(fci->function_name);
+ GC_ADDREF(alfi->closure);
+ } else {
+ alfi->closure = NULL;
}
+ return alfi;
+}
- if (SPL_G(autoload_functions)) {
- HashPosition pos;
- zend_ulong num_idx;
- zend_function *func;
- zend_fcall_info fci;
- zend_fcall_info_cache fcic;
- zend_class_entry *called_scope = zend_get_called_scope(execute_data);
- int l_autoload_running = SPL_G(autoload_running);
-
- SPL_G(autoload_running) = 1;
- lc_name = zend_string_tolower(Z_STR_P(class_name));
-
- fci.size = sizeof(fci);
- fci.retval = &retval;
- fci.param_count = 1;
- fci.params = class_name;
- fci.no_separation = 1;
-
- ZVAL_UNDEF(&fci.function_name); /* Unused */
-
- zend_hash_internal_pointer_reset_ex(SPL_G(autoload_functions), &pos);
- while (zend_hash_get_current_key_ex(SPL_G(autoload_functions), &func_name, &num_idx, &pos) == HASH_KEY_IS_STRING) {
- alfi = zend_hash_get_current_data_ptr_ex(SPL_G(autoload_functions), &pos);
- func = alfi->func_ptr;
- if (UNEXPECTED(func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
- func = emalloc(sizeof(zend_op_array));
- memcpy(func, alfi->func_ptr, sizeof(zend_op_array));
- zend_string_addref(func->op_array.function_name);
- }
- ZVAL_UNDEF(&retval);
- fcic.function_handler = func;
- if (Z_ISUNDEF(alfi->obj)) {
- fci.object = NULL;
- fcic.object = NULL;
- if (alfi->ce &&
- (!called_scope ||
- !instanceof_function(called_scope, alfi->ce))) {
- fcic.called_scope = alfi->ce;
- } else {
- fcic.called_scope = called_scope;
- }
- } else {
- fci.object = Z_OBJ(alfi->obj);
- fcic.object = Z_OBJ(alfi->obj);
- fcic.called_scope = Z_OBJCE(alfi->obj);
- }
+static zend_bool autoload_func_info_equals(
+ const autoload_func_info *alfi1, const autoload_func_info *alfi2) {
+ return alfi1->func_ptr == alfi2->func_ptr
+ && alfi1->obj == alfi2->obj
+ && alfi1->ce == alfi2->ce
+ && alfi1->closure == alfi2->closure;
+}
- zend_call_function(&fci, &fcic);
- zval_ptr_dtor(&retval);
+static zend_class_entry *spl_perform_autoload(zend_string *class_name, zend_string *lc_name) {
+ if (!SPL_G(autoload_functions)) {
+ return NULL;
+ }
- if (EG(exception)) {
- break;
- }
+ /* We don't use ZEND_HASH_FOREACH here,
+ * because autoloaders may be added/removed during autoloading. */
+ HashPosition pos;
+ zend_hash_internal_pointer_reset_ex(SPL_G(autoload_functions), &pos);
+ while (1) {
+ autoload_func_info *alfi =
+ zend_hash_get_current_data_ptr_ex(SPL_G(autoload_functions), &pos);
+ if (!alfi) {
+ break;
+ }
- if (pos + 1 == SPL_G(autoload_functions)->nNumUsed ||
- zend_hash_exists(EG(class_table), lc_name)) {
- break;
- }
- zend_hash_move_forward_ex(SPL_G(autoload_functions), &pos);
+ zend_function *func = alfi->func_ptr;
+ if (UNEXPECTED(func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
+ func = emalloc(sizeof(zend_op_array));
+ memcpy(func, alfi->func_ptr, sizeof(zend_op_array));
+ zend_string_addref(func->op_array.function_name);
}
- zend_string_release_ex(lc_name, 0);
- SPL_G(autoload_running) = l_autoload_running;
- } else {
- /* do not use or overwrite &EG(autoload_func) here */
- zend_fcall_info fcall_info;
- zend_fcall_info_cache fcall_cache;
-
- ZVAL_UNDEF(&retval);
-
- fcall_info.size = sizeof(fcall_info);
- ZVAL_UNDEF(&fcall_info.function_name);
- fcall_info.retval = &retval;
- fcall_info.param_count = 1;
- fcall_info.params = class_name;
- fcall_info.object = NULL;
- fcall_info.no_separation = 1;
-
- fcall_cache.function_handler = spl_autoload_fn;
- fcall_cache.called_scope = NULL;
- fcall_cache.object = NULL;
-
- zend_call_function(&fcall_info, &fcall_cache);
- zval_ptr_dtor(&retval);
+
+ zval param;
+ ZVAL_STR(&param, class_name);
+ zend_call_known_function(func, alfi->obj, alfi->ce, NULL, 1, &param, NULL);
+ if (EG(exception)) {
+ break;
+ }
+
+ zend_class_entry *ce = zend_hash_find_ptr(EG(class_table), lc_name);
+ if (ce) {
+ return ce;
+ }
+
+ zend_hash_move_forward_ex(SPL_G(autoload_functions), &pos);
}
+ return NULL;
+}
+
+/* {{{ Try all registered autoload function to load the requested class */
+PHP_FUNCTION(spl_autoload_call)
+{
+ zend_string *class_name;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &class_name) == FAILURE) {
+ RETURN_THROWS();
+ }
+
+ zend_string *lc_name = zend_string_tolower(class_name);
+ spl_perform_autoload(class_name, lc_name);
+ zend_string_release(lc_name);
} /* }}} */
#define HT_MOVE_TAIL_TO_HEAD(ht) \
@@ -497,339 +475,172 @@ PHP_FUNCTION(spl_autoload_call)
zend_hash_rehash(ht); \
} while (0)
-/* {{{ proto bool spl_autoload_register([mixed autoload_function [, bool throw [, bool prepend]]])
- Register given function as __autoload() implementation */
+static Bucket *spl_find_registered_function(autoload_func_info *find_alfi) {
+ if (!SPL_G(autoload_functions)) {
+ return NULL;
+ }
+
+ autoload_func_info *alfi;
+ ZEND_HASH_FOREACH_PTR(SPL_G(autoload_functions), alfi) {
+ if (autoload_func_info_equals(alfi, find_alfi)) {
+ return _p;
+ }
+ } ZEND_HASH_FOREACH_END();
+ return NULL;
+}
+
+/* {{{ Register given function as autoloader */
PHP_FUNCTION(spl_autoload_register)
{
- zend_string *func_name;
- char *error = NULL;
- zend_string *lc_name;
- zval *zcallable = NULL;
zend_bool do_throw = 1;
zend_bool prepend = 0;
- zend_function *spl_func_ptr;
- autoload_func_info alfi;
- zend_object *obj_ptr;
+ zend_fcall_info fci = {0};
zend_fcall_info_cache fcc;
+ autoload_func_info *alfi;
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "|zbb", &zcallable, &do_throw, &prepend) == FAILURE) {
- return;
- }
-
- if (ZEND_NUM_ARGS()) {
- if (!zend_is_callable_ex(zcallable, NULL, IS_CALLABLE_STRICT, &func_name, &fcc, &error)) {
- alfi.ce = fcc.calling_scope;
- alfi.func_ptr = fcc.function_handler;
- obj_ptr = fcc.object;
- if (Z_TYPE_P(zcallable) == IS_ARRAY) {
- if (!obj_ptr && alfi.func_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) {
- if (do_throw) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Passed array specifies a non static method but no object (%s)", error);
- }
- if (error) {
- efree(error);
- }
- zend_string_release_ex(func_name, 0);
- RETURN_FALSE;
- } else if (do_throw) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Passed array does not specify %s %smethod (%s)", alfi.func_ptr ? "a callable" : "an existing", !obj_ptr ? "static " : "", error);
- }
- if (error) {
- efree(error);
- }
- zend_string_release_ex(func_name, 0);
- RETURN_FALSE;
- } else if (Z_TYPE_P(zcallable) == IS_STRING) {
- if (do_throw) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Function '%s' not %s (%s)", ZSTR_VAL(func_name), alfi.func_ptr ? "callable" : "found", error);
- }
- if (error) {
- efree(error);
- }
- zend_string_release_ex(func_name, 0);
- RETURN_FALSE;
- } else {
- if (do_throw) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Illegal value passed (%s)", error);
- }
- if (error) {
- efree(error);
- }
- zend_string_release_ex(func_name, 0);
- RETURN_FALSE;
- }
- } else if (fcc.function_handler->type == ZEND_INTERNAL_FUNCTION &&
- fcc.function_handler->internal_function.handler == zif_spl_autoload_call) {
- if (do_throw) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Function spl_autoload_call() cannot be registered");
- }
- if (error) {
- efree(error);
- }
- zend_string_release_ex(func_name, 0);
- RETURN_FALSE;
- }
- alfi.ce = fcc.calling_scope;
- alfi.func_ptr = fcc.function_handler;
- obj_ptr = fcc.object;
- if (error) {
- efree(error);
- }
-
- if (Z_TYPE_P(zcallable) == IS_OBJECT) {
- ZVAL_COPY(&alfi.closure, zcallable);
-
- lc_name = zend_string_alloc(ZSTR_LEN(func_name) + sizeof(uint32_t), 0);
- zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name), ZSTR_LEN(func_name));
- memcpy(ZSTR_VAL(lc_name) + ZSTR_LEN(func_name), &Z_OBJ_HANDLE_P(zcallable), sizeof(uint32_t));
- ZSTR_VAL(lc_name)[ZSTR_LEN(lc_name)] = '\0';
- } else {
- ZVAL_UNDEF(&alfi.closure);
- /* Skip leading \ */
- if (ZSTR_VAL(func_name)[0] == '\\') {
- lc_name = zend_string_alloc(ZSTR_LEN(func_name) - 1, 0);
- zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name) + 1, ZSTR_LEN(func_name) - 1);
- } else {
- lc_name = zend_string_tolower(func_name);
- }
- }
- zend_string_release_ex(func_name, 0);
+ ZEND_PARSE_PARAMETERS_START(0, 3)
+ Z_PARAM_OPTIONAL
+ Z_PARAM_FUNC_OR_NULL(fci, fcc)
+ Z_PARAM_BOOL(do_throw)
+ Z_PARAM_BOOL(prepend)
+ ZEND_PARSE_PARAMETERS_END();
- if (SPL_G(autoload_functions) && zend_hash_exists(SPL_G(autoload_functions), lc_name)) {
- if (!Z_ISUNDEF(alfi.closure)) {
- Z_DELREF_P(&alfi.closure);
- }
- goto skip;
- }
+ if (!do_throw) {
+ php_error_docref(NULL, E_NOTICE, "Argument #2 ($do_throw) has been ignored, "
+ "spl_autoload_register() will always throw");
+ }
- if (obj_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) {
- /* add object id to the hash to ensure uniqueness, for more reference look at bug #40091 */
- lc_name = zend_string_extend(lc_name, ZSTR_LEN(lc_name) + sizeof(uint32_t), 0);
- memcpy(ZSTR_VAL(lc_name) + ZSTR_LEN(lc_name) - sizeof(uint32_t), &obj_ptr->handle, sizeof(uint32_t));
- ZSTR_VAL(lc_name)[ZSTR_LEN(lc_name)] = '\0';
- ZVAL_OBJ(&alfi.obj, obj_ptr);
- Z_ADDREF(alfi.obj);
- } else {
- ZVAL_UNDEF(&alfi.obj);
- }
+ if (!SPL_G(autoload_functions)) {
+ ALLOC_HASHTABLE(SPL_G(autoload_functions));
+ zend_hash_init(SPL_G(autoload_functions), 1, NULL, autoload_func_info_zval_dtor, 0);
+ /* Initialize as non-packed hash table for prepend functionality. */
+ zend_hash_real_init_mixed(SPL_G(autoload_functions));
+ }
- if (!SPL_G(autoload_functions)) {
- ALLOC_HASHTABLE(SPL_G(autoload_functions));
- zend_hash_init(SPL_G(autoload_functions), 1, NULL, autoload_func_info_dtor, 0);
+ /* If first arg is not null */
+ if (ZEND_FCI_INITIALIZED(fci)) {
+ if (!fcc.function_handler) {
+ /* Call trampoline has been cleared by zpp. Refetch it, because we want to deal
+ * with it outselves. It is important that it is not refetched on every call,
+ * because calls may occur from different scopes. */
+ zend_is_callable_ex(&fci.function_name, NULL, 0, NULL, &fcc, NULL);
}
- spl_func_ptr = spl_autoload_fn;
-
- if (EG(autoload_func) == spl_func_ptr) { /* registered already, so we insert that first */
- autoload_func_info spl_alfi;
-
- spl_alfi.func_ptr = spl_func_ptr;
- ZVAL_UNDEF(&spl_alfi.obj);
- ZVAL_UNDEF(&spl_alfi.closure);
- spl_alfi.ce = NULL;
- zend_hash_add_mem(SPL_G(autoload_functions), spl_autoload_fn->common.function_name,
- &spl_alfi, sizeof(autoload_func_info));
- if (prepend && SPL_G(autoload_functions)->nNumOfElements > 1) {
- /* Move the newly created element to the head of the hashtable */
- HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions));
- }
+ if (fcc.function_handler->type == ZEND_INTERNAL_FUNCTION &&
+ fcc.function_handler->internal_function.handler == zif_spl_autoload_call) {
+ zend_argument_value_error(1, "must not be the spl_autoload_call() function");
+ RETURN_THROWS();
}
- if (UNEXPECTED(alfi.func_ptr == &EG(trampoline))) {
+ alfi = autoload_func_info_from_fci(&fci, &fcc);
+ if (UNEXPECTED(alfi->func_ptr == &EG(trampoline))) {
zend_function *copy = emalloc(sizeof(zend_op_array));
- memcpy(copy, alfi.func_ptr, sizeof(zend_op_array));
- alfi.func_ptr->common.function_name = NULL;
- alfi.func_ptr = copy;
- }
- if (zend_hash_add_mem(SPL_G(autoload_functions), lc_name, &alfi, sizeof(autoload_func_info)) == NULL) {
- if (obj_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) {
- Z_DELREF(alfi.obj);
- }
- if (!Z_ISUNDEF(alfi.closure)) {
- Z_DELREF(alfi.closure);
- }
- if (UNEXPECTED(alfi.func_ptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
- zend_string_release_ex(alfi.func_ptr->common.function_name, 0);
- zend_free_trampoline(alfi.func_ptr);
- }
- }
- if (prepend && SPL_G(autoload_functions)->nNumOfElements > 1) {
- /* Move the newly created element to the head of the hashtable */
- HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions));
+ memcpy(copy, alfi->func_ptr, sizeof(zend_op_array));
+ alfi->func_ptr->common.function_name = NULL;
+ alfi->func_ptr = copy;
}
-skip:
- zend_string_release_ex(lc_name, 0);
+ } else {
+ alfi = emalloc(sizeof(autoload_func_info));
+ alfi->func_ptr = zend_hash_str_find_ptr(
+ CG(function_table), "spl_autoload", sizeof("spl_autoload") - 1);
+ alfi->obj = NULL;
+ alfi->ce = NULL;
+ alfi->closure = NULL;
}
- if (SPL_G(autoload_functions)) {
- EG(autoload_func) = spl_autoload_call_fn;
- } else {
- EG(autoload_func) = spl_autoload_fn;
+ if (spl_find_registered_function(alfi)) {
+ autoload_func_info_destroy(alfi);
+ RETURN_TRUE;
+ }
+
+ zend_hash_next_index_insert_ptr(SPL_G(autoload_functions), alfi);
+ if (prepend && SPL_G(autoload_functions)->nNumOfElements > 1) {
+ /* Move the newly created element to the head of the hashtable */
+ HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions));
}
RETURN_TRUE;
} /* }}} */
-/* {{{ proto bool spl_autoload_unregister(mixed autoload_function)
- Unregister given function as __autoload() implementation */
+/* {{{ Unregister given function as autoloader */
PHP_FUNCTION(spl_autoload_unregister)
{
- zend_string *func_name = NULL;
- char *error = NULL;
- zend_string *lc_name;
- zval *zcallable;
- int success = FAILURE;
- zend_function *spl_func_ptr;
- zend_object *obj_ptr;
+ zend_fcall_info fci;
zend_fcall_info_cache fcc;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zcallable) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) {
+ RETURN_THROWS();
}
- if (!zend_is_callable_ex(zcallable, NULL, IS_CALLABLE_CHECK_SYNTAX_ONLY, &func_name, &fcc, &error)) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Unable to unregister invalid function (%s)", error);
- if (error) {
- efree(error);
- }
- if (func_name) {
- zend_string_release_ex(func_name, 0);
- }
- RETURN_FALSE;
- }
- obj_ptr = fcc.object;
- if (error) {
- efree(error);
+ if (fcc.function_handler && zend_string_equals_literal(
+ fcc.function_handler->common.function_name, "spl_autoload_call")) {
+ /* Don't destroy the hash table, as we might be iterating over it right now. */
+ zend_hash_clean(SPL_G(autoload_functions));
+ RETURN_TRUE;
}
- if (Z_TYPE_P(zcallable) == IS_OBJECT) {
- lc_name = zend_string_alloc(ZSTR_LEN(func_name) + sizeof(uint32_t), 0);
- zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name), ZSTR_LEN(func_name));
- memcpy(ZSTR_VAL(lc_name) + ZSTR_LEN(func_name), &Z_OBJ_HANDLE_P(zcallable), sizeof(uint32_t));
- ZSTR_VAL(lc_name)[ZSTR_LEN(lc_name)] = '\0';
- } else {
- /* Skip leading \ */
- if (ZSTR_VAL(func_name)[0] == '\\') {
- lc_name = zend_string_alloc(ZSTR_LEN(func_name) - 1, 0);
- zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(func_name) + 1, ZSTR_LEN(func_name) - 1);
- } else {
- lc_name = zend_string_tolower(func_name);
- }
+ autoload_func_info *alfi = autoload_func_info_from_fci(&fci, &fcc);
+ Bucket *p = spl_find_registered_function(alfi);
+ autoload_func_info_destroy(alfi);
+ if (p) {
+ zend_hash_del_bucket(SPL_G(autoload_functions), p);
+ RETURN_TRUE;
}
- zend_string_release_ex(func_name, 0);
- if (SPL_G(autoload_functions)) {
- if (zend_string_equals(lc_name, spl_autoload_call_fn->common.function_name)) {
- /* remove all */
- if (!SPL_G(autoload_running)) {
- zend_hash_destroy(SPL_G(autoload_functions));
- FREE_HASHTABLE(SPL_G(autoload_functions));
- SPL_G(autoload_functions) = NULL;
- EG(autoload_func) = NULL;
- } else {
- zend_hash_clean(SPL_G(autoload_functions));
- }
- success = SUCCESS;
- } else {
- /* remove specific */
- success = zend_hash_del(SPL_G(autoload_functions), lc_name);
- if (success != SUCCESS && obj_ptr) {
- lc_name = zend_string_extend(lc_name, ZSTR_LEN(lc_name) + sizeof(uint32_t), 0);
- memcpy(ZSTR_VAL(lc_name) + ZSTR_LEN(lc_name) - sizeof(uint32_t), &obj_ptr->handle, sizeof(uint32_t));
- ZSTR_VAL(lc_name)[ZSTR_LEN(lc_name)] = '\0';
- success = zend_hash_del(SPL_G(autoload_functions), lc_name);
- }
- }
- } else if (zend_string_equals(lc_name, spl_autoload_fn->common.function_name)) {
- /* register single spl_autoload() */
- spl_func_ptr = spl_autoload_fn;
-
- if (EG(autoload_func) == spl_func_ptr) {
- success = SUCCESS;
- EG(autoload_func) = NULL;
- }
- }
-
- zend_string_release_ex(lc_name, 0);
- RETURN_BOOL(success == SUCCESS);
+ RETURN_FALSE;
} /* }}} */
-/* {{{ proto false|array spl_autoload_functions()
- Return all registered __autoload() functionns */
+/* {{{ Return all registered autoloader functions */
PHP_FUNCTION(spl_autoload_functions)
{
- zend_function *fptr;
autoload_func_info *alfi;
if (zend_parse_parameters_none() == FAILURE) {
- return;
- }
-
- if (!EG(autoload_func)) {
- if ((fptr = zend_hash_find_ptr(EG(function_table), ZSTR_KNOWN(ZEND_STR_MAGIC_AUTOLOAD)))) {
- zval tmp;
-
- array_init(return_value);
- ZVAL_STR_COPY(&tmp, ZSTR_KNOWN(ZEND_STR_MAGIC_AUTOLOAD));
- zend_hash_next_index_insert_new(Z_ARR_P(return_value), &tmp);
- return;
- }
- RETURN_FALSE;
+ RETURN_THROWS();
}
- fptr = spl_autoload_call_fn;
-
- if (EG(autoload_func) == fptr) {
- zend_string *key;
- array_init(return_value);
- ZEND_HASH_FOREACH_STR_KEY_PTR(SPL_G(autoload_functions), key, alfi) {
- if (!Z_ISUNDEF(alfi->closure)) {
- Z_ADDREF(alfi->closure);
- add_next_index_zval(return_value, &alfi->closure);
+ array_init(return_value);
+ if (SPL_G(autoload_functions)) {
+ ZEND_HASH_FOREACH_PTR(SPL_G(autoload_functions), alfi) {
+ if (alfi->closure) {
+ zval obj_zv;
+ ZVAL_OBJ_COPY(&obj_zv, alfi->closure);
+ add_next_index_zval(return_value, &obj_zv);
} else if (alfi->func_ptr->common.scope) {
zval tmp;
array_init(&tmp);
- if (!Z_ISUNDEF(alfi->obj)) {
- Z_ADDREF(alfi->obj);
- add_next_index_zval(&tmp, &alfi->obj);
+ if (alfi->obj) {
+ zval obj_zv;
+ ZVAL_OBJ_COPY(&obj_zv, alfi->obj);
+ add_next_index_zval(&tmp, &obj_zv);
} else {
add_next_index_str(&tmp, zend_string_copy(alfi->ce->name));
}
add_next_index_str(&tmp, zend_string_copy(alfi->func_ptr->common.function_name));
add_next_index_zval(return_value, &tmp);
} else {
- if (strncmp(ZSTR_VAL(alfi->func_ptr->common.function_name), "__lambda_func", sizeof("__lambda_func") - 1)) {
- add_next_index_str(return_value, zend_string_copy(alfi->func_ptr->common.function_name));
- } else {
- add_next_index_str(return_value, zend_string_copy(key));
- }
+ add_next_index_str(return_value, zend_string_copy(alfi->func_ptr->common.function_name));
}
} ZEND_HASH_FOREACH_END();
- return;
}
-
- array_init(return_value);
- add_next_index_str(return_value, zend_string_copy(EG(autoload_func)->common.function_name));
} /* }}} */
-/* {{{ proto string spl_object_hash(object obj)
- Return hash id for given object */
+/* {{{ Return hash id for given object */
PHP_FUNCTION(spl_object_hash)
{
zval *obj;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &obj) == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_NEW_STR(php_spl_object_hash(obj));
}
/* }}} */
-/* {{{ proto int spl_object_id(object obj)
- Returns the integer object handle for the given object */
+/* {{{ Returns the integer object handle for the given object */
PHP_FUNCTION(spl_object_id)
{
zval *obj;
@@ -868,8 +679,7 @@ static void spl_build_class_list_string(zval *entry, char **list) /* {{{ */
*list = res;
} /* }}} */
-/* {{{ PHP_MINFO(spl)
- */
+/* {{{ PHP_MINFO(spl) */
PHP_MINFO_FUNCTION(spl)
{
zval list, *zv;
@@ -902,102 +712,11 @@ PHP_MINFO_FUNCTION(spl)
}
/* }}} */
-/* {{{ arginfo */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_iterator_to_array, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
- ZEND_ARG_INFO(0, use_keys)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_iterator, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_iterator_apply, 0, 0, 2)
- ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
- ZEND_ARG_INFO(0, function)
- ZEND_ARG_ARRAY_INFO(0, args, 1)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_parents, 0, 0, 1)
- ZEND_ARG_INFO(0, instance)
- ZEND_ARG_INFO(0, autoload)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_implements, 0, 0, 1)
- ZEND_ARG_INFO(0, what)
- ZEND_ARG_INFO(0, autoload)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_uses, 0, 0, 1)
- ZEND_ARG_INFO(0, what)
- ZEND_ARG_INFO(0, autoload)
-ZEND_END_ARG_INFO()
-
-
-ZEND_BEGIN_ARG_INFO(arginfo_spl_classes, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_spl_autoload_functions, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_autoload, 0, 0, 1)
- ZEND_ARG_INFO(0, class_name)
- ZEND_ARG_INFO(0, file_extensions)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_autoload_extensions, 0, 0, 0)
- ZEND_ARG_INFO(0, file_extensions)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_autoload_call, 0, 0, 1)
- ZEND_ARG_INFO(0, class_name)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_autoload_register, 0, 0, 0)
- ZEND_ARG_INFO(0, autoload_function)
- ZEND_ARG_INFO(0, throw)
- ZEND_ARG_INFO(0, prepend)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_autoload_unregister, 0, 0, 1)
- ZEND_ARG_INFO(0, autoload_function)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_object_hash, 0, 0, 1)
- ZEND_ARG_INFO(0, obj)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_spl_object_id, 0, 0, 1)
- ZEND_ARG_INFO(0, obj)
-ZEND_END_ARG_INFO()
-/* }}} */
-
-/* {{{ spl_functions
- */
-static const zend_function_entry spl_functions[] = {
- PHP_FE(spl_classes, arginfo_spl_classes)
- PHP_FE(spl_autoload, arginfo_spl_autoload)
- PHP_FE(spl_autoload_extensions, arginfo_spl_autoload_extensions)
- PHP_FE(spl_autoload_register, arginfo_spl_autoload_register)
- PHP_FE(spl_autoload_unregister, arginfo_spl_autoload_unregister)
- PHP_FE(spl_autoload_functions, arginfo_spl_autoload_functions)
- PHP_FE(spl_autoload_call, arginfo_spl_autoload_call)
- PHP_FE(class_parents, arginfo_class_parents)
- PHP_FE(class_implements, arginfo_class_implements)
- PHP_FE(class_uses, arginfo_class_uses)
- PHP_FE(spl_object_hash, arginfo_spl_object_hash)
- PHP_FE(spl_object_id, arginfo_spl_object_id)
- PHP_FE(iterator_to_array, arginfo_iterator_to_array)
- PHP_FE(iterator_count, arginfo_iterator)
- PHP_FE(iterator_apply, arginfo_iterator_apply)
- PHP_FE_END
-};
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(spl)
- */
+/* {{{ PHP_MINIT_FUNCTION(spl) */
PHP_MINIT_FUNCTION(spl)
{
+ zend_autoload = spl_perform_autoload;
+
PHP_MINIT(spl_exceptions)(INIT_FUNC_ARGS_PASSTHRU);
PHP_MINIT(spl_iterators)(INIT_FUNC_ARGS_PASSTHRU);
PHP_MINIT(spl_array)(INIT_FUNC_ARGS_PASSTHRU);
@@ -1007,10 +726,6 @@ PHP_MINIT_FUNCTION(spl)
PHP_MINIT(spl_fixedarray)(INIT_FUNC_ARGS_PASSTHRU);
PHP_MINIT(spl_observer)(INIT_FUNC_ARGS_PASSTHRU);
- spl_autoload_fn = zend_hash_str_find_ptr(CG(function_table), "spl_autoload", sizeof("spl_autoload") - 1);
- spl_autoload_call_fn = zend_hash_str_find_ptr(CG(function_table), "spl_autoload_call", sizeof("spl_autoload_call") - 1);
- ZEND_ASSERT(spl_autoload_fn != NULL && spl_autoload_call_fn != NULL);
-
return SUCCESS;
}
/* }}} */
@@ -1040,12 +755,11 @@ PHP_RSHUTDOWN_FUNCTION(spl) /* {{{ */
return SUCCESS;
} /* }}} */
-/* {{{ spl_module_entry
- */
+/* {{{ spl_module_entry */
zend_module_entry spl_module_entry = {
STANDARD_MODULE_HEADER,
"SPL",
- spl_functions,
+ ext_functions,
PHP_MINIT(spl),
NULL,
PHP_RINIT(spl),
diff --git a/ext/spl/php_spl.h b/ext/spl/php_spl.h
index 69ff65f72c..aebf23ed39 100644
--- a/ext/spl/php_spl.h
+++ b/ext/spl/php_spl.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -59,17 +57,11 @@ ZEND_BEGIN_MODULE_GLOBALS(spl)
intptr_t hash_mask_handle;
intptr_t hash_mask_handlers;
int hash_mask_init;
- int autoload_running;
ZEND_END_MODULE_GLOBALS(spl)
ZEND_EXTERN_MODULE_GLOBALS(spl)
#define SPL_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(spl, v)
-PHP_FUNCTION(spl_classes);
-PHP_FUNCTION(class_parents);
-PHP_FUNCTION(class_implements);
-PHP_FUNCTION(class_uses);
-
PHPAPI zend_string *php_spl_object_hash(zval *obj);
#endif /* PHP_SPL_H */
diff --git a/ext/spl/php_spl.stub.php b/ext/spl/php_spl.stub.php
new file mode 100644
index 0000000000..61b2165c9f
--- /dev/null
+++ b/ext/spl/php_spl.stub.php
@@ -0,0 +1,36 @@
+<?php
+
+/** @generate-function-entries */
+
+/** @param object|string $object_or_class */
+function class_implements($object_or_class, bool $autoload = true): array|false {}
+
+/** @param object|string $object_or_class */
+function class_parents($object_or_class, bool $autoload = true): array|false {}
+
+/** @param object|string $object_or_class */
+function class_uses($object_or_class, bool $autoload = true): array|false {}
+
+function spl_autoload(string $class, ?string $file_extensions = null): void {}
+
+function spl_autoload_call(string $class): void {}
+
+function spl_autoload_extensions(?string $file_extensions = null): string {}
+
+function spl_autoload_functions(): array {}
+
+function spl_autoload_register(?callable $callback = null, bool $throw = true, bool $prepend = false): bool {}
+
+function spl_autoload_unregister(callable $callback): bool {}
+
+function spl_classes(): array {}
+
+function spl_object_hash(object $object): string {}
+
+function spl_object_id(object $object): int {}
+
+function iterator_apply(Traversable $iterator, callable $callback, ?array $args = null): int {}
+
+function iterator_count(Traversable $iterator): int {}
+
+function iterator_to_array(Traversable $iterator, bool $preserve_keys = true): array {}
diff --git a/ext/spl/php_spl_arginfo.h b/ext/spl/php_spl_arginfo.h
new file mode 100644
index 0000000000..5711e6d699
--- /dev/null
+++ b/ext/spl/php_spl_arginfo.h
@@ -0,0 +1,99 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: 920cc4fca334f59316fc4276277958c9738afb3e */
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_implements, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, object_or_class)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, autoload, _IS_BOOL, 0, "true")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_parents arginfo_class_implements
+
+#define arginfo_class_uses arginfo_class_implements
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload, 0, 1, IS_VOID, 0)
+ ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file_extensions, IS_STRING, 1, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_call, 0, 1, IS_VOID, 0)
+ ZEND_ARG_TYPE_INFO(0, class, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_extensions, 0, 0, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file_extensions, IS_STRING, 1, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_functions, 0, 0, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_register, 0, 0, _IS_BOOL, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, callback, IS_CALLABLE, 1, "null")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, throw, _IS_BOOL, 0, "true")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, prepend, _IS_BOOL, 0, "false")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_autoload_unregister, 0, 1, _IS_BOOL, 0)
+ ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_spl_classes arginfo_spl_autoload_functions
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_object_hash, 0, 1, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_spl_object_id, 0, 1, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_iterator_apply, 0, 2, IS_LONG, 0)
+ ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
+ ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, args, IS_ARRAY, 1, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_iterator_count, 0, 1, IS_LONG, 0)
+ ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_iterator_to_array, 0, 1, IS_ARRAY, 0)
+ ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserve_keys, _IS_BOOL, 0, "true")
+ZEND_END_ARG_INFO()
+
+
+ZEND_FUNCTION(class_implements);
+ZEND_FUNCTION(class_parents);
+ZEND_FUNCTION(class_uses);
+ZEND_FUNCTION(spl_autoload);
+ZEND_FUNCTION(spl_autoload_call);
+ZEND_FUNCTION(spl_autoload_extensions);
+ZEND_FUNCTION(spl_autoload_functions);
+ZEND_FUNCTION(spl_autoload_register);
+ZEND_FUNCTION(spl_autoload_unregister);
+ZEND_FUNCTION(spl_classes);
+ZEND_FUNCTION(spl_object_hash);
+ZEND_FUNCTION(spl_object_id);
+ZEND_FUNCTION(iterator_apply);
+ZEND_FUNCTION(iterator_count);
+ZEND_FUNCTION(iterator_to_array);
+
+
+static const zend_function_entry ext_functions[] = {
+ ZEND_FE(class_implements, arginfo_class_implements)
+ ZEND_FE(class_parents, arginfo_class_parents)
+ ZEND_FE(class_uses, arginfo_class_uses)
+ ZEND_FE(spl_autoload, arginfo_spl_autoload)
+ ZEND_FE(spl_autoload_call, arginfo_spl_autoload_call)
+ ZEND_FE(spl_autoload_extensions, arginfo_spl_autoload_extensions)
+ ZEND_FE(spl_autoload_functions, arginfo_spl_autoload_functions)
+ ZEND_FE(spl_autoload_register, arginfo_spl_autoload_register)
+ ZEND_FE(spl_autoload_unregister, arginfo_spl_autoload_unregister)
+ ZEND_FE(spl_classes, arginfo_spl_classes)
+ ZEND_FE(spl_object_hash, arginfo_spl_object_hash)
+ ZEND_FE(spl_object_id, arginfo_spl_object_id)
+ ZEND_FE(iterator_apply, arginfo_iterator_apply)
+ ZEND_FE(iterator_count, arginfo_iterator_count)
+ ZEND_FE(iterator_to_array, arginfo_iterator_to_array)
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index d709ed99b9..20a9d9e3da 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -29,6 +27,7 @@
#include "zend_exceptions.h"
#include "php_spl.h"
+#include "spl_array_arginfo.h"
#include "spl_functions.h"
#include "spl_engine.h"
#include "spl_iterators.h"
@@ -56,8 +55,8 @@ PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;
#define SPL_ARRAY_CLONE_MASK 0x0100FFFF
#define SPL_ARRAY_METHOD_NO_ARG 0
-#define SPL_ARRAY_METHOD_USE_ARG 1
-#define SPL_ARRAY_METHOD_MAY_USER_ARG 2
+#define SPL_ARRAY_METHOD_CALLBACK_ARG 1
+#define SPL_ARRAY_METHOD_SORT_FLAGS_ARG 2
typedef struct _spl_array_object {
zval array;
@@ -112,13 +111,6 @@ static inline HashTable *spl_array_get_hash_table(spl_array_object* intern) { /*
}
/* }}} */
-static inline void spl_array_replace_hash_table(spl_array_object* intern, HashTable *ht) { /* {{{ */
- HashTable **ht_ptr = spl_array_get_hash_table_ptr(intern);
- zend_array_destroy(*ht_ptr);
- *ht_ptr = ht;
-}
-/* }}} */
-
static inline zend_bool spl_array_is_object(spl_array_object *intern) /* {{{ */
{
while (intern->ar_flags & SPL_ARRAY_USE_OTHER) {
@@ -162,10 +154,8 @@ static void spl_array_object_free_storage(zend_object *object)
}
/* }}} */
-zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object, int by_ref);
-
/* {{{ spl_array_object_new_ex */
-static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *orig, int clone_orig)
+static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zend_object *orig, int clone_orig)
{
spl_array_object *intern;
zend_class_entry *parent = class_type;
@@ -179,7 +169,7 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *
intern->ar_flags = 0;
intern->ce_get_iterator = spl_ce_ArrayIterator;
if (orig) {
- spl_array_object *other = Z_SPLARRAY_P(orig);
+ spl_array_object *other = spl_array_from_obj(orig);
intern->ar_flags &= ~ SPL_ARRAY_CLONE_MASK;
intern->ar_flags |= (other->ar_flags & SPL_ARRAY_CLONE_MASK);
@@ -187,16 +177,16 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *
if (clone_orig) {
if (other->ar_flags & SPL_ARRAY_IS_SELF) {
ZVAL_UNDEF(&intern->array);
- } else if (Z_OBJ_HT_P(orig) == &spl_handler_ArrayObject) {
+ } else if (orig->handlers == &spl_handler_ArrayObject) {
ZVAL_ARR(&intern->array,
zend_array_dup(spl_array_get_hash_table(other)));
} else {
- ZEND_ASSERT(Z_OBJ_HT_P(orig) == &spl_handler_ArrayIterator);
- ZVAL_COPY(&intern->array, orig);
+ ZEND_ASSERT(orig->handlers == &spl_handler_ArrayIterator);
+ ZVAL_OBJ_COPY(&intern->array, orig);
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
}
} else {
- ZVAL_COPY(&intern->array, orig);
+ ZVAL_OBJ_COPY(&intern->array, orig);
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
}
} else {
@@ -214,9 +204,9 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zval *
parent = parent->parent;
inherited = 1;
}
- if (!parent) { /* this must never happen */
- php_error_docref(NULL, E_COMPILE_ERROR, "Internal compiler error, Class is not child of ArrayObject or ArrayIterator");
- }
+
+ ZEND_ASSERT(parent);
+
if (inherited) {
intern->fptr_offset_get = zend_hash_str_find_ptr(&class_type->function_table, "offsetget", sizeof("offsetget") - 1);
if (intern->fptr_offset_get->common.scope == parent) {
@@ -273,13 +263,11 @@ static zend_object *spl_array_object_new(zend_class_entry *class_type)
/* }}} */
/* {{{ spl_array_object_clone */
-static zend_object *spl_array_object_clone(zval *zobject)
+static zend_object *spl_array_object_clone(zend_object *old_object)
{
- zend_object *old_object;
zend_object *new_object;
- old_object = Z_OBJ_P(zobject);
- new_object = spl_array_object_new_ex(old_object->ce, zobject, 1);
+ new_object = spl_array_object_new_ex(old_object->ce, old_object, 1);
zend_objects_clone_members(new_object, old_object);
@@ -299,7 +287,7 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object *
}
if ((type == BP_VAR_W || type == BP_VAR_RW) && intern->nApplyCount > 0) {
- zend_error(E_WARNING, "Modification of ArrayObject during sorting is prohibited");
+ zend_throw_error(NULL, "Modification of ArrayObject during sorting is prohibited");
return &EG(error_zval);
}
@@ -318,13 +306,13 @@ fetch_dim_string:
if (Z_TYPE_P(retval) == IS_UNDEF) {
switch (type) {
case BP_VAR_R:
- zend_error(E_NOTICE, "Undefined index: %s", ZSTR_VAL(offset_key));
+ zend_error(E_WARNING, "Undefined array key \"%s\"", ZSTR_VAL(offset_key));
case BP_VAR_UNSET:
case BP_VAR_IS:
retval = &EG(uninitialized_zval);
break;
case BP_VAR_RW:
- zend_error(E_NOTICE,"Undefined index: %s", ZSTR_VAL(offset_key));
+ zend_error(E_WARNING,"Undefined array key \"%s\"", ZSTR_VAL(offset_key));
case BP_VAR_W: {
ZVAL_NULL(retval);
}
@@ -334,13 +322,13 @@ fetch_dim_string:
} else {
switch (type) {
case BP_VAR_R:
- zend_error(E_NOTICE, "Undefined index: %s", ZSTR_VAL(offset_key));
+ zend_error(E_WARNING, "Undefined array key \"%s\"", ZSTR_VAL(offset_key));
case BP_VAR_UNSET:
case BP_VAR_IS:
retval = &EG(uninitialized_zval);
break;
case BP_VAR_RW:
- zend_error(E_NOTICE,"Undefined index: %s", ZSTR_VAL(offset_key));
+ zend_error(E_WARNING,"Undefined array key \"%s\"", ZSTR_VAL(offset_key));
case BP_VAR_W: {
zval value;
ZVAL_NULL(&value);
@@ -350,7 +338,7 @@ fetch_dim_string:
}
return retval;
case IS_RESOURCE:
- zend_error(E_NOTICE, "Resource ID#%d used as offset, casting to integer (%d)", Z_RES_P(offset)->handle, Z_RES_P(offset)->handle);
+ zend_error(E_WARNING, "Resource ID#%d used as offset, casting to integer (%d)", Z_RES_P(offset)->handle, Z_RES_P(offset)->handle);
index = Z_RES_P(offset)->handle;
goto num_index;
case IS_DOUBLE:
@@ -368,13 +356,13 @@ num_index:
if ((retval = zend_hash_index_find(ht, index)) == NULL) {
switch (type) {
case BP_VAR_R:
- zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, index);
+ zend_error(E_WARNING, "Undefined array key " ZEND_LONG_FMT, index);
case BP_VAR_UNSET:
case BP_VAR_IS:
retval = &EG(uninitialized_zval);
break;
case BP_VAR_RW:
- zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, index);
+ zend_error(E_WARNING, "Undefined array key " ZEND_LONG_FMT, index);
case BP_VAR_W: {
zval value;
ZVAL_UNDEF(&value);
@@ -387,17 +375,17 @@ num_index:
ZVAL_DEREF(offset);
goto try_again;
default:
- zend_error(E_WARNING, "Illegal offset type");
+ zend_type_error("Illegal offset type");
return (type == BP_VAR_W || type == BP_VAR_RW) ?
&EG(error_zval) : &EG(uninitialized_zval);
}
} /* }}} */
-static int spl_array_has_dimension(zval *object, zval *offset, int check_empty);
+static int spl_array_has_dimension(zend_object *object, zval *offset, int check_empty);
-static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type, zval *rv) /* {{{ */
+static zval *spl_array_read_dimension_ex(int check_inherited, zend_object *object, zval *offset, int type, zval *rv) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
zval *ret;
if (check_inherited &&
@@ -416,7 +404,7 @@ static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval
} else {
SEPARATE_ARG_IF_REF(offset);
}
- zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_get, "offsetGet", rv, offset);
+ zend_call_method_with_1_params(object, object->ce, &intern->fptr_offset_get, "offsetGet", rv, offset);
zval_ptr_dtor(offset);
if (!Z_ISUNDEF_P(rv)) {
@@ -442,14 +430,14 @@ static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval
return ret;
} /* }}} */
-static zval *spl_array_read_dimension(zval *object, zval *offset, int type, zval *rv) /* {{{ */
+static zval *spl_array_read_dimension(zend_object *object, zval *offset, int type, zval *rv) /* {{{ */
{
return spl_array_read_dimension_ex(1, object, offset, type, rv);
} /* }}} */
-static void spl_array_write_dimension_ex(int check_inherited, zval *object, zval *offset, zval *value) /* {{{ */
+static void spl_array_write_dimension_ex(int check_inherited, zend_object *object, zval *offset, zval *value) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
zend_long index;
HashTable *ht;
@@ -462,13 +450,13 @@ static void spl_array_write_dimension_ex(int check_inherited, zval *object, zval
} else {
SEPARATE_ARG_IF_REF(offset);
}
- zend_call_method_with_2_params(object, Z_OBJCE_P(object), &intern->fptr_offset_set, "offsetSet", NULL, offset, value);
+ zend_call_method_with_2_params(object, object->ce, &intern->fptr_offset_set, "offsetSet", NULL, offset, value);
zval_ptr_dtor(offset);
return;
}
if (intern->nApplyCount > 0) {
- zend_error(E_WARNING, "Modification of ArrayObject during sorting is prohibited");
+ zend_throw_error(NULL, "Modification of ArrayObject during sorting is prohibited");
return;
}
@@ -511,32 +499,32 @@ num_index:
ZVAL_DEREF(offset);
goto try_again;
default:
- zend_error(E_WARNING, "Illegal offset type");
+ zend_type_error("Illegal offset type");
zval_ptr_dtor(value);
return;
}
} /* }}} */
-static void spl_array_write_dimension(zval *object, zval *offset, zval *value) /* {{{ */
+static void spl_array_write_dimension(zend_object *object, zval *offset, zval *value) /* {{{ */
{
spl_array_write_dimension_ex(1, object, offset, value);
} /* }}} */
-static void spl_array_unset_dimension_ex(int check_inherited, zval *object, zval *offset) /* {{{ */
+static void spl_array_unset_dimension_ex(int check_inherited, zend_object *object, zval *offset) /* {{{ */
{
zend_long index;
HashTable *ht;
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if (check_inherited && intern->fptr_offset_del) {
SEPARATE_ARG_IF_REF(offset);
- zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_del, "offsetUnset", NULL, offset);
+ zend_call_method_with_1_params(object, object->ce, &intern->fptr_offset_del, "offsetUnset", NULL, offset);
zval_ptr_dtor(offset);
return;
}
if (intern->nApplyCount > 0) {
- zend_error(E_WARNING, "Modification of ArrayObject during sorting is prohibited");
+ zend_throw_error(NULL, "Modification of ArrayObject during sorting is prohibited");
return;
}
@@ -546,7 +534,7 @@ try_again:
ht = spl_array_get_hash_table(intern);
if (ht == &EG(symbol_table)) {
if (zend_delete_global_variable(Z_STR_P(offset))) {
- zend_error(E_NOTICE,"Undefined index: %s", Z_STRVAL_P(offset));
+ zend_error(E_WARNING,"Undefined array key \"%s\"", Z_STRVAL_P(offset));
}
} else {
zval *data = zend_symtable_find(ht, Z_STR_P(offset));
@@ -555,7 +543,7 @@ try_again:
if (Z_TYPE_P(data) == IS_INDIRECT) {
data = Z_INDIRECT_P(data);
if (Z_TYPE_P(data) == IS_UNDEF) {
- zend_error(E_NOTICE,"Undefined index: %s", Z_STRVAL_P(offset));
+ zend_error(E_WARNING,"Undefined array key \"%s\"", Z_STRVAL_P(offset));
} else {
zval_ptr_dtor(data);
ZVAL_UNDEF(data);
@@ -566,10 +554,10 @@ try_again:
}
}
} else if (zend_symtable_del(ht, Z_STR_P(offset)) == FAILURE) {
- zend_error(E_NOTICE,"Undefined index: %s", Z_STRVAL_P(offset));
+ zend_error(E_WARNING,"Undefined array key \"%s\"", Z_STRVAL_P(offset));
}
} else {
- zend_error(E_NOTICE,"Undefined index: %s", Z_STRVAL_P(offset));
+ zend_error(E_WARNING,"Undefined array key \"%s\"", Z_STRVAL_P(offset));
}
}
break;
@@ -590,32 +578,32 @@ try_again:
num_index:
ht = spl_array_get_hash_table(intern);
if (zend_hash_index_del(ht, index) == FAILURE) {
- zend_error(E_NOTICE,"Undefined offset: " ZEND_LONG_FMT, index);
+ zend_error(E_WARNING,"Undefined array key " ZEND_LONG_FMT, index);
}
break;
case IS_REFERENCE:
ZVAL_DEREF(offset);
goto try_again;
default:
- zend_error(E_WARNING, "Illegal offset type");
+ zend_type_error("Illegal offset type in unset");
return;
}
} /* }}} */
-static void spl_array_unset_dimension(zval *object, zval *offset) /* {{{ */
+static void spl_array_unset_dimension(zend_object *object, zval *offset) /* {{{ */
{
spl_array_unset_dimension_ex(1, object, offset);
} /* }}} */
-static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *offset, int check_empty) /* {{{ */
+static int spl_array_has_dimension_ex(int check_inherited, zend_object *object, zval *offset, int check_empty) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
zend_long index;
zval rv, *value = NULL, *tmp;
if (check_inherited && intern->fptr_offset_has) {
SEPARATE_ARG_IF_REF(offset);
- zend_call_method_with_1_params(object, Z_OBJCE_P(object), &intern->fptr_offset_has, "offsetExists", &rv, offset);
+ zend_call_method_with_1_params(object, object->ce, &intern->fptr_offset_has, "offsetExists", &rv, offset);
zval_ptr_dtor(offset);
if (zend_is_true(&rv)) {
@@ -673,7 +661,7 @@ num_index:
ZVAL_DEREF(offset);
goto try_again;
default:
- zend_error(E_WARNING, "Illegal offset type");
+ zend_type_error("Illegal offset type in isset or empty");
return 0;
}
@@ -693,48 +681,42 @@ num_index:
}
} /* }}} */
-static int spl_array_has_dimension(zval *object, zval *offset, int check_empty) /* {{{ */
+static int spl_array_has_dimension(zend_object *object, zval *offset, int check_empty) /* {{{ */
{
return spl_array_has_dimension_ex(1, object, offset, check_empty);
} /* }}} */
-/* {{{ proto bool ArrayObject::offsetExists(mixed $index)
- proto bool ArrayIterator::offsetExists(mixed $index)
- Returns whether the requested $index exists. */
-SPL_METHOD(Array, offsetExists)
+/* {{{ Returns whether the requested $index exists. */
+PHP_METHOD(ArrayObject, offsetExists)
{
zval *index;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &index) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- RETURN_BOOL(spl_array_has_dimension_ex(0, ZEND_THIS, index, 2));
+ RETURN_BOOL(spl_array_has_dimension_ex(0, Z_OBJ_P(ZEND_THIS), index, 2));
} /* }}} */
-/* {{{ proto mixed ArrayObject::offsetGet(mixed $index)
- proto mixed ArrayIterator::offsetGet(mixed $index)
- Returns the value at the specified $index. */
-SPL_METHOD(Array, offsetGet)
+/* {{{ Returns the value at the specified $index. */
+PHP_METHOD(ArrayObject, offsetGet)
{
zval *value, *index;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &index) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- value = spl_array_read_dimension_ex(0, ZEND_THIS, index, BP_VAR_R, return_value);
+ value = spl_array_read_dimension_ex(0, Z_OBJ_P(ZEND_THIS), index, BP_VAR_R, return_value);
if (value != return_value) {
ZVAL_COPY_DEREF(return_value, value);
}
} /* }}} */
-/* {{{ proto void ArrayObject::offsetSet(mixed $index, mixed $newval)
- proto void ArrayIterator::offsetSet(mixed $index, mixed $newval)
- Sets the value at the specified $index to $newval. */
-SPL_METHOD(Array, offsetSet)
+/* {{{ Sets the value at the specified $index to $newval. */
+PHP_METHOD(ArrayObject, offsetSet)
{
zval *index, *value;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &index, &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- spl_array_write_dimension_ex(0, ZEND_THIS, index, value);
+ spl_array_write_dimension_ex(0, Z_OBJ_P(ZEND_THIS), index, value);
} /* }}} */
void spl_array_iterator_append(zval *object, zval *append_value) /* {{{ */
@@ -746,48 +728,46 @@ void spl_array_iterator_append(zval *object, zval *append_value) /* {{{ */
return;
}
- spl_array_write_dimension(object, NULL, append_value);
+ spl_array_write_dimension(Z_OBJ_P(object), NULL, append_value);
} /* }}} */
-/* {{{ proto void ArrayObject::append(mixed $newval)
- proto void ArrayIterator::append(mixed $newval)
- Appends the value (cannot be called for objects). */
-SPL_METHOD(Array, append)
+/* {{{ Appends the value (cannot be called for objects). */
+PHP_METHOD(ArrayObject, append)
{
zval *value;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_array_iterator_append(ZEND_THIS, value);
} /* }}} */
-/* {{{ proto void ArrayObject::offsetUnset(mixed $index)
- proto void ArrayIterator::offsetUnset(mixed $index)
- Unsets the value at the specified $index. */
-SPL_METHOD(Array, offsetUnset)
+/* {{{ Unsets the value at the specified $index. */
+PHP_METHOD(ArrayObject, offsetUnset)
{
zval *index;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &index) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- spl_array_unset_dimension_ex(0, ZEND_THIS, index);
+ spl_array_unset_dimension_ex(0, Z_OBJ_P(ZEND_THIS), index);
} /* }}} */
-/* {{{ proto array ArrayObject::getArrayCopy()
- proto array ArrayIterator::getArrayCopy()
- Return a copy of the contained array */
-SPL_METHOD(Array, getArrayCopy)
+/* {{{ Return a copy of the contained array */
+PHP_METHOD(ArrayObject, getArrayCopy)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
RETURN_ARR(zend_array_dup(spl_array_get_hash_table(intern)));
} /* }}} */
-static HashTable *spl_array_get_properties_for(zval *object, zend_prop_purpose purpose) /* {{{ */
+static HashTable *spl_array_get_properties_for(zend_object *object, zend_prop_purpose purpose) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
HashTable *ht;
zend_bool dup;
@@ -806,7 +786,6 @@ static HashTable *spl_array_get_properties_for(zval *object, zend_prop_purpose p
break;
case ZEND_PROP_PURPOSE_VAR_EXPORT:
case ZEND_PROP_PURPOSE_JSON:
- case _ZEND_PROP_PURPOSE_ARRAY_KEY_EXISTS:
dup = 0;
break;
default:
@@ -822,12 +801,12 @@ static HashTable *spl_array_get_properties_for(zval *object, zend_prop_purpose p
return ht;
} /* }}} */
-static inline HashTable* spl_array_get_debug_info(zval *obj) /* {{{ */
+static inline HashTable* spl_array_get_debug_info(zend_object *obj) /* {{{ */
{
zval *storage;
zend_string *zname;
zend_class_entry *base;
- spl_array_object *intern = Z_SPLARRAY_P(obj);
+ spl_array_object *intern = spl_array_from_obj(obj);
if (!intern->std.properties) {
rebuild_object_properties(&intern->std);
@@ -844,7 +823,7 @@ static inline HashTable* spl_array_get_debug_info(zval *obj) /* {{{ */
storage = &intern->array;
Z_TRY_ADDREF_P(storage);
- base = Z_OBJ_HT_P(obj) == &spl_handler_ArrayIterator
+ base = obj->handlers == &spl_handler_ArrayIterator
? spl_ce_ArrayIterator : spl_ce_ArrayObject;
zname = spl_gen_private_prop_name(base, "storage", sizeof("storage")-1);
zend_symtable_update(debug_info, zname, storage);
@@ -855,75 +834,85 @@ static inline HashTable* spl_array_get_debug_info(zval *obj) /* {{{ */
}
/* }}} */
-static HashTable *spl_array_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */
+static HashTable *spl_array_get_gc(zend_object *obj, zval **gc_data, int *gc_data_count) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(obj);
+ spl_array_object *intern = spl_array_from_obj(obj);
*gc_data = &intern->array;
*gc_data_count = 1;
return zend_std_get_properties(obj);
}
/* }}} */
-static zval *spl_array_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv) /* {{{ */
+static zval *spl_array_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
- return spl_array_read_dimension(object, member, type, rv);
+ && !zend_std_has_property(object, name, ZEND_PROPERTY_EXISTS, NULL)) {
+ zval member;
+ ZVAL_STR(&member, name);
+ return spl_array_read_dimension(object, &member, type, rv);
}
- return zend_std_read_property(object, member, type, cache_slot, rv);
+ return zend_std_read_property(object, name, type, cache_slot, rv);
} /* }}} */
-static zval *spl_array_write_property(zval *object, zval *member, zval *value, void **cache_slot) /* {{{ */
+static zval *spl_array_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
- spl_array_write_dimension(object, member, value);
+ && !zend_std_has_property(object, name, ZEND_PROPERTY_EXISTS, NULL)) {
+ zval member;
+ ZVAL_STR(&member, name);
+ spl_array_write_dimension(object, &member, value);
return value;
}
- return zend_std_write_property(object, member, value, cache_slot);
+ return zend_std_write_property(object, name, value, cache_slot);
} /* }}} */
-static zval *spl_array_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot) /* {{{ */
+static zval *spl_array_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
+ && !zend_std_has_property(object, name, ZEND_PROPERTY_EXISTS, NULL)) {
/* If object has offsetGet() overridden, then fallback to read_property,
* which will call offsetGet(). */
+ zval member;
if (intern->fptr_offset_get) {
return NULL;
}
- return spl_array_get_dimension_ptr(1, intern, member, type);
+ ZVAL_STR(&member, name);
+ return spl_array_get_dimension_ptr(1, intern, &member, type);
}
- return zend_std_get_property_ptr_ptr(object, member, type, cache_slot);
+ return zend_std_get_property_ptr_ptr(object, name, type, cache_slot);
} /* }}} */
-static int spl_array_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot) /* {{{ */
+static int spl_array_has_property(zend_object *object, zend_string *name, int has_set_exists, void **cache_slot) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
- return spl_array_has_dimension(object, member, has_set_exists);
+ && !zend_std_has_property(object, name, ZEND_PROPERTY_EXISTS, NULL)) {
+ zval member;
+ ZVAL_STR(&member, name);
+ return spl_array_has_dimension(object, &member, has_set_exists);
}
- return zend_std_has_property(object, member, has_set_exists, cache_slot);
+ return zend_std_has_property(object, name, has_set_exists, cache_slot);
} /* }}} */
-static void spl_array_unset_property(zval *object, zval *member, void **cache_slot) /* {{{ */
+static void spl_array_unset_property(zend_object *object, zend_string *name, void **cache_slot) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
- && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) {
- spl_array_unset_dimension(object, member);
+ && !zend_std_has_property(object, name, ZEND_PROPERTY_EXISTS, NULL)) {
+ zval member;
+ ZVAL_STR(&member, name);
+ spl_array_unset_dimension(object, &member);
return;
}
- zend_std_unset_property(object, member, cache_slot);
+ zend_std_unset_property(object, name, cache_slot);
} /* }}} */
static int spl_array_compare_objects(zval *o1, zval *o2) /* {{{ */
@@ -934,6 +923,8 @@ static int spl_array_compare_objects(zval *o1, zval *o2) /* {{{ */
*intern2;
int result = 0;
+ ZEND_COMPARE_OBJECTS_FALLBACK(o1, o2);
+
intern1 = Z_SPLARRAY_P(o1);
intern2 = Z_SPLARRAY_P(o2);
ht1 = spl_array_get_hash_table(intern1);
@@ -1088,13 +1079,19 @@ static void spl_array_it_rewind(zend_object_iterator *iter) /* {{{ */
}
/* }}} */
+static HashTable *spl_array_it_get_gc(zend_object_iterator *iter, zval **table, int *n)
+{
+ *n = 1;
+ *table = &iter->data;
+ return NULL;
+}
+
/* {{{ spl_array_set_array */
static void spl_array_set_array(zval *object, spl_array_object *intern, zval *array, zend_long ar_flags, int just_array) {
if (Z_TYPE_P(array) != IS_OBJECT && Z_TYPE_P(array) != IS_ARRAY) {
zend_throw_exception(spl_ce_InvalidArgumentException, "Passed variable is not an array or object", 0);
return;
}
-
if (Z_TYPE_P(array) == IS_ARRAY) {
zval_ptr_dtor(&intern->array);
if (Z_REFCOUNT_P(array) == 1) {
@@ -1144,7 +1141,8 @@ static const zend_object_iterator_funcs spl_array_it_funcs = {
spl_array_it_get_current_key,
spl_array_it_move_forward,
spl_array_it_rewind,
- NULL
+ NULL,
+ spl_array_it_get_gc,
};
zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object, int by_ref) /* {{{ */
@@ -1153,7 +1151,7 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
spl_array_object *array_object = Z_SPLARRAY_P(object);
if (by_ref && (array_object->ar_flags & SPL_ARRAY_OVERLOADED_CURRENT)) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
@@ -1161,8 +1159,7 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
zend_iterator_init(&iterator->it);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->it.data, Z_OBJ_P(object));
iterator->it.funcs = &spl_array_it_funcs;
iterator->ce = ce;
ZVAL_UNDEF(&iterator->value);
@@ -1171,9 +1168,8 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
}
/* }}} */
-/* {{{ proto ArrayObject::__construct([array|object ar = array() [, int flags = 0 [, string iterator_class = "ArrayIterator"]]])
- Constructs a new array object from an array or object. */
-SPL_METHOD(Array, __construct)
+/* {{{ Constructs a new array object from an array or object. */
+PHP_METHOD(ArrayObject, __construct)
{
zval *object = ZEND_THIS;
spl_array_object *intern;
@@ -1185,8 +1181,8 @@ SPL_METHOD(Array, __construct)
return; /* nothing to do */
}
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "z|lC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|AlC", &array, &ar_flags, &ce_get_iterator) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLARRAY_P(object);
@@ -1201,9 +1197,8 @@ SPL_METHOD(Array, __construct)
}
/* }}} */
-/* {{{ proto ArrayIterator::__construct([array|object ar = array() [, int flags = 0]])
- Constructs a new array iterator from an array or object. */
-SPL_METHOD(ArrayIterator, __construct)
+/* {{{ Constructs a new array iterator from an array or object. */
+PHP_METHOD(ArrayIterator, __construct)
{
zval *object = ZEND_THIS;
spl_array_object *intern;
@@ -1214,8 +1209,8 @@ SPL_METHOD(ArrayIterator, __construct)
return; /* nothing to do */
}
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "z|l", &array, &ar_flags) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|Al", &array, &ar_flags) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLARRAY_P(object);
@@ -1226,9 +1221,8 @@ SPL_METHOD(ArrayIterator, __construct)
}
/* }}} */
-/* {{{ proto void ArrayObject::setIteratorClass(string iterator_class)
- Set the class used in getIterator. */
-SPL_METHOD(Array, setIteratorClass)
+/* {{{ Set the class used in getIterator. */
+PHP_METHOD(ArrayObject, setIteratorClass)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
@@ -1242,15 +1236,14 @@ SPL_METHOD(Array, setIteratorClass)
}
/* }}} */
-/* {{{ proto string ArrayObject::getIteratorClass()
- Get the class used in getIterator. */
-SPL_METHOD(Array, getIteratorClass)
+/* {{{ Get the class used in getIterator. */
+PHP_METHOD(ArrayObject, getIteratorClass)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_string_addref(intern->ce_get_iterator->name);
@@ -1258,50 +1251,47 @@ SPL_METHOD(Array, getIteratorClass)
}
/* }}} */
-/* {{{ proto int ArrayObject::getFlags()
- Get flags */
-SPL_METHOD(Array, getFlags)
+/* {{{ Get flags */
+PHP_METHOD(ArrayObject, getFlags)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->ar_flags & ~SPL_ARRAY_INT_MASK);
}
/* }}} */
-/* {{{ proto void ArrayObject::setFlags(int flags)
- Set flags */
-SPL_METHOD(Array, setFlags)
+/* {{{ Set flags */
+PHP_METHOD(ArrayObject, setFlags)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
zend_long ar_flags = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &ar_flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern->ar_flags = (intern->ar_flags & SPL_ARRAY_INT_MASK) | (ar_flags & ~SPL_ARRAY_INT_MASK);
}
/* }}} */
-/* {{{ proto Array|Object ArrayObject::exchangeArray(Array|Object input = array())
- Replace the referenced array or object with a new one and return the old one (right now copy - to be changed) */
-SPL_METHOD(Array, exchangeArray)
+/* {{{ Replace the referenced array or object with a new one and return the old one (right now copy - to be changed) */
+PHP_METHOD(ArrayObject, exchangeArray)
{
zval *object = ZEND_THIS, *array;
spl_array_object *intern = Z_SPLARRAY_P(object);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &array) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "A", &array) == FAILURE) {
+ RETURN_THROWS();
}
if (intern->nApplyCount > 0) {
- zend_error(E_WARNING, "Modification of ArrayObject during sorting is prohibited");
+ zend_throw_error(NULL, "Modification of ArrayObject during sorting is prohibited");
return;
}
@@ -1310,39 +1300,36 @@ SPL_METHOD(Array, exchangeArray)
}
/* }}} */
-/* {{{ proto ArrayIterator ArrayObject::getIterator()
- Create a new iterator from a ArrayObject instance */
-SPL_METHOD(Array, getIterator)
+/* {{{ Create a new iterator from a ArrayObject instance */
+PHP_METHOD(ArrayObject, getIterator)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- ZVAL_OBJ(return_value, spl_array_object_new_ex(intern->ce_get_iterator, object, 0));
+ RETURN_OBJ(spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
}
/* }}} */
-/* {{{ proto void ArrayIterator::rewind()
- Rewind array back to the start */
-SPL_METHOD(Array, rewind)
+/* {{{ Rewind array back to the start */
+PHP_METHOD(ArrayIterator, rewind)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_array_rewind(intern);
}
/* }}} */
-/* {{{ proto void ArrayIterator::seek(int $position)
- Seek to position. */
-SPL_METHOD(Array, seek)
+/* {{{ Seek to position. */
+PHP_METHOD(ArrayIterator, seek)
{
zend_long opos, position;
zval *object = ZEND_THIS;
@@ -1351,7 +1338,7 @@ SPL_METHOD(Array, seek)
int result;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &position) == FAILURE) {
- return;
+ RETURN_THROWS();
}
opos = position;
@@ -1390,9 +1377,9 @@ static zend_long spl_array_object_count_elements_helper(spl_array_object *intern
}
} /* }}} */
-int spl_array_object_count_elements(zval *object, zend_long *count) /* {{{ */
+int spl_array_object_count_elements(zend_object *object, zend_long *count) /* {{{ */
{
- spl_array_object *intern = Z_SPLARRAY_P(object);
+ spl_array_object *intern = spl_array_from_obj(object);
if (intern->fptr_count) {
zval rv;
@@ -1409,15 +1396,13 @@ int spl_array_object_count_elements(zval *object, zend_long *count) /* {{{ */
return SUCCESS;
} /* }}} */
-/* {{{ proto int ArrayObject::count()
- proto int ArrayIterator::count()
- Return the number of elements in the Iterator. */
-SPL_METHOD(Array, count)
+/* {{{ Return the number of elements in the Iterator. */
+PHP_METHOD(ArrayObject, count)
{
spl_array_object *intern = Z_SPLARRAY_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(spl_array_object_count_elements_helper(intern));
@@ -1426,7 +1411,8 @@ SPL_METHOD(Array, count)
static void spl_array_method(INTERNAL_FUNCTION_PARAMETERS, char *fname, int fname_len, int use_arg) /* {{{ */
{
spl_array_object *intern = Z_SPLARRAY_P(ZEND_THIS);
- HashTable *aht = spl_array_get_hash_table(intern);
+ HashTable **ht_ptr = spl_array_get_hash_table_ptr(intern);
+ HashTable *aht = *ht_ptr;
zval function_name, params[2], *arg = NULL;
ZVAL_STRINGL(&function_name, fname, fname_len);
@@ -1436,23 +1422,24 @@ static void spl_array_method(INTERNAL_FUNCTION_PARAMETERS, char *fname, int fnam
GC_ADDREF(aht);
if (!use_arg) {
+ if (zend_parse_parameters_none() == FAILURE) {
+ goto exit;
+ }
+
intern->nApplyCount++;
call_user_function(EG(function_table), NULL, &function_name, return_value, 1, params);
intern->nApplyCount--;
- } else if (use_arg == SPL_ARRAY_METHOD_MAY_USER_ARG) {
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "|z", &arg) == FAILURE) {
- zend_throw_exception(spl_ce_BadMethodCallException, "Function expects one argument at most", 0);
+ } else if (use_arg == SPL_ARRAY_METHOD_SORT_FLAGS_ARG) {
+ zend_long sort_flags = 0;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &sort_flags) == FAILURE) {
goto exit;
}
- if (arg) {
- ZVAL_COPY_VALUE(&params[1], arg);
- }
+ ZVAL_LONG(&params[1], sort_flags);
intern->nApplyCount++;
- call_user_function(EG(function_table), NULL, &function_name, return_value, arg ? 2 : 1, params);
+ call_user_function(EG(function_table), NULL, &function_name, return_value, 2, params);
intern->nApplyCount--;
} else {
- if (ZEND_NUM_ARGS() != 1 || zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "z", &arg) == FAILURE) {
- zend_throw_exception(spl_ce_BadMethodCallException, "Function expects exactly one argument", 0);
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &arg) == FAILURE) {
goto exit;
}
ZVAL_COPY_VALUE(&params[1], arg);
@@ -1463,57 +1450,42 @@ static void spl_array_method(INTERNAL_FUNCTION_PARAMETERS, char *fname, int fnam
exit:
{
- HashTable *new_ht = Z_ARRVAL_P(Z_REFVAL(params[0]));
- if (aht != new_ht) {
- spl_array_replace_hash_table(intern, new_ht);
- } else {
- GC_DELREF(aht);
- }
- ZVAL_NULL(Z_REFVAL(params[0]));
+ zval *ht_zv = Z_REFVAL(params[0]);
+ zend_array_release(*ht_ptr);
+ SEPARATE_ARRAY(ht_zv);
+ *ht_ptr = Z_ARRVAL_P(ht_zv);
+ ZVAL_NULL(ht_zv);
zval_ptr_dtor(&params[0]);
zend_string_free(Z_STR(function_name));
}
} /* }}} */
#define SPL_ARRAY_METHOD(cname, fname, use_arg) \
-SPL_METHOD(cname, fname) \
+PHP_METHOD(cname, fname) \
{ \
spl_array_method(INTERNAL_FUNCTION_PARAM_PASSTHRU, #fname, sizeof(#fname)-1, use_arg); \
}
-/* {{{ proto int ArrayObject::asort([int $sort_flags = SORT_REGULAR ])
- proto int ArrayIterator::asort([int $sort_flags = SORT_REGULAR ])
- Sort the entries by values. */
-SPL_ARRAY_METHOD(Array, asort, SPL_ARRAY_METHOD_MAY_USER_ARG) /* }}} */
+/* {{{ Sort the entries by values. */
+SPL_ARRAY_METHOD(ArrayObject, asort, SPL_ARRAY_METHOD_SORT_FLAGS_ARG) /* }}} */
-/* {{{ proto int ArrayObject::ksort([int $sort_flags = SORT_REGULAR ])
- proto int ArrayIterator::ksort([int $sort_flags = SORT_REGULAR ])
- Sort the entries by key. */
-SPL_ARRAY_METHOD(Array, ksort, SPL_ARRAY_METHOD_MAY_USER_ARG) /* }}} */
+/* {{{ Sort the entries by key. */
+SPL_ARRAY_METHOD(ArrayObject, ksort, SPL_ARRAY_METHOD_SORT_FLAGS_ARG) /* }}} */
-/* {{{ proto int ArrayObject::uasort(callback cmp_function)
- proto int ArrayIterator::uasort(callback cmp_function)
- Sort the entries by values user defined function. */
-SPL_ARRAY_METHOD(Array, uasort, SPL_ARRAY_METHOD_USE_ARG) /* }}} */
+/* {{{ Sort the entries by values user defined function. */
+SPL_ARRAY_METHOD(ArrayObject, uasort, SPL_ARRAY_METHOD_CALLBACK_ARG) /* }}} */
-/* {{{ proto int ArrayObject::uksort(callback cmp_function)
- proto int ArrayIterator::uksort(callback cmp_function)
- Sort the entries by key using user defined function. */
-SPL_ARRAY_METHOD(Array, uksort, SPL_ARRAY_METHOD_USE_ARG) /* }}} */
+/* {{{ Sort the entries by key using user defined function. */
+SPL_ARRAY_METHOD(ArrayObject, uksort, SPL_ARRAY_METHOD_CALLBACK_ARG) /* }}} */
-/* {{{ proto int ArrayObject::natsort()
- proto int ArrayIterator::natsort()
- Sort the entries by values using "natural order" algorithm. */
-SPL_ARRAY_METHOD(Array, natsort, SPL_ARRAY_METHOD_NO_ARG) /* }}} */
+/* {{{ Sort the entries by values using "natural order" algorithm. */
+SPL_ARRAY_METHOD(ArrayObject, natsort, SPL_ARRAY_METHOD_NO_ARG) /* }}} */
-/* {{{ proto int ArrayObject::natcasesort()
- proto int ArrayIterator::natcasesort()
- Sort the entries by key using case insensitive "natural order" algorithm. */
-SPL_ARRAY_METHOD(Array, natcasesort, SPL_ARRAY_METHOD_NO_ARG) /* }}} */
+/* {{{ Sort the entries by key using case insensitive "natural order" algorithm. */
+SPL_ARRAY_METHOD(ArrayObject, natcasesort, SPL_ARRAY_METHOD_NO_ARG) /* }}} */
-/* {{{ proto mixed|NULL ArrayIterator::current()
- Return current array entry */
-SPL_METHOD(Array, current)
+/* {{{ Return current array entry */
+PHP_METHOD(ArrayIterator, current)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
@@ -1521,7 +1493,7 @@ SPL_METHOD(Array, current)
HashTable *aht = spl_array_get_hash_table(intern);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((entry = zend_hash_get_current_data_ex(aht, spl_array_get_pos_ptr(aht, intern))) == NULL) {
@@ -1537,12 +1509,11 @@ SPL_METHOD(Array, current)
}
/* }}} */
-/* {{{ proto mixed|NULL ArrayIterator::key()
- Return current array key */
-SPL_METHOD(Array, key)
+/* {{{ Return current array key */
+PHP_METHOD(ArrayIterator, key)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_array_iterator_key(ZEND_THIS, return_value);
@@ -1557,48 +1528,45 @@ void spl_array_iterator_key(zval *object, zval *return_value) /* {{{ */
}
/* }}} */
-/* {{{ proto void ArrayIterator::next()
- Move to next entry */
-SPL_METHOD(Array, next)
+/* {{{ Move to next entry */
+PHP_METHOD(ArrayIterator, next)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
HashTable *aht = spl_array_get_hash_table(intern);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_array_next_ex(intern, aht);
}
/* }}} */
-/* {{{ proto bool ArrayIterator::valid()
- Check whether array contains more entries */
-SPL_METHOD(Array, valid)
+/* {{{ Check whether array contains more entries */
+PHP_METHOD(ArrayIterator, valid)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
HashTable *aht = spl_array_get_hash_table(intern);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(zend_hash_has_more_elements_ex(aht, spl_array_get_pos_ptr(aht, intern)) == SUCCESS);
}
/* }}} */
-/* {{{ proto bool RecursiveArrayIterator::hasChildren()
- Check whether current element has children (e.g. is an array) */
-SPL_METHOD(Array, hasChildren)
+/* {{{ Check whether current element has children (e.g. is an array) */
+PHP_METHOD(RecursiveArrayIterator, hasChildren)
{
zval *object = ZEND_THIS, *entry;
spl_array_object *intern = Z_SPLARRAY_P(object);
HashTable *aht = spl_array_get_hash_table(intern);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((entry = zend_hash_get_current_data_ex(aht, spl_array_get_pos_ptr(aht, intern))) == NULL) {
@@ -1614,16 +1582,15 @@ SPL_METHOD(Array, hasChildren)
}
/* }}} */
-/* {{{ proto object RecursiveArrayIterator::getChildren()
- Create a sub iterator for the current element (same class as $this) */
-SPL_METHOD(Array, getChildren)
+/* {{{ Create a sub iterator for the current element (same class as $this) */
+PHP_METHOD(RecursiveArrayIterator, getChildren)
{
zval *object = ZEND_THIS, *entry, flags;
spl_array_object *intern = Z_SPLARRAY_P(object);
HashTable *aht = spl_array_get_hash_table(intern);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((entry = zend_hash_get_current_data_ex(aht, spl_array_get_pos_ptr(aht, intern))) == NULL) {
@@ -1640,9 +1607,7 @@ SPL_METHOD(Array, getChildren)
return;
}
if (instanceof_function(Z_OBJCE_P(entry), Z_OBJCE_P(ZEND_THIS))) {
- ZVAL_OBJ(return_value, Z_OBJ_P(entry));
- Z_ADDREF_P(return_value);
- return;
+ RETURN_OBJ_COPY(Z_OBJ_P(entry));
}
}
@@ -1651,9 +1616,8 @@ SPL_METHOD(Array, getChildren)
}
/* }}} */
-/* {{{ proto string ArrayObject::serialize()
- Serialize the object */
-SPL_METHOD(Array, serialize)
+/* {{{ Serialize the object */
+PHP_METHOD(ArrayObject, serialize)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
@@ -1662,7 +1626,7 @@ SPL_METHOD(Array, serialize)
smart_str buf = {0};
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
PHP_VAR_SERIALIZE_INIT(var_hash);
@@ -1691,17 +1655,11 @@ SPL_METHOD(Array, serialize)
/* done */
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- if (buf.s) {
- RETURN_NEW_STR(buf.s);
- }
-
- RETURN_NULL();
+ RETURN_NEW_STR(buf.s);
} /* }}} */
-/* {{{ proto void ArrayObject::unserialize(string serialized)
- * unserialize the object
- */
-SPL_METHOD(Array, unserialize)
+/* {{{ unserialize the object */
+PHP_METHOD(ArrayObject, unserialize)
{
zval *object = ZEND_THIS;
spl_array_object *intern = Z_SPLARRAY_P(object);
@@ -1714,7 +1672,7 @@ SPL_METHOD(Array, unserialize)
zend_long flags;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &buf, &buf_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (buf_len == 0) {
@@ -1722,7 +1680,7 @@ SPL_METHOD(Array, unserialize)
}
if (intern->nApplyCount > 0) {
- zend_error(E_WARNING, "Modification of ArrayObject during sorting is prohibited");
+ zend_throw_error(NULL, "Modification of ArrayObject during sorting is prohibited");
return;
}
@@ -1808,18 +1766,18 @@ SPL_METHOD(Array, unserialize)
outexcept:
PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Error at offset " ZEND_LONG_FMT " of %zd bytes", (zend_long)((char*)p - buf), buf_len);
- return;
+ RETURN_THROWS();
} /* }}} */
-/* {{{ proto array ArrayObject::__serialize() */
-SPL_METHOD(Array, __serialize)
+/* {{{ */
+PHP_METHOD(ArrayObject, __serialize)
{
spl_array_object *intern = Z_SPLARRAY_P(ZEND_THIS);
zval tmp;
- if (zend_parse_parameters_none_throw() == FAILURE) {
- return;
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
}
array_init(return_value);
@@ -1837,7 +1795,7 @@ SPL_METHOD(Array, __serialize)
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &tmp);
/* members */
- ZVAL_ARR(&tmp, zend_std_get_properties(ZEND_THIS));
+ ZVAL_ARR(&tmp, zend_std_get_properties(&intern->std));
Z_TRY_ADDREF(tmp);
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &tmp);
@@ -1852,16 +1810,16 @@ SPL_METHOD(Array, __serialize)
/* }}} */
-/* {{{ proto void ArrayObject::__unserialize(array data) */
-SPL_METHOD(Array, __unserialize)
+/* {{{ */
+PHP_METHOD(ArrayObject, __unserialize)
{
spl_array_object *intern = Z_SPLARRAY_P(ZEND_THIS);
HashTable *data;
zval *flags_zv, *storage_zv, *members_zv, *iterator_class_zv;
zend_long flags;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
+ RETURN_THROWS();
}
flags_zv = zend_hash_index_find(data, 0);
@@ -1875,7 +1833,7 @@ SPL_METHOD(Array, __unserialize)
Z_TYPE_P(iterator_class_zv) != IS_STRING))) {
zend_throw_exception(spl_ce_UnexpectedValueException,
"Incomplete or ill-typed serialization data", 0);
- return;
+ RETURN_THROWS();
}
flags = Z_LVAL_P(flags_zv);
@@ -1898,155 +1856,35 @@ SPL_METHOD(Array, __unserialize)
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0,
"Cannot deserialize ArrayObject with iterator class '%s'; no such class exists",
ZSTR_VAL(Z_STR_P(iterator_class_zv)));
- return;
- } else if (!instanceof_function(ce, spl_ce_Iterator)) {
+ RETURN_THROWS();
+ }
+
+ if (!instanceof_function(ce, spl_ce_Iterator)) {
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0,
"Cannot deserialize ArrayObject with iterator class '%s'; this class does not implement the Iterator interface",
ZSTR_VAL(Z_STR_P(iterator_class_zv)));
- return;
- } else {
- intern->ce_get_iterator = ce;
+ RETURN_THROWS();
}
+
+ intern->ce_get_iterator = ce;
}
}
/* }}} */
-/* {{{ proto void Array::__debugInfo() */
-SPL_METHOD(Array, __debugInfo)
+/* {{{ */
+PHP_METHOD(ArrayObject, __debugInfo)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- RETURN_ARR(spl_array_get_debug_info(getThis()));
+ RETURN_ARR(spl_array_get_debug_info(Z_OBJ_P(ZEND_THIS)));
} /* }}} */
-/* {{{ arginfo and function table */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_array___construct, 0, 0, 0)
- ZEND_ARG_INFO(0, input)
- ZEND_ARG_INFO(0, flags)
- ZEND_ARG_INFO(0, iterator_class)
-ZEND_END_ARG_INFO()
-
-/* ArrayIterator::__construct and ArrayObject::__construct have different signatures */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_array_iterator___construct, 0, 0, 0)
- ZEND_ARG_INFO(0, array)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetGet, 0, 0, 1)
- ZEND_ARG_INFO(0, index)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_array_offsetSet, 0, 0, 2)
- ZEND_ARG_INFO(0, index)
- ZEND_ARG_INFO(0, newval)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_append, 0)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_seek, 0)
- ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_exchangeArray, 0)
- ZEND_ARG_INFO(0, input)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_setFlags, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_setIteratorClass, 0)
- ZEND_ARG_INFO(0, iteratorClass)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_uXsort, 0)
- ZEND_ARG_INFO(0, cmp_function)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_unserialize, 0)
- ZEND_ARG_INFO(0, serialized)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_array_void, 0)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_funcs_ArrayObject[] = {
- SPL_ME(Array, __construct, arginfo_array___construct, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getArrayCopy, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, count, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getFlags, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, setFlags, arginfo_array_setFlags, ZEND_ACC_PUBLIC)
- SPL_ME(Array, asort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, ksort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, uasort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
- SPL_ME(Array, uksort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
- SPL_ME(Array, natsort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, natcasesort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
- SPL_ME(Array, serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, __unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
- SPL_ME(Array, __serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, __debugInfo, arginfo_array_void, ZEND_ACC_PUBLIC)
- /* ArrayObject specific */
- SPL_ME(Array, getIterator, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, exchangeArray, arginfo_array_exchangeArray, ZEND_ACC_PUBLIC)
- SPL_ME(Array, setIteratorClass, arginfo_array_setIteratorClass, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getIteratorClass, arginfo_array_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_funcs_ArrayIterator[] = {
- SPL_ME(ArrayIterator, __construct, arginfo_array_iterator___construct, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetExists, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetGet, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetSet, arginfo_array_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, offsetUnset, arginfo_array_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(Array, append, arginfo_array_append, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getArrayCopy, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, count, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getFlags, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, setFlags, arginfo_array_setFlags, ZEND_ACC_PUBLIC)
- SPL_ME(Array, asort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, ksort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, uasort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
- SPL_ME(Array, uksort, arginfo_array_uXsort, ZEND_ACC_PUBLIC)
- SPL_ME(Array, natsort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, natcasesort, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
- SPL_ME(Array, serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, __unserialize, arginfo_array_unserialize, ZEND_ACC_PUBLIC)
- SPL_ME(Array, __serialize, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, __debugInfo, arginfo_array_void, ZEND_ACC_PUBLIC)
- /* ArrayIterator specific */
- SPL_ME(Array, rewind, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, current, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, key, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, next, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, valid, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, seek, arginfo_array_seek, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_funcs_RecursiveArrayIterator[] = {
- SPL_ME(Array, hasChildren, arginfo_array_void, ZEND_ACC_PUBLIC)
- SPL_ME(Array, getChildren, arginfo_array_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-/* }}} */
-
/* {{{ PHP_MINIT_FUNCTION(spl_array) */
PHP_MINIT_FUNCTION(spl_array)
{
- REGISTER_SPL_STD_CLASS_EX(ArrayObject, spl_array_object_new, spl_funcs_ArrayObject);
+ REGISTER_SPL_STD_CLASS_EX(ArrayObject, spl_array_object_new, class_ArrayObject_methods);
REGISTER_SPL_IMPLEMENTS(ArrayObject, Aggregate);
REGISTER_SPL_IMPLEMENTS(ArrayObject, ArrayAccess);
REGISTER_SPL_IMPLEMENTS(ArrayObject, Serializable);
@@ -2070,11 +1908,11 @@ PHP_MINIT_FUNCTION(spl_array)
spl_handler_ArrayObject.has_property = spl_array_has_property;
spl_handler_ArrayObject.unset_property = spl_array_unset_property;
- spl_handler_ArrayObject.compare_objects = spl_array_compare_objects;
+ spl_handler_ArrayObject.compare = spl_array_compare_objects;
spl_handler_ArrayObject.dtor_obj = zend_objects_destroy_object;
spl_handler_ArrayObject.free_obj = spl_array_object_free_storage;
- REGISTER_SPL_STD_CLASS_EX(ArrayIterator, spl_array_object_new, spl_funcs_ArrayIterator);
+ REGISTER_SPL_STD_CLASS_EX(ArrayIterator, spl_array_object_new, class_ArrayIterator_methods);
REGISTER_SPL_IMPLEMENTS(ArrayIterator, Iterator);
REGISTER_SPL_IMPLEMENTS(ArrayIterator, ArrayAccess);
REGISTER_SPL_IMPLEMENTS(ArrayIterator, SeekableIterator);
@@ -2091,7 +1929,7 @@ PHP_MINIT_FUNCTION(spl_array)
REGISTER_SPL_CLASS_CONST_LONG(ArrayIterator, "STD_PROP_LIST", SPL_ARRAY_STD_PROP_LIST);
REGISTER_SPL_CLASS_CONST_LONG(ArrayIterator, "ARRAY_AS_PROPS", SPL_ARRAY_ARRAY_AS_PROPS);
- REGISTER_SPL_SUB_CLASS_EX(RecursiveArrayIterator, ArrayIterator, spl_array_object_new, spl_funcs_RecursiveArrayIterator);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveArrayIterator, ArrayIterator, spl_array_object_new, class_RecursiveArrayIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveArrayIterator, RecursiveIterator);
spl_ce_RecursiveArrayIterator->get_iterator = spl_array_get_iterator;
spl_ce_RecursiveArrayIterator->ce_flags |= ZEND_ACC_REUSE_GET_ITERATOR;
diff --git a/ext/spl/spl_array.h b/ext/spl/spl_array.h
index ed5dec3e62..c98a6d02b6 100644
--- a/ext/spl/spl_array.h
+++ b/ext/spl/spl_array.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_array.stub.php b/ext/spl/spl_array.stub.php
new file mode 100644
index 0000000000..1567d107f2
--- /dev/null
+++ b/ext/spl/spl_array.stub.php
@@ -0,0 +1,248 @@
+<?php
+
+/** @generate-function-entries */
+
+class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
+{
+ public function __construct(array|object $array = [], int $flags = 0, string $iteratorClass = ArrayIterator::class) {}
+
+ /**
+ * @param string|int $key
+ * @return bool
+ */
+ public function offsetExists($key) {}
+
+ /**
+ * @param string|int $key
+ * @return mixed
+ */
+ public function offsetGet($key) {}
+
+ /**
+ * @param string|int $key
+ * @return void
+ */
+ public function offsetSet($key, mixed $value) {}
+
+ /**
+ * @param string|int $key
+ * @return void
+ */
+ public function offsetUnset($key) {}
+
+ /** @return void */
+ public function append(mixed $value) {}
+
+ /** @return array */
+ public function getArrayCopy() {}
+
+ /** @return int */
+ public function count() {}
+
+ /** @return int */
+ public function getFlags() {}
+
+ /** @return void */
+ public function setFlags(int $flags) {}
+
+ /** @return bool */
+ public function asort(int $flags = SORT_REGULAR) {}
+
+ /** @return bool */
+ public function ksort(int $flags = SORT_REGULAR) {}
+
+ /** @return bool */
+ public function uasort(callable $callback) {}
+
+ /** @return bool */
+ public function uksort(callable $callback) {}
+
+ /** @return bool */
+ public function natsort() {}
+
+ /** @return bool */
+ public function natcasesort() {}
+
+ /** @return void */
+ public function unserialize(string $data) {}
+
+ /** @return string */
+ public function serialize() {}
+
+ /** @return array */
+ public function __serialize() {}
+
+ /** @return void */
+ public function __unserialize(array $data) {}
+
+ /** @return Iterator */
+ public function getIterator() {}
+
+ /** @return array|null */
+ public function exchangeArray(array|object $array) {}
+
+ /** @return void */
+ public function setIteratorClass(string $iteratorClass) {}
+
+ /** @return string */
+ public function getIteratorClass() {}
+
+ /** @return array */
+ public function __debugInfo() {}
+}
+
+class ArrayIterator implements SeekableIterator, ArrayAccess, Serializable, Countable
+{
+ public function __construct(array|object $array = [], int $flags = 0) {}
+
+ /**
+ * @param string|int $key
+ * @return bool
+ * @implementation-alias ArrayObject::offsetExists
+ */
+ public function offsetExists($key) {}
+
+ /**
+ * @param string|int $key
+ * @return mixed
+ * @implementation-alias ArrayObject::offsetGet
+ */
+ public function offsetGet($key) {}
+
+ /**
+ * @param string|int $key
+ * @return void
+ * @implementation-alias ArrayObject::offsetSet
+ */
+ public function offsetSet($key, mixed $value) {}
+
+ /**
+ * @param string|int $key
+ * @return void
+ * @implementation-alias ArrayObject::offsetUnset
+ */
+ public function offsetUnset($key) {}
+
+ /**
+ * @return void
+ * @implementation-alias ArrayObject::append
+ */
+ public function append(mixed $value) {}
+
+ /**
+ * @return array
+ * @implementation-alias ArrayObject::getArrayCopy
+ */
+ public function getArrayCopy() {}
+
+ /**
+ * @return int
+ * @implementation-alias ArrayObject::count
+ */
+ public function count() {}
+
+ /**
+ * @return int
+ * @implementation-alias ArrayObject::getFlags
+ */
+ public function getFlags() {}
+
+ /**
+ * @return void
+ * @implementation-alias ArrayObject::setFlags
+ */
+ public function setFlags(int $flags) {}
+
+ /**
+ * @return bool
+ * @implementation-alias ArrayObject::asort
+ */
+ public function asort(int $flags = SORT_REGULAR) {}
+
+ /**
+ * @return bool
+ * @implementation-alias ArrayObject::ksort
+ */
+ public function ksort(int $flags = SORT_REGULAR) {}
+
+ /**
+ * @return bool
+ * @implementation-alias ArrayObject::uasort
+ */
+ public function uasort(callable $callback) {}
+
+ /**
+ * @return bool
+ * @implementation-alias ArrayObject::uksort
+ */
+ public function uksort(callable $callback) {}
+
+ /**
+ * @return bool
+ * @implementation-alias ArrayObject::natsort
+ */
+ public function natsort() {}
+
+ /**
+ * @return bool
+ * @implementation-alias ArrayObject::natcasesort
+ */
+ public function natcasesort() {}
+
+ /**
+ * @return void
+ * @implementation-alias ArrayObject::unserialize
+ */
+ public function unserialize(string $data) {}
+
+ /**
+ * @return string
+ * @implementation-alias ArrayObject::serialize
+ */
+ public function serialize() {}
+
+ /**
+ * @return array
+ * @implementation-alias ArrayObject::__serialize
+ */
+ public function __serialize() {}
+
+ /**
+ * @return void
+ * @implementation-alias ArrayObject::__unserialize
+ */
+ public function __unserialize(array $data) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return mixed */
+ public function key() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return void */
+ public function seek(int $offset) {}
+
+ /**
+ * @return array
+ * @implementation-alias ArrayObject::__debugInfo
+ */
+ public function __debugInfo() {}
+}
+
+class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
+{
+ /** @return bool */
+ public function hasChildren() {}
+
+ /** @return RecursiveArrayIterator|null */
+ public function getChildren() {}
+}
diff --git a/ext/spl/spl_array_arginfo.h b/ext/spl/spl_array_arginfo.h
new file mode 100644
index 0000000000..860b2e363d
--- /dev/null
+++ b/ext/spl/spl_array_arginfo.h
@@ -0,0 +1,246 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: da85db1e5e985ddbefaf38598133e3cba46475f2 */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0)
+ ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, iteratorClass, IS_STRING, 0, "ArrayIterator::class")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetExists, 0, 0, 1)
+ ZEND_ARG_INFO(0, key)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_offsetGet arginfo_class_ArrayObject_offsetExists
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_offsetSet, 0, 0, 2)
+ ZEND_ARG_INFO(0, key)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_offsetUnset arginfo_class_ArrayObject_offsetExists
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_append, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_getArrayCopy, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_count arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayObject_getFlags arginfo_class_ArrayObject_getArrayCopy
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setFlags, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_asort, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "SORT_REGULAR")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_ksort arginfo_class_ArrayObject_asort
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_uasort, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_uksort arginfo_class_ArrayObject_uasort
+
+#define arginfo_class_ArrayObject_natsort arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayObject_natcasesort arginfo_class_ArrayObject_getArrayCopy
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_unserialize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_serialize arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayObject___serialize arginfo_class_ArrayObject_getArrayCopy
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___unserialize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_getIterator arginfo_class_ArrayObject_getArrayCopy
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_exchangeArray, 0, 0, 1)
+ ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject_setIteratorClass, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, iteratorClass, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayObject_getIteratorClass arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayObject___debugInfo arginfo_class_ArrayObject_getArrayCopy
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayIterator___construct, 0, 0, 0)
+ ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayIterator_offsetExists arginfo_class_ArrayObject_offsetExists
+
+#define arginfo_class_ArrayIterator_offsetGet arginfo_class_ArrayObject_offsetExists
+
+#define arginfo_class_ArrayIterator_offsetSet arginfo_class_ArrayObject_offsetSet
+
+#define arginfo_class_ArrayIterator_offsetUnset arginfo_class_ArrayObject_offsetExists
+
+#define arginfo_class_ArrayIterator_append arginfo_class_ArrayObject_append
+
+#define arginfo_class_ArrayIterator_getArrayCopy arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_count arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_getFlags arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_setFlags arginfo_class_ArrayObject_setFlags
+
+#define arginfo_class_ArrayIterator_asort arginfo_class_ArrayObject_asort
+
+#define arginfo_class_ArrayIterator_ksort arginfo_class_ArrayObject_asort
+
+#define arginfo_class_ArrayIterator_uasort arginfo_class_ArrayObject_uasort
+
+#define arginfo_class_ArrayIterator_uksort arginfo_class_ArrayObject_uasort
+
+#define arginfo_class_ArrayIterator_natsort arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_natcasesort arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_unserialize arginfo_class_ArrayObject_unserialize
+
+#define arginfo_class_ArrayIterator_serialize arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator___serialize arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator___unserialize arginfo_class_ArrayObject___unserialize
+
+#define arginfo_class_ArrayIterator_rewind arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_current arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_key arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_next arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_ArrayIterator_valid arginfo_class_ArrayObject_getArrayCopy
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayIterator_seek, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ArrayIterator___debugInfo arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_RecursiveArrayIterator_hasChildren arginfo_class_ArrayObject_getArrayCopy
+
+#define arginfo_class_RecursiveArrayIterator_getChildren arginfo_class_ArrayObject_getArrayCopy
+
+
+ZEND_METHOD(ArrayObject, __construct);
+ZEND_METHOD(ArrayObject, offsetExists);
+ZEND_METHOD(ArrayObject, offsetGet);
+ZEND_METHOD(ArrayObject, offsetSet);
+ZEND_METHOD(ArrayObject, offsetUnset);
+ZEND_METHOD(ArrayObject, append);
+ZEND_METHOD(ArrayObject, getArrayCopy);
+ZEND_METHOD(ArrayObject, count);
+ZEND_METHOD(ArrayObject, getFlags);
+ZEND_METHOD(ArrayObject, setFlags);
+ZEND_METHOD(ArrayObject, asort);
+ZEND_METHOD(ArrayObject, ksort);
+ZEND_METHOD(ArrayObject, uasort);
+ZEND_METHOD(ArrayObject, uksort);
+ZEND_METHOD(ArrayObject, natsort);
+ZEND_METHOD(ArrayObject, natcasesort);
+ZEND_METHOD(ArrayObject, unserialize);
+ZEND_METHOD(ArrayObject, serialize);
+ZEND_METHOD(ArrayObject, __serialize);
+ZEND_METHOD(ArrayObject, __unserialize);
+ZEND_METHOD(ArrayObject, getIterator);
+ZEND_METHOD(ArrayObject, exchangeArray);
+ZEND_METHOD(ArrayObject, setIteratorClass);
+ZEND_METHOD(ArrayObject, getIteratorClass);
+ZEND_METHOD(ArrayObject, __debugInfo);
+ZEND_METHOD(ArrayIterator, __construct);
+ZEND_METHOD(ArrayIterator, rewind);
+ZEND_METHOD(ArrayIterator, current);
+ZEND_METHOD(ArrayIterator, key);
+ZEND_METHOD(ArrayIterator, next);
+ZEND_METHOD(ArrayIterator, valid);
+ZEND_METHOD(ArrayIterator, seek);
+ZEND_METHOD(RecursiveArrayIterator, hasChildren);
+ZEND_METHOD(RecursiveArrayIterator, getChildren);
+
+
+static const zend_function_entry class_ArrayObject_methods[] = {
+ ZEND_ME(ArrayObject, __construct, arginfo_class_ArrayObject___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, offsetExists, arginfo_class_ArrayObject_offsetExists, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, offsetGet, arginfo_class_ArrayObject_offsetGet, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, offsetSet, arginfo_class_ArrayObject_offsetSet, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, offsetUnset, arginfo_class_ArrayObject_offsetUnset, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, append, arginfo_class_ArrayObject_append, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, getArrayCopy, arginfo_class_ArrayObject_getArrayCopy, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, count, arginfo_class_ArrayObject_count, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, getFlags, arginfo_class_ArrayObject_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, setFlags, arginfo_class_ArrayObject_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, asort, arginfo_class_ArrayObject_asort, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, ksort, arginfo_class_ArrayObject_ksort, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, uasort, arginfo_class_ArrayObject_uasort, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, uksort, arginfo_class_ArrayObject_uksort, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, natsort, arginfo_class_ArrayObject_natsort, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, natcasesort, arginfo_class_ArrayObject_natcasesort, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, unserialize, arginfo_class_ArrayObject_unserialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, serialize, arginfo_class_ArrayObject_serialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, __serialize, arginfo_class_ArrayObject___serialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, __unserialize, arginfo_class_ArrayObject___unserialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, getIterator, arginfo_class_ArrayObject_getIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, exchangeArray, arginfo_class_ArrayObject_exchangeArray, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, setIteratorClass, arginfo_class_ArrayObject_setIteratorClass, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, getIteratorClass, arginfo_class_ArrayObject_getIteratorClass, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayObject, __debugInfo, arginfo_class_ArrayObject___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ArrayIterator_methods[] = {
+ ZEND_ME(ArrayIterator, __construct, arginfo_class_ArrayIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, offsetExists, offsetExists, arginfo_class_ArrayIterator_offsetExists, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, offsetGet, offsetGet, arginfo_class_ArrayIterator_offsetGet, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, offsetSet, offsetSet, arginfo_class_ArrayIterator_offsetSet, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, offsetUnset, offsetUnset, arginfo_class_ArrayIterator_offsetUnset, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, append, append, arginfo_class_ArrayIterator_append, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, getArrayCopy, getArrayCopy, arginfo_class_ArrayIterator_getArrayCopy, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, count, count, arginfo_class_ArrayIterator_count, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, getFlags, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, setFlags, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, asort, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, ksort, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, uasort, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, uksort, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, natsort, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, natcasesort, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, unserialize, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, serialize, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, __serialize, __serialize, arginfo_class_ArrayIterator___serialize, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, __unserialize, __unserialize, arginfo_class_ArrayIterator___unserialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayIterator, rewind, arginfo_class_ArrayIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayIterator, current, arginfo_class_ArrayIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayIterator, key, arginfo_class_ArrayIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayIterator, next, arginfo_class_ArrayIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayIterator, valid, arginfo_class_ArrayIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(ArrayIterator, seek, arginfo_class_ArrayIterator_seek, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(ArrayObject, __debugInfo, __debugInfo, arginfo_class_ArrayIterator___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveArrayIterator_methods[] = {
+ ZEND_ME(RecursiveArrayIterator, hasChildren, arginfo_class_RecursiveArrayIterator_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveArrayIterator, getChildren, arginfo_class_RecursiveArrayIterator_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index 6fec6d2e25..b7a835ae45 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -22,10 +20,11 @@
#include "php.h"
#include "php_ini.h"
-#include "ext/standard/info.h"
#include "ext/standard/file.h"
+#include "ext/standard/php_filestat.h"
+#include "ext/standard/flock_compat.h"
+#include "ext/standard/scanf.h"
#include "ext/standard/php_string.h"
-#include "zend_compile.h"
#include "zend_exceptions.h"
#include "zend_interfaces.h"
@@ -34,14 +33,9 @@
#include "spl_engine.h"
#include "spl_iterators.h"
#include "spl_directory.h"
+#include "spl_directory_arginfo.h"
#include "spl_exceptions.h"
-#include "php.h"
-#include "fopen_wrappers.h"
-
-#include "ext/standard/basic_functions.h"
-#include "ext/standard/php_filestat.h"
-
#define SPL_HAS_FLAG(flags, test_flag) ((flags & test_flag) ? 1 : 0)
/* declare the class handlers */
@@ -58,6 +52,12 @@ PHPAPI zend_class_entry *spl_ce_GlobIterator;
PHPAPI zend_class_entry *spl_ce_SplFileObject;
PHPAPI zend_class_entry *spl_ce_SplTempFileObject;
+#define CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(spl_filesystem_object_pointer) \
+ if (!(spl_filesystem_object_pointer)->u.file.stream) { \
+ zend_throw_error(NULL, "Object not initialized"); \
+ RETURN_THROWS(); \
+ }
+
static void spl_filesystem_file_free_line(spl_filesystem_object *intern) /* {{{ */
{
if (intern->u.file.current_line) {
@@ -200,7 +200,7 @@ PHPAPI char* spl_filesystem_object_get_path(spl_filesystem_object *intern, size_
return intern->_path;
} /* }}} */
-static inline void spl_filesystem_object_get_file_name(spl_filesystem_object *intern) /* {{{ */
+static inline int spl_filesystem_object_get_file_name(spl_filesystem_object *intern) /* {{{ */
{
char slash = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_UNIXPATHS) ? '/' : DEFAULT_SLASH;
@@ -208,7 +208,8 @@ static inline void spl_filesystem_object_get_file_name(spl_filesystem_object *in
case SPL_FS_INFO:
case SPL_FS_FILE:
if (!intern->file_name) {
- php_error_docref(NULL, E_ERROR, "Object not initialized");
+ zend_throw_error(NULL, "Object not initialized");
+ return FAILURE;
}
break;
case SPL_FS_DIR:
@@ -218,7 +219,7 @@ static inline void spl_filesystem_object_get_file_name(spl_filesystem_object *in
if (intern->file_name) {
efree(intern->file_name);
}
- /* if there is parent path, ammend it, otherwise just use the given path as is */
+ /* if there is parent path, amend it, otherwise just use the given path as is */
if (path_len == 0) {
intern->file_name_len = spprintf(
&intern->file_name, 0, "%s", intern->u.dir.entry.d_name);
@@ -229,6 +230,7 @@ static inline void spl_filesystem_object_get_file_name(spl_filesystem_object *in
}
break;
}
+ return SUCCESS;
} /* }}} */
static int spl_filesystem_dir_read(spl_filesystem_object *intern) /* {{{ */
@@ -346,15 +348,13 @@ static int spl_filesystem_file_open(spl_filesystem_object *intern, int use_inclu
Open the directory
Clone other members (properties)
*/
-static zend_object *spl_filesystem_object_clone(zval *zobject)
+static zend_object *spl_filesystem_object_clone(zend_object *old_object)
{
- zend_object *old_object;
zend_object *new_object;
spl_filesystem_object *intern;
spl_filesystem_object *source;
int index, skip_dots;
- old_object = Z_OBJ_P(zobject);
source = spl_filesystem_from_obj(old_object);
new_object = spl_filesystem_object_new_ex(old_object->ce);
intern = spl_filesystem_from_obj(new_object);
@@ -380,7 +380,7 @@ static zend_object *spl_filesystem_object_clone(zval *zobject)
intern->u.dir.index = index;
break;
case SPL_FS_FILE:
- ZEND_ASSERT(0);
+ ZEND_UNREACHABLE();
}
intern->file_class = source->file_class;
@@ -415,7 +415,7 @@ void spl_filesystem_info_set_filename(spl_filesystem_object *intern, char *path,
}
p1 = strrchr(intern->file_name, '/');
-#if defined(PHP_WIN32)
+#ifdef PHP_WIN32
p2 = strrchr(intern->file_name, '\\');
#else
p2 = 0;
@@ -439,7 +439,7 @@ static spl_filesystem_object *spl_filesystem_object_create_info(spl_filesystem_o
zend_error_handling error_handling;
if (!file_path || !file_path_len) {
-#if defined(PHP_WIN32)
+#ifdef PHP_WIN32
zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Cannot create SplFileInfo for empty path");
if (file_path && !use_copy) {
efree(file_path);
@@ -461,11 +461,11 @@ static spl_filesystem_object *spl_filesystem_object_create_info(spl_filesystem_o
zend_update_class_constants(ce);
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
ZVAL_STRINGL(&arg1, file_path, file_path_len);
- zend_call_method_with_1_params(return_value, ce, &ce->constructor, "__construct", NULL, &arg1);
+ zend_call_method_with_1_params(Z_OBJ_P(return_value), ce, &ce->constructor, "__construct", NULL, &arg1);
zval_ptr_dtor(&arg1);
} else {
spl_filesystem_info_set_filename(intern, file_path, file_path_len, use_copy);
@@ -475,15 +475,13 @@ static spl_filesystem_object *spl_filesystem_object_create_info(spl_filesystem_o
return intern;
} /* }}} */
-static spl_filesystem_object *spl_filesystem_object_create_type(int ht, spl_filesystem_object *source, int type, zend_class_entry *ce, zval *return_value) /* {{{ */
+static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, spl_filesystem_object *source, int type, zend_class_entry *ce, zval *return_value) /* {{{ */
{
spl_filesystem_object *intern;
zend_bool use_include_path = 0;
zval arg1, arg2;
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
-
switch (source->type) {
case SPL_FS_INFO:
case SPL_FS_FILE:
@@ -491,7 +489,6 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int ht, spl_file
case SPL_FS_DIR:
if (!source->u.dir.entry.d_name[0]) {
zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Could not open file");
- zend_restore_error_handling(&error_handling);
return NULL;
}
}
@@ -501,16 +498,19 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int ht, spl_file
ce = ce ? ce : source->info_class;
if (UNEXPECTED(zend_update_class_constants(ce) != SUCCESS)) {
- break;
+ return NULL;
}
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
+
+ if (spl_filesystem_object_get_file_name(source) != SUCCESS) {
+ return NULL;
+ }
- spl_filesystem_object_get_file_name(source);
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
ZVAL_STRINGL(&arg1, source->file_name, source->file_name_len);
- zend_call_method_with_1_params(return_value, ce, &ce->constructor, "__construct", NULL, &arg1);
+ zend_call_method_with_1_params(Z_OBJ_P(return_value), ce, &ce->constructor, "__construct", NULL, &arg1);
zval_ptr_dtor(&arg1);
} else {
intern->file_name = estrndup(source->file_name, source->file_name_len);
@@ -520,22 +520,34 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int ht, spl_file
}
break;
case SPL_FS_FILE:
+ {
ce = ce ? ce : source->file_class;
if (UNEXPECTED(zend_update_class_constants(ce) != SUCCESS)) {
- break;
+ return NULL;
}
- intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
+ char *open_mode = "r";
+ size_t open_mode_len = 1;
+ zval *resource = NULL;
- ZVAL_OBJ(return_value, &intern->std);
+ if (zend_parse_parameters(num_args, "|sbr!",
+ &open_mode, &open_mode_len, &use_include_path, &resource) == FAILURE
+ ) {
+ return NULL;
+ }
- spl_filesystem_object_get_file_name(source);
+ intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
+ RETVAL_OBJ(&intern->std);
+
+ if (spl_filesystem_object_get_file_name(source) != SUCCESS) {
+ return NULL;
+ }
if (ce->constructor->common.scope != spl_ce_SplFileObject) {
ZVAL_STRINGL(&arg1, source->file_name, source->file_name_len);
- ZVAL_STRINGL(&arg2, "r", 1);
- zend_call_method_with_2_params(return_value, ce, &ce->constructor, "__construct", NULL, &arg1, &arg2);
+ ZVAL_STRINGL(&arg2, open_mode, open_mode_len);
+ zend_call_method_with_2_params(Z_OBJ_P(return_value), ce, &ce->constructor, "__construct", NULL, &arg1, &arg2);
zval_ptr_dtor(&arg1);
zval_ptr_dtor(&arg2);
} else {
@@ -544,34 +556,25 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int ht, spl_file
intern->_path = spl_filesystem_object_get_path(source, &intern->_path_len);
intern->_path = estrndup(intern->_path, intern->_path_len);
- intern->u.file.open_mode = "r";
- intern->u.file.open_mode_len = 1;
-
- if (ht && zend_parse_parameters(ht, "|sbr",
- &intern->u.file.open_mode, &intern->u.file.open_mode_len,
- &use_include_path, &intern->u.file.zcontext) == FAILURE) {
- zend_restore_error_handling(&error_handling);
- intern->u.file.open_mode = NULL;
- intern->file_name = NULL;
- zval_ptr_dtor(return_value);
- ZVAL_NULL(return_value);
- return NULL;
- }
+ intern->u.file.open_mode = open_mode;
+ intern->u.file.open_mode_len = open_mode_len;
+ intern->u.file.zcontext = resource;
+ zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
if (spl_filesystem_file_open(intern, use_include_path, 0) == FAILURE) {
zend_restore_error_handling(&error_handling);
zval_ptr_dtor(return_value);
ZVAL_NULL(return_value);
return NULL;
}
+ zend_restore_error_handling(&error_handling);
}
break;
+ }
case SPL_FS_DIR:
- zend_restore_error_handling(&error_handling);
zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Operation not supported");
return NULL;
}
- zend_restore_error_handling(&error_handling);
return NULL;
} /* }}} */
@@ -599,9 +602,9 @@ static char *spl_filesystem_object_get_pathname(spl_filesystem_object *intern, s
}
/* }}} */
-static inline HashTable *spl_filesystem_object_get_debug_info(zval *object) /* {{{ */
+static inline HashTable *spl_filesystem_object_get_debug_info(zend_object *object) /* {{{ */
{
- spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(object);
+ spl_filesystem_object *intern = spl_filesystem_from_obj(object);
zval tmp;
HashTable *rv;
zend_string *pnstr;
@@ -703,8 +706,6 @@ void spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAMETERS, zend_long cto
zend_long flags;
zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling);
-
if (SPL_HAS_FLAG(ctor_flags, DIT_CTOR_FLAGS)) {
flags = SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO;
parsed = zend_parse_parameters(ZEND_NUM_ARGS(), "p|l", &path, &len, &flags);
@@ -719,23 +720,23 @@ void spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAMETERS, zend_long cto
flags |= SPL_FILE_DIR_UNIXPATHS;
}
if (parsed == FAILURE) {
- zend_restore_error_handling(&error_handling);
- return;
+ RETURN_THROWS();
}
- if (!len) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Directory name must not be empty.");
- zend_restore_error_handling(&error_handling);
- return;
+
+ if (len == 0) {
+ zend_argument_value_error(1, "cannot be empty");
+ RETURN_THROWS();
}
intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (intern->_path) {
/* object is already initialized */
- zend_restore_error_handling(&error_handling);
- php_error_docref(NULL, E_WARNING, "Directory object is already initialized");
- return;
+ zend_throw_error(NULL, "Directory object is already initialized");
+ RETURN_THROWS();
}
intern->flags = flags;
+
+ zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling);
#ifdef HAVE_GLOB
if (SPL_HAS_FLAG(ctor_flags, DIT_CTOR_GLOB) && strstr(path, "glob://") != path) {
spprintf(&path, 0, "glob://%s", path);
@@ -754,22 +755,20 @@ void spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAMETERS, zend_long cto
}
/* }}} */
-/* {{{ proto DirectoryIterator::__construct(string path)
- Cronstructs a new dir iterator from a path. */
-SPL_METHOD(DirectoryIterator, __construct)
+/* {{{ Cronstructs a new dir iterator from a path. */
+PHP_METHOD(DirectoryIterator, __construct)
{
spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
/* }}} */
-/* {{{ proto void DirectoryIterator::rewind()
- Rewind dir back to the start */
-SPL_METHOD(DirectoryIterator, rewind)
+/* {{{ Rewind dir back to the start */
+PHP_METHOD(DirectoryIterator, rewind)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern->u.dir.index = 0;
@@ -780,14 +779,13 @@ SPL_METHOD(DirectoryIterator, rewind)
}
/* }}} */
-/* {{{ proto string DirectoryIterator::key()
- Return current dir entry */
-SPL_METHOD(DirectoryIterator, key)
+/* {{{ Return current dir entry */
+PHP_METHOD(DirectoryIterator, key)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (intern->u.dir.dirp) {
@@ -798,27 +796,24 @@ SPL_METHOD(DirectoryIterator, key)
}
/* }}} */
-/* {{{ proto DirectoryIterator DirectoryIterator::current()
- Return this (needed for Iterator interface) */
-SPL_METHOD(DirectoryIterator, current)
+/* {{{ Return this (needed for Iterator interface) */
+PHP_METHOD(DirectoryIterator, current)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
- Z_ADDREF_P(return_value);
+ RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
}
/* }}} */
-/* {{{ proto void DirectoryIterator::next()
- Move to next entry */
-SPL_METHOD(DirectoryIterator, next)
+/* {{{ Move to next entry */
+PHP_METHOD(DirectoryIterator, next)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
int skip_dots = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_SKIPDOTS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern->u.dir.index++;
@@ -832,60 +827,57 @@ SPL_METHOD(DirectoryIterator, next)
}
/* }}} */
-/* {{{ proto void DirectoryIterator::seek(int position)
- Seek to the given position */
-SPL_METHOD(DirectoryIterator, seek)
+/* {{{ Seek to the given position */
+PHP_METHOD(DirectoryIterator, seek)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zval retval;
zend_long pos;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &pos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (intern->u.dir.index > pos) {
/* we first rewind */
- zend_call_method_with_0_params(ZEND_THIS, Z_OBJCE_P(ZEND_THIS), &intern->u.dir.func_rewind, "rewind", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(ZEND_THIS), Z_OBJCE_P(ZEND_THIS), &intern->u.dir.func_rewind, "rewind", NULL);
}
while (intern->u.dir.index < pos) {
int valid = 0;
- zend_call_method_with_0_params(ZEND_THIS, Z_OBJCE_P(ZEND_THIS), &intern->u.dir.func_valid, "valid", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(ZEND_THIS), Z_OBJCE_P(ZEND_THIS), &intern->u.dir.func_valid, "valid", &retval);
valid = zend_is_true(&retval);
zval_ptr_dtor(&retval);
if (!valid) {
zend_throw_exception_ex(spl_ce_OutOfBoundsException, 0, "Seek position " ZEND_LONG_FMT " is out of range", pos);
- return;
+ RETURN_THROWS();
}
- zend_call_method_with_0_params(ZEND_THIS, Z_OBJCE_P(ZEND_THIS), &intern->u.dir.func_next, "next", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(ZEND_THIS), Z_OBJCE_P(ZEND_THIS), &intern->u.dir.func_next, "next", NULL);
}
} /* }}} */
-/* {{{ proto string DirectoryIterator::valid()
- Check whether dir contains more entries */
-SPL_METHOD(DirectoryIterator, valid)
+/* {{{ Check whether dir contains more entries */
+PHP_METHOD(DirectoryIterator, valid)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(intern->u.dir.entry.d_name[0] != '\0');
}
/* }}} */
-/* {{{ proto string SplFileInfo::getPath()
- Return the path */
-SPL_METHOD(SplFileInfo, getPath)
+/* {{{ Return the path */
+PHP_METHOD(SplFileInfo, getPath)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char *path;
size_t path_len;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
path = spl_filesystem_object_get_path(intern, &path_len);
@@ -897,15 +889,19 @@ SPL_METHOD(SplFileInfo, getPath)
}
/* }}} */
-/* {{{ proto string SplFileInfo::getFilename()
- Return filename only */
-SPL_METHOD(SplFileInfo, getFilename)
+/* {{{ Return filename only */
+PHP_METHOD(SplFileInfo, getFilename)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
size_t path_len;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
+ }
+
+ if (!intern->file_name) {
+ zend_throw_error(NULL, "Object not initialized");
+ RETURN_THROWS();
}
spl_filesystem_object_get_path(intern, &path_len);
@@ -918,23 +914,21 @@ SPL_METHOD(SplFileInfo, getFilename)
}
/* }}} */
-/* {{{ proto string DirectoryIterator::getFilename()
- Return filename of current dir entry */
-SPL_METHOD(DirectoryIterator, getFilename)
+/* {{{ Return filename of current dir entry */
+PHP_METHOD(DirectoryIterator, getFilename)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_STRING(intern->u.dir.entry.d_name);
}
/* }}} */
-/* {{{ proto string SplFileInfo::getExtension()
- Returns file extension component of path */
-SPL_METHOD(SplFileInfo, getExtension)
+/* {{{ Returns file extension component of path */
+PHP_METHOD(SplFileInfo, getExtension)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char *fname = NULL;
@@ -945,7 +939,12 @@ SPL_METHOD(SplFileInfo, getExtension)
zend_string *ret;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
+ }
+
+ if (!intern->file_name) {
+ zend_throw_error(NULL, "Object not initialized");
+ RETURN_THROWS();
}
spl_filesystem_object_get_path(intern, &path_len);
@@ -973,9 +972,8 @@ SPL_METHOD(SplFileInfo, getExtension)
}
/* }}}*/
-/* {{{ proto string DirectoryIterator::getExtension()
- Returns the file extension component of path */
-SPL_METHOD(DirectoryIterator, getExtension)
+/* {{{ Returns the file extension component of path */
+PHP_METHOD(DirectoryIterator, getExtension)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
const char *p;
@@ -983,7 +981,7 @@ SPL_METHOD(DirectoryIterator, getExtension)
zend_string *fname;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
fname = php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), NULL, 0);
@@ -1000,9 +998,8 @@ SPL_METHOD(DirectoryIterator, getExtension)
}
/* }}} */
-/* {{{ proto string SplFileInfo::getBasename([string $suffix])
- Returns filename component of path */
-SPL_METHOD(SplFileInfo, getBasename)
+/* {{{ Returns filename component of path */
+PHP_METHOD(SplFileInfo, getBasename)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char *fname, *suffix = 0;
@@ -1010,7 +1007,12 @@ SPL_METHOD(SplFileInfo, getBasename)
size_t slen = 0, path_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &suffix, &slen) == FAILURE) {
- return;
+ RETURN_THROWS();
+ }
+
+ if (!intern->file_name) {
+ zend_throw_error(NULL, "Object not initialized");
+ RETURN_THROWS();
}
spl_filesystem_object_get_path(intern, &path_len);
@@ -1027,9 +1029,8 @@ SPL_METHOD(SplFileInfo, getBasename)
}
/* }}}*/
-/* {{{ proto string DirectoryIterator::getBasename([string $suffix])
- Returns filename component of current dir entry */
-SPL_METHOD(DirectoryIterator, getBasename)
+/* {{{ Returns filename component of current dir entry */
+PHP_METHOD(DirectoryIterator, getBasename)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char *suffix = 0;
@@ -1037,7 +1038,7 @@ SPL_METHOD(DirectoryIterator, getBasename)
zend_string *fname;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &suffix, &slen) == FAILURE) {
- return;
+ RETURN_THROWS();
}
fname = php_basename(intern->u.dir.entry.d_name, strlen(intern->u.dir.entry.d_name), suffix, slen);
@@ -1046,96 +1047,95 @@ SPL_METHOD(DirectoryIterator, getBasename)
}
/* }}} */
-/* {{{ proto string SplFileInfo::getPathname()
- Return path and filename */
-SPL_METHOD(SplFileInfo, getPathname)
+/* {{{ Return path and filename */
+PHP_METHOD(SplFileInfo, getPathname)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char *path;
size_t path_len;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
path = spl_filesystem_object_get_pathname(intern, &path_len);
if (path != NULL) {
RETURN_STRINGL(path, path_len);
} else {
- RETURN_FALSE;
+ RETURN_EMPTY_STRING();
}
}
/* }}} */
-/* {{{ proto string FilesystemIterator::key()
- Return getPathname() or getFilename() depending on flags */
-SPL_METHOD(FilesystemIterator, key)
+/* {{{ Return getPathname() or getFilename() depending on flags */
+PHP_METHOD(FilesystemIterator, key)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (SPL_FILE_DIR_KEY(intern, SPL_FILE_DIR_KEY_AS_FILENAME)) {
RETURN_STRING(intern->u.dir.entry.d_name);
} else {
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ RETURN_THROWS();
+ }
RETURN_STRINGL(intern->file_name, intern->file_name_len);
}
}
/* }}} */
-/* {{{ proto string FilesystemIterator::current()
- Return getFilename(), getFileInfo() or $this depending on flags */
-SPL_METHOD(FilesystemIterator, current)
+/* {{{ Return getFilename(), getFileInfo() or $this depending on flags */
+PHP_METHOD(FilesystemIterator, current)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (SPL_FILE_DIR_CURRENT(intern, SPL_FILE_DIR_CURRENT_AS_PATHNAME)) {
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ RETURN_THROWS();
+ }
RETURN_STRINGL(intern->file_name, intern->file_name_len);
} else if (SPL_FILE_DIR_CURRENT(intern, SPL_FILE_DIR_CURRENT_AS_FILEINFO)) {
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ RETURN_THROWS();
+ }
spl_filesystem_object_create_type(0, intern, SPL_FS_INFO, NULL, return_value);
} else {
- ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
- Z_ADDREF_P(return_value);
- /*RETURN_STRING(intern->u.dir.entry.d_name, 1);*/
+ RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
}
}
/* }}} */
-/* {{{ proto bool DirectoryIterator::isDot()
- Returns true if current entry is '.' or '..' */
-SPL_METHOD(DirectoryIterator, isDot)
+/* {{{ Returns true if current entry is '.' or '..' */
+PHP_METHOD(DirectoryIterator, isDot)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(spl_filesystem_is_dot(intern->u.dir.entry.d_name));
}
/* }}} */
-/* {{{ proto SplFileInfo::__construct(string file_name)
- Cronstructs a new SplFileInfo from a path. */
+/* {{{ Cronstructs a new SplFileInfo from a path. */
/* When the constructor gets called the object is already created
by the engine, so we must only call 'additional' initializations.
*/
-SPL_METHOD(SplFileInfo, __construct)
+PHP_METHOD(SplFileInfo, __construct)
{
spl_filesystem_object *intern;
char *path;
size_t len;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "p", &path, &len) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "p", &path, &len) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
@@ -1148,99 +1148,84 @@ SPL_METHOD(SplFileInfo, __construct)
/* {{{ FileInfoFunction */
#define FileInfoFunction(func_name, func_num) \
-SPL_METHOD(SplFileInfo, func_name) \
+PHP_METHOD(SplFileInfo, func_name) \
{ \
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS); \
zend_error_handling error_handling; \
if (zend_parse_parameters_none() == FAILURE) { \
- return; \
+ RETURN_THROWS(); \
+ } \
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) { \
+ RETURN_THROWS(); \
} \
- \
zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);\
- spl_filesystem_object_get_file_name(intern); \
php_stat(intern->file_name, intern->file_name_len, func_num, return_value); \
zend_restore_error_handling(&error_handling); \
}
/* }}} */
-/* {{{ proto int SplFileInfo::getPerms()
- Get file permissions */
+/* {{{ Get file permissions */
FileInfoFunction(getPerms, FS_PERMS)
/* }}} */
-/* {{{ proto int SplFileInfo::getInode()
- Get file inode */
+/* {{{ Get file inode */
FileInfoFunction(getInode, FS_INODE)
/* }}} */
-/* {{{ proto int SplFileInfo::getSize()
- Get file size */
+/* {{{ Get file size */
FileInfoFunction(getSize, FS_SIZE)
/* }}} */
-/* {{{ proto int SplFileInfo::getOwner()
- Get file owner */
+/* {{{ Get file owner */
FileInfoFunction(getOwner, FS_OWNER)
/* }}} */
-/* {{{ proto int SplFileInfo::getGroup()
- Get file group */
+/* {{{ Get file group */
FileInfoFunction(getGroup, FS_GROUP)
/* }}} */
-/* {{{ proto int SplFileInfo::getATime()
- Get last access time of file */
+/* {{{ Get last access time of file */
FileInfoFunction(getATime, FS_ATIME)
/* }}} */
-/* {{{ proto int SplFileInfo::getMTime()
- Get last modification time of file */
+/* {{{ Get last modification time of file */
FileInfoFunction(getMTime, FS_MTIME)
/* }}} */
-/* {{{ proto int SplFileInfo::getCTime()
- Get inode modification time of file */
+/* {{{ Get inode modification time of file */
FileInfoFunction(getCTime, FS_CTIME)
/* }}} */
-/* {{{ proto string SplFileInfo::getType()
- Get file type */
+/* {{{ Get file type */
FileInfoFunction(getType, FS_TYPE)
/* }}} */
-/* {{{ proto bool SplFileInfo::isWritable()
- Returns true if file can be written */
+/* {{{ Returns true if file can be written */
FileInfoFunction(isWritable, FS_IS_W)
/* }}} */
-/* {{{ proto bool SplFileInfo::isReadable()
- Returns true if file can be read */
+/* {{{ Returns true if file can be read */
FileInfoFunction(isReadable, FS_IS_R)
/* }}} */
-/* {{{ proto bool SplFileInfo::isExecutable()
- Returns true if file is executable */
+/* {{{ Returns true if file is executable */
FileInfoFunction(isExecutable, FS_IS_X)
/* }}} */
-/* {{{ proto bool SplFileInfo::isFile()
- Returns true if file is a regular file */
+/* {{{ Returns true if file is a regular file */
FileInfoFunction(isFile, FS_IS_FILE)
/* }}} */
-/* {{{ proto bool SplFileInfo::isDir()
- Returns true if file is directory */
+/* {{{ Returns true if file is directory */
FileInfoFunction(isDir, FS_IS_DIR)
/* }}} */
-/* {{{ proto bool SplFileInfo::isLink()
- Returns true if file is symbolic link */
+/* {{{ Returns true if file is symbolic link */
FileInfoFunction(isLink, FS_IS_LINK)
/* }}} */
-/* {{{ proto string SplFileInfo::getLinkTarget()
- Return the target of a symbolic link */
-SPL_METHOD(SplFileInfo, getLinkTarget)
+/* {{{ Return the target of a symbolic link */
+PHP_METHOD(SplFileInfo, getLinkTarget)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
ssize_t ret;
@@ -1248,21 +1233,26 @@ SPL_METHOD(SplFileInfo, getLinkTarget)
zend_error_handling error_handling;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
if (intern->file_name == NULL) {
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ zend_restore_error_handling(&error_handling);
+ RETURN_THROWS();
+ }
}
-#if defined(PHP_WIN32) || HAVE_SYMLINK
+#if defined(PHP_WIN32) || defined(HAVE_SYMLINK)
if (intern->file_name == NULL) {
- php_error_docref(NULL, E_WARNING, "Empty filename");
- RETURN_FALSE;
- } else if (!IS_ABSOLUTE_PATH(intern->file_name, intern->file_name_len)) {
+ zend_value_error("Filename cannot be empty");
+ RETURN_THROWS();
+ }
+ if (!IS_ABSOLUTE_PATH(intern->file_name, intern->file_name_len)) {
char expanded_path[MAXPATHLEN];
if (!expand_filepath_with_mode(intern->file_name, expanded_path, NULL, 0, CWD_EXPAND )) {
+ zend_restore_error_handling(&error_handling);
php_error_docref(NULL, E_WARNING, "No such file or directory");
RETURN_FALSE;
}
@@ -1288,10 +1278,8 @@ SPL_METHOD(SplFileInfo, getLinkTarget)
}
/* }}} */
-#if HAVE_REALPATH || defined(ZTS)
-/* {{{ proto string SplFileInfo::getRealPath()
- Return the resolved path */
-SPL_METHOD(SplFileInfo, getRealPath)
+/* {{{ Return the resolved path */
+PHP_METHOD(SplFileInfo, getRealPath)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char buff[MAXPATHLEN];
@@ -1299,13 +1287,16 @@ SPL_METHOD(SplFileInfo, getRealPath)
zend_error_handling error_handling;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling);
if (intern->type == SPL_FS_DIR && !intern->file_name && intern->u.dir.entry.d_name[0]) {
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ zend_restore_error_handling(&error_handling);
+ RETURN_THROWS();
+ }
}
if (intern->orig_path) {
@@ -1329,11 +1320,9 @@ SPL_METHOD(SplFileInfo, getRealPath)
zend_restore_error_handling(&error_handling);
}
/* }}} */
-#endif
-/* {{{ proto SplFileObject SplFileInfo::openFile([string mode = 'r' [, bool use_include_path [, resource context]]])
- Open the current file */
-SPL_METHOD(SplFileInfo, openFile)
+/* {{{ Open the current file */
+PHP_METHOD(SplFileInfo, openFile)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
@@ -1341,121 +1330,102 @@ SPL_METHOD(SplFileInfo, openFile)
}
/* }}} */
-/* {{{ proto void SplFileInfo::setFileClass([string class_name])
- Class to use in openFile() */
-SPL_METHOD(SplFileInfo, setFileClass)
+/* {{{ Class to use in openFile() */
+PHP_METHOD(SplFileInfo, setFileClass)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_class_entry *ce = spl_ce_SplFileObject;
- zend_error_handling error_handling;
-
- zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling);
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &ce) == SUCCESS) {
- intern->file_class = ce;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &ce) == FAILURE) {
+ RETURN_THROWS();
}
- zend_restore_error_handling(&error_handling);
+ intern->file_class = ce;
}
/* }}} */
-/* {{{ proto void SplFileInfo::setInfoClass([string class_name])
- Class to use in getFileInfo(), getPathInfo() */
-SPL_METHOD(SplFileInfo, setInfoClass)
+/* {{{ Class to use in getFileInfo(), getPathInfo() */
+PHP_METHOD(SplFileInfo, setInfoClass)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_class_entry *ce = spl_ce_SplFileInfo;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling );
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &ce) == SUCCESS) {
- intern->info_class = ce;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &ce) == FAILURE) {
+ RETURN_THROWS();
}
- zend_restore_error_handling(&error_handling);
+ intern->info_class = ce;
}
/* }}} */
-/* {{{ proto SplFileInfo SplFileInfo::getFileInfo([string $class_name])
- Get/copy file info */
-SPL_METHOD(SplFileInfo, getFileInfo)
+/* {{{ Get/copy file info */
+PHP_METHOD(SplFileInfo, getFileInfo)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_class_entry *ce = intern->info_class;
- zend_error_handling error_handling;
- zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling);
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &ce) == SUCCESS) {
- spl_filesystem_object_create_type(ZEND_NUM_ARGS(), intern, SPL_FS_INFO, ce, return_value);
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C!", &ce) == FAILURE) {
+ RETURN_THROWS();
}
- zend_restore_error_handling(&error_handling);
+ spl_filesystem_object_create_type(ZEND_NUM_ARGS(), intern, SPL_FS_INFO, ce, return_value);
}
/* }}} */
-/* {{{ proto SplFileInfo SplFileInfo::getPathInfo([string $class_name])
- Get/copy file info */
-SPL_METHOD(SplFileInfo, getPathInfo)
+/* {{{ Get/copy file info */
+PHP_METHOD(SplFileInfo, getPathInfo)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_class_entry *ce = intern->info_class;
- zend_error_handling error_handling;
-
- zend_replace_error_handling(EH_THROW, spl_ce_UnexpectedValueException, &error_handling);
+ size_t path_len;
+ char *path;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C", &ce) == SUCCESS) {
- size_t path_len;
- char *path = spl_filesystem_object_get_pathname(intern, &path_len);
- if (path) {
- char *dpath = estrndup(path, path_len);
- path_len = php_dirname(dpath, path_len);
- spl_filesystem_object_create_info(intern, dpath, path_len, 1, ce, return_value);
- efree(dpath);
- }
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|C!", &ce) == FAILURE) {
+ RETURN_THROWS();
}
- zend_restore_error_handling(&error_handling);
+ path = spl_filesystem_object_get_pathname(intern, &path_len);
+ if (path) {
+ char *dpath = estrndup(path, path_len);
+ path_len = php_dirname(dpath, path_len);
+ spl_filesystem_object_create_info(intern, dpath, path_len, 1, ce, return_value);
+ efree(dpath);
+ }
}
/* }}} */
-/* {{{ proto void SplFileInfo::__debugInfo() */
-SPL_METHOD(SplFileInfo, __debugInfo)
+/* {{{ */
+PHP_METHOD(SplFileInfo, __debugInfo)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- RETURN_ARR(spl_filesystem_object_get_debug_info(getThis()));
+ RETURN_ARR(spl_filesystem_object_get_debug_info(Z_OBJ_P(ZEND_THIS)));
} /* }}} */
-/* {{{ proto SplFileInfo::_bad_state_ex(void) */
-SPL_METHOD(SplFileInfo, _bad_state_ex)
+/* {{{ */
+PHP_METHOD(SplFileInfo, _bad_state_ex)
{
- zend_throw_exception_ex(spl_ce_LogicException, 0,
- "The parent constructor was not called: the object is in an "
- "invalid state ");
+ zend_throw_error(NULL, "The parent constructor was not called: the object is in an invalid state");
}
/* }}} */
-/* {{{ proto FilesystemIterator::__construct(string path [, int flags])
- Cronstructs a new dir iterator from a path. */
-SPL_METHOD(FilesystemIterator, __construct)
+/* {{{ Cronstructs a new dir iterator from a path. */
+PHP_METHOD(FilesystemIterator, __construct)
{
spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIT_CTOR_FLAGS | SPL_FILE_DIR_SKIPDOTS);
}
/* }}} */
-/* {{{ proto void FilesystemIterator::rewind()
- Rewind dir back to the start */
-SPL_METHOD(FilesystemIterator, rewind)
+/* {{{ Rewind dir back to the start */
+PHP_METHOD(FilesystemIterator, rewind)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
int skip_dots = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_SKIPDOTS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern->u.dir.index = 0;
@@ -1468,48 +1438,47 @@ SPL_METHOD(FilesystemIterator, rewind)
}
/* }}} */
-/* {{{ proto int FilesystemIterator::getFlags()
- Get handling flags */
-SPL_METHOD(FilesystemIterator, getFlags)
+/* {{{ Get handling flags */
+PHP_METHOD(FilesystemIterator, getFlags)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->flags & (SPL_FILE_DIR_KEY_MODE_MASK | SPL_FILE_DIR_CURRENT_MODE_MASK | SPL_FILE_DIR_OTHERS_MASK));
} /* }}} */
-/* {{{ proto void FilesystemIterator::setFlags(long $flags)
- Set handling flags */
-SPL_METHOD(FilesystemIterator, setFlags)
+/* {{{ Set handling flags */
+PHP_METHOD(FilesystemIterator, setFlags)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_long flags;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern->flags &= ~(SPL_FILE_DIR_KEY_MODE_MASK|SPL_FILE_DIR_CURRENT_MODE_MASK|SPL_FILE_DIR_OTHERS_MASK);
intern->flags |= ((SPL_FILE_DIR_KEY_MODE_MASK|SPL_FILE_DIR_CURRENT_MODE_MASK|SPL_FILE_DIR_OTHERS_MASK) & flags);
} /* }}} */
-/* {{{ proto bool RecursiveDirectoryIterator::hasChildren([bool $allow_links = false])
- Returns whether current entry is a directory and not '.' or '..' */
-SPL_METHOD(RecursiveDirectoryIterator, hasChildren)
+/* {{{ Returns whether current entry is a directory and not '.' or '..' */
+PHP_METHOD(RecursiveDirectoryIterator, hasChildren)
{
zend_bool allow_links = 0;
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|b", &allow_links) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (spl_filesystem_is_invalid_or_dot(intern->u.dir.entry.d_name)) {
RETURN_FALSE;
} else {
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ RETURN_THROWS();
+ }
if (!allow_links && !(intern->flags & SPL_FILE_DIR_FOLLOW_SYMLINKS)) {
php_stat(intern->file_name, intern->file_name_len, FS_IS_LINK, return_value);
if (zend_is_true(return_value)) {
@@ -1521,9 +1490,8 @@ SPL_METHOD(RecursiveDirectoryIterator, hasChildren)
}
/* }}} */
-/* {{{ proto RecursiveDirectoryIterator DirectoryIterator::getChildren()
- Returns an iterator for the current entry if it is a directory */
-SPL_METHOD(RecursiveDirectoryIterator, getChildren)
+/* {{{ Returns an iterator for the current entry if it is a directory */
+PHP_METHOD(RecursiveDirectoryIterator, getChildren)
{
zval zpath, zflags;
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
@@ -1531,10 +1499,12 @@ SPL_METHOD(RecursiveDirectoryIterator, getChildren)
char slash = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_UNIXPATHS) ? '/' : DEFAULT_SLASH;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- spl_filesystem_object_get_file_name(intern);
+ if (spl_filesystem_object_get_file_name(intern) != SUCCESS) {
+ RETURN_THROWS();
+ }
ZVAL_LONG(&zflags, intern->flags);
ZVAL_STRINGL(&zpath, intern->file_name, intern->file_name_len);
@@ -1556,14 +1526,13 @@ SPL_METHOD(RecursiveDirectoryIterator, getChildren)
}
/* }}} */
-/* {{{ proto void RecursiveDirectoryIterator::getSubPath()
- Get sub path */
-SPL_METHOD(RecursiveDirectoryIterator, getSubPath)
+/* {{{ Get sub path */
+PHP_METHOD(RecursiveDirectoryIterator, getSubPath)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (intern->u.dir.sub_path) {
@@ -1574,15 +1543,14 @@ SPL_METHOD(RecursiveDirectoryIterator, getSubPath)
}
/* }}} */
-/* {{{ proto void RecursiveDirectoryIterator::getSubPathname()
- Get sub path and file name */
-SPL_METHOD(RecursiveDirectoryIterator, getSubPathname)
+/* {{{ Get sub path and file name */
+PHP_METHOD(RecursiveDirectoryIterator, getSubPathname)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char slash = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_UNIXPATHS) ? '/' : DEFAULT_SLASH;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (intern->u.dir.sub_path) {
@@ -1593,37 +1561,35 @@ SPL_METHOD(RecursiveDirectoryIterator, getSubPathname)
}
/* }}} */
-/* {{{ proto RecursiveDirectoryIterator::__construct(string path [, int flags])
- Cronstructs a new dir iterator from a path. */
-SPL_METHOD(RecursiveDirectoryIterator, __construct)
+/* {{{ Cronstructs a new dir iterator from a path. */
+PHP_METHOD(RecursiveDirectoryIterator, __construct)
{
spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIT_CTOR_FLAGS);
}
/* }}} */
#ifdef HAVE_GLOB
-/* {{{ proto GlobIterator::__construct(string path [, int flags])
- Cronstructs a new dir iterator from a glob expression (no glob:// needed). */
-SPL_METHOD(GlobIterator, __construct)
+/* {{{ Cronstructs a new dir iterator from a glob expression (no glob:// needed). */
+PHP_METHOD(GlobIterator, __construct)
{
spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIT_CTOR_FLAGS|DIT_CTOR_GLOB);
}
/* }}} */
-/* {{{ proto int GlobIterator::count()
- Return the number of directories and files found by globbing */
-SPL_METHOD(GlobIterator, count)
+/* {{{ Return the number of directories and files found by globbing */
+PHP_METHOD(GlobIterator, count)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (intern->u.dir.dirp && php_stream_is(intern->u.dir.dirp ,&php_glob_stream_ops)) {
RETURN_LONG(php_glob_stream_get_count(intern->u.dir.dirp, NULL));
} else {
/* should not happen */
+ // TODO ZEND_ASSERT ?
php_error_docref(NULL, E_ERROR, "GlobIterator lost glob state");
}
}
@@ -1646,7 +1612,8 @@ static const zend_object_iterator_funcs spl_filesystem_dir_it_funcs = {
spl_filesystem_dir_it_current_key,
spl_filesystem_dir_it_move_forward,
spl_filesystem_dir_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
};
/* }}} */
@@ -1657,13 +1624,12 @@ zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval
spl_filesystem_object *dir_object;
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
dir_object = Z_SPLFILESYSTEM_P(object);
iterator = spl_filesystem_object_to_iterator(dir_object);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &spl_filesystem_dir_it_funcs;
/* ->current must be initialized; rewind doesn't set it and valid
* doesn't check whether it's set */
@@ -1768,13 +1734,17 @@ static zval *spl_filesystem_tree_it_current_data(zend_object_iterator *iter)
if (SPL_FILE_DIR_CURRENT(object, SPL_FILE_DIR_CURRENT_AS_PATHNAME)) {
if (Z_ISUNDEF(iterator->current)) {
- spl_filesystem_object_get_file_name(object);
+ if (spl_filesystem_object_get_file_name(object) != SUCCESS) {
+ return NULL;
+ }
ZVAL_STRINGL(&iterator->current, object->file_name, object->file_name_len);
}
return &iterator->current;
} else if (SPL_FILE_DIR_CURRENT(object, SPL_FILE_DIR_CURRENT_AS_FILEINFO)) {
if (Z_ISUNDEF(iterator->current)) {
- spl_filesystem_object_get_file_name(object);
+ if (spl_filesystem_object_get_file_name(object) != SUCCESS) {
+ return NULL;
+ }
spl_filesystem_object_create_type(0, object, SPL_FS_INFO, NULL, &iterator->current);
}
return &iterator->current;
@@ -1792,7 +1762,9 @@ static void spl_filesystem_tree_it_current_key(zend_object_iterator *iter, zval
if (SPL_FILE_DIR_KEY(object, SPL_FILE_DIR_KEY_AS_FILENAME)) {
ZVAL_STRING(key, object->u.dir.entry.d_name);
} else {
- spl_filesystem_object_get_file_name(object);
+ if (spl_filesystem_object_get_file_name(object) != SUCCESS) {
+ return;
+ }
ZVAL_STRINGL(key, object->file_name, object->file_name_len);
}
}
@@ -1847,7 +1819,8 @@ static const zend_object_iterator_funcs spl_filesystem_tree_it_funcs = {
spl_filesystem_tree_it_current_key,
spl_filesystem_tree_it_move_forward,
spl_filesystem_tree_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
};
/* }}} */
@@ -1858,14 +1831,13 @@ zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zva
spl_filesystem_object *dir_object;
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
dir_object = Z_SPLFILESYSTEM_P(object);
iterator = spl_filesystem_object_to_iterator(dir_object);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &spl_filesystem_tree_it_funcs;
return &iterator->intern;
@@ -1873,12 +1845,12 @@ zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zva
/* }}} */
/* {{{ spl_filesystem_object_cast */
-static int spl_filesystem_object_cast(zval *readobj, zval *writeobj, int type)
+static int spl_filesystem_object_cast(zend_object *readobj, zval *writeobj, int type)
{
- spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(readobj);
+ spl_filesystem_object *intern = spl_filesystem_from_obj(readobj);
if (type == IS_STRING) {
- if (Z_OBJCE_P(readobj)->__tostring) {
+ if (readobj->ce->__tostring) {
return zend_std_cast_object_tostring(readobj, writeobj, type);
}
@@ -1900,136 +1872,6 @@ static int spl_filesystem_object_cast(zval *readobj, zval *writeobj, int type)
}
/* }}} */
-/* {{{ declare method parameters */
-/* supply a name and default to call by parameter */
-ZEND_BEGIN_ARG_INFO(arginfo_info___construct, 0)
- ZEND_ARG_INFO(0, file_name)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_info_openFile, 0, 0, 0)
- ZEND_ARG_INFO(0, open_mode)
- ZEND_ARG_INFO(0, use_include_path)
- ZEND_ARG_INFO(0, context)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_info_optinalFileClass, 0, 0, 0)
- ZEND_ARG_INFO(0, class_name)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_optinalSuffix, 0, 0, 0)
- ZEND_ARG_INFO(0, suffix)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_splfileinfo_void, 0)
-ZEND_END_ARG_INFO()
-
-/* the method table */
-/* each method can have its own parameters and visibility */
-static const zend_function_entry spl_SplFileInfo_functions[] = {
- SPL_ME(SplFileInfo, __construct, arginfo_info___construct, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getPath, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getFilename, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getExtension, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getBasename, arginfo_optinalSuffix, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getPathname, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getPerms, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getInode, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getSize, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getOwner, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getGroup, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getATime, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getMTime, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getCTime, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getType, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, isWritable, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, isReadable, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, isExecutable, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, isFile, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, isDir, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, isLink, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getLinkTarget, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
-#if HAVE_REALPATH || defined(ZTS)
- SPL_ME(SplFileInfo, getRealPath, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
-#endif
- SPL_ME(SplFileInfo, getFileInfo, arginfo_info_optinalFileClass, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, getPathInfo, arginfo_info_optinalFileClass, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, openFile, arginfo_info_openFile, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, setFileClass, arginfo_info_optinalFileClass, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, setInfoClass, arginfo_info_optinalFileClass, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, __debugInfo, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileInfo, _bad_state_ex, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
- SPL_MA(SplFileInfo, __toString, SplFileInfo, getPathname, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO(arginfo_dir___construct, 0)
- ZEND_ARG_INFO(0, path)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_dir_it_seek, 0)
- ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO();
-
-/* the method table */
-/* each method can have its own parameters and visibility */
-static const zend_function_entry spl_DirectoryIterator_functions[] = {
- SPL_ME(DirectoryIterator, __construct, arginfo_dir___construct, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getFilename, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getExtension, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, getBasename, arginfo_optinalSuffix, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, isDot, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, rewind, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, valid, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, key, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, current, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, next, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, seek, arginfo_dir_it_seek, ZEND_ACC_PUBLIC)
- SPL_MA(DirectoryIterator, __toString, DirectoryIterator, getFilename, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_r_dir___construct, 0, 0, 1)
- ZEND_ARG_INFO(0, path)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_r_dir_hasChildren, 0, 0, 0)
- ZEND_ARG_INFO(0, allow_links)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_r_dir_setFlags, 0, 0, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_FilesystemIterator_functions[] = {
- SPL_ME(FilesystemIterator, __construct, arginfo_r_dir___construct, ZEND_ACC_PUBLIC)
- SPL_ME(FilesystemIterator, rewind, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(DirectoryIterator, next, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(FilesystemIterator, key, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(FilesystemIterator, current, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(FilesystemIterator, getFlags, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(FilesystemIterator, setFlags, arginfo_r_dir_setFlags, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_RecursiveDirectoryIterator_functions[] = {
- SPL_ME(RecursiveDirectoryIterator, __construct, arginfo_r_dir___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, hasChildren, arginfo_r_dir_hasChildren, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, getChildren, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, getSubPath, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveDirectoryIterator, getSubPathname,arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-#ifdef HAVE_GLOB
-static const zend_function_entry spl_GlobIterator_functions[] = {
- SPL_ME(GlobIterator, __construct, arginfo_r_dir___construct, ZEND_ACC_PUBLIC)
- SPL_ME(GlobIterator, count, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-#endif
-/* }}} */
-
static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent) /* {{{ */
{
char *buf;
@@ -2074,68 +1916,6 @@ static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent) /
return SUCCESS;
} /* }}} */
-static int spl_filesystem_file_call(spl_filesystem_object *intern, zend_function *func_ptr, int pass_num_args, zval *return_value, zval *arg2) /* {{{ */
-{
- zend_fcall_info fci;
- zend_fcall_info_cache fcic;
- zval *zresource_ptr = &intern->u.file.zresource, *params, retval;
- int result;
- int num_args = pass_num_args + (arg2 ? 2 : 1);
-
- if (Z_ISUNDEF_P(zresource_ptr)) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return FAILURE;
- }
-
- params = (zval*)safe_emalloc(num_args, sizeof(zval), 0);
- params[0] = *zresource_ptr;
-
- if (arg2) {
- params[1] = *arg2;
- }
-
- if (zend_get_parameters_array_ex(pass_num_args, params + (arg2 ? 2 : 1)) != SUCCESS) {
- efree(params);
- WRONG_PARAM_COUNT_WITH_RETVAL(FAILURE);
- }
-
- ZVAL_UNDEF(&retval);
-
- fci.size = sizeof(fci);
- fci.object = NULL;
- fci.retval = &retval;
- fci.param_count = num_args;
- fci.params = params;
- fci.no_separation = 1;
- ZVAL_STR(&fci.function_name, func_ptr->common.function_name);
-
- fcic.function_handler = func_ptr;
- fcic.called_scope = NULL;
- fcic.object = NULL;
-
- result = zend_call_function(&fci, &fcic);
-
- if (result == FAILURE || Z_ISUNDEF(retval)) {
- RETVAL_FALSE;
- } else {
- ZVAL_ZVAL(return_value, &retval, 0, 0);
- }
-
- efree(params);
- return result;
-} /* }}} */
-
-#define FileFunctionCall(func_name, pass_num_args, arg2) /* {{{ */ \
-{ \
- zend_function *func_ptr; \
- func_ptr = (zend_function *)zend_hash_str_find_ptr(EG(function_table), #func_name, sizeof(#func_name) - 1); \
- if (func_ptr == NULL) { \
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Internal error, function '%s' not found. Please report", #func_name); \
- return; \
- } \
- spl_filesystem_file_call(intern, func_ptr, pass_num_args, return_value, arg2); \
-} /* }}} */
-
static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char delimiter, char enclosure, int escape, zval *return_value) /* {{{ */
{
int ret = SUCCESS;
@@ -2180,7 +1960,7 @@ static int spl_filesystem_file_read_line_ex(zval * this_ptr, spl_filesystem_obje
return spl_filesystem_file_read_csv(intern, intern->u.file.delimiter, intern->u.file.enclosure, intern->u.file.escape, NULL);
} else {
zend_execute_data *execute_data = EG(current_execute_data);
- zend_call_method_with_0_params(this_ptr, Z_OBJCE_P(ZEND_THIS), &intern->u.file.func_getCurr, "getCurrentLine", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(this_ptr), Z_OBJCE_P(ZEND_THIS), &intern->u.file.func_getCurr, "getCurrentLine", &retval);
}
if (!Z_ISUNDEF(retval)) {
if (intern->u.file.current_line || !Z_ISUNDEF(intern->u.file.current_zval)) {
@@ -2252,8 +2032,8 @@ static int spl_filesystem_file_read_line(zval * this_ptr, spl_filesystem_object
static void spl_filesystem_file_rewind(zval * this_ptr, spl_filesystem_object *intern) /* {{{ */
{
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
+ if (!intern->u.file.stream) {
+ zend_throw_error(NULL, "Object not initialized");
return;
}
if (-1 == php_stream_rewind(intern->u.file.stream)) {
@@ -2267,9 +2047,8 @@ static void spl_filesystem_file_rewind(zval * this_ptr, spl_filesystem_object *i
}
} /* }}} */
-/* {{{ proto SplFileObject::__construct(string filename [, string mode = 'r' [, bool use_include_path [, resource context]]]])
- Construct a new file object */
-SPL_METHOD(SplFileObject, __construct)
+/* {{{ Construct a new file object */
+PHP_METHOD(SplFileObject, __construct)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_bool use_include_path = 0;
@@ -2281,13 +2060,13 @@ SPL_METHOD(SplFileObject, __construct)
intern->u.file.open_mode = NULL;
intern->u.file.open_mode_len = 0;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "p|sbr!",
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|sbr!",
&intern->file_name, &intern->file_name_len,
&intern->u.file.open_mode, &intern->u.file.open_mode_len,
&use_include_path, &intern->u.file.zcontext) == FAILURE) {
intern->u.file.open_mode = NULL;
intern->file_name = NULL;
- return;
+ RETURN_THROWS();
}
if (intern->u.file.open_mode == NULL) {
@@ -2307,7 +2086,7 @@ SPL_METHOD(SplFileObject, __construct)
tmp_path = estrndup(intern->u.file.stream->orig_path, tmp_path_len);
p1 = strrchr(tmp_path, '/');
-#if defined(PHP_WIN32)
+#ifdef PHP_WIN32
p2 = strrchr(tmp_path, '\\');
#else
p2 = 0;
@@ -2327,17 +2106,16 @@ SPL_METHOD(SplFileObject, __construct)
} /* }}} */
-/* {{{ proto SplTempFileObject::__construct([int max_memory])
- Construct a new temp file object */
-SPL_METHOD(SplTempFileObject, __construct)
+/* {{{ Construct a new temp file object */
+PHP_METHOD(SplTempFileObject, __construct)
{
zend_long max_memory = PHP_STREAM_MAX_MEM;
char tmp_fname[48];
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_error_handling error_handling;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|l", &max_memory) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &max_memory) == FAILURE) {
+ RETURN_THROWS();
}
if (max_memory < 0) {
@@ -2361,45 +2139,39 @@ SPL_METHOD(SplTempFileObject, __construct)
zend_restore_error_handling(&error_handling);
} /* }}} */
-/* {{{ proto void SplFileObject::rewind()
- Rewind the file and read the first line */
-SPL_METHOD(SplFileObject, rewind)
+/* {{{ Rewind the file and read the first line */
+PHP_METHOD(SplFileObject, rewind)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_filesystem_file_rewind(ZEND_THIS, intern);
} /* }}} */
-/* {{{ proto void SplFileObject::eof()
- Return whether end of file is reached */
-SPL_METHOD(SplFileObject, eof)
+/* {{{ Return whether end of file is reached */
+PHP_METHOD(SplFileObject, eof)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
RETURN_BOOL(php_stream_eof(intern->u.file.stream));
} /* }}} */
-/* {{{ proto void SplFileObject::valid()
- Return !eof() */
-SPL_METHOD(SplFileObject, valid)
+/* {{{ Return !eof() */
+PHP_METHOD(SplFileObject, valid)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (SPL_HAS_FLAG(intern->flags, SPL_FILE_OBJECT_READ_AHEAD)) {
@@ -2412,41 +2184,33 @@ SPL_METHOD(SplFileObject, valid)
}
} /* }}} */
-/* {{{ proto string SplFileObject::fgets()
- Rturn next line from file */
-SPL_METHOD(SplFileObject, fgets)
+/* {{{ Return next line from file */
+PHP_METHOD(SplFileObject, fgets)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
if (spl_filesystem_file_read(intern, 0) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
RETURN_STRINGL(intern->u.file.current_line, intern->u.file.current_line_len);
} /* }}} */
-/* {{{ proto string SplFileObject::current()
- Return current line from file */
-SPL_METHOD(SplFileObject, current)
+/* {{{ Return current line from file */
+PHP_METHOD(SplFileObject, current)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
if (!intern->u.file.current_line && Z_ISUNDEF(intern->u.file.current_zval)) {
spl_filesystem_file_read_line(ZEND_THIS, intern, 1);
@@ -2462,14 +2226,13 @@ SPL_METHOD(SplFileObject, current)
RETURN_FALSE;
} /* }}} */
-/* {{{ proto int SplFileObject::key()
- Return line number */
-SPL_METHOD(SplFileObject, key)
+/* {{{ Return line number */
+PHP_METHOD(SplFileObject, key)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* Do not read the next line to support correct counting with fgetc()
@@ -2479,14 +2242,13 @@ SPL_METHOD(SplFileObject, key)
RETURN_LONG(intern->u.file.current_line_num);
} /* }}} */
-/* {{{ proto void SplFileObject::next()
- Read next line */
-SPL_METHOD(SplFileObject, next)
+/* {{{ Read next line */
+PHP_METHOD(SplFileObject, next)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_filesystem_file_free_line(intern);
@@ -2496,96 +2258,80 @@ SPL_METHOD(SplFileObject, next)
intern->u.file.current_line_num++;
} /* }}} */
-/* {{{ proto void SplFileObject::setFlags(int flags)
- Set file handling flags */
-SPL_METHOD(SplFileObject, setFlags)
+/* {{{ Set file handling flags */
+PHP_METHOD(SplFileObject, setFlags)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &intern->flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
} /* }}} */
-/* {{{ proto int SplFileObject::getFlags()
- Get file handling flags */
-SPL_METHOD(SplFileObject, getFlags)
+/* {{{ Get file handling flags */
+PHP_METHOD(SplFileObject, getFlags)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->flags & SPL_FILE_OBJECT_MASK);
} /* }}} */
-/* {{{ proto void SplFileObject::setMaxLineLen(int max_len)
- Set maximum line length */
-SPL_METHOD(SplFileObject, setMaxLineLen)
+/* {{{ Set maximum line length */
+PHP_METHOD(SplFileObject, setMaxLineLen)
{
zend_long max_len;
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &max_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (max_len < 0) {
- zend_throw_exception_ex(spl_ce_DomainException, 0, "Maximum line length must be greater than or equal zero");
- return;
+ zend_argument_value_error(1, "must be greater than or equal to 0");
+ RETURN_THROWS();
}
intern->u.file.max_line_len = max_len;
} /* }}} */
-/* {{{ proto int SplFileObject::getMaxLineLen()
- Get maximum line length */
-SPL_METHOD(SplFileObject, getMaxLineLen)
+/* {{{ Get maximum line length */
+PHP_METHOD(SplFileObject, getMaxLineLen)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG((zend_long)intern->u.file.max_line_len);
} /* }}} */
-/* {{{ proto bool SplFileObject::hasChildren()
- Return false */
-SPL_METHOD(SplFileObject, hasChildren)
+/* {{{ Return false */
+PHP_METHOD(SplFileObject, hasChildren)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_FALSE;
} /* }}} */
-/* {{{ proto bool SplFileObject::getChildren()
- Read NULL */
-SPL_METHOD(SplFileObject, getChildren)
+/* {{{ Read NULL */
+PHP_METHOD(SplFileObject, getChildren)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* return NULL */
} /* }}} */
-/* {{{ FileFunction */
-#define FileFunction(func_name) \
-SPL_METHOD(SplFileObject, func_name) \
-{ \
- spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS); \
- FileFunctionCall(func_name, ZEND_NUM_ARGS(), NULL); \
-}
-/* }}} */
-
-/* {{{ proto array SplFileObject::fgetcsv([string delimiter [, string enclosure [, escape = '\\']]])
- Return current line as csv */
-SPL_METHOD(SplFileObject, fgetcsv)
+/* {{{ Return current line as csv */
+PHP_METHOD(SplFileObject, fgetcsv)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char delimiter = intern->u.file.delimiter, enclosure = intern->u.file.enclosure;
@@ -2595,17 +2341,14 @@ SPL_METHOD(SplFileObject, fgetcsv)
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|sss", &delim, &d_len, &enclo, &e_len, &esc, &esc_len) == SUCCESS) {
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
switch(ZEND_NUM_ARGS())
{
case 3:
if (esc_len > 1) {
- php_error_docref(NULL, E_WARNING, "escape must be empty or a single character");
- RETURN_FALSE;
+ zend_argument_value_error(3, "must be empty or a single character");
+ RETURN_THROWS();
}
if (esc_len == 0) {
escape = PHP_CSV_NO_ESCAPE;
@@ -2615,15 +2358,15 @@ SPL_METHOD(SplFileObject, fgetcsv)
/* no break */
case 2:
if (e_len != 1) {
- php_error_docref(NULL, E_WARNING, "enclosure must be a character");
- RETURN_FALSE;
+ zend_argument_value_error(2, "must be a single character");
+ RETURN_THROWS();
}
enclosure = enclo[0];
/* no break */
case 1:
if (d_len != 1) {
- php_error_docref(NULL, E_WARNING, "delimiter must be a character");
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be a single character");
+ RETURN_THROWS();
}
delimiter = delim[0];
/* no break */
@@ -2635,9 +2378,8 @@ SPL_METHOD(SplFileObject, fgetcsv)
}
/* }}} */
-/* {{{ proto int SplFileObject::fputcsv(array fields, [string delimiter [, string enclosure [, string escape]]])
- Output a field array as a CSV line */
-SPL_METHOD(SplFileObject, fputcsv)
+/* {{{ Output a field array as a CSV line */
+PHP_METHOD(SplFileObject, fputcsv)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char delimiter = intern->u.file.delimiter, enclosure = intern->u.file.enclosure;
@@ -2648,6 +2390,7 @@ SPL_METHOD(SplFileObject, fputcsv)
zval *fields = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "a|sss", &fields, &delim, &d_len, &enclo, &e_len, &esc, &esc_len) == SUCCESS) {
+
switch(ZEND_NUM_ARGS())
{
case 4:
@@ -2659,21 +2402,21 @@ SPL_METHOD(SplFileObject, fputcsv)
escape = (unsigned char) esc[0];
break;
default:
- php_error_docref(NULL, E_WARNING, "escape must be empty or a single character");
- RETURN_FALSE;
+ zend_argument_value_error(4, "must be empty or a single character");
+ RETURN_THROWS();
}
/* no break */
case 3:
if (e_len != 1) {
- php_error_docref(NULL, E_WARNING, "enclosure must be a character");
- RETURN_FALSE;
+ zend_argument_value_error(3, "must be a single character");
+ RETURN_THROWS();
}
enclosure = enclo[0];
/* no break */
case 2:
if (d_len != 1) {
- php_error_docref(NULL, E_WARNING, "delimiter must be a character");
- RETURN_FALSE;
+ zend_argument_value_error(2, "must be a single character");
+ RETURN_THROWS();
}
delimiter = delim[0];
/* no break */
@@ -2690,9 +2433,8 @@ SPL_METHOD(SplFileObject, fputcsv)
}
/* }}} */
-/* {{{ proto void SplFileObject::setCsvControl([string delimiter [, string enclosure [, string escape ]]])
- Set the delimiter, enclosure and escape character used in fgetcsv */
-SPL_METHOD(SplFileObject, setCsvControl)
+/* {{{ Set the delimiter, enclosure and escape character used in fgetcsv */
+PHP_METHOD(SplFileObject, setCsvControl)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char delimiter = ',', enclosure = '"';
@@ -2712,21 +2454,21 @@ SPL_METHOD(SplFileObject, setCsvControl)
escape = (unsigned char) esc[0];
break;
default:
- php_error_docref(NULL, E_WARNING, "escape must be empty or a single character");
- RETURN_FALSE;
+ zend_argument_value_error(3, "must be empty or a single character");
+ RETURN_THROWS();
}
/* no break */
case 2:
if (e_len != 1) {
- php_error_docref(NULL, E_WARNING, "enclosure must be a character");
- RETURN_FALSE;
+ zend_argument_value_error(2, "must be a single character");
+ RETURN_THROWS();
}
enclosure = enclo[0];
/* no break */
case 1:
if (d_len != 1) {
- php_error_docref(NULL, E_WARNING, "delimiter must be a character");
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be a single character");
+ RETURN_THROWS();
}
delimiter = delim[0];
/* no break */
@@ -2740,9 +2482,8 @@ SPL_METHOD(SplFileObject, setCsvControl)
}
/* }}} */
-/* {{{ proto array SplFileObject::getCsvControl()
- Get the delimiter, enclosure and escape character used in fgetcsv */
-SPL_METHOD(SplFileObject, getCsvControl)
+/* {{{ Get the delimiter, enclosure and escape character used in fgetcsv */
+PHP_METHOD(SplFileObject, getCsvControl)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char delimiter[2], enclosure[2], escape[2];
@@ -2766,36 +2507,40 @@ SPL_METHOD(SplFileObject, getCsvControl)
}
/* }}} */
-/* {{{ proto bool SplFileObject::flock(int operation [, int &wouldblock])
- Portable file locking */
-FileFunction(flock)
+/* {{{ Portable file locking */
+PHP_METHOD(SplFileObject, flock)
+{
+ spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
+ zval *wouldblock = NULL;
+ zend_long operation = 0;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|z", &operation, &wouldblock) == FAILURE) {
+ RETURN_THROWS();
+ }
+
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
+
+ php_flock_common(intern->u.file.stream, operation, 1, wouldblock, return_value);
+}
/* }}} */
-/* {{{ proto bool SplFileObject::fflush()
- Flush the file */
-SPL_METHOD(SplFileObject, fflush)
+/* {{{ Flush the file */
+PHP_METHOD(SplFileObject, fflush)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
RETURN_BOOL(!php_stream_flush(intern->u.file.stream));
} /* }}} */
-/* {{{ proto int SplFileObject::ftell()
- Return current file position */
-SPL_METHOD(SplFileObject, ftell)
+/* {{{ Return current file position */
+PHP_METHOD(SplFileObject, ftell)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_long ret;
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
ret = php_stream_tell(intern->u.file.stream);
@@ -2806,38 +2551,30 @@ SPL_METHOD(SplFileObject, ftell)
}
} /* }}} */
-/* {{{ proto int SplFileObject::fseek(int pos [, int whence = SEEK_SET])
- Return current file position */
-SPL_METHOD(SplFileObject, fseek)
+/* {{{ Return current file position */
+PHP_METHOD(SplFileObject, fseek)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_long pos, whence = SEEK_SET;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &pos, &whence) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
spl_filesystem_file_free_line(intern);
RETURN_LONG(php_stream_seek(intern->u.file.stream, pos, (int)whence));
} /* }}} */
-/* {{{ proto int SplFileObject::fgetc()
- Get a character form the file */
-SPL_METHOD(SplFileObject, fgetc)
+/* {{{ Get a character form the file */
+PHP_METHOD(SplFileObject, fgetc)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char buf[2];
int result;
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
spl_filesystem_file_free_line(intern);
@@ -2856,65 +2593,45 @@ SPL_METHOD(SplFileObject, fgetc)
}
} /* }}} */
-/* {{{ proto string SplFileObject::fgetss([string allowable_tags])
- Get a line from file pointer and strip HTML tags */
-SPL_METHOD(SplFileObject, fgetss)
+/* {{{ Output all remaining data from a file pointer */
+PHP_METHOD(SplFileObject, fpassthru)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
- zval arg2;
-
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
-
- if (intern->u.file.max_line_len > 0) {
- ZVAL_LONG(&arg2, intern->u.file.max_line_len);
- } else {
- ZVAL_LONG(&arg2, 1024);
- }
- spl_filesystem_file_free_line(intern);
- intern->u.file.current_line_num++;
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
- FileFunctionCall(fgetss, ZEND_NUM_ARGS(), &arg2);
+ RETURN_LONG(php_stream_passthru(intern->u.file.stream));
} /* }}} */
-/* {{{ proto int SplFileObject::fpassthru()
- Output all remaining data from a file pointer */
-SPL_METHOD(SplFileObject, fpassthru)
+/* {{{ Implements a mostly ANSI compatible fscanf() */
+PHP_METHOD(SplFileObject, fscanf)
{
+ int result, num_varargs = 0;
+ zend_string *format_str;
+ zval *varargs= NULL;
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S*", &format_str, &varargs, &num_varargs) == FAILURE) {
+ RETURN_THROWS();
}
- RETURN_LONG(php_stream_passthru(intern->u.file.stream));
-} /* }}} */
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
-/* {{{ proto bool SplFileObject::fscanf(string format [, string ...])
- Implements a mostly ANSI compatible fscanf() */
-SPL_METHOD(SplFileObject, fscanf)
-{
- spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
-
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
+ /* Get next line */
+ if (spl_filesystem_file_read(intern, 0) == FAILURE) {
+ RETURN_THROWS();
}
- spl_filesystem_file_free_line(intern);
- intern->u.file.current_line_num++;
+ result = php_sscanf_internal(intern->u.file.current_line, ZSTR_VAL(format_str), num_varargs, varargs, 0, return_value);
- FileFunctionCall(fscanf, ZEND_NUM_ARGS(), NULL);
+ if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
+ WRONG_PARAM_COUNT;
+ }
}
/* }}} */
-/* {{{ proto int|false SplFileObject::fwrite(string str [, int length])
- Binary-safe file write */
-SPL_METHOD(SplFileObject, fwrite)
+/* {{{ Binary-safe file write */
+PHP_METHOD(SplFileObject, fwrite)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
char *str;
@@ -2923,13 +2640,10 @@ SPL_METHOD(SplFileObject, fwrite)
ssize_t written;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &str, &str_len, &length) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
if (ZEND_NUM_ARGS() > 1) {
if (length >= 0) {
@@ -2950,24 +2664,21 @@ SPL_METHOD(SplFileObject, fwrite)
RETURN_LONG(written);
} /* }}} */
-SPL_METHOD(SplFileObject, fread)
+PHP_METHOD(SplFileObject, fread)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_long length = 0;
zend_string *str;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &length) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
if (length <= 0) {
- php_error_docref(NULL, E_WARNING, "Length parameter must be greater than 0");
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be greater than 0");
+ RETURN_THROWS();
}
str = php_stream_read_to_str(intern->u.file.stream, length);
@@ -2977,182 +2688,75 @@ SPL_METHOD(SplFileObject, fread)
RETURN_STR(str);
}
-/* {{{ proto bool SplFileObject::fstat()
- Stat() on a filehandle */
-FileFunction(fstat)
+/* {{{ Stat() on a filehandle */
+PHP_METHOD(SplFileObject, fstat)
+{
+ spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
+
+ php_fstat(intern->u.file.stream, return_value);
+}
/* }}} */
-/* {{{ proto bool SplFileObject::ftruncate(int size)
- Truncate file to 'size' length */
-SPL_METHOD(SplFileObject, ftruncate)
+/* {{{ Truncate file to 'size' length */
+PHP_METHOD(SplFileObject, ftruncate)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
zend_long size;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &size) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
- }
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
if (!php_stream_truncate_supported(intern->u.file.stream)) {
zend_throw_exception_ex(spl_ce_LogicException, 0, "Can't truncate file %s", intern->file_name);
- RETURN_FALSE;
+ RETURN_THROWS();
}
RETURN_BOOL(0 == php_stream_truncate_set_size(intern->u.file.stream, size));
} /* }}} */
-/* {{{ proto void SplFileObject::seek(int line_pos)
- Seek to specified line */
-SPL_METHOD(SplFileObject, seek)
+/* {{{ Seek to specified line */
+PHP_METHOD(SplFileObject, seek)
{
spl_filesystem_object *intern = Z_SPLFILESYSTEM_P(ZEND_THIS);
- zend_long line_pos;
+ zend_long line_pos, i;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &line_pos) == FAILURE) {
- return;
- }
- if(!intern->u.file.stream) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0, "Object not initialized");
- return;
+ RETURN_THROWS();
}
+ CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern);
+
if (line_pos < 0) {
- zend_throw_exception_ex(spl_ce_LogicException, 0, "Can't seek file %s to negative line " ZEND_LONG_FMT, intern->file_name, line_pos);
- RETURN_FALSE;
+ zend_argument_value_error(1, "must be greater than or equal to 0");
+ RETURN_THROWS();
}
spl_filesystem_file_rewind(ZEND_THIS, intern);
- while(intern->u.file.current_line_num < line_pos) {
+ for (i = 0; i < line_pos; i++) {
if (spl_filesystem_file_read_line(ZEND_THIS, intern, 1) == FAILURE) {
- break;
+ return;
}
}
+ if (line_pos > 0) {
+ intern->u.file.current_line_num++;
+ spl_filesystem_file_free_line(intern);
+ }
} /* }}} */
-/* {{{ Function/Class/Method definitions */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object___construct, 0, 0, 1)
- ZEND_ARG_INFO(0, file_name)
- ZEND_ARG_INFO(0, open_mode)
- ZEND_ARG_INFO(0, use_include_path)
- ZEND_ARG_INFO(0, context)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_file_object_setFlags, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_file_object_setMaxLineLen, 0)
- ZEND_ARG_INFO(0, max_len)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fgetcsv, 0, 0, 0)
- ZEND_ARG_INFO(0, delimiter)
- ZEND_ARG_INFO(0, enclosure)
- ZEND_ARG_INFO(0, escape)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fputcsv, 0, 0, 1)
- ZEND_ARG_INFO(0, fields)
- ZEND_ARG_INFO(0, delimiter)
- ZEND_ARG_INFO(0, enclosure)
- ZEND_ARG_INFO(0, escape)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_flock, 0, 0, 1)
- ZEND_ARG_INFO(0, operation)
- ZEND_ARG_INFO(1, wouldblock)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fseek, 0, 0, 1)
- ZEND_ARG_INFO(0, pos)
- ZEND_ARG_INFO(0, whence)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fgetss, 0, 0, 0)
- ZEND_ARG_INFO(0, allowable_tags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fscanf, 0, 0, 1)
- ZEND_ARG_INFO(0, format)
- ZEND_ARG_VARIADIC_INFO(1, vars)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fwrite, 0, 0, 1)
- ZEND_ARG_INFO(0, str)
- ZEND_ARG_INFO(0, length)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_fread, 0, 0, 1)
- ZEND_ARG_INFO(0, length)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_ftruncate, 0, 0, 1)
- ZEND_ARG_INFO(0, size)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object_seek, 0, 0, 1)
- ZEND_ARG_INFO(0, line_pos)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_SplFileObject_functions[] = {
- SPL_ME(SplFileObject, __construct, arginfo_file_object___construct, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, rewind, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, eof, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, valid, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fgets, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fgetcsv, arginfo_file_object_fgetcsv, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fputcsv, arginfo_file_object_fputcsv, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, setCsvControl, arginfo_file_object_fgetcsv, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, getCsvControl, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, flock, arginfo_file_object_flock, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fflush, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, ftell, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fseek, arginfo_file_object_fseek, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fgetc, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fpassthru, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fgetss, arginfo_file_object_fgetss, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fscanf, arginfo_file_object_fscanf, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fwrite, arginfo_file_object_fwrite, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fread, arginfo_file_object_fread, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, fstat, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, ftruncate, arginfo_file_object_ftruncate, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, current, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, key, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, next, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, setFlags, arginfo_file_object_setFlags, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, getFlags, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, setMaxLineLen, arginfo_file_object_setMaxLineLen, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, getMaxLineLen, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, hasChildren, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, getChildren, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFileObject, seek, arginfo_file_object_seek, ZEND_ACC_PUBLIC)
- /* mappings */
- SPL_MA(SplFileObject, getCurrentLine, SplFileObject, fgets, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- SPL_MA(SplFileObject, __toString, SplFileObject, fgets, arginfo_splfileinfo_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_temp_file_object___construct, 0, 0, 0)
- ZEND_ARG_INFO(0, max_memory)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_SplTempFileObject_functions[] = {
- SPL_ME(SplTempFileObject, __construct, arginfo_temp_file_object___construct, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-/* }}} */
-
-/* {{{ PHP_MINIT_FUNCTION(spl_directory)
- */
+/* {{{ PHP_MINIT_FUNCTION(spl_directory) */
PHP_MINIT_FUNCTION(spl_directory)
{
- REGISTER_SPL_STD_CLASS_EX(SplFileInfo, spl_filesystem_object_new, spl_SplFileInfo_functions);
+ REGISTER_SPL_STD_CLASS_EX(SplFileInfo, spl_filesystem_object_new, class_SplFileInfo_methods);
memcpy(&spl_filesystem_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
spl_filesystem_object_handlers.offset = XtOffsetOf(spl_filesystem_object, std);
spl_filesystem_object_handlers.clone_obj = spl_filesystem_object_clone;
@@ -3161,15 +2765,16 @@ PHP_MINIT_FUNCTION(spl_directory)
spl_filesystem_object_handlers.free_obj = spl_filesystem_object_free_storage;
spl_ce_SplFileInfo->serialize = zend_class_serialize_deny;
spl_ce_SplFileInfo->unserialize = zend_class_unserialize_deny;
+ REGISTER_SPL_IMPLEMENTS(SplFileInfo, Stringable);
- REGISTER_SPL_SUB_CLASS_EX(DirectoryIterator, SplFileInfo, spl_filesystem_object_new, spl_DirectoryIterator_functions);
+ REGISTER_SPL_SUB_CLASS_EX(DirectoryIterator, SplFileInfo, spl_filesystem_object_new, class_DirectoryIterator_methods);
zend_class_implements(spl_ce_DirectoryIterator, 1, zend_ce_iterator);
REGISTER_SPL_IMPLEMENTS(DirectoryIterator, SeekableIterator);
spl_ce_DirectoryIterator->get_iterator = spl_filesystem_dir_get_iterator;
- REGISTER_SPL_SUB_CLASS_EX(FilesystemIterator, DirectoryIterator, spl_filesystem_object_new, spl_FilesystemIterator_functions);
+ REGISTER_SPL_SUB_CLASS_EX(FilesystemIterator, DirectoryIterator, spl_filesystem_object_new, class_FilesystemIterator_methods);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_MODE_MASK", SPL_FILE_DIR_CURRENT_MODE_MASK);
REGISTER_SPL_CLASS_CONST_LONG(FilesystemIterator, "CURRENT_AS_PATHNAME", SPL_FILE_DIR_CURRENT_AS_PATHNAME);
@@ -3186,7 +2791,7 @@ PHP_MINIT_FUNCTION(spl_directory)
spl_ce_FilesystemIterator->get_iterator = spl_filesystem_tree_get_iterator;
- REGISTER_SPL_SUB_CLASS_EX(RecursiveDirectoryIterator, FilesystemIterator, spl_filesystem_object_new, spl_RecursiveDirectoryIterator_functions);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveDirectoryIterator, FilesystemIterator, spl_filesystem_object_new, class_RecursiveDirectoryIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveDirectoryIterator, RecursiveIterator);
memcpy(&spl_filesystem_object_check_handlers, &spl_filesystem_object_handlers, sizeof(zend_object_handlers));
@@ -3194,11 +2799,11 @@ PHP_MINIT_FUNCTION(spl_directory)
spl_filesystem_object_check_handlers.get_method = spl_filesystem_object_get_method_check;
#ifdef HAVE_GLOB
- REGISTER_SPL_SUB_CLASS_EX(GlobIterator, FilesystemIterator, spl_filesystem_object_new_check, spl_GlobIterator_functions);
+ REGISTER_SPL_SUB_CLASS_EX(GlobIterator, FilesystemIterator, spl_filesystem_object_new_check, class_GlobIterator_methods);
REGISTER_SPL_IMPLEMENTS(GlobIterator, Countable);
#endif
- REGISTER_SPL_SUB_CLASS_EX(SplFileObject, SplFileInfo, spl_filesystem_object_new_check, spl_SplFileObject_functions);
+ REGISTER_SPL_SUB_CLASS_EX(SplFileObject, SplFileInfo, spl_filesystem_object_new_check, class_SplFileObject_methods);
REGISTER_SPL_IMPLEMENTS(SplFileObject, RecursiveIterator);
REGISTER_SPL_IMPLEMENTS(SplFileObject, SeekableIterator);
@@ -3207,7 +2812,7 @@ PHP_MINIT_FUNCTION(spl_directory)
REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, "SKIP_EMPTY", SPL_FILE_OBJECT_SKIP_EMPTY);
REGISTER_SPL_CLASS_CONST_LONG(SplFileObject, "READ_CSV", SPL_FILE_OBJECT_READ_CSV);
- REGISTER_SPL_SUB_CLASS_EX(SplTempFileObject, SplFileObject, spl_filesystem_object_new_check, spl_SplTempFileObject_functions);
+ REGISTER_SPL_SUB_CLASS_EX(SplTempFileObject, SplFileObject, spl_filesystem_object_new_check, class_SplTempFileObject_methods);
return SUCCESS;
}
/* }}} */
diff --git a/ext/spl/spl_directory.h b/ext/spl/spl_directory.h
index 90e8945a16..88fbd0f052 100644
--- a/ext/spl/spl_directory.h
+++ b/ext/spl/spl_directory.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_directory.stub.php b/ext/spl/spl_directory.stub.php
new file mode 100644
index 0000000000..681547e55f
--- /dev/null
+++ b/ext/spl/spl_directory.stub.php
@@ -0,0 +1,296 @@
+<?php
+
+/** @generate-function-entries */
+
+class SplFileInfo
+{
+ public function __construct(string $filename) {}
+
+ /** @return string */
+ public function getPath() {}
+
+ /** @return string */
+ public function getFilename() {}
+
+ /** @return string */
+ public function getExtension() {}
+
+ /** @return string */
+ public function getBasename(string $suffix = "") {}
+
+ /** @return string */
+ public function getPathname() {}
+
+ /** @return int|false */
+ public function getPerms() {}
+
+ /** @return int|false */
+ public function getInode() {}
+
+ /** @return int|false */
+ public function getSize() {}
+
+ /** @return int|false */
+ public function getOwner() {}
+
+ /** @return int|false */
+ public function getGroup() {}
+
+ /** @return int|false */
+ public function getATime() {}
+
+ /** @return int|false */
+ public function getMTime() {}
+
+ /** @return int|false */
+ public function getCTime() {}
+
+ /** @return string|false */
+ public function getType() {}
+
+ /** @return bool */
+ public function isWritable() {}
+
+ /** @return bool */
+ public function isReadable() {}
+
+ /** @return bool */
+ public function isExecutable() {}
+
+ /** @return bool */
+ public function isFile() {}
+
+ /** @return bool */
+ public function isDir() {}
+
+ /** @return bool */
+ public function isLink() {}
+
+ /** @return string|false */
+ public function getLinkTarget() {}
+
+ /** @return string|false */
+ public function getRealPath() {}
+
+ /** @return SplFileInfo */
+ public function getFileInfo(?string $class = null) {}
+
+ /** @return SplFileInfo|null */
+ public function getPathInfo(?string $class = null) {}
+
+ /**
+ * @param resource|null $context
+ * @return SplFileObject
+ */
+ public function openFile(string $mode = "r", bool $useIncludePath = false, $context = null) {}
+
+ /** @return void */
+ public function setFileClass(string $class = SplFileObject::class) {}
+
+ /** @return void */
+ public function setInfoClass(string $class = SplFileInfo::class) {}
+
+ /** @implementation-alias SplFileInfo::getPathname */
+ public function __toString(): string {}
+
+ /** @return array */
+ public function __debugInfo() {}
+
+ /** @return void */
+ final public function _bad_state_ex() {}
+}
+
+class DirectoryIterator extends SplFileInfo implements SeekableIterator
+{
+ public function __construct(string $directory) {}
+
+ /** @return string */
+ public function getFilename() {}
+
+ /** @return string */
+ public function getExtension() {}
+
+ /** @return string */
+ public function getBasename(string $suffix = "") {}
+
+ /** @return bool */
+ public function isDot() {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return int|false */
+ public function key() {}
+
+ /** @return DirectoryIterator */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return void */
+ public function seek(int $offset) {}
+
+ /** @implementation-alias DirectoryIterator::getFilename */
+ public function __toString(): string {}
+}
+
+class FilesystemIterator extends DirectoryIterator
+{
+ public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return string */
+ public function key() {}
+
+ /** @return string|SplFileInfo|self */
+ public function current() {}
+
+ /** @return int */
+ public function getFlags() {}
+
+ /** @return void */
+ public function setFlags(int $flags) {}
+}
+
+class RecursiveDirectoryIterator extends FilesystemIterator implements RecursiveIterator
+{
+ public function __construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {}
+
+ /** @return bool */
+ public function hasChildren(bool $allowLinks = false) {}
+
+ /** @return RecursiveDirectoryIterator */
+ public function getChildren() {}
+
+ /** @return string */
+ public function getSubPath() {}
+
+ /** @return string */
+ public function getSubPathname() {}
+}
+
+#ifdef HAVE_GLOB
+class GlobIterator extends FilesystemIterator implements Countable
+{
+ public function __construct(string $pattern, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO) {}
+
+ /** @return int */
+ public function count() {}
+}
+#endif
+
+class SplFileObject extends SplFileInfo implements RecursiveIterator, SeekableIterator
+{
+ /** @param resource|null $context */
+ public function __construct(string $filename, string $mode = "r", bool $useIncludePath = false, $context = null) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function eof() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return string */
+ public function fgets() {}
+
+ /** @return string|false */
+ public function fread(int $length) {}
+
+ /** @return array|false */
+ public function fgetcsv(string $separator = ",", string $enclosure = "\"", string $escape = "\\") {}
+
+ /** @return int|false */
+ public function fputcsv(array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\") {}
+
+ /** @return bool|null */
+ public function setCsvControl(string $separator = ",", string $enclosure = "\"", string $escape = "\\") {}
+
+ /** @return array */
+ public function getCsvControl() {}
+
+ /**
+ * @param int $wouldBlock
+ * @return bool
+ */
+ public function flock(int $operation, &$wouldBlock = null) {}
+
+ /** @return bool */
+ public function fflush() {}
+
+ /** @return int|false */
+ public function ftell() {}
+
+ /** @return int */
+ public function fseek(int $offset, int $whence = SEEK_SET) {}
+
+ /** @return string|false */
+ public function fgetc() {}
+
+ /** @return int */
+ public function fpassthru() {}
+
+ /** @return array|int|false|null */
+ public function fscanf(string $format, mixed &...$vars) {}
+
+ /** @return int|false */
+ public function fwrite(string $data, int $length = 0) {}
+
+ /** @return array */
+ public function fstat() {}
+
+ /** @return bool */
+ public function ftruncate(int $size) {}
+
+ /** @return string|array|false */
+ public function current() {}
+
+ /** @return int */
+ public function key() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return void */
+ public function setFlags(int $flags) {}
+
+ /** @return int */
+ public function getFlags() {}
+
+ /** @return void */
+ public function setMaxLineLen(int $maxLength) {}
+
+ /** @return int */
+ public function getMaxLineLen() {}
+
+ /** @return bool */
+ public function hasChildren() {}
+
+ /** @return null */
+ public function getChildren() {}
+
+ /** @return void */
+ public function seek(int $line) {}
+
+ /**
+ * @return string
+ * @alias SplFileObject::fgets
+ */
+ public function getCurrentLine() {}
+
+ /** @implementation-alias SplFileObject::fgets */
+ public function __toString(): string {}
+}
+
+class SplTempFileObject extends SplFileObject
+{
+ public function __construct(int $maxMemory = 2 * 1024 * 1024) {}
+}
diff --git a/ext/spl/spl_directory_arginfo.h b/ext/spl/spl_directory_arginfo.h
new file mode 100644
index 0000000000..a16c4d45d0
--- /dev/null
+++ b/ext/spl/spl_directory_arginfo.h
@@ -0,0 +1,473 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: 285af54cf7b3f3ef3f0d673b248c5afbd4cc440e */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getPath, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileInfo_getFilename arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getExtension arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getBasename, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, suffix, IS_STRING, 0, "\"\"")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileInfo_getPathname arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getPerms arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getInode arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getSize arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getOwner arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getGroup arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getATime arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getMTime arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getCTime arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getType arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_isWritable arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_isReadable arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_isExecutable arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_isFile arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_isDir arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_isLink arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getLinkTarget arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo_getRealPath arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_getFileInfo, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileInfo_getPathInfo arginfo_class_SplFileInfo_getFileInfo
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_openFile, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"r\"")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false")
+ ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_setFileClass, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "SplFileObject::class")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileInfo_setInfoClass, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 0, "SplFileInfo::class")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SplFileInfo___toString, 0, 0, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileInfo___debugInfo arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileInfo__bad_state_ex arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_DirectoryIterator_getFilename arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_getExtension arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_getBasename arginfo_class_SplFileInfo_getBasename
+
+#define arginfo_class_DirectoryIterator_isDot arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_rewind arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_valid arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_key arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_current arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_DirectoryIterator_next arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DirectoryIterator_seek, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_DirectoryIterator___toString arginfo_class_SplFileInfo___toString
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilesystemIterator___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_FilesystemIterator_rewind arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_FilesystemIterator_key arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_FilesystemIterator_current arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_FilesystemIterator_getFlags arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilesystemIterator_setFlags, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveDirectoryIterator___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveDirectoryIterator_hasChildren, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allowLinks, _IS_BOOL, 0, "false")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveDirectoryIterator_getChildren arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_RecursiveDirectoryIterator_getSubPath arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_RecursiveDirectoryIterator_getSubPathname arginfo_class_SplFileInfo_getPath
+
+#if defined(HAVE_GLOB)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_GlobIterator___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO")
+ZEND_END_ARG_INFO()
+#endif
+
+#if defined(HAVE_GLOB)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_GlobIterator_count, 0, 0, 0)
+ZEND_END_ARG_INFO()
+#endif
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject___construct, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"r\"")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, useIncludePath, _IS_BOOL, 0, "false")
+ ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, context, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_rewind arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_eof arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_valid arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_fgets arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fread, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fgetcsv, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fputcsv, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, fields, IS_ARRAY, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\",\"")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enclosure, IS_STRING, 0, "\"\\\"\"")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, escape, IS_STRING, 0, "\"\\\\\"")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_setCsvControl arginfo_class_SplFileObject_fgetcsv
+
+#define arginfo_class_SplFileObject_getCsvControl arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_flock, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, operation, IS_LONG, 0)
+ ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, wouldBlock, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_fflush arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_ftell arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fseek, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, whence, IS_LONG, 0, "SEEK_SET")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_fgetc arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_fpassthru arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fscanf, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0)
+ ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_fwrite, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_fstat arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_ftruncate, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_current arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_key arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_next arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_setFlags arginfo_class_FilesystemIterator_setFlags
+
+#define arginfo_class_SplFileObject_getFlags arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_setMaxLineLen, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, maxLength, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_getMaxLineLen arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_hasChildren arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject_getChildren arginfo_class_SplFileInfo_getPath
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFileObject_seek, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, line, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFileObject_getCurrentLine arginfo_class_SplFileInfo_getPath
+
+#define arginfo_class_SplFileObject___toString arginfo_class_SplFileInfo___toString
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplTempFileObject___construct, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxMemory, IS_LONG, 0, "2 * 1024 * 1024")
+ZEND_END_ARG_INFO()
+
+
+ZEND_METHOD(SplFileInfo, __construct);
+ZEND_METHOD(SplFileInfo, getPath);
+ZEND_METHOD(SplFileInfo, getFilename);
+ZEND_METHOD(SplFileInfo, getExtension);
+ZEND_METHOD(SplFileInfo, getBasename);
+ZEND_METHOD(SplFileInfo, getPathname);
+ZEND_METHOD(SplFileInfo, getPerms);
+ZEND_METHOD(SplFileInfo, getInode);
+ZEND_METHOD(SplFileInfo, getSize);
+ZEND_METHOD(SplFileInfo, getOwner);
+ZEND_METHOD(SplFileInfo, getGroup);
+ZEND_METHOD(SplFileInfo, getATime);
+ZEND_METHOD(SplFileInfo, getMTime);
+ZEND_METHOD(SplFileInfo, getCTime);
+ZEND_METHOD(SplFileInfo, getType);
+ZEND_METHOD(SplFileInfo, isWritable);
+ZEND_METHOD(SplFileInfo, isReadable);
+ZEND_METHOD(SplFileInfo, isExecutable);
+ZEND_METHOD(SplFileInfo, isFile);
+ZEND_METHOD(SplFileInfo, isDir);
+ZEND_METHOD(SplFileInfo, isLink);
+ZEND_METHOD(SplFileInfo, getLinkTarget);
+ZEND_METHOD(SplFileInfo, getRealPath);
+ZEND_METHOD(SplFileInfo, getFileInfo);
+ZEND_METHOD(SplFileInfo, getPathInfo);
+ZEND_METHOD(SplFileInfo, openFile);
+ZEND_METHOD(SplFileInfo, setFileClass);
+ZEND_METHOD(SplFileInfo, setInfoClass);
+ZEND_METHOD(SplFileInfo, __debugInfo);
+ZEND_METHOD(SplFileInfo, _bad_state_ex);
+ZEND_METHOD(DirectoryIterator, __construct);
+ZEND_METHOD(DirectoryIterator, getFilename);
+ZEND_METHOD(DirectoryIterator, getExtension);
+ZEND_METHOD(DirectoryIterator, getBasename);
+ZEND_METHOD(DirectoryIterator, isDot);
+ZEND_METHOD(DirectoryIterator, rewind);
+ZEND_METHOD(DirectoryIterator, valid);
+ZEND_METHOD(DirectoryIterator, key);
+ZEND_METHOD(DirectoryIterator, current);
+ZEND_METHOD(DirectoryIterator, next);
+ZEND_METHOD(DirectoryIterator, seek);
+ZEND_METHOD(FilesystemIterator, __construct);
+ZEND_METHOD(FilesystemIterator, rewind);
+ZEND_METHOD(FilesystemIterator, key);
+ZEND_METHOD(FilesystemIterator, current);
+ZEND_METHOD(FilesystemIterator, getFlags);
+ZEND_METHOD(FilesystemIterator, setFlags);
+ZEND_METHOD(RecursiveDirectoryIterator, __construct);
+ZEND_METHOD(RecursiveDirectoryIterator, hasChildren);
+ZEND_METHOD(RecursiveDirectoryIterator, getChildren);
+ZEND_METHOD(RecursiveDirectoryIterator, getSubPath);
+ZEND_METHOD(RecursiveDirectoryIterator, getSubPathname);
+#if defined(HAVE_GLOB)
+ZEND_METHOD(GlobIterator, __construct);
+#endif
+#if defined(HAVE_GLOB)
+ZEND_METHOD(GlobIterator, count);
+#endif
+ZEND_METHOD(SplFileObject, __construct);
+ZEND_METHOD(SplFileObject, rewind);
+ZEND_METHOD(SplFileObject, eof);
+ZEND_METHOD(SplFileObject, valid);
+ZEND_METHOD(SplFileObject, fgets);
+ZEND_METHOD(SplFileObject, fread);
+ZEND_METHOD(SplFileObject, fgetcsv);
+ZEND_METHOD(SplFileObject, fputcsv);
+ZEND_METHOD(SplFileObject, setCsvControl);
+ZEND_METHOD(SplFileObject, getCsvControl);
+ZEND_METHOD(SplFileObject, flock);
+ZEND_METHOD(SplFileObject, fflush);
+ZEND_METHOD(SplFileObject, ftell);
+ZEND_METHOD(SplFileObject, fseek);
+ZEND_METHOD(SplFileObject, fgetc);
+ZEND_METHOD(SplFileObject, fpassthru);
+ZEND_METHOD(SplFileObject, fscanf);
+ZEND_METHOD(SplFileObject, fwrite);
+ZEND_METHOD(SplFileObject, fstat);
+ZEND_METHOD(SplFileObject, ftruncate);
+ZEND_METHOD(SplFileObject, current);
+ZEND_METHOD(SplFileObject, key);
+ZEND_METHOD(SplFileObject, next);
+ZEND_METHOD(SplFileObject, setFlags);
+ZEND_METHOD(SplFileObject, getFlags);
+ZEND_METHOD(SplFileObject, setMaxLineLen);
+ZEND_METHOD(SplFileObject, getMaxLineLen);
+ZEND_METHOD(SplFileObject, hasChildren);
+ZEND_METHOD(SplFileObject, getChildren);
+ZEND_METHOD(SplFileObject, seek);
+ZEND_METHOD(SplTempFileObject, __construct);
+
+
+static const zend_function_entry class_SplFileInfo_methods[] = {
+ ZEND_ME(SplFileInfo, __construct, arginfo_class_SplFileInfo___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getPath, arginfo_class_SplFileInfo_getPath, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getFilename, arginfo_class_SplFileInfo_getFilename, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getExtension, arginfo_class_SplFileInfo_getExtension, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getBasename, arginfo_class_SplFileInfo_getBasename, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getPathname, arginfo_class_SplFileInfo_getPathname, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getPerms, arginfo_class_SplFileInfo_getPerms, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getInode, arginfo_class_SplFileInfo_getInode, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getSize, arginfo_class_SplFileInfo_getSize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getOwner, arginfo_class_SplFileInfo_getOwner, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getGroup, arginfo_class_SplFileInfo_getGroup, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getATime, arginfo_class_SplFileInfo_getATime, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getMTime, arginfo_class_SplFileInfo_getMTime, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getCTime, arginfo_class_SplFileInfo_getCTime, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getType, arginfo_class_SplFileInfo_getType, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, isWritable, arginfo_class_SplFileInfo_isWritable, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, isReadable, arginfo_class_SplFileInfo_isReadable, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, isExecutable, arginfo_class_SplFileInfo_isExecutable, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, isFile, arginfo_class_SplFileInfo_isFile, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, isDir, arginfo_class_SplFileInfo_isDir, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, isLink, arginfo_class_SplFileInfo_isLink, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getLinkTarget, arginfo_class_SplFileInfo_getLinkTarget, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getRealPath, arginfo_class_SplFileInfo_getRealPath, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getFileInfo, arginfo_class_SplFileInfo_getFileInfo, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, getPathInfo, arginfo_class_SplFileInfo_getPathInfo, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, openFile, arginfo_class_SplFileInfo_openFile, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, setFileClass, arginfo_class_SplFileInfo_setFileClass, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, setInfoClass, arginfo_class_SplFileInfo_setInfoClass, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplFileInfo, __toString, getPathname, arginfo_class_SplFileInfo___toString, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, __debugInfo, arginfo_class_SplFileInfo___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileInfo, _bad_state_ex, arginfo_class_SplFileInfo__bad_state_ex, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_DirectoryIterator_methods[] = {
+ ZEND_ME(DirectoryIterator, __construct, arginfo_class_DirectoryIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, getFilename, arginfo_class_DirectoryIterator_getFilename, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, getExtension, arginfo_class_DirectoryIterator_getExtension, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, getBasename, arginfo_class_DirectoryIterator_getBasename, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, isDot, arginfo_class_DirectoryIterator_isDot, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, rewind, arginfo_class_DirectoryIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, valid, arginfo_class_DirectoryIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, key, arginfo_class_DirectoryIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, current, arginfo_class_DirectoryIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, next, arginfo_class_DirectoryIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(DirectoryIterator, seek, arginfo_class_DirectoryIterator_seek, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(DirectoryIterator, __toString, getFilename, arginfo_class_DirectoryIterator___toString, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_FilesystemIterator_methods[] = {
+ ZEND_ME(FilesystemIterator, __construct, arginfo_class_FilesystemIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilesystemIterator, rewind, arginfo_class_FilesystemIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilesystemIterator, key, arginfo_class_FilesystemIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilesystemIterator, current, arginfo_class_FilesystemIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilesystemIterator, getFlags, arginfo_class_FilesystemIterator_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilesystemIterator, setFlags, arginfo_class_FilesystemIterator_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveDirectoryIterator_methods[] = {
+ ZEND_ME(RecursiveDirectoryIterator, __construct, arginfo_class_RecursiveDirectoryIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveDirectoryIterator, hasChildren, arginfo_class_RecursiveDirectoryIterator_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveDirectoryIterator, getChildren, arginfo_class_RecursiveDirectoryIterator_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveDirectoryIterator, getSubPath, arginfo_class_RecursiveDirectoryIterator_getSubPath, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveDirectoryIterator, getSubPathname, arginfo_class_RecursiveDirectoryIterator_getSubPathname, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_GlobIterator_methods[] = {
+#if defined(HAVE_GLOB)
+ ZEND_ME(GlobIterator, __construct, arginfo_class_GlobIterator___construct, ZEND_ACC_PUBLIC)
+#endif
+#if defined(HAVE_GLOB)
+ ZEND_ME(GlobIterator, count, arginfo_class_GlobIterator_count, ZEND_ACC_PUBLIC)
+#endif
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplFileObject_methods[] = {
+ ZEND_ME(SplFileObject, __construct, arginfo_class_SplFileObject___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, rewind, arginfo_class_SplFileObject_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, eof, arginfo_class_SplFileObject_eof, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, valid, arginfo_class_SplFileObject_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fgets, arginfo_class_SplFileObject_fgets, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fread, arginfo_class_SplFileObject_fread, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fgetcsv, arginfo_class_SplFileObject_fgetcsv, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fputcsv, arginfo_class_SplFileObject_fputcsv, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, setCsvControl, arginfo_class_SplFileObject_setCsvControl, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, getCsvControl, arginfo_class_SplFileObject_getCsvControl, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, flock, arginfo_class_SplFileObject_flock, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fflush, arginfo_class_SplFileObject_fflush, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, ftell, arginfo_class_SplFileObject_ftell, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fseek, arginfo_class_SplFileObject_fseek, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fgetc, arginfo_class_SplFileObject_fgetc, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fpassthru, arginfo_class_SplFileObject_fpassthru, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fscanf, arginfo_class_SplFileObject_fscanf, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fwrite, arginfo_class_SplFileObject_fwrite, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, fstat, arginfo_class_SplFileObject_fstat, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, ftruncate, arginfo_class_SplFileObject_ftruncate, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, current, arginfo_class_SplFileObject_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, key, arginfo_class_SplFileObject_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, next, arginfo_class_SplFileObject_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, setFlags, arginfo_class_SplFileObject_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, getFlags, arginfo_class_SplFileObject_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, setMaxLineLen, arginfo_class_SplFileObject_setMaxLineLen, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, getMaxLineLen, arginfo_class_SplFileObject_getMaxLineLen, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, hasChildren, arginfo_class_SplFileObject_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, getChildren, arginfo_class_SplFileObject_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFileObject, seek, arginfo_class_SplFileObject_seek, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplFileObject, getCurrentLine, fgets, arginfo_class_SplFileObject_getCurrentLine, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplFileObject, __toString, fgets, arginfo_class_SplFileObject___toString, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplTempFileObject_methods[] = {
+ ZEND_ME(SplTempFileObject, __construct, arginfo_class_SplTempFileObject___construct, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index ce5504da7e..c576104139 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -32,6 +30,7 @@
#include "spl_engine.h"
#include "spl_iterators.h"
#include "spl_dllist.h"
+#include "spl_dllist_arginfo.h"
#include "spl_exceptions.h"
zend_object_handlers spl_handler_SplDoublyLinkedList;
@@ -39,16 +38,18 @@ PHPAPI zend_class_entry *spl_ce_SplDoublyLinkedList;
PHPAPI zend_class_entry *spl_ce_SplQueue;
PHPAPI zend_class_entry *spl_ce_SplStack;
-#define SPL_LLIST_DELREF(elem) if(!--(elem)->rc) { \
+#define SPL_LLIST_RC(elem) Z_EXTRA((elem)->data)
+
+#define SPL_LLIST_DELREF(elem) if (!--SPL_LLIST_RC(elem)) { \
efree(elem); \
}
-#define SPL_LLIST_CHECK_DELREF(elem) if((elem) && !--(elem)->rc) { \
+#define SPL_LLIST_CHECK_DELREF(elem) if ((elem) && !--SPL_LLIST_RC(elem)) { \
efree(elem); \
}
-#define SPL_LLIST_ADDREF(elem) (elem)->rc++
-#define SPL_LLIST_CHECK_ADDREF(elem) if(elem) (elem)->rc++
+#define SPL_LLIST_ADDREF(elem) SPL_LLIST_RC(elem)++
+#define SPL_LLIST_CHECK_ADDREF(elem) if (elem) SPL_LLIST_RC(elem)++
#define SPL_DLLIST_IT_DELETE 0x00000001 /* Delete flag makes the iterator delete the current element on next */
#define SPL_DLLIST_IT_LIFO 0x00000002 /* LIFO flag makes the iterator traverse the structure as a LastInFirstOut */
@@ -62,7 +63,6 @@ PHPAPI zend_class_entry *spl_ce_SplStack;
typedef struct _spl_ptr_llist_element {
struct _spl_ptr_llist_element *prev;
struct _spl_ptr_llist_element *next;
- int rc;
zval data;
} spl_ptr_llist_element;
@@ -91,8 +91,6 @@ struct _spl_dllist_object {
zend_function *fptr_offset_del;
zend_function *fptr_count;
zend_class_entry *ce_get_iterator;
- zval *gc_data;
- int gc_data_count;
zend_object std;
};
@@ -194,10 +192,10 @@ static void spl_ptr_llist_unshift(spl_ptr_llist *llist, zval *data) /* {{{ */
{
spl_ptr_llist_element *elem = emalloc(sizeof(spl_ptr_llist_element));
- elem->rc = 1;
elem->prev = NULL;
elem->next = llist->head;
ZVAL_COPY_VALUE(&elem->data, data);
+ SPL_LLIST_RC(elem) = 1;
if (llist->head) {
llist->head->prev = elem;
@@ -218,10 +216,10 @@ static void spl_ptr_llist_push(spl_ptr_llist *llist, zval *data) /* {{{ */
{
spl_ptr_llist_element *elem = emalloc(sizeof(spl_ptr_llist_element));
- elem->rc = 1;
elem->prev = llist->tail;
elem->next = NULL;
ZVAL_COPY_VALUE(&elem->data, data);
+ SPL_LLIST_RC(elem) = 1;
if (llist->tail) {
llist->tail->next = elem;
@@ -356,18 +354,12 @@ static void spl_dllist_object_free_storage(zend_object *object) /* {{{ */
zval_ptr_dtor(&tmp);
}
- if (intern->gc_data != NULL) {
- efree(intern->gc_data);
- };
-
spl_ptr_llist_destroy(intern->llist);
SPL_LLIST_CHECK_DELREF(intern->traverse_pointer);
}
/* }}} */
-zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object, int by_ref);
-
-static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval *orig, int clone_orig) /* {{{ */
+static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zend_object *orig, int clone_orig) /* {{{ */
{
spl_dllist_object *intern;
zend_class_entry *parent = class_type;
@@ -382,7 +374,7 @@ static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval
intern->traverse_position = 0;
if (orig) {
- spl_dllist_object *other = Z_SPLDLLIST_P(orig);
+ spl_dllist_object *other = spl_dllist_from_obj(orig);
intern->ce_get_iterator = other->ce_get_iterator;
if (clone_orig) {
@@ -421,9 +413,8 @@ static zend_object *spl_dllist_object_new_ex(zend_class_entry *class_type, zval
inherited = 1;
}
- if (!parent) { /* this must never happen */
- php_error_docref(NULL, E_COMPILE_ERROR, "Internal compiler error, Class is not child of SplDoublyLinkedList");
- }
+ ZEND_ASSERT(parent);
+
if (inherited) {
intern->fptr_offset_get = zend_hash_str_find_ptr(&class_type->function_table, "offsetget", sizeof("offsetget") - 1);
if (intern->fptr_offset_get->common.scope == parent) {
@@ -457,13 +448,9 @@ static zend_object *spl_dllist_object_new(zend_class_entry *class_type) /* {{{ *
}
/* }}} */
-static zend_object *spl_dllist_object_clone(zval *zobject) /* {{{ */
+static zend_object *spl_dllist_object_clone(zend_object *old_object) /* {{{ */
{
- zend_object *old_object;
- zend_object *new_object;
-
- old_object = Z_OBJ_P(zobject);
- new_object = spl_dllist_object_new_ex(old_object->ce, zobject, 1);
+ zend_object *new_object = spl_dllist_object_new_ex(old_object->ce, old_object, 1);
zend_objects_clone_members(new_object, old_object);
@@ -471,9 +458,9 @@ static zend_object *spl_dllist_object_clone(zval *zobject) /* {{{ */
}
/* }}} */
-static int spl_dllist_object_count_elements(zval *object, zend_long *count) /* {{{ */
+static int spl_dllist_object_count_elements(zend_object *object, zend_long *count) /* {{{ */
{
- spl_dllist_object *intern = Z_SPLDLLIST_P(object);
+ spl_dllist_object *intern = spl_dllist_from_obj(object);
if (intern->fptr_count) {
zval rv;
@@ -492,9 +479,9 @@ static int spl_dllist_object_count_elements(zval *object, zend_long *count) /* {
}
/* }}} */
-static inline HashTable* spl_dllist_object_get_debug_info(zval *obj) /* {{{{ */
+static inline HashTable* spl_dllist_object_get_debug_info(zend_object *obj) /* {{{{ */
{
- spl_dllist_object *intern = Z_SPLDLLIST_P(obj);
+ spl_dllist_object *intern = spl_dllist_from_obj(obj);
spl_ptr_llist_element *current = intern->llist->head, *next;
zval tmp, dllist_array;
zend_string *pnstr;
@@ -535,72 +522,59 @@ static inline HashTable* spl_dllist_object_get_debug_info(zval *obj) /* {{{{ */
}
/* }}}} */
-static HashTable *spl_dllist_object_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */
+static HashTable *spl_dllist_object_get_gc(zend_object *obj, zval **gc_data, int *gc_data_count) /* {{{ */
{
- spl_dllist_object *intern = Z_SPLDLLIST_P(obj);
+ spl_dllist_object *intern = spl_dllist_from_obj(obj);
+ zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
spl_ptr_llist_element *current = intern->llist->head;
- int i = 0;
-
- if (intern->gc_data_count < intern->llist->count) {
- intern->gc_data_count = intern->llist->count;
- intern->gc_data = safe_erealloc(intern->gc_data, intern->gc_data_count, sizeof(zval), 0);
- }
while (current) {
- ZVAL_COPY_VALUE(&intern->gc_data[i++], &current->data);
+ zend_get_gc_buffer_add_zval(gc_buffer, &current->data);
current = current->next;
}
- *gc_data = intern->gc_data;
- *gc_data_count = i;
+ zend_get_gc_buffer_use(gc_buffer, gc_data, gc_data_count);
return zend_std_get_properties(obj);
}
/* }}} */
-/* {{{ proto bool SplDoublyLinkedList::push(mixed value)
- Push $value on the SplDoublyLinkedList */
-SPL_METHOD(SplDoublyLinkedList, push)
+/* {{{ Push $value on the SplDoublyLinkedList */
+PHP_METHOD(SplDoublyLinkedList, push)
{
zval *value;
spl_dllist_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
spl_ptr_llist_push(intern->llist, value);
-
- RETURN_TRUE;
}
/* }}} */
-/* {{{ proto bool SplDoublyLinkedList::unshift(mixed value)
- Unshift $value on the SplDoublyLinkedList */
-SPL_METHOD(SplDoublyLinkedList, unshift)
+/* {{{ Unshift $value on the SplDoublyLinkedList */
+PHP_METHOD(SplDoublyLinkedList, unshift)
{
zval *value;
spl_dllist_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
spl_ptr_llist_unshift(intern->llist, value);
-
- RETURN_TRUE;
}
/* }}} */
-/* {{{ proto mixed SplDoublyLinkedList::pop()
- Pop an element out of the SplDoublyLinkedList */
-SPL_METHOD(SplDoublyLinkedList, pop)
+/* {{{ Pop an element out of the SplDoublyLinkedList */
+PHP_METHOD(SplDoublyLinkedList, pop)
{
spl_dllist_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
@@ -608,19 +582,18 @@ SPL_METHOD(SplDoublyLinkedList, pop)
if (Z_ISUNDEF_P(return_value)) {
zend_throw_exception(spl_ce_RuntimeException, "Can't pop from an empty datastructure", 0);
- RETURN_NULL();
+ RETURN_THROWS();
}
}
/* }}} */
-/* {{{ proto mixed SplDoublyLinkedList::shift()
- Shift an element out of the SplDoublyLinkedList */
-SPL_METHOD(SplDoublyLinkedList, shift)
+/* {{{ Shift an element out of the SplDoublyLinkedList */
+PHP_METHOD(SplDoublyLinkedList, shift)
{
spl_dllist_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
@@ -628,20 +601,19 @@ SPL_METHOD(SplDoublyLinkedList, shift)
if (Z_ISUNDEF_P(return_value)) {
zend_throw_exception(spl_ce_RuntimeException, "Can't shift from an empty datastructure", 0);
- RETURN_NULL();
+ RETURN_THROWS();
}
}
/* }}} */
-/* {{{ proto mixed SplDoublyLinkedList::top()
- Peek at the top element of the SplDoublyLinkedList */
-SPL_METHOD(SplDoublyLinkedList, top)
+/* {{{ Peek at the top element of the SplDoublyLinkedList */
+PHP_METHOD(SplDoublyLinkedList, top)
{
zval *value;
spl_dllist_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
@@ -649,22 +621,21 @@ SPL_METHOD(SplDoublyLinkedList, top)
if (value == NULL || Z_ISUNDEF_P(value)) {
zend_throw_exception(spl_ce_RuntimeException, "Can't peek at an empty datastructure", 0);
- return;
+ RETURN_THROWS();
}
ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
-/* {{{ proto mixed SplDoublyLinkedList::bottom()
- Peek at the bottom element of the SplDoublyLinkedList */
-SPL_METHOD(SplDoublyLinkedList, bottom)
+/* {{{ Peek at the bottom element of the SplDoublyLinkedList */
+PHP_METHOD(SplDoublyLinkedList, bottom)
{
zval *value;
spl_dllist_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
@@ -672,22 +643,21 @@ SPL_METHOD(SplDoublyLinkedList, bottom)
if (value == NULL || Z_ISUNDEF_P(value)) {
zend_throw_exception(spl_ce_RuntimeException, "Can't peek at an empty datastructure", 0);
- return;
+ RETURN_THROWS();
}
ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
-/* {{{ proto int SplDoublyLinkedList::count()
- Return the number of elements in the datastructure. */
-SPL_METHOD(SplDoublyLinkedList, count)
+/* {{{ Return the number of elements in the datastructure. */
+PHP_METHOD(SplDoublyLinkedList, count)
{
zend_long count;
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
count = spl_ptr_llist_count(intern->llist);
@@ -695,38 +665,36 @@ SPL_METHOD(SplDoublyLinkedList, count)
}
/* }}} */
-/* {{{ proto int SplDoublyLinkedList::isEmpty()
- Return true if the SplDoublyLinkedList is empty. */
-SPL_METHOD(SplDoublyLinkedList, isEmpty)
+/* {{{ Return true if the SplDoublyLinkedList is empty. */
+PHP_METHOD(SplDoublyLinkedList, isEmpty)
{
zend_long count;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
- spl_dllist_object_count_elements(ZEND_THIS, &count);
+ spl_dllist_object_count_elements(Z_OBJ_P(ZEND_THIS), &count);
RETURN_BOOL(count == 0);
}
/* }}} */
-/* {{{ proto int SplDoublyLinkedList::setIteratorMode(int mode)
- Set the mode of iteration */
-SPL_METHOD(SplDoublyLinkedList, setIteratorMode)
+/* {{{ Set the mode of iteration */
+PHP_METHOD(SplDoublyLinkedList, setIteratorMode)
{
zend_long value;
spl_dllist_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
- if (intern->flags & SPL_DLLIST_IT_FIX
+ if ((intern->flags & SPL_DLLIST_IT_FIX)
&& (intern->flags & SPL_DLLIST_IT_LIFO) != (value & SPL_DLLIST_IT_LIFO)) {
zend_throw_exception(spl_ce_RuntimeException, "Iterators' LIFO/FIFO modes for SplStack/SplQueue objects are frozen", 0);
- return;
+ RETURN_THROWS();
}
intern->flags = (value & SPL_DLLIST_IT_MASK) | (intern->flags & SPL_DLLIST_IT_FIX);
@@ -735,14 +703,13 @@ SPL_METHOD(SplDoublyLinkedList, setIteratorMode)
}
/* }}} */
-/* {{{ proto int SplDoublyLinkedList::getIteratorMode()
- Return the mode of iteration */
-SPL_METHOD(SplDoublyLinkedList, getIteratorMode)
+/* {{{ Return the mode of iteration */
+PHP_METHOD(SplDoublyLinkedList, getIteratorMode)
{
spl_dllist_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
@@ -751,82 +718,72 @@ SPL_METHOD(SplDoublyLinkedList, getIteratorMode)
}
/* }}} */
-/* {{{ proto bool SplDoublyLinkedList::offsetExists(mixed index)
- Returns whether the requested $index exists. */
-SPL_METHOD(SplDoublyLinkedList, offsetExists)
+/* {{{ Returns whether the requested $index exists. */
+PHP_METHOD(SplDoublyLinkedList, offsetExists)
{
- zval *zindex;
spl_dllist_object *intern;
- zend_long index;
+ zend_long index;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zindex) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
- index = spl_offset_convert_to_long(zindex);
RETURN_BOOL(index >= 0 && index < intern->llist->count);
} /* }}} */
-/* {{{ proto mixed SplDoublyLinkedList::offsetGet(mixed index)
- Returns the value at the specified $index. */
-SPL_METHOD(SplDoublyLinkedList, offsetGet)
+/* {{{ Returns the value at the specified $index. */
+PHP_METHOD(SplDoublyLinkedList, offsetGet)
{
- zval *zindex;
zend_long index;
spl_dllist_object *intern;
spl_ptr_llist_element *element;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zindex) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
- index = spl_offset_convert_to_long(zindex);
if (index < 0 || index >= intern->llist->count) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid or out of range", 0);
- return;
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is out of range");
+ RETURN_THROWS();
}
element = spl_ptr_llist_offset(intern->llist, index, intern->flags & SPL_DLLIST_IT_LIFO);
-
- if (element != NULL) {
- zval *value = &element->data;
-
- ZVAL_COPY_DEREF(return_value, value);
- } else {
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid", 0);
+ if (element == NULL) {
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is an invalid offset");
+ RETURN_THROWS();
}
+
+ ZVAL_COPY_DEREF(return_value, &element->data);
} /* }}} */
-/* {{{ proto void SplDoublyLinkedList::offsetSet(mixed index, mixed newval)
- Sets the value at the specified $index to $newval. */
-SPL_METHOD(SplDoublyLinkedList, offsetSet)
+/* {{{ Sets the value at the specified $index to $newval. */
+PHP_METHOD(SplDoublyLinkedList, offsetSet)
{
- zval *zindex, *value;
- spl_dllist_object *intern;
+ zend_long index;
+ zend_bool index_is_null = 1;
+ zval *value;
+ spl_dllist_object *intern;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &zindex, &value) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l!z", &index, &index_is_null, &value) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
- if (Z_TYPE_P(zindex) == IS_NULL) {
+ if (index_is_null) {
/* $obj[] = ... */
spl_ptr_llist_push(intern->llist, value);
} else {
/* $obj[$foo] = ... */
- zend_long index;
spl_ptr_llist_element *element;
- index = spl_offset_convert_to_long(zindex);
-
if (index < 0 || index >= intern->llist->count) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid or out of range", 0);
- return;
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is out of range");
+ RETURN_THROWS();
}
element = spl_ptr_llist_offset(intern->llist, index, intern->flags & SPL_DLLIST_IT_LIFO);
@@ -848,33 +805,30 @@ SPL_METHOD(SplDoublyLinkedList, offsetSet)
}
} else {
zval_ptr_dtor(value);
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid", 0);
- return;
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is an invalid offset");
+ RETURN_THROWS();
}
}
} /* }}} */
-/* {{{ proto void SplDoublyLinkedList::offsetUnset(mixed index)
- Unsets the value at the specified $index. */
-SPL_METHOD(SplDoublyLinkedList, offsetUnset)
+/* {{{ Unsets the value at the specified $index. */
+PHP_METHOD(SplDoublyLinkedList, offsetUnset)
{
- zval *zindex;
zend_long index;
spl_dllist_object *intern;
spl_ptr_llist_element *element;
spl_ptr_llist *llist;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zindex) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
- index = spl_offset_convert_to_long(zindex);
llist = intern->llist;
if (index < 0 || index >= intern->llist->count) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset out of range", 0);
- return;
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is out of range");
+ RETURN_THROWS();
}
element = spl_ptr_llist_offset(intern->llist, index, intern->flags & SPL_DLLIST_IT_LIFO);
@@ -914,8 +868,8 @@ SPL_METHOD(SplDoublyLinkedList, offsetUnset)
SPL_LLIST_DELREF(element);
} else {
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid", 0);
- return;
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is an invalid offset");
+ RETURN_THROWS();
}
} /* }}} */
@@ -986,7 +940,7 @@ static void spl_dllist_it_rewind(zend_object_iterator *iter) /* {{{ */
spl_dllist_object *object = Z_SPLDLLIST_P(&iter->data);
spl_ptr_llist *llist = object->llist;
- spl_dllist_it_helper_rewind(&iterator->traverse_pointer, &iterator->traverse_position, llist, object->flags);
+ spl_dllist_it_helper_rewind(&iterator->traverse_pointer, &iterator->traverse_position, llist, iterator->flags);
}
/* }}} */
@@ -1027,104 +981,95 @@ static void spl_dllist_it_move_forward(zend_object_iterator *iter) /* {{{ */
zend_user_it_invalidate_current(iter);
- spl_dllist_it_helper_move_forward(&iterator->traverse_pointer, &iterator->traverse_position, object->llist, object->flags);
+ spl_dllist_it_helper_move_forward(&iterator->traverse_pointer, &iterator->traverse_position, object->llist, iterator->flags);
}
/* }}} */
-/* {{{ proto int SplDoublyLinkedList::key()
- Return current array key */
-SPL_METHOD(SplDoublyLinkedList, key)
+/* {{{ Return current array key */
+PHP_METHOD(SplDoublyLinkedList, key)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->traverse_position);
}
/* }}} */
-/* {{{ proto void SplDoublyLinkedList::prev()
- Move to next entry */
-SPL_METHOD(SplDoublyLinkedList, prev)
+/* {{{ Move to next entry */
+PHP_METHOD(SplDoublyLinkedList, prev)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_dllist_it_helper_move_forward(&intern->traverse_pointer, &intern->traverse_position, intern->llist, intern->flags ^ SPL_DLLIST_IT_LIFO);
}
/* }}} */
-/* {{{ proto void SplDoublyLinkedList::next()
- Move to next entry */
-SPL_METHOD(SplDoublyLinkedList, next)
+/* {{{ Move to next entry */
+PHP_METHOD(SplDoublyLinkedList, next)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_dllist_it_helper_move_forward(&intern->traverse_pointer, &intern->traverse_position, intern->llist, intern->flags);
}
/* }}} */
-/* {{{ proto bool SplDoublyLinkedList::valid()
- Check whether the datastructure contains more entries */
-SPL_METHOD(SplDoublyLinkedList, valid)
+/* {{{ Check whether the datastructure contains more entries */
+PHP_METHOD(SplDoublyLinkedList, valid)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(intern->traverse_pointer != NULL);
}
/* }}} */
-/* {{{ proto void SplDoublyLinkedList::rewind()
- Rewind the datastructure back to the start */
-SPL_METHOD(SplDoublyLinkedList, rewind)
+/* {{{ Rewind the datastructure back to the start */
+PHP_METHOD(SplDoublyLinkedList, rewind)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_dllist_it_helper_rewind(&intern->traverse_pointer, &intern->traverse_position, intern->llist, intern->flags);
}
/* }}} */
-/* {{{ proto mixed|NULL SplDoublyLinkedList::current()
- Return current datastructure entry */
-SPL_METHOD(SplDoublyLinkedList, current)
+/* {{{ Return current datastructure entry */
+PHP_METHOD(SplDoublyLinkedList, current)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
spl_ptr_llist_element *element = intern->traverse_pointer;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (element == NULL || Z_ISUNDEF(element->data)) {
RETURN_NULL();
} else {
- zval *value = &element->data;
-
- ZVAL_COPY_DEREF(return_value, value);
+ ZVAL_COPY_DEREF(return_value, &element->data);
}
}
/* }}} */
-/* {{{ proto string SplDoublyLinkedList::serialize()
- Serializes storage */
-SPL_METHOD(SplDoublyLinkedList, serialize)
+/* {{{ Serializes storage */
+PHP_METHOD(SplDoublyLinkedList, serialize)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
smart_str buf = {0};
@@ -1133,7 +1078,7 @@ SPL_METHOD(SplDoublyLinkedList, serialize)
php_serialize_data_t var_hash;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
PHP_VAR_SERIALIZE_INIT(var_hash);
@@ -1157,17 +1102,11 @@ SPL_METHOD(SplDoublyLinkedList, serialize)
/* done */
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- if (buf.s) {
- RETURN_NEW_STR(buf.s);
- } else {
- RETURN_NULL();
- }
-
+ RETURN_NEW_STR(buf.s);
} /* }}} */
-/* {{{ proto void SplDoublyLinkedList::unserialize(string serialized)
- Unserializes storage */
-SPL_METHOD(SplDoublyLinkedList, unserialize)
+/* {{{ Unserializes storage */
+PHP_METHOD(SplDoublyLinkedList, unserialize)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
zval *flags, *elem;
@@ -1177,7 +1116,7 @@ SPL_METHOD(SplDoublyLinkedList, unserialize)
php_unserialize_data_t var_hash;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &buf, &buf_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (buf_len == 0) {
@@ -1223,19 +1162,19 @@ SPL_METHOD(SplDoublyLinkedList, unserialize)
error:
PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Error at offset %zd of %zd bytes", ((char*)p - buf), buf_len);
- return;
+ RETURN_THROWS();
} /* }}} */
-/* {{{ proto array SplDoublyLinkedList::__serialize() */
-SPL_METHOD(SplDoublyLinkedList, __serialize)
+/* {{{ */
+PHP_METHOD(SplDoublyLinkedList, __serialize)
{
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
spl_ptr_llist_element *current = intern->llist->head;
zval tmp;
- if (zend_parse_parameters_none_throw() == FAILURE) {
- return;
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
}
array_init(return_value);
@@ -1254,19 +1193,19 @@ SPL_METHOD(SplDoublyLinkedList, __serialize)
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &tmp);
/* members */
- ZVAL_ARR(&tmp, zend_std_get_properties(ZEND_THIS));
+ ZVAL_ARR(&tmp, zend_std_get_properties(&intern->std));
Z_TRY_ADDREF(tmp);
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &tmp);
} /* }}} */
-/* {{{ proto void SplDoublyLinkedList::__unserialize(array serialized) */
-SPL_METHOD(SplDoublyLinkedList, __unserialize) {
+/* {{{ */
+PHP_METHOD(SplDoublyLinkedList, __unserialize) {
spl_dllist_object *intern = Z_SPLDLLIST_P(ZEND_THIS);
HashTable *data;
zval *flags_zv, *storage_zv, *members_zv, *elem;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
+ RETURN_THROWS();
}
flags_zv = zend_hash_index_find(data, 0);
@@ -1277,7 +1216,7 @@ SPL_METHOD(SplDoublyLinkedList, __unserialize) {
Z_TYPE_P(members_zv) != IS_ARRAY) {
zend_throw_exception(spl_ce_UnexpectedValueException,
"Incomplete or ill-typed serialization data", 0);
- return;
+ RETURN_THROWS();
}
intern->flags = (int) Z_LVAL_P(flags_zv);
@@ -1289,25 +1228,23 @@ SPL_METHOD(SplDoublyLinkedList, __unserialize) {
object_properties_load(&intern->std, Z_ARRVAL_P(members_zv));
} /* }}} */
-/* {{{ proto void SplDoublyLinkedList::add(mixed index, mixed newval)
- Inserts a new entry before the specified $index consisting of $newval. */
-SPL_METHOD(SplDoublyLinkedList, add)
+/* {{{ Inserts a new entry before the specified $index consisting of $newval. */
+PHP_METHOD(SplDoublyLinkedList, add)
{
- zval *zindex, *value;
+ zval *value;
spl_dllist_object *intern;
spl_ptr_llist_element *element;
zend_long index;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &zindex, &value) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "lz", &index, &value) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLDLLIST_P(ZEND_THIS);
- index = spl_offset_convert_to_long(zindex);
if (index < 0 || index > intern->llist->count) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid or out of range", 0);
- return;
+ zend_argument_error(spl_ce_OutOfRangeException, 1, "is out of range");
+ RETURN_THROWS();
}
Z_TRY_ADDREF_P(value);
@@ -1322,7 +1259,7 @@ SPL_METHOD(SplDoublyLinkedList, add)
element = spl_ptr_llist_offset(intern->llist, index, intern->flags & SPL_DLLIST_IT_LIFO);
ZVAL_COPY_VALUE(&elem->data, value);
- elem->rc = 1;
+ SPL_LLIST_RC(elem) = 1;
/* connect to the neighbours */
elem->next = element;
elem->prev = element->prev;
@@ -1343,14 +1280,14 @@ SPL_METHOD(SplDoublyLinkedList, add)
}
} /* }}} */
-/* {{{ proto void SplDoublyLinkedList::__debugInfo() */
-SPL_METHOD(SplDoublyLinkedList, __debugInfo)
+/* {{{ */
+PHP_METHOD(SplDoublyLinkedList, __debugInfo)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- RETURN_ARR(spl_dllist_object_get_debug_info(getThis()));
+ RETURN_ARR(spl_dllist_object_get_debug_info(Z_OBJ_P(ZEND_THIS)));
} /* }}} */
/* {{{ iterator handler table */
@@ -1361,7 +1298,8 @@ static const zend_object_iterator_funcs spl_dllist_it_funcs = {
spl_dllist_it_get_current_key,
spl_dllist_it_move_forward,
spl_dllist_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
}; /* }}} */
zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object, int by_ref) /* {{{ */
@@ -1370,7 +1308,7 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
spl_dllist_object *dllist_object = Z_SPLDLLIST_P(object);
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
@@ -1378,8 +1316,7 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
iterator->intern.it.funcs = &spl_dllist_it_funcs;
iterator->intern.ce = ce;
iterator->traverse_position = dllist_object->traverse_position;
@@ -1393,77 +1330,9 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
}
/* }}} */
-/* Function/Class/Method definitions */
-ZEND_BEGIN_ARG_INFO(arginfo_dllist_setiteratormode, 0)
- ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_dllist_push, 0)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_dllist_offsetGet, 0, 0, 1)
- ZEND_ARG_INFO(0, index)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_dllist_offsetSet, 0, 0, 2)
- ZEND_ARG_INFO(0, index)
- ZEND_ARG_INFO(0, newval)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_dllist_void, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_dllist_serialized, 0)
- ZEND_ARG_INFO(0, serialized)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_SplQueue[] = {
- SPL_MA(SplQueue, enqueue, SplDoublyLinkedList, push, arginfo_dllist_push, ZEND_ACC_PUBLIC)
- SPL_MA(SplQueue, dequeue, SplDoublyLinkedList, shift, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_funcs_SplDoublyLinkedList[] = {
- SPL_ME(SplDoublyLinkedList, pop, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, shift, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, push, arginfo_dllist_push, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, unshift, arginfo_dllist_push, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, top, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, bottom, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, isEmpty, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, setIteratorMode, arginfo_dllist_setiteratormode, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, getIteratorMode, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, __debugInfo, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- /* Countable */
- SPL_ME(SplDoublyLinkedList, count, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- /* ArrayAccess */
- SPL_ME(SplDoublyLinkedList, offsetExists, arginfo_dllist_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, offsetGet, arginfo_dllist_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, offsetSet, arginfo_dllist_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, offsetUnset, arginfo_dllist_offsetGet, ZEND_ACC_PUBLIC)
-
- SPL_ME(SplDoublyLinkedList, add, arginfo_dllist_offsetSet, ZEND_ACC_PUBLIC)
-
- /* Iterator */
- SPL_ME(SplDoublyLinkedList, rewind, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, current, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, key, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, next, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, prev, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, valid, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- /* Serializable */
- SPL_ME(SplDoublyLinkedList, unserialize, arginfo_dllist_serialized, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, serialize, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, __unserialize, arginfo_dllist_serialized, ZEND_ACC_PUBLIC)
- SPL_ME(SplDoublyLinkedList, __serialize, arginfo_dllist_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-/* }}} */
-
PHP_MINIT_FUNCTION(spl_dllist) /* {{{ */
{
- REGISTER_SPL_STD_CLASS_EX(SplDoublyLinkedList, spl_dllist_object_new, spl_funcs_SplDoublyLinkedList);
+ REGISTER_SPL_STD_CLASS_EX(SplDoublyLinkedList, spl_dllist_object_new, class_SplDoublyLinkedList_methods);
memcpy(&spl_handler_SplDoublyLinkedList, &std_object_handlers, sizeof(zend_object_handlers));
spl_handler_SplDoublyLinkedList.offset = XtOffsetOf(spl_dllist_object, std);
@@ -1485,8 +1354,8 @@ PHP_MINIT_FUNCTION(spl_dllist) /* {{{ */
spl_ce_SplDoublyLinkedList->get_iterator = spl_dllist_get_iterator;
- REGISTER_SPL_SUB_CLASS_EX(SplQueue, SplDoublyLinkedList, spl_dllist_object_new, spl_funcs_SplQueue);
- REGISTER_SPL_SUB_CLASS_EX(SplStack, SplDoublyLinkedList, spl_dllist_object_new, NULL);
+ REGISTER_SPL_SUB_CLASS_EX(SplQueue, SplDoublyLinkedList, spl_dllist_object_new, class_SplQueue_methods);
+ REGISTER_SPL_SUB_CLASS_EX(SplStack, SplDoublyLinkedList, spl_dllist_object_new, class_SplStack_methods);
spl_ce_SplQueue->get_iterator = spl_dllist_get_iterator;
spl_ce_SplStack->get_iterator = spl_dllist_get_iterator;
diff --git a/ext/spl/spl_dllist.h b/ext/spl/spl_dllist.h
index 3f53864d25..b42e55fcb6 100644
--- a/ext/spl/spl_dllist.h
+++ b/ext/spl/spl_dllist.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_dllist.stub.php b/ext/spl/spl_dllist.stub.php
new file mode 100644
index 0000000000..05f122204e
--- /dev/null
+++ b/ext/spl/spl_dllist.stub.php
@@ -0,0 +1,115 @@
+<?php
+
+/** @generate-function-entries */
+
+class SplDoublyLinkedList implements Iterator, Countable, ArrayAccess, Serializable
+{
+ /** @return void */
+ public function add(int $index, mixed $value) {}
+
+ /** @return mixed */
+ public function pop() {}
+
+ /** @return mixed */
+ public function shift() {}
+
+ /** @return void */
+ public function push(mixed $value) {}
+
+ /** @return void */
+ public function unshift(mixed $value) {}
+
+ /** @return mixed */
+ public function top() {}
+
+ /** @return mixed */
+ public function bottom() {}
+
+ /** @return array */
+ public function __debugInfo() {}
+
+ /** @return int */
+ public function count() {}
+
+ /** @return bool */
+ public function isEmpty() {}
+
+ /** @return int */
+ public function setIteratorMode(int $mode) {}
+
+ /** @return int */
+ public function getIteratorMode() {}
+
+ /**
+ * @param int $index
+ * @return bool
+ */
+ public function offsetExists($index) {}
+
+ /**
+ * @param int $index
+ * @return mixed
+ */
+ public function offsetGet($index) {}
+
+ /**
+ * @param int|null $index
+ * @return void
+ */
+ public function offsetSet($index, mixed $value) {}
+
+ /**
+ * @param int $index
+ * @return void
+ */
+ public function offsetUnset($index) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return int */
+ public function key() {}
+
+ /** @return void */
+ public function prev() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return void */
+ public function unserialize(string $data) {}
+
+ /** @return string */
+ public function serialize() {}
+
+ /** @return array */
+ public function __serialize() {}
+
+ /** @return void */
+ public function __unserialize(array $data) {}
+}
+
+class SplQueue extends SplDoublyLinkedList
+{
+ /**
+ * @return void
+ * @implementation-alias SplDoublyLinkedList::push
+ */
+ public function enqueue(mixed $value) {}
+
+ /**
+ * @return mixed
+ * @implementation-alias SplDoublyLinkedList::shift
+ */
+ public function dequeue() {}
+}
+
+class SplStack extends SplDoublyLinkedList
+{
+}
diff --git a/ext/spl/spl_dllist_arginfo.h b/ext/spl/spl_dllist_arginfo.h
new file mode 100644
index 0000000000..eb612acb83
--- /dev/null
+++ b/ext/spl/spl_dllist_arginfo.h
@@ -0,0 +1,146 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: 404df73577d733275e386226e11887b37a500ade */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_add, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_pop, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplDoublyLinkedList_shift arginfo_class_SplDoublyLinkedList_pop
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_push, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplDoublyLinkedList_unshift arginfo_class_SplDoublyLinkedList_push
+
+#define arginfo_class_SplDoublyLinkedList_top arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_bottom arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList___debugInfo arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_count arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_isEmpty arginfo_class_SplDoublyLinkedList_pop
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_setIteratorMode, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplDoublyLinkedList_getIteratorMode arginfo_class_SplDoublyLinkedList_pop
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_offsetExists, 0, 0, 1)
+ ZEND_ARG_INFO(0, index)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplDoublyLinkedList_offsetGet arginfo_class_SplDoublyLinkedList_offsetExists
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_offsetSet, 0, 0, 2)
+ ZEND_ARG_INFO(0, index)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplDoublyLinkedList_offsetUnset arginfo_class_SplDoublyLinkedList_offsetExists
+
+#define arginfo_class_SplDoublyLinkedList_rewind arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_current arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_key arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_prev arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_next arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList_valid arginfo_class_SplDoublyLinkedList_pop
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList_unserialize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplDoublyLinkedList_serialize arginfo_class_SplDoublyLinkedList_pop
+
+#define arginfo_class_SplDoublyLinkedList___serialize arginfo_class_SplDoublyLinkedList_pop
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplDoublyLinkedList___unserialize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplQueue_enqueue arginfo_class_SplDoublyLinkedList_push
+
+#define arginfo_class_SplQueue_dequeue arginfo_class_SplDoublyLinkedList_pop
+
+
+ZEND_METHOD(SplDoublyLinkedList, add);
+ZEND_METHOD(SplDoublyLinkedList, pop);
+ZEND_METHOD(SplDoublyLinkedList, shift);
+ZEND_METHOD(SplDoublyLinkedList, push);
+ZEND_METHOD(SplDoublyLinkedList, unshift);
+ZEND_METHOD(SplDoublyLinkedList, top);
+ZEND_METHOD(SplDoublyLinkedList, bottom);
+ZEND_METHOD(SplDoublyLinkedList, __debugInfo);
+ZEND_METHOD(SplDoublyLinkedList, count);
+ZEND_METHOD(SplDoublyLinkedList, isEmpty);
+ZEND_METHOD(SplDoublyLinkedList, setIteratorMode);
+ZEND_METHOD(SplDoublyLinkedList, getIteratorMode);
+ZEND_METHOD(SplDoublyLinkedList, offsetExists);
+ZEND_METHOD(SplDoublyLinkedList, offsetGet);
+ZEND_METHOD(SplDoublyLinkedList, offsetSet);
+ZEND_METHOD(SplDoublyLinkedList, offsetUnset);
+ZEND_METHOD(SplDoublyLinkedList, rewind);
+ZEND_METHOD(SplDoublyLinkedList, current);
+ZEND_METHOD(SplDoublyLinkedList, key);
+ZEND_METHOD(SplDoublyLinkedList, prev);
+ZEND_METHOD(SplDoublyLinkedList, next);
+ZEND_METHOD(SplDoublyLinkedList, valid);
+ZEND_METHOD(SplDoublyLinkedList, unserialize);
+ZEND_METHOD(SplDoublyLinkedList, serialize);
+ZEND_METHOD(SplDoublyLinkedList, __serialize);
+ZEND_METHOD(SplDoublyLinkedList, __unserialize);
+
+
+static const zend_function_entry class_SplDoublyLinkedList_methods[] = {
+ ZEND_ME(SplDoublyLinkedList, add, arginfo_class_SplDoublyLinkedList_add, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, pop, arginfo_class_SplDoublyLinkedList_pop, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, shift, arginfo_class_SplDoublyLinkedList_shift, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, push, arginfo_class_SplDoublyLinkedList_push, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, unshift, arginfo_class_SplDoublyLinkedList_unshift, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, top, arginfo_class_SplDoublyLinkedList_top, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, bottom, arginfo_class_SplDoublyLinkedList_bottom, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, __debugInfo, arginfo_class_SplDoublyLinkedList___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, count, arginfo_class_SplDoublyLinkedList_count, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, isEmpty, arginfo_class_SplDoublyLinkedList_isEmpty, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, setIteratorMode, arginfo_class_SplDoublyLinkedList_setIteratorMode, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, getIteratorMode, arginfo_class_SplDoublyLinkedList_getIteratorMode, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, offsetExists, arginfo_class_SplDoublyLinkedList_offsetExists, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, offsetGet, arginfo_class_SplDoublyLinkedList_offsetGet, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, offsetSet, arginfo_class_SplDoublyLinkedList_offsetSet, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, offsetUnset, arginfo_class_SplDoublyLinkedList_offsetUnset, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, rewind, arginfo_class_SplDoublyLinkedList_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, current, arginfo_class_SplDoublyLinkedList_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, key, arginfo_class_SplDoublyLinkedList_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, prev, arginfo_class_SplDoublyLinkedList_prev, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, next, arginfo_class_SplDoublyLinkedList_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, valid, arginfo_class_SplDoublyLinkedList_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, unserialize, arginfo_class_SplDoublyLinkedList_unserialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, serialize, arginfo_class_SplDoublyLinkedList_serialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, __serialize, arginfo_class_SplDoublyLinkedList___serialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplDoublyLinkedList, __unserialize, arginfo_class_SplDoublyLinkedList___unserialize, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplQueue_methods[] = {
+ ZEND_MALIAS(SplDoublyLinkedList, enqueue, push, arginfo_class_SplQueue_enqueue, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplDoublyLinkedList, dequeue, shift, arginfo_class_SplQueue_dequeue, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplStack_methods[] = {
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_engine.c b/ext/spl/spl_engine.c
index 7bedefe2c4..e052471879 100644
--- a/ext/spl/spl_engine.c
+++ b/ext/spl/spl_engine.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -31,13 +29,6 @@
#include "spl_array.h"
-/* {{{ spl_instantiate */
-PHPAPI void spl_instantiate(zend_class_entry *pce, zval *object)
-{
- object_init_ex(object, pce);
-}
-/* }}} */
-
PHPAPI zend_long spl_offset_convert_to_long(zval *offset) /* {{{ */
{
zend_ulong idx;
@@ -50,7 +41,7 @@ try_again:
}
break;
case IS_DOUBLE:
- return (zend_long)Z_DVAL_P(offset);
+ return zend_dval_to_lval(Z_DVAL_P(offset));
case IS_LONG:
return Z_LVAL_P(offset);
case IS_FALSE:
diff --git a/ext/spl/spl_engine.h b/ext/spl/spl_engine.h
index c5614a691d..ef4da8b392 100644
--- a/ext/spl/spl_engine.h
+++ b/ext/spl/spl_engine.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -23,56 +21,27 @@
#include "php_spl.h"
#include "zend_interfaces.h"
-PHPAPI void spl_instantiate(zend_class_entry *pce, zval *object);
-
PHPAPI zend_long spl_offset_convert_to_long(zval *offset);
-/* {{{ spl_instantiate_arg_ex1 */
-static inline int spl_instantiate_arg_ex1(zend_class_entry *pce, zval *retval, zval *arg1)
+static inline void spl_instantiate_arg_ex1(zend_class_entry *pce, zval *retval, zval *arg1)
{
- zend_function *func = pce->constructor;
- spl_instantiate(pce, retval);
-
- zend_call_method(retval, pce, &func, ZSTR_VAL(func->common.function_name), ZSTR_LEN(func->common.function_name), NULL, 1, arg1, NULL);
- return 0;
+ object_init_ex(retval, pce);
+ zend_call_known_instance_method_with_1_params(pce->constructor, Z_OBJ_P(retval), NULL, arg1);
}
-/* }}} */
-/* {{{ spl_instantiate_arg_ex2 */
-static inline int spl_instantiate_arg_ex2(zend_class_entry *pce, zval *retval, zval *arg1, zval *arg2)
+static inline void spl_instantiate_arg_ex2(
+ zend_class_entry *pce, zval *retval, zval *arg1, zval *arg2)
{
- zend_function *func = pce->constructor;
- spl_instantiate(pce, retval);
-
- zend_call_method(retval, pce, &func, ZSTR_VAL(func->common.function_name), ZSTR_LEN(func->common.function_name), NULL, 2, arg1, arg2);
- return 0;
+ object_init_ex(retval, pce);
+ zend_call_known_instance_method_with_2_params(
+ pce->constructor, Z_OBJ_P(retval), NULL, arg1, arg2);
}
-/* }}} */
-/* {{{ spl_instantiate_arg_n */
-static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval *retval, int argc, zval *argv)
+static inline void spl_instantiate_arg_n(
+ zend_class_entry *pce, zval *retval, uint32_t argc, zval *argv)
{
- zend_function *func = pce->constructor;
- zend_fcall_info fci;
- zend_fcall_info_cache fcc;
- zval dummy;
-
- spl_instantiate(pce, retval);
-
- fci.size = sizeof(zend_fcall_info);
- ZVAL_STR(&fci.function_name, func->common.function_name);
- fci.object = Z_OBJ_P(retval);
- fci.retval = &dummy;
- fci.param_count = argc;
- fci.params = argv;
- fci.no_separation = 1;
-
- fcc.function_handler = func;
- fcc.called_scope = pce;
- fcc.object = Z_OBJ_P(retval);
-
- zend_call_function(&fci, &fcc);
+ object_init_ex(retval, pce);
+ zend_call_known_instance_method(pce->constructor, Z_OBJ_P(retval), NULL, argc, argv);
}
-/* }}} */
#endif /* SPL_ENGINE_H */
diff --git a/ext/spl/spl_exceptions.c b/ext/spl/spl_exceptions.c
index abe70c2b34..e176776a1f 100644
--- a/ext/spl/spl_exceptions.c
+++ b/ext/spl/spl_exceptions.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_exceptions.h b/ext/spl/spl_exceptions.h
index 2c36287bbb..34962dd625 100644
--- a/ext/spl/spl_exceptions.h
+++ b/ext/spl/spl_exceptions.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index bceaf2be93..4b0d186a78 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -27,6 +25,7 @@
#include "zend_exceptions.h"
#include "php_spl.h"
+#include "spl_fixedarray_arginfo.h"
#include "spl_functions.h"
#include "spl_engine.h"
#include "spl_fixedarray.h"
@@ -40,58 +39,124 @@ PHPAPI zend_class_entry *spl_ce_SplFixedArray;
ZEND_GET_MODULE(spl_fixedarray)
#endif
-typedef struct _spl_fixedarray { /* {{{ */
+typedef struct _spl_fixedarray {
zend_long size;
zval *elements;
} spl_fixedarray;
-/* }}} */
-
-typedef struct _spl_fixedarray_object { /* {{{ */
- spl_fixedarray array;
- zend_function *fptr_offset_get;
- zend_function *fptr_offset_set;
- zend_function *fptr_offset_has;
- zend_function *fptr_offset_del;
- zend_function *fptr_count;
- int current;
- int flags;
- zend_class_entry *ce_get_iterator;
- zend_object std;
+
+typedef struct _spl_fixedarray_object {
+ spl_fixedarray array;
+ zend_function *fptr_offset_get;
+ zend_function *fptr_offset_set;
+ zend_function *fptr_offset_has;
+ zend_function *fptr_offset_del;
+ zend_function *fptr_count;
+ zend_object std;
} spl_fixedarray_object;
-/* }}} */
-typedef struct _spl_fixedarray_it { /* {{{ */
- zend_user_iterator intern;
+typedef struct _spl_fixedarray_it {
+ zend_object_iterator intern;
+ zend_long current;
} spl_fixedarray_it;
-/* }}} */
-
-#define SPL_FIXEDARRAY_OVERLOADED_REWIND 0x0001
-#define SPL_FIXEDARRAY_OVERLOADED_VALID 0x0002
-#define SPL_FIXEDARRAY_OVERLOADED_KEY 0x0004
-#define SPL_FIXEDARRAY_OVERLOADED_CURRENT 0x0008
-#define SPL_FIXEDARRAY_OVERLOADED_NEXT 0x0010
-static inline spl_fixedarray_object *spl_fixed_array_from_obj(zend_object *obj) /* {{{ */ {
+static spl_fixedarray_object *spl_fixed_array_from_obj(zend_object *obj)
+{
return (spl_fixedarray_object*)((char*)(obj) - XtOffsetOf(spl_fixedarray_object, std));
}
-/* }}} */
#define Z_SPLFIXEDARRAY_P(zv) spl_fixed_array_from_obj(Z_OBJ_P((zv)))
-static void spl_fixedarray_init(spl_fixedarray *array, zend_long size) /* {{{ */
+/* Helps enforce the invariants in debug mode:
+ * - if size == 0, then elements == NULL
+ * - if size > 0, then elements != NULL
+ * - size is not less than 0
+ */
+static bool spl_fixedarray_empty(spl_fixedarray *array)
+{
+ if (array->elements) {
+ ZEND_ASSERT(array->size > 0);
+ return false;
+ }
+ ZEND_ASSERT(array->size == 0);
+ return true;
+}
+
+static void spl_fixedarray_default_ctor(spl_fixedarray *array)
+{
+ array->size = 0;
+ array->elements = NULL;
+}
+
+/* Initializes the range [from, to) to null. Does not dtor existing elements. */
+static void spl_fixedarray_init_elems(spl_fixedarray *array, zend_long from, zend_long to)
+{
+ ZEND_ASSERT(from <= to);
+ zval *begin = array->elements + from, *end = array->elements + to;
+
+ while (begin != end) {
+ ZVAL_NULL(begin++);
+ }
+}
+
+static void spl_fixedarray_init(spl_fixedarray *array, zend_long size)
{
if (size > 0) {
array->size = 0; /* reset size in case ecalloc() fails */
- array->elements = ecalloc(size, sizeof(zval));
+ array->elements = safe_emalloc(size, sizeof(zval), 0);
array->size = size;
+ spl_fixedarray_init_elems(array, 0, size);
} else {
- array->elements = NULL;
- array->size = 0;
+ spl_fixedarray_default_ctor(array);
+ }
+}
+
+/* Copies the range [begin, end) into the fixedarray, beginning at `offset`.
+ * Does not dtor the existing elements.
+ */
+static void spl_fixedarray_copy_range(spl_fixedarray *array, zend_long offset, zval *begin, zval *end)
+{
+ ZEND_ASSERT(offset >= 0);
+ ZEND_ASSERT(array->size - offset >= end - begin);
+
+ zval *to = &array->elements[offset];
+ while (begin != end) {
+ ZVAL_COPY(to++, begin++);
}
}
-/* }}} */
-static void spl_fixedarray_resize(spl_fixedarray *array, zend_long size) /* {{{ */
+static void spl_fixedarray_copy_ctor(spl_fixedarray *to, spl_fixedarray *from)
+{
+ zend_long size = from->size;
+ spl_fixedarray_init(to, size);
+
+ zval *begin = from->elements, *end = from->elements + size;
+ spl_fixedarray_copy_range(to, 0, begin, end);
+}
+
+/* Destructs the elements in the range [from, to).
+ * Caller is expected to bounds check.
+ */
+static void spl_fixedarray_dtor_range(spl_fixedarray *array, zend_long from, zend_long to)
+{
+ zval *begin = array->elements + from, *end = array->elements + to;
+ while (begin != end) {
+ zval_ptr_dtor(begin++);
+ }
+}
+
+/* Destructs and frees contents but not the array itself.
+ * If you want to re-use the array then you need to re-initialize it.
+ */
+static void spl_fixedarray_dtor(spl_fixedarray *array)
+{
+ zend_long size = array->size;
+ if (!spl_fixedarray_empty(array)) {
+ spl_fixedarray_dtor_range(array, 0, size);
+ efree(array->elements);
+ }
+}
+
+static void spl_fixedarray_resize(spl_fixedarray *array, zend_long size)
{
if (size == array->size) {
/* nothing to do */
@@ -106,44 +171,22 @@ static void spl_fixedarray_resize(spl_fixedarray *array, zend_long size) /* {{{
/* clearing the array */
if (size == 0) {
- zend_long i;
-
- for (i = 0; i < array->size; i++) {
- zval_ptr_dtor(&(array->elements[i]));
- }
-
- if (array->elements) {
- efree(array->elements);
- array->elements = NULL;
- }
+ spl_fixedarray_dtor(array);
+ array->elements = NULL;
} else if (size > array->size) {
array->elements = safe_erealloc(array->elements, size, sizeof(zval), 0);
- memset(array->elements + array->size, '\0', sizeof(zval) * (size - array->size));
+ spl_fixedarray_init_elems(array, array->size, size);
} else { /* size < array->size */
- zend_long i;
-
- for (i = size; i < array->size; i++) {
- zval_ptr_dtor(&(array->elements[i]));
- }
+ spl_fixedarray_dtor_range(array, size, array->size);
array->elements = erealloc(array->elements, sizeof(zval) * size);
}
array->size = size;
}
-/* }}} */
-
-static void spl_fixedarray_copy(spl_fixedarray *to, spl_fixedarray *from) /* {{{ */
-{
- int i;
- for (i = 0; i < from->size; i++) {
- ZVAL_COPY(&to->elements[i], &from->elements[i]);
- }
-}
-/* }}} */
-static HashTable* spl_fixedarray_object_get_gc(zval *obj, zval **table, int *n) /* {{{{ */
+static HashTable* spl_fixedarray_object_get_gc(zend_object *obj, zval **table, int *n)
{
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(obj);
+ spl_fixedarray_object *intern = spl_fixed_array_from_obj(obj);
HashTable *ht = zend_std_get_properties(obj);
*table = intern->array.elements;
@@ -151,27 +194,21 @@ static HashTable* spl_fixedarray_object_get_gc(zval *obj, zval **table, int *n)
return ht;
}
-/* }}}} */
-static HashTable* spl_fixedarray_object_get_properties(zval *obj) /* {{{{ */
+static HashTable* spl_fixedarray_object_get_properties(zend_object *obj)
{
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(obj);
+ spl_fixedarray_object *intern = spl_fixed_array_from_obj(obj);
HashTable *ht = zend_std_get_properties(obj);
- zend_long i = 0;
- if (intern->array.size > 0) {
+ if (!spl_fixedarray_empty(&intern->array)) {
zend_long j = zend_hash_num_elements(ht);
- for (i = 0; i < intern->array.size; i++) {
- if (!Z_ISUNDEF(intern->array.elements[i])) {
- zend_hash_index_update(ht, i, &intern->array.elements[i]);
- Z_TRY_ADDREF(intern->array.elements[i]);
- } else {
- zend_hash_index_update(ht, i, &EG(uninitialized_zval));
- }
+ for (zend_long i = 0; i < intern->array.size; i++) {
+ zend_hash_index_update(ht, i, &intern->array.elements[i]);
+ Z_TRY_ADDREF(intern->array.elements[i]);
}
if (j > intern->array.size) {
- for (i = intern->array.size; i < j; ++i) {
+ for (zend_long i = intern->array.size; i < j; ++i) {
zend_hash_index_del(ht, i);
}
}
@@ -179,49 +216,28 @@ static HashTable* spl_fixedarray_object_get_properties(zval *obj) /* {{{{ */
return ht;
}
-/* }}}} */
-static void spl_fixedarray_object_free_storage(zend_object *object) /* {{{ */
+static void spl_fixedarray_object_free_storage(zend_object *object)
{
spl_fixedarray_object *intern = spl_fixed_array_from_obj(object);
- zend_long i;
-
- if (intern->array.size > 0) {
- for (i = 0; i < intern->array.size; i++) {
- zval_ptr_dtor(&(intern->array.elements[i]));
- }
-
- if (intern->array.size > 0 && intern->array.elements) {
- efree(intern->array.elements);
- }
- }
-
+ spl_fixedarray_dtor(&intern->array);
zend_object_std_dtor(&intern->std);
}
-/* }}} */
-
-zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *object, int by_ref);
-static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, zval *orig, int clone_orig) /* {{{ */
+static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, zend_object *orig, bool clone_orig)
{
spl_fixedarray_object *intern;
- zend_class_entry *parent = class_type;
- int inherited = 0;
- zend_class_iterator_funcs *funcs_ptr;
+ zend_class_entry *parent = class_type;
+ bool inherited = false;
intern = zend_object_alloc(sizeof(spl_fixedarray_object), parent);
zend_object_std_init(&intern->std, class_type);
object_properties_init(&intern->std, class_type);
- intern->current = 0;
- intern->flags = 0;
-
if (orig && clone_orig) {
- spl_fixedarray_object *other = Z_SPLFIXEDARRAY_P(orig);
- intern->ce_get_iterator = other->ce_get_iterator;
- spl_fixedarray_init(&intern->array, other->array.size);
- spl_fixedarray_copy(&intern->array, &other->array);
+ spl_fixedarray_object *other = spl_fixed_array_from_obj(orig);
+ spl_fixedarray_copy_ctor(&intern->array, &other->array);
}
while (parent) {
@@ -231,38 +247,12 @@ static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, z
}
parent = parent->parent;
- inherited = 1;
+ inherited = true;
}
- if (!parent) { /* this must never happen */
- php_error_docref(NULL, E_COMPILE_ERROR, "Internal compiler error, Class is not child of SplFixedArray");
- }
+ ZEND_ASSERT(parent);
- funcs_ptr = class_type->iterator_funcs_ptr;
- if (!funcs_ptr->zf_current) {
- funcs_ptr->zf_rewind = zend_hash_str_find_ptr(&class_type->function_table, "rewind", sizeof("rewind") - 1);
- funcs_ptr->zf_valid = zend_hash_str_find_ptr(&class_type->function_table, "valid", sizeof("valid") - 1);
- funcs_ptr->zf_key = zend_hash_str_find_ptr(&class_type->function_table, "key", sizeof("key") - 1);
- funcs_ptr->zf_current = zend_hash_str_find_ptr(&class_type->function_table, "current", sizeof("current") - 1);
- funcs_ptr->zf_next = zend_hash_str_find_ptr(&class_type->function_table, "next", sizeof("next") - 1);
- }
if (inherited) {
- if (funcs_ptr->zf_rewind->common.scope != parent) {
- intern->flags |= SPL_FIXEDARRAY_OVERLOADED_REWIND;
- }
- if (funcs_ptr->zf_valid->common.scope != parent) {
- intern->flags |= SPL_FIXEDARRAY_OVERLOADED_VALID;
- }
- if (funcs_ptr->zf_key->common.scope != parent) {
- intern->flags |= SPL_FIXEDARRAY_OVERLOADED_KEY;
- }
- if (funcs_ptr->zf_current->common.scope != parent) {
- intern->flags |= SPL_FIXEDARRAY_OVERLOADED_CURRENT;
- }
- if (funcs_ptr->zf_next->common.scope != parent) {
- intern->flags |= SPL_FIXEDARRAY_OVERLOADED_NEXT;
- }
-
intern->fptr_offset_get = zend_hash_str_find_ptr(&class_type->function_table, "offsetget", sizeof("offsetget") - 1);
if (intern->fptr_offset_get->common.scope == parent) {
intern->fptr_offset_get = NULL;
@@ -287,29 +277,22 @@ static zend_object *spl_fixedarray_object_new_ex(zend_class_entry *class_type, z
return &intern->std;
}
-/* }}} */
-static zend_object *spl_fixedarray_new(zend_class_entry *class_type) /* {{{ */
+static zend_object *spl_fixedarray_new(zend_class_entry *class_type)
{
return spl_fixedarray_object_new_ex(class_type, NULL, 0);
}
-/* }}} */
-static zend_object *spl_fixedarray_object_clone(zval *zobject) /* {{{ */
+static zend_object *spl_fixedarray_object_clone(zend_object *old_object)
{
- zend_object *old_object;
- zend_object *new_object;
-
- old_object = Z_OBJ_P(zobject);
- new_object = spl_fixedarray_object_new_ex(old_object->ce, zobject, 1);
+ zend_object *new_object = spl_fixedarray_object_new_ex(old_object->ce, old_object, 1);
zend_objects_clone_members(new_object, old_object);
return new_object;
}
-/* }}} */
-static inline zval *spl_fixedarray_object_read_dimension_helper(spl_fixedarray_object *intern, zval *offset) /* {{{ */
+static zval *spl_fixedarray_object_read_dimension_helper(spl_fixedarray_object *intern, zval *offset)
{
zend_long index;
@@ -329,21 +312,18 @@ static inline zval *spl_fixedarray_object_read_dimension_helper(spl_fixedarray_o
if (index < 0 || index >= intern->array.size) {
zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0);
return NULL;
- } else if (Z_ISUNDEF(intern->array.elements[index])) {
- return NULL;
} else {
return &intern->array.elements[index];
}
}
-/* }}} */
-static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int check_empty);
+static int spl_fixedarray_object_has_dimension(zend_object *object, zval *offset, int check_empty);
-static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, int type, zval *rv) /* {{{ */
+static zval *spl_fixedarray_object_read_dimension(zend_object *object, zval *offset, int type, zval *rv)
{
spl_fixedarray_object *intern;
- intern = Z_SPLFIXEDARRAY_P(object);
+ intern = spl_fixed_array_from_obj(object);
if (type == BP_VAR_IS && !spl_fixedarray_object_has_dimension(object, offset, 0)) {
return &EG(uninitialized_zval);
@@ -367,9 +347,8 @@ static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, in
return spl_fixedarray_object_read_dimension_helper(intern, offset);
}
-/* }}} */
-static inline void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_object *intern, zval *offset, zval *value) /* {{{ */
+static void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_object *intern, zval *offset, zval *value)
{
zend_long index;
@@ -389,20 +368,17 @@ static inline void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_o
zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0);
return;
} else {
- if (!Z_ISUNDEF(intern->array.elements[index])) {
- zval_ptr_dtor(&(intern->array.elements[index]));
- }
+ zval_ptr_dtor(&(intern->array.elements[index]));
ZVAL_COPY_DEREF(&intern->array.elements[index], value);
}
}
-/* }}} */
-static void spl_fixedarray_object_write_dimension(zval *object, zval *offset, zval *value) /* {{{ */
+static void spl_fixedarray_object_write_dimension(zend_object *object, zval *offset, zval *value)
{
spl_fixedarray_object *intern;
zval tmp;
- intern = Z_SPLFIXEDARRAY_P(object);
+ intern = spl_fixed_array_from_obj(object);
if (intern->fptr_offset_set) {
if (!offset) {
@@ -420,9 +396,8 @@ static void spl_fixedarray_object_write_dimension(zval *object, zval *offset, zv
spl_fixedarray_object_write_dimension_helper(intern, offset, value);
}
-/* }}} */
-static inline void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_object *intern, zval *offset) /* {{{ */
+static void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_object *intern, zval *offset)
{
zend_long index;
@@ -437,16 +412,15 @@ static inline void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_o
return;
} else {
zval_ptr_dtor(&(intern->array.elements[index]));
- ZVAL_UNDEF(&intern->array.elements[index]);
+ ZVAL_NULL(&intern->array.elements[index]);
}
}
-/* }}} */
-static void spl_fixedarray_object_unset_dimension(zval *object, zval *offset) /* {{{ */
+static void spl_fixedarray_object_unset_dimension(zend_object *object, zval *offset)
{
spl_fixedarray_object *intern;
- intern = Z_SPLFIXEDARRAY_P(object);
+ intern = spl_fixed_array_from_obj(object);
if (intern->fptr_offset_del) {
SEPARATE_ARG_IF_REF(offset);
@@ -456,11 +430,9 @@ static void spl_fixedarray_object_unset_dimension(zval *object, zval *offset) /*
}
spl_fixedarray_object_unset_dimension_helper(intern, offset);
-
}
-/* }}} */
-static inline int spl_fixedarray_object_has_dimension_helper(spl_fixedarray_object *intern, zval *offset, int check_empty) /* {{{ */
+static int spl_fixedarray_object_has_dimension_helper(spl_fixedarray_object *intern, zval *offset, int check_empty)
{
zend_long index;
int retval;
@@ -474,28 +446,21 @@ static inline int spl_fixedarray_object_has_dimension_helper(spl_fixedarray_obje
if (index < 0 || index >= intern->array.size) {
retval = 0;
} else {
- if (Z_ISUNDEF(intern->array.elements[index])) {
- retval = 0;
- } else if (check_empty) {
- if (zend_is_true(&intern->array.elements[index])) {
- retval = 1;
- } else {
- retval = 0;
- }
- } else { /* != NULL and !check_empty */
- retval = 1;
+ if (check_empty) {
+ retval = zend_is_true(&intern->array.elements[index]);
+ } else {
+ retval = Z_TYPE(intern->array.elements[index]) != IS_NULL;
}
}
return retval;
}
-/* }}} */
-static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int check_empty) /* {{{ */
+static int spl_fixedarray_object_has_dimension(zend_object *object, zval *offset, int check_empty)
{
spl_fixedarray_object *intern;
- intern = Z_SPLFIXEDARRAY_P(object);
+ intern = spl_fixed_array_from_obj(object);
if (intern->fptr_offset_has) {
zval rv;
@@ -511,13 +476,12 @@ static int spl_fixedarray_object_has_dimension(zval *object, zval *offset, int c
return spl_fixedarray_object_has_dimension_helper(intern, offset, check_empty);
}
-/* }}} */
-static int spl_fixedarray_object_count_elements(zval *object, zend_long *count) /* {{{ */
+static int spl_fixedarray_object_count_elements(zend_object *object, zend_long *count)
{
spl_fixedarray_object *intern;
- intern = Z_SPLFIXEDARRAY_P(object);
+ intern = spl_fixed_array_from_obj(object);
if (intern->fptr_count) {
zval rv;
zend_call_method_with_0_params(object, intern->std.ce, &intern->fptr_count, "count", &rv);
@@ -532,46 +496,40 @@ static int spl_fixedarray_object_count_elements(zval *object, zend_long *count)
}
return SUCCESS;
}
-/* }}} */
-/* {{{ proto SplFixedArray::__construct([int size])
-*/
-SPL_METHOD(SplFixedArray, __construct)
+PHP_METHOD(SplFixedArray, __construct)
{
zval *object = ZEND_THIS;
spl_fixedarray_object *intern;
zend_long size = 0;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|l", &size) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &size) == FAILURE) {
+ RETURN_THROWS();
}
if (size < 0) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "array size cannot be less than zero");
- return;
+ zend_argument_value_error(1, "must be greater than or equal to 0");
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(object);
- if (intern->array.size > 0) {
+ if (!spl_fixedarray_empty(&intern->array)) {
/* called __construct() twice, bail out */
return;
}
spl_fixedarray_init(&intern->array, size);
}
-/* }}} */
-/* {{{ proto SplFixedArray::__wakeup()
-*/
-SPL_METHOD(SplFixedArray, __wakeup)
+PHP_METHOD(SplFixedArray, __wakeup)
{
spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
- HashTable *intern_ht = zend_std_get_properties(ZEND_THIS);
+ HashTable *intern_ht = zend_std_get_properties(Z_OBJ_P(ZEND_THIS));
zval *data;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (intern->array.size == 0) {
@@ -590,57 +548,42 @@ SPL_METHOD(SplFixedArray, __wakeup)
zend_hash_clean(intern_ht);
}
}
-/* }}} */
-/* {{{ proto int SplFixedArray::count(void)
-*/
-SPL_METHOD(SplFixedArray, count)
+PHP_METHOD(SplFixedArray, count)
{
zval *object = ZEND_THIS;
spl_fixedarray_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(object);
RETURN_LONG(intern->array.size);
}
-/* }}} */
-/* {{{ proto object SplFixedArray::toArray()
-*/
-SPL_METHOD(SplFixedArray, toArray)
+PHP_METHOD(SplFixedArray, toArray)
{
spl_fixedarray_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
- if (intern->array.size > 0) {
- int i = 0;
-
+ if (!spl_fixedarray_empty(&intern->array)) {
array_init(return_value);
- for (; i < intern->array.size; i++) {
- if (!Z_ISUNDEF(intern->array.elements[i])) {
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, &intern->array.elements[i]);
- Z_TRY_ADDREF(intern->array.elements[i]);
- } else {
- zend_hash_index_update(Z_ARRVAL_P(return_value), i, &EG(uninitialized_zval));
- }
+ for (zend_long i = 0; i < intern->array.size; i++) {
+ zend_hash_index_update(Z_ARRVAL_P(return_value), i, &intern->array.elements[i]);
+ Z_TRY_ADDREF(intern->array.elements[i]);
}
} else {
RETURN_EMPTY_ARRAY();
}
}
-/* }}} */
-/* {{{ proto object SplFixedArray::fromArray(array array[, bool save_indexes])
-*/
-SPL_METHOD(SplFixedArray, fromArray)
+PHP_METHOD(SplFixedArray, fromArray)
{
zval *data;
spl_fixedarray array;
@@ -649,7 +592,7 @@ SPL_METHOD(SplFixedArray, fromArray)
zend_bool save_indexes = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "a|b", &data, &save_indexes) == FAILURE) {
- return;
+ RETURN_THROWS();
}
num = zend_hash_num_elements(Z_ARRVAL_P(data));
@@ -663,7 +606,7 @@ SPL_METHOD(SplFixedArray, fromArray)
ZEND_HASH_FOREACH_KEY(Z_ARRVAL_P(data), num_index, str_index) {
if (str_index != NULL || (zend_long)num_index < 0) {
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "array must contain only positive integer keys");
- return;
+ RETURN_THROWS();
}
if (num_index > max_index) {
@@ -674,7 +617,7 @@ SPL_METHOD(SplFixedArray, fromArray)
tmp = max_index + 1;
if (tmp <= 0) {
zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "integer overflow detected");
- return;
+ RETURN_THROWS();
}
spl_fixedarray_init(&array, tmp);
@@ -701,39 +644,33 @@ SPL_METHOD(SplFixedArray, fromArray)
intern = Z_SPLFIXEDARRAY_P(return_value);
intern->array = array;
}
-/* }}} */
-/* {{{ proto int SplFixedArray::getSize(void)
-*/
-SPL_METHOD(SplFixedArray, getSize)
+PHP_METHOD(SplFixedArray, getSize)
{
zval *object = ZEND_THIS;
spl_fixedarray_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(object);
RETURN_LONG(intern->array.size);
}
-/* }}} */
-/* {{{ proto bool SplFixedArray::setSize(int size)
-*/
-SPL_METHOD(SplFixedArray, setSize)
+PHP_METHOD(SplFixedArray, setSize)
{
zval *object = ZEND_THIS;
spl_fixedarray_object *intern;
zend_long size;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &size) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (size < 0) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "array size cannot be less than zero");
- return;
+ zend_argument_value_error(1, "must be greater than or equal to 0");
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(object);
@@ -741,33 +678,30 @@ SPL_METHOD(SplFixedArray, setSize)
spl_fixedarray_resize(&intern->array, size);
RETURN_TRUE;
}
-/* }}} */
-/* {{{ proto bool SplFixedArray::offsetExists(mixed $index)
- Returns whether the requested $index exists. */
-SPL_METHOD(SplFixedArray, offsetExists)
+/* Returns whether the requested $index exists. */
+PHP_METHOD(SplFixedArray, offsetExists)
{
zval *zindex;
spl_fixedarray_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zindex) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
RETURN_BOOL(spl_fixedarray_object_has_dimension_helper(intern, zindex, 0));
-} /* }}} */
+}
-/* {{{ proto mixed SplFixedArray::offsetGet(mixed $index)
- Returns the value at the specified $index. */
-SPL_METHOD(SplFixedArray, offsetGet)
+/* Returns the value at the specified $index. */
+PHP_METHOD(SplFixedArray, offsetGet)
{
zval *zindex, *value;
spl_fixedarray_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zindex) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
@@ -778,202 +712,94 @@ SPL_METHOD(SplFixedArray, offsetGet)
} else {
RETURN_NULL();
}
-} /* }}} */
+}
-/* {{{ proto void SplFixedArray::offsetSet(mixed $index, mixed $newval)
- Sets the value at the specified $index to $newval. */
-SPL_METHOD(SplFixedArray, offsetSet)
+/* Sets the value at the specified $index to $newval. */
+PHP_METHOD(SplFixedArray, offsetSet)
{
zval *zindex, *value;
spl_fixedarray_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &zindex, &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
spl_fixedarray_object_write_dimension_helper(intern, zindex, value);
-} /* }}} */
+}
-/* {{{ proto void SplFixedArray::offsetUnset(mixed $index)
- Unsets the value at the specified $index. */
-SPL_METHOD(SplFixedArray, offsetUnset)
+/* Unsets the value at the specified $index. */
+PHP_METHOD(SplFixedArray, offsetUnset)
{
zval *zindex;
spl_fixedarray_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &zindex) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
spl_fixedarray_object_unset_dimension_helper(intern, zindex);
-} /* }}} */
-
-static void spl_fixedarray_it_dtor(zend_object_iterator *iter) /* {{{ */
-{
- spl_fixedarray_it *iterator = (spl_fixedarray_it *)iter;
-
- zend_user_it_invalidate_current(iter);
- zval_ptr_dtor(&iterator->intern.it.data);
-}
-/* }}} */
-
-static void spl_fixedarray_it_rewind(zend_object_iterator *iter) /* {{{ */
-{
- spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
-
- if (object->flags & SPL_FIXEDARRAY_OVERLOADED_REWIND) {
- zend_user_it_rewind(iter);
- } else {
- object->current = 0;
- }
}
-/* }}} */
-static int spl_fixedarray_it_valid(zend_object_iterator *iter) /* {{{ */
+/* Create a new iterator from a SplFixedArray instance. */
+PHP_METHOD(SplFixedArray, getIterator)
{
- spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
-
- if (object->flags & SPL_FIXEDARRAY_OVERLOADED_VALID) {
- return zend_user_it_valid(iter);
- }
-
- if (object->current >= 0 && object->current < object->array.size) {
- return SUCCESS;
+ if (zend_parse_parameters_none() == FAILURE) {
+ return;
}
- return FAILURE;
+ zend_create_internal_iterator_zval(return_value, ZEND_THIS);
}
-/* }}} */
-static zval *spl_fixedarray_it_get_current_data(zend_object_iterator *iter) /* {{{ */
+static void spl_fixedarray_it_dtor(zend_object_iterator *iter)
{
- zval zindex;
- spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
-
- if (object->flags & SPL_FIXEDARRAY_OVERLOADED_CURRENT) {
- return zend_user_it_get_current_data(iter);
- } else {
- zval *data;
-
- ZVAL_LONG(&zindex, object->current);
-
- data = spl_fixedarray_object_read_dimension_helper(object, &zindex);
-
- if (data == NULL) {
- data = &EG(uninitialized_zval);
- }
- return data;
- }
+ zval_ptr_dtor(&iter->data);
}
-/* }}} */
-static void spl_fixedarray_it_get_current_key(zend_object_iterator *iter, zval *key) /* {{{ */
+static void spl_fixedarray_it_rewind(zend_object_iterator *iter)
{
- spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
-
- if (object->flags & SPL_FIXEDARRAY_OVERLOADED_KEY) {
- zend_user_it_get_current_key(iter, key);
- } else {
- ZVAL_LONG(key, object->current);
- }
+ ((spl_fixedarray_it*)iter)->current = 0;
}
-/* }}} */
-static void spl_fixedarray_it_move_forward(zend_object_iterator *iter) /* {{{ */
+static int spl_fixedarray_it_valid(zend_object_iterator *iter)
{
- spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
+ spl_fixedarray_it *iterator = (spl_fixedarray_it*)iter;
+ spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
- if (object->flags & SPL_FIXEDARRAY_OVERLOADED_NEXT) {
- zend_user_it_move_forward(iter);
- } else {
- zend_user_it_invalidate_current(iter);
- object->current++;
- }
-}
-/* }}} */
-
-/* {{{ proto int SplFixedArray::key()
- Return current array key */
-SPL_METHOD(SplFixedArray, key)
-{
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
-
- if (zend_parse_parameters_none() == FAILURE) {
- return;
+ if (iterator->current >= 0 && iterator->current < object->array.size) {
+ return SUCCESS;
}
- RETURN_LONG(intern->current);
+ return FAILURE;
}
-/* }}} */
-/* {{{ proto void SplFixedArray::next()
- Move to next entry */
-SPL_METHOD(SplFixedArray, next)
+static zval *spl_fixedarray_it_get_current_data(zend_object_iterator *iter)
{
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
+ zval zindex, *data;
+ spl_fixedarray_it *iterator = (spl_fixedarray_it*)iter;
+ spl_fixedarray_object *object = Z_SPLFIXEDARRAY_P(&iter->data);
- if (zend_parse_parameters_none() == FAILURE) {
- return;
- }
-
- intern->current++;
-}
-/* }}} */
+ ZVAL_LONG(&zindex, iterator->current);
+ data = spl_fixedarray_object_read_dimension_helper(object, &zindex);
-/* {{{ proto bool SplFixedArray::valid()
- Check whether the datastructure contains more entries */
-SPL_METHOD(SplFixedArray, valid)
-{
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
-
- if (zend_parse_parameters_none() == FAILURE) {
- return;
+ if (data == NULL) {
+ data = &EG(uninitialized_zval);
}
-
- RETURN_BOOL(intern->current >= 0 && intern->current < intern->array.size);
+ return data;
}
-/* }}} */
-/* {{{ proto void SplFixedArray::rewind()
- Rewind the datastructure back to the start */
-SPL_METHOD(SplFixedArray, rewind)
+static void spl_fixedarray_it_get_current_key(zend_object_iterator *iter, zval *key)
{
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
-
- if (zend_parse_parameters_none() == FAILURE) {
- return;
- }
-
- intern->current = 0;
+ ZVAL_LONG(key, ((spl_fixedarray_it*)iter)->current);
}
-/* }}} */
-/* {{{ proto mixed|NULL SplFixedArray::current()
- Return current datastructure entry */
-SPL_METHOD(SplFixedArray, current)
+static void spl_fixedarray_it_move_forward(zend_object_iterator *iter)
{
- zval zindex, *value;
- spl_fixedarray_object *intern = Z_SPLFIXEDARRAY_P(ZEND_THIS);
-
- if (zend_parse_parameters_none() == FAILURE) {
- return;
- }
-
- ZVAL_LONG(&zindex, intern->current);
-
- value = spl_fixedarray_object_read_dimension_helper(intern, &zindex);
-
- if (value) {
- ZVAL_COPY_DEREF(return_value, value);
- } else {
- RETURN_NULL();
- }
+ ((spl_fixedarray_it*)iter)->current++;
}
-/* }}} */
/* iterator handler table */
static const zend_object_iterator_funcs spl_fixedarray_it_funcs = {
@@ -983,15 +809,16 @@ static const zend_object_iterator_funcs spl_fixedarray_it_funcs = {
spl_fixedarray_it_get_current_key,
spl_fixedarray_it_move_forward,
spl_fixedarray_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
};
-zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *object, int by_ref) /* {{{ */
+zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *object, int by_ref)
{
spl_fixedarray_it *iterator;
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
@@ -999,66 +826,15 @@ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *ob
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
- iterator->intern.it.funcs = &spl_fixedarray_it_funcs;
- iterator->intern.ce = ce;
- ZVAL_UNDEF(&iterator->intern.value);
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
+ iterator->intern.funcs = &spl_fixedarray_it_funcs;
- return &iterator->intern.it;
+ return &iterator->intern;
}
-/* }}} */
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_splfixedarray_construct, 0, 0, 0)
- ZEND_ARG_INFO(0, size)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_offsetGet, 0, 0, 1)
- ZEND_ARG_INFO(0, index)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_offsetSet, 0, 0, 2)
- ZEND_ARG_INFO(0, index)
- ZEND_ARG_INFO(0, newval)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_fixedarray_setSize, 0)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_fixedarray_fromArray, 0, 0, 1)
- ZEND_ARG_INFO(0, array)
- ZEND_ARG_INFO(0, save_indexes)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_splfixedarray_void, 0)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_funcs_SplFixedArray[] = { /* {{{ */
- SPL_ME(SplFixedArray, __construct, arginfo_splfixedarray_construct,ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, __wakeup, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, count, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, toArray, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, fromArray, arginfo_fixedarray_fromArray, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
- SPL_ME(SplFixedArray, getSize, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, setSize, arginfo_fixedarray_setSize, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, offsetExists, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, offsetGet, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, offsetSet, arginfo_fixedarray_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, offsetUnset, arginfo_fixedarray_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, rewind, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, current, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, key, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, next, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplFixedArray, valid, arginfo_splfixedarray_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-/* }}} */
-/* {{{ PHP_MINIT_FUNCTION */
PHP_MINIT_FUNCTION(spl_fixedarray)
{
- REGISTER_SPL_STD_CLASS_EX(SplFixedArray, spl_fixedarray_new, spl_funcs_SplFixedArray);
+ REGISTER_SPL_STD_CLASS_EX(SplFixedArray, spl_fixedarray_new, class_SplFixedArray_methods);
memcpy(&spl_handler_SplFixedArray, &std_object_handlers, sizeof(zend_object_handlers));
spl_handler_SplFixedArray.offset = XtOffsetOf(spl_fixedarray_object, std);
@@ -1073,7 +849,7 @@ PHP_MINIT_FUNCTION(spl_fixedarray)
spl_handler_SplFixedArray.dtor_obj = zend_objects_destroy_object;
spl_handler_SplFixedArray.free_obj = spl_fixedarray_object_free_storage;
- REGISTER_SPL_IMPLEMENTS(SplFixedArray, Iterator);
+ REGISTER_SPL_IMPLEMENTS(SplFixedArray, Aggregate);
REGISTER_SPL_IMPLEMENTS(SplFixedArray, ArrayAccess);
REGISTER_SPL_IMPLEMENTS(SplFixedArray, Countable);
@@ -1082,4 +858,3 @@ PHP_MINIT_FUNCTION(spl_fixedarray)
return SUCCESS;
}
-/* }}} */
diff --git a/ext/spl/spl_fixedarray.h b/ext/spl/spl_fixedarray.h
index 9be62d4b89..de9225c05e 100644
--- a/ext/spl/spl_fixedarray.h
+++ b/ext/spl/spl_fixedarray.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_fixedarray.stub.php b/ext/spl/spl_fixedarray.stub.php
new file mode 100644
index 0000000000..f2bb378f7a
--- /dev/null
+++ b/ext/spl/spl_fixedarray.stub.php
@@ -0,0 +1,52 @@
+<?php
+
+/** @generate-function-entries */
+
+class SplFixedArray implements IteratorAggregate, ArrayAccess, Countable
+{
+ public function __construct(int $size = 0) {}
+
+ /** @return void */
+ public function __wakeup() {}
+
+ /** @return int */
+ public function count() {}
+
+ /** @return array */
+ public function toArray() {}
+
+ /** @return SplFixedArray */
+ public static function fromArray(array $array, bool $preserveKeys = true) {}
+
+ /** @return int */
+ public function getSize() {}
+
+ /** @return bool */
+ public function setSize(int $size) {}
+
+ /**
+ * @param int $index
+ * @return bool
+ */
+ public function offsetExists($index) {}
+
+ /**
+ * @param int $index
+ * @return mixed
+ */
+ public function offsetGet($index) {}
+
+ /**
+ * @param int $index
+ * @return void
+ */
+ public function offsetSet($index, mixed $value) {}
+
+ /**
+ * @param int $index
+ * @return void
+ */
+ public function offsetUnset($index) {}
+
+ public function getIterator(): Iterator {}
+}
diff --git a/ext/spl/spl_fixedarray_arginfo.h b/ext/spl/spl_fixedarray_arginfo.h
new file mode 100644
index 0000000000..6067a3ebde
--- /dev/null
+++ b/ext/spl/spl_fixedarray_arginfo.h
@@ -0,0 +1,71 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: 831fe70055eb62135ae49321e5e5f3fe08c3d95f */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray___construct, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, size, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray___wakeup, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFixedArray_count arginfo_class_SplFixedArray___wakeup
+
+#define arginfo_class_SplFixedArray_toArray arginfo_class_SplFixedArray___wakeup
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_fromArray, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, array, IS_ARRAY, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, preserveKeys, _IS_BOOL, 0, "true")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFixedArray_getSize arginfo_class_SplFixedArray___wakeup
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_setSize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_offsetExists, 0, 0, 1)
+ ZEND_ARG_INFO(0, index)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFixedArray_offsetGet arginfo_class_SplFixedArray_offsetExists
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplFixedArray_offsetSet, 0, 0, 2)
+ ZEND_ARG_INFO(0, index)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplFixedArray_offsetUnset arginfo_class_SplFixedArray_offsetExists
+
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_SplFixedArray_getIterator, 0, 0, Iterator, 0)
+ZEND_END_ARG_INFO()
+
+
+ZEND_METHOD(SplFixedArray, __construct);
+ZEND_METHOD(SplFixedArray, __wakeup);
+ZEND_METHOD(SplFixedArray, count);
+ZEND_METHOD(SplFixedArray, toArray);
+ZEND_METHOD(SplFixedArray, fromArray);
+ZEND_METHOD(SplFixedArray, getSize);
+ZEND_METHOD(SplFixedArray, setSize);
+ZEND_METHOD(SplFixedArray, offsetExists);
+ZEND_METHOD(SplFixedArray, offsetGet);
+ZEND_METHOD(SplFixedArray, offsetSet);
+ZEND_METHOD(SplFixedArray, offsetUnset);
+ZEND_METHOD(SplFixedArray, getIterator);
+
+
+static const zend_function_entry class_SplFixedArray_methods[] = {
+ ZEND_ME(SplFixedArray, __construct, arginfo_class_SplFixedArray___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, __wakeup, arginfo_class_SplFixedArray___wakeup, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, count, arginfo_class_SplFixedArray_count, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, toArray, arginfo_class_SplFixedArray_toArray, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, fromArray, arginfo_class_SplFixedArray_fromArray, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+ ZEND_ME(SplFixedArray, getSize, arginfo_class_SplFixedArray_getSize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, setSize, arginfo_class_SplFixedArray_setSize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, offsetExists, arginfo_class_SplFixedArray_offsetExists, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, offsetGet, arginfo_class_SplFixedArray_offsetGet, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, offsetSet, arginfo_class_SplFixedArray_offsetSet, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, offsetUnset, arginfo_class_SplFixedArray_offsetUnset, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplFixedArray, getIterator, arginfo_class_SplFixedArray_getIterator, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c
index 74d7e75667..946f6e0ad9 100644
--- a/ext/spl/spl_functions.c
+++ b/ext/spl/spl_functions.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -77,7 +75,7 @@ void spl_register_property( zend_class_entry * class_entry, char *prop_name, int
/* {{{ spl_add_class_name */
void spl_add_class_name(zval *list, zend_class_entry *pce, int allow, int ce_flags)
{
- if (!allow || (allow > 0 && pce->ce_flags & ce_flags) || (allow < 0 && !(pce->ce_flags & ce_flags))) {
+ if (!allow || (allow > 0 && (pce->ce_flags & ce_flags)) || (allow < 0 && !(pce->ce_flags & ce_flags))) {
zval *tmp;
if ((tmp = zend_hash_find(Z_ARRVAL_P(list), pce->name)) == NULL) {
diff --git a/ext/spl/spl_functions.h b/ext/spl/spl_functions.h
index 2b9ff7890d..b1f0653607 100644
--- a/ext/spl/spl_functions.h
+++ b/ext/spl/spl_functions.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -33,7 +31,7 @@ typedef zend_object* (*create_object_func_t)(zend_class_entry *class_type);
spl_register_sub_class(&spl_ce_ ## class_name, spl_ce_ ## parent_class_name, # class_name, obj_ctor, funcs);
#define REGISTER_SPL_INTERFACE(class_name) \
- spl_register_interface(&spl_ce_ ## class_name, # class_name, spl_funcs_ ## class_name);
+ spl_register_interface(&spl_ce_ ## class_name, # class_name, class_ ## class_name ## _methods);
#define REGISTER_SPL_IMPLEMENTS(class_name, interface_name) \
zend_class_implements(spl_ce_ ## class_name, 1, spl_ce_ ## interface_name);
@@ -66,15 +64,4 @@ int spl_add_classes(zend_class_entry *pce, zval *list, int sub, int allow, int c
/* caller must efree(return) */
zend_string *spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len);
-#define SPL_ME(class_name, function_name, arg_info, flags) \
- PHP_ME( spl_ ## class_name, function_name, arg_info, flags)
-
-#define SPL_ABSTRACT_ME(class_name, function_name, arg_info) \
- ZEND_ABSTRACT_ME( spl_ ## class_name, function_name, arg_info)
-
-#define SPL_METHOD(class_name, function_name) \
- PHP_METHOD(spl_ ## class_name, function_name)
-
-#define SPL_MA(class_name, function_name, alias_class, alias_function, arg_info, flags) \
- PHP_MALIAS(spl_ ## alias_class, function_name, alias_function, arg_info, flags)
#endif /* PHP_FUNCTIONS_H */
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index abe13cb38f..ba1b0fd681 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -28,6 +26,7 @@
#include "spl_engine.h"
#include "spl_iterators.h"
#include "spl_heap.h"
+#include "spl_heap_arginfo.h"
#include "spl_exceptions.h"
#define PTR_HEAP_BLOCK_SIZE 64
@@ -69,7 +68,6 @@ typedef struct _spl_heap_it spl_heap_it;
struct _spl_heap_object {
spl_ptr_heap *heap;
int flags;
- zend_class_entry *ce_get_iterator;
zend_function *fptr_cmp;
zend_function *fptr_count;
zend_object std;
@@ -129,7 +127,7 @@ static void spl_ptr_heap_pqueue_elem_ctor(void *elem) { /* {{{ */
static int spl_ptr_heap_cmp_cb_helper(zval *object, spl_heap_object *heap_object, zval *a, zval *b, zend_long *result) { /* {{{ */
zval zresult;
- zend_call_method_with_2_params(object, heap_object->std.ce, &heap_object->fptr_cmp, "compare", &zresult, a, b);
+ zend_call_method_with_2_params(Z_OBJ_P(object), heap_object->std.ce, &heap_object->fptr_cmp, "compare", &zresult, a, b);
if (EG(exception)) {
return FAILURE;
@@ -163,13 +161,12 @@ static void spl_pqueue_extract_helper(zval *result, spl_pqueue_elem *elem, int f
return;
}
- ZEND_ASSERT(0);
+ ZEND_UNREACHABLE();
}
/* }}} */
static int spl_ptr_heap_zval_max_cmp(void *x, void *y, zval *object) { /* {{{ */
zval *a = x, *b = y;
- zval result;
if (EG(exception)) {
return 0;
@@ -187,14 +184,12 @@ static int spl_ptr_heap_zval_max_cmp(void *x, void *y, zval *object) { /* {{{ */
}
}
- compare_function(&result, a, b);
- return (int)Z_LVAL(result);
+ return zend_compare(a, b);
}
/* }}} */
static int spl_ptr_heap_zval_min_cmp(void *x, void *y, zval *object) { /* {{{ */
zval *a = x, *b = y;
- zval result;
if (EG(exception)) {
return 0;
@@ -212,8 +207,7 @@ static int spl_ptr_heap_zval_min_cmp(void *x, void *y, zval *object) { /* {{{ */
}
}
- compare_function(&result, b, a);
- return (int)Z_LVAL(result);
+ return zend_compare(b, a);
}
/* }}} */
@@ -222,7 +216,6 @@ static int spl_ptr_pqueue_elem_cmp(void *x, void *y, zval *object) { /* {{{ */
spl_pqueue_elem *b = y;
zval *a_priority_p = &a->priority;
zval *b_priority_p = &b->priority;
- zval result;
if (EG(exception)) {
return 0;
@@ -240,8 +233,7 @@ static int spl_ptr_pqueue_elem_cmp(void *x, void *y, zval *object) { /* {{{ */
}
}
- compare_function(&result, a_priority_p, b_priority_p);
- return (int)Z_LVAL(result);
+ return zend_compare(a_priority_p, b_priority_p);
}
/* }}} */
@@ -383,8 +375,6 @@ static int spl_ptr_heap_count(spl_ptr_heap *heap) { /* {{{ */
}
/* }}} */
-zend_object_iterator *spl_heap_get_iterator(zend_class_entry *ce, zval *object, int by_ref);
-
static void spl_heap_object_free_storage(zend_object *object) /* {{{ */
{
spl_heap_object *intern = spl_heap_from_obj(object);
@@ -395,7 +385,7 @@ static void spl_heap_object_free_storage(zend_object *object) /* {{{ */
}
/* }}} */
-static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *orig, int clone_orig) /* {{{ */
+static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zend_object *orig, int clone_orig) /* {{{ */
{
spl_heap_object *intern;
zend_class_entry *parent = class_type;
@@ -407,9 +397,8 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o
object_properties_init(&intern->std, class_type);
if (orig) {
- spl_heap_object *other = Z_SPLHEAP_P(orig);
+ spl_heap_object *other = spl_heap_from_obj(orig);
intern->std.handlers = other->std.handlers;
- intern->ce_get_iterator = other->ce_get_iterator;
if (clone_orig) {
intern->heap = spl_ptr_heap_clone(other->heap);
@@ -444,9 +433,7 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o
inherited = 1;
}
- if (!parent) { /* this must never happen */
- php_error_docref(NULL, E_COMPILE_ERROR, "Internal compiler error, Class is not child of SplHeap");
- }
+ ZEND_ASSERT(parent);
if (inherited) {
intern->fptr_cmp = zend_hash_str_find_ptr(&class_type->function_table, "compare", sizeof("compare") - 1);
@@ -469,13 +456,9 @@ static zend_object *spl_heap_object_new(zend_class_entry *class_type) /* {{{ */
}
/* }}} */
-static zend_object *spl_heap_object_clone(zval *zobject) /* {{{ */
+static zend_object *spl_heap_object_clone(zend_object *old_object) /* {{{ */
{
- zend_object *old_object;
- zend_object *new_object;
-
- old_object = Z_OBJ_P(zobject);
- new_object = spl_heap_object_new_ex(old_object->ce, zobject, 1);
+ zend_object *new_object = spl_heap_object_new_ex(old_object->ce, old_object, 1);
zend_objects_clone_members(new_object, old_object);
@@ -483,9 +466,9 @@ static zend_object *spl_heap_object_clone(zval *zobject) /* {{{ */
}
/* }}} */
-static int spl_heap_object_count_elements(zval *object, zend_long *count) /* {{{ */
+static int spl_heap_object_count_elements(zend_object *object, zend_long *count) /* {{{ */
{
- spl_heap_object *intern = Z_SPLHEAP_P(object);
+ spl_heap_object *intern = spl_heap_from_obj(object);
if (intern->fptr_count) {
zval rv;
@@ -505,8 +488,8 @@ static int spl_heap_object_count_elements(zval *object, zend_long *count) /* {{{
}
/* }}} */
-static inline HashTable* spl_heap_object_get_debug_info(zend_class_entry *ce, zval *obj) { /* {{{ */
- spl_heap_object *intern = Z_SPLHEAP_P(obj);
+static inline HashTable* spl_heap_object_get_debug_info(zend_class_entry *ce, zend_object *obj) { /* {{{ */
+ spl_heap_object *intern = spl_heap_from_obj(obj);
zval tmp, heap_array;
zend_string *pnstr;
HashTable *debug_info;
@@ -552,9 +535,9 @@ static inline HashTable* spl_heap_object_get_debug_info(zend_class_entry *ce, zv
}
/* }}} */
-static HashTable *spl_heap_object_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */
+static HashTable *spl_heap_object_get_gc(zend_object *obj, zval **gc_data, int *gc_data_count) /* {{{ */
{
- spl_heap_object *intern = Z_SPLHEAP_P(obj);
+ spl_heap_object *intern = spl_heap_from_obj(obj);
*gc_data = (zval *) intern->heap->elements;
*gc_data_count = intern->heap->count;
@@ -562,9 +545,9 @@ static HashTable *spl_heap_object_get_gc(zval *obj, zval **gc_data, int *gc_data
}
/* }}} */
-static HashTable *spl_pqueue_object_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */
+static HashTable *spl_pqueue_object_get_gc(zend_object *obj, zval **gc_data, int *gc_data_count) /* {{{ */
{
- spl_heap_object *intern = Z_SPLHEAP_P(obj);
+ spl_heap_object *intern = spl_heap_from_obj(obj);
*gc_data = (zval *) intern->heap->elements;
/* Two zvals (value and priority) per pqueue entry */
*gc_data_count = 2 * intern->heap->count;
@@ -573,15 +556,14 @@ static HashTable *spl_pqueue_object_get_gc(zval *obj, zval **gc_data, int *gc_da
}
/* }}} */
-/* {{{ proto int SplHeap::count()
- Return the number of elements in the heap. */
-SPL_METHOD(SplHeap, count)
+/* {{{ Return the number of elements in the heap. */
+PHP_METHOD(SplHeap, count)
{
zend_long count;
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
count = spl_ptr_heap_count(intern->heap);
@@ -589,36 +571,34 @@ SPL_METHOD(SplHeap, count)
}
/* }}} */
-/* {{{ proto int SplHeap::isEmpty()
- Return true if the heap is empty. */
-SPL_METHOD(SplHeap, isEmpty)
+/* {{{ Return true if the heap is empty. */
+PHP_METHOD(SplHeap, isEmpty)
{
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(spl_ptr_heap_count(intern->heap) == 0);
}
/* }}} */
-/* {{{ proto bool SplHeap::insert(mixed value)
- Push $value on the heap */
-SPL_METHOD(SplHeap, insert)
+/* {{{ Push $value on the heap */
+PHP_METHOD(SplHeap, insert)
{
zval *value;
spl_heap_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
if (intern->heap->flags & SPL_HEAP_CORRUPTED) {
zend_throw_exception(spl_ce_RuntimeException, "Heap is corrupted, heap properties are no longer ensured.", 0);
- return;
+ RETURN_THROWS();
}
Z_TRY_ADDREF_P(value);
@@ -628,47 +608,45 @@ SPL_METHOD(SplHeap, insert)
}
/* }}} */
-/* {{{ proto mixed SplHeap::extract()
- extract the element out of the top of the heap */
-SPL_METHOD(SplHeap, extract)
+/* {{{ extract the element out of the top of the heap */
+PHP_METHOD(SplHeap, extract)
{
spl_heap_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
if (intern->heap->flags & SPL_HEAP_CORRUPTED) {
zend_throw_exception(spl_ce_RuntimeException, "Heap is corrupted, heap properties are no longer ensured.", 0);
- return;
+ RETURN_THROWS();
}
if (spl_ptr_heap_delete_top(intern->heap, return_value, ZEND_THIS) == FAILURE) {
zend_throw_exception(spl_ce_RuntimeException, "Can't extract from an empty heap", 0);
- return;
+ RETURN_THROWS();
}
}
/* }}} */
-/* {{{ proto bool SplPriorityQueue::insert(mixed value, mixed priority)
- Push $value with the priority $priodiry on the priorityqueue */
-SPL_METHOD(SplPriorityQueue, insert)
+/* {{{ Push $value with the priority $priodiry on the priorityqueue */
+PHP_METHOD(SplPriorityQueue, insert)
{
zval *data, *priority;
spl_heap_object *intern;
spl_pqueue_elem elem;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &data, &priority) == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
if (intern->heap->flags & SPL_HEAP_CORRUPTED) {
zend_throw_exception(spl_ce_RuntimeException, "Heap is corrupted, heap properties are no longer ensured.", 0);
- return;
+ RETURN_THROWS();
}
ZVAL_COPY(&elem.data, data);
@@ -680,27 +658,26 @@ SPL_METHOD(SplPriorityQueue, insert)
}
/* }}} */
-/* {{{ proto mixed SplPriorityQueue::extract()
- extract the element out of the top of the priority queue */
-SPL_METHOD(SplPriorityQueue, extract)
+/* {{{ extract the element out of the top of the priority queue */
+PHP_METHOD(SplPriorityQueue, extract)
{
spl_pqueue_elem elem;
spl_heap_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
if (intern->heap->flags & SPL_HEAP_CORRUPTED) {
zend_throw_exception(spl_ce_RuntimeException, "Heap is corrupted, heap properties are no longer ensured.", 0);
- return;
+ RETURN_THROWS();
}
if (spl_ptr_heap_delete_top(intern->heap, &elem, ZEND_THIS) == FAILURE) {
zend_throw_exception(spl_ce_RuntimeException, "Can't extract from an empty heap", 0);
- return;
+ RETURN_THROWS();
}
spl_pqueue_extract_helper(return_value, &elem, intern->flags);
@@ -708,29 +685,28 @@ SPL_METHOD(SplPriorityQueue, extract)
}
/* }}} */
-/* {{{ proto mixed SplPriorityQueue::top()
- Peek at the top element of the priority queue */
-SPL_METHOD(SplPriorityQueue, top)
+/* {{{ Peek at the top element of the priority queue */
+PHP_METHOD(SplPriorityQueue, top)
{
spl_heap_object *intern;
spl_pqueue_elem *elem;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
if (intern->heap->flags & SPL_HEAP_CORRUPTED) {
zend_throw_exception(spl_ce_RuntimeException, "Heap is corrupted, heap properties are no longer ensured.", 0);
- return;
+ RETURN_THROWS();
}
elem = spl_ptr_heap_top(intern->heap);
if (!elem) {
zend_throw_exception(spl_ce_RuntimeException, "Can't peek at an empty heap", 0);
- return;
+ RETURN_THROWS();
}
spl_pqueue_extract_helper(return_value, elem, intern->flags);
@@ -738,21 +714,20 @@ SPL_METHOD(SplPriorityQueue, top)
/* }}} */
-/* {{{ proto int SplPriorityQueue::setExtractFlags(int flags)
- Set the flags of extraction*/
-SPL_METHOD(SplPriorityQueue, setExtractFlags)
+/* {{{ Set the flags of extraction*/
+PHP_METHOD(SplPriorityQueue, setExtractFlags)
{
zend_long value;
spl_heap_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
value &= SPL_PQUEUE_EXTR_MASK;
if (!value) {
zend_throw_exception(spl_ce_RuntimeException, "Must specify at least one extract flag", 0);
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
@@ -761,14 +736,13 @@ SPL_METHOD(SplPriorityQueue, setExtractFlags)
}
/* }}} */
-/* {{{ proto int SplPriorityQueue::getExtractFlags()
- Get the flags of extraction*/
-SPL_METHOD(SplPriorityQueue, getExtractFlags)
+/* {{{ Get the flags of extraction*/
+PHP_METHOD(SplPriorityQueue, getExtractFlags)
{
spl_heap_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
@@ -777,14 +751,13 @@ SPL_METHOD(SplPriorityQueue, getExtractFlags)
}
/* }}} */
-/* {{{ proto int SplHeap::recoverFromCorruption()
- Recover from a corrupted state*/
-SPL_METHOD(SplHeap, recoverFromCorruption)
+/* {{{ Recover from a corrupted state*/
+PHP_METHOD(SplHeap, recoverFromCorruption)
{
spl_heap_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
@@ -795,14 +768,13 @@ SPL_METHOD(SplHeap, recoverFromCorruption)
}
/* }}} */
-/* {{{ proto int SplHeap::isCorrupted()
- Tells if the heap is in a corrupted state*/
-SPL_METHOD(SplHeap, isCorrupted)
+/* {{{ Tells if the heap is in a corrupted state*/
+PHP_METHOD(SplHeap, isCorrupted)
{
spl_heap_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
@@ -811,71 +783,67 @@ SPL_METHOD(SplHeap, isCorrupted)
}
/* }}} */
-/* {{{ proto bool SplPriorityQueue::compare(mixed $value1, mixed $value2)
- compare the priorities */
-SPL_METHOD(SplPriorityQueue, compare)
+/* {{{ compare the priorities */
+PHP_METHOD(SplPriorityQueue, compare)
{
zval *a, *b;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &a, &b) == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(spl_ptr_heap_zval_max_cmp(a, b, NULL));
}
/* }}} */
-/* {{{ proto mixed SplHeap::top()
- Peek at the top element of the heap */
-SPL_METHOD(SplHeap, top)
+/* {{{ Peek at the top element of the heap */
+PHP_METHOD(SplHeap, top)
{
zval *value;
spl_heap_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
intern = Z_SPLHEAP_P(ZEND_THIS);
if (intern->heap->flags & SPL_HEAP_CORRUPTED) {
zend_throw_exception(spl_ce_RuntimeException, "Heap is corrupted, heap properties are no longer ensured.", 0);
- return;
+ RETURN_THROWS();
}
value = spl_ptr_heap_top(intern->heap);
if (!value) {
zend_throw_exception(spl_ce_RuntimeException, "Can't peek at an empty heap", 0);
- return;
+ RETURN_THROWS();
}
ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
-/* {{{ proto bool SplMinHeap::compare(mixed $value1, mixed $value2)
- compare the values */
-SPL_METHOD(SplMinHeap, compare)
+/* {{{ compare the values */
+PHP_METHOD(SplMinHeap, compare)
{
zval *a, *b;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &a, &b) == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(spl_ptr_heap_zval_min_cmp(a, b, NULL));
}
/* }}} */
-/* {{{ proto bool SplMaxHeap::compare(mixed $value1, mixed $value2)
- compare the values */
-SPL_METHOD(SplMaxHeap, compare)
+/* {{{ compare the values */
+PHP_METHOD(SplMaxHeap, compare)
{
zval *a, *b;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "zz", &a, &b) == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(spl_ptr_heap_zval_max_cmp(a, b, NULL));
@@ -964,67 +932,62 @@ static void spl_heap_it_move_forward(zend_object_iterator *iter) /* {{{ */
}
/* }}} */
-/* {{{ proto int SplHeap::key()
- Return current array key */
-SPL_METHOD(SplHeap, key)
+/* {{{ Return current array key */
+PHP_METHOD(SplHeap, key)
{
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->heap->count - 1);
}
/* }}} */
-/* {{{ proto void SplHeap::next()
- Move to next entry */
-SPL_METHOD(SplHeap, next)
+/* {{{ Move to next entry */
+PHP_METHOD(SplHeap, next)
{
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_ptr_heap_delete_top(intern->heap, NULL, ZEND_THIS);
}
/* }}} */
-/* {{{ proto bool SplHeap::valid()
- Check whether the datastructure contains more entries */
-SPL_METHOD(SplHeap, valid)
+/* {{{ Check whether the datastructure contains more entries */
+PHP_METHOD(SplHeap, valid)
{
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(intern->heap->count != 0);
}
/* }}} */
-/* {{{ proto void SplHeap::rewind()
- Rewind the datastructure back to the start */
-SPL_METHOD(SplHeap, rewind)
+/* {{{ Rewind the datastructure back to the start */
+PHP_METHOD(SplHeap, rewind)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* do nothing, the iterator always points to the top element */
}
/* }}} */
-/* {{{ proto mixed|NULL SplHeap::current()
- Return current datastructure entry */
-SPL_METHOD(SplHeap, current)
+/* {{{ Return current datastructure entry */
+PHP_METHOD(SplHeap, current)
{
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (!intern->heap->count) {
@@ -1036,14 +999,13 @@ SPL_METHOD(SplHeap, current)
}
/* }}} */
-/* {{{ proto mixed|NULL SplPriorityQueue::current()
- Return current datastructure entry */
-SPL_METHOD(SplPriorityQueue, current)
+/* {{{ Return current datastructure entry */
+PHP_METHOD(SplPriorityQueue, current)
{
spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (!intern->heap->count) {
@@ -1055,24 +1017,24 @@ SPL_METHOD(SplPriorityQueue, current)
}
/* }}} */
-/* {{{ proto void SplHeap::__debugInfo() */
-SPL_METHOD(SplHeap, __debugInfo)
+/* {{{ */
+PHP_METHOD(SplHeap, __debugInfo)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- RETURN_ARR(spl_heap_object_get_debug_info(spl_ce_SplHeap, getThis()));
+ RETURN_ARR(spl_heap_object_get_debug_info(spl_ce_SplHeap, Z_OBJ_P(ZEND_THIS)));
} /* }}} */
-/* {{{ proto void SplPriorityQueue::__debugInfo() */
-SPL_METHOD(SplPriorityQueue, __debugInfo)
+/* {{{ */
+PHP_METHOD(SplPriorityQueue, __debugInfo)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- RETURN_ARR(spl_heap_object_get_debug_info(spl_ce_SplPriorityQueue, getThis()));
+ RETURN_ARR(spl_heap_object_get_debug_info(spl_ce_SplPriorityQueue, Z_OBJ_P(ZEND_THIS)));
} /* }}} */
/* iterator handler table */
@@ -1083,7 +1045,8 @@ static const zend_object_iterator_funcs spl_heap_it_funcs = {
spl_heap_it_get_current_key,
spl_heap_it_move_forward,
spl_heap_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
};
static const zend_object_iterator_funcs spl_pqueue_it_funcs = {
@@ -1093,7 +1056,8 @@ static const zend_object_iterator_funcs spl_pqueue_it_funcs = {
spl_heap_it_get_current_key,
spl_heap_it_move_forward,
spl_heap_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
};
zend_object_iterator *spl_heap_get_iterator(zend_class_entry *ce, zval *object, int by_ref) /* {{{ */
@@ -1102,7 +1066,7 @@ zend_object_iterator *spl_heap_get_iterator(zend_class_entry *ce, zval *object,
spl_heap_object *heap_object = Z_SPLHEAP_P(object);
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
@@ -1127,7 +1091,7 @@ zend_object_iterator *spl_pqueue_get_iterator(zend_class_entry *ce, zval *object
spl_heap_object *heap_object = Z_SPLHEAP_P(object);
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
@@ -1147,78 +1111,9 @@ zend_object_iterator *spl_pqueue_get_iterator(zend_class_entry *ce, zval *object
}
/* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_heap_insert, 0)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_heap_compare, 0)
- ZEND_ARG_INFO(0, value1)
- ZEND_ARG_INFO(0, value2)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_pqueue_insert, 0)
- ZEND_ARG_INFO(0, value)
- ZEND_ARG_INFO(0, priority)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_pqueue_setflags, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_splheap_void, 0)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_funcs_SplMinHeap[] = {
- SPL_ME(SplMinHeap, compare, arginfo_heap_compare, ZEND_ACC_PROTECTED)
- PHP_FE_END
-};
-static const zend_function_entry spl_funcs_SplMaxHeap[] = {
- SPL_ME(SplMaxHeap, compare, arginfo_heap_compare, ZEND_ACC_PROTECTED)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_funcs_SplPriorityQueue[] = {
- SPL_ME(SplPriorityQueue, compare, arginfo_heap_compare, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, insert, arginfo_pqueue_insert, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, setExtractFlags, arginfo_pqueue_setflags, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, getExtractFlags, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, top, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, extract, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, count, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, isEmpty, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, rewind, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, current, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, key, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, next, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, valid, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, recoverFromCorruption, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, isCorrupted, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplPriorityQueue, __debugInfo, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_funcs_SplHeap[] = {
- SPL_ME(SplHeap, extract, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, insert, arginfo_heap_insert, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, top, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, count, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, isEmpty, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, rewind, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, current, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, key, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, next, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, valid, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, recoverFromCorruption, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, isCorrupted, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- SPL_ME(SplHeap, __debugInfo, arginfo_splheap_void, ZEND_ACC_PUBLIC)
- ZEND_FENTRY(compare, NULL, NULL, ZEND_ACC_PROTECTED|ZEND_ACC_ABSTRACT)
- PHP_FE_END
-};
-/* }}} */
-
PHP_MINIT_FUNCTION(spl_heap) /* {{{ */
{
- REGISTER_SPL_STD_CLASS_EX(SplHeap, spl_heap_object_new, spl_funcs_SplHeap);
+ REGISTER_SPL_STD_CLASS_EX(SplHeap, spl_heap_object_new, class_SplHeap_methods);
memcpy(&spl_handler_SplHeap, &std_object_handlers, sizeof(zend_object_handlers));
spl_handler_SplHeap.offset = XtOffsetOf(spl_heap_object, std);
@@ -1233,13 +1128,13 @@ PHP_MINIT_FUNCTION(spl_heap) /* {{{ */
spl_ce_SplHeap->get_iterator = spl_heap_get_iterator;
- REGISTER_SPL_SUB_CLASS_EX(SplMinHeap, SplHeap, spl_heap_object_new, spl_funcs_SplMinHeap);
- REGISTER_SPL_SUB_CLASS_EX(SplMaxHeap, SplHeap, spl_heap_object_new, spl_funcs_SplMaxHeap);
+ REGISTER_SPL_SUB_CLASS_EX(SplMinHeap, SplHeap, spl_heap_object_new, class_SplMinHeap_methods);
+ REGISTER_SPL_SUB_CLASS_EX(SplMaxHeap, SplHeap, spl_heap_object_new, class_SplMaxHeap_methods);
spl_ce_SplMaxHeap->get_iterator = spl_heap_get_iterator;
spl_ce_SplMinHeap->get_iterator = spl_heap_get_iterator;
- REGISTER_SPL_STD_CLASS_EX(SplPriorityQueue, spl_heap_object_new, spl_funcs_SplPriorityQueue);
+ REGISTER_SPL_STD_CLASS_EX(SplPriorityQueue, spl_heap_object_new, class_SplPriorityQueue_methods);
memcpy(&spl_handler_SplPriorityQueue, &std_object_handlers, sizeof(zend_object_handlers));
spl_handler_SplPriorityQueue.offset = XtOffsetOf(spl_heap_object, std);
diff --git a/ext/spl/spl_heap.h b/ext/spl/spl_heap.h
index d73fca545e..512e94783d 100644
--- a/ext/spl/spl_heap.h
+++ b/ext/spl/spl_heap.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_heap.stub.php b/ext/spl/spl_heap.stub.php
new file mode 100644
index 0000000000..8c01068eae
--- /dev/null
+++ b/ext/spl/spl_heap.stub.php
@@ -0,0 +1,135 @@
+<?php
+
+/** @generate-function-entries */
+
+class SplPriorityQueue implements Iterator, Countable
+{
+ /** @return int */
+ public function compare(mixed $priority1, mixed $priority2) {}
+
+ /** @return bool */
+ public function insert(mixed $value, mixed $priority) {}
+
+ /** @return int */
+ public function setExtractFlags(int $flags) {}
+
+ /** @return mixed */
+ public function top() {}
+
+ /** @return mixed */
+ public function extract() {}
+
+ /**
+ * @return int
+ * @implementation-alias SplHeap::count
+ */
+ public function count() {}
+
+ /**
+ * @return bool
+ * @implementation-alias SplHeap::isEmpty
+ */
+ public function isEmpty() {}
+
+ /**
+ * @return void
+ * @implementation-alias SplHeap::rewind
+ */
+ public function rewind() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /**
+ * @return int
+ * @implementation-alias SplHeap::key
+ */
+ public function key() {}
+
+ /**
+ * @return void
+ * @implementation-alias SplHeap::next
+ */
+ public function next() {}
+
+ /**
+ * @return bool
+ * @implementation-alias SplHeap::valid
+ */
+ public function valid() {}
+
+ /**
+ * @return bool
+ * @implementation-alias SplHeap::recoverFromCorruption
+ */
+ public function recoverFromCorruption() {}
+
+ /**
+ * @return bool
+ * @implementation-alias SplHeap::isCorrupted
+ */
+ public function isCorrupted() {}
+
+ /** @return int */
+ public function getExtractFlags() {}
+
+ /** @return array */
+ public function __debugInfo() {}
+}
+
+abstract class SplHeap implements Iterator, Countable
+{
+ /** @return mixed */
+ public function extract() {}
+
+ /** @return bool */
+ public function insert(mixed $value) {}
+
+ /** @return mixed */
+ public function top() {}
+
+ /** @return int */
+ public function count() {}
+
+ /** @return bool */
+ public function isEmpty() {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return int */
+ public function key() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return bool */
+ public function recoverFromCorruption() {}
+
+ /** @return int */
+ abstract protected function compare(mixed $value1, mixed $value2);
+
+ /** @return bool */
+ public function isCorrupted() {}
+
+ /** @return array */
+ public function __debugInfo() {}
+}
+
+class SplMinHeap extends SplHeap
+{
+ /** @return int */
+ protected function compare(mixed $value1, mixed $value2) {}
+}
+
+class SplMaxHeap extends SplHeap
+{
+ /** @return int */
+ protected function compare(mixed $value1, mixed $value2) {}
+}
diff --git a/ext/spl/spl_heap_arginfo.h b/ext/spl/spl_heap_arginfo.h
new file mode 100644
index 0000000000..aede7a3daf
--- /dev/null
+++ b/ext/spl/spl_heap_arginfo.h
@@ -0,0 +1,157 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: 510a58000a5473c4cbb33886f43b9f3050b3a36d */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_compare, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, priority1, IS_MIXED, 0)
+ ZEND_ARG_TYPE_INFO(0, priority2, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_insert, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ ZEND_ARG_TYPE_INFO(0, priority, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_setExtractFlags, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplPriorityQueue_top, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplPriorityQueue_extract arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_count arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_isEmpty arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_rewind arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_current arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_key arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_next arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_valid arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_recoverFromCorruption arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_isCorrupted arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue_getExtractFlags arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplPriorityQueue___debugInfo arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_extract arginfo_class_SplPriorityQueue_top
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplHeap_insert, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplHeap_top arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_count arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_isEmpty arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_rewind arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_current arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_key arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_next arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_valid arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap_recoverFromCorruption arginfo_class_SplPriorityQueue_top
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplHeap_compare, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, value1, IS_MIXED, 0)
+ ZEND_ARG_TYPE_INFO(0, value2, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplHeap_isCorrupted arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplHeap___debugInfo arginfo_class_SplPriorityQueue_top
+
+#define arginfo_class_SplMinHeap_compare arginfo_class_SplHeap_compare
+
+#define arginfo_class_SplMaxHeap_compare arginfo_class_SplHeap_compare
+
+
+ZEND_METHOD(SplPriorityQueue, compare);
+ZEND_METHOD(SplPriorityQueue, insert);
+ZEND_METHOD(SplPriorityQueue, setExtractFlags);
+ZEND_METHOD(SplPriorityQueue, top);
+ZEND_METHOD(SplPriorityQueue, extract);
+ZEND_METHOD(SplHeap, count);
+ZEND_METHOD(SplHeap, isEmpty);
+ZEND_METHOD(SplHeap, rewind);
+ZEND_METHOD(SplPriorityQueue, current);
+ZEND_METHOD(SplHeap, key);
+ZEND_METHOD(SplHeap, next);
+ZEND_METHOD(SplHeap, valid);
+ZEND_METHOD(SplHeap, recoverFromCorruption);
+ZEND_METHOD(SplHeap, isCorrupted);
+ZEND_METHOD(SplPriorityQueue, getExtractFlags);
+ZEND_METHOD(SplPriorityQueue, __debugInfo);
+ZEND_METHOD(SplHeap, extract);
+ZEND_METHOD(SplHeap, insert);
+ZEND_METHOD(SplHeap, top);
+ZEND_METHOD(SplHeap, current);
+ZEND_METHOD(SplHeap, __debugInfo);
+ZEND_METHOD(SplMinHeap, compare);
+ZEND_METHOD(SplMaxHeap, compare);
+
+
+static const zend_function_entry class_SplPriorityQueue_methods[] = {
+ ZEND_ME(SplPriorityQueue, compare, arginfo_class_SplPriorityQueue_compare, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, insert, arginfo_class_SplPriorityQueue_insert, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, setExtractFlags, arginfo_class_SplPriorityQueue_setExtractFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, top, arginfo_class_SplPriorityQueue_top, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, extract, arginfo_class_SplPriorityQueue_extract, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, count, count, arginfo_class_SplPriorityQueue_count, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, isEmpty, isEmpty, arginfo_class_SplPriorityQueue_isEmpty, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, rewind, rewind, arginfo_class_SplPriorityQueue_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, current, arginfo_class_SplPriorityQueue_current, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, key, key, arginfo_class_SplPriorityQueue_key, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, next, next, arginfo_class_SplPriorityQueue_next, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, valid, valid, arginfo_class_SplPriorityQueue_valid, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, recoverFromCorruption, recoverFromCorruption, arginfo_class_SplPriorityQueue_recoverFromCorruption, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplHeap, isCorrupted, isCorrupted, arginfo_class_SplPriorityQueue_isCorrupted, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, getExtractFlags, arginfo_class_SplPriorityQueue_getExtractFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplPriorityQueue, __debugInfo, arginfo_class_SplPriorityQueue___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplHeap_methods[] = {
+ ZEND_ME(SplHeap, extract, arginfo_class_SplHeap_extract, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, insert, arginfo_class_SplHeap_insert, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, top, arginfo_class_SplHeap_top, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, count, arginfo_class_SplHeap_count, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, isEmpty, arginfo_class_SplHeap_isEmpty, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, rewind, arginfo_class_SplHeap_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, current, arginfo_class_SplHeap_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, key, arginfo_class_SplHeap_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, next, arginfo_class_SplHeap_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, valid, arginfo_class_SplHeap_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, recoverFromCorruption, arginfo_class_SplHeap_recoverFromCorruption, ZEND_ACC_PUBLIC)
+ ZEND_ABSTRACT_ME_WITH_FLAGS(SplHeap, compare, arginfo_class_SplHeap_compare, ZEND_ACC_PROTECTED|ZEND_ACC_ABSTRACT)
+ ZEND_ME(SplHeap, isCorrupted, arginfo_class_SplHeap_isCorrupted, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplHeap, __debugInfo, arginfo_class_SplHeap___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplMinHeap_methods[] = {
+ ZEND_ME(SplMinHeap, compare, arginfo_class_SplMinHeap_compare, ZEND_ACC_PROTECTED)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplMaxHeap_methods[] = {
+ ZEND_ME(SplMaxHeap, compare, arginfo_class_SplMaxHeap_compare, ZEND_ACC_PROTECTED)
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 7dd4b29c05..40538cda8e 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -30,6 +28,7 @@
#include "spl_functions.h"
#include "spl_engine.h"
#include "spl_iterators.h"
+#include "spl_iterators_arginfo.h"
#include "spl_directory.h"
#include "spl_array.h"
#include "spl_exceptions.h"
@@ -60,15 +59,6 @@ PHPAPI zend_class_entry *spl_ce_RegexIterator;
PHPAPI zend_class_entry *spl_ce_RecursiveRegexIterator;
PHPAPI zend_class_entry *spl_ce_RecursiveTreeIterator;
-ZEND_BEGIN_ARG_INFO(arginfo_recursive_it_void, 0)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_funcs_RecursiveIterator[] = {
- SPL_ABSTRACT_ME(RecursiveIterator, hasChildren, arginfo_recursive_it_void)
- SPL_ABSTRACT_ME(RecursiveIterator, getChildren, arginfo_recursive_it_void)
- PHP_FE_END
-};
-
typedef enum {
RIT_LEAVES_ONLY = 0,
RIT_SELF_FIRST = 1,
@@ -135,9 +125,8 @@ static inline spl_recursive_it_object *spl_recursive_it_from_obj(zend_object *ob
do { \
spl_dual_it_object *it = Z_SPLDUAL_IT_P(objzval); \
if (it->dit_type == DIT_Unknown) { \
- zend_throw_exception_ex(spl_ce_LogicException, 0, \
- "The object is in an invalid state as the parent constructor was not called"); \
- return; \
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called"); \
+ RETURN_THROWS(); \
} \
(var) = it; \
} while (0)
@@ -145,8 +134,7 @@ static inline spl_recursive_it_object *spl_recursive_it_from_obj(zend_object *ob
#define SPL_FETCH_SUB_ELEMENT(var, object, element) \
do { \
if(!(object)->iterators) { \
- zend_throw_exception_ex(spl_ce_LogicException, 0, \
- "The object is in an invalid state as the parent constructor was not called"); \
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called"); \
return; \
} \
(var) = (object)->iterators[(object)->level].element; \
@@ -155,9 +143,8 @@ static inline spl_recursive_it_object *spl_recursive_it_from_obj(zend_object *ob
#define SPL_FETCH_SUB_ELEMENT_ADDR(var, object, element) \
do { \
if(!(object)->iterators) { \
- zend_throw_exception_ex(spl_ce_LogicException, 0, \
- "The object is in an invalid state as the parent constructor was not called"); \
- return; \
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called"); \
+ RETURN_THROWS(); \
} \
(var) = &(object)->iterators[(object)->level].element; \
} while (0)
@@ -201,7 +188,7 @@ static int spl_recursive_it_valid_ex(spl_recursive_it_object *object, zval *zthi
level--;
}
if (object->endIteration && object->in_iteration) {
- zend_call_method_with_0_params(zthis, object->ce, &object->endIteration, "endIteration", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->endIteration, "endIteration", NULL);
}
object->in_iteration = 0;
return FAILURE;
@@ -267,9 +254,9 @@ next_step:
ce = object->iterators[object->level].ce;
zobject = &object->iterators[object->level].zobject;
if (object->callHasChildren) {
- zend_call_method_with_0_params(zthis, object->ce, &object->callHasChildren, "callHasChildren", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->callHasChildren, "callHasChildren", &retval);
} else {
- zend_call_method_with_0_params(zobject, ce, NULL, "haschildren", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(zobject), ce, NULL, "haschildren", &retval);
}
if (EG(exception)) {
if (!(object->flags & RIT_CATCH_GET_CHILD)) {
@@ -304,7 +291,7 @@ next_step:
}
}
if (object->nextElement) {
- zend_call_method_with_0_params(zthis, object->ce, &object->nextElement, "nextelement", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->nextElement, "nextelement", NULL);
}
object->iterators[object->level].state = RS_NEXT;
if (EG(exception)) {
@@ -317,7 +304,7 @@ next_step:
return /* self */;
case RS_SELF:
if (object->nextElement && (object->mode == RIT_SELF_FIRST || object->mode == RIT_CHILD_FIRST)) {
- zend_call_method_with_0_params(zthis, object->ce, &object->nextElement, "nextelement", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->nextElement, "nextelement", NULL);
}
if (object->mode == RIT_SELF_FIRST) {
object->iterators[object->level].state = RS_CHILD;
@@ -329,9 +316,9 @@ next_step:
ce = object->iterators[object->level].ce;
zobject = &object->iterators[object->level].zobject;
if (object->callGetChildren) {
- zend_call_method_with_0_params(zthis, object->ce, &object->callGetChildren, "callGetChildren", &child);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->callGetChildren, "callGetChildren", &child);
} else {
- zend_call_method_with_0_params(zobject, ce, NULL, "getchildren", &child);
+ zend_call_method_with_0_params(Z_OBJ_P(zobject), ce, NULL, "getchildren", &child);
}
if (EG(exception)) {
@@ -367,7 +354,7 @@ next_step:
sub_iter->funcs->rewind(sub_iter);
}
if (object->beginChildren) {
- zend_call_method_with_0_params(zthis, object->ce, &object->beginChildren, "beginchildren", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->beginChildren, "beginchildren", NULL);
if (EG(exception)) {
if (!(object->flags & RIT_CATCH_GET_CHILD)) {
return;
@@ -381,7 +368,7 @@ next_step:
/* no more elements */
if (object->level > 0) {
if (object->endChildren) {
- zend_call_method_with_0_params(zthis, object->ce, &object->endChildren, "endchildren", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->endChildren, "endchildren", NULL);
if (EG(exception)) {
if (!(object->flags & RIT_CATCH_GET_CHILD)) {
return;
@@ -415,7 +402,7 @@ static void spl_recursive_it_rewind_ex(spl_recursive_it_object *object, zval *zt
zend_iterator_dtor(sub_iter);
zval_ptr_dtor(&object->iterators[object->level--].zobject);
if (!EG(exception) && (!object->endChildren || object->endChildren->common.scope != spl_ce_RecursiveIteratorIterator)) {
- zend_call_method_with_0_params(zthis, object->ce, &object->endChildren, "endchildren", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->endChildren, "endchildren", NULL);
}
}
object->iterators = erealloc(object->iterators, sizeof(spl_sub_iterator));
@@ -425,7 +412,7 @@ static void spl_recursive_it_rewind_ex(spl_recursive_it_object *object, zval *zt
sub_iter->funcs->rewind(sub_iter);
}
if (!EG(exception) && object->beginIteration && !object->in_iteration) {
- zend_call_method_with_0_params(zthis, object->ce, &object->beginIteration, "beginIteration", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->beginIteration, "beginIteration", NULL);
}
object->in_iteration = 1;
spl_recursive_it_move_forward_ex(object, zthis);
@@ -448,7 +435,8 @@ static const zend_object_iterator_funcs spl_recursive_it_iterator_funcs = {
spl_recursive_it_get_current_key,
spl_recursive_it_move_forward,
spl_recursive_it_rewind,
- NULL
+ NULL,
+ NULL, /* get_gc */
};
static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce, zval *zobject, int by_ref)
@@ -457,20 +445,19 @@ static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce,
spl_recursive_it_object *object;
if (by_ref) {
- zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+ zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
return NULL;
}
iterator = emalloc(sizeof(spl_recursive_it_iterator));
object = Z_SPLRECURSIVE_IT_P(zobject);
if (object->iterators == NULL) {
- zend_error(E_ERROR, "The object to be iterated is in an invalid state: "
- "the parent constructor has not been called");
+ zend_throw_error(NULL, "Object is not initialized");
+ return NULL;
}
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(zobject);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(zobject));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(zobject));
iterator->intern.funcs = &spl_recursive_it_iterator_funcs;
return (zend_object_iterator*)iterator;
}
@@ -485,56 +472,55 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla
zend_error_handling error_handling;
zval caching_it, aggregate_retval;
- zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
-
switch (rit_type) {
case RIT_RecursiveTreeIterator: {
- zval caching_it_flags, *user_caching_it_flags = NULL;
+ zval caching_it_flags;
+ zend_long user_caching_it_flags = CIT_CATCH_GET_CHILD;
mode = RIT_SELF_FIRST;
flags = RTIT_BYPASS_KEY;
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "o|lzl", &iterator, &flags, &user_caching_it_flags, &mode) == SUCCESS) {
- if (instanceof_function(Z_OBJCE_P(iterator), zend_ce_aggregate)) {
- zend_call_method_with_0_params(iterator, Z_OBJCE_P(iterator), &Z_OBJCE_P(iterator)->iterator_funcs_ptr->zf_new_iterator, "getiterator", &aggregate_retval);
- iterator = &aggregate_retval;
- } else {
- Z_ADDREF_P(iterator);
- }
-
- if (user_caching_it_flags) {
- ZVAL_COPY(&caching_it_flags, user_caching_it_flags);
- } else {
- ZVAL_LONG(&caching_it_flags, CIT_CATCH_GET_CHILD);
- }
- spl_instantiate_arg_ex2(spl_ce_RecursiveCachingIterator, &caching_it, iterator, &caching_it_flags);
- zval_ptr_dtor(&caching_it_flags);
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|lll", &iterator, &flags, &user_caching_it_flags, &mode) == FAILURE) {
+ RETURN_THROWS();
+ }
- zval_ptr_dtor(iterator);
- iterator = &caching_it;
+ zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
+ if (instanceof_function(Z_OBJCE_P(iterator), zend_ce_aggregate)) {
+ zend_function **getiterator_cache = Z_OBJCE_P(iterator)->iterator_funcs_ptr
+ ? &Z_OBJCE_P(iterator)->iterator_funcs_ptr->zf_new_iterator : NULL;
+ zend_call_method_with_0_params(Z_OBJ_P(iterator), Z_OBJCE_P(iterator), getiterator_cache, "getiterator", &aggregate_retval);
+ iterator = &aggregate_retval;
} else {
- iterator = NULL;
+ Z_ADDREF_P(iterator);
}
+
+ ZVAL_LONG(&caching_it_flags, user_caching_it_flags);
+ spl_instantiate_arg_ex2(spl_ce_RecursiveCachingIterator, &caching_it, iterator, &caching_it_flags);
+ zval_ptr_dtor(&caching_it_flags);
+ zval_ptr_dtor(iterator);
+ iterator = &caching_it;
break;
}
case RIT_RecursiveIteratorIterator:
default: {
mode = RIT_LEAVES_ONLY;
flags = 0;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|ll", &iterator, &mode, &flags) == FAILURE) {
+ RETURN_THROWS();
+ }
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "o|ll", &iterator, &mode, &flags) == SUCCESS) {
- if (instanceof_function(Z_OBJCE_P(iterator), zend_ce_aggregate)) {
- zend_call_method_with_0_params(iterator, Z_OBJCE_P(iterator), &Z_OBJCE_P(iterator)->iterator_funcs_ptr->zf_new_iterator, "getiterator", &aggregate_retval);
- iterator = &aggregate_retval;
- } else {
- Z_ADDREF_P(iterator);
- }
+ zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
+ if (instanceof_function(Z_OBJCE_P(iterator), zend_ce_aggregate)) {
+ zend_function **getiterator_cache = Z_OBJCE_P(iterator)->iterator_funcs_ptr
+ ? &Z_OBJCE_P(iterator)->iterator_funcs_ptr->zf_new_iterator : NULL;
+ zend_call_method_with_0_params(Z_OBJ_P(iterator), Z_OBJCE_P(iterator), getiterator_cache, "getiterator", &aggregate_retval);
+ iterator = &aggregate_retval;
} else {
- iterator = NULL;
+ Z_ADDREF_P(iterator);
}
break;
}
}
- if (!iterator || !instanceof_function(Z_OBJCE_P(iterator), spl_ce_RecursiveIterator)) {
+ if (!instanceof_function(Z_OBJCE_P(iterator), spl_ce_RecursiveIterator)) {
if (iterator) {
zval_ptr_dtor(iterator);
}
@@ -602,48 +588,44 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla
}
}
-/* {{{ proto RecursiveIteratorIterator::__construct(RecursiveIterator|IteratorAggregate it [, int mode = RIT_LEAVES_ONLY [, int flags = 0]]) throws InvalidArgumentException
- Creates a RecursiveIteratorIterator from a RecursiveIterator. */
-SPL_METHOD(RecursiveIteratorIterator, __construct)
+/* {{{ Creates a RecursiveIteratorIterator from a RecursiveIterator. */
+PHP_METHOD(RecursiveIteratorIterator, __construct)
{
spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveIteratorIterator, zend_ce_iterator, RIT_RecursiveIteratorIterator);
} /* }}} */
-/* {{{ proto void RecursiveIteratorIterator::rewind()
- Rewind the iterator to the first element of the top level inner iterator. */
-SPL_METHOD(RecursiveIteratorIterator, rewind)
+/* {{{ Rewind the iterator to the first element of the top level inner iterator. */
+PHP_METHOD(RecursiveIteratorIterator, rewind)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_recursive_it_rewind_ex(object, ZEND_THIS);
} /* }}} */
-/* {{{ proto bool RecursiveIteratorIterator::valid()
- Check whether the current position is valid */
-SPL_METHOD(RecursiveIteratorIterator, valid)
+/* {{{ Check whether the current position is valid */
+PHP_METHOD(RecursiveIteratorIterator, valid)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(spl_recursive_it_valid_ex(object, ZEND_THIS) == SUCCESS);
} /* }}} */
-/* {{{ proto mixed RecursiveIteratorIterator::key()
- Access the current key */
-SPL_METHOD(RecursiveIteratorIterator, key)
+/* {{{ Access the current key */
+PHP_METHOD(RecursiveIteratorIterator, key)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zend_object_iterator *iterator;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_SUB_ITERATOR(iterator, object);
@@ -655,16 +637,15 @@ SPL_METHOD(RecursiveIteratorIterator, key)
}
} /* }}} */
-/* {{{ proto mixed RecursiveIteratorIterator::current()
- Access the current element value */
-SPL_METHOD(RecursiveIteratorIterator, current)
+/* {{{ Access the current element value */
+PHP_METHOD(RecursiveIteratorIterator, current)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zend_object_iterator *iterator;
zval *data;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_SUB_ITERATOR(iterator, object);
@@ -675,66 +656,65 @@ SPL_METHOD(RecursiveIteratorIterator, current)
}
} /* }}} */
-/* {{{ proto void RecursiveIteratorIterator::next()
- Move forward to the next element */
-SPL_METHOD(RecursiveIteratorIterator, next)
+/* {{{ Move forward to the next element */
+PHP_METHOD(RecursiveIteratorIterator, next)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_recursive_it_move_forward_ex(object, ZEND_THIS);
} /* }}} */
-/* {{{ proto int RecursiveIteratorIterator::getDepth()
- Get the current depth of the recursive iteration */
-SPL_METHOD(RecursiveIteratorIterator, getDepth)
+/* {{{ Get the current depth of the recursive iteration */
+PHP_METHOD(RecursiveIteratorIterator, getDepth)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(object->level);
} /* }}} */
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getSubIterator([int level])
- The current active sub iterator or the iterator at specified level */
-SPL_METHOD(RecursiveIteratorIterator, getSubIterator)
+/* {{{ The current active sub iterator or the iterator at specified level */
+PHP_METHOD(RecursiveIteratorIterator, getSubIterator)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
- zend_long level = object->level;
+ zend_long level;
+ zend_bool level_is_null = 1;
zval *value;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &level) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!", &level, &level_is_null) == FAILURE) {
+ RETURN_THROWS();
}
- if (level < 0 || level > object->level) {
+
+ if (level_is_null) {
+ level = object->level;
+ } else if (level < 0 || level > object->level) {
RETURN_NULL();
}
if(!object->iterators) {
- zend_throw_exception_ex(spl_ce_LogicException, 0,
- "The object is in an invalid state as the parent constructor was not called");
- return;
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called");
+ RETURN_THROWS();
}
value = &object->iterators[level].zobject;
ZVAL_COPY_DEREF(return_value, value);
} /* }}} */
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getInnerIterator()
- The current active sub iterator */
-SPL_METHOD(RecursiveIteratorIterator, getInnerIterator)
+/* {{{ The current active sub iterator */
+PHP_METHOD(RecursiveIteratorIterator, getInnerIterator)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zval *zobject;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_SUB_ELEMENT_ADDR(zobject, object, zobject);
@@ -742,40 +722,37 @@ SPL_METHOD(RecursiveIteratorIterator, getInnerIterator)
ZVAL_COPY_DEREF(return_value, zobject);
} /* }}} */
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::beginIteration()
- Called when iteration begins (after first rewind() call) */
-SPL_METHOD(RecursiveIteratorIterator, beginIteration)
+/* {{{ Called when iteration begins (after first rewind() call) */
+PHP_METHOD(RecursiveIteratorIterator, beginIteration)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* nothing to do */
} /* }}} */
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::endIteration()
- Called when iteration ends (when valid() first returns false */
-SPL_METHOD(RecursiveIteratorIterator, endIteration)
+/* {{{ Called when iteration ends (when valid() first returns false */
+PHP_METHOD(RecursiveIteratorIterator, endIteration)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* nothing to do */
} /* }}} */
-/* {{{ proto bool RecursiveIteratorIterator::callHasChildren()
- Called for each element to test whether it has children */
-SPL_METHOD(RecursiveIteratorIterator, callHasChildren)
+/* {{{ Called for each element to test whether it has children */
+PHP_METHOD(RecursiveIteratorIterator, callHasChildren)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zend_class_entry *ce;
zval *zobject;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (!object->iterators) {
- RETURN_NULL();
+ RETURN_FALSE;
}
SPL_FETCH_SUB_ELEMENT(ce, object, ce);
@@ -784,23 +761,22 @@ SPL_METHOD(RecursiveIteratorIterator, callHasChildren)
if (Z_TYPE_P(zobject) == IS_UNDEF) {
RETURN_FALSE;
} else {
- zend_call_method_with_0_params(zobject, ce, NULL, "haschildren", return_value);
+ zend_call_method_with_0_params(Z_OBJ_P(zobject), ce, NULL, "haschildren", return_value);
if (Z_TYPE_P(return_value) == IS_UNDEF) {
RETURN_FALSE;
}
}
} /* }}} */
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::callGetChildren()
- Return children of current element */
-SPL_METHOD(RecursiveIteratorIterator, callGetChildren)
+/* {{{ Return children of current element */
+PHP_METHOD(RecursiveIteratorIterator, callGetChildren)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zend_class_entry *ce;
zval *zobject;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_SUB_ELEMENT(ce, object, ce);
@@ -809,56 +785,52 @@ SPL_METHOD(RecursiveIteratorIterator, callGetChildren)
if (Z_TYPE_P(zobject) == IS_UNDEF) {
return;
} else {
- zend_call_method_with_0_params(zobject, ce, NULL, "getchildren", return_value);
+ zend_call_method_with_0_params(Z_OBJ_P(zobject), ce, NULL, "getchildren", return_value);
if (Z_TYPE_P(return_value) == IS_UNDEF) {
RETURN_NULL();
}
}
} /* }}} */
-/* {{{ proto void RecursiveIteratorIterator::beginChildren()
- Called when recursing one level down */
-SPL_METHOD(RecursiveIteratorIterator, beginChildren)
+/* {{{ Called when recursing one level down */
+PHP_METHOD(RecursiveIteratorIterator, beginChildren)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* nothing to do */
} /* }}} */
-/* {{{ proto void RecursiveIteratorIterator::endChildren()
- Called when end recursing one level */
-SPL_METHOD(RecursiveIteratorIterator, endChildren)
+/* {{{ Called when end recursing one level */
+PHP_METHOD(RecursiveIteratorIterator, endChildren)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* nothing to do */
} /* }}} */
-/* {{{ proto void RecursiveIteratorIterator::nextElement()
- Called when the next element is available */
-SPL_METHOD(RecursiveIteratorIterator, nextElement)
+/* {{{ Called when the next element is available */
+PHP_METHOD(RecursiveIteratorIterator, nextElement)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* nothing to do */
} /* }}} */
-/* {{{ proto void RecursiveIteratorIterator::setMaxDepth([$max_depth = -1])
- Set the maximum allowed depth (or any depth if pmax_depth = -1] */
-SPL_METHOD(RecursiveIteratorIterator, setMaxDepth)
+/* {{{ Set the maximum allowed depth (or any depth if pmax_depth = -1] */
+PHP_METHOD(RecursiveIteratorIterator, setMaxDepth)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zend_long max_depth = -1;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &max_depth) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (max_depth < -1) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Parameter max_depth must be >= -1", 0);
- return;
+ zend_argument_value_error(1, "must be greater than or equal to -1");
+ RETURN_THROWS();
} else if (max_depth > INT_MAX) {
max_depth = INT_MAX;
}
@@ -866,14 +838,13 @@ SPL_METHOD(RecursiveIteratorIterator, setMaxDepth)
object->max_depth = (int)max_depth;
} /* }}} */
-/* {{{ proto int|false RecursiveIteratorIterator::getMaxDepth()
- Return the maximum accepted depth or false if any depth is allowed */
-SPL_METHOD(RecursiveIteratorIterator, getMaxDepth)
+/* {{{ Return the maximum accepted depth or false if any depth is allowed */
+PHP_METHOD(RecursiveIteratorIterator, getMaxDepth)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (object->max_depth == -1) {
@@ -891,7 +862,8 @@ static zend_function *spl_recursive_it_get_method(zend_object **zobject, zend_st
zval *zobj;
if (!object->iterators) {
- php_error_docref(NULL, E_ERROR, "The %s instance wasn't initialized properly", ZSTR_VAL((*zobject)->ce->name));
+ zend_throw_error(NULL, "The %s instance wasn't initialized properly", ZSTR_VAL((*zobject)->ce->name));
+ return NULL;
}
zobj = &object->iterators[level].zobject;
@@ -991,42 +963,6 @@ static zend_object *spl_RecursiveTreeIterator_new(zend_class_entry *class_type)
}
/* }}} */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_it___construct, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_it_getSubIterator, 0, 0, 0)
- ZEND_ARG_INFO(0, level)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_it_setMaxDepth, 0, 0, 0)
- ZEND_ARG_INFO(0, max_depth)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RecursiveIteratorIterator[] = {
- SPL_ME(RecursiveIteratorIterator, __construct, arginfo_recursive_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, getDepth, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, getSubIterator, arginfo_recursive_it_getSubIterator, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, beginIteration, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, endIteration, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, callHasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, callGetChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, beginChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, endChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, nextElement, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, setMaxDepth, arginfo_recursive_it_setMaxDepth, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, getMaxDepth, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
static void spl_recursive_tree_iterator_get_prefix(spl_recursive_it_object *object, zval *return_value)
{
smart_str str = {0};
@@ -1036,7 +972,7 @@ static void spl_recursive_tree_iterator_get_prefix(spl_recursive_it_object *obje
smart_str_appendl(&str, ZSTR_VAL(object->prefix[0].s), ZSTR_LEN(object->prefix[0].s));
for (level = 0; level < object->level; ++level) {
- zend_call_method_with_0_params(&object->iterators[level].zobject, object->iterators[level].ce, NULL, "hasnext", &has_next);
+ zend_call_method_with_0_params(Z_OBJ(object->iterators[level].zobject), object->iterators[level].ce, NULL, "hasnext", &has_next);
if (Z_TYPE(has_next) != IS_UNDEF) {
if (Z_TYPE(has_next) == IS_TRUE) {
smart_str_appendl(&str, ZSTR_VAL(object->prefix[1].s), ZSTR_LEN(object->prefix[1].s));
@@ -1046,7 +982,7 @@ static void spl_recursive_tree_iterator_get_prefix(spl_recursive_it_object *obje
zval_ptr_dtor(&has_next);
}
}
- zend_call_method_with_0_params(&object->iterators[level].zobject, object->iterators[level].ce, NULL, "hasnext", &has_next);
+ zend_call_method_with_0_params(Z_OBJ(object->iterators[level].zobject), object->iterators[level].ce, NULL, "hasnext", &has_next);
if (Z_TYPE(has_next) != IS_UNDEF) {
if (Z_TYPE(has_next) == IS_TRUE) {
smart_str_appendl(&str, ZSTR_VAL(object->prefix[3].s), ZSTR_LEN(object->prefix[3].s));
@@ -1086,16 +1022,14 @@ static void spl_recursive_tree_iterator_get_postfix(spl_recursive_it_object *obj
Z_ADDREF_P(return_value);
}
-/* {{{ proto RecursiveTreeIterator::__construct(RecursiveIterator|IteratorAggregate it [, int flags = RTIT_BYPASS_KEY [, int cit_flags = CIT_CATCH_GET_CHILD [, mode = RIT_SELF_FIRST ]]]) throws InvalidArgumentException
- RecursiveIteratorIterator to generate ASCII graphic trees for the entries in a RecursiveIterator */
-SPL_METHOD(RecursiveTreeIterator, __construct)
+/* {{{ RecursiveIteratorIterator to generate ASCII graphic trees for the entries in a RecursiveIterator */
+PHP_METHOD(RecursiveTreeIterator, __construct)
{
spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveTreeIterator, zend_ce_iterator, RIT_RecursiveTreeIterator);
} /* }}} */
-/* {{{ proto void RecursiveTreeIterator::setPrefixPart(int part, string prefix) throws OutOfRangeException
- Sets prefix parts as used in getPrefix() */
-SPL_METHOD(RecursiveTreeIterator, setPrefixPart)
+/* {{{ Sets prefix parts as used in getPrefix() */
+PHP_METHOD(RecursiveTreeIterator, setPrefixPart)
{
zend_long part;
char* prefix;
@@ -1103,94 +1037,86 @@ SPL_METHOD(RecursiveTreeIterator, setPrefixPart)
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &part, &prefix, &prefix_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (0 > part || part > 5) {
- zend_throw_exception_ex(spl_ce_OutOfRangeException, 0, "Use RecursiveTreeIterator::PREFIX_* constant");
- return;
+ zend_argument_value_error(1, "must be a RecursiveTreeIterator::PREFIX_* constant");
+ RETURN_THROWS();
}
smart_str_free(&object->prefix[part]);
smart_str_appendl(&object->prefix[part], prefix, prefix_len);
} /* }}} */
-/* {{{ proto string RecursiveTreeIterator::getPrefix()
- Returns the string to place in front of current element */
-SPL_METHOD(RecursiveTreeIterator, getPrefix)
+/* {{{ Returns the string to place in front of current element */
+PHP_METHOD(RecursiveTreeIterator, getPrefix)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if(!object->iterators) {
- zend_throw_exception_ex(spl_ce_LogicException, 0,
- "The object is in an invalid state as the parent constructor was not called");
- return;
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called");
+ RETURN_THROWS();
}
spl_recursive_tree_iterator_get_prefix(object, return_value);
} /* }}} */
-/* {{{ proto void RecursiveTreeIterator::setPostfix(string prefix)
- Sets postfix as used in getPostfix() */
-SPL_METHOD(RecursiveTreeIterator, setPostfix)
+/* {{{ Sets postfix as used in getPostfix() */
+PHP_METHOD(RecursiveTreeIterator, setPostfix)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
char* postfix;
size_t postfix_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &postfix, &postfix_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
smart_str_free(&object->postfix[0]);
smart_str_appendl(&object->postfix[0], postfix, postfix_len);
} /* }}} */
-/* {{{ proto string RecursiveTreeIterator::getEntry()
- Returns the string presentation built for current element */
-SPL_METHOD(RecursiveTreeIterator, getEntry)
+/* {{{ Returns the string presentation built for current element */
+PHP_METHOD(RecursiveTreeIterator, getEntry)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if(!object->iterators) {
- zend_throw_exception_ex(spl_ce_LogicException, 0,
- "The object is in an invalid state as the parent constructor was not called");
- return;
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called");
+ RETURN_THROWS();
}
spl_recursive_tree_iterator_get_entry(object, return_value);
} /* }}} */
-/* {{{ proto string RecursiveTreeIterator::getPostfix()
- Returns the string to place after the current element */
-SPL_METHOD(RecursiveTreeIterator, getPostfix)
+/* {{{ Returns the string to place after the current element */
+PHP_METHOD(RecursiveTreeIterator, getPostfix)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if(!object->iterators) {
- zend_throw_exception_ex(spl_ce_LogicException, 0,
- "The object is in an invalid state as the parent constructor was not called");
- return;
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called");
+ RETURN_THROWS();
}
spl_recursive_tree_iterator_get_postfix(object, return_value);
} /* }}} */
-/* {{{ proto mixed RecursiveTreeIterator::current()
- Returns the current element prefixed and postfixed */
-SPL_METHOD(RecursiveTreeIterator, current)
+/* {{{ Returns the current element prefixed and postfixed */
+PHP_METHOD(RecursiveTreeIterator, current)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zval prefix, entry, postfix;
@@ -1198,13 +1124,12 @@ SPL_METHOD(RecursiveTreeIterator, current)
zend_string *str;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if(!object->iterators) {
- zend_throw_exception_ex(spl_ce_LogicException, 0,
- "The object is in an invalid state as the parent constructor was not called");
- return;
+ zend_throw_error(NULL, "The object is in an invalid state as the parent constructor was not called");
+ RETURN_THROWS();
}
if (object->flags & RTIT_BYPASS_CURRENT) {
@@ -1250,9 +1175,8 @@ SPL_METHOD(RecursiveTreeIterator, current)
RETURN_NEW_STR(str);
} /* }}} */
-/* {{{ proto mixed RecursiveTreeIterator::key()
- Returns the current key prefixed and postfixed */
-SPL_METHOD(RecursiveTreeIterator, key)
+/* {{{ Returns the current key prefixed and postfixed */
+PHP_METHOD(RecursiveTreeIterator, key)
{
spl_recursive_it_object *object = Z_SPLRECURSIVE_IT_P(ZEND_THIS);
zend_object_iterator *iterator;
@@ -1261,7 +1185,7 @@ SPL_METHOD(RecursiveTreeIterator, key)
zend_string *str;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_SUB_ITERATOR(iterator, object);
@@ -1273,8 +1197,7 @@ SPL_METHOD(RecursiveTreeIterator, key)
}
if (object->flags & RTIT_BYPASS_KEY) {
- RETVAL_ZVAL(&key, 1, 1);
- return;
+ RETURN_COPY_VALUE(&key);
}
if (Z_TYPE(key) != IS_STRING) {
@@ -1304,44 +1227,6 @@ SPL_METHOD(RecursiveTreeIterator, key)
RETURN_NEW_STR(str);
} /* }}} */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_tree_it___construct, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
- ZEND_ARG_INFO(0, flags)
- ZEND_ARG_INFO(0, caching_it_flags)
- ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_tree_it_setPrefixPart, 0, 0, 2)
- ZEND_ARG_INFO(0, part)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_recursive_tree_it_setPostfix, 0, 0, 1)
- ZEND_ARG_INFO(0, postfix)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RecursiveTreeIterator[] = {
- SPL_ME(RecursiveTreeIterator, __construct, arginfo_recursive_tree_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, beginIteration, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, endIteration, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, callHasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, callGetChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, beginChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, endChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveIteratorIterator, nextElement, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, getPrefix, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, setPrefixPart, arginfo_recursive_tree_it_setPrefixPart, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, getEntry, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, setPostfix, arginfo_recursive_tree_it_setPostfix, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveTreeIterator, getPostfix, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
static zend_function *spl_dual_it_get_method(zend_object **object, zend_string *method, const zval *key)
{
zend_function *function_handler;
@@ -1363,52 +1248,12 @@ static zend_function *spl_dual_it_get_method(zend_object **object, zend_string *
return function_handler;
}
-#if MBO_0
-int spl_dual_it_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS)
-{
- zval ***func_params, func;
- zval retval;
- int arg_count;
- int current = 0;
- int success;
- void **p;
- spl_dual_it_object *intern;
-
- intern = Z_SPLDUAL_IT_P(ZEND_THIS);
-
- ZVAL_STRING(&func, method, 0);
-
- p = EG(argument_stack).top_element-2;
- arg_count = (zend_ulong) *p;
-
- func_params = safe_emalloc(sizeof(zval **), arg_count, 0);
-
- current = 0;
- while (arg_count-- > 0) {
- func_params[current] = (zval **) p - (arg_count-current);
- current++;
- }
- arg_count = current; /* restore */
-
- if (call_user_function_ex(EG(function_table), NULL, &func, &retval, arg_count, func_params, 0, NULL) == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
- RETURN_ZVAL(&retval, 0, 0);
-
- success = SUCCESS;
- } else {
- zend_throw_error(NULL, "Unable to call %s::%s()", intern->inner.ce->name, method);
- success = FAILURE;
- }
-
- efree(func_params);
- return success;
-}
-#endif
-
#define SPL_CHECK_CTOR(intern, classname) \
if (intern->dit_type == DIT_Unknown) { \
+ /* TODO Normal Error? */ \
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Classes derived from %s must call %s::__construct()", \
ZSTR_VAL((spl_ce_##classname)->name), ZSTR_VAL((spl_ce_##classname)->name)); \
- return; \
+ RETURN_THROWS(); \
}
#define APPENDIT_CHECK_CTOR(intern) SPL_CHECK_CTOR(intern, AppendIterator)
@@ -1442,20 +1287,19 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
return NULL;
}
- intern->dit_type = dit_type;
switch (dit_type) {
case DIT_LimitIterator: {
intern->u.limit.offset = 0; /* start at beginning */
intern->u.limit.count = -1; /* get all */
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O|ll", &zobject, ce_inner, &intern->u.limit.offset, &intern->u.limit.count) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|ll", &zobject, ce_inner, &intern->u.limit.offset, &intern->u.limit.count) == FAILURE) {
return NULL;
}
if (intern->u.limit.offset < 0) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Parameter offset must be >= 0", 0);
+ zend_argument_value_error(2, "must be greater than or equal to 0");
return NULL;
}
- if (intern->u.limit.count < 0 && intern->u.limit.count != -1) {
- zend_throw_exception(spl_ce_OutOfRangeException, "Parameter count must either be -1 or a value greater than or equal 0", 0);
+ if (intern->u.limit.count < -1) {
+ zend_argument_value_error(3, "must be greater than or equal to -1");
return NULL;
}
break;
@@ -1463,11 +1307,13 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
case DIT_CachingIterator:
case DIT_RecursiveCachingIterator: {
zend_long flags = CIT_CALL_TOSTRING;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O|l", &zobject, ce_inner, &flags) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l", &zobject, ce_inner, &flags) == FAILURE) {
return NULL;
}
if (spl_cit_check_flags(flags) != SUCCESS) {
- zend_throw_exception(spl_ce_InvalidArgumentException, "Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER", 0);
+ zend_argument_value_error(2, "must contain only one of CachingIterator::CALL_TOSTRING, "
+ "CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, "
+ "or CachingIterator::TOSTRING_USE_INNER");
return NULL;
}
intern->u.caching.flags |= flags & CIT_PUBLIC;
@@ -1476,14 +1322,14 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
}
case DIT_IteratorIterator: {
zend_class_entry *ce_cast;
- zend_string *class_name;
+ zend_string *class_name = NULL;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O|S", &zobject, ce_inner, &class_name) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|S!", &zobject, ce_inner, &class_name) == FAILURE) {
return NULL;
}
ce = Z_OBJCE_P(zobject);
if (!instanceof_function(ce, zend_ce_iterator)) {
- if (ZEND_NUM_ARGS() > 1) {
+ if (class_name) {
if (!(ce_cast = zend_lookup_class(class_name))
|| !instanceof_function(ce, ce_cast)
|| !ce_cast->get_iterator
@@ -1494,7 +1340,9 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
ce = ce_cast;
}
if (instanceof_function(ce, zend_ce_aggregate)) {
- zend_call_method_with_0_params(zobject, ce, &ce->iterator_funcs_ptr->zf_new_iterator, "getiterator", &retval);
+ zend_function **getiterator_cache =
+ ce->iterator_funcs_ptr ? &ce->iterator_funcs_ptr->zf_new_iterator : NULL;
+ zend_call_method_with_0_params(Z_OBJ_P(zobject), ce, getiterator_cache, "getiterator", &retval);
if (EG(exception)) {
zval_ptr_dtor(&retval);
return NULL;
@@ -1511,9 +1359,13 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
break;
}
case DIT_AppendIterator:
+ if (zend_parse_parameters_none() == FAILURE) {
+ return NULL;
+ }
+ intern->dit_type = DIT_AppendIterator;
zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
- spl_instantiate(spl_ce_ArrayIterator, &intern->u.append.zarrayit);
- zend_call_method_with_0_params(&intern->u.append.zarrayit, spl_ce_ArrayIterator, &spl_ce_ArrayIterator->constructor, "__construct", NULL);
+ object_init_ex(&intern->u.append.zarrayit, spl_ce_ArrayIterator);
+ zend_call_method_with_0_params(Z_OBJ(intern->u.append.zarrayit), spl_ce_ArrayIterator, &spl_ce_ArrayIterator->constructor, "__construct", NULL);
intern->u.append.iterator = spl_ce_ArrayIterator->get_iterator(spl_ce_ArrayIterator, &intern->u.append.zarrayit, 0);
zend_restore_error_handling(&error_handling);
return intern;
@@ -1525,15 +1377,14 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
intern->u.regex.use_flags = ZEND_NUM_ARGS() >= 5;
intern->u.regex.flags = 0;
intern->u.regex.preg_flags = 0;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "OS|lll", &zobject, ce_inner, &regex, &mode, &intern->u.regex.flags, &intern->u.regex.preg_flags) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "OS|lll", &zobject, ce_inner, &regex, &mode, &intern->u.regex.flags, &intern->u.regex.preg_flags) == FAILURE) {
return NULL;
}
if (mode < 0 || mode >= REGIT_MODE_MAX) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Illegal mode " ZEND_LONG_FMT, mode);
+ zend_argument_value_error(3, "must be RegexIterator::MATCH, RegexIterator::GET_MATCH, "
+ "RegexIterator::ALL_MATCHES, RegexIterator::SPLIT, or RegexIterator::REPLACE");
return NULL;
}
- intern->u.regex.mode = mode;
- intern->u.regex.regex = zend_string_copy(regex);
zend_replace_error_handling(EH_THROW, spl_ce_InvalidArgumentException, &error_handling);
intern->u.regex.pce = pcre_get_compiled_regex_cache(regex);
@@ -1543,6 +1394,8 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
/* pcre_get_compiled_regex_cache has already sent error */
return NULL;
}
+ intern->u.regex.mode = mode;
+ intern->u.regex.regex = zend_string_copy(regex);
php_pcre_pce_incref(intern->u.regex.pce);
break;
}
@@ -1550,7 +1403,7 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
case DIT_RecursiveCallbackFilterIterator: {
_spl_cbfilter_it_intern *cfi = emalloc(sizeof(*cfi));
cfi->fci.object = NULL;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "Of", &zobject, ce_inner, &cfi->fci, &cfi->fcc) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "Of", &zobject, ce_inner, &cfi->fci, &cfi->fcc) == FAILURE) {
efree(cfi);
return NULL;
}
@@ -1561,12 +1414,13 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
break;
}
default:
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "O", &zobject, ce_inner) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &zobject, ce_inner) == FAILURE) {
return NULL;
}
break;
}
+ intern->dit_type = dit_type;
if (inc_refcount) {
Z_ADDREF_P(zobject);
}
@@ -1579,31 +1433,25 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
return intern;
}
-/* {{{ proto FilterIterator::__construct(Iterator it)
- Create an Iterator from another iterator */
-SPL_METHOD(FilterIterator, __construct)
+/* {{{ Create an Iterator from another iterator */
+PHP_METHOD(FilterIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_FilterIterator, zend_ce_iterator, DIT_FilterIterator);
} /* }}} */
-/* {{{ proto CallbackFilterIterator::__construct(Iterator it, callback func)
- Create an Iterator from another iterator */
-SPL_METHOD(CallbackFilterIterator, __construct)
+/* {{{ Create an Iterator from another iterator */
+PHP_METHOD(CallbackFilterIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_CallbackFilterIterator, zend_ce_iterator, DIT_CallbackFilterIterator);
} /* }}} */
-/* {{{ proto Iterator FilterIterator::getInnerIterator()
- proto Iterator CachingIterator::getInnerIterator()
- proto Iterator LimitIterator::getInnerIterator()
- proto Iterator ParentIterator::getInnerIterator()
- Get the inner iterator */
-SPL_METHOD(dual_it, getInnerIterator)
+/* {{{ Get the inner iterator */
+PHP_METHOD(IteratorIterator, getInnerIterator)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -1697,16 +1545,13 @@ static inline void spl_dual_it_next(spl_dual_it_object *intern, int do_free)
intern->current.pos++;
}
-/* {{{ proto void ParentIterator::rewind()
- proto void IteratorIterator::rewind()
- Rewind the iterator
- */
-SPL_METHOD(dual_it, rewind)
+/* {{{ Rewind the iterator */
+PHP_METHOD(IteratorIterator, rewind)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -1715,17 +1560,13 @@ SPL_METHOD(dual_it, rewind)
spl_dual_it_fetch(intern, 1);
} /* }}} */
-/* {{{ proto bool FilterIterator::valid()
- proto bool ParentIterator::valid()
- proto bool IteratorIterator::valid()
- proto bool NoRewindIterator::valid()
- Check whether the current element is valid */
-SPL_METHOD(dual_it, valid)
+/* {{{ Check whether the current element is valid */
+PHP_METHOD(IteratorIterator, valid)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -1733,20 +1574,13 @@ SPL_METHOD(dual_it, valid)
RETURN_BOOL(Z_TYPE(intern->current.data) != IS_UNDEF);
} /* }}} */
-/* {{{ proto mixed FilterIterator::key()
- proto mixed CachingIterator::key()
- proto mixed LimitIterator::key()
- proto mixed ParentIterator::key()
- proto mixed IteratorIterator::key()
- proto mixed NoRewindIterator::key()
- proto mixed AppendIterator::key()
- Get the current key */
-SPL_METHOD(dual_it, key)
+/* {{{ Get the current key */
+PHP_METHOD(IteratorIterator, key)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -1760,19 +1594,13 @@ SPL_METHOD(dual_it, key)
}
} /* }}} */
-/* {{{ proto mixed FilterIterator::current()
- proto mixed CachingIterator::current()
- proto mixed LimitIterator::current()
- proto mixed ParentIterator::current()
- proto mixed IteratorIterator::current()
- proto mixed NoRewindIterator::current()
- Get the current element value */
-SPL_METHOD(dual_it, current)
+/* {{{ Get the current element value */
+PHP_METHOD(IteratorIterator, current)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -1786,16 +1614,13 @@ SPL_METHOD(dual_it, current)
}
} /* }}} */
-/* {{{ proto void ParentIterator::next()
- proto void IteratorIterator::next()
- proto void NoRewindIterator::next()
- Move the iterator forward */
-SPL_METHOD(dual_it, next)
+/* {{{ Move the iterator forward */
+PHP_METHOD(IteratorIterator, next)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -1809,7 +1634,7 @@ static inline void spl_filter_it_fetch(zval *zthis, spl_dual_it_object *intern)
zval retval;
while (spl_dual_it_fetch(intern, 1) == SUCCESS) {
- zend_call_method_with_0_params(zthis, intern->std.ce, NULL, "accept", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(zthis), intern->std.ce, NULL, "accept", &retval);
if (Z_TYPE(retval) != IS_UNDEF) {
if (zend_is_true(&retval)) {
zval_ptr_dtor(&retval);
@@ -1837,166 +1662,142 @@ static inline void spl_filter_it_next(zval *zthis, spl_dual_it_object *intern)
spl_filter_it_fetch(zthis, intern);
}
-/* {{{ proto void FilterIterator::rewind()
- Rewind the iterator */
-SPL_METHOD(FilterIterator, rewind)
+/* {{{ Rewind the iterator */
+PHP_METHOD(FilterIterator, rewind)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
spl_filter_it_rewind(ZEND_THIS, intern);
} /* }}} */
-/* {{{ proto void FilterIterator::next()
- Move the iterator forward */
-SPL_METHOD(FilterIterator, next)
+/* {{{ Move the iterator forward */
+PHP_METHOD(FilterIterator, next)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
spl_filter_it_next(ZEND_THIS, intern);
} /* }}} */
-/* {{{ proto RecursiveCallbackFilterIterator::__construct(RecursiveIterator it, callback func)
- Create a RecursiveCallbackFilterIterator from a RecursiveIterator */
-SPL_METHOD(RecursiveCallbackFilterIterator, __construct)
+/* {{{ Create a RecursiveCallbackFilterIterator from a RecursiveIterator */
+PHP_METHOD(RecursiveCallbackFilterIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveCallbackFilterIterator, spl_ce_RecursiveIterator, DIT_RecursiveCallbackFilterIterator);
} /* }}} */
-/* {{{ proto RecursiveFilterIterator::__construct(RecursiveIterator it)
- Create a RecursiveFilterIterator from a RecursiveIterator */
-SPL_METHOD(RecursiveFilterIterator, __construct)
+/* {{{ Create a RecursiveFilterIterator from a RecursiveIterator */
+PHP_METHOD(RecursiveFilterIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveFilterIterator, spl_ce_RecursiveIterator, DIT_RecursiveFilterIterator);
} /* }}} */
-/* {{{ proto bool RecursiveFilterIterator::hasChildren()
- Check whether the inner iterator's current element has children */
-SPL_METHOD(RecursiveFilterIterator, hasChildren)
+/* {{{ Check whether the inner iterator's current element has children */
+PHP_METHOD(RecursiveFilterIterator, hasChildren)
{
spl_dual_it_object *intern;
- zval retval;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
- if (Z_TYPE(retval) != IS_UNDEF) {
- RETURN_ZVAL(&retval, 0, 1);
- } else {
- RETURN_FALSE;
- }
+ zend_call_method_with_0_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "haschildren", return_value);
} /* }}} */
-/* {{{ proto RecursiveFilterIterator RecursiveFilterIterator::getChildren()
- Return the inner iterator's children contained in a RecursiveFilterIterator */
-SPL_METHOD(RecursiveFilterIterator, getChildren)
+/* {{{ Return the inner iterator's children contained in a RecursiveFilterIterator */
+PHP_METHOD(RecursiveFilterIterator, getChildren)
{
spl_dual_it_object *intern;
zval retval;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
+ zend_call_method_with_0_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "getchildren", &retval);
if (!EG(exception) && Z_TYPE(retval) != IS_UNDEF) {
spl_instantiate_arg_ex1(Z_OBJCE_P(ZEND_THIS), return_value, &retval);
}
zval_ptr_dtor(&retval);
} /* }}} */
-/* {{{ proto RecursiveCallbackFilterIterator RecursiveCallbackFilterIterator::getChildren()
- Return the inner iterator's children contained in a RecursiveCallbackFilterIterator */
-SPL_METHOD(RecursiveCallbackFilterIterator, getChildren)
+/* {{{ Return the inner iterator's children contained in a RecursiveCallbackFilterIterator */
+PHP_METHOD(RecursiveCallbackFilterIterator, getChildren)
{
spl_dual_it_object *intern;
zval retval;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
+ zend_call_method_with_0_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "getchildren", &retval);
if (!EG(exception) && Z_TYPE(retval) != IS_UNDEF) {
spl_instantiate_arg_ex2(Z_OBJCE_P(ZEND_THIS), return_value, &retval, &intern->u.cbfilter->fci.function_name);
}
zval_ptr_dtor(&retval);
} /* }}} */
-/* {{{ proto ParentIterator::__construct(RecursiveIterator it)
- Create a ParentIterator from a RecursiveIterator */
-SPL_METHOD(ParentIterator, __construct)
+/* {{{ Create a ParentIterator from a RecursiveIterator */
+PHP_METHOD(ParentIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_ParentIterator, spl_ce_RecursiveIterator, DIT_ParentIterator);
} /* }}} */
-/* {{{ proto RegexIterator::__construct(Iterator it, string regex [, int mode [, int flags [, int preg_flags]]])
- Create an RegexIterator from another iterator and a regular expression */
-SPL_METHOD(RegexIterator, __construct)
+/* {{{ Create an RegexIterator from another iterator and a regular expression */
+PHP_METHOD(RegexIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RegexIterator, zend_ce_iterator, DIT_RegexIterator);
} /* }}} */
-/* {{{ proto bool CallbackFilterIterator::accept()
- Calls the callback with the current value, the current key and the inner iterator as arguments */
-SPL_METHOD(CallbackFilterIterator, accept)
+/* {{{ Calls the callback with the current value, the current key and the inner iterator as arguments */
+PHP_METHOD(CallbackFilterIterator, accept)
{
- spl_dual_it_object *intern = Z_SPLDUAL_IT_P(ZEND_THIS);
- zend_fcall_info *fci = &intern->u.cbfilter->fci;
- zend_fcall_info_cache *fcc = &intern->u.cbfilter->fcc;
- zval params[3];
+ spl_dual_it_object *intern = Z_SPLDUAL_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
+ SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
+
if (Z_TYPE(intern->current.data) == IS_UNDEF || Z_TYPE(intern->current.key) == IS_UNDEF) {
RETURN_FALSE;
}
+ zval params[3];
ZVAL_COPY_VALUE(&params[0], &intern->current.data);
ZVAL_COPY_VALUE(&params[1], &intern->current.key);
ZVAL_COPY_VALUE(&params[2], &intern->inner.zobject);
+ zend_fcall_info *fci = &intern->u.cbfilter->fci;
+ zend_fcall_info_cache *fcc = &intern->u.cbfilter->fcc;
fci->retval = return_value;
fci->param_count = 3;
fci->params = params;
- fci->no_separation = 0;
if (zend_call_function(fci, fcc) != SUCCESS || Z_ISUNDEF_P(return_value)) {
RETURN_FALSE;
}
-
- if (EG(exception)) {
- RETURN_NULL();
- }
-
- /* zend_call_function may change args to IS_REF */
- ZVAL_COPY_VALUE(&intern->current.data, &params[0]);
- ZVAL_COPY_VALUE(&intern->current.key, &params[1]);
}
/* }}} */
-/* {{{ proto bool RegexIterator::accept()
- Match (string)current() against regular expression */
-SPL_METHOD(RegexIterator, accept)
+/* {{{ Match (string)current() against regular expression */
+PHP_METHOD(RegexIterator, accept)
{
spl_dual_it_object *intern;
zend_string *result, *subject;
@@ -2007,7 +1808,7 @@ SPL_METHOD(RegexIterator, accept)
int rc;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2027,7 +1828,7 @@ SPL_METHOD(RegexIterator, accept)
/* Exception during string conversion. */
if (EG(exception)) {
- return;
+ RETURN_THROWS();
}
switch (intern->u.regex.mode)
@@ -2062,7 +1863,7 @@ SPL_METHOD(RegexIterator, accept)
break;
case REGIT_MODE_REPLACE: {
- zval *replacement = zend_read_property(intern->std.ce, ZEND_THIS, "replacement", sizeof("replacement")-1, 1, &rv);
+ zval *replacement = zend_read_property(intern->std.ce, Z_OBJ_P(ZEND_THIS), "replacement", sizeof("replacement")-1, 1, &rv);
zend_string *replacement_str = zval_try_get_string(replacement);
if (UNEXPECTED(!replacement_str)) {
return;
@@ -2089,14 +1890,13 @@ SPL_METHOD(RegexIterator, accept)
zend_string_release_ex(subject, 0);
} /* }}} */
-/* {{{ proto string RegexIterator::getRegex()
- Returns current regular expression */
-SPL_METHOD(RegexIterator, getRegex)
+/* {{{ Returns current regular expression */
+PHP_METHOD(RegexIterator, getRegex)
{
spl_dual_it_object *intern = Z_SPLDUAL_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2104,14 +1904,13 @@ SPL_METHOD(RegexIterator, getRegex)
RETURN_STR_COPY(intern->u.regex.regex);
} /* }}} */
-/* {{{ proto bool RegexIterator::getMode()
- Returns current operation mode */
-SPL_METHOD(RegexIterator, getMode)
+/* {{{ Returns current operation mode */
+PHP_METHOD(RegexIterator, getMode)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2119,20 +1918,20 @@ SPL_METHOD(RegexIterator, getMode)
RETURN_LONG(intern->u.regex.mode);
} /* }}} */
-/* {{{ proto bool RegexIterator::setMode(int new_mode)
- Set new operation mode */
-SPL_METHOD(RegexIterator, setMode)
+/* {{{ Set new operation mode */
+PHP_METHOD(RegexIterator, setMode)
{
spl_dual_it_object *intern;
zend_long mode;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &mode) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (mode < 0 || mode >= REGIT_MODE_MAX) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0, "Illegal mode " ZEND_LONG_FMT, mode);
- return;/* NULL */
+ zend_argument_value_error(1, "must be RegexIterator::MATCH, RegexIterator::GET_MATCH, "
+ "RegexIterator::ALL_MATCHES, RegexIterator::SPLIT, or RegexIterator::REPLACE");
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2140,14 +1939,13 @@ SPL_METHOD(RegexIterator, setMode)
intern->u.regex.mode = mode;
} /* }}} */
-/* {{{ proto bool RegexIterator::getFlags()
- Returns current operation flags */
-SPL_METHOD(RegexIterator, getFlags)
+/* {{{ Returns current operation flags */
+PHP_METHOD(RegexIterator, getFlags)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2155,15 +1953,14 @@ SPL_METHOD(RegexIterator, getFlags)
RETURN_LONG(intern->u.regex.flags);
} /* }}} */
-/* {{{ proto bool RegexIterator::setFlags(int new_flags)
- Set operation flags */
-SPL_METHOD(RegexIterator, setFlags)
+/* {{{ Set operation flags */
+PHP_METHOD(RegexIterator, setFlags)
{
spl_dual_it_object *intern;
zend_long flags;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2171,14 +1968,13 @@ SPL_METHOD(RegexIterator, setFlags)
intern->u.regex.flags = flags;
} /* }}} */
-/* {{{ proto bool RegexIterator::getFlags()
- Returns current PREG flags (if in use or NULL) */
-SPL_METHOD(RegexIterator, getPregFlags)
+/* {{{ Returns current PREG flags (if in use or NULL) */
+PHP_METHOD(RegexIterator, getPregFlags)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2190,15 +1986,14 @@ SPL_METHOD(RegexIterator, getPregFlags)
}
} /* }}} */
-/* {{{ proto bool RegexIterator::setPregFlags(int new_flags)
- Set PREG flags */
-SPL_METHOD(RegexIterator, setPregFlags)
+/* {{{ Set PREG flags */
+PHP_METHOD(RegexIterator, setPregFlags)
{
spl_dual_it_object *intern;
zend_long preg_flags;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &preg_flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2207,27 +2002,25 @@ SPL_METHOD(RegexIterator, setPregFlags)
intern->u.regex.use_flags = 1;
} /* }}} */
-/* {{{ proto RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int mode [, int flags [, int preg_flags]]])
- Create an RecursiveRegexIterator from another recursive iterator and a regular expression */
-SPL_METHOD(RecursiveRegexIterator, __construct)
+/* {{{ Create an RecursiveRegexIterator from another recursive iterator and a regular expression */
+PHP_METHOD(RecursiveRegexIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveRegexIterator, spl_ce_RecursiveIterator, DIT_RecursiveRegexIterator);
} /* }}} */
-/* {{{ proto RecursiveRegexIterator RecursiveRegexIterator::getChildren()
- Return the inner iterator's children contained in a RecursiveRegexIterator */
-SPL_METHOD(RecursiveRegexIterator, getChildren)
+/* {{{ Return the inner iterator's children contained in a RecursiveRegexIterator */
+PHP_METHOD(RecursiveRegexIterator, getChildren)
{
spl_dual_it_object *intern;
zval retval;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
+ zend_call_method_with_0_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "getchildren", &retval);
if (!EG(exception)) {
zval args[5];
@@ -2245,12 +2038,12 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
zval_ptr_dtor(&retval);
} /* }}} */
-SPL_METHOD(RecursiveRegexIterator, accept)
+PHP_METHOD(RecursiveRegexIterator, accept)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2261,7 +2054,7 @@ SPL_METHOD(RecursiveRegexIterator, accept)
RETURN_BOOL(zend_hash_num_elements(Z_ARRVAL(intern->current.data)) > 0);
}
- zend_call_method_with_0_params(ZEND_THIS, spl_ce_RegexIterator, NULL, "accept", return_value);
+ zend_call_method_with_0_params(Z_OBJ_P(ZEND_THIS), spl_ce_RegexIterator, NULL, "accept", return_value);
}
/* {{{ spl_dual_it_dtor */
@@ -2326,6 +2119,51 @@ static void spl_dual_it_free_storage(zend_object *_object)
}
/* }}} */
+static HashTable *spl_dual_it_get_gc(zend_object *obj, zval **table, int *n)
+{
+ spl_dual_it_object *object = spl_dual_it_from_obj(obj);
+ zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
+
+ if (!Z_ISUNDEF(object->inner.zobject)) {
+ zend_get_gc_buffer_add_zval(gc_buffer, &object->inner.zobject);
+ }
+
+ switch (object->dit_type) {
+ case DIT_Unknown:
+ case DIT_Default:
+ case DIT_IteratorIterator:
+ case DIT_NoRewindIterator:
+ case DIT_InfiniteIterator:
+ case DIT_LimitIterator:
+ case DIT_RegexIterator:
+ case DIT_RecursiveRegexIterator:
+ /* Nothing to do */
+ break;
+ case DIT_AppendIterator:
+ zend_get_gc_buffer_add_obj(gc_buffer, &object->u.append.iterator->std);
+ if (Z_TYPE(object->u.append.zarrayit) != IS_UNDEF) {
+ zend_get_gc_buffer_add_zval(gc_buffer, &object->u.append.zarrayit);
+ }
+ break;
+ case DIT_CachingIterator:
+ case DIT_RecursiveCachingIterator:
+ zend_get_gc_buffer_add_zval(gc_buffer, &object->u.caching.zcache);
+ break;
+ case DIT_CallbackFilterIterator:
+ case DIT_RecursiveCallbackFilterIterator:
+ if (object->u.cbfilter) {
+ zend_get_gc_buffer_add_zval(gc_buffer, &object->u.cbfilter->fci.function_name);
+ if (object->u.cbfilter->fci.object) {
+ zend_get_gc_buffer_add_obj(gc_buffer, object->u.cbfilter->fci.object);
+ }
+ }
+ break;
+ }
+
+ zend_get_gc_buffer_use(gc_buffer, table, n);
+ return zend_std_get_properties(obj);
+}
+
/* {{{ spl_dual_it_new */
static zend_object *spl_dual_it_new(zend_class_entry *class_type)
{
@@ -2342,111 +2180,6 @@ static zend_object *spl_dual_it_new(zend_class_entry *class_type)
}
/* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_filter_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_FilterIterator[] = {
- SPL_ME(FilterIterator, __construct, arginfo_filter_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(FilterIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(FilterIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ABSTRACT_ME(FilterIterator, accept, arginfo_recursive_it_void)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO(arginfo_callback_filter_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, callback)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_CallbackFilterIterator[] = {
- SPL_ME(CallbackFilterIterator, __construct, arginfo_callback_filter_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(CallbackFilterIterator, accept, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO(arginfo_recursive_callback_filter_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
- ZEND_ARG_INFO(0, callback)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RecursiveCallbackFilterIterator[] = {
- SPL_ME(RecursiveCallbackFilterIterator, __construct, arginfo_recursive_callback_filter_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveFilterIterator, hasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveCallbackFilterIterator, getChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO(arginfo_parent_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RecursiveFilterIterator[] = {
- SPL_ME(RecursiveFilterIterator, __construct, arginfo_parent_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveFilterIterator, hasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveFilterIterator, getChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry spl_funcs_ParentIterator[] = {
- SPL_ME(ParentIterator, __construct, arginfo_parent_it___construct, ZEND_ACC_PUBLIC)
- SPL_MA(ParentIterator, accept, RecursiveFilterIterator, hasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it___construct, 0, 0, 2)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, regex)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, flags)
- ZEND_ARG_INFO(0, preg_flags)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_mode, 0, 0, 1)
- ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_flags, 0, 0, 1)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_preg_flags, 0, 0, 1)
- ZEND_ARG_INFO(0, preg_flags)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RegexIterator[] = {
- SPL_ME(RegexIterator, __construct, arginfo_regex_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, accept, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, getMode, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, setMode, arginfo_regex_it_set_mode, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, getFlags, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, setFlags, arginfo_regex_it_set_flags, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, getPregFlags, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, setPregFlags, arginfo_regex_it_set_preg_flags, ZEND_ACC_PUBLIC)
- SPL_ME(RegexIterator, getRegex, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_rec_regex_it___construct, 0, 0, 2)
- ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
- ZEND_ARG_INFO(0, regex)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, flags)
- ZEND_ARG_INFO(0, preg_flags)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RecursiveRegexIterator[] = {
- SPL_ME(RecursiveRegexIterator, __construct, arginfo_rec_regex_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveRegexIterator, accept, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveFilterIterator, hasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveRegexIterator, getChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
static inline int spl_limit_it_valid(spl_dual_it_object *intern)
{
/* FAILURE / SUCCESS */
@@ -2473,7 +2206,7 @@ static inline void spl_limit_it_seek(spl_dual_it_object *intern, zend_long pos)
if (pos != intern->current.pos && instanceof_function(intern->inner.ce, spl_ce_SeekableIterator)) {
ZVAL_LONG(&zpos, pos);
spl_dual_it_free(intern);
- zend_call_method_with_1_params(&intern->inner.zobject, intern->inner.ce, NULL, "seek", NULL, &zpos);
+ zend_call_method_with_1_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "seek", NULL, &zpos);
if (!EG(exception)) {
intern->current.pos = pos;
if (spl_limit_it_valid(intern) == SUCCESS) {
@@ -2495,42 +2228,50 @@ static inline void spl_limit_it_seek(spl_dual_it_object *intern, zend_long pos)
}
}
-/* {{{ proto LimitIterator::__construct(Iterator it [, int offset, int count])
- Construct a LimitIterator from an Iterator with a given starting offset and optionally a maximum count */
-SPL_METHOD(LimitIterator, __construct)
+/* {{{ Construct a LimitIterator from an Iterator with a given starting offset and optionally a maximum count */
+PHP_METHOD(LimitIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_LimitIterator, zend_ce_iterator, DIT_LimitIterator);
} /* }}} */
-/* {{{ proto void LimitIterator::rewind()
- Rewind the iterator to the specified starting offset */
-SPL_METHOD(LimitIterator, rewind)
+/* {{{ Rewind the iterator to the specified starting offset */
+PHP_METHOD(LimitIterator, rewind)
{
spl_dual_it_object *intern;
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
spl_dual_it_rewind(intern);
spl_limit_it_seek(intern, intern->u.limit.offset);
} /* }}} */
-/* {{{ proto bool LimitIterator::valid()
- Check whether the current element is valid */
-SPL_METHOD(LimitIterator, valid)
+/* {{{ Check whether the current element is valid */
+PHP_METHOD(LimitIterator, valid)
{
spl_dual_it_object *intern;
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
/* RETURN_BOOL(spl_limit_it_valid(intern) == SUCCESS);*/
RETURN_BOOL((intern->u.limit.count == -1 || intern->current.pos < intern->u.limit.offset + intern->u.limit.count) && Z_TYPE(intern->current.data) != IS_UNDEF);
} /* }}} */
-/* {{{ proto void LimitIterator::next()
- Move the iterator forward */
-SPL_METHOD(LimitIterator, next)
+/* {{{ Move the iterator forward */
+PHP_METHOD(LimitIterator, next)
{
spl_dual_it_object *intern;
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
spl_dual_it_next(intern, 1);
@@ -2539,15 +2280,14 @@ SPL_METHOD(LimitIterator, next)
}
} /* }}} */
-/* {{{ proto void LimitIterator::seek(int position)
- Seek to the given position */
-SPL_METHOD(LimitIterator, seek)
+/* {{{ Seek to the given position */
+PHP_METHOD(LimitIterator, seek)
{
spl_dual_it_object *intern;
zend_long pos;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &pos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2555,47 +2295,19 @@ SPL_METHOD(LimitIterator, seek)
RETURN_LONG(intern->current.pos);
} /* }}} */
-/* {{{ proto int LimitIterator::getPosition()
- Return the current position */
-SPL_METHOD(LimitIterator, getPosition)
+/* {{{ Return the current position */
+PHP_METHOD(LimitIterator, getPosition)
{
spl_dual_it_object *intern;
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
RETURN_LONG(intern->current.pos);
} /* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_seekable_it_seek, 0)
- ZEND_ARG_TYPE_INFO(0, position, IS_LONG, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_SeekableIterator[] = {
- SPL_ABSTRACT_ME(SeekableIterator, seek, arginfo_seekable_it_seek)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_limit_it___construct, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, offset)
- ZEND_ARG_INFO(0, count)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_limit_it_seek, 0)
- ZEND_ARG_INFO(0, position)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_LimitIterator[] = {
- SPL_ME(LimitIterator, __construct, arginfo_limit_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, seek, arginfo_limit_it_seek, ZEND_ACC_PUBLIC)
- SPL_ME(LimitIterator, getPosition, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
static inline int spl_caching_it_valid(spl_dual_it_object *intern)
{
return intern->u.caching.flags & CIT_VALID ? SUCCESS : FAILURE;
@@ -2616,14 +2328,12 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern)
zval *data = &intern->current.data;
ZVAL_DEREF(data);
- Z_TRY_ADDREF_P(data);
array_set_zval_key(Z_ARRVAL(intern->u.caching.zcache), key, data);
- zval_ptr_dtor(data);
}
/* Recursion ? */
if (intern->dit_type == DIT_RecursiveCachingIterator) {
zval retval, zchildren, zflags;
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
+ zend_call_method_with_0_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "haschildren", &retval);
if (EG(exception)) {
zval_ptr_dtor(&retval);
if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
@@ -2633,7 +2343,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern)
}
} else {
if (zend_is_true(&retval)) {
- zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
+ zend_call_method_with_0_params(Z_OBJ(intern->inner.zobject), intern->inner.ce, NULL, "getchildren", &zchildren);
if (EG(exception)) {
zval_ptr_dtor(&zchildren);
if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
@@ -2686,21 +2396,19 @@ static inline void spl_caching_it_rewind(spl_dual_it_object *intern)
spl_caching_it_next(intern);
}
-/* {{{ proto CachingIterator::__construct(Iterator it [, flags = CIT_CALL_TOSTRING])
- Construct a CachingIterator from an Iterator */
-SPL_METHOD(CachingIterator, __construct)
+/* {{{ Construct a CachingIterator from an Iterator */
+PHP_METHOD(CachingIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_CachingIterator, zend_ce_iterator, DIT_CachingIterator);
} /* }}} */
-/* {{{ proto void CachingIterator::rewind()
- Rewind the iterator */
-SPL_METHOD(CachingIterator, rewind)
+/* {{{ Rewind the iterator */
+PHP_METHOD(CachingIterator, rewind)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2708,14 +2416,13 @@ SPL_METHOD(CachingIterator, rewind)
spl_caching_it_rewind(intern);
} /* }}} */
-/* {{{ proto bool CachingIterator::valid()
- Check whether the current element is valid */
-SPL_METHOD(CachingIterator, valid)
+/* {{{ Check whether the current element is valid */
+PHP_METHOD(CachingIterator, valid)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2723,14 +2430,13 @@ SPL_METHOD(CachingIterator, valid)
RETURN_BOOL(spl_caching_it_valid(intern) == SUCCESS);
} /* }}} */
-/* {{{ proto void CachingIterator::next()
- Move the iterator forward */
-SPL_METHOD(CachingIterator, next)
+/* {{{ Move the iterator forward */
+PHP_METHOD(CachingIterator, next)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2738,14 +2444,13 @@ SPL_METHOD(CachingIterator, next)
spl_caching_it_next(intern);
} /* }}} */
-/* {{{ proto bool CachingIterator::hasNext()
- Check whether the inner iterator has a valid next element */
-SPL_METHOD(CachingIterator, hasNext)
+/* {{{ Check whether the inner iterator has a valid next element */
+PHP_METHOD(CachingIterator, hasNext)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2753,18 +2458,22 @@ SPL_METHOD(CachingIterator, hasNext)
RETURN_BOOL(spl_caching_it_has_next(intern) == SUCCESS);
} /* }}} */
-/* {{{ proto string CachingIterator::__toString()
- Return the string representation of the current element */
-SPL_METHOD(CachingIterator, __toString)
+/* {{{ Return the string representation of the current element */
+PHP_METHOD(CachingIterator, __toString)
{
- spl_dual_it_object *intern;
+ spl_dual_it_object *intern;
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
if (!(intern->u.caching.flags & (CIT_CALL_TOSTRING|CIT_TOSTRING_USE_KEY|CIT_TOSTRING_USE_CURRENT|CIT_TOSTRING_USE_INNER))) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not fetch string value (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
+ RETURN_THROWS();
}
+
if (intern->u.caching.flags & CIT_TOSTRING_USE_KEY) {
ZVAL_COPY(return_value, &intern->current.key);
convert_to_string(return_value);
@@ -2781,23 +2490,22 @@ SPL_METHOD(CachingIterator, __toString)
}
} /* }}} */
-/* {{{ proto void CachingIterator::offsetSet(mixed index, mixed newval)
- Set given index in cache */
-SPL_METHOD(CachingIterator, offsetSet)
+/* {{{ Set given index in cache */
+PHP_METHOD(CachingIterator, offsetSet)
{
spl_dual_it_object *intern;
zend_string *key;
zval *value;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sz", &key, &value) == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sz", &key, &value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
Z_TRY_ADDREF_P(value);
@@ -2805,27 +2513,26 @@ SPL_METHOD(CachingIterator, offsetSet)
}
/* }}} */
-/* {{{ proto string CachingIterator::offsetGet(mixed index)
- Return the internal cache if used */
-SPL_METHOD(CachingIterator, offsetGet)
+/* {{{ Return the internal cache if used */
+PHP_METHOD(CachingIterator, offsetGet)
{
spl_dual_it_object *intern;
zend_string *key;
zval *value;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &key) == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &key) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((value = zend_symtable_find(Z_ARRVAL(intern->u.caching.zcache), key)) == NULL) {
- zend_error(E_NOTICE, "Undefined index: %s", ZSTR_VAL(key));
+ zend_error(E_WARNING, "Undefined array key \"%s\"", ZSTR_VAL(key));
return;
}
@@ -2833,79 +2540,75 @@ SPL_METHOD(CachingIterator, offsetGet)
}
/* }}} */
-/* {{{ proto void CachingIterator::offsetUnset(mixed index)
- Unset given index in cache */
-SPL_METHOD(CachingIterator, offsetUnset)
+/* {{{ Unset given index in cache */
+PHP_METHOD(CachingIterator, offsetUnset)
{
spl_dual_it_object *intern;
zend_string *key;
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
- if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
- zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &key) == FAILURE) {
+ RETURN_THROWS();
}
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &key) == FAILURE) {
- return;
+ if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
+ RETURN_THROWS();
}
zend_symtable_del(Z_ARRVAL(intern->u.caching.zcache), key);
}
/* }}} */
-/* {{{ proto bool CachingIterator::offsetExists(mixed index)
- Return whether the requested index exists */
-SPL_METHOD(CachingIterator, offsetExists)
+/* {{{ Return whether the requested index exists */
+PHP_METHOD(CachingIterator, offsetExists)
{
spl_dual_it_object *intern;
zend_string *key;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &key) == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
- }
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &key) == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(zend_symtable_exists(Z_ARRVAL(intern->u.caching.zcache), key));
}
/* }}} */
-/* {{{ proto bool CachingIterator::getCache()
- Return the cache */
-SPL_METHOD(CachingIterator, getCache)
+/* {{{ Return the cache */
+PHP_METHOD(CachingIterator, getCache)
{
- spl_dual_it_object *intern;
+ spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
+ RETURN_THROWS();
}
ZVAL_COPY(return_value, &intern->u.caching.zcache);
}
/* }}} */
-/* {{{ proto int CachingIterator::getFlags()
- Return the internal flags */
-SPL_METHOD(CachingIterator, getFlags)
+/* {{{ Return the internal flags */
+PHP_METHOD(CachingIterator, getFlags)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -2914,30 +2617,31 @@ SPL_METHOD(CachingIterator, getFlags)
}
/* }}} */
-/* {{{ proto void CachingIterator::setFlags(int flags)
- Set the internal flags */
-SPL_METHOD(CachingIterator, setFlags)
+/* {{{ Set the internal flags */
+PHP_METHOD(CachingIterator, setFlags)
{
spl_dual_it_object *intern;
zend_long flags;
- SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
+ SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
+
if (spl_cit_check_flags(flags) != SUCCESS) {
- zend_throw_exception(spl_ce_InvalidArgumentException , "Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER", 0);
- return;
+ zend_argument_value_error(1, "must contain only one of CachingIterator::CALL_TOSTRING, "
+ "CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, "
+ "or CachingIterator::TOSTRING_USE_INNER");
+ RETURN_THROWS();
}
if ((intern->u.caching.flags & CIT_CALL_TOSTRING) != 0 && (flags & CIT_CALL_TOSTRING) == 0) {
zend_throw_exception(spl_ce_InvalidArgumentException, "Unsetting flag CALL_TO_STRING is not possible", 0);
- return;
+ RETURN_THROWS();
}
if ((intern->u.caching.flags & CIT_TOSTRING_USE_INNER) != 0 && (flags & CIT_TOSTRING_USE_INNER) == 0) {
zend_throw_exception(spl_ce_InvalidArgumentException, "Unsetting flag TOSTRING_USE_INNER is not possible", 0);
- return;
+ RETURN_THROWS();
}
if ((flags & CIT_FULL_CACHE) != 0 && (intern->u.caching.flags & CIT_FULL_CACHE) == 0) {
/* clear on (re)enable */
@@ -2947,81 +2651,39 @@ SPL_METHOD(CachingIterator, setFlags)
}
/* }}} */
-/* {{{ proto void CachingIterator::count()
- Number of cached elements */
-SPL_METHOD(CachingIterator, count)
+/* {{{ Number of cached elements */
+PHP_METHOD(CachingIterator, count)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
if (!(intern->u.caching.flags & CIT_FULL_CACHE)) {
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "%s does not use a full cache (see CachingIterator::__construct)", ZSTR_VAL(Z_OBJCE_P(ZEND_THIS)->name));
- return;
+ RETURN_THROWS();
}
RETURN_LONG(zend_hash_num_elements(Z_ARRVAL(intern->u.caching.zcache)));
}
/* }}} */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_it___construct, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_caching_it_setFlags, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_caching_it_offsetGet, 0)
- ZEND_ARG_INFO(0, index)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_caching_it_offsetSet, 0)
- ZEND_ARG_INFO(0, index)
- ZEND_ARG_INFO(0, newval)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_CachingIterator[] = {
- SPL_ME(CachingIterator, __construct, arginfo_caching_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, hasNext, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, __toString, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, getFlags, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, setFlags, arginfo_caching_it_setFlags, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, offsetGet, arginfo_caching_it_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, offsetSet, arginfo_caching_it_offsetSet, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, offsetUnset, arginfo_caching_it_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, offsetExists, arginfo_caching_it_offsetGet, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, getCache, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(CachingIterator, count, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-/* {{{ proto RecursiveCachingIterator::__construct(RecursiveIterator it [, flags = CIT_CALL_TOSTRING])
- Create an iterator from a RecursiveIterator */
-SPL_METHOD(RecursiveCachingIterator, __construct)
+/* {{{ Create an iterator from a RecursiveIterator */
+PHP_METHOD(RecursiveCachingIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_RecursiveCachingIterator, spl_ce_RecursiveIterator, DIT_RecursiveCachingIterator);
} /* }}} */
-/* {{{ proto bool RecursiveCachingIterator::hasChildren()
- Check whether the current element of the inner iterator has children */
-SPL_METHOD(RecursiveCachingIterator, hasChildren)
+/* {{{ Check whether the current element of the inner iterator has children */
+PHP_METHOD(RecursiveCachingIterator, hasChildren)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3029,14 +2691,13 @@ SPL_METHOD(RecursiveCachingIterator, hasChildren)
RETURN_BOOL(Z_TYPE(intern->u.caching.zchildren) != IS_UNDEF);
} /* }}} */
-/* {{{ proto RecursiveCachingIterator RecursiveCachingIterator::getChildren()
- Return the inner iterator's children as a RecursiveCachingIterator */
-SPL_METHOD(RecursiveCachingIterator, getChildren)
+/* {{{ Return the inner iterator's children as a RecursiveCachingIterator */
+PHP_METHOD(RecursiveCachingIterator, getChildren)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3050,79 +2711,47 @@ SPL_METHOD(RecursiveCachingIterator, getChildren)
}
} /* }}} */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_rec_it___construct, 0, ZEND_RETURN_VALUE, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_RecursiveCachingIterator[] = {
- SPL_ME(RecursiveCachingIterator, __construct, arginfo_caching_rec_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveCachingIterator, hasChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(RecursiveCachingIterator, getChildren, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-/* {{{ proto IteratorIterator::__construct(Traversable it)
- Create an iterator from anything that is traversable */
-SPL_METHOD(IteratorIterator, __construct)
+/* {{{ Create an iterator from anything that is traversable */
+PHP_METHOD(IteratorIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_IteratorIterator, zend_ce_traversable, DIT_IteratorIterator);
} /* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_iterator_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_IteratorIterator[] = {
- SPL_ME(IteratorIterator, __construct, arginfo_iterator_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-/* {{{ proto NoRewindIterator::__construct(Iterator it)
- Create an iterator from another iterator */
-SPL_METHOD(NoRewindIterator, __construct)
+/* {{{ Create an iterator from another iterator */
+PHP_METHOD(NoRewindIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_NoRewindIterator, zend_ce_iterator, DIT_NoRewindIterator);
} /* }}} */
-/* {{{ proto void NoRewindIterator::rewind()
- Prevent a call to inner iterators rewind() */
-SPL_METHOD(NoRewindIterator, rewind)
+/* {{{ Prevent a call to inner iterators rewind() */
+PHP_METHOD(NoRewindIterator, rewind)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
/* nothing to do */
} /* }}} */
-/* {{{ proto bool NoRewindIterator::valid()
- Return inner iterators valid() */
-SPL_METHOD(NoRewindIterator, valid)
+/* {{{ Return inner iterators valid() */
+PHP_METHOD(NoRewindIterator, valid)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
RETURN_BOOL(intern->inner.iterator->funcs->valid(intern->inner.iterator) == SUCCESS);
} /* }}} */
-/* {{{ proto mixed NoRewindIterator::key()
- Return inner iterators key() */
-SPL_METHOD(NoRewindIterator, key)
+/* {{{ Return inner iterators key() */
+PHP_METHOD(NoRewindIterator, key)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3134,15 +2763,14 @@ SPL_METHOD(NoRewindIterator, key)
}
} /* }}} */
-/* {{{ proto mixed NoRewindIterator::current()
- Return inner iterators current() */
-SPL_METHOD(NoRewindIterator, current)
+/* {{{ Return inner iterators current() */
+PHP_METHOD(NoRewindIterator, current)
{
spl_dual_it_object *intern;
zval *data;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3152,50 +2780,32 @@ SPL_METHOD(NoRewindIterator, current)
}
} /* }}} */
-/* {{{ proto void NoRewindIterator::next()
- Return inner iterators next() */
-SPL_METHOD(NoRewindIterator, next)
+/* {{{ Return inner iterators next() */
+PHP_METHOD(NoRewindIterator, next)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
intern->inner.iterator->funcs->move_forward(intern->inner.iterator);
} /* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_norewind_it___construct, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_NoRewindIterator[] = {
- SPL_ME(NoRewindIterator, __construct, arginfo_norewind_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(NoRewindIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(NoRewindIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(NoRewindIterator, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(NoRewindIterator, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(NoRewindIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-/* {{{ proto InfiniteIterator::__construct(Iterator it)
- Create an iterator from another iterator */
-SPL_METHOD(InfiniteIterator, __construct)
+/* {{{ Create an iterator from another iterator */
+PHP_METHOD(InfiniteIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_InfiniteIterator, zend_ce_iterator, DIT_InfiniteIterator);
} /* }}} */
-/* {{{ proto void InfiniteIterator::next()
- Prevent a call to inner iterators rewind() (internally the current data will be fetched if valid()) */
-SPL_METHOD(InfiniteIterator, next)
+/* {{{ Prevent a call to inner iterators rewind() (internally the current data will be fetched if valid()) */
+PHP_METHOD(InfiniteIterator, next)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3211,69 +2821,52 @@ SPL_METHOD(InfiniteIterator, next)
}
} /* }}} */
-static const zend_function_entry spl_funcs_InfiniteIterator[] = {
- SPL_ME(InfiniteIterator, __construct, arginfo_norewind_it___construct, ZEND_ACC_PUBLIC)
- SPL_ME(InfiniteIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-/* {{{ proto void EmptyIterator::rewind()
- Does nothing */
-SPL_METHOD(EmptyIterator, rewind)
+/* {{{ Does nothing */
+PHP_METHOD(EmptyIterator, rewind)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
} /* }}} */
-/* {{{ proto false EmptyIterator::valid()
- Return false */
-SPL_METHOD(EmptyIterator, valid)
+/* {{{ Return false */
+PHP_METHOD(EmptyIterator, valid)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
+
RETURN_FALSE;
} /* }}} */
-/* {{{ proto void EmptyIterator::key()
- Throws exception BadMethodCallException */
-SPL_METHOD(EmptyIterator, key)
+/* {{{ Throws exception BadMethodCallException */
+PHP_METHOD(EmptyIterator, key)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
+
zend_throw_exception(spl_ce_BadMethodCallException, "Accessing the key of an EmptyIterator", 0);
} /* }}} */
-/* {{{ proto void EmptyIterator::current()
- Throws exception BadMethodCallException */
-SPL_METHOD(EmptyIterator, current)
+/* {{{ Throws exception BadMethodCallException */
+PHP_METHOD(EmptyIterator, current)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
+
zend_throw_exception(spl_ce_BadMethodCallException, "Accessing the value of an EmptyIterator", 0);
} /* }}} */
-/* {{{ proto void EmptyIterator::next()
- Does nothing */
-SPL_METHOD(EmptyIterator, next)
+/* {{{ Does nothing */
+PHP_METHOD(EmptyIterator, next)
{
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
} /* }}} */
-static const zend_function_entry spl_funcs_EmptyIterator[] = {
- SPL_ME(EmptyIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(EmptyIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(EmptyIterator, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(EmptyIterator, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(EmptyIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
int spl_append_it_next_iterator(spl_dual_it_object *intern) /* {{{*/
{
spl_dual_it_free(intern);
@@ -3320,25 +2913,24 @@ void spl_append_it_next(spl_dual_it_object *intern) /* {{{ */
spl_append_it_fetch(intern);
} /* }}} */
-/* {{{ proto AppendIterator::__construct()
- Create an AppendIterator */
-SPL_METHOD(AppendIterator, __construct)
+/* {{{ Create an AppendIterator */
+PHP_METHOD(AppendIterator, __construct)
{
spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_AppendIterator, zend_ce_iterator, DIT_AppendIterator);
} /* }}} */
-/* {{{ proto void AppendIterator::append(Iterator it)
- Append an iterator */
-SPL_METHOD(AppendIterator, append)
+/* {{{ Append an iterator */
+PHP_METHOD(AppendIterator, append)
{
spl_dual_it_object *intern;
zval *it;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &it, zend_ce_iterator) == FAILURE) {
+ RETURN_THROWS();
+ }
+
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
- if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "O", &it, zend_ce_iterator) == FAILURE) {
- return;
- }
if (intern->u.append.iterator->funcs->valid(intern->u.append.iterator) == SUCCESS && spl_dual_it_valid(intern) != SUCCESS) {
spl_array_iterator_append(&intern->u.append.zarrayit, it);
intern->u.append.iterator->funcs->move_forward(intern->u.append.iterator);
@@ -3357,14 +2949,13 @@ SPL_METHOD(AppendIterator, append)
}
} /* }}} */
-/* {{{ proto mixed AppendIterator::current()
- Get the current element value */
-SPL_METHOD(AppendIterator, current)
+/* {{{ Get the current element value */
+PHP_METHOD(AppendIterator, current)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3379,14 +2970,13 @@ SPL_METHOD(AppendIterator, current)
}
} /* }}} */
-/* {{{ proto void AppendIterator::rewind()
- Rewind to the first iterator and rewind the first iterator, too */
-SPL_METHOD(AppendIterator, rewind)
+/* {{{ Rewind to the first iterator and rewind the first iterator, too */
+PHP_METHOD(AppendIterator, rewind)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3397,14 +2987,13 @@ SPL_METHOD(AppendIterator, rewind)
}
} /* }}} */
-/* {{{ proto bool AppendIterator::valid()
- Check if the current state is valid */
-SPL_METHOD(AppendIterator, valid)
+/* {{{ Check if the current state is valid */
+PHP_METHOD(AppendIterator, valid)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3412,14 +3001,13 @@ SPL_METHOD(AppendIterator, valid)
RETURN_BOOL(Z_TYPE(intern->current.data) != IS_UNDEF);
} /* }}} */
-/* {{{ proto void AppendIterator::next()
- Forward to next element */
-SPL_METHOD(AppendIterator, next)
+/* {{{ Forward to next element */
+PHP_METHOD(AppendIterator, next)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3427,14 +3015,13 @@ SPL_METHOD(AppendIterator, next)
spl_append_it_next(intern);
} /* }}} */
-/* {{{ proto int AppendIterator::getIteratorIndex()
- Get index of iterator */
-SPL_METHOD(AppendIterator, getIteratorIndex)
+/* {{{ Get index of iterator */
+PHP_METHOD(AppendIterator, getIteratorIndex)
{
spl_dual_it_object *intern;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3443,15 +3030,14 @@ SPL_METHOD(AppendIterator, getIteratorIndex)
spl_array_iterator_key(&intern->u.append.zarrayit, return_value);
} /* }}} */
-/* {{{ proto ArrayIterator AppendIterator::getArrayIterator()
- Get access to inner ArrayIterator */
-SPL_METHOD(AppendIterator, getArrayIterator)
+/* {{{ Get access to inner ArrayIterator */
+PHP_METHOD(AppendIterator, getArrayIterator)
{
spl_dual_it_object *intern;
zval *value;
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
@@ -3460,24 +3046,6 @@ SPL_METHOD(AppendIterator, getArrayIterator)
ZVAL_COPY_DEREF(return_value, value);
} /* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_append_it_append, 0)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_AppendIterator[] = {
- SPL_ME(AppendIterator, __construct, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, append, arginfo_append_it_append, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, rewind, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, valid, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, key, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, current, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, next, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(dual_it, getInnerIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, getIteratorIndex, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- SPL_ME(AppendIterator, getArrayIterator, arginfo_recursive_it_void, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, void *puser)
{
zend_object_iterator *iter;
@@ -3563,15 +3131,14 @@ static int spl_iterator_to_values_apply(zend_object_iterator *iter, void *puser)
}
/* }}} */
-/* {{{ proto array iterator_to_array(Traversable it [, bool use_keys = true])
- Copy the iterator into an array */
+/* {{{ Copy the iterator into an array */
PHP_FUNCTION(iterator_to_array)
{
zval *obj;
zend_bool use_keys = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|b", &obj, zend_ce_traversable, &use_keys) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
array_init(return_value);
@@ -3585,15 +3152,14 @@ static int spl_iterator_count_apply(zend_object_iterator *iter, void *puser) /*
}
/* }}} */
-/* {{{ proto int iterator_count(Traversable it)
- Count the elements in an iterator */
+/* {{{ Count the elements in an iterator */
PHP_FUNCTION(iterator_count)
{
zval *obj;
zend_long count = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &obj, zend_ce_traversable) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (spl_iterator_apply(obj, spl_iterator_count_apply, (void*)&count) == FAILURE) {
@@ -3626,15 +3192,14 @@ static int spl_iterator_func_apply(zend_object_iterator *iter, void *puser) /* {
}
/* }}} */
-/* {{{ proto int iterator_apply(Traversable it, mixed function [, mixed params])
- Calls a function for every element in an iterator */
+/* {{{ Calls a function for every element in an iterator */
PHP_FUNCTION(iterator_apply)
{
spl_iterator_apply_info apply_info;
apply_info.args = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Of|a!", &apply_info.obj, zend_ce_traversable, &apply_info.fci, &apply_info.fcc, &apply_info.args) == FAILURE) {
- return;
+ RETURN_THROWS();
}
apply_info.count = 0;
@@ -3649,19 +3214,13 @@ PHP_FUNCTION(iterator_apply)
}
/* }}} */
-static const zend_function_entry spl_funcs_OuterIterator[] = {
- SPL_ABSTRACT_ME(OuterIterator, getInnerIterator, arginfo_recursive_it_void)
- PHP_FE_END
-};
-
-/* {{{ PHP_MINIT_FUNCTION(spl_iterators)
- */
+/* {{{ PHP_MINIT_FUNCTION(spl_iterators) */
PHP_MINIT_FUNCTION(spl_iterators)
{
REGISTER_SPL_INTERFACE(RecursiveIterator);
REGISTER_SPL_ITERATOR(RecursiveIterator);
- REGISTER_SPL_STD_CLASS_EX(RecursiveIteratorIterator, spl_RecursiveIteratorIterator_new, spl_funcs_RecursiveIteratorIterator);
+ REGISTER_SPL_STD_CLASS_EX(RecursiveIteratorIterator, spl_RecursiveIteratorIterator_new, class_RecursiveIteratorIterator_methods);
REGISTER_SPL_ITERATOR(RecursiveIteratorIterator);
memcpy(&spl_handlers_rec_it_it, &std_object_handlers, sizeof(zend_object_handlers));
@@ -3674,10 +3233,10 @@ PHP_MINIT_FUNCTION(spl_iterators)
memcpy(&spl_handlers_dual_it, &std_object_handlers, sizeof(zend_object_handlers));
spl_handlers_dual_it.offset = XtOffsetOf(spl_dual_it_object, std);
spl_handlers_dual_it.get_method = spl_dual_it_get_method;
- /*spl_handlers_dual_it.call_method = spl_dual_it_call_method;*/
spl_handlers_dual_it.clone_obj = NULL;
spl_handlers_dual_it.dtor_obj = spl_dual_it_dtor;
spl_handlers_dual_it.free_obj = spl_dual_it_free_storage;
+ spl_handlers_dual_it.get_gc = spl_dual_it_get_gc;
spl_ce_RecursiveIteratorIterator->get_iterator = spl_recursive_it_get_iterator;
@@ -3689,32 +3248,33 @@ PHP_MINIT_FUNCTION(spl_iterators)
REGISTER_SPL_INTERFACE(OuterIterator);
REGISTER_SPL_ITERATOR(OuterIterator);
- REGISTER_SPL_STD_CLASS_EX(IteratorIterator, spl_dual_it_new, spl_funcs_IteratorIterator);
+ REGISTER_SPL_STD_CLASS_EX(IteratorIterator, spl_dual_it_new, class_IteratorIterator_methods);
REGISTER_SPL_ITERATOR(IteratorIterator);
REGISTER_SPL_IMPLEMENTS(IteratorIterator, OuterIterator);
- REGISTER_SPL_SUB_CLASS_EX(FilterIterator, IteratorIterator, spl_dual_it_new, spl_funcs_FilterIterator);
+ REGISTER_SPL_SUB_CLASS_EX(FilterIterator, IteratorIterator, spl_dual_it_new, class_FilterIterator_methods);
spl_ce_FilterIterator->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
- REGISTER_SPL_SUB_CLASS_EX(RecursiveFilterIterator, FilterIterator, spl_dual_it_new, spl_funcs_RecursiveFilterIterator);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveFilterIterator, FilterIterator, spl_dual_it_new, class_RecursiveFilterIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveFilterIterator, RecursiveIterator);
- REGISTER_SPL_SUB_CLASS_EX(CallbackFilterIterator, FilterIterator, spl_dual_it_new, spl_funcs_CallbackFilterIterator);
+ REGISTER_SPL_SUB_CLASS_EX(CallbackFilterIterator, FilterIterator, spl_dual_it_new, class_CallbackFilterIterator_methods);
- REGISTER_SPL_SUB_CLASS_EX(RecursiveCallbackFilterIterator, CallbackFilterIterator, spl_dual_it_new, spl_funcs_RecursiveCallbackFilterIterator);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveCallbackFilterIterator, CallbackFilterIterator, spl_dual_it_new, class_RecursiveCallbackFilterIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveCallbackFilterIterator, RecursiveIterator);
- REGISTER_SPL_SUB_CLASS_EX(ParentIterator, RecursiveFilterIterator, spl_dual_it_new, spl_funcs_ParentIterator);
+ REGISTER_SPL_SUB_CLASS_EX(ParentIterator, RecursiveFilterIterator, spl_dual_it_new, class_ParentIterator_methods);
REGISTER_SPL_INTERFACE(SeekableIterator);
REGISTER_SPL_ITERATOR(SeekableIterator);
- REGISTER_SPL_SUB_CLASS_EX(LimitIterator, IteratorIterator, spl_dual_it_new, spl_funcs_LimitIterator);
+ REGISTER_SPL_SUB_CLASS_EX(LimitIterator, IteratorIterator, spl_dual_it_new, class_LimitIterator_methods);
- REGISTER_SPL_SUB_CLASS_EX(CachingIterator, IteratorIterator, spl_dual_it_new, spl_funcs_CachingIterator);
+ REGISTER_SPL_SUB_CLASS_EX(CachingIterator, IteratorIterator, spl_dual_it_new, class_CachingIterator_methods);
REGISTER_SPL_IMPLEMENTS(CachingIterator, ArrayAccess);
REGISTER_SPL_IMPLEMENTS(CachingIterator, Countable);
+ REGISTER_SPL_IMPLEMENTS(CachingIterator, Stringable);
REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CALL_TOSTRING", CIT_CALL_TOSTRING);
REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CATCH_GET_CHILD", CIT_CATCH_GET_CHILD);
@@ -3723,17 +3283,17 @@ PHP_MINIT_FUNCTION(spl_iterators)
REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "TOSTRING_USE_INNER", CIT_TOSTRING_USE_INNER);
REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "FULL_CACHE", CIT_FULL_CACHE);
- REGISTER_SPL_SUB_CLASS_EX(RecursiveCachingIterator, CachingIterator, spl_dual_it_new, spl_funcs_RecursiveCachingIterator);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveCachingIterator, CachingIterator, spl_dual_it_new, class_RecursiveCachingIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveCachingIterator, RecursiveIterator);
- REGISTER_SPL_SUB_CLASS_EX(NoRewindIterator, IteratorIterator, spl_dual_it_new, spl_funcs_NoRewindIterator);
+ REGISTER_SPL_SUB_CLASS_EX(NoRewindIterator, IteratorIterator, spl_dual_it_new, class_NoRewindIterator_methods);
- REGISTER_SPL_SUB_CLASS_EX(AppendIterator, IteratorIterator, spl_dual_it_new, spl_funcs_AppendIterator);
+ REGISTER_SPL_SUB_CLASS_EX(AppendIterator, IteratorIterator, spl_dual_it_new, class_AppendIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveIteratorIterator, OuterIterator);
- REGISTER_SPL_SUB_CLASS_EX(InfiniteIterator, IteratorIterator, spl_dual_it_new, spl_funcs_InfiniteIterator);
- REGISTER_SPL_SUB_CLASS_EX(RegexIterator, FilterIterator, spl_dual_it_new, spl_funcs_RegexIterator);
+ REGISTER_SPL_SUB_CLASS_EX(InfiniteIterator, IteratorIterator, spl_dual_it_new, class_InfiniteIterator_methods);
+ REGISTER_SPL_SUB_CLASS_EX(RegexIterator, FilterIterator, spl_dual_it_new, class_RegexIterator_methods);
REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "USE_KEY", REGIT_USE_KEY);
REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "INVERT_MATCH",REGIT_INVERTED);
REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "MATCH", REGIT_MODE_MATCH);
@@ -3742,13 +3302,13 @@ PHP_MINIT_FUNCTION(spl_iterators)
REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "SPLIT", REGIT_MODE_SPLIT);
REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "REPLACE", REGIT_MODE_REPLACE);
REGISTER_SPL_PROPERTY(RegexIterator, "replacement", 0);
- REGISTER_SPL_SUB_CLASS_EX(RecursiveRegexIterator, RegexIterator, spl_dual_it_new, spl_funcs_RecursiveRegexIterator);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveRegexIterator, RegexIterator, spl_dual_it_new, class_RecursiveRegexIterator_methods);
REGISTER_SPL_IMPLEMENTS(RecursiveRegexIterator, RecursiveIterator);
- REGISTER_SPL_STD_CLASS_EX(EmptyIterator, NULL, spl_funcs_EmptyIterator);
+ REGISTER_SPL_STD_CLASS_EX(EmptyIterator, NULL, class_EmptyIterator_methods);
REGISTER_SPL_ITERATOR(EmptyIterator);
- REGISTER_SPL_SUB_CLASS_EX(RecursiveTreeIterator, RecursiveIteratorIterator, spl_RecursiveTreeIterator_new, spl_funcs_RecursiveTreeIterator);
+ REGISTER_SPL_SUB_CLASS_EX(RecursiveTreeIterator, RecursiveIteratorIterator, spl_RecursiveTreeIterator_new, class_RecursiveTreeIterator_methods);
REGISTER_SPL_CLASS_CONST_LONG(RecursiveTreeIterator, "BYPASS_CURRENT", RTIT_BYPASS_CURRENT);
REGISTER_SPL_CLASS_CONST_LONG(RecursiveTreeIterator, "BYPASS_KEY", RTIT_BYPASS_KEY);
REGISTER_SPL_CLASS_CONST_LONG(RecursiveTreeIterator, "PREFIX_LEFT", 0);
diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h
index af2f815538..5d890bb2b9 100644
--- a/ext/spl/spl_iterators.h
+++ b/ext/spl/spl_iterators.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -29,6 +27,7 @@
#define spl_ce_ArrayAccess zend_ce_arrayaccess
#define spl_ce_Serializable zend_ce_serializable
#define spl_ce_Countable zend_ce_countable
+#define spl_ce_Stringable zend_ce_stringable
extern PHPAPI zend_class_entry *spl_ce_RecursiveIterator;
extern PHPAPI zend_class_entry *spl_ce_RecursiveIteratorIterator;
diff --git a/ext/spl/spl_iterators.stub.php b/ext/spl/spl_iterators.stub.php
new file mode 100644
index 0000000000..437efec46b
--- /dev/null
+++ b/ext/spl/spl_iterators.stub.php
@@ -0,0 +1,397 @@
+<?php
+
+/** @generate-function-entries */
+
+class EmptyIterator implements Iterator
+{
+ /** @return void */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return void */
+ public function key() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return void */
+ public function rewind() {}
+}
+
+class CallbackFilterIterator extends FilterIterator
+{
+ public function __construct(Iterator $iterator, callable $callback) {}
+
+ /** @return bool */
+ public function accept() {}
+}
+
+class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator
+{
+ public function __construct(RecursiveIterator $iterator, callable $callback) {}
+
+ /**
+ * @return bool
+ * @implementation-alias RecursiveFilterIterator::hasChildren
+ */
+ public function hasChildren() {}
+
+ /** @return RecursiveCallbackFilterIterator */
+ public function getChildren() {}
+}
+
+interface RecursiveIterator extends Iterator
+{
+ /** @return bool */
+ public function hasChildren();
+
+ /** @return RecursiveIterator */
+ public function getChildren();
+}
+
+class RecursiveIteratorIterator implements OuterIterator
+{
+ public function __construct(Traversable $iterator, int $mode = self::LEAVES_ONLY, int $flags = 0) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return mixed */
+ public function key() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return int */
+ public function getDepth() {}
+
+ /** @return RecursiveIterator|null */
+ public function getSubIterator(?int $level = null) {}
+
+ /** @return RecursiveIterator */
+ public function getInnerIterator() {}
+
+ /** @return void */
+ public function beginIteration() {}
+
+ /** @return void */
+ public function endIteration() {}
+
+ /** @return bool|null */
+ public function callHasChildren() {}
+
+ /** @return RecursiveIterator|null */
+ public function callGetChildren() {}
+
+ /** @return void */
+ public function beginChildren() {}
+
+ /** @return void */
+ public function endChildren() {}
+
+ /** @return void */
+ public function nextElement() {}
+
+ /** @return void */
+ public function setMaxDepth(int $maxDepth = -1) {}
+
+ /** @return int|false */
+ public function getMaxDepth() {}
+}
+
+interface OuterIterator extends Iterator
+{
+ /** @return Iterator */
+ public function getInnerIterator();
+}
+
+class IteratorIterator implements OuterIterator
+{
+ public function __construct(Traversable $iterator, ?string $class = null) {}
+
+ /** @return Iterator|null */
+ public function getInnerIterator() {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return mixed */
+ public function key() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+}
+
+abstract class FilterIterator extends IteratorIterator
+{
+ /** @return bool */
+ abstract public function accept();
+
+ public function __construct(Iterator $iterator) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return void */
+ public function next() {}
+}
+
+abstract class RecursiveFilterIterator extends FilterIterator implements RecursiveIterator
+{
+ public function __construct(RecursiveIterator $iterator) {}
+
+ /** @return bool */
+ public function hasChildren() {}
+
+ /** @return RecursiveFilterIterator|null */
+ public function getChildren() {}
+}
+
+class ParentIterator extends RecursiveFilterIterator
+{
+ public function __construct(RecursiveIterator $iterator) {}
+
+ /**
+ * @return bool
+ * @implementation-alias RecursiveFilterIterator::hasChildren
+ */
+ public function accept() {}
+}
+
+interface SeekableIterator extends Iterator
+{
+ /** @return void */
+ public function seek(int $offset);
+}
+
+class LimitIterator extends IteratorIterator
+{
+ public function __construct(Iterator $iterator, int $offset = 0, int $limit = -1) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return int */
+ public function seek(int $offset) {}
+
+ /** @return int */
+ public function getPosition() {}
+}
+
+class CachingIterator extends IteratorIterator implements ArrayAccess, Countable
+{
+ public function __construct(Iterator $iterator, int $flags = self::CALL_TOSTRING) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return bool */
+ public function hasNext() {}
+
+ public function __toString(): string {}
+
+ /** @return int */
+ public function getFlags() {}
+
+ /** @return void */
+ public function setFlags(int $flags) {}
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ public function offsetGet($key) {}
+
+ /**
+ * @param string $key
+ * @return void
+ */
+ public function offsetSet($key, mixed $value) {}
+
+ /**
+ * @param string $key
+ * @return void
+ */
+ public function offsetUnset($key) {}
+
+ /**
+ * @param string $key
+ * @return bool
+ */
+ public function offsetExists($key) {}
+
+ /** @return array */
+ public function getCache() {}
+
+ /** @return int */
+ public function count() {}
+}
+
+class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator
+{
+ public function __construct(Iterator $iterator, int $flags = self::CALL_TOSTRING) {}
+
+ /** @return bool */
+ public function hasChildren() {}
+
+ /** @return RecursiveCachingIterator|null */
+ public function getChildren() {}
+}
+
+class NoRewindIterator extends IteratorIterator
+{
+ public function __construct(Iterator $iterator) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return mixed */
+ public function key() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+}
+
+class AppendIterator extends IteratorIterator
+{
+ public function __construct() {}
+
+ /** @return void */
+ public function append(Iterator $iterator) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return int */
+ public function getIteratorIndex() {}
+
+ /** @return ArrayIterator */
+ public function getArrayIterator() {}
+}
+
+class InfiniteIterator extends IteratorIterator
+{
+ public function __construct(Iterator $iterator) {}
+
+ /** @return void */
+ public function next() {}
+}
+
+class RegexIterator extends FilterIterator
+{
+ public function __construct(Iterator $iterator, string $pattern, int $mode = self::MATCH, int $flags = 0, int $pregFlags = 0) {}
+
+ /** @return bool */
+ public function accept() {}
+
+ /** @return int */
+ public function getMode() {}
+
+ /** @return void */
+ public function setMode(int $mode) {}
+
+ /** @return int */
+ public function getFlags() {}
+
+ /** @return void */
+ public function setFlags(int $flags) {}
+
+ /** @return string */
+ public function getRegex() {}
+
+ /** @return int */
+ public function getPregFlags() {}
+
+ /** @return void */
+ public function setPregFlags(int $pregFlags) {}
+}
+
+class RecursiveRegexIterator extends RegexIterator implements RecursiveIterator
+{
+ public function __construct(RecursiveIterator $iterator, string $pattern, int $mode = self::MATCH, int $flags = 0, int $pregFlags = 0) {}
+
+ /** @return bool */
+ public function accept() {}
+
+ /**
+ * @return bool
+ * @implementation-alias RecursiveFilterIterator::hasChildren
+ */
+ public function hasChildren() {}
+
+ /** @return RecursiveRegexIterator */
+ public function getChildren() {}
+}
+
+class RecursiveTreeIterator extends RecursiveIteratorIterator
+{
+ /** @param RecursiveIterator|IteratorAggregate $iterator */
+ public function __construct(
+ $iterator,
+ int $flags = self::BYPASS_KEY,
+ int $cachingIteratorFlags = CachingIterator::CATCH_GET_CHILD,
+ int $mode = self::SELF_FIRST
+ ) {}
+
+ /** @return mixed */
+ public function key() {}
+
+ /** @return mixed */
+ public function current() {}
+
+ /** @return string */
+ public function getPrefix() {}
+
+ /** @return void */
+ public function setPostfix(string $postfix) {}
+
+ /** @return void */
+ public function setPrefixPart(int $part, string $value) {}
+
+ /** @return string */
+ public function getEntry() {}
+
+ /** @return string */
+ public function getPostfix() {}
+}
diff --git a/ext/spl/spl_iterators_arginfo.h b/ext/spl/spl_iterators_arginfo.h
new file mode 100644
index 0000000000..999528883a
--- /dev/null
+++ b/ext/spl/spl_iterators_arginfo.h
@@ -0,0 +1,593 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: ae7df94646bf08874d7b9804833d0081c40e0348 */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_EmptyIterator_current, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_EmptyIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_EmptyIterator_key arginfo_class_EmptyIterator_current
+
+#define arginfo_class_EmptyIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_EmptyIterator_rewind arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CallbackFilterIterator___construct, 0, 0, 2)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_CallbackFilterIterator_accept arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveCallbackFilterIterator___construct, 0, 0, 2)
+ ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
+ ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveCallbackFilterIterator_hasChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveCallbackFilterIterator_getChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIterator_hasChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIterator_getChildren arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveIteratorIterator___construct, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::LEAVES_ONLY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveIteratorIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_key arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_current arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_getDepth arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveIteratorIterator_getSubIterator, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, level, IS_LONG, 1, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveIteratorIterator_getInnerIterator arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_beginIteration arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_endIteration arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_callHasChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_callGetChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_beginChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_endChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveIteratorIterator_nextElement arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveIteratorIterator_setMaxDepth, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxDepth, IS_LONG, 0, "-1")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveIteratorIterator_getMaxDepth arginfo_class_EmptyIterator_current
+
+#define arginfo_class_OuterIterator_getInnerIterator arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IteratorIterator___construct, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Traversable, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, class, IS_STRING, 1, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_IteratorIterator_getInnerIterator arginfo_class_EmptyIterator_current
+
+#define arginfo_class_IteratorIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_IteratorIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_IteratorIterator_key arginfo_class_EmptyIterator_current
+
+#define arginfo_class_IteratorIterator_current arginfo_class_EmptyIterator_current
+
+#define arginfo_class_IteratorIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_FilterIterator_accept arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FilterIterator___construct, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_FilterIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_FilterIterator_next arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveFilterIterator___construct, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveFilterIterator_hasChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveFilterIterator_getChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_ParentIterator___construct arginfo_class_RecursiveFilterIterator___construct
+
+#define arginfo_class_ParentIterator_accept arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SeekableIterator_seek, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_LimitIterator___construct, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, limit, IS_LONG, 0, "-1")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_LimitIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_LimitIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_LimitIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_LimitIterator_seek arginfo_class_SeekableIterator_seek
+
+#define arginfo_class_LimitIterator_getPosition arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator___construct, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "self::CALL_TOSTRING")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_CachingIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_CachingIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_CachingIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_CachingIterator_hasNext arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_CachingIterator___toString, 0, 0, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_CachingIterator_getFlags arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator_setFlags, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator_offsetGet, 0, 0, 1)
+ ZEND_ARG_INFO(0, key)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_CachingIterator_offsetSet, 0, 0, 2)
+ ZEND_ARG_INFO(0, key)
+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_CachingIterator_offsetUnset arginfo_class_CachingIterator_offsetGet
+
+#define arginfo_class_CachingIterator_offsetExists arginfo_class_CachingIterator_offsetGet
+
+#define arginfo_class_CachingIterator_getCache arginfo_class_EmptyIterator_current
+
+#define arginfo_class_CachingIterator_count arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveCachingIterator___construct arginfo_class_CachingIterator___construct
+
+#define arginfo_class_RecursiveCachingIterator_hasChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveCachingIterator_getChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_NoRewindIterator___construct arginfo_class_FilterIterator___construct
+
+#define arginfo_class_NoRewindIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_NoRewindIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_NoRewindIterator_key arginfo_class_EmptyIterator_current
+
+#define arginfo_class_NoRewindIterator_current arginfo_class_EmptyIterator_current
+
+#define arginfo_class_NoRewindIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator___construct arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator_append arginfo_class_FilterIterator___construct
+
+#define arginfo_class_AppendIterator_rewind arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator_valid arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator_current arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator_next arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator_getIteratorIndex arginfo_class_EmptyIterator_current
+
+#define arginfo_class_AppendIterator_getArrayIterator arginfo_class_EmptyIterator_current
+
+#define arginfo_class_InfiniteIterator___construct arginfo_class_FilterIterator___construct
+
+#define arginfo_class_InfiniteIterator_next arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RegexIterator___construct, 0, 0, 2)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::MATCH")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pregFlags, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RegexIterator_accept arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RegexIterator_getMode arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RegexIterator_setMode, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RegexIterator_getFlags arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RegexIterator_setFlags arginfo_class_CachingIterator_setFlags
+
+#define arginfo_class_RegexIterator_getRegex arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RegexIterator_getPregFlags arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RegexIterator_setPregFlags, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, pregFlags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveRegexIterator___construct, 0, 0, 2)
+ ZEND_ARG_OBJ_INFO(0, iterator, RecursiveIterator, 0)
+ ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::MATCH")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, pregFlags, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveRegexIterator_accept arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveRegexIterator_hasChildren arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveRegexIterator_getChildren arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveTreeIterator___construct, 0, 0, 1)
+ ZEND_ARG_INFO(0, iterator)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "self::BYPASS_KEY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, cachingIteratorFlags, IS_LONG, 0, "CachingIterator::CATCH_GET_CHILD")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "self::SELF_FIRST")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveTreeIterator_key arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveTreeIterator_current arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveTreeIterator_getPrefix arginfo_class_EmptyIterator_current
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveTreeIterator_setPostfix, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, postfix, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_RecursiveTreeIterator_setPrefixPart, 0, 0, 2)
+ ZEND_ARG_TYPE_INFO(0, part, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_RecursiveTreeIterator_getEntry arginfo_class_EmptyIterator_current
+
+#define arginfo_class_RecursiveTreeIterator_getPostfix arginfo_class_EmptyIterator_current
+
+
+ZEND_METHOD(EmptyIterator, current);
+ZEND_METHOD(EmptyIterator, next);
+ZEND_METHOD(EmptyIterator, key);
+ZEND_METHOD(EmptyIterator, valid);
+ZEND_METHOD(EmptyIterator, rewind);
+ZEND_METHOD(CallbackFilterIterator, __construct);
+ZEND_METHOD(CallbackFilterIterator, accept);
+ZEND_METHOD(RecursiveCallbackFilterIterator, __construct);
+ZEND_METHOD(RecursiveFilterIterator, hasChildren);
+ZEND_METHOD(RecursiveCallbackFilterIterator, getChildren);
+ZEND_METHOD(RecursiveIteratorIterator, __construct);
+ZEND_METHOD(RecursiveIteratorIterator, rewind);
+ZEND_METHOD(RecursiveIteratorIterator, valid);
+ZEND_METHOD(RecursiveIteratorIterator, key);
+ZEND_METHOD(RecursiveIteratorIterator, current);
+ZEND_METHOD(RecursiveIteratorIterator, next);
+ZEND_METHOD(RecursiveIteratorIterator, getDepth);
+ZEND_METHOD(RecursiveIteratorIterator, getSubIterator);
+ZEND_METHOD(RecursiveIteratorIterator, getInnerIterator);
+ZEND_METHOD(RecursiveIteratorIterator, beginIteration);
+ZEND_METHOD(RecursiveIteratorIterator, endIteration);
+ZEND_METHOD(RecursiveIteratorIterator, callHasChildren);
+ZEND_METHOD(RecursiveIteratorIterator, callGetChildren);
+ZEND_METHOD(RecursiveIteratorIterator, beginChildren);
+ZEND_METHOD(RecursiveIteratorIterator, endChildren);
+ZEND_METHOD(RecursiveIteratorIterator, nextElement);
+ZEND_METHOD(RecursiveIteratorIterator, setMaxDepth);
+ZEND_METHOD(RecursiveIteratorIterator, getMaxDepth);
+ZEND_METHOD(IteratorIterator, __construct);
+ZEND_METHOD(IteratorIterator, getInnerIterator);
+ZEND_METHOD(IteratorIterator, rewind);
+ZEND_METHOD(IteratorIterator, valid);
+ZEND_METHOD(IteratorIterator, key);
+ZEND_METHOD(IteratorIterator, current);
+ZEND_METHOD(IteratorIterator, next);
+ZEND_METHOD(FilterIterator, __construct);
+ZEND_METHOD(FilterIterator, rewind);
+ZEND_METHOD(FilterIterator, next);
+ZEND_METHOD(RecursiveFilterIterator, __construct);
+ZEND_METHOD(RecursiveFilterIterator, getChildren);
+ZEND_METHOD(ParentIterator, __construct);
+ZEND_METHOD(LimitIterator, __construct);
+ZEND_METHOD(LimitIterator, rewind);
+ZEND_METHOD(LimitIterator, valid);
+ZEND_METHOD(LimitIterator, next);
+ZEND_METHOD(LimitIterator, seek);
+ZEND_METHOD(LimitIterator, getPosition);
+ZEND_METHOD(CachingIterator, __construct);
+ZEND_METHOD(CachingIterator, rewind);
+ZEND_METHOD(CachingIterator, valid);
+ZEND_METHOD(CachingIterator, next);
+ZEND_METHOD(CachingIterator, hasNext);
+ZEND_METHOD(CachingIterator, __toString);
+ZEND_METHOD(CachingIterator, getFlags);
+ZEND_METHOD(CachingIterator, setFlags);
+ZEND_METHOD(CachingIterator, offsetGet);
+ZEND_METHOD(CachingIterator, offsetSet);
+ZEND_METHOD(CachingIterator, offsetUnset);
+ZEND_METHOD(CachingIterator, offsetExists);
+ZEND_METHOD(CachingIterator, getCache);
+ZEND_METHOD(CachingIterator, count);
+ZEND_METHOD(RecursiveCachingIterator, __construct);
+ZEND_METHOD(RecursiveCachingIterator, hasChildren);
+ZEND_METHOD(RecursiveCachingIterator, getChildren);
+ZEND_METHOD(NoRewindIterator, __construct);
+ZEND_METHOD(NoRewindIterator, rewind);
+ZEND_METHOD(NoRewindIterator, valid);
+ZEND_METHOD(NoRewindIterator, key);
+ZEND_METHOD(NoRewindIterator, current);
+ZEND_METHOD(NoRewindIterator, next);
+ZEND_METHOD(AppendIterator, __construct);
+ZEND_METHOD(AppendIterator, append);
+ZEND_METHOD(AppendIterator, rewind);
+ZEND_METHOD(AppendIterator, valid);
+ZEND_METHOD(AppendIterator, current);
+ZEND_METHOD(AppendIterator, next);
+ZEND_METHOD(AppendIterator, getIteratorIndex);
+ZEND_METHOD(AppendIterator, getArrayIterator);
+ZEND_METHOD(InfiniteIterator, __construct);
+ZEND_METHOD(InfiniteIterator, next);
+ZEND_METHOD(RegexIterator, __construct);
+ZEND_METHOD(RegexIterator, accept);
+ZEND_METHOD(RegexIterator, getMode);
+ZEND_METHOD(RegexIterator, setMode);
+ZEND_METHOD(RegexIterator, getFlags);
+ZEND_METHOD(RegexIterator, setFlags);
+ZEND_METHOD(RegexIterator, getRegex);
+ZEND_METHOD(RegexIterator, getPregFlags);
+ZEND_METHOD(RegexIterator, setPregFlags);
+ZEND_METHOD(RecursiveRegexIterator, __construct);
+ZEND_METHOD(RecursiveRegexIterator, accept);
+ZEND_METHOD(RecursiveRegexIterator, getChildren);
+ZEND_METHOD(RecursiveTreeIterator, __construct);
+ZEND_METHOD(RecursiveTreeIterator, key);
+ZEND_METHOD(RecursiveTreeIterator, current);
+ZEND_METHOD(RecursiveTreeIterator, getPrefix);
+ZEND_METHOD(RecursiveTreeIterator, setPostfix);
+ZEND_METHOD(RecursiveTreeIterator, setPrefixPart);
+ZEND_METHOD(RecursiveTreeIterator, getEntry);
+ZEND_METHOD(RecursiveTreeIterator, getPostfix);
+
+
+static const zend_function_entry class_EmptyIterator_methods[] = {
+ ZEND_ME(EmptyIterator, current, arginfo_class_EmptyIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(EmptyIterator, next, arginfo_class_EmptyIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(EmptyIterator, key, arginfo_class_EmptyIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(EmptyIterator, valid, arginfo_class_EmptyIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(EmptyIterator, rewind, arginfo_class_EmptyIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_CallbackFilterIterator_methods[] = {
+ ZEND_ME(CallbackFilterIterator, __construct, arginfo_class_CallbackFilterIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(CallbackFilterIterator, accept, arginfo_class_CallbackFilterIterator_accept, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveCallbackFilterIterator_methods[] = {
+ ZEND_ME(RecursiveCallbackFilterIterator, __construct, arginfo_class_RecursiveCallbackFilterIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(RecursiveFilterIterator, hasChildren, hasChildren, arginfo_class_RecursiveCallbackFilterIterator_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveCallbackFilterIterator, getChildren, arginfo_class_RecursiveCallbackFilterIterator_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveIterator_methods[] = {
+ ZEND_ABSTRACT_ME_WITH_FLAGS(RecursiveIterator, hasChildren, arginfo_class_RecursiveIterator_hasChildren, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_ABSTRACT_ME_WITH_FLAGS(RecursiveIterator, getChildren, arginfo_class_RecursiveIterator_getChildren, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveIteratorIterator_methods[] = {
+ ZEND_ME(RecursiveIteratorIterator, __construct, arginfo_class_RecursiveIteratorIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, rewind, arginfo_class_RecursiveIteratorIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, valid, arginfo_class_RecursiveIteratorIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, key, arginfo_class_RecursiveIteratorIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, current, arginfo_class_RecursiveIteratorIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, next, arginfo_class_RecursiveIteratorIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, getDepth, arginfo_class_RecursiveIteratorIterator_getDepth, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, getSubIterator, arginfo_class_RecursiveIteratorIterator_getSubIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, getInnerIterator, arginfo_class_RecursiveIteratorIterator_getInnerIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, beginIteration, arginfo_class_RecursiveIteratorIterator_beginIteration, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, endIteration, arginfo_class_RecursiveIteratorIterator_endIteration, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, callHasChildren, arginfo_class_RecursiveIteratorIterator_callHasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, callGetChildren, arginfo_class_RecursiveIteratorIterator_callGetChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, beginChildren, arginfo_class_RecursiveIteratorIterator_beginChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, endChildren, arginfo_class_RecursiveIteratorIterator_endChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, nextElement, arginfo_class_RecursiveIteratorIterator_nextElement, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, setMaxDepth, arginfo_class_RecursiveIteratorIterator_setMaxDepth, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveIteratorIterator, getMaxDepth, arginfo_class_RecursiveIteratorIterator_getMaxDepth, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_OuterIterator_methods[] = {
+ ZEND_ABSTRACT_ME_WITH_FLAGS(OuterIterator, getInnerIterator, arginfo_class_OuterIterator_getInnerIterator, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_IteratorIterator_methods[] = {
+ ZEND_ME(IteratorIterator, __construct, arginfo_class_IteratorIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(IteratorIterator, getInnerIterator, arginfo_class_IteratorIterator_getInnerIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(IteratorIterator, rewind, arginfo_class_IteratorIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(IteratorIterator, valid, arginfo_class_IteratorIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(IteratorIterator, key, arginfo_class_IteratorIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(IteratorIterator, current, arginfo_class_IteratorIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(IteratorIterator, next, arginfo_class_IteratorIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_FilterIterator_methods[] = {
+ ZEND_ABSTRACT_ME_WITH_FLAGS(FilterIterator, accept, arginfo_class_FilterIterator_accept, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_ME(FilterIterator, __construct, arginfo_class_FilterIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilterIterator, rewind, arginfo_class_FilterIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(FilterIterator, next, arginfo_class_FilterIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveFilterIterator_methods[] = {
+ ZEND_ME(RecursiveFilterIterator, __construct, arginfo_class_RecursiveFilterIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveFilterIterator, hasChildren, arginfo_class_RecursiveFilterIterator_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveFilterIterator, getChildren, arginfo_class_RecursiveFilterIterator_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ParentIterator_methods[] = {
+ ZEND_ME(ParentIterator, __construct, arginfo_class_ParentIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(RecursiveFilterIterator, accept, hasChildren, arginfo_class_ParentIterator_accept, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SeekableIterator_methods[] = {
+ ZEND_ABSTRACT_ME_WITH_FLAGS(SeekableIterator, seek, arginfo_class_SeekableIterator_seek, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_LimitIterator_methods[] = {
+ ZEND_ME(LimitIterator, __construct, arginfo_class_LimitIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(LimitIterator, rewind, arginfo_class_LimitIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(LimitIterator, valid, arginfo_class_LimitIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(LimitIterator, next, arginfo_class_LimitIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(LimitIterator, seek, arginfo_class_LimitIterator_seek, ZEND_ACC_PUBLIC)
+ ZEND_ME(LimitIterator, getPosition, arginfo_class_LimitIterator_getPosition, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_CachingIterator_methods[] = {
+ ZEND_ME(CachingIterator, __construct, arginfo_class_CachingIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, rewind, arginfo_class_CachingIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, valid, arginfo_class_CachingIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, next, arginfo_class_CachingIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, hasNext, arginfo_class_CachingIterator_hasNext, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, __toString, arginfo_class_CachingIterator___toString, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, getFlags, arginfo_class_CachingIterator_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, setFlags, arginfo_class_CachingIterator_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, offsetGet, arginfo_class_CachingIterator_offsetGet, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, offsetSet, arginfo_class_CachingIterator_offsetSet, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, offsetUnset, arginfo_class_CachingIterator_offsetUnset, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, offsetExists, arginfo_class_CachingIterator_offsetExists, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, getCache, arginfo_class_CachingIterator_getCache, ZEND_ACC_PUBLIC)
+ ZEND_ME(CachingIterator, count, arginfo_class_CachingIterator_count, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveCachingIterator_methods[] = {
+ ZEND_ME(RecursiveCachingIterator, __construct, arginfo_class_RecursiveCachingIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveCachingIterator, hasChildren, arginfo_class_RecursiveCachingIterator_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveCachingIterator, getChildren, arginfo_class_RecursiveCachingIterator_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_NoRewindIterator_methods[] = {
+ ZEND_ME(NoRewindIterator, __construct, arginfo_class_NoRewindIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(NoRewindIterator, rewind, arginfo_class_NoRewindIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(NoRewindIterator, valid, arginfo_class_NoRewindIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(NoRewindIterator, key, arginfo_class_NoRewindIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(NoRewindIterator, current, arginfo_class_NoRewindIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(NoRewindIterator, next, arginfo_class_NoRewindIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_AppendIterator_methods[] = {
+ ZEND_ME(AppendIterator, __construct, arginfo_class_AppendIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, append, arginfo_class_AppendIterator_append, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, rewind, arginfo_class_AppendIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, valid, arginfo_class_AppendIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, current, arginfo_class_AppendIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, next, arginfo_class_AppendIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, getIteratorIndex, arginfo_class_AppendIterator_getIteratorIndex, ZEND_ACC_PUBLIC)
+ ZEND_ME(AppendIterator, getArrayIterator, arginfo_class_AppendIterator_getArrayIterator, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_InfiniteIterator_methods[] = {
+ ZEND_ME(InfiniteIterator, __construct, arginfo_class_InfiniteIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(InfiniteIterator, next, arginfo_class_InfiniteIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RegexIterator_methods[] = {
+ ZEND_ME(RegexIterator, __construct, arginfo_class_RegexIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, accept, arginfo_class_RegexIterator_accept, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, getMode, arginfo_class_RegexIterator_getMode, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, setMode, arginfo_class_RegexIterator_setMode, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, getFlags, arginfo_class_RegexIterator_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, setFlags, arginfo_class_RegexIterator_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, getRegex, arginfo_class_RegexIterator_getRegex, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, getPregFlags, arginfo_class_RegexIterator_getPregFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(RegexIterator, setPregFlags, arginfo_class_RegexIterator_setPregFlags, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveRegexIterator_methods[] = {
+ ZEND_ME(RecursiveRegexIterator, __construct, arginfo_class_RecursiveRegexIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveRegexIterator, accept, arginfo_class_RecursiveRegexIterator_accept, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(RecursiveFilterIterator, hasChildren, hasChildren, arginfo_class_RecursiveRegexIterator_hasChildren, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveRegexIterator, getChildren, arginfo_class_RecursiveRegexIterator_getChildren, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_RecursiveTreeIterator_methods[] = {
+ ZEND_ME(RecursiveTreeIterator, __construct, arginfo_class_RecursiveTreeIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, key, arginfo_class_RecursiveTreeIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, current, arginfo_class_RecursiveTreeIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, getPrefix, arginfo_class_RecursiveTreeIterator_getPrefix, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, setPostfix, arginfo_class_RecursiveTreeIterator_setPostfix, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, setPrefixPart, arginfo_class_RecursiveTreeIterator_setPrefixPart, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, getEntry, arginfo_class_RecursiveTreeIterator_getEntry, ZEND_ACC_PUBLIC)
+ ZEND_ME(RecursiveTreeIterator, getPostfix, arginfo_class_RecursiveTreeIterator_getPostfix, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index f7dd7ef2e0..3f134b77db 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -34,42 +32,11 @@
#include "spl_functions.h"
#include "spl_engine.h"
#include "spl_observer.h"
+#include "spl_observer_arginfo.h"
#include "spl_iterators.h"
#include "spl_array.h"
#include "spl_exceptions.h"
-SPL_METHOD(SplObserver, update);
-SPL_METHOD(SplSubject, attach);
-SPL_METHOD(SplSubject, detach);
-SPL_METHOD(SplSubject, notify);
-
-ZEND_BEGIN_ARG_INFO(arginfo_SplObserver_update, 0)
- ZEND_ARG_OBJ_INFO(0, subject, SplSubject, 0)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_SplObserver[] = {
- SPL_ABSTRACT_ME(SplObserver, update, arginfo_SplObserver_update)
- PHP_FE_END
-};
-
-ZEND_BEGIN_ARG_INFO(arginfo_SplSubject_attach, 0)
- ZEND_ARG_OBJ_INFO(0, observer, SplObserver, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_SplSubject_void, 0)
-ZEND_END_ARG_INFO();
-
-/*ZEND_BEGIN_ARG_INFO_EX(arginfo_SplSubject_notify, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, ignore, SplObserver, 1)
-ZEND_END_ARG_INFO();*/
-
-static const zend_function_entry spl_funcs_SplSubject[] = {
- SPL_ABSTRACT_ME(SplSubject, attach, arginfo_SplSubject_attach)
- SPL_ABSTRACT_ME(SplSubject, detach, arginfo_SplSubject_attach)
- SPL_ABSTRACT_ME(SplSubject, notify, arginfo_SplSubject_void)
- PHP_FE_END
-};
-
PHPAPI zend_class_entry *spl_ce_SplObserver;
PHPAPI zend_class_entry *spl_ce_SplSubject;
PHPAPI zend_class_entry *spl_ce_SplObjectStorage;
@@ -83,8 +50,6 @@ typedef struct _spl_SplObjectStorage { /* {{{ */
HashPosition pos;
zend_long flags;
zend_function *fptr_get_hash;
- zval *gcdata;
- size_t gcdata_num;
zend_object std;
} spl_SplObjectStorage; /* }}} */
@@ -108,17 +73,13 @@ void spl_SplObjectStorage_free_storage(zend_object *object) /* {{{ */
zend_object_std_dtor(&intern->std);
zend_hash_destroy(&intern->storage);
-
- if (intern->gcdata != NULL) {
- efree(intern->gcdata);
- }
-
} /* }}} */
-static int spl_object_storage_get_hash(zend_hash_key *key, spl_SplObjectStorage *intern, zval *this, zval *obj) {
+static int spl_object_storage_get_hash(zend_hash_key *key, spl_SplObjectStorage *intern, zval *obj) {
if (intern->fptr_get_hash) {
zval rv;
- zend_call_method_with_1_params(this, intern->std.ce, &intern->fptr_get_hash, "getHash", &rv, obj);
+ zend_call_method_with_1_params(
+ &intern->std, intern->std.ce, &intern->fptr_get_hash, "getHash", &rv, obj);
if (!Z_ISUNDEF(rv)) {
if (Z_TYPE(rv) == IS_STRING) {
key->key = Z_STR(rv);
@@ -162,11 +123,11 @@ static spl_SplObjectStorageElement* spl_object_storage_get(spl_SplObjectStorage
}
} /* }}} */
-spl_SplObjectStorageElement *spl_object_storage_attach(spl_SplObjectStorage *intern, zval *this, zval *obj, zval *inf) /* {{{ */
+spl_SplObjectStorageElement *spl_object_storage_attach(spl_SplObjectStorage *intern, zval *obj, zval *inf) /* {{{ */
{
spl_SplObjectStorageElement *pelement, element;
zend_hash_key key;
- if (spl_object_storage_get_hash(&key, intern, this, obj) == FAILURE) {
+ if (spl_object_storage_get_hash(&key, intern, obj) == FAILURE) {
return NULL;
}
@@ -198,11 +159,11 @@ spl_SplObjectStorageElement *spl_object_storage_attach(spl_SplObjectStorage *int
return pelement;
} /* }}} */
-static int spl_object_storage_detach(spl_SplObjectStorage *intern, zval *this, zval *obj) /* {{{ */
+static int spl_object_storage_detach(spl_SplObjectStorage *intern, zval *obj) /* {{{ */
{
int ret = FAILURE;
zend_hash_key key;
- if (spl_object_storage_get_hash(&key, intern, this, obj) == FAILURE) {
+ if (spl_object_storage_get_hash(&key, intern, obj) == FAILURE) {
return ret;
}
if (key.key) {
@@ -215,17 +176,17 @@ static int spl_object_storage_detach(spl_SplObjectStorage *intern, zval *this, z
return ret;
} /* }}}*/
-void spl_object_storage_addall(spl_SplObjectStorage *intern, zval *this, spl_SplObjectStorage *other) { /* {{{ */
+void spl_object_storage_addall(spl_SplObjectStorage *intern, spl_SplObjectStorage *other) { /* {{{ */
spl_SplObjectStorageElement *element;
ZEND_HASH_FOREACH_PTR(&other->storage, element) {
- spl_object_storage_attach(intern, this, &element->obj, &element->inf);
+ spl_object_storage_attach(intern, &element->obj, &element->inf);
} ZEND_HASH_FOREACH_END();
intern->index = 0;
} /* }}} */
-static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zval *orig) /* {{{ */
+static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zend_object *orig) /* {{{ */
{
spl_SplObjectStorage *intern;
zend_class_entry *parent = class_type;
@@ -256,8 +217,8 @@ static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zval
}
if (orig) {
- spl_SplObjectStorage *other = Z_SPLOBJSTORAGE_P(orig);
- spl_object_storage_addall(intern, orig, other);
+ spl_SplObjectStorage *other = spl_object_storage_from_obj(orig);
+ spl_object_storage_addall(intern, other);
}
return &intern->std;
@@ -265,13 +226,11 @@ static zend_object *spl_object_storage_new_ex(zend_class_entry *class_type, zval
/* }}} */
/* {{{ spl_object_storage_clone */
-static zend_object *spl_object_storage_clone(zval *zobject)
+static zend_object *spl_object_storage_clone(zend_object *old_object)
{
- zend_object *old_object;
zend_object *new_object;
- old_object = Z_OBJ_P(zobject);
- new_object = spl_object_storage_new_ex(old_object->ce, zobject);
+ new_object = spl_object_storage_new_ex(old_object->ce, old_object);
zend_objects_clone_members(new_object, old_object);
@@ -279,9 +238,9 @@ static zend_object *spl_object_storage_clone(zval *zobject)
}
/* }}} */
-static inline HashTable* spl_object_storage_debug_info(zval *obj) /* {{{ */
+static inline HashTable* spl_object_storage_debug_info(zend_object *obj) /* {{{ */
{
- spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj);
+ spl_SplObjectStorage *intern = spl_object_storage_from_obj(obj);
spl_SplObjectStorageElement *element;
HashTable *props;
zval tmp, storage;
@@ -289,7 +248,7 @@ static inline HashTable* spl_object_storage_debug_info(zval *obj) /* {{{ */
zend_string *zname;
HashTable *debug_info;
- props = Z_OBJPROP_P(obj);
+ props = obj->handlers->get_properties(obj);
debug_info = zend_new_array(zend_hash_num_elements(props) + 1);
zend_hash_copy(debug_info, props, (copy_ctor_func_t)zval_add_ref);
@@ -317,25 +276,18 @@ static inline HashTable* spl_object_storage_debug_info(zval *obj) /* {{{ */
/* }}} */
/* overridden for garbage collection */
-static HashTable *spl_object_storage_get_gc(zval *obj, zval **table, int *n) /* {{{ */
+static HashTable *spl_object_storage_get_gc(zend_object *obj, zval **table, int *n) /* {{{ */
{
- int i = 0;
- spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj);
+ spl_SplObjectStorage *intern = spl_object_storage_from_obj(obj);
spl_SplObjectStorageElement *element;
-
- if (intern->storage.nNumOfElements * 2 > intern->gcdata_num) {
- intern->gcdata_num = intern->storage.nNumOfElements * 2;
- intern->gcdata = (zval*)erealloc(intern->gcdata, sizeof(zval) * intern->gcdata_num);
- }
+ zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
ZEND_HASH_FOREACH_PTR(&intern->storage, element) {
- ZVAL_COPY_VALUE(&intern->gcdata[i++], &element->obj);
- ZVAL_COPY_VALUE(&intern->gcdata[i++], &element->inf);
+ zend_get_gc_buffer_add_zval(gc_buffer, &element->obj);
+ zend_get_gc_buffer_add_zval(gc_buffer, &element->inf);
} ZEND_HASH_FOREACH_END();
- *table = intern->gcdata;
- *n = i;
-
+ zend_get_gc_buffer_use(gc_buffer, table, n);
return zend_std_get_properties(obj);
}
/* }}} */
@@ -344,23 +296,23 @@ static int spl_object_storage_compare_info(zval *e1, zval *e2) /* {{{ */
{
spl_SplObjectStorageElement *s1 = (spl_SplObjectStorageElement*)Z_PTR_P(e1);
spl_SplObjectStorageElement *s2 = (spl_SplObjectStorageElement*)Z_PTR_P(e2);
- zval result;
-
- if (compare_function(&result, &s1->inf, &s2->inf) == FAILURE) {
- return 1;
- }
- return ZEND_NORMALIZE_BOOL(Z_LVAL(result));
+ return zend_compare(&s1->inf, &s2->inf);
}
/* }}} */
static int spl_object_storage_compare_objects(zval *o1, zval *o2) /* {{{ */
{
- zend_object *zo1 = (zend_object *)Z_OBJ_P(o1);
- zend_object *zo2 = (zend_object *)Z_OBJ_P(o2);
+ zend_object *zo1;
+ zend_object *zo2;
+
+ ZEND_COMPARE_OBJECTS_FALLBACK(o1, o2);
+
+ zo1 = (zend_object *)Z_OBJ_P(o1);
+ zo2 = (zend_object *)Z_OBJ_P(o2);
if (zo1->ce != spl_ce_SplObjectStorage || zo2->ce != spl_ce_SplObjectStorage) {
- return 1;
+ return ZEND_UNCOMPARABLE;
}
return zend_hash_compare(&(Z_SPLOBJSTORAGE_P(o1))->storage, &(Z_SPLOBJSTORAGE_P(o2))->storage, (compare_func_t)spl_object_storage_compare_info, 0);
@@ -374,11 +326,11 @@ static zend_object *spl_SplObjectStorage_new(zend_class_entry *class_type)
}
/* }}} */
-int spl_object_storage_contains(spl_SplObjectStorage *intern, zval *this, zval *obj) /* {{{ */
+int spl_object_storage_contains(spl_SplObjectStorage *intern, zval *obj) /* {{{ */
{
int found;
zend_hash_key key;
- if (spl_object_storage_get_hash(&key, intern, this, obj) == FAILURE) {
+ if (spl_object_storage_get_hash(&key, intern, obj) == FAILURE) {
return 0;
}
@@ -391,53 +343,49 @@ int spl_object_storage_contains(spl_SplObjectStorage *intern, zval *this, zval *
return found;
} /* }}} */
-/* {{{ proto void SplObjectStorage::attach(object obj, mixed data = NULL)
- Attaches an object to the storage if not yet contained */
-SPL_METHOD(SplObjectStorage, attach)
+/* {{{ Attaches an object to the storage if not yet contained */
+PHP_METHOD(SplObjectStorage, attach)
{
zval *obj, *inf = NULL;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o|z!", &obj, &inf) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- spl_object_storage_attach(intern, ZEND_THIS, obj, inf);
+ spl_object_storage_attach(intern, obj, inf);
} /* }}} */
-/* {{{ proto void SplObjectStorage::detach(object obj)
- Detaches an object from the storage */
-SPL_METHOD(SplObjectStorage, detach)
+/* {{{ Detaches an object from the storage */
+PHP_METHOD(SplObjectStorage, detach)
{
zval *obj;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &obj) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- spl_object_storage_detach(intern, ZEND_THIS, obj);
+ spl_object_storage_detach(intern, obj);
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
intern->index = 0;
} /* }}} */
-/* {{{ proto string SplObjectStorage::getHash(object obj)
- Returns the hash of an object */
-SPL_METHOD(SplObjectStorage, getHash)
+/* {{{ Returns the hash of an object */
+PHP_METHOD(SplObjectStorage, getHash)
{
zval *obj;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &obj) == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_NEW_STR(php_spl_object_hash(obj));
} /* }}} */
-/* {{{ proto mixed SplObjectStorage::offsetGet(object obj)
- Returns associated information for a stored object */
-SPL_METHOD(SplObjectStorage, offsetGet)
+/* {{{ Returns associated information for a stored object */
+PHP_METHOD(SplObjectStorage, offsetGet)
{
zval *obj;
spl_SplObjectStorageElement *element;
@@ -445,10 +393,10 @@ SPL_METHOD(SplObjectStorage, offsetGet)
zend_hash_key key;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &obj) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- if (spl_object_storage_get_hash(&key, intern, ZEND_THIS, obj) == FAILURE) {
+ if (spl_object_storage_get_hash(&key, intern, obj) == FAILURE) {
return;
}
@@ -464,28 +412,26 @@ SPL_METHOD(SplObjectStorage, offsetGet)
}
} /* }}} */
-/* {{{ proto bool SplObjectStorage::addAll(SplObjectStorage $os)
- Add all elements contained in $os */
-SPL_METHOD(SplObjectStorage, addAll)
+/* {{{ Add all elements contained in $os */
+PHP_METHOD(SplObjectStorage, addAll)
{
zval *obj;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
spl_SplObjectStorage *other;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &obj, spl_ce_SplObjectStorage) == FAILURE) {
- return;
+ RETURN_THROWS();
}
other = Z_SPLOBJSTORAGE_P(obj);
- spl_object_storage_addall(intern, ZEND_THIS, other);
+ spl_object_storage_addall(intern, other);
RETURN_LONG(zend_hash_num_elements(&intern->storage));
} /* }}} */
-/* {{{ proto bool SplObjectStorage::removeAll(SplObjectStorage $os)
- Remove all elements contained in $os */
-SPL_METHOD(SplObjectStorage, removeAll)
+/* {{{ Remove all elements contained in $os */
+PHP_METHOD(SplObjectStorage, removeAll)
{
zval *obj;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
@@ -493,14 +439,14 @@ SPL_METHOD(SplObjectStorage, removeAll)
spl_SplObjectStorageElement *element;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &obj, spl_ce_SplObjectStorage) == FAILURE) {
- return;
+ RETURN_THROWS();
}
other = Z_SPLOBJSTORAGE_P(obj);
zend_hash_internal_pointer_reset(&other->storage);
while ((element = zend_hash_get_current_data_ptr(&other->storage)) != NULL) {
- if (spl_object_storage_detach(intern, ZEND_THIS, &element->obj) == FAILURE) {
+ if (spl_object_storage_detach(intern, &element->obj) == FAILURE) {
zend_hash_move_forward(&other->storage);
}
}
@@ -511,9 +457,8 @@ SPL_METHOD(SplObjectStorage, removeAll)
RETURN_LONG(zend_hash_num_elements(&intern->storage));
} /* }}} */
-/* {{{ proto bool SplObjectStorage::removeAllExcept(SplObjectStorage $os)
- Remove elements not common to both this SplObjectStorage instance and $os */
-SPL_METHOD(SplObjectStorage, removeAllExcept)
+/* {{{ Remove elements not common to both this SplObjectStorage instance and $os */
+PHP_METHOD(SplObjectStorage, removeAllExcept)
{
zval *obj;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
@@ -521,14 +466,14 @@ SPL_METHOD(SplObjectStorage, removeAllExcept)
spl_SplObjectStorageElement *element;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &obj, spl_ce_SplObjectStorage) == FAILURE) {
- return;
+ RETURN_THROWS();
}
other = Z_SPLOBJSTORAGE_P(obj);
ZEND_HASH_FOREACH_PTR(&intern->storage, element) {
- if (!spl_object_storage_contains(other, ZEND_THIS, &element->obj)) {
- spl_object_storage_detach(intern, ZEND_THIS, &element->obj);
+ if (!spl_object_storage_contains(other, &element->obj)) {
+ spl_object_storage_detach(intern, &element->obj);
}
} ZEND_HASH_FOREACH_END();
@@ -539,28 +484,26 @@ SPL_METHOD(SplObjectStorage, removeAllExcept)
}
/* }}} */
-/* {{{ proto bool SplObjectStorage::contains(object obj)
- Determine whethe an object is contained in the storage */
-SPL_METHOD(SplObjectStorage, contains)
+/* {{{ Determine whether an object is contained in the storage */
+PHP_METHOD(SplObjectStorage, contains)
{
zval *obj;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "o", &obj) == FAILURE) {
- return;
+ RETURN_THROWS();
}
- RETURN_BOOL(spl_object_storage_contains(intern, ZEND_THIS, obj));
+ RETURN_BOOL(spl_object_storage_contains(intern, obj));
} /* }}} */
-/* {{{ proto int SplObjectStorage::count()
- Determine number of objects in storage */
-SPL_METHOD(SplObjectStorage, count)
+/* {{{ Determine number of objects in storage */
+PHP_METHOD(SplObjectStorage, count)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
zend_long mode = COUNT_NORMAL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &mode) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (mode == COUNT_RECURSIVE) {
@@ -579,55 +522,51 @@ SPL_METHOD(SplObjectStorage, count)
RETURN_LONG(zend_hash_num_elements(&intern->storage));
} /* }}} */
-/* {{{ proto void SplObjectStorage::rewind()
- Rewind to first position */
-SPL_METHOD(SplObjectStorage, rewind)
+/* {{{ Rewind to first position */
+PHP_METHOD(SplObjectStorage, rewind)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
intern->index = 0;
} /* }}} */
-/* {{{ proto bool SplObjectStorage::valid()
- Returns whether current position is valid */
-SPL_METHOD(SplObjectStorage, valid)
+/* {{{ Returns whether current position is valid */
+PHP_METHOD(SplObjectStorage, valid)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_BOOL(zend_hash_has_more_elements_ex(&intern->storage, &intern->pos) == SUCCESS);
} /* }}} */
-/* {{{ proto mixed SplObjectStorage::key()
- Returns current key */
-SPL_METHOD(SplObjectStorage, key)
+/* {{{ Returns current key */
+PHP_METHOD(SplObjectStorage, key)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->index);
} /* }}} */
-/* {{{ proto mixed SplObjectStorage::current()
- Returns current element */
-SPL_METHOD(SplObjectStorage, current)
+/* {{{ Returns current element */
+PHP_METHOD(SplObjectStorage, current)
{
spl_SplObjectStorageElement *element;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) == NULL) {
@@ -636,15 +575,14 @@ SPL_METHOD(SplObjectStorage, current)
ZVAL_COPY(return_value, &element->obj);
} /* }}} */
-/* {{{ proto mixed SplObjectStorage::getInfo()
- Returns associated information to current element */
-SPL_METHOD(SplObjectStorage, getInfo)
+/* {{{ Returns associated information to current element */
+PHP_METHOD(SplObjectStorage, getInfo)
{
spl_SplObjectStorageElement *element;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) == NULL) {
@@ -653,16 +591,15 @@ SPL_METHOD(SplObjectStorage, getInfo)
ZVAL_COPY(return_value, &element->inf);
} /* }}} */
-/* {{{ proto mixed SplObjectStorage::setInfo(mixed $inf)
- Sets associated information of current element to $inf */
-SPL_METHOD(SplObjectStorage, setInfo)
+/* {{{ Sets associated information of current element to $inf */
+PHP_METHOD(SplObjectStorage, setInfo)
{
spl_SplObjectStorageElement *element;
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
zval *inf;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &inf) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) == NULL) {
@@ -672,23 +609,21 @@ SPL_METHOD(SplObjectStorage, setInfo)
ZVAL_COPY(&element->inf, inf);
} /* }}} */
-/* {{{ proto void SplObjectStorage::next()
- Moves position forward */
-SPL_METHOD(SplObjectStorage, next)
+/* {{{ Moves position forward */
+PHP_METHOD(SplObjectStorage, next)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_hash_move_forward_ex(&intern->storage, &intern->pos);
intern->index++;
} /* }}} */
-/* {{{ proto string SplObjectStorage::serialize()
- Serializes storage */
-SPL_METHOD(SplObjectStorage, serialize)
+/* {{{ Serializes storage */
+PHP_METHOD(SplObjectStorage, serialize)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
@@ -699,7 +634,7 @@ SPL_METHOD(SplObjectStorage, serialize)
smart_str buf = {0};
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
PHP_VAR_SERIALIZE_INIT(var_hash);
@@ -727,24 +662,18 @@ SPL_METHOD(SplObjectStorage, serialize)
/* members */
smart_str_appendl(&buf, "m:", 2);
- ZVAL_ARR(&members, zend_array_dup(zend_std_get_properties(ZEND_THIS)));
+ ZVAL_ARR(&members, zend_array_dup(zend_std_get_properties(Z_OBJ_P(ZEND_THIS))));
php_var_serialize(&buf, &members, &var_hash); /* finishes the string */
zval_ptr_dtor(&members);
/* done */
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- if (buf.s) {
- RETURN_NEW_STR(buf.s);
- } else {
- RETURN_NULL();
- }
-
+ RETURN_NEW_STR(buf.s);
} /* }}} */
-/* {{{ proto void SplObjectStorage::unserialize(string serialized)
- Unserializes storage */
-SPL_METHOD(SplObjectStorage, unserialize)
+/* {{{ Unserializes storage */
+PHP_METHOD(SplObjectStorage, unserialize)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
@@ -758,7 +687,7 @@ SPL_METHOD(SplObjectStorage, unserialize)
zend_long count;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &buf, &buf_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (buf_len == 0) {
@@ -818,7 +747,7 @@ SPL_METHOD(SplObjectStorage, unserialize)
goto outexcept;
}
- if (spl_object_storage_get_hash(&key, intern, ZEND_THIS, &entry) == FAILURE) {
+ if (spl_object_storage_get_hash(&key, intern, &entry) == FAILURE) {
zval_ptr_dtor(&entry);
zval_ptr_dtor(&inf);
goto outexcept;
@@ -833,7 +762,7 @@ SPL_METHOD(SplObjectStorage, unserialize)
var_push_dtor(&var_hash, &pelement->obj);
}
}
- element = spl_object_storage_attach(intern, ZEND_THIS, &entry, Z_ISUNDEF(inf)?NULL:&inf);
+ element = spl_object_storage_attach(intern, &entry, Z_ISUNDEF(inf)?NULL:&inf);
var_replace(&var_hash, &entry, &element->obj);
var_replace(&var_hash, &inf, &element->inf);
zval_ptr_dtor(&entry);
@@ -867,19 +796,19 @@ SPL_METHOD(SplObjectStorage, unserialize)
outexcept:
PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Error at offset %zd of %zd bytes", ((char*)p - buf), buf_len);
- return;
+ RETURN_THROWS();
} /* }}} */
-/* {{{ proto auto SplObjectStorage::__serialize() */
-SPL_METHOD(SplObjectStorage, __serialize)
+/* {{{ */
+PHP_METHOD(SplObjectStorage, __serialize)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
spl_SplObjectStorageElement *elem;
zval tmp;
- if (zend_parse_parameters_none_throw() == FAILURE) {
- return;
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
}
array_init(return_value);
@@ -895,20 +824,20 @@ SPL_METHOD(SplObjectStorage, __serialize)
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &tmp);
/* members */
- ZVAL_ARR(&tmp, zend_std_get_properties(ZEND_THIS));
+ ZVAL_ARR(&tmp, zend_std_get_properties(&intern->std));
Z_TRY_ADDREF(tmp);
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &tmp);
} /* }}} */
-/* {{{ proto void SplObjectStorage::__unserialize(array serialized) */
-SPL_METHOD(SplObjectStorage, __unserialize)
+/* {{{ */
+PHP_METHOD(SplObjectStorage, __unserialize)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
HashTable *data;
zval *storage_zv, *members_zv, *key, *val;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "h", &data) == FAILURE) {
+ RETURN_THROWS();
}
storage_zv = zend_hash_index_find(data, 0);
@@ -917,12 +846,12 @@ SPL_METHOD(SplObjectStorage, __unserialize)
Z_TYPE_P(storage_zv) != IS_ARRAY || Z_TYPE_P(members_zv) != IS_ARRAY) {
zend_throw_exception(spl_ce_UnexpectedValueException,
"Incomplete or ill-typed serialization data", 0);
- return;
+ RETURN_THROWS();
}
if (zend_hash_num_elements(Z_ARRVAL_P(storage_zv)) % 2 != 0) {
zend_throw_exception(spl_ce_UnexpectedValueException, "Odd number of elements", 0);
- return;
+ RETURN_THROWS();
}
key = NULL;
@@ -930,10 +859,10 @@ SPL_METHOD(SplObjectStorage, __unserialize)
if (key) {
if (Z_TYPE_P(key) != IS_OBJECT) {
zend_throw_exception(spl_ce_UnexpectedValueException, "Non-object key", 0);
- return;
+ RETURN_THROWS();
}
- spl_object_storage_attach(intern, ZEND_THIS, key, val);
+ spl_object_storage_attach(intern, key, val);
key = NULL;
} else {
key = val;
@@ -943,77 +872,17 @@ SPL_METHOD(SplObjectStorage, __unserialize)
object_properties_load(&intern->std, Z_ARRVAL_P(members_zv));
}
-/* {{{ proto array SplObjectStorage::__debugInfo() */
-SPL_METHOD(SplObjectStorage, __debugInfo)
+/* {{{ */
+PHP_METHOD(SplObjectStorage, __debugInfo)
{
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- RETURN_ARR(spl_object_storage_debug_info(getThis()));
+ RETURN_ARR(spl_object_storage_debug_info(Z_OBJ_P(ZEND_THIS)));
}
/* }}} */
-ZEND_BEGIN_ARG_INFO(arginfo_Object, 0)
- ZEND_ARG_INFO(0, object)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_attach, 0, 0, 1)
- ZEND_ARG_INFO(0, object)
- ZEND_ARG_INFO(0, data)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_Serialized, 0)
- ZEND_ARG_INFO(0, serialized)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_setInfo, 0)
- ZEND_ARG_INFO(0, info)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO(arginfo_getHash, 0)
- ZEND_ARG_INFO(0, object)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetGet, 0, 0, 1)
- ZEND_ARG_INFO(0, object)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_splobject_void, 0)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry spl_funcs_SplObjectStorage[] = {
- SPL_ME(SplObjectStorage, attach, arginfo_attach, 0)
- SPL_ME(SplObjectStorage, detach, arginfo_Object, 0)
- SPL_ME(SplObjectStorage, contains, arginfo_Object, 0)
- SPL_ME(SplObjectStorage, addAll, arginfo_Object, 0)
- SPL_ME(SplObjectStorage, removeAll, arginfo_Object, 0)
- SPL_ME(SplObjectStorage, removeAllExcept, arginfo_Object, 0)
- SPL_ME(SplObjectStorage, getInfo, arginfo_splobject_void,0)
- SPL_ME(SplObjectStorage, setInfo, arginfo_setInfo, 0)
- SPL_ME(SplObjectStorage, getHash, arginfo_getHash, 0)
- SPL_ME(SplObjectStorage, __debugInfo, arginfo_splobject_void,0)
- /* Countable */
- SPL_ME(SplObjectStorage, count, arginfo_splobject_void,0)
- /* Iterator */
- SPL_ME(SplObjectStorage, rewind, arginfo_splobject_void,0)
- SPL_ME(SplObjectStorage, valid, arginfo_splobject_void,0)
- SPL_ME(SplObjectStorage, key, arginfo_splobject_void,0)
- SPL_ME(SplObjectStorage, current, arginfo_splobject_void,0)
- SPL_ME(SplObjectStorage, next, arginfo_splobject_void,0)
- /* Serializable */
- SPL_ME(SplObjectStorage, unserialize, arginfo_Serialized, 0)
- SPL_ME(SplObjectStorage, serialize, arginfo_splobject_void,0)
- SPL_ME(SplObjectStorage, __unserialize, arginfo_Serialized, 0)
- SPL_ME(SplObjectStorage, __serialize, arginfo_splobject_void,0)
- /* ArrayAccess */
- SPL_MA(SplObjectStorage, offsetExists, SplObjectStorage, contains, arginfo_offsetGet, 0)
- SPL_MA(SplObjectStorage, offsetSet, SplObjectStorage, attach, arginfo_attach, 0)
- SPL_MA(SplObjectStorage, offsetUnset, SplObjectStorage, detach, arginfo_offsetGet, 0)
- SPL_ME(SplObjectStorage, offsetGet, arginfo_offsetGet, 0)
- PHP_FE_END
-};
-
typedef enum {
MIT_NEED_ANY = 0,
MIT_NEED_ALL = 1,
@@ -1024,15 +893,14 @@ typedef enum {
#define SPL_MULTIPLE_ITERATOR_GET_ALL_CURRENT 1
#define SPL_MULTIPLE_ITERATOR_GET_ALL_KEY 2
-/* {{{ proto MultipleIterator::__construct([int flags = MIT_NEED_ALL|MIT_KEYS_NUMERIC])
- Iterator that iterates over several iterators one after the other */
-SPL_METHOD(MultipleIterator, __construct)
+/* {{{ Iterator that iterates over several iterators one after the other */
+PHP_METHOD(MultipleIterator, __construct)
{
spl_SplObjectStorage *intern;
zend_long flags = MIT_NEED_ALL|MIT_KEYS_NUMERIC;
- if (zend_parse_parameters_throw(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) {
- return;
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) {
+ RETURN_THROWS();
}
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
@@ -1040,70 +908,113 @@ SPL_METHOD(MultipleIterator, __construct)
}
/* }}} */
-/* {{{ proto int MultipleIterator::getFlags()
- Return current flags */
-SPL_METHOD(MultipleIterator, getFlags)
+/* {{{ Return current flags */
+PHP_METHOD(MultipleIterator, getFlags)
{
spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
RETURN_LONG(intern->flags);
}
/* }}} */
-/* {{{ proto int MultipleIterator::setFlags(int flags)
- Set flags */
-SPL_METHOD(MultipleIterator, setFlags)
+/* {{{ Set flags */
+PHP_METHOD(MultipleIterator, setFlags)
{
spl_SplObjectStorage *intern;
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &intern->flags) == FAILURE) {
- return;
+ RETURN_THROWS();
}
}
/* }}} */
-/* {{{ proto void attachIterator(Iterator iterator[, mixed info]) throws InvalidArgumentException
- Attach a new iterator */
-SPL_METHOD(MultipleIterator, attachIterator)
+/* {{{ Attach a new iterator */
+PHP_METHOD(MultipleIterator, attachIterator)
{
- spl_SplObjectStorage *intern;
- zval *iterator = NULL, *info = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|z!", &iterator, zend_ce_iterator, &info) == FAILURE) {
- return;
- }
+ spl_SplObjectStorage *intern;
+ zval *iterator = NULL;
+ zval zinfo;
+ zend_string *info_str;
+ zend_long info_long;
+ zend_bool info_is_null = 1;
+
+ ZEND_PARSE_PARAMETERS_START(1, 2)
+ Z_PARAM_OBJECT_OF_CLASS(iterator, zend_ce_iterator)
+ Z_PARAM_OPTIONAL
+ Z_PARAM_STR_OR_LONG_OR_NULL(info_str, info_long, info_is_null)
+ ZEND_PARSE_PARAMETERS_END();
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
- if (info != NULL) {
+ if (!info_is_null) {
spl_SplObjectStorageElement *element;
- if (Z_TYPE_P(info) != IS_LONG && Z_TYPE_P(info) != IS_STRING) {
- zend_throw_exception(spl_ce_InvalidArgumentException, "Info must be NULL, integer or string", 0);
- return;
+ if (info_str) {
+ ZVAL_STR(&zinfo, info_str);
+ } else {
+ ZVAL_LONG(&zinfo, info_long);
}
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) != NULL) {
- if (fast_is_identical_function(info, &element->inf)) {
+ if (fast_is_identical_function(&zinfo, &element->inf)) {
zend_throw_exception(spl_ce_InvalidArgumentException, "Key duplication error", 0);
- return;
+ RETURN_THROWS();
}
zend_hash_move_forward_ex(&intern->storage, &intern->pos);
}
- }
- spl_object_storage_attach(intern, ZEND_THIS, iterator, info);
+ spl_object_storage_attach(intern, iterator, &zinfo);
+ } else {
+ spl_object_storage_attach(intern, iterator, NULL);
+ }
}
/* }}} */
-/* {{{ proto void MultipleIterator::rewind()
- Rewind all attached iterator instances */
-SPL_METHOD(MultipleIterator, rewind)
+/* {{{ Detaches an iterator */
+PHP_METHOD(MultipleIterator, detachIterator)
+{
+ zval *iterator;
+ spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &iterator, zend_ce_iterator) == FAILURE) {
+ RETURN_THROWS();
+ }
+ spl_object_storage_detach(intern, iterator);
+
+ zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
+ intern->index = 0;
+} /* }}} */
+
+/* {{{ Determine whether the iterator exists */
+PHP_METHOD(MultipleIterator, containsIterator)
+{
+ zval *iterator;
+ spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &iterator, zend_ce_iterator) == FAILURE) {
+ RETURN_THROWS();
+ }
+ RETURN_BOOL(spl_object_storage_contains(intern, iterator));
+} /* }}} */
+
+PHP_METHOD(MultipleIterator, countIterators)
+{
+ spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
+
+ if (zend_parse_parameters_none() == FAILURE) {
+ RETURN_THROWS();
+ }
+
+ RETURN_LONG(zend_hash_num_elements(&intern->storage));
+}
+
+/* {{{ Rewind all attached iterator instances */
+PHP_METHOD(MultipleIterator, rewind)
{
spl_SplObjectStorage *intern;
spl_SplObjectStorageElement *element;
@@ -1112,21 +1023,20 @@ SPL_METHOD(MultipleIterator, rewind)
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) != NULL && !EG(exception)) {
it = &element->obj;
- zend_call_method_with_0_params(it, Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_rewind, "rewind", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(it), Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_rewind, "rewind", NULL);
zend_hash_move_forward_ex(&intern->storage, &intern->pos);
}
}
/* }}} */
-/* {{{ proto void MultipleIterator::next()
- Move all attached iterator instances forward */
-SPL_METHOD(MultipleIterator, next)
+/* {{{ Move all attached iterator instances forward */
+PHP_METHOD(MultipleIterator, next)
{
spl_SplObjectStorage *intern;
spl_SplObjectStorageElement *element;
@@ -1135,21 +1045,20 @@ SPL_METHOD(MultipleIterator, next)
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) != NULL && !EG(exception)) {
it = &element->obj;
- zend_call_method_with_0_params(it, Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_next, "next", NULL);
+ zend_call_method_with_0_params(Z_OBJ_P(it), Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_next, "next", NULL);
zend_hash_move_forward_ex(&intern->storage, &intern->pos);
}
}
/* }}} */
-/* {{{ proto bool MultipleIterator::valid()
- Return whether all or one sub iterator is valid depending on flags */
-SPL_METHOD(MultipleIterator, valid)
+/* {{{ Return whether all or one sub iterator is valid depending on flags */
+PHP_METHOD(MultipleIterator, valid)
{
spl_SplObjectStorage *intern;
spl_SplObjectStorageElement *element;
@@ -1159,7 +1068,7 @@ SPL_METHOD(MultipleIterator, valid)
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (!zend_hash_num_elements(&intern->storage)) {
@@ -1171,7 +1080,7 @@ SPL_METHOD(MultipleIterator, valid)
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) != NULL && !EG(exception)) {
it = &element->obj;
- zend_call_method_with_0_params(it, Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_valid, "valid", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(it), Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_valid, "valid", &retval);
if (!Z_ISUNDEF(retval)) {
valid = (Z_TYPE(retval) == IS_TRUE);
@@ -1207,7 +1116,7 @@ static void spl_multiple_iterator_get_all(spl_SplObjectStorage *intern, int get_
zend_hash_internal_pointer_reset_ex(&intern->storage, &intern->pos);
while ((element = zend_hash_get_current_data_ptr_ex(&intern->storage, &intern->pos)) != NULL && !EG(exception)) {
it = &element->obj;
- zend_call_method_with_0_params(it, Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_valid, "valid", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(it), Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_valid, "valid", &retval);
if (!Z_ISUNDEF(retval)) {
valid = Z_TYPE(retval) == IS_TRUE;
@@ -1218,9 +1127,9 @@ static void spl_multiple_iterator_get_all(spl_SplObjectStorage *intern, int get_
if (valid) {
if (SPL_MULTIPLE_ITERATOR_GET_ALL_CURRENT == get_type) {
- zend_call_method_with_0_params(it, Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_current, "current", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(it), Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_current, "current", &retval);
} else {
- zend_call_method_with_0_params(it, Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_key, "key", &retval);
+ zend_call_method_with_0_params(Z_OBJ_P(it), Z_OBJCE_P(it), &Z_OBJCE_P(it)->iterator_funcs_ptr->zf_key, "key", &retval);
}
if (Z_ISUNDEF(retval)) {
zend_throw_exception(spl_ce_RuntimeException, "Failed to call sub iterator method", 0);
@@ -1259,82 +1168,45 @@ static void spl_multiple_iterator_get_all(spl_SplObjectStorage *intern, int get_
}
/* }}} */
-/* {{{ proto array current() throws RuntimeException throws InvalidArgumentException
- Return an array of all registered Iterator instances current() result */
-SPL_METHOD(MultipleIterator, current)
+/* {{{ Return an array of all registered Iterator instances current() result */
+PHP_METHOD(MultipleIterator, current)
{
spl_SplObjectStorage *intern;
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_multiple_iterator_get_all(intern, SPL_MULTIPLE_ITERATOR_GET_ALL_CURRENT, return_value);
}
/* }}} */
-/* {{{ proto array MultipleIterator::key()
- Return an array of all registered Iterator instances key() result */
-SPL_METHOD(MultipleIterator, key)
+/* {{{ Return an array of all registered Iterator instances key() result */
+PHP_METHOD(MultipleIterator, key)
{
spl_SplObjectStorage *intern;
intern = Z_SPLOBJSTORAGE_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
- return;
+ RETURN_THROWS();
}
spl_multiple_iterator_get_all(intern, SPL_MULTIPLE_ITERATOR_GET_ALL_KEY, return_value);
}
/* }}} */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_attachIterator, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
- ZEND_ARG_INFO(0, infos)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_detachIterator, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_containsIterator, 0, 0, 1)
- ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
-ZEND_END_ARG_INFO();
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_MultipleIterator_setflags, 0, 0, 1)
- ZEND_ARG_INFO(0, flags)
-ZEND_END_ARG_INFO();
-
-static const zend_function_entry spl_funcs_MultipleIterator[] = {
- SPL_ME(MultipleIterator, __construct, arginfo_MultipleIterator_setflags, 0)
- SPL_ME(MultipleIterator, getFlags, arginfo_splobject_void, 0)
- SPL_ME(MultipleIterator, setFlags, arginfo_MultipleIterator_setflags, 0)
- SPL_ME(MultipleIterator, attachIterator, arginfo_MultipleIterator_attachIterator, 0)
- SPL_MA(MultipleIterator, detachIterator, SplObjectStorage, detach, arginfo_MultipleIterator_detachIterator, 0)
- SPL_MA(MultipleIterator, containsIterator, SplObjectStorage, contains, arginfo_MultipleIterator_containsIterator, 0)
- SPL_MA(MultipleIterator, countIterators, SplObjectStorage, count, arginfo_splobject_void, 0)
- SPL_MA(MultipleIterator, __debugInfo, SplObjectStorage, __debugInfo, arginfo_splobject_void, 0)
- /* Iterator */
- SPL_ME(MultipleIterator, rewind, arginfo_splobject_void, 0)
- SPL_ME(MultipleIterator, valid, arginfo_splobject_void, 0)
- SPL_ME(MultipleIterator, key, arginfo_splobject_void, 0)
- SPL_ME(MultipleIterator, current, arginfo_splobject_void, 0)
- SPL_ME(MultipleIterator, next, arginfo_splobject_void, 0)
- PHP_FE_END
-};
-
/* {{{ PHP_MINIT_FUNCTION(spl_observer) */
PHP_MINIT_FUNCTION(spl_observer)
{
REGISTER_SPL_INTERFACE(SplObserver);
REGISTER_SPL_INTERFACE(SplSubject);
- REGISTER_SPL_STD_CLASS_EX(SplObjectStorage, spl_SplObjectStorage_new, spl_funcs_SplObjectStorage);
+ REGISTER_SPL_STD_CLASS_EX(SplObjectStorage, spl_SplObjectStorage_new, class_SplObjectStorage_methods);
memcpy(&spl_handler_SplObjectStorage, &std_object_handlers, sizeof(zend_object_handlers));
spl_handler_SplObjectStorage.offset = XtOffsetOf(spl_SplObjectStorage, std);
- spl_handler_SplObjectStorage.compare_objects = spl_object_storage_compare_objects;
+ spl_handler_SplObjectStorage.compare = spl_object_storage_compare_objects;
spl_handler_SplObjectStorage.clone_obj = spl_object_storage_clone;
spl_handler_SplObjectStorage.get_gc = spl_object_storage_get_gc;
spl_handler_SplObjectStorage.dtor_obj = zend_objects_destroy_object;
@@ -1345,7 +1217,7 @@ PHP_MINIT_FUNCTION(spl_observer)
REGISTER_SPL_IMPLEMENTS(SplObjectStorage, Serializable);
REGISTER_SPL_IMPLEMENTS(SplObjectStorage, ArrayAccess);
- REGISTER_SPL_STD_CLASS_EX(MultipleIterator, spl_SplObjectStorage_new, spl_funcs_MultipleIterator);
+ REGISTER_SPL_STD_CLASS_EX(MultipleIterator, spl_SplObjectStorage_new, class_MultipleIterator_methods);
REGISTER_SPL_ITERATOR(MultipleIterator);
REGISTER_SPL_CLASS_CONST_LONG(MultipleIterator, "MIT_NEED_ANY", MIT_NEED_ANY);
diff --git a/ext/spl/spl_observer.h b/ext/spl/spl_observer.h
index 50d65f63ab..dab2ab7e1e 100644
--- a/ext/spl/spl_observer.h
+++ b/ext/spl/spl_observer.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/spl/spl_observer.stub.php b/ext/spl/spl_observer.stub.php
new file mode 100644
index 0000000000..6fcd3c4c69
--- /dev/null
+++ b/ext/spl/spl_observer.stub.php
@@ -0,0 +1,155 @@
+<?php
+
+/** @generate-function-entries */
+
+interface SplObserver
+{
+ /** @return void */
+ public function update(SplSubject $subject);
+}
+
+interface SplSubject
+{
+ /** @return void */
+ public function attach(SplObserver $observer);
+
+ /** @return void */
+ public function detach(SplObserver $observer);
+
+ /** @return void */
+ public function notify();
+}
+
+class SplObjectStorage implements Countable, Iterator, Serializable, ArrayAccess
+{
+ /** @return void */
+ public function attach(object $object, mixed $info = null) {}
+
+ /** @return void */
+ public function detach(object $object) {}
+
+ /** @return bool */
+ public function contains(object $object) {}
+
+ /** @return int */
+ public function addAll(SplObjectStorage $storage) {}
+
+ /** @return void */
+ public function removeAll(SplObjectStorage $storage) {}
+
+ /** @return void */
+ public function removeAllExcept(SplObjectStorage $storage) {}
+
+ /** @return mixed */
+ public function getInfo() {}
+
+ /** @return void */
+ public function setInfo(mixed $info) {}
+
+ /** @return int */
+ public function count(int $mode = COUNT_NORMAL) {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return int */
+ public function key() {}
+
+ /** @return object */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+
+ /** @return void */
+ public function unserialize(string $data) {}
+
+ /** @return string */
+ public function serialize() {}
+
+ /**
+ * @param object $object
+ * @return bool
+ * @implementation-alias SplObjectStorage::contains
+ */
+ public function offsetExists($object) {}
+
+ /**
+ * @param object $object
+ * @return mixed
+ */
+ public function offsetGet($object) {}
+
+ /**
+ * @param object $object
+ * @return void
+ * @implementation-alias SplObjectStorage::attach
+ */
+ public function offsetSet($object, mixed $info = null) {}
+
+ /**
+ * @param object $object
+ * @return void
+ * @implementation-alias SplObjectStorage::detach
+ */
+ public function offsetUnset($object) {}
+
+ /** @return string */
+ public function getHash(object $object) {}
+
+ /** @return array */
+ public function __serialize() {}
+
+ /** @return void */
+ public function __unserialize(array $data) {}
+
+ /** @return array */
+ public function __debugInfo() {}
+}
+
+class MultipleIterator implements Iterator
+{
+ public function __construct(int $flags = MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_NUMERIC) {}
+
+ /** @return int */
+ public function getFlags() {}
+
+ /** @return void */
+ public function setFlags(int $flags) {}
+
+ /** @return void */
+ public function attachIterator(Iterator $iterator, string|int|null $info = null) {}
+
+ /** @return void */
+ public function detachIterator(Iterator $iterator) {}
+
+ /** @return bool */
+ public function containsIterator(Iterator $iterator) {}
+
+ /** @return int */
+ public function countIterators() {}
+
+ /** @return void */
+ public function rewind() {}
+
+ /** @return bool */
+ public function valid() {}
+
+ /** @return array */
+ public function key() {}
+
+ /** @return array */
+ public function current() {}
+
+ /** @return void */
+ public function next() {}
+
+ /**
+ * @return array
+ * @implementation-alias SplObjectStorage::__debugInfo
+ */
+ public function __debugInfo() {}
+}
diff --git a/ext/spl/spl_observer_arginfo.h b/ext/spl/spl_observer_arginfo.h
new file mode 100644
index 0000000000..db9b1d1125
--- /dev/null
+++ b/ext/spl/spl_observer_arginfo.h
@@ -0,0 +1,214 @@
+/* This is a generated file, edit the .stub.php file instead.
+ * Stub hash: aaefa4d4ac3b795212191d9fe06982d29948f552 */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObserver_update, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, subject, SplSubject, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplSubject_attach, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, observer, SplObserver, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplSubject_detach arginfo_class_SplSubject_attach
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplSubject_notify, 0, 0, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_attach, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, info, IS_MIXED, 0, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_detach, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_contains arginfo_class_SplObjectStorage_detach
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_addAll, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, storage, SplObjectStorage, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_removeAll arginfo_class_SplObjectStorage_addAll
+
+#define arginfo_class_SplObjectStorage_removeAllExcept arginfo_class_SplObjectStorage_addAll
+
+#define arginfo_class_SplObjectStorage_getInfo arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_setInfo, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, info, IS_MIXED, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_count, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "COUNT_NORMAL")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_rewind arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_valid arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_key arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_current arginfo_class_SplSubject_notify
+
+#define arginfo_class_SplObjectStorage_next arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_unserialize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_serialize arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_offsetExists, 0, 0, 1)
+ ZEND_ARG_INFO(0, object)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_offsetGet arginfo_class_SplObjectStorage_offsetExists
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage_offsetSet, 0, 0, 1)
+ ZEND_ARG_INFO(0, object)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, info, IS_MIXED, 0, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage_offsetUnset arginfo_class_SplObjectStorage_offsetExists
+
+#define arginfo_class_SplObjectStorage_getHash arginfo_class_SplObjectStorage_detach
+
+#define arginfo_class_SplObjectStorage___serialize arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SplObjectStorage___unserialize, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, data, IS_ARRAY, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_SplObjectStorage___debugInfo arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator___construct, 0, 0, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_MultipleIterator_getFlags arginfo_class_SplSubject_notify
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator_setFlags, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator_attachIterator, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ ZEND_ARG_TYPE_MASK(0, info, MAY_BE_STRING|MAY_BE_LONG|MAY_BE_NULL, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MultipleIterator_detachIterator, 0, 0, 1)
+ ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_MultipleIterator_containsIterator arginfo_class_MultipleIterator_detachIterator
+
+#define arginfo_class_MultipleIterator_countIterators arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_rewind arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_valid arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_key arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_current arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator_next arginfo_class_SplSubject_notify
+
+#define arginfo_class_MultipleIterator___debugInfo arginfo_class_SplSubject_notify
+
+
+ZEND_METHOD(SplObjectStorage, attach);
+ZEND_METHOD(SplObjectStorage, detach);
+ZEND_METHOD(SplObjectStorage, contains);
+ZEND_METHOD(SplObjectStorage, addAll);
+ZEND_METHOD(SplObjectStorage, removeAll);
+ZEND_METHOD(SplObjectStorage, removeAllExcept);
+ZEND_METHOD(SplObjectStorage, getInfo);
+ZEND_METHOD(SplObjectStorage, setInfo);
+ZEND_METHOD(SplObjectStorage, count);
+ZEND_METHOD(SplObjectStorage, rewind);
+ZEND_METHOD(SplObjectStorage, valid);
+ZEND_METHOD(SplObjectStorage, key);
+ZEND_METHOD(SplObjectStorage, current);
+ZEND_METHOD(SplObjectStorage, next);
+ZEND_METHOD(SplObjectStorage, unserialize);
+ZEND_METHOD(SplObjectStorage, serialize);
+ZEND_METHOD(SplObjectStorage, offsetGet);
+ZEND_METHOD(SplObjectStorage, getHash);
+ZEND_METHOD(SplObjectStorage, __serialize);
+ZEND_METHOD(SplObjectStorage, __unserialize);
+ZEND_METHOD(SplObjectStorage, __debugInfo);
+ZEND_METHOD(MultipleIterator, __construct);
+ZEND_METHOD(MultipleIterator, getFlags);
+ZEND_METHOD(MultipleIterator, setFlags);
+ZEND_METHOD(MultipleIterator, attachIterator);
+ZEND_METHOD(MultipleIterator, detachIterator);
+ZEND_METHOD(MultipleIterator, containsIterator);
+ZEND_METHOD(MultipleIterator, countIterators);
+ZEND_METHOD(MultipleIterator, rewind);
+ZEND_METHOD(MultipleIterator, valid);
+ZEND_METHOD(MultipleIterator, key);
+ZEND_METHOD(MultipleIterator, current);
+ZEND_METHOD(MultipleIterator, next);
+
+
+static const zend_function_entry class_SplObserver_methods[] = {
+ ZEND_ABSTRACT_ME_WITH_FLAGS(SplObserver, update, arginfo_class_SplObserver_update, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplSubject_methods[] = {
+ ZEND_ABSTRACT_ME_WITH_FLAGS(SplSubject, attach, arginfo_class_SplSubject_attach, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_ABSTRACT_ME_WITH_FLAGS(SplSubject, detach, arginfo_class_SplSubject_detach, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_ABSTRACT_ME_WITH_FLAGS(SplSubject, notify, arginfo_class_SplSubject_notify, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_SplObjectStorage_methods[] = {
+ ZEND_ME(SplObjectStorage, attach, arginfo_class_SplObjectStorage_attach, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, detach, arginfo_class_SplObjectStorage_detach, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, contains, arginfo_class_SplObjectStorage_contains, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, addAll, arginfo_class_SplObjectStorage_addAll, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, removeAll, arginfo_class_SplObjectStorage_removeAll, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, removeAllExcept, arginfo_class_SplObjectStorage_removeAllExcept, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, getInfo, arginfo_class_SplObjectStorage_getInfo, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, setInfo, arginfo_class_SplObjectStorage_setInfo, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, count, arginfo_class_SplObjectStorage_count, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, rewind, arginfo_class_SplObjectStorage_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, valid, arginfo_class_SplObjectStorage_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, key, arginfo_class_SplObjectStorage_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, current, arginfo_class_SplObjectStorage_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, next, arginfo_class_SplObjectStorage_next, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, unserialize, arginfo_class_SplObjectStorage_unserialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, serialize, arginfo_class_SplObjectStorage_serialize, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplObjectStorage, offsetExists, contains, arginfo_class_SplObjectStorage_offsetExists, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, offsetGet, arginfo_class_SplObjectStorage_offsetGet, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplObjectStorage, offsetSet, attach, arginfo_class_SplObjectStorage_offsetSet, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplObjectStorage, offsetUnset, detach, arginfo_class_SplObjectStorage_offsetUnset, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, getHash, arginfo_class_SplObjectStorage_getHash, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, __serialize, arginfo_class_SplObjectStorage___serialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, __unserialize, arginfo_class_SplObjectStorage___unserialize, ZEND_ACC_PUBLIC)
+ ZEND_ME(SplObjectStorage, __debugInfo, arginfo_class_SplObjectStorage___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
+
+
+static const zend_function_entry class_MultipleIterator_methods[] = {
+ ZEND_ME(MultipleIterator, __construct, arginfo_class_MultipleIterator___construct, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, getFlags, arginfo_class_MultipleIterator_getFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, setFlags, arginfo_class_MultipleIterator_setFlags, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, attachIterator, arginfo_class_MultipleIterator_attachIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, detachIterator, arginfo_class_MultipleIterator_detachIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, containsIterator, arginfo_class_MultipleIterator_containsIterator, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, countIterators, arginfo_class_MultipleIterator_countIterators, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, rewind, arginfo_class_MultipleIterator_rewind, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, valid, arginfo_class_MultipleIterator_valid, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, key, arginfo_class_MultipleIterator_key, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, current, arginfo_class_MultipleIterator_current, ZEND_ACC_PUBLIC)
+ ZEND_ME(MultipleIterator, next, arginfo_class_MultipleIterator_next, ZEND_ACC_PUBLIC)
+ ZEND_MALIAS(SplObjectStorage, __debugInfo, __debugInfo, arginfo_class_MultipleIterator___debugInfo, ZEND_ACC_PUBLIC)
+ ZEND_FE_END
+};
diff --git a/ext/spl/tests/AppendIterator_invalid_ctor.phpt b/ext/spl/tests/AppendIterator_invalid_ctor.phpt
new file mode 100644
index 0000000000..3c030632bf
--- /dev/null
+++ b/ext/spl/tests/AppendIterator_invalid_ctor.phpt
@@ -0,0 +1,14 @@
+--TEST--
+AppendIterator::__construct() with invalid arguments
+--FILE--
+<?php
+
+new AppendIterator(null);
+
+?>
+--EXPECTF--
+Fatal error: Uncaught ArgumentCountError: AppendIterator::__construct() expects exactly 0 arguments, 1 given in %s:%d
+Stack trace:
+#0 %s(%d): AppendIterator->__construct(NULL)
+#1 {main}
+ thrown in %s on line %d
diff --git a/ext/spl/tests/ArrayObject_exchange_array_during_sorting.phpt b/ext/spl/tests/ArrayObject_exchange_array_during_sorting.phpt
index 225d42c1ed..b563c2c84d 100644
--- a/ext/spl/tests/ArrayObject_exchange_array_during_sorting.phpt
+++ b/ext/spl/tests/ArrayObject_exchange_array_during_sorting.phpt
@@ -7,15 +7,19 @@ $ao = new ArrayObject([1, 2, 3]);
$i = 0;
$ao->uasort(function($a, $b) use ($ao, &$i) {
if ($i++ == 0) {
- $ao->exchangeArray([4, 5, 6]);
+ try {
+ $ao->exchangeArray([4, 5, 6]);
+ } catch (Error $e) {
+ echo $e->getMessage(), "\n";
+ }
var_dump($ao);
}
return $a <=> $b;
});
?>
---EXPECTF--
-Warning: Modification of ArrayObject during sorting is prohibited in %s on line %d
+--EXPECT--
+Modification of ArrayObject during sorting is prohibited
object(ArrayObject)#1 (1) {
["storage":"ArrayObject":private]=>
array(3) {
diff --git a/ext/spl/tests/ArrayObject_illegal_offset.phpt b/ext/spl/tests/ArrayObject_illegal_offset.phpt
new file mode 100644
index 0000000000..df25e4fa5e
--- /dev/null
+++ b/ext/spl/tests/ArrayObject_illegal_offset.phpt
@@ -0,0 +1,39 @@
+--TEST--
+ArrayObject illegal offset
+--FILE--
+<?php
+
+$ao = new ArrayObject([1, 2, 3]);
+try {
+ var_dump($ao[[]]);
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ $ao[[]] = new stdClass;
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ $ref =& $ao[[]];
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(isset($ao[[]]));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ unset($ao[[]]);
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+Illegal offset type
+Illegal offset type
+Illegal offset type
+Illegal offset type in isset or empty
+Illegal offset type in unset
diff --git a/ext/spl/tests/ArrayObject_illegal_offset_leak.phpt b/ext/spl/tests/ArrayObject_illegal_offset_leak.phpt
deleted file mode 100644
index 42c649db9f..0000000000
--- a/ext/spl/tests/ArrayObject_illegal_offset_leak.phpt
+++ /dev/null
@@ -1,11 +0,0 @@
---TEST--
-Assignments to illegal ArrayObject offsets shouldn't leak
---FILE--
-<?php
-
-$ao = new ArrayObject([1, 2, 3]);
-$ao[[]] = new stdClass;
-
-?>
---EXPECTF--
-Warning: Illegal offset type in %s on line %d
diff --git a/ext/spl/tests/CallbackFilterIteratorTest-002.phpt b/ext/spl/tests/CallbackFilterIteratorTest-002.phpt
index 6a05aa0aa2..b8a612f303 100644
--- a/ext/spl/tests/CallbackFilterIteratorTest-002.phpt
+++ b/ext/spl/tests/CallbackFilterIteratorTest-002.phpt
@@ -4,45 +4,46 @@ CallbackFilterIterator 002
<?php
set_error_handler(function($errno, $errstr){
- echo $errstr . "\n";
- return true;
+ echo $errstr . "\n";
+ return true;
});
try {
- new CallbackFilterIterator();
+ new CallbackFilterIterator();
} catch (TypeError $e) {
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
try {
- new CallbackFilterIterator(null);
+ new CallbackFilterIterator(null);
} catch (TypeError $e) {
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
try {
- new CallbackFilterIterator(new ArrayIterator(array()), null);
+ new CallbackFilterIterator(new ArrayIterator(array()), null);
} catch (TypeError $e) {
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
try {
- new CallbackFilterIterator(new ArrayIterator(array()), array());
+ new CallbackFilterIterator(new ArrayIterator(array()), array());
} catch (TypeError $e) {
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
$it = new CallbackFilterIterator(new ArrayIterator(array(1)), function() {
- throw new Exception("some message");
+ throw new Exception("some message");
});
try {
- foreach($it as $e);
+ foreach($it as $e);
} catch(Exception $e) {
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
+?>
--EXPECT--
-CallbackFilterIterator::__construct() expects exactly 2 parameters, 0 given
-Argument 1 passed to CallbackFilterIterator::__construct() must implement interface Iterator, null given
-CallbackFilterIterator::__construct() expects parameter 2 to be a valid callback, no array or string given
-CallbackFilterIterator::__construct() expects parameter 2 to be a valid callback, array must have exactly two members
+CallbackFilterIterator::__construct() expects exactly 2 arguments, 0 given
+CallbackFilterIterator::__construct() expects exactly 2 arguments, 1 given
+CallbackFilterIterator::__construct(): Argument #2 ($callback) must be a valid callback, no array or string given
+CallbackFilterIterator::__construct(): Argument #2 ($callback) must be a valid callback, array must have exactly two members
some message
diff --git a/ext/spl/tests/CallbackFilterIteratorTest.phpt b/ext/spl/tests/CallbackFilterIteratorTest.phpt
index 36bc770a95..08c070ffd2 100644
--- a/ext/spl/tests/CallbackFilterIteratorTest.phpt
+++ b/ext/spl/tests/CallbackFilterIteratorTest.phpt
@@ -16,13 +16,13 @@ class B {
}
function test($value, $key, $inner) {
- printf("%s / %s / %d / %d\n"
- , $value
- , $key
- , $value == $inner->current()
- , $key == $inner->key()
- );
- return $value === 1 || $value === 4;
+ printf("%s / %s / %d / %d\n"
+ , $value
+ , $key
+ , $value == $inner->current()
+ , $key == $inner->key()
+ );
+ return $value === 1 || $value === 4;
}
$tests = array(
@@ -45,7 +45,7 @@ foreach($tests as $name => $test) {
echo "=> $value\n";
}
- // same test, with no reference to callback
+ // same test, with no reference to callback
$it = new ArrayIterator(range(1, 5));
$it = new CallbackFilterIterator($it, $test());
@@ -55,6 +55,7 @@ foreach($tests as $name => $test) {
echo "=> $value\n";
}
}
+?>
--EXPECT--
= instance method =
1 / 0 / 1 / 1
diff --git a/ext/spl/tests/DirectoryIterator_by_reference.phpt b/ext/spl/tests/DirectoryIterator_by_reference.phpt
index 570d09f406..a6af6569c9 100644
--- a/ext/spl/tests/DirectoryIterator_by_reference.phpt
+++ b/ext/spl/tests/DirectoryIterator_by_reference.phpt
@@ -7,11 +7,11 @@ Havard Eide <nucleuz@gmail.com>
<?php
$it = new DirectoryIterator(__DIR__);
foreach( $it as &$file ) {
- echo $file . "\n";
+ echo $file . "\n";
}
?>
--EXPECTF--
-Fatal error: Uncaught RuntimeException: An iterator cannot be used with foreach by reference in %s:%d
+Fatal error: Uncaught Error: An iterator cannot be used with foreach by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
diff --git a/ext/spl/tests/DirectoryIterator_empty_constructor.phpt b/ext/spl/tests/DirectoryIterator_empty_constructor.phpt
index cf96425892..01b7c7d72c 100644
--- a/ext/spl/tests/DirectoryIterator_empty_constructor.phpt
+++ b/ext/spl/tests/DirectoryIterator_empty_constructor.phpt
@@ -5,11 +5,11 @@ Havard Eide <nucleuz@gmail.com>
#PHPTestFest2009 Norway 2009-06-09 \o/
--FILE--
<?php
-$it = new DirectoryIterator("");
+try {
+ $it = new DirectoryIterator("");
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
?>
---EXPECTF--
-Fatal error: Uncaught RuntimeException: Directory name must not be empty. in %s:%d
-Stack trace:
-#0 %s(%d): DirectoryIterator->__construct('')
-#1 {main}
- thrown in %s on line %d
+--EXPECT--
+DirectoryIterator::__construct(): Argument #1 ($directory) cannot be empty
diff --git a/ext/spl/tests/RecursiveCallbackFilterIteratorTest.phpt b/ext/spl/tests/RecursiveCallbackFilterIteratorTest.phpt
index f55afd8202..af95f85b6b 100644
--- a/ext/spl/tests/RecursiveCallbackFilterIteratorTest.phpt
+++ b/ext/spl/tests/RecursiveCallbackFilterIteratorTest.phpt
@@ -16,16 +16,16 @@ class B {
}
function test($value, $key, $inner) {
- if ($inner->hasChildren()) {
- return true;
- }
- printf("%s / %s / %d / %d\n"
- , print_r($value, true)
- , $key
- , $value == $inner->current()
- , $key == $inner->key()
- );
- return $value === 1 || $value === 4;
+ if ($inner->hasChildren()) {
+ return true;
+ }
+ printf("%s / %s / %d / %d\n"
+ , print_r($value, true)
+ , $key
+ , $value == $inner->current()
+ , $key == $inner->key()
+ );
+ return $value === 1 || $value === 4;
}
$tests = array(
@@ -41,7 +41,7 @@ foreach($tests as $name => $test) {
$callback = $test();
$it = new RecursiveArrayIterator(array(1, array(2, 3), array(4, 5)));
$it = new RecursiveCallbackFilterIterator($it, $callback);
- $it = new RecursiveIteratorIterator($it);
+ $it = new RecursiveIteratorIterator($it);
echo " = $name =\n";
@@ -49,17 +49,18 @@ foreach($tests as $name => $test) {
echo "=> $value\n";
}
- // same test, with no reference to callback
+ // same test, with no reference to callback
$it = new RecursiveArrayIterator(array(1, array(2, 3), array(4, 5)));
$it = new RecursiveCallbackFilterIterator($it, $test());
- $it = new RecursiveIteratorIterator($it);
+ $it = new RecursiveIteratorIterator($it);
unset($callback);
foreach($it as $value) {
echo "=> $value\n";
}
}
+?>
--EXPECT--
= instance method =
1 / 0 / 1 / 1
diff --git a/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt b/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt
index 4d8c1394b6..c050f2e79e 100644
--- a/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt
+++ b/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.phpt
@@ -21,7 +21,7 @@ while($it->valid()) {
}
asort($list);
foreach ($list as $item) {
- echo $item . "\n";
+ echo $item . "\n";
}
?>
--CLEAN--
diff --git a/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt b/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt
index 6527d84bfe..e7238252f0 100644
--- a/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt
+++ b/ext/spl/tests/RecursiveDirectoryIterator_getSubPathname_basic.phpt
@@ -24,7 +24,7 @@ while($it->valid()) {
}
asort($list);
foreach ($list as $item) {
- echo $item . "\n";
+ echo $item . "\n";
}
?>
--CLEAN--
diff --git a/ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt b/ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt
index 8c3aad3ef7..769136c406 100644
--- a/ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt
+++ b/ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt
@@ -17,7 +17,7 @@ try {
$value *= $value;
echo $value, PHP_EOL;
}
-} catch (Exception $e) {
+} catch (\Error $e) {
echo $e->getMessage(), PHP_EOL;
}
diff --git a/ext/spl/tests/SplDoublyLinkedList_add_invalid_offset.phpt b/ext/spl/tests/SplDoublyLinkedList_add_invalid_offset.phpt
index fa38d93425..347450fbe4 100644
--- a/ext/spl/tests/SplDoublyLinkedList_add_invalid_offset.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_add_invalid_offset.phpt
@@ -3,11 +3,11 @@ Check that SplDoublyLinkedList::add throws an exception with an invalid offset a
--FILE--
<?php
try {
- $dll = new SplDoublyLinkedList();
- var_dump($dll->add(12,'Offset 12 should not exist'));
+ $dll = new SplDoublyLinkedList();
+ var_dump($dll->add(12,'Offset 12 should not exist'));
} catch (OutOfRangeException $e) {
- echo "Exception: ".$e->getMessage()."\n";
+ echo "Exception: ".$e->getMessage()."\n";
}
?>
--EXPECT--
-Exception: Offset invalid or out of range
+Exception: SplDoublyLinkedList::add(): Argument #1 ($index) is out of range
diff --git a/ext/spl/tests/SplDoublyLinkedList_add_null_offset.phpt b/ext/spl/tests/SplDoublyLinkedList_add_null_offset.phpt
index b14c9ab013..1872436cea 100644
--- a/ext/spl/tests/SplDoublyLinkedList_add_null_offset.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_add_null_offset.phpt
@@ -3,11 +3,11 @@ Check that SplDoublyLinkedList::add throws an exception with an invalid offset a
--FILE--
<?php
try {
- $dll = new SplDoublyLinkedList();
- var_dump($dll->add(NULL,2));
-} catch (OutOfRangeException $e) {
- echo "Exception: ".$e->getMessage()."\n";
+ $dll = new SplDoublyLinkedList();
+ var_dump($dll->add([],2));
+} catch (TypeError $e) {
+ echo "Exception: ".$e->getMessage()."\n";
}
?>
--EXPECT--
-Exception: Offset invalid or out of range
+Exception: SplDoublyLinkedList::add(): Argument #1 ($index) must be of type int, array given
diff --git a/ext/spl/tests/SplDoublyLinkedList_consistent_iterator_mode.phpt b/ext/spl/tests/SplDoublyLinkedList_consistent_iterator_mode.phpt
new file mode 100644
index 0000000000..fa901dda91
--- /dev/null
+++ b/ext/spl/tests/SplDoublyLinkedList_consistent_iterator_mode.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Iteration over SplDoublyLinkedList via 'foreach' does not change direction partway
+--FILE--
+<?php
+
+$list = new SplDoublyLinkedList();
+$list->push(1);
+$list->push(2);
+$list->push(3);
+
+/* SplDoublyLinkedList would previously check the iteration mode *each time*
+ it would advance to the next item in a 'foreach' loop
+ This meant that it could move forward, then backward, then forward if the
+ iteration mode was changed in the middle of a loop */
+
+$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
+foreach ($list as $item) {
+ $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
+ echo $item, "\n";
+}
+
+echo "***\n";
+
+$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
+foreach ($list as $item) {
+ $list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO);
+ echo $item, "\n";
+}
+
+
+?>
+--EXPECT--
+1
+2
+3
+***
+3
+2
+1
diff --git a/ext/spl/tests/SplDoublyLinkedList_debug-info.phpt b/ext/spl/tests/SplDoublyLinkedList_debug-info.phpt
index c5d10919ff..b008715eef 100644
--- a/ext/spl/tests/SplDoublyLinkedList_debug-info.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_debug-info.phpt
@@ -4,16 +4,16 @@ Check that SplDoublyLinkedList returns debug info when print_r is used.
PHPNW Testfest 2009 - Paul Court ( g@rgoyle.com )
--FILE--
<?php
- // Create a new Doubly Linked List
- $dll = new SplDoublyLinkedList();
+ // Create a new Doubly Linked List
+ $dll = new SplDoublyLinkedList();
- // Add some items to the list
- $dll->push(1);
- $dll->push(2);
- $dll->push(3);
+ // Add some items to the list
+ $dll->push(1);
+ $dll->push(2);
+ $dll->push(3);
- // Check the debug info
- print_r($dll);
+ // Check the debug info
+ print_r($dll);
?>
--EXPECT--
SplDoublyLinkedList Object
diff --git a/ext/spl/tests/SplDoublyLinkedList_getIteratorMode.phpt b/ext/spl/tests/SplDoublyLinkedList_getIteratorMode.phpt
index d1bfb46de3..f4a1b2a452 100644
--- a/ext/spl/tests/SplDoublyLinkedList_getIteratorMode.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_getIteratorMode.phpt
@@ -6,7 +6,10 @@ PHPNW Testfest 2009 - Lorna Mitchell
<?php
$list = new SplDoublyLinkedList();
$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP);
-echo $list->getIteratorMode();
+echo $list->getIteratorMode(), "\n";
+$list->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
+echo $list->getIteratorMode(), "\n";
?>
--EXPECT--
0
+2
diff --git a/ext/spl/tests/SplDoublyLinkedList_isEmpty_empty.phpt b/ext/spl/tests/SplDoublyLinkedList_isEmpty_empty.phpt
index 4e9e2b33de..8c8012202e 100644
--- a/ext/spl/tests/SplDoublyLinkedList_isEmpty_empty.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_isEmpty_empty.phpt
@@ -4,10 +4,10 @@ Check that SplDoublyLinkedList->isEmpty() correctly returns true for an empty li
PHPNW Testfest 2009 - Paul Court ( g@rgoyle.com )
--FILE--
<?php
- // Create a new Doubly Linked List
- $dll = new SplDoublyLinkedList();
+ // Create a new Doubly Linked List
+ $dll = new SplDoublyLinkedList();
- var_dump($dll->isEmpty());
+ var_dump($dll->isEmpty());
?>
--EXPECT--
bool(true)
diff --git a/ext/spl/tests/SplDoublyLinkedList_isEmpty_not-empty.phpt b/ext/spl/tests/SplDoublyLinkedList_isEmpty_not-empty.phpt
index 4b308f345b..0d26da14d5 100644
--- a/ext/spl/tests/SplDoublyLinkedList_isEmpty_not-empty.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_isEmpty_not-empty.phpt
@@ -4,16 +4,16 @@ Check that SplDoublyLinkedList->isEmpty() correctly returns true for a non-empty
PHPNW Testfest 2009 - Paul Court ( g@rgoyle.com )
--FILE--
<?php
- // Create a new Doubly Linked List
- $dll = new SplDoublyLinkedList();
+ // Create a new Doubly Linked List
+ $dll = new SplDoublyLinkedList();
- // Add some items to the list
- $dll->push(1);
- $dll->push(2);
- $dll->push(3);
- //var_dump($dll);
+ // Add some items to the list
+ $dll->push(1);
+ $dll->push(2);
+ $dll->push(3);
+ //var_dump($dll);
- var_dump($dll->isEmpty());
+ var_dump($dll->isEmpty());
?>
--EXPECT--
bool(false)
diff --git a/ext/spl/tests/SplDoublyLinkedList_offsetExists_success.phpt b/ext/spl/tests/SplDoublyLinkedList_offsetExists_success.phpt
index fc8c4b7dcd..a6c5db200e 100644
--- a/ext/spl/tests/SplDoublyLinkedList_offsetExists_success.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_offsetExists_success.phpt
@@ -12,17 +12,17 @@ $list->push('def');
// Validate that we can see the first value
if($list->offsetExists(0) === true) {
- echo "PASS\n";
+ echo "PASS\n";
}
// Validate that we can see the second value
if($list->offsetExists(1) === true) {
- echo "PASS\n";
+ echo "PASS\n";
}
// Check that there is no third value
if($list->offsetExists(2) === false) {
- echo "PASS\n";
+ echo "PASS\n";
}
?>
--EXPECT--
diff --git a/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_array.phpt b/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_array.phpt
index b6debb109b..eb88027f5e 100644
--- a/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_array.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_array.phpt
@@ -11,7 +11,7 @@ $get = $array->offsetGet( array( 'fail' ) );
?>
--EXPECTF--
-Fatal error: Uncaught OutOfRangeException: Offset invalid or out of range in %s
+Fatal error: Uncaught TypeError: SplDoublyLinkedList::offsetGet(): Argument #1 ($index) must be of type int, array given in %s
Stack trace:
#0 %s
#1 {main}
diff --git a/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_string.phpt b/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_string.phpt
index 43ce18c5c5..421d12ddbb 100644
--- a/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_string.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_offsetGet_param_string.phpt
@@ -11,7 +11,7 @@ $get = $array->offsetGet( 'fail' );
?>
--EXPECTF--
-Fatal error: Uncaught OutOfRangeException: Offset invalid or out of range in %s
+Fatal error: Uncaught TypeError: SplDoublyLinkedList::offsetGet(): Argument #1 ($index) must be of type int, string given in %s
Stack trace:
#0 %s
#1 {main}
diff --git a/ext/spl/tests/SplDoublyLinkedList_offsetUnset_greater_than_elements.phpt b/ext/spl/tests/SplDoublyLinkedList_offsetUnset_greater_than_elements.phpt
index 2512e23e78..4fa65b3a53 100644
--- a/ext/spl/tests/SplDoublyLinkedList_offsetUnset_greater_than_elements.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_offsetUnset_greater_than_elements.phpt
@@ -22,4 +22,4 @@ echo $e->getMessage();
?>
--EXPECT--
-Offset out of range
+SplDoublyLinkedList::offsetUnset(): Argument #1 ($index) is out of range
diff --git a/ext/spl/tests/SplDoublyLinkedList_offsetUnset_negative-parameter.phpt b/ext/spl/tests/SplDoublyLinkedList_offsetUnset_negative-parameter.phpt
index 838100be1e..614ebdf01b 100644
--- a/ext/spl/tests/SplDoublyLinkedList_offsetUnset_negative-parameter.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_offsetUnset_negative-parameter.phpt
@@ -4,20 +4,20 @@ Check that SplDoublyLinkedList->offsetUnset() returns an error message when the
PHPNW Testfest 2009 - Paul Court ( g@rgoyle.com )
--FILE--
<?php
- // Create a new Doubly Linked List
- $dll = new SplDoublyLinkedList();
+ // Create a new Doubly Linked List
+ $dll = new SplDoublyLinkedList();
- // Add some items to the list
- $dll->push(1);
- $dll->push(2);
- $dll->push(3);
+ // Add some items to the list
+ $dll->push(1);
+ $dll->push(2);
+ $dll->push(3);
- try {
- $dll->offsetUnset(-1);
- }
- catch (Exception $e) {
- echo $e->getMessage() . "\n";
- }
+ try {
+ $dll->offsetUnset(-1);
+ }
+ catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
?>
--EXPECT--
-Offset out of range
+SplDoublyLinkedList::offsetUnset(): Argument #1 ($index) is out of range
diff --git a/ext/spl/tests/SplDoublyLinkedList_offsetUnset_parameter-larger-num-elements.phpt b/ext/spl/tests/SplDoublyLinkedList_offsetUnset_parameter-larger-num-elements.phpt
index cd77f11aef..6782bd9489 100644
--- a/ext/spl/tests/SplDoublyLinkedList_offsetUnset_parameter-larger-num-elements.phpt
+++ b/ext/spl/tests/SplDoublyLinkedList_offsetUnset_parameter-larger-num-elements.phpt
@@ -4,20 +4,20 @@ Check that SplDoublyLinkedList->offsetUnset() returns an error message when the
PHPNW Testfest 2009 - Paul Court ( g@rgoyle.com )
--FILE--
<?php
- // Create a new Doubly Linked List
- $dll = new SplDoublyLinkedList();
+ // Create a new Doubly Linked List
+ $dll = new SplDoublyLinkedList();
- // Add some items to the list
- $dll->push(1);
- $dll->push(2);
- $dll->push(3);
+ // Add some items to the list
+ $dll->push(1);
+ $dll->push(2);
+ $dll->push(3);
- try {
- $dll->offsetUnset(3);
- }
- catch (Exception $e) {
- echo $e->getMessage() . "\n";
- }
+ try {
+ $dll->offsetUnset(3);
+ }
+ catch (Exception $e) {
+ echo $e->getMessage() . "\n";
+ }
?>
--EXPECT--
-Offset out of range
+SplDoublyLinkedList::offsetUnset(): Argument #1 ($index) is out of range
diff --git a/ext/spl/tests/SplFileInfo_getInode_basic.phpt b/ext/spl/tests/SplFileInfo_getInode_basic.phpt
index 5e2a110879..1b2649dcee 100644
--- a/ext/spl/tests/SplFileInfo_getInode_basic.phpt
+++ b/ext/spl/tests/SplFileInfo_getInode_basic.phpt
@@ -19,7 +19,7 @@ if (substr(PHP_OS, 0, 3) == 'WIN') die("skip this test not for Windows platforms
touch ('SplFileInfo_getInode_basic.txt');
$fileInfo = new SplFileInfo('SplFileInfo_getInode_basic.txt');
$result = shell_exec('ls -i SplFileInfo_getInode_basic.txt');
-var_dump($fileInfo->getInode() == $result);
+var_dump($fileInfo->getInode() == (int) $result);
?>
--CLEAN--
diff --git a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt
index 7443998013..4ace511e26 100644
--- a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt
+++ b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt
@@ -7,10 +7,10 @@ $info = new SplFileInfo(__FILE__);
try {
$info->setFileClass('stdClass');
-} catch (UnexpectedValueException $e) {
+} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
-SplFileInfo::setFileClass() expects parameter 1 to be a class name derived from SplFileObject, 'stdClass' given
+SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, stdClass given
diff --git a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt
index a280a6e147..1f64c353d3 100644
--- a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt
+++ b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt
@@ -7,10 +7,10 @@ $info = new SplFileInfo(__FILE__);
try {
$info->setInfoClass('stdClass');
-} catch (UnexpectedValueException $e) {
+} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
-SplFileInfo::setInfoClass() expects parameter 1 to be a class name derived from SplFileInfo, 'stdClass' given
+SplFileInfo::setInfoClass(): Argument #1 ($class) must be a class name derived from SplFileInfo, stdClass given
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
index 28901050d3..2580021426 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_basic.phpt
@@ -4,10 +4,10 @@ SplFileObject::fgetcsv default path
<?php
$fp = fopen('SplFileObject__fgetcsv1.csv', 'w+');
fputcsv($fp, array(
- 'field1',
- 'field2',
- 'field3',
- 5
+ 'field1',
+ 'field2',
+ 'field3',
+ 5
));
fclose($fp);
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
index 585e0b6e39..6bf5b43f6b 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_basic.phpt
@@ -4,10 +4,10 @@ SplFileObject::fgetcsv with alternative delimiter
<?php
$fp = fopen('SplFileObject__fgetcsv2.csv', 'w+');
fputcsv($fp, array(
- 'field1',
- 'field2',
- 'field3',
- 5
+ 'field1',
+ 'field2',
+ 'field3',
+ 5
), '|');
fclose($fp);
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
index 169ded7dc3..b14e7ca479 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_delimiter_error.phpt
@@ -4,20 +4,23 @@ SplFileObject::fgetcsv with alternative delimiter
<?php
$fp = fopen('SplFileObject__fgetcsv3.csv', 'w+');
fputcsv($fp, array(
- 'field1',
- 'field2',
- 'field3',
- 5
+ 'field1',
+ 'field2',
+ 'field3',
+ 5
), '|');
fclose($fp);
$fo = new SplFileObject('SplFileObject__fgetcsv3.csv');
-var_dump($fo->fgetcsv('invalid'));
+try {
+ var_dump($fo->fgetcsv('invalid'));
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--CLEAN--
<?php
unlink('SplFileObject__fgetcsv3.csv');
?>
---EXPECTF--
-Warning: SplFileObject::fgetcsv(): delimiter must be a character in %s on line %d
-bool(false)
+--EXPECT--
+SplFileObject::fgetcsv(): Argument #1 ($separator) must be a single character
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
index 32527a9238..971e44ba4d 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_basic.phpt
@@ -4,10 +4,10 @@ SplFileObject::fgetcsv with alternative delimiter
<?php
$fp = fopen('SplFileObject__fgetcsv4.csv', 'w+');
fputcsv($fp, array(
- 'field1',
- 'field2',
- 'field3',
- 5
+ 'field1',
+ 'field2',
+ 'field3',
+ 5
), ',', '"');
fclose($fp);
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
index f8c14f0e35..b510ae909c 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_enclosure_error.phpt
@@ -4,20 +4,23 @@ SplFileObject::fgetcsv with alternative delimiter
<?php
$fp = fopen('SplFileObject__fgetcsv5.csv', 'w+');
fputcsv($fp, array(
- 'field1',
- 'field2',
- 'field3',
- 5
+ 'field1',
+ 'field2',
+ 'field3',
+ 5
), ',', '"');
fclose($fp);
$fo = new SplFileObject('SplFileObject__fgetcsv5.csv');
-var_dump($fo->fgetcsv(',', 'invalid'));
+try {
+ var_dump($fo->fgetcsv(',', 'invalid'));
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--CLEAN--
<?php
unlink('SplFileObject__fgetcsv5.csv');
?>
---EXPECTF--
-Warning: SplFileObject::fgetcsv(): enclosure must be a character in %s on line %d
-bool(false)
+--EXPECT--
+SplFileObject::fgetcsv(): Argument #2 ($enclosure) must be a single character
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_empty.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_empty.phpt
index cbc539c323..0498b6c912 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_empty.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_empty.phpt
@@ -14,7 +14,6 @@ while (($data = $file->fgetcsv(',', '"', ''))) {
print_r($data);
}
?>
-===DONE===
--EXPECT--
Array
(
@@ -28,4 +27,3 @@ Array
[0] => \\\line1
line2\\\
)
-===DONE===
diff --git a/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt b/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
index 4873341e5a..a1471c8e0e 100644
--- a/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
+++ b/ext/spl/tests/SplFileObject_fgetcsv_escape_error.phpt
@@ -7,12 +7,15 @@ fwrite($fp, '"aaa","b""bb","ccc"');
fclose($fp);
$fo = new SplFileObject('SplFileObject__fgetcsv8.csv');
-var_dump($fo->fgetcsv(',', '"', 'invalid'));
+try {
+ var_dump($fo->fgetcsv(',', '"', 'invalid'));
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--CLEAN--
<?php
unlink('SplFileObject__fgetcsv8.csv');
?>
---EXPECTF--
-Warning: SplFileObject::fgetcsv(): escape must be empty or a single character in %s on line %d
-bool(false)
+--EXPECT--
+SplFileObject::fgetcsv(): Argument #3 ($escape) must be empty or a single character
diff --git a/ext/spl/tests/SplFileObject_fputcsv.phpt b/ext/spl/tests/SplFileObject_fputcsv.phpt
index 66fdbfd1b9..ec32ae686b 100644
--- a/ext/spl/tests/SplFileObject_fputcsv.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv.phpt
@@ -29,14 +29,14 @@ $list = array (
);
foreach ($list as $v) {
- $fo->fputcsv(explode(',', $v));
+ $fo->fputcsv(explode(',', $v));
}
unset($fo);
$res = file($file);
foreach($res as &$val)
{
- $val = substr($val, 0, -1);
+ $val = substr($val, 0, -1);
}
echo '$list = ';var_export($res);echo ";\n";
@@ -44,15 +44,13 @@ $fp = fopen($file, "r");
$res = array();
while($l=fgetcsv($fp))
{
- $res[] = join(',',$l);
+ $res[] = join(',',$l);
}
fclose($fp);
echo '$list = ';var_export($res);echo ";\n";
?>
-===DONE===
-<?php exit(0); ?>
--CLEAN--
<?php
$file = __DIR__ . '/SplFileObject_fputcsv.csv';
@@ -103,4 +101,3 @@ $list = array (
18 => '"\\"","aaa"',
19 => '"\\""",aaa',
);
-===DONE===
diff --git a/ext/spl/tests/SplFileObject_fputcsv_002.phpt b/ext/spl/tests/SplFileObject_fputcsv_002.phpt
index fdd4112ee6..77f6d76bbf 100644
--- a/ext/spl/tests/SplFileObject_fputcsv_002.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv_002.phpt
@@ -16,7 +16,7 @@ $file = __DIR__ . '/SplFileObject_fputcsv1.csv';
unlink($file);
?>
--EXPECTF--
-Notice: Array to string conversion in %s on line %d
+Warning: Array to string conversion in %s on line %d
array(7) {
[0]=>
int(1)
diff --git a/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt b/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt
index a4c2451021..b213799942 100644
--- a/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv_variation13.phpt
@@ -10,7 +10,11 @@ echo "*** Testing fputcsv() : with default enclosure & delimiter of two chars **
$fo = new SplFileObject(__DIR__ . '/SplFileObject_fputcsv_variation13.csv', 'w');
-var_dump($fo->fputcsv(array('water', 'fruit'), ',,', '"'));
+try {
+ var_dump($fo->fputcsv(array('water', 'fruit'), ',,', '"'));
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
unset($fo);
@@ -21,9 +25,7 @@ echo "Done\n";
$file = __DIR__ . '/SplFileObject_fputcsv_variation13.csv';
unlink($file);
?>
---EXPECTF--
+--EXPECT--
*** Testing fputcsv() : with default enclosure & delimiter of two chars ***
-
-Warning: SplFileObject::fputcsv(): delimiter must be a character in %s on line %d
-bool(false)
+SplFileObject::fputcsv(): Argument #2 ($separator) must be a single character
Done
diff --git a/ext/spl/tests/SplFileObject_fputcsv_variation14.phpt b/ext/spl/tests/SplFileObject_fputcsv_variation14.phpt
index a659da92af..60efae632d 100644
--- a/ext/spl/tests/SplFileObject_fputcsv_variation14.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv_variation14.phpt
@@ -10,7 +10,11 @@ echo "*** Testing fputcsv() : with enclosure & delimiter of two chars and file o
$fo = new SplFileObject(__DIR__ . '/SplFileObject_fputcsv_variation14.csv', 'w');
-var_dump($fo->fputcsv(array('water', 'fruit'), ',,', '""'));
+try {
+ var_dump($fo->fputcsv(array('water', 'fruit'), ',,', '""'));
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
unset($fo);
@@ -21,9 +25,7 @@ echo "Done\n";
$file = __DIR__ . '/SplFileObject_fputcsv_variation14.csv';
unlink($file);
?>
---EXPECTF--
+--EXPECT--
*** Testing fputcsv() : with enclosure & delimiter of two chars and file opened in read mode ***
-
-Warning: SplFileObject::fputcsv(): enclosure must be a character in %s on line %d
-bool(false)
+SplFileObject::fputcsv(): Argument #3 ($enclosure) must be a single character
Done
diff --git a/ext/spl/tests/SplFileObject_fputcsv_variation15.phpt b/ext/spl/tests/SplFileObject_fputcsv_variation15.phpt
index 1cde292e28..0762af9f21 100644
--- a/ext/spl/tests/SplFileObject_fputcsv_variation15.phpt
+++ b/ext/spl/tests/SplFileObject_fputcsv_variation15.phpt
@@ -15,8 +15,6 @@ foreach ($file as $line) {
echo $line;
}
?>
-===DONE===
--EXPECT--
\
"\"""
-===DONE===
diff --git a/ext/spl/tests/SplFileObject_fstat_with_basic_fstat_disabled.phpt b/ext/spl/tests/SplFileObject_fstat_with_basic_fstat_disabled.phpt
new file mode 100644
index 0000000000..dda7f1e428
--- /dev/null
+++ b/ext/spl/tests/SplFileObject_fstat_with_basic_fstat_disabled.phpt
@@ -0,0 +1,64 @@
+--TEST--
+SplFileObject::fstat when fstat() has been disabled.
+--INI--
+disable_functions="fstat"
+--FILE--
+<?php
+$obj = New SplFileObject(__DIR__.'/SplFileObject_testinput.csv');
+var_dump($obj->fstat());
+?>
+--EXPECTF--
+array(26) {
+ [0]=>
+ int(%i)
+ [1]=>
+ int(%i)
+ [2]=>
+ int(%i)
+ [3]=>
+ int(%i)
+ [4]=>
+ int(%i)
+ [5]=>
+ int(%i)
+ [6]=>
+ int(%i)
+ [7]=>
+ int(%i)
+ [8]=>
+ int(%i)
+ [9]=>
+ int(%i)
+ [10]=>
+ int(%i)
+ [11]=>
+ int(%i)
+ [12]=>
+ int(%i)
+ ["dev"]=>
+ int(%i)
+ ["ino"]=>
+ int(%i)
+ ["mode"]=>
+ int(%i)
+ ["nlink"]=>
+ int(%i)
+ ["uid"]=>
+ int(%i)
+ ["gid"]=>
+ int(%i)
+ ["rdev"]=>
+ int(%i)
+ ["size"]=>
+ int(%i)
+ ["atime"]=>
+ int(%i)
+ ["mtime"]=>
+ int(%i)
+ ["ctime"]=>
+ int(%i)
+ ["blksize"]=>
+ int(%i)
+ ["blocks"]=>
+ int(%i)
+}
diff --git a/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt b/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt
index 831e855b85..4e0642c6ae 100644
--- a/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt
+++ b/ext/spl/tests/SplFileObject_ftruncate_error_001.phpt
@@ -23,9 +23,9 @@ $ftruncate_test = "";
//open an SplFileObject using the above test stream
$obj = New SplFileObject("SPLtest://ftruncate_test");
try {
- $obj->ftruncate(1);
+ $obj->ftruncate(1);
} catch (LogicException $e) {
- echo($e->getMessage());
+ echo($e->getMessage());
}
?>
--EXPECTF--
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
index a8e36cd046..999adaa3c8 100644
--- a/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_001.phpt
@@ -4,7 +4,7 @@ SplFileObject::fwrite function - writing with two parameters length < input stri
<?php
$file = __DIR__.'/SplFileObject_fwrite_variation_001.txt';
if(file_exists($file)) {
- unlink($file);
+ unlink($file);
}
$obj = New SplFileObject($file,'w');
$obj->fwrite('test_write',4);
diff --git a/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt b/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
index cea92a349c..6c061eed84 100644
--- a/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
+++ b/ext/spl/tests/SplFileObject_fwrite_variation_002.phpt
@@ -4,7 +4,7 @@ SplFileObject::fwrite function - writing with two parameters, length > input str
<?php
$file = __DIR__.'/SplFileObject_fwrite_variation_002.txt';
if(file_exists($file)) {
- unlink($file);
+ unlink($file);
}
$obj = New SplFileObject($file,'w');
$obj->fwrite('test_write',12);
diff --git a/ext/spl/tests/SplFileObject_key_error001.phpt b/ext/spl/tests/SplFileObject_key_error001.phpt
index b0834f0029..0c21d0b905 100644
--- a/ext/spl/tests/SplFileObject_key_error001.phpt
+++ b/ext/spl/tests/SplFileObject_key_error001.phpt
@@ -12,11 +12,11 @@ Erwin Poeze <erwin.poeze@gmail.com>
//line 5
$s = new SplFileObject(__FILE__);
-$s->seek(12);
+$s->seek(13);
$s->next();
var_dump($s->key());
var_dump($s->valid());
?>
--EXPECT--
-int(13)
+int(14)
bool(false)
diff --git a/ext/spl/tests/SplFileObject_next_variation002.phpt b/ext/spl/tests/SplFileObject_next_variation002.phpt
index d48ff8c223..e4903dce0c 100644
--- a/ext/spl/tests/SplFileObject_next_variation002.phpt
+++ b/ext/spl/tests/SplFileObject_next_variation002.phpt
@@ -26,5 +26,5 @@ echo $s->current();
--EXPECT--
//line 3
//line 4
-//line 3
//line 4
+//line 5
diff --git a/ext/spl/tests/SplFileObject_seek_error_001.phpt b/ext/spl/tests/SplFileObject_seek_error_001.phpt
index 4de5bcdd4d..d29e86b955 100644
--- a/ext/spl/tests/SplFileObject_seek_error_001.phpt
+++ b/ext/spl/tests/SplFileObject_seek_error_001.phpt
@@ -2,17 +2,12 @@
SplFileObject::seek function - test parameters
--FILE--
<?php
-$obj = New SplFileObject(__FILE__);
-$obj->seek(1,2);
-$obj->seek();
+$obj = new SplFileObject(__FILE__);
try {
- $obj->seek(-1);
-} catch (LogicException $e) {
- echo($e->getMessage());
+ $obj->seek(-1);
+} catch (\ValueError $e) {
+ echo($e->getMessage());
}
?>
---EXPECTF--
-Warning: SplFileObject::seek() expects exactly 1 parameter, 2 given in %s
-
-Warning: SplFileObject::seek() expects exactly 1 parameter, 0 given in %s
-Can't seek file %s to negative line %s
+--EXPECT--
+SplFileObject::seek(): Argument #1 ($line) must be greater than or equal to 0
diff --git a/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt b/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt
index 296c4a1aa0..a2fea52d5a 100644
--- a/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt
+++ b/ext/spl/tests/SplFileObject_setCsvControl_error001.phpt
@@ -13,11 +13,15 @@ CDATA
);
$s = new SplFileObject('csv_control_data_error001.csv');
$s->setFlags(SplFileObject::READ_CSV);
-$s->setCsvControl('||');
+try {
+ $s->setCsvControl('||');
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--CLEAN--
<?php
unlink('csv_control_data_error001.csv');
?>
---EXPECTF--
-Warning: SplFileObject::setCsvControl(): delimiter must be a character in %s on line %d
+--EXPECT--
+SplFileObject::setCsvControl(): Argument #1 ($separator) must be a single character
diff --git a/ext/spl/tests/SplFileObject_setCsvControl_error002.phpt b/ext/spl/tests/SplFileObject_setCsvControl_error002.phpt
index 885d600225..3e4c206fe0 100644
--- a/ext/spl/tests/SplFileObject_setCsvControl_error002.phpt
+++ b/ext/spl/tests/SplFileObject_setCsvControl_error002.phpt
@@ -13,11 +13,15 @@ CDATA
);
$s = new SplFileObject('csv_control_data_error002.csv');
$s->setFlags(SplFileObject::READ_CSV);
-$s->setCsvControl('|', 'two');
+try {
+ $s->setCsvControl('|', 'two');
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--CLEAN--
<?php
unlink('csv_control_data_error002.csv');
?>
---EXPECTF--
-Warning: SplFileObject::setCsvControl(): enclosure must be a character in %s on line %d
+--EXPECT--
+SplFileObject::setCsvControl(): Argument #2 ($enclosure) must be a single character
diff --git a/ext/spl/tests/SplFileObject_setCsvControl_error003.phpt b/ext/spl/tests/SplFileObject_setCsvControl_error003.phpt
index 9e885cbbe3..35934f5e5c 100644
--- a/ext/spl/tests/SplFileObject_setCsvControl_error003.phpt
+++ b/ext/spl/tests/SplFileObject_setCsvControl_error003.phpt
@@ -15,11 +15,15 @@ CDATA
);
$s = new SplFileObject('csv_control_data_error003.csv');
$s->setFlags(SplFileObject::READ_CSV);
-$s->setCsvControl('|', '\'', 'three');
+try {
+ $s->setCsvControl('|', '\'', 'three');
+} catch (ValueError $e) {
+ echo $e->getMessage(), "\n";
+}
?>
--CLEAN--
<?php
unlink('csv_control_data_error003.csv');
?>
---EXPECTF--
-Warning: SplFileObject::setCsvControl(): escape must be empty or a single character in %s on line %d
+--EXPECT--
+SplFileObject::setCsvControl(): Argument #3 ($escape) must be empty or a single character
diff --git a/ext/spl/tests/SplFileObject_setCsvControl_variation002.phpt b/ext/spl/tests/SplFileObject_setCsvControl_variation002.phpt
index 6d3a76ce94..39b526a86a 100644
--- a/ext/spl/tests/SplFileObject_setCsvControl_variation002.phpt
+++ b/ext/spl/tests/SplFileObject_setCsvControl_variation002.phpt
@@ -6,7 +6,6 @@ $file = new SplTempFileObject;
$file->setCsvControl(',', '"', '');
var_dump($file->getCsvControl());
?>
-===DONE===
--EXPECT--
array(3) {
[0]=>
@@ -16,4 +15,3 @@ array(3) {
[2]=>
string(0) ""
}
-===DONE===
diff --git a/ext/spl/tests/SplFixedArray__construct_param_array.phpt b/ext/spl/tests/SplFixedArray__construct_param_array.phpt
index 89983c377e..76f32855b2 100644
--- a/ext/spl/tests/SplFixedArray__construct_param_array.phpt
+++ b/ext/spl/tests/SplFixedArray__construct_param_array.phpt
@@ -6,11 +6,11 @@ PHPNW Test Fest 2009 - Jordan Hatch
<?php
try {
- $array = new SplFixedArray( array("string", 1) );
+ $array = new SplFixedArray( array("string", 1) );
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
--EXPECT--
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, array given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, array given
diff --git a/ext/spl/tests/SplFixedArray__construct_param_string.phpt b/ext/spl/tests/SplFixedArray__construct_param_string.phpt
index bfec39de32..1c9a681e82 100644
--- a/ext/spl/tests/SplFixedArray__construct_param_string.phpt
+++ b/ext/spl/tests/SplFixedArray__construct_param_string.phpt
@@ -5,12 +5,12 @@ PHPNW Test Fest 2009 - Jordan Hatch
--FILE--
<?php
try {
- $array = new SplFixedArray( "string" );
+ $array = new SplFixedArray( "string" );
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
--EXPECT--
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, string given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, string given
diff --git a/ext/spl/tests/SplFixedArray_change_size_during_iteration.phpt b/ext/spl/tests/SplFixedArray_change_size_during_iteration.phpt
new file mode 100644
index 0000000000..56565ff7aa
--- /dev/null
+++ b/ext/spl/tests/SplFixedArray_change_size_during_iteration.phpt
@@ -0,0 +1,43 @@
+--TEST--
+SPL: FixedArray: change array size during iteration
+--FILE--
+<?php
+
+$splFixedArray = SplFixedArray::fromArray(["a","b","c"]);
+/* Try changing size on first, second, and final iterations, and check what
+ * happens in each case */
+foreach ($splFixedArray as $k => $v) {
+ echo "$k => $v\n";
+ if ($k == 0) {
+ $splFixedArray->setSize(2);
+ }
+}
+echo "---\n";
+
+$splFixedArray = SplFixedArray::fromArray(["a","b","c"]);
+foreach ($splFixedArray as $k => $v) {
+ echo "$k => $v\n";
+ if ($k == 1) {
+ $splFixedArray->setSize(2);
+ }
+}
+echo "---\n";
+
+$splFixedArray = SplFixedArray::fromArray(["a","b","c"]);
+foreach ($splFixedArray as $k => $v) {
+ echo "$k => $v\n";
+ if ($k == 2) {
+ $splFixedArray->setSize(2);
+ }
+}
+echo "\n";
+--EXPECT--
+0 => a
+1 => b
+---
+0 => a
+1 => b
+---
+0 => a
+1 => b
+2 => c
diff --git a/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt b/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt
index af9f5f3ee8..ab9b430d2a 100644
--- a/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt
+++ b/ext/spl/tests/SplFixedArray_construct_param_SplFixedArray.phpt
@@ -5,11 +5,11 @@ Philip Norton philipnorton42@gmail.com
--FILE--
<?php
try {
- $array = new SplFixedArray(new SplFixedArray(3));
+ $array = new SplFixedArray(new SplFixedArray(3));
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
--EXPECT--
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, object given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, SplFixedArray given
diff --git a/ext/spl/tests/SplFixedArray_fromarray_indexes.phpt b/ext/spl/tests/SplFixedArray_fromarray_indexes.phpt
index c649e3b6c3..8ec02b8d49 100644
--- a/ext/spl/tests/SplFixedArray_fromarray_indexes.phpt
+++ b/ext/spl/tests/SplFixedArray_fromarray_indexes.phpt
@@ -5,8 +5,8 @@ Philip Norton philipnorton42@gmail.com
--FILE--
<?php
$array = SplFixedArray::fromArray(array(1 => 1,
- 2 => '2',
- 3 => false));
+ 2 => '2',
+ 3 => false));
var_dump($array);
?>
--EXPECT--
diff --git a/ext/spl/tests/SplFixedArray_fromarray_non_indexes.phpt b/ext/spl/tests/SplFixedArray_fromarray_non_indexes.phpt
index b3e7497397..af5f663f33 100644
--- a/ext/spl/tests/SplFixedArray_fromarray_non_indexes.phpt
+++ b/ext/spl/tests/SplFixedArray_fromarray_non_indexes.phpt
@@ -5,9 +5,9 @@ Philip Norton philipnorton42@gmail.com
--FILE--
<?php
$array = SplFixedArray::fromArray(array(1 => 1,
- 2 => '2',
- 3 => false),
- false);
+ 2 => '2',
+ 3 => false),
+ false);
var_dump($array);
?>
--EXPECT--
diff --git a/ext/spl/tests/SplFixedArray_indirect_modification.phpt b/ext/spl/tests/SplFixedArray_indirect_modification.phpt
new file mode 100644
index 0000000000..ab85b3a09e
--- /dev/null
+++ b/ext/spl/tests/SplFixedArray_indirect_modification.phpt
@@ -0,0 +1,14 @@
+--TEST--
+SplFixedArray indirect modification notice
+--FILE--
+<?php
+$a = new SplFixedArray(1);
+$a[0][] = 3;
+var_dump($a);
+?>
+--EXPECTF--
+Notice: Indirect modification of overloaded element of SplFixedArray has no effect in %s on line %d
+object(SplFixedArray)#1 (1) {
+ [0]=>
+ NULL
+}
diff --git a/ext/spl/tests/SplFixedArray_key_setsize.phpt b/ext/spl/tests/SplFixedArray_key_setsize.phpt
deleted file mode 100644
index 091c4650e2..0000000000
--- a/ext/spl/tests/SplFixedArray_key_setsize.phpt
+++ /dev/null
@@ -1,20 +0,0 @@
---TEST--
-SplFixedArray::key() when the array has a size higher than the amount of values specified.
---CREDITS--
-PHPNW Test Fest 2009 - Jordan Hatch
---FILE--
-<?php
-
-$array = new SplFixedArray( 4 );
-
-$array[0] = "Hello";
-$array[1] = "world";
-$array[2] = "elePHPant";
-
-foreach ( $array as $value ) {
- echo $array->key( );
-}
-
-?>
---EXPECT--
-0123
diff --git a/ext/spl/tests/SplFixedArray_nested_foreach.phpt b/ext/spl/tests/SplFixedArray_nested_foreach.phpt
new file mode 100644
index 0000000000..0042ab7890
--- /dev/null
+++ b/ext/spl/tests/SplFixedArray_nested_foreach.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Nested iteration of SplFixedArray using foreach loops
+--FILE--
+<?php
+
+$array = SplFixedArray::fromArray([0, 1]);
+
+foreach ($array as $value1) {
+ foreach ($array as $value2) {
+ echo "$value1 $value2\n";
+ }
+}
+
+?>
+--EXPECT--
+0 0
+0 1
+1 0
+1 1
diff --git a/ext/spl/tests/SplFixedArray_offsetExists_less_than_zero.phpt b/ext/spl/tests/SplFixedArray_offsetExists_less_than_zero.phpt
index 9bfda34073..da6acd15ca 100644
--- a/ext/spl/tests/SplFixedArray_offsetExists_less_than_zero.phpt
+++ b/ext/spl/tests/SplFixedArray_offsetExists_less_than_zero.phpt
@@ -6,7 +6,7 @@ PHPNW TestFest 2009 - Ben Longden
<?php
$array = new SplFixedArray(5);
if($array->offsetExists(-10) === false) {
- echo 'PASS';
+ echo 'PASS';
}
?>
--EXPECT--
diff --git a/ext/spl/tests/SplFixedArray_offsetUnset_string.phpt b/ext/spl/tests/SplFixedArray_offsetUnset_string.phpt
index 3b0e6bb222..1d7c50d39e 100644
--- a/ext/spl/tests/SplFixedArray_offsetUnset_string.phpt
+++ b/ext/spl/tests/SplFixedArray_offsetUnset_string.phpt
@@ -4,18 +4,18 @@ Check removing an item from an array when the offset is not an integer.
PHPNW Testfest 2009 - Paul Court ( g@rgoyle.com )
--FILE--
<?php
- // Create a fixed array
- $fixedArray = new SplFixedArray(5);
+ // Create a fixed array
+ $fixedArray = new SplFixedArray(5);
- // Fill it up
- for ($i=0; $i < 5; $i++) {
- $fixedArray[$i] = "PHPNW Testfest";
- }
+ // Fill it up
+ for ($i=0; $i < 5; $i++) {
+ $fixedArray[$i] = "PHPNW Testfest";
+ }
- // remove an item
- $fixedArray->offsetUnset("4");
+ // remove an item
+ $fixedArray->offsetUnset("4");
- var_dump($fixedArray);
+ var_dump($fixedArray);
?>
--EXPECT--
diff --git a/ext/spl/tests/SplFixedArray_override_getIterator.phpt b/ext/spl/tests/SplFixedArray_override_getIterator.phpt
new file mode 100644
index 0000000000..52bf52f2a1
--- /dev/null
+++ b/ext/spl/tests/SplFixedArray_override_getIterator.phpt
@@ -0,0 +1,46 @@
+--TEST--
+SPL: FixedArray: overriding getIterator()
+--FILE--
+<?php
+class A extends SplFixedArray
+{
+ public function getIterator(): Iterator
+ {
+ $iterator = parent::getIterator();
+ while ($iterator->valid()) {
+ echo "In A: key={$iterator->key()} value={$iterator->current()}\n";
+ yield $iterator->key() => $iterator->current();
+ $iterator->next();
+ }
+ }
+}
+
+echo "==SplFixedArray instance==\n";
+$a = new SplFixedArray(3);
+$a[0] = "a";
+$a[1] = "b";
+$a[2] = "c";
+foreach ($a as $k => $v) {
+ echo "$k => $v\n";
+}
+
+echo "==Subclass instance==\n";
+$a = new A(3);
+$a[0] = "d";
+$a[1] = "e";
+$a[2] = "f";
+foreach ($a as $k => $v) {
+ echo "$k => $v\n";
+}
+--EXPECT--
+==SplFixedArray instance==
+0 => a
+1 => b
+2 => c
+==Subclass instance==
+In A: key=0 value=d
+0 => d
+In A: key=1 value=e
+1 => e
+In A: key=2 value=f
+2 => f
diff --git a/ext/spl/tests/SplObjectStorage_getHash.phpt b/ext/spl/tests/SplObjectStorage_getHash.phpt
index f309b3d84f..85cdcb4e7a 100644
--- a/ext/spl/tests/SplObjectStorage_getHash.phpt
+++ b/ext/spl/tests/SplObjectStorage_getHash.phpt
@@ -49,7 +49,6 @@ $s3[$o2] = $o2;
var_dump($s3[$o1] === $s3[$o2]);
?>
-===DONE===
--EXPECT--
some_value
caught
@@ -57,4 +56,3 @@ caught
object(stdClass)#2 (0) {
}
bool(true)
-===DONE===
diff --git a/ext/spl/tests/SplObjectStorage_offsetGet_missing_object.phpt b/ext/spl/tests/SplObjectStorage_offsetGet_missing_object.phpt
index fa2c7aabe9..54fcc23d4d 100644
--- a/ext/spl/tests/SplObjectStorage_offsetGet_missing_object.phpt
+++ b/ext/spl/tests/SplObjectStorage_offsetGet_missing_object.phpt
@@ -9,9 +9,9 @@ $s = new SplObjectStorage();
$o1 = new stdClass();
try {
- $s->offsetGet($o1);
+ $s->offsetGet($o1);
} catch (UnexpectedValueException $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
diff --git a/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt b/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
index a5678eab40..306a695abd 100644
--- a/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
+++ b/ext/spl/tests/SplObjectStorage_unserialize_bad.phpt
@@ -15,10 +15,11 @@ try {
$so->unserialize($blob);
var_dump($so);
} catch(UnexpectedValueException $e) {
- echo $e->getMessage()."\n";
+ echo $e->getMessage()."\n";
}
}
echo "DONE\n";
+?>
--EXPECTF--
Error at offset 6 of 34 bytes
Error at offset 46 of 89 bytes
diff --git a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter2.phpt b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter2.phpt
index 8ea0b6656e..0ff158c85c 100644
--- a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter2.phpt
+++ b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter2.phpt
@@ -15,7 +15,7 @@ $data_provider = array(
foreach($data_provider as $input) {
- $s = new SplObjectStorage();
+ $s = new SplObjectStorage();
try {
$s->unserialize($input);
diff --git a/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt b/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
index c75662c66e..480585a2c7 100644
--- a/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
+++ b/ext/spl/tests/SplObjectStorage_unserialize_nested.phpt
@@ -17,6 +17,7 @@ echo $s."\n";
$so1 = unserialize($s);
var_dump($so1);
+?>
--EXPECTF--
O:16:"SplObjectStorage":2:{i:0;a:4:{i:0;O:8:"stdClass":1:{s:1:"a";O:8:"stdClass":0:{}}i:1;i:1;i:2;r:4;i:3;i:2;}i:1;a:0:{}}
object(SplObjectStorage)#4 (1) {
diff --git a/ext/spl/tests/SplQueue_setIteratorMode_param_lifo.phpt b/ext/spl/tests/SplQueue_setIteratorMode_param_lifo.phpt
index c3071f2399..255f0cd2e4 100644
--- a/ext/spl/tests/SplQueue_setIteratorMode_param_lifo.phpt
+++ b/ext/spl/tests/SplQueue_setIteratorMode_param_lifo.phpt
@@ -7,11 +7,11 @@ PHPNW Test Fest 2009 - Jeremy Coates jeremy@phpnw.org.uk
try {
- $dll = new SplQueue();
- $dll->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
+ $dll = new SplQueue();
+ $dll->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
diff --git a/ext/spl/tests/SplTempFileObject_constructor_error.phpt b/ext/spl/tests/SplTempFileObject_constructor_error.phpt
index 37b00991ff..212a4df2ff 100644
--- a/ext/spl/tests/SplTempFileObject_constructor_error.phpt
+++ b/ext/spl/tests/SplTempFileObject_constructor_error.phpt
@@ -9,4 +9,4 @@ try {
}
?>
--EXPECT--
-SplTempFileObject::__construct() expects parameter 1 to be int, string given
+SplTempFileObject::__construct(): Argument #1 ($maxMemory) must be of type int, string given
diff --git a/ext/spl/tests/arrayIterator_ksort_basic1.phpt b/ext/spl/tests/arrayIterator_ksort_basic1.phpt
new file mode 100644
index 0000000000..642827a28f
--- /dev/null
+++ b/ext/spl/tests/arrayIterator_ksort_basic1.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #79653: Unexpected error for ArrayIterator::ksort()
+--FILE--
+<?php
+
+$array = [3 => 1, 2 => 2, 1 => 3];
+$arrIter = new ArrayIterator($array);
+var_dump($arrIter->ksort());
+var_dump($arrIter);
+
+?>
+--EXPECT--
+bool(true)
+object(ArrayIterator)#1 (1) {
+ ["storage":"ArrayIterator":private]=>
+ array(3) {
+ [1]=>
+ int(3)
+ [2]=>
+ int(2)
+ [3]=>
+ int(1)
+ }
+}
diff --git a/ext/spl/tests/arrayObject___construct_basic2.phpt b/ext/spl/tests/arrayObject___construct_basic2.phpt
index 9295f40e51..4de3137080 100644
--- a/ext/spl/tests/arrayObject___construct_basic2.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic2.phpt
@@ -3,11 +3,11 @@ SPL: ArrayObject::__construct basic usage.
--FILE--
<?php
class C {
- public $prop = 'C::prop.orig';
+ public $prop = 'C::prop.orig';
}
class MyArrayObject extends ArrayObject {
- public $prop = 'MyArrayObject::prop.orig';
+ public $prop = 'MyArrayObject::prop.orig';
}
echo "--> Access prop on instance of ArrayObject:\n";
@@ -21,29 +21,29 @@ $ao = new MyArrayObject($c);
testAccess($c, $ao);
function testAccess($c, $ao) {
- echo " - Iteration:\n";
- foreach ($ao as $key=>$value) {
- echo " $key=>$value\n";
- }
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
- echo " - Read:\n";
- @var_dump($ao->prop, $ao['prop']);
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
- echo " - Write:\n";
- $ao->prop = 'changed1';
- $ao['prop'] = 'changed2';
- var_dump($ao->prop, $ao['prop']);
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
- echo " - Isset:\n";
- var_dump(isset($ao->prop), isset($ao['prop']));
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
- echo " - Unset:\n";
- unset($ao->prop);
- unset($ao['prop']);
- var_dump($ao->prop, $ao['prop']);
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
- echo " - After:\n";
- var_dump($ao, $c);
+ echo " - After:\n";
+ var_dump($ao, $c);
}
?>
--EXPECTF--
@@ -61,9 +61,9 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined property: ArrayObject::$prop in %s on line 40
+Warning: Undefined property: ArrayObject::$prop in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
@@ -89,9 +89,9 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined property: MyArrayObject::$prop in %s on line 40
+Warning: Undefined property: MyArrayObject::$prop in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
diff --git a/ext/spl/tests/arrayObject___construct_basic3.phpt b/ext/spl/tests/arrayObject___construct_basic3.phpt
index fcd369af84..1d6015ce6a 100644
--- a/ext/spl/tests/arrayObject___construct_basic3.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic3.phpt
@@ -3,11 +3,11 @@ SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST.
--FILE--
<?php
class C {
- public $prop = 'C::prop.orig';
+ public $prop = 'C::prop.orig';
}
class MyArrayObject extends ArrayObject {
- public $prop = 'MyArrayObject::prop.orig';
+ public $prop = 'MyArrayObject::prop.orig';
}
echo "\n--> Access prop on instance of ArrayObject with ArrayObject::STD_PROP_LIST:\n";
@@ -21,29 +21,29 @@ $ao = new MyArrayObject($c, ArrayObject::STD_PROP_LIST);
testAccess($c, $ao);
function testAccess($c, $ao) {
- echo " - Iteration:\n";
- foreach ($ao as $key=>$value) {
- echo " $key=>$value\n";
- }
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
- echo " - Read:\n";
- @var_dump($ao->prop, $ao['prop']);
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
- echo " - Write:\n";
- $ao->prop = 'changed1';
- $ao['prop'] = 'changed2';
- var_dump($ao->prop, $ao['prop']);
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
- echo " - Isset:\n";
- var_dump(isset($ao->prop), isset($ao['prop']));
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
- echo " - Unset:\n";
- unset($ao->prop);
- unset($ao['prop']);
- var_dump($ao->prop, $ao['prop']);
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
- echo " - After:\n";
- var_dump($ao, $c);
+ echo " - After:\n";
+ var_dump($ao, $c);
}
?>
--EXPECTF--
@@ -61,9 +61,9 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined property: ArrayObject::$prop in %s on line 40
+Warning: Undefined property: ArrayObject::$prop in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
@@ -89,9 +89,9 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined property: MyArrayObject::$prop in %s on line 40
+Warning: Undefined property: MyArrayObject::$prop in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
diff --git a/ext/spl/tests/arrayObject___construct_basic4.phpt b/ext/spl/tests/arrayObject___construct_basic4.phpt
index c136c949e2..b8451ab2b3 100644
--- a/ext/spl/tests/arrayObject___construct_basic4.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic4.phpt
@@ -3,11 +3,11 @@ SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS. Curr
--FILE--
<?php
class C {
- public $prop = 'C::prop.orig';
+ public $prop = 'C::prop.orig';
}
class MyArrayObject extends ArrayObject {
- public $prop = 'MyArrayObject::prop.orig';
+ public $prop = 'MyArrayObject::prop.orig';
}
echo "\n--> Access prop on instance of ArrayObject with ArrayObject::ARRAY_AS_PROPS:\n";
@@ -21,29 +21,29 @@ $ao = new MyArrayObject($c, ArrayObject::ARRAY_AS_PROPS);
testAccess($c, $ao);
function testAccess($c, $ao) {
- echo " - Iteration:\n";
- foreach ($ao as $key=>$value) {
- echo " $key=>$value\n";
- }
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
- echo " - Read:\n";
- @var_dump($ao->prop, $ao['prop']);
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
- echo " - Write:\n";
- $ao->prop = 'changed1';
- $ao['prop'] = 'changed2';
- var_dump($ao->prop, $ao['prop']);
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
- echo " - Isset:\n";
- var_dump(isset($ao->prop), isset($ao['prop']));
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
- echo " - Unset:\n";
- unset($ao->prop);
- unset($ao['prop']);
- var_dump($ao->prop, $ao['prop']);
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
- echo " - After:\n";
- var_dump($ao, $c);
+ echo " - After:\n";
+ var_dump($ao, $c);
}
?>
--EXPECTF--
@@ -61,11 +61,11 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined index: prop in %s on line 39
+Warning: Undefined array key "prop" in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
@@ -91,9 +91,9 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
diff --git a/ext/spl/tests/arrayObject___construct_basic5.phpt b/ext/spl/tests/arrayObject___construct_basic5.phpt
index 0eb8904bac..21a5354064 100644
--- a/ext/spl/tests/arrayObject___construct_basic5.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic5.phpt
@@ -3,11 +3,11 @@ SPL: ArrayObject::__construct basic usage with ArrayObject::STD_PROP_LIST|ArrayO
--FILE--
<?php
class C {
- public $prop = 'C::prop.orig';
+ public $prop = 'C::prop.orig';
}
class MyArrayObject extends ArrayObject {
- public $prop = 'MyArrayObject::prop.orig';
+ public $prop = 'MyArrayObject::prop.orig';
}
echo "\n--> Access prop on instance of ArrayObject with ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS:\n";
@@ -21,29 +21,29 @@ $ao = new MyArrayObject($c, ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PRO
testAccess($c, $ao);
function testAccess($c, $ao) {
- echo " - Iteration:\n";
- foreach ($ao as $key=>$value) {
- echo " $key=>$value\n";
- }
+ echo " - Iteration:\n";
+ foreach ($ao as $key=>$value) {
+ echo " $key=>$value\n";
+ }
- echo " - Read:\n";
- @var_dump($ao->prop, $ao['prop']);
+ echo " - Read:\n";
+ @var_dump($ao->prop, $ao['prop']);
- echo " - Write:\n";
- $ao->prop = 'changed1';
- $ao['prop'] = 'changed2';
- var_dump($ao->prop, $ao['prop']);
+ echo " - Write:\n";
+ $ao->prop = 'changed1';
+ $ao['prop'] = 'changed2';
+ var_dump($ao->prop, $ao['prop']);
- echo " - Isset:\n";
- var_dump(isset($ao->prop), isset($ao['prop']));
+ echo " - Isset:\n";
+ var_dump(isset($ao->prop), isset($ao['prop']));
- echo " - Unset:\n";
- unset($ao->prop);
- unset($ao['prop']);
- var_dump($ao->prop, $ao['prop']);
+ echo " - Unset:\n";
+ unset($ao->prop);
+ unset($ao['prop']);
+ var_dump($ao->prop, $ao['prop']);
- echo " - After:\n";
- var_dump($ao, $c);
+ echo " - After:\n";
+ var_dump($ao, $c);
}
?>
--EXPECTF--
@@ -61,11 +61,11 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined index: prop in %s on line 39
+Warning: Undefined array key "prop" in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
@@ -91,9 +91,9 @@ bool(true)
bool(true)
- Unset:
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
-Notice: Undefined index: prop in %s on line 40
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
- After:
diff --git a/ext/spl/tests/arrayObject___construct_basic6.phpt b/ext/spl/tests/arrayObject___construct_basic6.phpt
index befa6eab3c..681e6e0d31 100644
--- a/ext/spl/tests/arrayObject___construct_basic6.phpt
+++ b/ext/spl/tests/arrayObject___construct_basic6.phpt
@@ -3,8 +3,8 @@ SPL: ArrayObject::__construct: check impact of ArrayObject::STD_PROP_LIST on var
--FILE--
<?php
class MyArrayObject extends ArrayObject {
- private $priv1 = 'secret1';
- public $pub1 = 'public1';
+ private $priv1 = 'secret1';
+ public $pub1 = 'public1';
}
$ao = new ArrayObject(array(1,2,3));
diff --git a/ext/spl/tests/arrayObject___construct_error1.phpt b/ext/spl/tests/arrayObject___construct_error1.phpt
index 9c2edf4b21..a9fbc9d3b0 100644
--- a/ext/spl/tests/arrayObject___construct_error1.phpt
+++ b/ext/spl/tests/arrayObject___construct_error1.phpt
@@ -20,6 +20,6 @@ try {
?>
--EXPECT--
Bad iterator type:
-ArrayObject::__construct() expects parameter 3 to be a class name derived from ArrayIterator, 'Exception' given(6)
+ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, Exception given(6)
Non-existent class:
-ArrayObject::__construct() expects parameter 3 to be a class name derived from ArrayIterator, 'nonExistentClassName' given(13)
+ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClassName given(13)
diff --git a/ext/spl/tests/arrayObject___construct_error2.phpt b/ext/spl/tests/arrayObject___construct_error2.phpt
index ec01f57e34..7850a453b4 100644
--- a/ext/spl/tests/arrayObject___construct_error2.phpt
+++ b/ext/spl/tests/arrayObject___construct_error2.phpt
@@ -4,11 +4,11 @@ SPL: ArrayObject::__construct with too many arguments.
<?php
echo "Too many arguments:\n";
Class C implements Iterator {
- function current() {}
- function next() {}
- function key() {}
- function valid() {}
- function rewind() {}
+ function current() {}
+ function next() {}
+ function key() {}
+ function valid() {}
+ function rewind() {}
}
try {
@@ -19,4 +19,4 @@ try {
?>
--EXPECT--
Too many arguments:
-ArrayObject::__construct() expects at most 3 parameters, 4 given(12)
+ArrayObject::__construct() expects at most 3 arguments, 4 given(12)
diff --git a/ext/spl/tests/arrayObject_asort_basic1.phpt b/ext/spl/tests/arrayObject_asort_basic1.phpt
index 6c6fd2949f..efce55d4d5 100644
--- a/ext/spl/tests/arrayObject_asort_basic1.phpt
+++ b/ext/spl/tests/arrayObject_asort_basic1.phpt
@@ -2,9 +2,7 @@
SPL: Test ArrayObject::asort() function : basic functionality with array based store
--FILE--
<?php
-/* Prototype : int ArrayObject::asort()
- * Description: proto int ArrayIterator::asort()
- * Sort the entries by values.
+/* Sort the entries by values.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -15,12 +13,15 @@ $ao1 = new ArrayObject(array(4,2,3));
$ao2 = new ArrayObject(array('a'=>4,'b'=>2,'c'=>3));
var_dump($ao1->asort());
var_dump($ao1);
-var_dump($ao2->asort('blah'));
+try {
+ var_dump($ao2->asort('blah'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
var_dump($ao2);
var_dump($ao2->asort(SORT_NUMERIC));
var_dump($ao2);
?>
-===DONE===
--EXPECTF--
*** Testing ArrayObject::asort() : basic functionality ***
bool(true)
@@ -35,9 +36,7 @@ object(ArrayObject)#%d (1) {
int(4)
}
}
-
-Warning: asort() expects parameter 2 to be int, string given in %sarrayObject_asort_basic1.php on line %d
-bool(false)
+ArrayObject::asort(): Argument #1 ($flags) must be of type int, string given
object(ArrayObject)#%d (1) {
["storage":"ArrayObject":private]=>
array(3) {
@@ -61,4 +60,3 @@ object(ArrayObject)#%d (1) {
int(4)
}
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_asort_basic2.phpt b/ext/spl/tests/arrayObject_asort_basic2.phpt
index a736365dbd..21f0dee950 100644
--- a/ext/spl/tests/arrayObject_asort_basic2.phpt
+++ b/ext/spl/tests/arrayObject_asort_basic2.phpt
@@ -2,19 +2,17 @@
SPL: Test ArrayObject::asort() function : basic functionality with object based store
--FILE--
<?php
-/* Prototype : int ArrayObject::asort()
- * Description: proto int ArrayIterator::asort()
- * Sort the entries by values.
+/* Sort the entries by values.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
echo "*** Testing ArrayObject::asort() : basic functionality ***\n";
Class C {
- public $prop1 = 'x';
- public $prop2 = 'z';
- private $prop3 = 'a';
- public $prop4 = 'x';
+ public $prop1 = 'x';
+ public $prop2 = 'z';
+ private $prop3 = 'a';
+ public $prop4 = 'x';
}
$c = new C;
@@ -22,7 +20,6 @@ $ao1 = new ArrayObject($c);
var_dump($ao1->asort());
var_dump($ao1, $c);
?>
-===DONE===
--EXPECT--
*** Testing ArrayObject::asort() : basic functionality ***
bool(true)
@@ -49,4 +46,3 @@ object(C)#1 (4) {
["prop2"]=>
string(1) "z"
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_clone_basic3.phpt b/ext/spl/tests/arrayObject_clone_basic3.phpt
index 27f2098740..f348043c0b 100644
--- a/ext/spl/tests/arrayObject_clone_basic3.phpt
+++ b/ext/spl/tests/arrayObject_clone_basic3.phpt
@@ -3,7 +3,7 @@ SPL: Cloning nested ArrayObjects.
--FILE--
<?php
class C {
- public $p = 'C::p.orig';
+ public $p = 'C::p.orig';
}
$wrappedObject = new C;
diff --git a/ext/spl/tests/arrayObject_count_basic1.phpt b/ext/spl/tests/arrayObject_count_basic1.phpt
index 41e1527f93..3271090d08 100644
--- a/ext/spl/tests/arrayObject_count_basic1.phpt
+++ b/ext/spl/tests/arrayObject_count_basic1.phpt
@@ -25,9 +25,6 @@ var_dump(count($c), count($ao));
unset($c[0]);
unset($ao[0]);
var_dump($c->count(), $ao->count());
-
-//Extra args are ignored.
-var_dump($ao->count('blah'));
?>
==ArrayIterator==
<?php
@@ -53,11 +50,8 @@ var_dump(count($c), count($ao));
unset($c[0]);
unset($ao[0]);
var_dump($c->count(), $ao->count());
-
-//Extra args are ignored.
-var_dump($ao->count('blah'));
?>
---EXPECTF--
+--EXPECT--
==ArrayObject==
int(99)
int(0)
@@ -67,9 +61,6 @@ int(99)
int(2)
int(99)
int(1)
-
-Warning: ArrayObject::count() expects exactly 0 parameters, 1 given in %s on line %d
-NULL
==ArrayIterator==
int(99)
int(0)
@@ -79,6 +70,3 @@ int(99)
int(2)
int(99)
int(1)
-
-Warning: ArrayIterator::count() expects exactly 0 parameters, 1 given in %s on line %d
-NULL
diff --git a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt
index 823256edbc..57cfd2e51a 100644
--- a/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt
+++ b/ext/spl/tests/arrayObject_exchangeArray_basic3.phpt
@@ -4,7 +4,7 @@ SPL: ArrayObject::exchangeArray() basic usage with object as underlying data sto
<?php
class C {
- public $pub1 = 'public1';
+ public $pub1 = 'public1';
}
echo "--> exchangeArray() with objects:\n";
@@ -12,10 +12,10 @@ $original = new C;
$ao = new ArrayObject($original);
$swapIn = new C;
try {
- $copy = $ao->exchangeArray($swapIn);
- $copy['addedToCopy'] = 'added To Copy';
+ $copy = $ao->exchangeArray($swapIn);
+ $copy['addedToCopy'] = 'added To Copy';
} catch (Exception $e) {
- echo "Exception:" . $e->getMessage() . "\n";
+ echo "Exception:" . $e->getMessage() . "\n";
}
$swapIn->addedToSwapIn = 'added To Swap-In';
$original->addedToOriginal = 'added To Original';
@@ -27,10 +27,10 @@ unset($original, $ao, $swapIn, $copy);
$original = new C;
$ao = new ArrayObject($original);
try {
- $copy = $ao->exchangeArray();
- $copy['addedToCopy'] = 'added To Copy';
-} catch (Exception $e) {
- echo "Exception:" . $e->getMessage() . "\n";
+ $copy = $ao->exchangeArray();
+ $copy['addedToCopy'] = 'added To Copy';
+} catch (TypeError $e) {
+ echo "Exception: " . $e->getMessage() . "\n";
}
$original->addedToOriginal = 'added To Original';
var_dump($ao, $original, $copy);
@@ -40,10 +40,10 @@ unset($original, $ao, $swapIn, $copy);
$original = new C;
$ao = new ArrayObject($original);
try {
- $copy = $ao->exchangeArray(null);
- $copy['addedToCopy'] = 'added To Copy';
-} catch (Exception $e) {
- echo "Exception:" . $e->getMessage() . "\n";
+ $copy = $ao->exchangeArray(null);
+ $copy['addedToCopy'] = 'added To Copy';
+} catch (TypeError $e) {
+ echo $e->getMessage() . "\n";
}
$original->addedToOriginal = 'added To Original';
var_dump($ao, $original, $copy);
@@ -81,8 +81,9 @@ array(2) {
--> exchangeArray() with no arg:
+Exception: ArrayObject::exchangeArray() expects exactly 1 argument, 0 given
-Warning: ArrayObject::exchangeArray() expects exactly 1 parameter, 0 given in %s on line 27
+Warning: Undefined variable $copy in %s on line %d
object(ArrayObject)#2 (1) {
["storage":"ArrayObject":private]=>
object(C)#3 (2) {
@@ -98,16 +99,13 @@ object(C)#3 (2) {
["addedToOriginal"]=>
string(17) "added To Original"
}
-array(1) {
- ["addedToCopy"]=>
- string(13) "added To Copy"
-}
+NULL
--> exchangeArray() with bad arg type:
-Exception:Passed variable is not an array or object
+ArrayObject::exchangeArray(): Argument #1 ($array) must be of type array, null given
-Notice: Undefined variable: copy in %s on line 46
+Warning: Undefined variable $copy in %s on line %d
object(ArrayObject)#3 (1) {
["storage":"ArrayObject":private]=>
object(C)#2 (2) {
diff --git a/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt b/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt
index e6e950c628..58419c06bd 100644
--- a/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt
+++ b/ext/spl/tests/arrayObject_getIteratorClass_basic1.phpt
@@ -4,40 +4,40 @@ SPL: ArrayObject::getIteratorClass and ArrayObject::setIteratorClass basic funct
<?php
class MyIterator extends ArrayIterator {
- function __construct() {
- $args = func_get_args();
- echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- }
+ function __construct() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ }
- function rewind() {
- $args = func_get_args();
- echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- return parent::rewind();
- }
+ function rewind() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ return parent::rewind();
+ }
- function valid() {
- $args = func_get_args();
- echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- return parent::valid();
- }
+ function valid() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ return parent::valid();
+ }
- function current() {
- $args = func_get_args();
- echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- return parent::current();
- }
+ function current() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ return parent::current();
+ }
- function next() {
- $args = func_get_args();
- echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- return parent::next();
- }
+ function next() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ return parent::next();
+ }
- function key() {
- $args = func_get_args();
- echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- return parent::key();
- }
+ function key() {
+ $args = func_get_args();
+ echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ return parent::key();
+ }
}
$ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3), 0, "MyIterator");
@@ -46,7 +46,7 @@ echo "--> Access using MyIterator:\n";
var_dump($ao->getIteratorClass());
var_dump($ao->getIterator());
foreach($ao as $key=>$value) {
- echo " $key=>$value\n";
+ echo " $key=>$value\n";
}
echo "\n\n--> Access using ArrayIterator:\n";
@@ -54,7 +54,7 @@ var_dump($ao->setIteratorClass("ArrayIterator"));
var_dump($ao->getIteratorClass());
var_dump($ao->getIterator());
foreach($ao as $key=>$value) {
- echo "$key=>$value\n";
+ echo "$key=>$value\n";
}
?>
diff --git a/ext/spl/tests/arrayObject_ksort_basic1.phpt b/ext/spl/tests/arrayObject_ksort_basic1.phpt
index 1692a02ef1..27605461cb 100644
--- a/ext/spl/tests/arrayObject_ksort_basic1.phpt
+++ b/ext/spl/tests/arrayObject_ksort_basic1.phpt
@@ -2,9 +2,7 @@
SPL: Test ArrayObject::ksort() function : basic functionality with array based store
--FILE--
<?php
-/* Prototype : int ArrayObject::ksort()
- * Description: proto int ArrayIterator::ksort()
- * Sort the entries by key.
+/* Sort the entries by key.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -14,12 +12,15 @@ $ao1 = new ArrayObject(array(4,2,3));
$ao2 = new ArrayObject(array('b'=>4,'a'=>2,'q'=>3, 99=>'x'));
var_dump($ao1->ksort());
var_dump($ao1);
-var_dump($ao2->ksort('blah'));
+try {
+ var_dump($ao2->ksort('blah'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
var_dump($ao2);
var_dump($ao2->ksort(SORT_STRING));
var_dump($ao2);
?>
-===DONE===
--EXPECTF--
*** Testing ArrayObject::ksort() : basic functionality ***
bool(true)
@@ -34,9 +35,7 @@ object(ArrayObject)#%d (1) {
int(3)
}
}
-
-Warning: ksort() expects parameter 2 to be int, string given in %sarrayObject_ksort_basic1.php on line %d
-bool(false)
+ArrayObject::ksort(): Argument #1 ($flags) must be of type int, string given
object(ArrayObject)#2 (1) {
["storage":"ArrayObject":private]=>
array(4) {
@@ -64,4 +63,3 @@ object(ArrayObject)#%d (1) {
int(3)
}
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_ksort_basic2.phpt b/ext/spl/tests/arrayObject_ksort_basic2.phpt
index 21cb74cf39..1ac3029543 100644
--- a/ext/spl/tests/arrayObject_ksort_basic2.phpt
+++ b/ext/spl/tests/arrayObject_ksort_basic2.phpt
@@ -2,19 +2,17 @@
SPL: Test ArrayObject::ksort() function : basic functionality with object base store
--FILE--
<?php
-/* Prototype : int ArrayObject::ksort()
- * Description: proto int ArrayIterator::ksort()
- * Sort the entries by key.
+/* Sort the entries by key.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
echo "*** Testing ArrayObject::ksort() : basic functionality ***\n";
Class C {
- public $x = 'prop1';
- public $z = 'prop2';
- public $a = 'prop3';
- private $b = 'prop4';
+ public $x = 'prop1';
+ public $z = 'prop2';
+ public $a = 'prop3';
+ private $b = 'prop4';
}
$c = new C;
@@ -22,7 +20,6 @@ $ao1 = new ArrayObject($c);
var_dump($ao1->ksort());
var_dump($ao1, $c);
?>
-===DONE===
--EXPECT--
*** Testing ArrayObject::ksort() : basic functionality ***
bool(true)
@@ -49,4 +46,3 @@ object(C)#1 (4) {
["z"]=>
string(5) "prop2"
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_magicMethods1.phpt b/ext/spl/tests/arrayObject_magicMethods1.phpt
index 351f68214a..14d25ffd29 100644
--- a/ext/spl/tests/arrayObject_magicMethods1.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods1.phpt
@@ -3,28 +3,28 @@ SPL: ArrayObject: ensure a wrapped object's magic methods for property access ar
--FILE--
<?php
class UsesMagic {
- public $a = 1;
- public $b = 2;
- public $c = 3;
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
- private $priv = 'secret';
+ private $priv = 'secret';
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
}
@@ -102,7 +102,7 @@ object(ArrayObject)#2 (1) {
--> Read existent, non-existent and dynamic:
string(7) "changed"
-Notice: Undefined index: nonexistent in %s on line 42
+Warning: Undefined array key "nonexistent" in %s on line %d
NULL
string(11) "new.changed"
Original wrapped object:
@@ -171,7 +171,7 @@ object(ArrayObject)#2 (1) {
--> Unset existent, non-existent and dynamic:
-Notice: Undefined index: nonexistent in %s on line 60
+Warning: Undefined array key "nonexistent" in %s on line %d
Original wrapped object:
object(UsesMagic)#1 (3) {
["b"]=>
diff --git a/ext/spl/tests/arrayObject_magicMethods2.phpt b/ext/spl/tests/arrayObject_magicMethods2.phpt
index 18f0520fcd..13b91e6e86 100644
--- a/ext/spl/tests/arrayObject_magicMethods2.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods2.phpt
@@ -3,28 +3,28 @@ SPL: ArrayObject: ensure a wrapped object's magic methods for property access ar
--FILE--
<?php
class UsesMagic {
- public $a = 1;
- public $b = 2;
- public $c = 3;
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
- private $priv = 'secret';
+ private $priv = 'secret';
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
}
@@ -102,7 +102,7 @@ object(ArrayObject)#2 (3) {
--> Read existent, non-existent and dynamic:
string(7) "changed"
-Notice: Undefined property: ArrayObject::$nonexistent in %s on line 42
+Warning: Undefined property: ArrayObject::$nonexistent in %s on line %d
NULL
string(11) "new.changed"
Original wrapped object:
diff --git a/ext/spl/tests/arrayObject_magicMethods3.phpt b/ext/spl/tests/arrayObject_magicMethods3.phpt
index 6771c46800..4f05f57771 100644
--- a/ext/spl/tests/arrayObject_magicMethods3.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods3.phpt
@@ -3,28 +3,28 @@ SPL: ArrayObject: ensure a wrapped object's magic methods for property access ar
--FILE--
<?php
class UsesMagic {
- public $a = 1;
- public $b = 2;
- public $c = 3;
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
- private $priv = 'secret';
+ private $priv = 'secret';
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
}
@@ -102,7 +102,7 @@ object(ArrayObject)#2 (1) {
--> Read existent, non-existent and dynamic:
string(7) "changed"
-Notice: Undefined index: nonexistent in %s on line 42
+Warning: Undefined array key "nonexistent" in %s on line %d
NULL
string(11) "new.changed"
Original wrapped object:
@@ -171,7 +171,7 @@ object(ArrayObject)#2 (1) {
--> Unset existent, non-existent and dynamic:
-Notice: Undefined index: nonexistent in %s on line 60
+Warning: Undefined array key "nonexistent" in %s on line %d
Original wrapped object:
object(UsesMagic)#1 (3) {
["b"]=>
diff --git a/ext/spl/tests/arrayObject_magicMethods4.phpt b/ext/spl/tests/arrayObject_magicMethods4.phpt
index d6a6292fc0..b209dc8eed 100644
--- a/ext/spl/tests/arrayObject_magicMethods4.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods4.phpt
@@ -3,33 +3,33 @@ SPL: ArrayObject: ensure the magic methods for property access of a subclass of
--FILE--
<?php
class C {
- public $a = 1;
- public $b = 2;
- public $c = 3;
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
- private $priv = 'secret';
+ private $priv = 'secret';
}
class UsesMagic extends ArrayObject {
- public $b = "This should not be in the storage";
+ public $b = "This should not be in the storage";
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
}
$obj = new C;
@@ -107,7 +107,7 @@ object(UsesMagic)#2 (2) {
--> Read existent, non-existent and dynamic:
string(7) "changed"
-Notice: Undefined index: nonexistent in %s on line 45
+Warning: Undefined array key "nonexistent" in %s on line %d
NULL
string(11) "new.changed"
Original wrapped object:
@@ -180,7 +180,7 @@ object(UsesMagic)#2 (2) {
--> Unset existent, non-existent and dynamic:
-Notice: Undefined index: nonexistent in %s on line 63
+Warning: Undefined array key "nonexistent" in %s on line %d
Original wrapped object:
object(C)#1 (3) {
["b"]=>
diff --git a/ext/spl/tests/arrayObject_magicMethods5.phpt b/ext/spl/tests/arrayObject_magicMethods5.phpt
index 6d2ced3a71..c0393ffea4 100644
--- a/ext/spl/tests/arrayObject_magicMethods5.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods5.phpt
@@ -3,33 +3,33 @@ SPL: ArrayObject: ensure the magic methods for property access of a subclass of
--FILE--
<?php
class C {
- public $a = 1;
- public $b = 2;
- public $c = 3;
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
- private $priv = 'secret';
+ private $priv = 'secret';
}
class UsesMagic extends ArrayObject {
- public $b = "This should appear in storage";
+ public $b = "This should appear in storage";
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
- }
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode(',', $args) . ")\n";
+ }
}
$obj = new C;
diff --git a/ext/spl/tests/arrayObject_magicMethods6.phpt b/ext/spl/tests/arrayObject_magicMethods6.phpt
index 243e0f53a8..b655e5e8f8 100644
--- a/ext/spl/tests/arrayObject_magicMethods6.phpt
+++ b/ext/spl/tests/arrayObject_magicMethods6.phpt
@@ -3,33 +3,33 @@ SPL: ArrayObject: ensure the magic methods for property access of a subclass of
--FILE--
<?php
class C {
- public $a = 1;
- public $b = 2;
- public $c = 3;
+ public $a = 1;
+ public $b = 2;
+ public $c = 3;
- private $priv = 'secret';
+ private $priv = 'secret';
}
class UsesMagic extends ArrayObject {
- public $b = "This should never appear in storage";
+ public $b = "This should never appear in storage";
- function __get($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __set($name, $value) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __isset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
- function __unset($name) {
- $args = func_get_args();
- echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
- }
+ function __get($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __set($name, $value) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __isset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
+ function __unset($name) {
+ $args = func_get_args();
+ echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
+ }
}
$obj = new C;
@@ -107,7 +107,7 @@ object(UsesMagic)#2 (2) {
--> Read existent, non-existent and dynamic:
string(7) "changed"
-Notice: Undefined index: nonexistent in %s on line 45
+Warning: Undefined array key "nonexistent" in %s on line %d
NULL
string(11) "new.changed"
Original wrapped object:
@@ -180,7 +180,7 @@ object(UsesMagic)#2 (2) {
--> Unset existent, non-existent and dynamic:
-Notice: Undefined index: nonexistent in %s on line 63
+Warning: Undefined array key "nonexistent" in %s on line %d
Original wrapped object:
object(C)#1 (3) {
["b"]=>
diff --git a/ext/spl/tests/arrayObject_natcasesort_basic1.phpt b/ext/spl/tests/arrayObject_natcasesort_basic1.phpt
index 7e7095fe38..9949fbda06 100644
--- a/ext/spl/tests/arrayObject_natcasesort_basic1.phpt
+++ b/ext/spl/tests/arrayObject_natcasesort_basic1.phpt
@@ -2,9 +2,7 @@
SPL: Test ArrayObject::natcasesort() function : basic functionality
--FILE--
<?php
-/* Prototype : int ArrayObject::natcasesort()
- * Description: proto int ArrayIterator::natcasesort()
- Sort the entries by values using case insensitive "natural order" algorithm.
+/* Sort the entries by values using case insensitive "natural order" algorithm.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -15,10 +13,13 @@ $ao1 = new ArrayObject(array('boo10','boo1','boo2','boo22','BOO5'));
$ao2 = new ArrayObject(array('a'=>'boo10','b'=>'boo1','c'=>'boo2','d'=>'boo22','e'=>'BOO5'));
var_dump($ao1->natcasesort());
var_dump($ao1);
-var_dump($ao2->natcasesort('blah'));
+try {
+ var_dump($ao2->natcasesort('blah'));
+} catch (ArgumentCountError $e) {
+ echo $e->getMessage(), "\n";
+}
var_dump($ao2);
?>
-===DONE===
--EXPECT--
*** Testing ArrayObject::natcasesort() : basic functionality ***
bool(true)
@@ -37,20 +38,19 @@ object(ArrayObject)#1 (1) {
string(5) "boo22"
}
}
-bool(true)
+ArrayObject::natcasesort() expects exactly 0 arguments, 1 given
object(ArrayObject)#2 (1) {
["storage":"ArrayObject":private]=>
array(5) {
+ ["a"]=>
+ string(5) "boo10"
["b"]=>
string(4) "boo1"
["c"]=>
string(4) "boo2"
- ["e"]=>
- string(4) "BOO5"
- ["a"]=>
- string(5) "boo10"
["d"]=>
string(5) "boo22"
+ ["e"]=>
+ string(4) "BOO5"
}
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_natsort_basic1.phpt b/ext/spl/tests/arrayObject_natsort_basic1.phpt
index 1bd1d0b6e8..474c142de0 100644
--- a/ext/spl/tests/arrayObject_natsort_basic1.phpt
+++ b/ext/spl/tests/arrayObject_natsort_basic1.phpt
@@ -2,9 +2,7 @@
SPL: Test ArrayObject::natsort() function : basic functionality
--FILE--
<?php
-/* Prototype : int ArrayObject::natsort()
- * Description: proto int ArrayIterator::natsort()
- Sort the entries by values using "natural order" algorithm.
+/* Sort the entries by values using "natural order" algorithm.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -15,10 +13,13 @@ $ao1 = new ArrayObject(array('boo10','boo1','boo2','boo22','BOO5'));
$ao2 = new ArrayObject(array('a'=>'boo10','b'=>'boo1','c'=>'boo2','d'=>'boo22','e'=>'BOO5'));
var_dump($ao1->natsort());
var_dump($ao1);
-var_dump($ao2->natsort('blah'));
+try {
+ var_dump($ao2->natsort('blah'));
+} catch (ArgumentCountError $e) {
+ echo $e->getMessage(), "\n";
+}
var_dump($ao2);
?>
-===DONE===
--EXPECT--
*** Testing ArrayObject::natsort() : basic functionality ***
bool(true)
@@ -37,20 +38,19 @@ object(ArrayObject)#1 (1) {
string(5) "boo22"
}
}
-bool(true)
+ArrayObject::natsort() expects exactly 0 arguments, 1 given
object(ArrayObject)#2 (1) {
["storage":"ArrayObject":private]=>
array(5) {
- ["e"]=>
- string(4) "BOO5"
+ ["a"]=>
+ string(5) "boo10"
["b"]=>
string(4) "boo1"
["c"]=>
string(4) "boo2"
- ["a"]=>
- string(5) "boo10"
["d"]=>
string(5) "boo22"
+ ["e"]=>
+ string(4) "BOO5"
}
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_setFlags_basic1.phpt b/ext/spl/tests/arrayObject_setFlags_basic1.phpt
index b8bf099dd6..a23018e5e1 100644
--- a/ext/spl/tests/arrayObject_setFlags_basic1.phpt
+++ b/ext/spl/tests/arrayObject_setFlags_basic1.phpt
@@ -3,7 +3,7 @@ SPL: ArrayObject::setFlags basic usage with ArrayObject::ARRAY_AS_PROPS. Current
--FILE--
<?php
class C extends ArrayObject {
- public $p = 'object property';
+ public $p = 'object property';
}
function access_p($ao) {
@@ -44,8 +44,8 @@ string(21) "array element.changed"
--> Remove the array element and try access again:
bool(false)
-Notice: Undefined index: p in %s on line 10
+Warning: Undefined array key "p" in %s on line %d
NULL
-Notice: Undefined index: p in %s on line 12
+Warning: Undefined array key "p" in %s on line %d
string(8) ".changed"
diff --git a/ext/spl/tests/arrayObject_setFlags_basic2.phpt b/ext/spl/tests/arrayObject_setFlags_basic2.phpt
index fe9111c90b..452ce799bb 100644
--- a/ext/spl/tests/arrayObject_setFlags_basic2.phpt
+++ b/ext/spl/tests/arrayObject_setFlags_basic2.phpt
@@ -3,11 +3,11 @@ SPL: Ensure access to non-visible properties falls back to dimension access with
--FILE--
<?php
class C extends ArrayObject {
- private $x = 'secret';
+ private $x = 'secret';
- static function go($c) {
- var_dump($c->x);
- }
+ static function go($c) {
+ var_dump($c->x);
+ }
}
$c = new C(array('x'=>'public'));
diff --git a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
index f3c7e7f5da..9a0e67b605 100644
--- a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
+++ b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt
@@ -8,8 +8,8 @@ try {
foreach($ao as $key=>$value) {
echo " $key=>$value\n";
}
-} catch (Exception $e) {
- var_dump($e->getMessage());
+} catch (TypeError $e) {
+ var_dump($e->getMessage());
}
try {
@@ -18,8 +18,8 @@ try {
foreach($ao as $key=>$value) {
echo " $key=>$value\n";
}
-} catch (Exception $e) {
- var_dump($e->getMessage());
+} catch (TypeError $e) {
+ var_dump($e->getMessage());
}
@@ -29,7 +29,7 @@ try {
echo " $key=>$value\n";
}
} catch (TypeError $e) {
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
try {
@@ -38,19 +38,12 @@ try {
echo " $key=>$value\n";
}
} catch (TypeError $e) {
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
?>
---EXPECTF--
-Warning: ArrayObject::setIteratorClass() expects parameter 1 to be a class name derived from ArrayIterator, 'nonExistentClass' given in %s on line %d
- a=>1
- b=>2
- c=>3
-
-Warning: ArrayObject::setIteratorClass() expects parameter 1 to be a class name derived from ArrayIterator, 'stdClass' given in %s on line %d
- a=>1
- b=>2
- c=>3
-string(118) "ArrayObject::__construct() expects parameter 3 to be a class name derived from ArrayIterator, 'nonExistentClass' given"
-string(110) "ArrayObject::__construct() expects parameter 3 to be a class name derived from ArrayIterator, 'stdClass' given"
+--EXPECT--
+string(133) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given"
+string(125) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given"
+string(128) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given"
+string(120) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given"
diff --git a/ext/spl/tests/arrayObject_uasort_basic1.phpt b/ext/spl/tests/arrayObject_uasort_basic1.phpt
index b07aec206b..d39dc1b7c0 100644
--- a/ext/spl/tests/arrayObject_uasort_basic1.phpt
+++ b/ext/spl/tests/arrayObject_uasort_basic1.phpt
@@ -2,9 +2,7 @@
SPL: Test ArrayObject::uasort() function : basic functionality
--FILE--
<?php
-/* Prototype : int ArrayObject::uasort(callback cmp_function)
- * Description: proto int ArrayIterator::uasort(callback cmp_function)
- Sort the entries by values user defined function.
+/* Sort the entries by values user defined function.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -27,7 +25,6 @@ $ao = new ArrayObject(array(2,3,1));
$ao->uasort('cmp');
var_dump($ao);
?>
-===DONE===
--EXPECT--
*** Testing ArrayObject::uasort() : basic functionality ***
object(ArrayObject)#1 (1) {
@@ -41,4 +38,3 @@ object(ArrayObject)#1 (1) {
int(1)
}
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_uasort_error1.phpt b/ext/spl/tests/arrayObject_uasort_error1.phpt
index e8b52f9e59..d4c8532451 100644
--- a/ext/spl/tests/arrayObject_uasort_error1.phpt
+++ b/ext/spl/tests/arrayObject_uasort_error1.phpt
@@ -2,9 +2,7 @@
Test ArrayObject::uasort() function : wrong arg count
--FILE--
<?php
-/* Prototype : int ArrayObject::uasort(callback cmp_function)
- * Description: proto int ArrayIterator::uasort(callback cmp_function)
- Sort the entries by values user defined function.
+/* Sort the entries by values user defined function.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -12,19 +10,17 @@ Test ArrayObject::uasort() function : wrong arg count
$ao = new ArrayObject();
try {
- $ao->uasort();
-} catch (BadMethodCallException $e) {
- echo $e->getMessage() . "\n";
+ $ao->uasort();
+} catch (ArgumentCountError $e) {
+ echo $e->getMessage() . "\n";
}
try {
- $ao->uasort(1,2);
-} catch (BadMethodCallException $e) {
- echo $e->getMessage() . "\n";
+ $ao->uasort(1,2);
+} catch (ArgumentCountError $e) {
+ echo $e->getMessage() . "\n";
}
?>
-===DONE===
--EXPECT--
-Function expects exactly one argument
-Function expects exactly one argument
-===DONE===
+ArrayObject::uasort() expects exactly 1 argument, 0 given
+ArrayObject::uasort() expects exactly 1 argument, 2 given
diff --git a/ext/spl/tests/arrayObject_uksort_basic1.phpt b/ext/spl/tests/arrayObject_uksort_basic1.phpt
index b770f1fe1d..c59ff2b571 100644
--- a/ext/spl/tests/arrayObject_uksort_basic1.phpt
+++ b/ext/spl/tests/arrayObject_uksort_basic1.phpt
@@ -2,9 +2,7 @@
Test ArrayObject::uksort() function : basic functionality
--FILE--
<?php
-/* Prototype : int ArrayObject::uksort(callback cmp_function)
- * Description: proto int ArrayIterator::uksort(callback cmp_function)
- * Sort the entries by key using user defined function.
+/* Sort the entries by key using user defined function.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -26,7 +24,6 @@ $ao = new ArrayObject(array(3=>0, 2=>1, 5=>2, 6=>3, 1=>4));
$ao->uksort('cmp');
var_dump($ao);
?>
-===DONE===
--EXPECT--
*** Testing ArrayObject::uksort() : basic functionality ***
object(ArrayObject)#1 (1) {
@@ -44,4 +41,3 @@ object(ArrayObject)#1 (1) {
int(4)
}
}
-===DONE===
diff --git a/ext/spl/tests/arrayObject_uksort_error1.phpt b/ext/spl/tests/arrayObject_uksort_error1.phpt
index e72eec0bf9..71164383e4 100644
--- a/ext/spl/tests/arrayObject_uksort_error1.phpt
+++ b/ext/spl/tests/arrayObject_uksort_error1.phpt
@@ -2,9 +2,7 @@
Test ArrayObject::uksort() function : wrong arg count
--FILE--
<?php
-/* Prototype : int ArrayObject::uksort(callback cmp_function)
- * Description: proto int ArrayIterator::uksort(callback cmp_function)
- Sort the entries by key using user defined function.
+/* Sort the entries by key using user defined function.
* Source code: ext/spl/spl_array.c
* Alias to functions:
*/
@@ -12,19 +10,17 @@ Test ArrayObject::uksort() function : wrong arg count
$ao = new ArrayObject();
try {
- $ao->uksort();
-} catch (BadMethodCallException $e) {
- echo $e->getMessage() . "\n";
+ $ao->uksort();
+} catch (ArgumentCountError $e) {
+ echo $e->getMessage() . "\n";
}
try {
- $ao->uksort(1,2);
-} catch (BadMethodCallException $e) {
- echo $e->getMessage() . "\n";
+ $ao->uksort(1,2);
+} catch (ArgumentCountError $e) {
+ echo $e->getMessage() . "\n";
}
?>
-===DONE===
--EXPECT--
-Function expects exactly one argument
-Function expects exactly one argument
-===DONE===
+ArrayObject::uksort() expects exactly 1 argument, 0 given
+ArrayObject::uksort() expects exactly 1 argument, 2 given
diff --git a/ext/spl/tests/array_001.phpt b/ext/spl/tests/array_001.phpt
index b55fcba1fd..065c68a949 100644
--- a/ext/spl/tests/array_001.phpt
+++ b/ext/spl/tests/array_001.phpt
@@ -33,8 +33,6 @@ $ar[] = 4;
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
object(ArrayObject)#%d (1) {
["storage":"ArrayObject":private]=>
@@ -79,15 +77,15 @@ object(ArrayObject)#%d (1) {
}
int(0)
-Notice: Undefined offset: 6 in %sarray_001.php on line %d
+Warning: Undefined array key 6 in %s on line %d
NULL
-Notice: Undefined index: b in %sarray_001.php on line %d
+Warning: Undefined array key "b" in %s on line %d
NULL
-Notice: Undefined offset: 7 in %sarray_001.php on line %d
+Warning: Undefined array key 7 in %s on line %d
-Notice: Undefined index: c in %sarray_001.php on line %d
+Warning: Undefined array key "c" in %s on line %d
object(ArrayObject)#%d (1) {
["storage":"ArrayObject":private]=>
array(2) {
@@ -110,4 +108,3 @@ object(ArrayObject)#%d (1) {
int(4)
}
}
-===DONE===
diff --git a/ext/spl/tests/array_002.phpt b/ext/spl/tests/array_002.phpt
index 55935882f8..94559f5bf7 100644
--- a/ext/spl/tests/array_002.phpt
+++ b/ext/spl/tests/array_002.phpt
@@ -17,8 +17,6 @@ $arrayObject[] = 'five';
var_dump($arrayObject);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
object(ArrayObject)#%d (1) {
["storage":"ArrayObject":private]=>
@@ -38,4 +36,3 @@ object(ArrayObject)#%d (1) {
}
}
}
-===DONE===
diff --git a/ext/spl/tests/array_003.phpt b/ext/spl/tests/array_003.phpt
index e82953be70..e4c0a1f9f8 100644
--- a/ext/spl/tests/array_003.phpt
+++ b/ext/spl/tests/array_003.phpt
@@ -9,14 +9,14 @@ SPL: ArrayObject from object
class test
{
- public $pub = "public";
- protected $pro = "protected";
- private $pri = "private";
-
- function __construct()
- {
- $this->imp = "implicit";
- }
+ public $pub = "public";
+ protected $pro = "protected";
+ private $pri = "private";
+
+ function __construct()
+ {
+ $this->imp = "implicit";
+ }
};
$test = new test;
@@ -30,12 +30,10 @@ print_r($object);
foreach($test as $key => $val)
{
- echo "$key => $val\n";
+ echo "$key => $val\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
test Object
(
@@ -60,4 +58,3 @@ ArrayObject Object
pub => public
imp => implicit
dyn => dynamic
-===DONE===
diff --git a/ext/spl/tests/array_004.phpt b/ext/spl/tests/array_004.phpt
index c976bdd87b..e962477a9e 100644
--- a/ext/spl/tests/array_004.phpt
+++ b/ext/spl/tests/array_004.phpt
@@ -7,12 +7,12 @@ $arr = array(0=>0, 1=>1, 2=>2);
$obj = new ArrayObject($arr);
foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==0 && $bk==0) {
- $arr[0] = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
+ foreach($obj as $bk=>$bv) {
+ if ($ak==0 && $bk==0) {
+ $arr[0] = "modify";
+ }
+ echo "$ak=>$av - $bk=>$bv\n";
+ }
}
echo "Done\n";
diff --git a/ext/spl/tests/array_005.phpt b/ext/spl/tests/array_005.phpt
index b0175e7e7a..cae8f422a7 100644
--- a/ext/spl/tests/array_005.phpt
+++ b/ext/spl/tests/array_005.phpt
@@ -5,73 +5,73 @@ SPL: ArrayObject/Iterator interaction
class Student
{
- private $id;
- private $name;
+ private $id;
+ private $name;
public function __construct($id, $name)
{
- $this->id = $id;
- $this->name = $name;
+ $this->id = $id;
+ $this->name = $name;
}
- public function __toString()
- {
- return $this->id . ', ' . $this->name;
- }
+ public function __toString()
+ {
+ return $this->id . ', ' . $this->name;
+ }
- public function getId()
- {
- return $this->id;
- }
+ public function getId()
+ {
+ return $this->id;
+ }
}
class StudentIdFilter extends FilterIterator
{
- private $id;
+ private $id;
- public function __construct(ArrayObject $students, Student $other)
- {
- FilterIterator::__construct($students->getIterator());
- $this->id = $other->getId();
- }
+ public function __construct(ArrayObject $students, Student $other)
+ {
+ FilterIterator::__construct($students->getIterator());
+ $this->id = $other->getId();
+ }
- public function accept()
- {
- echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
- return $this->current()->getId() == $this->id;
- }
+ public function accept()
+ {
+ echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
+ return $this->current()->getId() == $this->id;
+ }
}
class StudentList implements IteratorAggregate
{
- private $students;
+ private $students;
- public function __construct()
- {
- $this->students = new ArrayObject(array());
- }
+ public function __construct()
+ {
+ $this->students = new ArrayObject(array());
+ }
- public function add(Student $student)
- {
- if (!$this->contains($student)) {
- $this->students[] = $student;
- }
- }
+ public function add(Student $student)
+ {
+ if (!$this->contains($student)) {
+ $this->students[] = $student;
+ }
+ }
- public function contains(Student $student)
- {
- foreach ($this->students as $s)
- {
- if ($s->getId() == $student->getId()) {
- return true;
- }
- }
- return false;
- }
+ public function contains(Student $student)
+ {
+ foreach ($this->students as $s)
+ {
+ if ($s->getId() == $student->getId()) {
+ return true;
+ }
+ }
+ return false;
+ }
- public function getIterator() {
- return $this->students->getIterator();
- }
+ public function getIterator() {
+ return $this->students->getIterator();
+ }
}
$students = new StudentList();
@@ -80,12 +80,9 @@ $students->add(new Student('00000014', 'Bob'));
$students->add(new Student('00000014', 'Foo'));
foreach ($students as $student) {
- echo $student, "\n";
+ echo $student, "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
01234123, Joe
00000014, Bob
-===DONE===
diff --git a/ext/spl/tests/array_006.phpt b/ext/spl/tests/array_006.phpt
index 2735432e26..e46ca25cc3 100644
--- a/ext/spl/tests/array_006.phpt
+++ b/ext/spl/tests/array_006.phpt
@@ -11,20 +11,17 @@ $arr = array(0=>0, 1=>1, 2=>2);
$obj = new ArrayIterator($arr);
foreach($obj as $ak=>$av) {
- foreach($obj as $bk=>$bv) {
- if ($ak==0 && $bk==0) {
- $arr[0] = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
+ foreach($obj as $bk=>$bv) {
+ if ($ak==0 && $bk==0) {
+ $arr[0] = "modify";
+ }
+ echo "$ak=>$av - $bk=>$bv\n";
+ }
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
==Normal==
0=>0 - 0=>0
0=>0 - 1=>1
0=>0 - 2=>2
-===DONE===
diff --git a/ext/spl/tests/array_007.phpt b/ext/spl/tests/array_007.phpt
index 5b7d89068d..13d841792c 100644
--- a/ext/spl/tests/array_007.phpt
+++ b/ext/spl/tests/array_007.phpt
@@ -9,20 +9,20 @@ SPL: ArrayObject/Iterator from IteratorAggregate
class test implements IteratorAggregate
{
- public $pub = "public";
- protected $pro = "protected";
- private $pri = "private";
+ public $pub = "public";
+ protected $pro = "protected";
+ private $pri = "private";
- function __construct()
- {
- $this->imp = "implicit";
- }
+ function __construct()
+ {
+ $this->imp = "implicit";
+ }
- function getIterator()
- {
- $it = new ArrayObject($this);
- return $it->getIterator();
- }
+ function getIterator()
+ {
+ $it = new ArrayObject($this);
+ return $it->getIterator();
+ }
};
$test = new test;
@@ -34,12 +34,10 @@ print_r($test->getIterator());
foreach($test as $key => $val)
{
- echo "$key => $val\n";
+ echo "$key => $val\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
test Object
(
@@ -68,4 +66,3 @@ ArrayIterator Object
pub => public
imp => implicit
dyn => dynamic
-===DONE===
diff --git a/ext/spl/tests/array_008.phpt b/ext/spl/tests/array_008.phpt
index 01b2290e50..6b4f42262d 100644
--- a/ext/spl/tests/array_008.phpt
+++ b/ext/spl/tests/array_008.phpt
@@ -7,17 +7,15 @@ $arr = array(0=>0, 1=>1, 2=>2);
$obj = new ArrayObject($arr);
foreach($obj as $ak=>&$av) {
- foreach($obj as $bk=>&$bv) {
- if ($ak==0 && $bk==0) {
- $bv = "modify";
- }
- echo "$ak=>$av - $bk=>$bv\n";
- }
+ foreach($obj as $bk=>&$bv) {
+ if ($ak==0 && $bk==0) {
+ $bv = "modify";
+ }
+ echo "$ak=>$av - $bk=>$bv\n";
+ }
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
0=>modify - 0=>modify
0=>modify - 1=>1
@@ -28,4 +26,3 @@ foreach($obj as $ak=>&$av) {
2=>2 - 0=>modify
2=>2 - 1=>1
2=>2 - 2=>2
-===DONE===
diff --git a/ext/spl/tests/array_009.phpt b/ext/spl/tests/array_009.phpt
index fc0d60baa9..05c53e9b44 100644
--- a/ext/spl/tests/array_009.phpt
+++ b/ext/spl/tests/array_009.phpt
@@ -8,12 +8,10 @@ $array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
$dir = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($dir as $file) {
- print "$file\n";
+ print "$file\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1
21
@@ -21,4 +19,3 @@ foreach ($dir as $file) {
222
231
3
-===DONE===
diff --git a/ext/spl/tests/array_009a.phpt b/ext/spl/tests/array_009a.phpt
index f2078bcd41..451c22b565 100644
--- a/ext/spl/tests/array_009a.phpt
+++ b/ext/spl/tests/array_009a.phpt
@@ -5,15 +5,15 @@ SPL: ArrayIterator implementing RecursiveIterator
class MyRecursiveArrayIterator extends ArrayIterator implements RecursiveIterator
{
- function hasChildren()
- {
- return is_array($this->current());
- }
+ function hasChildren()
+ {
+ return is_array($this->current());
+ }
- function getChildren()
- {
- return new MyRecursiveArrayIterator($this->current());
- }
+ function getChildren()
+ {
+ return new MyRecursiveArrayIterator($this->current());
+ }
}
$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
@@ -21,12 +21,10 @@ $array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
$dir = new RecursiveIteratorIterator(new MyRecursiveArrayIterator($array), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($dir as $file) {
- print "$file\n";
+ print "$file\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1
21
@@ -34,4 +32,3 @@ foreach ($dir as $file) {
222
231
3
-===DONE===
diff --git a/ext/spl/tests/array_010.phpt b/ext/spl/tests/array_010.phpt
index d2f3de7f6d..c826e7a0cd 100644
--- a/ext/spl/tests/array_010.phpt
+++ b/ext/spl/tests/array_010.phpt
@@ -61,8 +61,6 @@ unset($obj['8th']);
var_dump($obj->getArrayCopy());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
array(4) {
[0]=>
@@ -94,10 +92,10 @@ int(1)
string(3) "3rd"
int(4)
-Notice: Undefined index: 5th in %sarray_010.php on line %d
+Warning: Undefined array key "5th" in %s on line %d
NULL
-Notice: Undefined offset: 6 in %sarray_010.php on line %d
+Warning: Undefined array key 6 in %s on line %d
NULL
===offsetSet===
WRITE 1
@@ -128,9 +126,9 @@ array(6) {
string(9) "changed 6"
}
-Notice: Undefined offset: 7 in %sarray_010.php on line %d
+Warning: Undefined array key 7 in %s on line %d
-Notice: Undefined index: 8th in %sarray_010.php on line %d
+Warning: Undefined array key "8th" in %s on line %d
array(4) {
[0]=>
string(3) "1st"
@@ -141,4 +139,3 @@ array(4) {
[6]=>
string(9) "changed 6"
}
-===DONE===
diff --git a/ext/spl/tests/array_011.phpt b/ext/spl/tests/array_011.phpt
index 0c5ad55d68..647e1ed3ba 100644
--- a/ext/spl/tests/array_011.phpt
+++ b/ext/spl/tests/array_011.phpt
@@ -7,12 +7,10 @@ $a = array('zero' => 0, 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five
//foreach (new ArrayIterator($a) as $k => $v)
foreach (new LimitIterator(new ArrayIterator($a), 1, 3) as $k => $v)
{
- var_dump(array($k, $v));
+ var_dump(array($k, $v));
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
array(2) {
[0]=>
@@ -32,4 +30,3 @@ array(2) {
[1]=>
int(3)
}
-===DONE===
diff --git a/ext/spl/tests/array_012.phpt b/ext/spl/tests/array_012.phpt
index 2ee9724d28..5d5993d936 100644
--- a/ext/spl/tests/array_012.phpt
+++ b/ext/spl/tests/array_012.phpt
@@ -11,8 +11,8 @@ $it = new ArrayIterator($a);
var_dump($it->count());
foreach($it as $key => $val)
{
- echo "$key=>$val\n";
- var_dump($it->count());
+ echo "$key=>$val\n";
+ var_dump($it->count());
}
var_dump($it->count());
@@ -20,11 +20,11 @@ echo "===Object===\n";
class test
{
- public $zero = 0;
- protected $pro;
- public $one = 1;
- private $pri;
- public $two = 2;
+ public $zero = 0;
+ protected $pro;
+ public $one = 1;
+ private $pri;
+ public $two = 2;
}
$o = new test;
@@ -33,14 +33,12 @@ $it = new ArrayIterator($o);
var_dump($it->count());
foreach($it as $key => $val)
{
- echo "$key=>$val\n";
- var_dump($it->count());
+ echo "$key=>$val\n";
+ var_dump($it->count());
}
var_dump($it->count());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===Array===
int(3)
@@ -60,4 +58,3 @@ int(3)
two=>2
int(3)
int(3)
-===DONE===
diff --git a/ext/spl/tests/array_013.phpt b/ext/spl/tests/array_013.phpt
index 1f0c631c02..9ad11c8f38 100644
--- a/ext/spl/tests/array_013.phpt
+++ b/ext/spl/tests/array_013.phpt
@@ -5,7 +5,7 @@ SPL: ArrayIterator::append
if (!class_exists('NoRewindIterator', false))
{
- require_once(__DIR__ . '/../examples/norewinditerator.inc');
+ require_once(__DIR__ . '/../examples/norewinditerator.inc');
}
echo "===Array===\n";
@@ -15,7 +15,7 @@ $it = new ArrayIterator($a);
foreach($it as $key => $val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Append===\n";
@@ -25,18 +25,18 @@ $it->append('four');
foreach(new NoRewindIterator($it) as $key => $val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Object===\n";
class test
{
- public $zero = 0;
- protected $pro;
- public $one = 1;
- private $pri;
- public $two = 2;
+ public $zero = 0;
+ protected $pro;
+ public $one = 1;
+ private $pri;
+ public $two = 2;
}
$o = new test;
@@ -44,7 +44,7 @@ $it = new ArrayIterator($o);
foreach($it as $key => $val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Append===\n";
@@ -54,14 +54,13 @@ $it->append('four');
foreach(new NoRewindIterator($it) as $key => $val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
var_dump($o->{0}); /* doesn't wotk anyway */
?>
===DONE===
-<?php exit(0); ?>
--EXPECTF--
===Array===
0=>zero
diff --git a/ext/spl/tests/array_014.phpt b/ext/spl/tests/array_014.phpt
index 4bf0b83c9c..37ed9abad5 100644
--- a/ext/spl/tests/array_014.phpt
+++ b/ext/spl/tests/array_014.phpt
@@ -11,34 +11,32 @@ $it->seek(4);
var_dump($it->current());
try
{
- $it->seek(-1);
- var_dump($it->current());
+ $it->seek(-1);
+ var_dump($it->current());
}
catch(Exception $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
try
{
- $it->seek(12);
- var_dump($it->current());
+ $it->seek(12);
+ var_dump($it->current());
}
catch(Exception $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
$pos = 0;
foreach($it as $v)
{
- $it->seek($pos++);
- var_dump($v);
+ $it->seek($pos++);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(11)
int(5)
@@ -56,4 +54,3 @@ int(7)
int(8)
int(9)
int(10)
-===DONE===
diff --git a/ext/spl/tests/array_015.phpt b/ext/spl/tests/array_015.phpt
index cd3ce5f45a..45cf466b76 100644
--- a/ext/spl/tests/array_015.phpt
+++ b/ext/spl/tests/array_015.phpt
@@ -23,23 +23,21 @@ var_dump($ar);
foreach($it as $k => $v)
{
- $ar->offsetUnset($k+1);
- echo "$k=>$v\n";
+ $ar->offsetUnset($k+1);
+ echo "$k=>$v\n";
}
var_dump($ar);
foreach($it as $k => $v)
{
- $ar->offsetUnset($k);
- echo "$k=>$v\n";
+ $ar->offsetUnset($k);
+ echo "$k=>$v\n";
}
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
object(ArrayObject)#%d (1) {
%s"storage"%s"ArrayObject":private]=>
@@ -89,4 +87,3 @@ object(ArrayObject)#%d (1) {
int(4)
}
}
-===DONE===
diff --git a/ext/spl/tests/array_016.phpt b/ext/spl/tests/array_016.phpt
index 0a6edea01c..a40d4d5b8a 100644
--- a/ext/spl/tests/array_016.phpt
+++ b/ext/spl/tests/array_016.phpt
@@ -7,19 +7,17 @@ $it = new ArrayIterator(range(0,3));
foreach(new IteratorIterator($it) as $v)
{
- var_dump($v);
+ var_dump($v);
}
$it = new ArrayObject(range(0,3));
foreach(new IteratorIterator($it) as $v)
{
- var_dump($v);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(0)
int(1)
@@ -29,4 +27,3 @@ int(0)
int(1)
int(2)
int(3)
-===DONE===
diff --git a/ext/spl/tests/array_017.phpt b/ext/spl/tests/array_017.phpt
index 3074a76417..1165133b35 100644
--- a/ext/spl/tests/array_017.phpt
+++ b/ext/spl/tests/array_017.phpt
@@ -5,113 +5,113 @@ SPL: ArrayObject::exchangeArray($this)
class ArrayIteratorEx extends ArrayIterator
{
- public $pub2 = 1;
- protected $pro2 = 2;
- private $pri2 = 3;
+ public $pub2 = 1;
+ protected $pro2 = 2;
+ private $pri2 = 3;
- function __construct($ar, $flags = 0)
- {
- echo __METHOD__ . "()\n";
- parent::__construct($ar, $flags);
- $this->imp2 = 4;
- }
+ function __construct($ar, $flags = 0)
+ {
+ echo __METHOD__ . "()\n";
+ parent::__construct($ar, $flags);
+ $this->imp2 = 4;
+ }
- function dump()
- {
- echo __METHOD__ . "()\n";
- var_dump(array('Flags'=>$this->getFlags()
- ,'OVars'=>get_object_vars($this)
- ,'$this'=>$this));
- }
+ function dump()
+ {
+ echo __METHOD__ . "()\n";
+ var_dump(array('Flags'=>$this->getFlags()
+ ,'OVars'=>get_object_vars($this)
+ ,'$this'=>$this));
+ }
- function setFlags($flags)
- {
- echo __METHOD__ . "($flags)\n";
- ArrayIterator::setFlags($flags);
- }
+ function setFlags($flags)
+ {
+ echo __METHOD__ . "($flags)\n";
+ ArrayIterator::setFlags($flags);
+ }
}
class ArrayObjectEx extends ArrayObject
{
- public $pub1 = 1;
- protected $pro1 = 2;
- private $pri1 = 3;
+ public $pub1 = 1;
+ protected $pro1 = 2;
+ private $pri1 = 3;
- function __construct($ar = array(), $flags = 0)
- {
- echo __METHOD__ . "()\n";
- parent::__construct($ar, $flags);
- $this->imp1 = 4;
- }
+ function __construct($ar = array(), $flags = 0)
+ {
+ echo __METHOD__ . "()\n";
+ parent::__construct($ar, $flags);
+ $this->imp1 = 4;
+ }
- function exchange()
- {
- echo __METHOD__ . "()\n";
- $this->exchangeArray($this);
- }
+ function exchange()
+ {
+ echo __METHOD__ . "()\n";
+ $this->exchangeArray($this);
+ }
- function dump()
- {
- echo __METHOD__ . "()\n";
- var_dump(array('Flags'=>$this->getFlags()
- ,'OVars'=>get_object_vars($this)
- ,'$this'=>$this));
- }
+ function dump()
+ {
+ echo __METHOD__ . "()\n";
+ var_dump(array('Flags'=>$this->getFlags()
+ ,'OVars'=>get_object_vars($this)
+ ,'$this'=>$this));
+ }
- function show()
- {
- echo __METHOD__ . "()\n";
- foreach($this as $n => $v)
- {
- var_dump(array($n => $v));
- }
- }
+ function show()
+ {
+ echo __METHOD__ . "()\n";
+ foreach($this as $n => $v)
+ {
+ var_dump(array($n => $v));
+ }
+ }
- function setFlags($flags)
- {
- echo __METHOD__ . "($flags)\n";
- ArrayObject::setFlags($flags);
- }
+ function setFlags($flags)
+ {
+ echo __METHOD__ . "($flags)\n";
+ ArrayObject::setFlags($flags);
+ }
- function getIterator()
- {
- echo __METHOD__ . "()\n";
- $it = new ArrayIteratorEx($this, $this->getFlags());
- $it->dyn2 = 5;
- $it->dump();
- return $it;
- }
+ function getIterator()
+ {
+ echo __METHOD__ . "()\n";
+ $it = new ArrayIteratorEx($this, $this->getFlags());
+ $it->dyn2 = 5;
+ $it->dump();
+ return $it;
+ }
}
function check($obj, $flags)
{
- echo "===CHECK===\n";
+ echo "===CHECK===\n";
- $obj->setFlags($flags);
- $obj->dump();
- $obj->show();
+ $obj->setFlags($flags);
+ $obj->dump();
+ $obj->show();
- echo "===FOREACH===\n";
+ echo "===FOREACH===\n";
- $it = $obj->getIterator();
- foreach($it as $n => $v)
- {
- var_dump(array($n => $v));
- }
+ $it = $obj->getIterator();
+ foreach($it as $n => $v)
+ {
+ var_dump(array($n => $v));
+ }
- echo "===PROPERTY===\n";
+ echo "===PROPERTY===\n";
- var_dump($obj->pub1);
- var_dump(isset($obj->a));
- $obj->setFlags($flags | 2);
- var_dump($obj->pub1);
- var_dump(isset($obj->a));
+ var_dump($obj->pub1);
+ var_dump(isset($obj->a));
+ $obj->setFlags($flags | 2);
+ var_dump($obj->pub1);
+ var_dump(isset($obj->a));
- var_dump($it->pub2);
- var_dump(isset($it->pub1));
- $it->setFlags($flags | 2);
- var_dump($it->pub2);
- var_dump(isset($it->pub1));
+ var_dump($it->pub2);
+ var_dump(isset($it->pub1));
+ $it->setFlags($flags | 2);
+ var_dump($it->pub2);
+ var_dump(isset($it->pub1));
}
$obj = new ArrayObjectEx(array(0=>1,'a'=>25, 'pub1'=>42), 0);
@@ -128,8 +128,6 @@ check($obj, 0);
check($obj, 1);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
ArrayObjectEx::__construct()
===CHECK===
@@ -836,4 +834,3 @@ bool(false)
ArrayIteratorEx::setFlags(3)
int(1)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/array_018.phpt b/ext/spl/tests/array_018.phpt
index 9d20ae47a9..8da46a24db 100644
--- a/ext/spl/tests/array_018.phpt
+++ b/ext/spl/tests/array_018.phpt
Binary files differ
diff --git a/ext/spl/tests/array_019.phpt b/ext/spl/tests/array_019.phpt
index 30cc9972af..7d1239c0bd 100644
--- a/ext/spl/tests/array_019.phpt
+++ b/ext/spl/tests/array_019.phpt
@@ -9,10 +9,10 @@ $ar = new RecursiveArrayIterator(array(3)); foreach($ar as &$v) var_dump($v);
class ArrayIteratorEx extends ArrayIterator
{
- function current()
- {
- return ArrayIterator::current();
- }
+ function current()
+ {
+ return ArrayIterator::current();
+ }
}
$ar = new ArrayIteratorEx(array(4)); foreach($ar as $v) var_dump($v);
@@ -20,14 +20,13 @@ $ar = new ArrayIteratorEx(array(5)); foreach($ar as &$v) var_dump($v);
?>
===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(1)
int(2)
int(3)
int(4)
-Fatal error: Uncaught RuntimeException: An iterator cannot be used with foreach by reference in %s:%d
+Fatal error: Uncaught Error: An iterator cannot be used with foreach by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
diff --git a/ext/spl/tests/array_020.phpt b/ext/spl/tests/array_020.phpt
index 3258c7f16c..fa96f92ab3 100644
--- a/ext/spl/tests/array_020.phpt
+++ b/ext/spl/tests/array_020.phpt
@@ -5,47 +5,45 @@ SPL: ArrayIterator overloading
class ArrayIteratorEx extends ArrayIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- ArrayIterator::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ ArrayIterator::rewind();
+ }
- function valid()
- {
- echo __METHOD__ . "\n";
- return ArrayIterator::valid();
- }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return ArrayIterator::valid();
+ }
- function key()
- {
- echo __METHOD__ . "\n";
- return ArrayIterator::key();
- }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return ArrayIterator::key();
+ }
- function current()
- {
- echo __METHOD__ . "\n";
- return ArrayIterator::current();
- }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return ArrayIterator::current();
+ }
- function next()
- {
- echo __METHOD__ . "\n";
- return ArrayIterator::next();
- }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ return ArrayIterator::next();
+ }
}
$ar = new ArrayIteratorEx(array(1,2));
foreach($ar as $k => $v)
{
- var_dump($k);
- var_dump($v);
+ var_dump($k);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
ArrayIteratorEx::rewind
ArrayIteratorEx::valid
@@ -61,4 +59,3 @@ int(1)
int(2)
ArrayIteratorEx::next
ArrayIteratorEx::valid
-===DONE===
diff --git a/ext/spl/tests/array_021.phpt b/ext/spl/tests/array_021.phpt
index cfe2bcb77d..620347dcd7 100644
--- a/ext/spl/tests/array_021.phpt
+++ b/ext/spl/tests/array_021.phpt
@@ -5,27 +5,25 @@ SPL: ArrayObject::seek() and exceptions
class foo extends ArrayObject
{
- public function seek($key)
- {
- echo __METHOD__ . "($key)\n";
- throw new Exception("hi");
- }
+ public function seek($key)
+ {
+ echo __METHOD__ . "($key)\n";
+ throw new Exception("hi");
+ }
}
$test = new foo(array(1,2,3));
try
{
- $test->seek('bar');
+ $test->seek('bar');
}
catch (Exception $e)
{
- echo "got exception\n";
+ echo "got exception\n";
}
?>
-===DONE===
--EXPECT--
foo::seek(bar)
got exception
-===DONE===
diff --git a/ext/spl/tests/array_022.phpt b/ext/spl/tests/array_022.phpt
index 75eeb8884f..f7407bf602 100644
--- a/ext/spl/tests/array_022.phpt
+++ b/ext/spl/tests/array_022.phpt
@@ -6,11 +6,11 @@ SPL: ArrayObject/Iterator and reference to self
class MyArrayObject extends ArrayObject
{
- public function __construct()
- {
- parent::__construct($this);
- $this['bar'] = 'baz';
- }
+ public function __construct()
+ {
+ parent::__construct($this);
+ $this['bar'] = 'baz';
+ }
}
$a = new MyArrayObject;
@@ -27,11 +27,11 @@ var_dump($b);
class MyArrayIterator extends ArrayIterator
{
- public function __construct()
- {
- parent::__construct($this);
- $this['bar'] = 'baz';
- }
+ public function __construct()
+ {
+ parent::__construct($this);
+ $this['bar'] = 'baz';
+ }
}
$a = new MyArrayIterator;
@@ -43,7 +43,6 @@ var_dump($a);
var_dump($b);
?>
-===DONE===
--EXPECTF--
==ArrayObject===
object(MyArrayObject)#%d (1) {
@@ -67,4 +66,3 @@ object(MyArrayIterator)#%d (2) {
["baz"]=>
string(3) "Foo"
}
-===DONE===
diff --git a/ext/spl/tests/array_024.phpt b/ext/spl/tests/array_024.phpt
index 0c073bfe78..6223b8072e 100644
--- a/ext/spl/tests/array_024.phpt
+++ b/ext/spl/tests/array_024.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: ArrayObject with overriden count()
+SPL: ArrayObject with overridden count()
--FILE--
<?php
$obj = new ArrayObject(array(1,2));
diff --git a/ext/spl/tests/array_026.phpt b/ext/spl/tests/array_026.phpt
index 8ff6aafb93..268b39d5e8 100644
--- a/ext/spl/tests/array_026.phpt
+++ b/ext/spl/tests/array_026.phpt
@@ -8,9 +8,9 @@ $test['d1']['d3'] = 'world';
var_dump($test, $test3['mmmmm']);
?>
--EXPECTF--
-Notice: Undefined variable: test3 in %s on line %d
+Warning: Undefined variable $test3 in %s on line %d
-Notice: Trying to access array offset on value of type null in %s on line %d
+Warning: Trying to access array offset on value of type null in %s on line %d
object(ArrayObject)#1 (1) {
["storage":"ArrayObject":private]=>
array(1) {
diff --git a/ext/spl/tests/array_027.phpt b/ext/spl/tests/array_027.phpt
index 509b8f9ffd..5dc82ab460 100644
--- a/ext/spl/tests/array_027.phpt
+++ b/ext/spl/tests/array_027.phpt
@@ -8,6 +8,7 @@ $o = new AO();
$o['plop'] = $o;
var_dump($o);
+?>
--EXPECTF--
object(AO)#%d (1) {
["storage":"ArrayObject":private]=>
diff --git a/ext/spl/tests/bug28822.phpt b/ext/spl/tests/bug28822.phpt
index 7114edac9f..327681416e 100644
--- a/ext/spl/tests/bug28822.phpt
+++ b/ext/spl/tests/bug28822.phpt
@@ -9,8 +9,6 @@ var_dump($array->offsetExists('key'));
var_dump($array->offsetExists('nokey'));
?>
-===DONE===
--EXPECT--
bool(true)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/bug31185.phpt b/ext/spl/tests/bug31185.phpt
index aa410ebaae..88cb3dbf7c 100644
--- a/ext/spl/tests/bug31185.phpt
+++ b/ext/spl/tests/bug31185.phpt
@@ -4,25 +4,25 @@ Bug #31185 (Crash when exceptions thrown from ArrayAccess::offsetUnset())
<?php
class FooBar implements ArrayAccess {
- private $array = array();
+ private $array = array();
- public function offsetExists($index) {
- return isset($this->array[$index]);
- }
+ public function offsetExists($index) {
+ return isset($this->array[$index]);
+ }
- public function offsetGet($index) {
- return $this->array[$index];
- }
+ public function offsetGet($index) {
+ return $this->array[$index];
+ }
- public function offsetSet($index, $value) {
- echo __METHOD__ . "($index, $value)\n";
- $this->array[$index] = $value;
- }
+ public function offsetSet($index, $value) {
+ echo __METHOD__ . "($index, $value)\n";
+ $this->array[$index] = $value;
+ }
- public function offsetUnset($index) {
- throw new Exception('FAIL');
- unset($this->array[$index]);
- }
+ public function offsetUnset($index) {
+ throw new Exception('FAIL');
+ unset($this->array[$index]);
+ }
}
@@ -33,16 +33,15 @@ $foo[$j++] = $i++;
$foo[$j++] = $i++;
try
{
- unset($foo[1]);
+ unset($foo[1]);
}
catch (Exception $e)
{
- echo "CAUGHT: " . $e->getMessage() . "\n";
+ echo "CAUGHT: " . $e->getMessage() . "\n";
}
print_R($foo);
?>
-===DONE===
--EXPECT--
FooBar::offsetSet(0, 0)
FooBar::offsetSet(1, 1)
@@ -58,4 +57,3 @@ FooBar Object
)
)
-===DONE===
diff --git a/ext/spl/tests/bug32134.phpt b/ext/spl/tests/bug32134.phpt
index 7c3f810401..a81924ed1d 100644
--- a/ext/spl/tests/bug32134.phpt
+++ b/ext/spl/tests/bug32134.phpt
@@ -13,7 +13,7 @@ class myArray extends ArrayIterator
public function offsetGet($index)
{
- static $i = 0;
+ static $i = 0;
echo __METHOD__ . "($index)\n";
if (++$i > 3) exit(1);
return parent::offsetGet($index);
@@ -36,8 +36,6 @@ $myArray['two'] = 'two';
var_dump($myArray['two']);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
myArray::offsetSet(one,one)
myArray::offsetGet(one)
@@ -45,4 +43,3 @@ string(3) "one"
myArray::offsetSet(two,two)
myArray::offsetGet(two)
string(3) "two"
-===DONE===
diff --git a/ext/spl/tests/bug32394.phpt b/ext/spl/tests/bug32394.phpt
index 8189b23f7a..519b0b049e 100644
--- a/ext/spl/tests/bug32394.phpt
+++ b/ext/spl/tests/bug32394.phpt
@@ -8,7 +8,7 @@ $object->append(1);
foreach($object as $key => $value)
{
- $object->offsetUnset($key);
+ $object->offsetUnset($key);
}
?>
diff --git a/ext/spl/tests/bug33136.phpt b/ext/spl/tests/bug33136.phpt
index 4d9a1506ca..8b52eae599 100644
--- a/ext/spl/tests/bug33136.phpt
+++ b/ext/spl/tests/bug33136.phpt
@@ -5,25 +5,25 @@ Bug #33136 (method offsetSet in class extended from ArrayObject crash PHP)
class Collection extends ArrayObject
{
- private $data;
+ private $data;
- function __construct()
- {
- $this->data = array();
- parent::__construct($this->data);
- }
+ function __construct()
+ {
+ $this->data = array();
+ parent::__construct($this->data);
+ }
- function offsetGet($index)
- {
- echo __METHOD__ . "($index)\n";
- return parent::offsetGet($index);
- }
+ function offsetGet($index)
+ {
+ echo __METHOD__ . "($index)\n";
+ return parent::offsetGet($index);
+ }
- function offsetSet($index, $value)
- {
- echo __METHOD__ . "(" . (is_null($index) ? "NULL" : $index) . ",$value)\n";
- parent::offsetSet($index, $value);
- }
+ function offsetSet($index, $value)
+ {
+ echo __METHOD__ . "(" . (is_null($index) ? "NULL" : $index) . ",$value)\n";
+ parent::offsetSet($index, $value);
+ }
}
echo "\n\nInitiate Obj\n";
@@ -46,8 +46,6 @@ print_r($arrayObj);
var_dump(count($arrayObj));
?>
-===DONE===
-<?php //exit(0); ?>
--EXPECT--
Initiate Obj
Assign values
@@ -77,4 +75,3 @@ Collection Object
)
int(3)
-===DONE===
diff --git a/ext/spl/tests/bug34548.phpt b/ext/spl/tests/bug34548.phpt
index 399aa33788..4615b1306b 100644
--- a/ext/spl/tests/bug34548.phpt
+++ b/ext/spl/tests/bug34548.phpt
@@ -5,15 +5,15 @@ Bug #34548 (Method append() in class extended from ArrayObject crashes PHP)
class Collection extends ArrayObject
{
- public function add($dataArray)
- {
- foreach($dataArray as $value) $this->append($value);
- }
+ public function add($dataArray)
+ {
+ foreach($dataArray as $value) $this->append($value);
+ }
- public function offsetSet($index, $value)
- {
- parent::offsetSet($index, $value);
- }
+ public function offsetSet($index, $value)
+ {
+ parent::offsetSet($index, $value);
+ }
}
$data1=array('one', 'two', 'three');
diff --git a/ext/spl/tests/bug36258.phpt b/ext/spl/tests/bug36258.phpt
index 428158c858..5e61b29928 100644
--- a/ext/spl/tests/bug36258.phpt
+++ b/ext/spl/tests/bug36258.phpt
@@ -6,14 +6,12 @@ Bug #36258 (SplFileObject::getPath() may lead to segfault)
$diriter = new RecursiveIteratorIterator( new RecursiveDirectoryIterator('.') );
foreach ($diriter as $key => $file) {
- var_dump($file->getFilename());
- var_dump($file->getPath());
- break;
+ var_dump($file->getFilename());
+ var_dump($file->getPath());
+ break;
}
?>
-===DONE===
--EXPECTF--
string(%d) "%s"
string(%d) "%s"
-===DONE===
diff --git a/ext/spl/tests/bug36287.phpt b/ext/spl/tests/bug36287.phpt
index 0c3f287d4f..0fa6e1bc1e 100644
--- a/ext/spl/tests/bug36287.phpt
+++ b/ext/spl/tests/bug36287.phpt
@@ -8,18 +8,17 @@ $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("."), true);
$idx = 0;
foreach($it as $file)
{
- echo "First\n";
- var_Dump($file->getFilename());
- echo "Second\n";
- var_dump($file->getFilename());
- if (++$idx > 1)
- {
- break;
- }
+ echo "First\n";
+ var_Dump($file->getFilename());
+ echo "Second\n";
+ var_dump($file->getFilename());
+ if (++$idx > 1)
+ {
+ break;
+ }
}
?>
-===DONE===
--EXPECTF--
First
string(%d) "%s"
@@ -29,4 +28,3 @@ First
string(%d) "%s"
Second
string(%d) "%s"
-===DONE===
diff --git a/ext/spl/tests/bug36825.phpt b/ext/spl/tests/bug36825.phpt
index 3b68167204..072009cf84 100644
--- a/ext/spl/tests/bug36825.phpt
+++ b/ext/spl/tests/bug36825.phpt
@@ -5,27 +5,25 @@ Bug #36825 (Exceptions thrown in ArrayObject::offsetGet cause segfault)
class foo extends ArrayObject
{
- public function offsetGet($key)
- {
- echo __METHOD__ . "($key)\n";
- throw new Exception("hi");
- }
+ public function offsetGet($key)
+ {
+ echo __METHOD__ . "($key)\n";
+ throw new Exception("hi");
+ }
}
$test = new foo();
try
{
- var_dump($test['bar']);
+ var_dump($test['bar']);
}
catch (Exception $e)
{
- echo "got exception\n";
+ echo "got exception\n";
}
?>
-===DONE===
--EXPECT--
foo::offsetGet(bar)
got exception
-===DONE===
diff --git a/ext/spl/tests/bug36941.phpt b/ext/spl/tests/bug36941.phpt
index 528ba4a462..a21381da0a 100644
--- a/ext/spl/tests/bug36941.phpt
+++ b/ext/spl/tests/bug36941.phpt
@@ -27,7 +27,6 @@ var_dump($a[0], $b[0]);
$b[0] = 3;
var_dump($a[0], $b[0]);
?>
-===DONE===
--EXPECT--
===ArrayObject===
int(1)
@@ -43,4 +42,3 @@ int(2)
int(2)
int(3)
int(3)
-===DONE===
diff --git a/ext/spl/tests/bug37457.phpt b/ext/spl/tests/bug37457.phpt
index 4c92bbc357..792d5ae2a7 100644
--- a/ext/spl/tests/bug37457.phpt
+++ b/ext/spl/tests/bug37457.phpt
@@ -5,51 +5,51 @@ Bug #37457 (Crash when an exception is thrown in accept() method of FilterIterat
class Collection implements Iterator
{
- protected $array, $valid = false;
+ protected $array, $valid = false;
- public function __construct(array $a)
- {
- echo __METHOD__ . "\n";
- $this->array = $a;
- }
+ public function __construct(array $a)
+ {
+ echo __METHOD__ . "\n";
+ $this->array = $a;
+ }
- public function current()
- {
- echo __METHOD__ . "\n";
- return current($this->array);
- }
+ public function current()
+ {
+ echo __METHOD__ . "\n";
+ return current($this->array);
+ }
- public function key()
- {
- echo __METHOD__ . "\n";
- return key($this->array);
- }
+ public function key()
+ {
+ echo __METHOD__ . "\n";
+ return key($this->array);
+ }
- public function next()
- {
- echo __METHOD__ . "\n";
- $this->valid = (false !== next($this->array));
- }
+ public function next()
+ {
+ echo __METHOD__ . "\n";
+ $this->valid = (false !== next($this->array));
+ }
- public function valid()
- {
- echo __METHOD__ . "\n";
- return $this->valid;
- }
+ public function valid()
+ {
+ echo __METHOD__ . "\n";
+ return $this->valid;
+ }
- public function rewind()
- {
- echo __METHOD__ . "\n";
- $this->valid = (false !== reset($this->array));
- }
+ public function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->valid = (false !== reset($this->array));
+ }
}
class TestFilter extends FilterIterator
{
public function accept()
{
- echo __METHOD__ . "\n";
- throw new Exception("Failure in Accept");
+ echo __METHOD__ . "\n";
+ throw new Exception("Failure in Accept");
}
}
@@ -57,18 +57,17 @@ $test = new TestFilter(new Collection(array(0)));
try
{
- foreach ($test as $item)
- {
- echo $item;
- }
+ foreach ($test as $item)
+ {
+ echo $item;
+ }
}
catch (Exception $e)
{
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
?>
-===DONE===
--EXPECT--
Collection::__construct
Collection::rewind
@@ -77,4 +76,3 @@ Collection::current
Collection::key
TestFilter::accept
string(17) "Failure in Accept"
-===DONE===
diff --git a/ext/spl/tests/bug38325.phpt b/ext/spl/tests/bug38325.phpt
index 1911fc8eaf..5fa521a96c 100644
--- a/ext/spl/tests/bug38325.phpt
+++ b/ext/spl/tests/bug38325.phpt
@@ -6,7 +6,7 @@ spl_autoload_register();
new ThisClassDoesNotExistEverFoo();
?>
--EXPECTF--
-Fatal error: Uncaught Error: Class 'ThisClassDoesNotExistEverFoo' not found in %s:%d
+Fatal error: Uncaught Error: Class "ThisClassDoesNotExistEverFoo" not found in %s:%d
Stack trace:
#0 {main}
thrown in %s on line 3
diff --git a/ext/spl/tests/bug38618.phpt b/ext/spl/tests/bug38618.phpt
index 097d169a98..71a09111a4 100644
--- a/ext/spl/tests/bug38618.phpt
+++ b/ext/spl/tests/bug38618.phpt
@@ -84,10 +84,6 @@ test_array($array, 'Protected Property');
test_array($array, 'Public Property New', RecursiveArrayIterator::CHILD_ARRAYS_ONLY);
test_array($array, 'Protected Property New', RecursiveArrayIterator::CHILD_ARRAYS_ONLY);
?>
-===DONE===
-<?php exit(0); ?>
-?>
-===DONE===
--EXPECT--
===Default with array===
1 => apple
@@ -102,4 +98,3 @@ title => grape
===Protected Property New===
1 => apple
1 => grape
-===DONE===
diff --git a/ext/spl/tests/bug40036.phpt b/ext/spl/tests/bug40036.phpt
index 8180c038ce..27757092bd 100644
--- a/ext/spl/tests/bug40036.phpt
+++ b/ext/spl/tests/bug40036.phpt
@@ -24,9 +24,7 @@ if (empty($view['baz']) || empty($view->baz)) {
echo "View::baz empty\n";
}
?>
-===DONE===
--EXPECT--
View::foo empty
View::bar empty
View::baz empty
-===DONE===
diff --git a/ext/spl/tests/bug40091.phpt b/ext/spl/tests/bug40091.phpt
index eb157e72ae..3bb1bbf152 100644
--- a/ext/spl/tests/bug40091.phpt
+++ b/ext/spl/tests/bug40091.phpt
@@ -3,10 +3,10 @@ Bug #40091 (issue with spl_autoload_register() and 2 instances of the same class
--FILE--
<?php
class MyAutoloader {
- function __construct($directory_to_use) {}
- function autoload($class_name) {
- // code to autoload based on directory
- }
+ function __construct($directory_to_use) {}
+ function autoload($class_name) {
+ // code to autoload based on directory
+ }
}
$autloader1 = new MyAutoloader('dir1');
@@ -17,7 +17,6 @@ spl_autoload_register(array($autloader2, 'autoload'));
print_r(spl_autoload_functions());
?>
-===DONE===
--EXPECT--
Array
(
@@ -40,4 +39,3 @@ Array
)
)
-===DONE===
diff --git a/ext/spl/tests/bug40442.phpt b/ext/spl/tests/bug40442.phpt
index fbeb22d2b3..d5968119e6 100644
--- a/ext/spl/tests/bug40442.phpt
+++ b/ext/spl/tests/bug40442.phpt
@@ -6,7 +6,5 @@ $a = new ArrayObject();
$a->offsetSet('property', 0);
var_dump($a->offsetExists('property'));
?>
-===DONE===
--EXPECT--
bool(true)
-===DONE===
diff --git a/ext/spl/tests/bug40872.phpt b/ext/spl/tests/bug40872.phpt
index a48fe74feb..77c0063de4 100644
--- a/ext/spl/tests/bug40872.phpt
+++ b/ext/spl/tests/bug40872.phpt
@@ -2,29 +2,27 @@
Bug #40872 (inconsistency in offsetSet, offsetExists treatment of string enclosed integers)
--FILE--
<?php
- class Project {
- public $id;
+ class Project {
+ public $id;
- function __construct($id) {
- $this->id = $id;
- }
- }
+ function __construct($id) {
+ $this->id = $id;
+ }
+ }
- class ProjectsList extends ArrayIterator {
- public function add(Project $item) {
- $this->offsetSet($item->id, $item);
- }
- }
+ class ProjectsList extends ArrayIterator {
+ public function add(Project $item) {
+ $this->offsetSet($item->id, $item);
+ }
+ }
- $projects = new ProjectsList();
- $projects->add(new Project('1'));
- $projects->add(new Project(2));
+ $projects = new ProjectsList();
+ $projects->add(new Project('1'));
+ $projects->add(new Project(2));
- var_dump($projects->offsetExists(1));
- var_dump($projects->offsetExists('2'));
+ var_dump($projects->offsetExists(1));
+ var_dump($projects->offsetExists('2'));
?>
-===DONE===
--EXPECT--
bool(true)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/bug41691.phpt b/ext/spl/tests/bug41691.phpt
index d1c53a6fe6..93af430b48 100644
--- a/ext/spl/tests/bug41691.phpt
+++ b/ext/spl/tests/bug41691.phpt
@@ -4,12 +4,12 @@ Bug #41691 (ArrayObject::exchangeArray hangs Apache)
<?php
class A extends ArrayObject {
- public function __construct($dummy, $flags) {
- parent::__construct($this, $flags);
- }
- public $a;
- public $b;
- public $c;
+ public function __construct($dummy, $flags) {
+ parent::__construct($this, $flags);
+ }
+ public $a;
+ public $b;
+ public $c;
}
$a = new A(null, ArrayObject::ARRAY_AS_PROPS );
diff --git a/ext/spl/tests/bug41828.phpt b/ext/spl/tests/bug41828.phpt
index 6053e0e446..548b3884fc 100644
--- a/ext/spl/tests/bug41828.phpt
+++ b/ext/spl/tests/bug41828.phpt
@@ -15,7 +15,8 @@ $foo = new foo("This is bar");
echo $foo->bar();
?>
-==DONE==
-<?php exit(0); ?>
--EXPECTF--
-Fatal error: main(): The foo instance wasn't initialized properly in %s on line %d
+Fatal error: Uncaught Error: The foo instance wasn't initialized properly in %s:%d
+Stack trace:
+#0 {main}
+ thrown in %s on line %d
diff --git a/ext/spl/tests/bug42364.phpt b/ext/spl/tests/bug42364.phpt
index 4d00a18222..96afb22a02 100644
--- a/ext/spl/tests/bug42364.phpt
+++ b/ext/spl/tests/bug42364.phpt
@@ -20,7 +20,6 @@ if ($count > 0) {
echo "Found $count entries!\n";
}
?>
-===DONE===
--CLEAN--
<?php
unlink(__DIR__ . '/bug42364/test');
@@ -28,4 +27,3 @@ rmdir(__DIR__ . '/bug42364');
?>
--EXPECTF--
Found %i entries!
-===DONE===
diff --git a/ext/spl/tests/bug42703.phpt b/ext/spl/tests/bug42703.phpt
index ab4ee5ed50..b54425c310 100644
--- a/ext/spl/tests/bug42703.phpt
+++ b/ext/spl/tests/bug42703.phpt
@@ -4,20 +4,20 @@ Bug #42703 (Exception raised in an iterator::current() causes segfault in Filter
<?php
class BlaIterator implements Iterator
{
- public function rewind() { }
+ public function rewind() { }
- public function next() { }
+ public function next() { }
- public function valid() {
- return true;
- }
+ public function valid() {
+ return true;
+ }
- public function current()
- {
- throw new Exception('boo');
- }
+ public function current()
+ {
+ throw new Exception('boo');
+ }
- public function key() { }
+ public function key() { }
}
$it = new BlaIterator();
@@ -25,11 +25,11 @@ $itit = new IteratorIterator($it);
try {
foreach($itit as $key => $value) {
- echo $key, $value;
+ echo $key, $value;
}
}
catch (Exception $e) {
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
var_dump($itit->current());
diff --git a/ext/spl/tests/bug45216.phpt b/ext/spl/tests/bug45216.phpt
deleted file mode 100644
index e8b04cb1fb..0000000000
--- a/ext/spl/tests/bug45216.phpt
+++ /dev/null
@@ -1,25 +0,0 @@
---TEST--
-SPL: SplFileObject::fgetss (bug 45216)
---CREDITS--
-Perrick Penet <perrick@noparking.net>
-#testfest phpcampparis 2008-06-07
---FILE--
-<?php
-$file = __DIR__ . '/foo.html';
-file_put_contents($file, 'text 0<div class="tested">text 1</div>');
-$handle = fopen($file, 'r');
-
-$object = new SplFileObject($file);
-var_dump($object->fgetss());
-var_dump(fgetss($handle));
-?>
---CLEAN--
-<?php
-unlink(__DIR__ . '/foo.html');
-?>
---EXPECTF--
-Deprecated: Function fgetss() is deprecated in %s on line %d
-string(12) "text 0text 1"
-
-Deprecated: Function fgetss() is deprecated in %s on line %d
-string(12) "text 0text 1"
diff --git a/ext/spl/tests/bug45614.phpt b/ext/spl/tests/bug45614.phpt
index d9e9207d28..8c688555d3 100644
--- a/ext/spl/tests/bug45614.phpt
+++ b/ext/spl/tests/bug45614.phpt
@@ -3,12 +3,12 @@ SPL: Bug#45614 (ArrayIterator can show 1st private prop of wrapped object)
--FILE--
<?php
class C {
- private $priv1 = 'secret1';
- private $priv2 = 'secret2';
- public $pub1 = 'public1';
- public $pub2 = 'public2';
- public $pub3 = 'public3';
- public $pub4 = 'public4';
+ private $priv1 = 'secret1';
+ private $priv2 = 'secret2';
+ public $pub1 = 'public1';
+ public $pub2 = 'public2';
+ public $pub3 = 'public3';
+ public $pub4 = 'public4';
}
function showFirstTwoItems($it) {
diff --git a/ext/spl/tests/bug45622.phpt b/ext/spl/tests/bug45622.phpt
index e2a7b905d5..7461e39189 100644
--- a/ext/spl/tests/bug45622.phpt
+++ b/ext/spl/tests/bug45622.phpt
@@ -4,7 +4,7 @@ SPL: Bug #45622 (isset($arrayObject->p) misbehaves with ArrayObject::ARRAY_AS_PR
<?php
class C extends ArrayObject {
- public $p = 'object property';
+ public $p = 'object property';
}
$ao = new C(array('p'=>'array element'));
@@ -41,7 +41,7 @@ string(13) "array element"
--> Remove the array element and try access again:
bool(false)
-Notice: Undefined index: p in %s on line %d
+Warning: Undefined array key "p" in %s on line %d
NULL
--> Re-add the real property:
diff --git a/ext/spl/tests/bug45622b.phpt b/ext/spl/tests/bug45622b.phpt
index bf0ab8242e..9516fe7a56 100644
--- a/ext/spl/tests/bug45622b.phpt
+++ b/ext/spl/tests/bug45622b.phpt
@@ -3,10 +3,10 @@ Ensure fix to bug45622 doesn't cause __isset() to be called when ArrayObject::AR
--FILE--
<?php
class UsesMagic extends ArrayObject {
- function __get($n) { echo "In " . __METHOD__ . "!\n"; }
- function __set($n, $v) { echo "In " . __METHOD__ . "!\n"; }
- function __isset($n) { echo "In " . __METHOD__ . "!\n"; }
- function __unset($n) { echo "In " . __METHOD__ . "!\n"; }
+ function __get($n) { echo "In " . __METHOD__ . "!\n"; }
+ function __set($n, $v) { echo "In " . __METHOD__ . "!\n"; }
+ function __isset($n) { echo "In " . __METHOD__ . "!\n"; }
+ function __unset($n) { echo "In " . __METHOD__ . "!\n"; }
}
$ao = new UsesMagic(array(), ArrayObject::ARRAY_AS_PROPS);
@@ -25,9 +25,9 @@ isset($ao->prop4);
--EXPECTF--
Doesn't trigger __get.
-Notice: Undefined index: prop1 in %s on line 11
+Warning: Undefined array key "prop1" in %s on line %d
Doesn't trigger __set.
Doesn't trigger __unset.
-Notice: Undefined index: prop3 in %s on line 17
+Warning: Undefined array key "prop3" in %s on line %d
Shouldn't trigger __isset.
diff --git a/ext/spl/tests/bug46051.phpt b/ext/spl/tests/bug46051.phpt
index e993951ffa..cebe8a52d7 100644
--- a/ext/spl/tests/bug46051.phpt
+++ b/ext/spl/tests/bug46051.phpt
@@ -6,9 +6,10 @@ Bug #46051 (SplFileInfo::openFile - memory overlap)
$x = new splfileinfo(__FILE__);
try {
-$x->openFile(NULL, NULL, NULL);
-} catch (Exception $e) { }
+ $x->openFile(NULL, NULL, []);
+} catch (TypeError $e) { }
var_dump($x->getPathName());
+?>
--EXPECTF--
string(%d) "%sbug46051.php"
diff --git a/ext/spl/tests/bug46053.phpt b/ext/spl/tests/bug46053.phpt
index 75da7f3bbf..a18705bb5e 100644
--- a/ext/spl/tests/bug46053.phpt
+++ b/ext/spl/tests/bug46053.phpt
@@ -8,5 +8,6 @@ $x->getPathName();
$x->seek(10);
$x->seek(0);
var_dump(trim($x->fgets()));
+?>
--EXPECTF--
string(%d) "<?php"
diff --git a/ext/spl/tests/bug46160.phpt b/ext/spl/tests/bug46160.phpt
index e4dbdff192..3e03f094d3 100644
--- a/ext/spl/tests/bug46160.phpt
+++ b/ext/spl/tests/bug46160.phpt
@@ -4,8 +4,8 @@ Bug #46160 (SPL - Memory leak when exception is throwed in offsetSet method)
<?php
try {
- $x = new splqueue;
- $x->offsetSet(0, 0);
+ $x = new splqueue;
+ $x->offsetSet(0, 0);
} catch (Exception $e) { }
?>
diff --git a/ext/spl/tests/bug46569.csv b/ext/spl/tests/bug46569.csv
new file mode 100644
index 0000000000..f456a03b78
--- /dev/null
+++ b/ext/spl/tests/bug46569.csv
@@ -0,0 +1,5 @@
+first,line
+second,line
+third,line
+fourth,line
+fifth,line
diff --git a/ext/spl/tests/bug46569.phpt b/ext/spl/tests/bug46569.phpt
new file mode 100644
index 0000000000..0c1ab6ce14
--- /dev/null
+++ b/ext/spl/tests/bug46569.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #46569 (SplFileObject: fgetcsv after seek returns wrong line)
+--FILE--
+<?php
+$file = new SplFileObject(__DIR__ . '/bug46569.csv');
+$file->seek(1);
+print_r($file->fgetcsv());
+?>
+--EXPECT--
+Array
+(
+ [0] => second
+ [1] => line
+)
diff --git a/ext/spl/tests/bug47534.phpt b/ext/spl/tests/bug47534.phpt
index 0d1a5a69ff..e0b48f44e3 100644
--- a/ext/spl/tests/bug47534.phpt
+++ b/ext/spl/tests/bug47534.phpt
@@ -9,6 +9,7 @@ echo gettype($it1->current())."\n";
$it2 = new RecursiveDirectoryIterator(__DIR__);
$it2->rewind();
echo gettype($it2->current())."\n";
+?>
--EXPECT--
string
object
diff --git a/ext/spl/tests/bug48023.phpt b/ext/spl/tests/bug48023.phpt
index 9cb8dd2c1f..e42e2f4f03 100644
--- a/ext/spl/tests/bug48023.phpt
+++ b/ext/spl/tests/bug48023.phpt
@@ -9,7 +9,7 @@ new Foo;
?>
===DONE===
--EXPECTF--
-Fatal error: Uncaught Error: Class 'Foo' not found in %s:%d
+Fatal error: Uncaught Error: Class "Foo" not found in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
diff --git a/ext/spl/tests/bug48361.phpt b/ext/spl/tests/bug48361.phpt
index 61c62c7b3f..3414c3b229 100644
--- a/ext/spl/tests/bug48361.phpt
+++ b/ext/spl/tests/bug48361.phpt
@@ -6,8 +6,6 @@ $info = new SplFileInfo(__FILE__);
var_dump($info->getRealPath());
var_dump($info->getPathInfo()->getRealPath());
?>
-===DONE===
--EXPECTF--
string(%d) "%stests%sbug48361.php"
string(%d) "%stests"
-===DONE===
diff --git a/ext/spl/tests/bug49263.phpt b/ext/spl/tests/bug49263.phpt
index 4d9e8e1d60..5a6c63178f 100644
--- a/ext/spl/tests/bug49263.phpt
+++ b/ext/spl/tests/bug49263.phpt
@@ -15,7 +15,6 @@ unset($s,$o1,$o2);
echo $ss."\n";
var_dump(unserialize($ss));
?>
-===DONE===
--EXPECTF--
O:16:"SplObjectStorage":2:{i:0;a:4:{i:0;O:8:"stdClass":0:{}i:1;a:2:{s:4:"prev";i:2;s:4:"next";O:8:"stdClass":0:{}}i:2;r:6;i:3;a:1:{s:4:"prev";r:3;}}i:1;a:0:{}}
object(SplObjectStorage)#2 (1) {
@@ -49,4 +48,3 @@ object(SplObjectStorage)#2 (1) {
}
}
}
-===DONE===
diff --git a/ext/spl/tests/bug50579.phpt b/ext/spl/tests/bug50579.phpt
index 7bc5deede8..fcf75b4b8d 100644
--- a/ext/spl/tests/bug50579.phpt
+++ b/ext/spl/tests/bug50579.phpt
@@ -4,30 +4,30 @@ Bug #50579 (RegexIterator::REPLACE doesn't work)
<?php
class foo extends ArrayIterator {
- public function __construct( ) {
- parent::__construct(array(
- 'test1'=>'test888',
- 'test2'=>'what?',
- 'test3'=>'test999'));
- }
+ public function __construct( ) {
+ parent::__construct(array(
+ 'test1'=>'test888',
+ 'test2'=>'what?',
+ 'test3'=>'test999'));
+ }
}
$h = new foo;
$i = new RegexIterator($h, '/^test(.*)/', RegexIterator::REPLACE);
$i->replacement = '[$0]';
foreach ($i as $name=>$value) {
- echo $name . '=>' . $value . "\n";
+ echo $name . '=>' . $value . "\n";
}
$i->replacement = '$1';
foreach ($i as $name=>$value) {
- echo $name . '=>' . $value . "\n";
+ echo $name . '=>' . $value . "\n";
}
$h = new foo;
$i = new RegexIterator($h, '/^test(.*)/', RegexIterator::REPLACE);
$i->replacement = '[$1]';
foreach ($i as $name=>$value) {
- echo $name . '=>' . $value . "\n";
+ echo $name . '=>' . $value . "\n";
}
?>
diff --git a/ext/spl/tests/bug51068.phpt b/ext/spl/tests/bug51068.phpt
index 0263536cc3..fd49c03be3 100644
--- a/ext/spl/tests/bug51068.phpt
+++ b/ext/spl/tests/bug51068.phpt
@@ -7,8 +7,8 @@ mkdir('bug.51068.dir');
touch('bug.51068.dir/lvl2.bug.51068');
$iter = new DirectoryIterator('glob://*.51068');
foreach ($iter as $f) {
- var_dump($f->getFilename());
- var_dump($f->getSize());
+ var_dump($f->getFilename());
+ var_dump($f->getSize());
}
$iter = new DirectoryIterator('glob://bug.51068.dir/*.51068');
foreach ($iter as $f) {
diff --git a/ext/spl/tests/bug51119.phpt b/ext/spl/tests/bug51119.phpt
index 441aa1280a..2f3348a2c4 100644
--- a/ext/spl/tests/bug51119.phpt
+++ b/ext/spl/tests/bug51119.phpt
@@ -6,29 +6,20 @@ SPL: LimitIterator zero is valid offset
$array = array('a', 'b', 'c');
$arrayIterator = new ArrayIterator($array);
-try {
- $limitIterator = new LimitIterator($arrayIterator, 0);
- foreach ($limitIterator as $item) {
+$limitIterator = new LimitIterator($arrayIterator, 0);
+foreach ($limitIterator as $item) {
echo $item . "\n";
- }
-} catch (OutOfRangeException $e){
- print $e->getMessage() . "\n";
}
try {
- $limitIterator = new LimitIterator($arrayIterator, -1);
- foreach ($limitIterator as $item) {
- echo $item . "\n";
- }
-} catch (OutOfRangeException $e){
- print $e->getMessage() . "\n";
+ $limitIterator = new LimitIterator($arrayIterator, -1);
+} catch (\ValueError $e){
+ print $e->getMessage() . "\n";
}
?>
-===DONE===
--EXPECT--
a
b
c
-Parameter offset must be >= 0
-===DONE===
+LimitIterator::__construct(): Argument #2 ($offset) must be greater than or equal to 0
diff --git a/ext/spl/tests/bug51374.phpt b/ext/spl/tests/bug51374.phpt
index a4d285322d..0ce95e9c21 100644
--- a/ext/spl/tests/bug51374.phpt
+++ b/ext/spl/tests/bug51374.phpt
@@ -12,8 +12,6 @@ $file = $fileInfo->openFile('r');
print var_dump($file->bam); // is null or UNKNOWN:0
?>
-===DONE===
--EXPECT--
array(0) {
}
-===DONE===
diff --git a/ext/spl/tests/bug53071.phpt b/ext/spl/tests/bug53071.phpt
index 4a2450e201..9ab108cfd5 100644
--- a/ext/spl/tests/bug53071.phpt
+++ b/ext/spl/tests/bug53071.phpt
@@ -5,16 +5,16 @@ Bug #53071 (Usage of SPLObjectStorage defeats gc_collect_cycles)
gc_enable();
class myClass
{
- public $member;
+ public $member;
}
function LimitedScope()
{
- $myA = new myClass();
- $myB = new SplObjectStorage();
- $myC = new myClass();
- $myC->member = $myA; // myC has a reference to myA
- $myB->Attach($myC); // myB attaches myC
- $myA->member = $myB; // myA has myB, comleting the cycle
+ $myA = new myClass();
+ $myB = new SplObjectStorage();
+ $myC = new myClass();
+ $myC->member = $myA; // myC has a reference to myA
+ $myB->Attach($myC); // myB attaches myC
+ $myA->member = $myB; // myA has myB, comleting the cycle
}
LimitedScope();
var_dump(gc_collect_cycles());
diff --git a/ext/spl/tests/bug53362.phpt b/ext/spl/tests/bug53362.phpt
index 7ae74ce559..eec1f037eb 100644
--- a/ext/spl/tests/bug53362.phpt
+++ b/ext/spl/tests/bug53362.phpt
@@ -4,9 +4,9 @@ Bug #53362 (Segmentation fault when extending SplFixedArray)
<?php
class obj extends SplFixedArray{
- public function offsetSet($offset, $value) {
- var_dump($offset);
- }
+ public function offsetSet($offset, $value) {
+ var_dump($offset);
+ }
}
$obj = new obj;
diff --git a/ext/spl/tests/bug54281.phpt b/ext/spl/tests/bug54281.phpt
index 1d83699e14..a2dbcd7447 100644
--- a/ext/spl/tests/bug54281.phpt
+++ b/ext/spl/tests/bug54281.phpt
@@ -4,7 +4,7 @@ Bug #54281 (Crash in spl_recursive_it_rewind_ex)
<?php
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator {
- function __construct($it, $max_depth) { }
+ function __construct($it, $max_depth) { }
}
$it = new RecursiveArrayIteratorIterator(new RecursiveArrayIterator(array()), 2);
@@ -12,7 +12,7 @@ foreach($it as $k=>$v) { }
?>
--EXPECTF--
-Fatal error: Uncaught LogicException: The object is in an invalid state as the parent constructor was not called in %s:%d
+Fatal error: Uncaught Error: The object is in an invalid state as the parent constructor was not called in %s:%d
Stack trace:
#0 %s%ebug54281.php(8): RecursiveIteratorIterator->rewind()
#1 {main}
diff --git a/ext/spl/tests/bug54291.phpt b/ext/spl/tests/bug54291.phpt
index b4c1a2dc4b..bd230f8b2e 100644
--- a/ext/spl/tests/bug54291.phpt
+++ b/ext/spl/tests/bug54291.phpt
@@ -4,8 +4,9 @@ Bug #54291 (Crash iterating DirectoryIterator for dir name starting with \0)
<?php
$dir = new DirectoryIterator("\x00/abc");
$dir->isFile();
+?>
--EXPECTF--
-Fatal error: Uncaught UnexpectedValueException: DirectoryIterator::__construct() expects parameter 1 to be a valid path, string given in %s:%d
+Fatal error: Uncaught ValueError: DirectoryIterator::__construct(): Argument #1 ($directory) must not contain any null bytes in %s:%d
Stack trace:
#0 %s(%d): DirectoryIterator->__construct('\x00/abc')
#1 {main}
diff --git a/ext/spl/tests/bug54292.phpt b/ext/spl/tests/bug54292.phpt
index ffbbcc3220..39bfb6f4dd 100644
--- a/ext/spl/tests/bug54292.phpt
+++ b/ext/spl/tests/bug54292.phpt
@@ -4,11 +4,11 @@ Bug #54292 (Wrong parameter causes crash in SplFileObject::__construct())
<?php
try {
- new SplFileObject('foo', array());
+ new SplFileObject('foo', array());
} catch (TypeError $e) {
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
?>
--EXPECT--
-string(74) "SplFileObject::__construct() expects parameter 2 to be string, array given"
+string(85) "SplFileObject::__construct(): Argument #2 ($mode) must be of type string, array given"
diff --git a/ext/spl/tests/bug54304.phpt b/ext/spl/tests/bug54304.phpt
index 143c26e153..5c6991a1ad 100644
--- a/ext/spl/tests/bug54304.phpt
+++ b/ext/spl/tests/bug54304.phpt
@@ -3,10 +3,10 @@ Bug #54304 (Setting replacement value for RegexIterator doesn't work)
--FILE--
<?php
class foo extends ArrayIterator {
- public function __construct( ) {
- parent::__construct(array(
- 'test3'=>'test999'));
- }
+ public function __construct( ) {
+ parent::__construct(array(
+ 'test3'=>'test999'));
+ }
}
$h = new foo;
@@ -14,7 +14,7 @@ $i = new RegexIterator($h, '/^test(.*)/', RegexIterator::REPLACE);
$i->replacement = 42;
var_dump($i->replacement);
foreach ($i as $name=>$value) {
- var_dump($name, $value);
+ var_dump($name, $value);
}
var_dump($i->replacement);
?>
diff --git a/ext/spl/tests/bug54323.phpt b/ext/spl/tests/bug54323.phpt
index df6416a0f1..7431c9c473 100644
--- a/ext/spl/tests/bug54323.phpt
+++ b/ext/spl/tests/bug54323.phpt
@@ -16,9 +16,10 @@ function testAccess($c, $ao) {
unset($ao['prop']);
var_dump($c->prop, $ao['prop']);
}
+?>
--EXPECTF--
-Notice: Undefined property: C::$prop in %sbug54323.php on line 14
+Warning: Undefined property: C::$prop in %s on line %d
-Notice: Undefined index: prop in %sbug54323.php on line 14
+Warning: Undefined array key "prop" in %s on line %d
NULL
NULL
diff --git a/ext/spl/tests/bug54384.phpt b/ext/spl/tests/bug54384.phpt
index a9dae2e736..fa02e372f5 100644
--- a/ext/spl/tests/bug54384.phpt
+++ b/ext/spl/tests/bug54384.phpt
@@ -4,12 +4,12 @@ Bug #54384: Several SPL classes crash when the parent constructor is not called
<?php
function test($f) {
- try {
- $f();
- echo "ran normally (unexpected)\n\n";
- } catch (LogicException $e) {
- echo "exception (expected)\n";
- }
+ try {
+ $f();
+ echo "ran normally (unexpected)\n\n";
+ } catch (\Error $e) {
+ echo "Error (expected)\n";
+ }
}
echo "IteratorIterator... ";
@@ -17,8 +17,8 @@ class IteratorIteratorTest extends IteratorIterator {
function __construct(){}
}
test( function() {
- $o = new IteratorIteratorTest;
- $o->rewind();
+ $o = new IteratorIteratorTest;
+ $o->rewind();
} );
echo "FilterIterator... ";
@@ -27,8 +27,8 @@ class FilterIteratorTest extends FilterIterator {
function accept(){}
}
test( function() {
- $o = new FilterIteratorTest;
- $o->rewind();
+ $o = new FilterIteratorTest;
+ $o->rewind();
} );
echo "RecursiveFilterIterator... ";
@@ -152,19 +152,20 @@ foreach ($o as $a) {
echo $a,"\n";
}
} );
+?>
--EXPECT--
-IteratorIterator... exception (expected)
-FilterIterator... exception (expected)
-RecursiveFilterIterator... exception (expected)
-ParentIterator... exception (expected)
-LimitIterator... exception (expected)
-CachingIterator... exception (expected)
-RecursiveCachingIterator... exception (expected)
-NoRewindIterator... exception (expected)
-RegexIterator... exception (expected)
-RecursiveRegexIterator... exception (expected)
-GlobIterator... exception (expected)
-SplFileObject... exception (expected)
-SplTempFileObject... exception (expected)
-AppendIterator... exception (expected)
-InfiniteIterator... exception (expected)
+IteratorIterator... Error (expected)
+FilterIterator... Error (expected)
+RecursiveFilterIterator... Error (expected)
+ParentIterator... Error (expected)
+LimitIterator... Error (expected)
+CachingIterator... Error (expected)
+RecursiveCachingIterator... Error (expected)
+NoRewindIterator... Error (expected)
+RegexIterator... Error (expected)
+RecursiveRegexIterator... Error (expected)
+GlobIterator... Error (expected)
+SplFileObject... Error (expected)
+SplTempFileObject... Error (expected)
+AppendIterator... Error (expected)
+InfiniteIterator... Error (expected)
diff --git a/ext/spl/tests/bug55701.phpt b/ext/spl/tests/bug55701.phpt
index 28713700d1..69b9eb0abb 100644
--- a/ext/spl/tests/bug55701.phpt
+++ b/ext/spl/tests/bug55701.phpt
@@ -5,7 +5,7 @@ Bug #55701 (GlobIterator throws LogicException with message 'The parent construc
//
// Some methods of GlobIterator do not throw a RuntimeException when the glob pattern doesn't match any file.
-// Most methods of GlobIterator throw a RuntimeException when the glob pattern does't match any file
+// Most methods of GlobIterator throw a RuntimeException when the glob pattern doesn't match any file
// because they get the properties of the current file
function testBaseClass($f) {
// The tested iterator is in an invalid state; the behaviour of most of its methods is undefined
@@ -15,7 +15,7 @@ function testBaseClass($f) {
} catch (RuntimeException $e) {
// Throwing a RuntimeException is the correct behaviour for some methods
echo "ran normally (expected)\n";
- } catch (LogicException $e) {
+ } catch (\Error $e) {
// Throwing a LogicException is not correct
echo "threw LogicException (unexpected)\n";
}
@@ -27,8 +27,8 @@ function testChildClass($f) {
try {
$f();
echo "didn't throw (unexpected)\n";
- } catch (LogicException $e) {
- echo "threw LogicException (expected)\n";
+ } catch (\Error $e) {
+ echo "threw Error (expected)\n";
} catch (Exception $e) {
echo "threw other exception (unexpected)\n";
}
@@ -293,6 +293,7 @@ testChildClass( function() {
$o = new SplTempFileObjectChild();
$o->count();
} );
+?>
--EXPECT--
->count()... ran normally (expected)
->rewind()... ran normally (expected)
@@ -329,6 +330,6 @@ non-empty GlobIterator... ran normally (expected)
======================= test there are no regressions =======================
SplFileObject existent file... ran normally (expected)
SplFileObject non-existent file... ran normally (expected)
-extends GlobIterator... threw LogicException (expected)
-extends SplFileObject... threw LogicException (expected)
-extends SplTempFileObject... threw LogicException (expected)
+extends GlobIterator... threw Error (expected)
+extends SplFileObject... threw Error (expected)
+extends SplTempFileObject... threw Error (expected)
diff --git a/ext/spl/tests/bug60201.phpt b/ext/spl/tests/bug60201.phpt
index 351b0b08a5..2074c9fa4c 100644
--- a/ext/spl/tests/bug60201.phpt
+++ b/ext/spl/tests/bug60201.phpt
@@ -8,13 +8,12 @@ $params = $method->getParameters();
var_dump($params);
?>
-===DONE===
--EXPECTF--
array(3) {
[0]=>
object(ReflectionParameter)#%d (1) {
["name"]=>
- string(9) "delimiter"
+ string(9) "separator"
}
[1]=>
object(ReflectionParameter)#%d (1) {
@@ -27,4 +26,3 @@ array(3) {
string(6) "escape"
}
}
-===DONE===
diff --git a/ext/spl/tests/bug61326.phpt b/ext/spl/tests/bug61326.phpt
index 85b577940a..5f86359294 100644
--- a/ext/spl/tests/bug61326.phpt
+++ b/ext/spl/tests/bug61326.phpt
@@ -11,6 +11,7 @@ var_dump($aobj1 == $aobj3);
$aobj3->foo = 'bar';
var_dump($aobj1 == $aobj3);
+?>
--EXPECT--
bool(false)
bool(true)
diff --git a/ext/spl/tests/bug61347.phpt b/ext/spl/tests/bug61347.phpt
index 410d65b7e9..c12cf32099 100644
--- a/ext/spl/tests/bug61347.phpt
+++ b/ext/spl/tests/bug61347.phpt
@@ -12,7 +12,6 @@ var_dump(isset($b['no_exists'])); //false
var_dump(empty($b['b'])); //true
var_dump(empty($b[37])); //true
-var_dump(array_key_exists('b', $b)); //true
var_dump($b['b']);
$a = array('b' => '', 37 => false);
@@ -22,16 +21,14 @@ var_dump(isset($b[37])); //true
var_dump(isset($b['no_exists'])); //false
var_dump(empty($b['b'])); //true
var_dump(empty($b[37])); //true
---EXPECTF--
+?>
+--EXPECT--
bool(false)
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
-
-Deprecated: array_key_exists(): Using array_key_exists() on objects is deprecated. Use isset() or property_exists() instead in %s on line %d
-bool(true)
NULL
bool(true)
bool(true)
diff --git a/ext/spl/tests/bug61453.phpt b/ext/spl/tests/bug61453.phpt
index e5b1387fd2..92312d542f 100644
--- a/ext/spl/tests/bug61453.phpt
+++ b/ext/spl/tests/bug61453.phpt
@@ -5,13 +5,13 @@ Bug #61453: SplObjectStorage does not identify objects correctly
$limit = 1000;
$objects = new SplObjectStorage;
for($i = 0; $i < $limit; $i++){
- $object = new StdClass;
+ $object = new StdClass;
- if(isset($objects[$object])){
- die("this should never happen, but did after $i iteration");
- }
+ if(isset($objects[$object])){
+ die("this should never happen, but did after $i iteration");
+ }
- $objects[$object] = 1;
+ $objects[$object] = 1;
}
?>
==DONE==
diff --git a/ext/spl/tests/bug61828.phpt b/ext/spl/tests/bug61828.phpt
index 04d435e6d6..2a11b760bb 100644
--- a/ext/spl/tests/bug61828.phpt
+++ b/ext/spl/tests/bug61828.phpt
@@ -3,9 +3,13 @@ Bug #61828 (Memleak when calling Directory(Recursive)Iterator/Spl(Temp)FileObjec
--FILE--
<?php
$x = new DirectoryIterator('.');
-$x->__construct('/tmp');
-echo "Okey";
+
+try {
+ $x->__construct('/tmp');
+} catch (\Error $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
?>
---EXPECTF--
-Warning: DirectoryIterator::__construct(): Directory object is already initialized in %sbug61828.php on line 3
-Okey
+--EXPECT--
+Directory object is already initialized
diff --git a/ext/spl/tests/bug62004.phpt b/ext/spl/tests/bug62004.phpt
new file mode 100644
index 0000000000..4a06738594
--- /dev/null
+++ b/ext/spl/tests/bug62004.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #62004 (SplFileObject: fgets after seek returns wrong line)
+--FILE--
+<?php
+$f = new SplFileObject(__DIR__ . '/bug62004.txt');
+$f->setFlags(SplFileObject::SKIP_EMPTY);
+$f->seek(0);
+echo $f->fgets();
+$f->seek(1);
+echo $f->fgets();
+$f->seek(2);
+echo $f->fgets();
+?>
+--EXPECT--
+Line 1
+Line 2
+Line 3
diff --git a/ext/spl/tests/bug62004.txt b/ext/spl/tests/bug62004.txt
new file mode 100644
index 0000000000..e5791419fa
--- /dev/null
+++ b/ext/spl/tests/bug62004.txt
@@ -0,0 +1,4 @@
+Line 1
+Line 2
+Line 3
+Line 4
diff --git a/ext/spl/tests/bug62672.phpt b/ext/spl/tests/bug62672.phpt
index d255762254..ec40ee6955 100644
--- a/ext/spl/tests/bug62672.phpt
+++ b/ext/spl/tests/bug62672.phpt
@@ -27,5 +27,6 @@ class ObjB extends ObjA
$obj = new ObjB(new ArrayObject());
var_dump($obj == unserialize(serialize($obj)));
+?>
--EXPECT--
bool(true)
diff --git a/ext/spl/tests/bug62904.phpt b/ext/spl/tests/bug62904.phpt
index 966f1db44e..7a02fd0c2a 100644
--- a/ext/spl/tests/bug62904.phpt
+++ b/ext/spl/tests/bug62904.phpt
@@ -12,5 +12,6 @@ $x = new foo(2);
$z = clone $x;
echo "No crash.";
+?>
--EXPECT--
No crash.
diff --git a/ext/spl/tests/bug62978.phpt b/ext/spl/tests/bug62978.phpt
index 972bd07ce1..ed47d4e44f 100644
--- a/ext/spl/tests/bug62978.phpt
+++ b/ext/spl/tests/bug62978.phpt
@@ -24,29 +24,30 @@ $fp = fopen(__FILE__, 'r');
var_dump($a[$fp]);
fclose($fp);
+?>
--EXPECTF--
-Notice: Undefined index: epic_magic in %sbug62978.php on line %d
+Warning: Undefined array key "epic_magic" in %s on line %d
NULL
-Notice: Undefined index: epic_magic in %sbug62978.php on line %d
+Warning: Undefined array key "epic_magic" in %s on line %d
NULL
-Notice: Undefined variable: c in %sbug62978.php on line %d
+Warning: Undefined variable $c in %s on line %d
-Notice: Trying to access array offset on value of type null in %s on line %d
+Warning: Trying to access array offset on value of type null in %s on line %d
NULL
-Notice: Undefined index: epic_magic in %sbug62978.php on line %d
+Warning: Undefined array key "epic_magic" in %s on line %d
NULL
-Notice: Undefined index: epic_magic in %sbug62978.php on line %d
+Warning: Undefined array key "epic_magic" in %s on line %d
NULL
-Notice: Undefined index: epic_magic in %sbug62978.php on line %d
+Warning: Undefined array key "epic_magic" in %s on line %d
NULL
bool(false)
-Notice: Resource ID#%d used as offset, casting to integer (%d) in %sbug62978.php on line %d
+Warning: Resource ID#%d used as offset, casting to integer (%d) in %sbug62978.php on line %d
-Notice: Undefined offset: %d in %sbug62978.php on line %d
+Warning: Undefined array key 5 in %s on line %d
NULL
diff --git a/ext/spl/tests/bug64023.phpt b/ext/spl/tests/bug64023.phpt
index cb98445279..a46ca79f73 100644
--- a/ext/spl/tests/bug64023.phpt
+++ b/ext/spl/tests/bug64023.phpt
@@ -4,7 +4,7 @@ Bug #64023: Overloading __toString() in SplFileInfo has no effect
<?php
class A extends \SplFileInfo
{
- public function __toString() {return ' -expected- ';}
+ public function __toString() {return ' -expected- ';}
}
$a = new A('/');
@@ -14,6 +14,7 @@ echo $a, $a->__toString(), $a->__toString() . '', "\n";
// Does not work - outputs parent::__toString()
echo $a . '', "\n";
+?>
--EXPECT--
-expected- -expected- -expected-
-expected-
diff --git a/ext/spl/tests/bug65006.phpt b/ext/spl/tests/bug65006.phpt
new file mode 100644
index 0000000000..954811a784
--- /dev/null
+++ b/ext/spl/tests/bug65006.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Bug #65006: spl_autoload_register fails with multiple callables using self, same method
+--FILE--
+<?php
+
+class first {
+ public static function init() {
+ spl_autoload_register(array('self','load'));
+ }
+ public static function load($class) {}
+}
+
+class second {
+ public static function init() {
+ spl_autoload_register(array('self','load'));
+ }
+ public static function load($class){}
+}
+
+first::init();
+second::init();
+var_dump(spl_autoload_functions());
+
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ array(2) {
+ [0]=>
+ string(5) "first"
+ [1]=>
+ string(4) "load"
+ }
+ [1]=>
+ array(2) {
+ [0]=>
+ string(6) "second"
+ [1]=>
+ string(4) "load"
+ }
+}
diff --git a/ext/spl/tests/bug65213.phpt b/ext/spl/tests/bug65213.phpt
index 5e34d9549c..d190941a0e 100644
--- a/ext/spl/tests/bug65213.phpt
+++ b/ext/spl/tests/bug65213.phpt
@@ -7,7 +7,5 @@ $o = new SplFileInfo('.');
var_dump((bool) $o);
?>
-===DONE===
--EXPECT--
bool(true)
-===DONE===
diff --git a/ext/spl/tests/bug65328.phpt b/ext/spl/tests/bug65328.phpt
index 32e6c24fa7..c1b4685a14 100644
--- a/ext/spl/tests/bug65328.phpt
+++ b/ext/spl/tests/bug65328.phpt
@@ -293,6 +293,7 @@ $node2 = new Node('value2', 2);
$node1->addChild($node2);
print_r($tree->findAll(2)->offsetGet(0));
+?>
--EXPECTF--
Node Object
(
diff --git a/ext/spl/tests/bug65387.phpt b/ext/spl/tests/bug65387.phpt
new file mode 100644
index 0000000000..a5b028954c
--- /dev/null
+++ b/ext/spl/tests/bug65387.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Bug #67387: Circular references in SPL iterators are not garbage collected
+--FILE--
+<?php
+
+$it = new ArrayIterator([1, 2, 3]);
+// Inner.
+$it[] = $it;
+
+// Callback
+$it2 = new CallbackFilterIterator($it, function($elem) use(&$it2) {
+ return true;
+});
+
+// Callback object
+new class {
+ public function __construct() {
+ $it = new ArrayIterator([1, 2, 3]);
+ $this->it = new CallbackFilterIterator($it, function($elem) {
+ return true;
+ });
+ }
+};
+
+// Recursive callback
+$it = new RecursiveArrayIterator([1, 2, 3]);
+$it2 = new RecursiveCallbackFilterIterator($it, function($elem) use(&$it2) {
+ return true;
+});
+
+// Cache
+$it = new ArrayIterator();
+$it2 = new CachingIterator($it, CachingIterator::FULL_CACHE);
+$it2[] = $it2;
+$it2->next();
+
+// Recursive cache
+$it = new RecursiveArrayIterator();
+$it2 = new RecursiveCachingIterator($it, CachingIterator::FULL_CACHE);
+$it2[] = $it2;
+$it2->next();
+
+// Append
+$it = new ArrayIterator();
+$it2 = new AppendIterator();
+$it[] = $it2;
+$it2->append($it);
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/ext/spl/tests/bug65545.phpt b/ext/spl/tests/bug65545.phpt
index 76c29cbf48..8ebbf648c9 100644
--- a/ext/spl/tests/bug65545.phpt
+++ b/ext/spl/tests/bug65545.phpt
@@ -6,23 +6,19 @@ $obj = new SplFileObject(__FILE__, 'r');
$data = $obj->fread(5);
var_dump($data);
-$data = $obj->fread();
-var_dump($data);
-
-$data = $obj->fread(0);
-var_dump($data);
+try {
+ $data = $obj->fread(0);
+ var_dump($data);
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
// read more data than is available
$data = $obj->fread(filesize(__FILE__) + 32);
var_dump(strlen($data) === filesize(__FILE__) - 5);
?>
---EXPECTF--
+--EXPECT--
string(5) "<?php"
-
-Warning: SplFileObject::fread() expects exactly 1 parameter, 0 given in %s on line %d
-NULL
-
-Warning: SplFileObject::fread(): Length parameter must be greater than 0 in %s on line %d
-bool(false)
+SplFileObject::fread(): Argument #1 ($length) must be greater than 0
bool(true)
diff --git a/ext/spl/tests/bug66127.phpt b/ext/spl/tests/bug66127.phpt
index b5d1dcac4b..d6b78ae497 100644
--- a/ext/spl/tests/bug66127.phpt
+++ b/ext/spl/tests/bug66127.phpt
@@ -21,5 +21,6 @@ unset($items[0][0]);
crash();
echo "Worked!\n";
?>
---EXPECT--
+--EXPECTF--
+Warning: Undefined array key 0 in %s on line %d
Worked!
diff --git a/ext/spl/tests/bug66702.phpt b/ext/spl/tests/bug66702.phpt
index f1260afa02..9b69054bde 100644
--- a/ext/spl/tests/bug66702.phpt
+++ b/ext/spl/tests/bug66702.phpt
@@ -17,6 +17,7 @@ $it2 = new \RegexIterator($it, "/^ba/", \RegexIterator::MATCH, \RegexIterator::U
print_r(iterator_to_array($it2));
$it2 = new \RegexIterator($it, "/^ba/", \RegexIterator::MATCH, \RegexIterator::USE_KEY | \RegexIterator::INVERT_MATCH);
print_r(iterator_to_array($it2));
+?>
--EXPECT--
Array
(
diff --git a/ext/spl/tests/bug66834.phpt b/ext/spl/tests/bug66834.phpt
index eed26c815f..c47a7f6263 100644
--- a/ext/spl/tests/bug66834.phpt
+++ b/ext/spl/tests/bug66834.phpt
@@ -6,47 +6,47 @@ SPL: Bug #66834
// overrides both offsetExists and offsetGet
class ArrayObjectBoth extends ArrayObject
{
- public function offsetExists($offset) {
- var_dump('Called: '.__METHOD__);
- return parent::offsetExists($offset);
- }
+ public function offsetExists($offset) {
+ var_dump('Called: '.__METHOD__);
+ return parent::offsetExists($offset);
+ }
- public function offsetGet($offset) {
- var_dump('Called: '.__METHOD__);
- return parent::offsetGet($offset);
- }
+ public function offsetGet($offset) {
+ var_dump('Called: '.__METHOD__);
+ return parent::offsetGet($offset);
+ }
}
// overrides only offsetExists
class ArrayObjectExists extends ArrayObject
{
- public function offsetExists($offset) {
- var_dump('Called: '.__METHOD__);
- return parent::offsetExists($offset);
- }
+ public function offsetExists($offset) {
+ var_dump('Called: '.__METHOD__);
+ return parent::offsetExists($offset);
+ }
}
// overrides only offsetGet
class ArrayObjectGet extends ArrayObject
{
- public function offsetGet($offset) {
- var_dump('Called: '.__METHOD__);
- return parent::offsetGet($offset);
- }
+ public function offsetGet($offset) {
+ var_dump('Called: '.__METHOD__);
+ return parent::offsetGet($offset);
+ }
}
// overrides only offsetGet and offsetSet
class ArrayObjectGetSet extends ArrayObject
{
- public function offsetGet($offset)
- {
- return parent::offsetGet(str_rot13($offset));
- }
+ public function offsetGet($offset)
+ {
+ return parent::offsetGet(str_rot13($offset));
+ }
- public function offsetSet($offset, $value)
- {
- return parent::offsetSet(str_rot13($offset), $value);
- }
+ public function offsetSet($offset, $value)
+ {
+ return parent::offsetSet(str_rot13($offset), $value);
+ }
}
$values = ['foo' => '', 'bar' => null, 'baz' => 42];
@@ -150,7 +150,7 @@ bool(false)
bool(true)
==== class with offsetGet() and offsetSet() ====
-Notice: Undefined index: foo in %s on line %d
+Warning: Undefined array key "foo" in %s on line %d
bool(false)
bool(true)
bool(false)
diff --git a/ext/spl/tests/bug67359.phpt b/ext/spl/tests/bug67359.phpt
index 3e8f30cd2b..3a867f1f87 100644
--- a/ext/spl/tests/bug67359.phpt
+++ b/ext/spl/tests/bug67359.phpt
@@ -4,20 +4,20 @@ Bug #67359 (Segfault in recursiveDirectoryIterator)
<?php
try
{
- $rdi = new recursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS);
- $it = new recursiveIteratorIterator( $rdi );
- $it->seek(1);
- while( $it->valid())
- {
- if( $it->isFile() )
- {
- $it->current();
- }
+ $rdi = new recursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS);
+ $it = new recursiveIteratorIterator( $rdi );
+ $it->seek(1);
+ while( $it->valid())
+ {
+ if( $it->isFile() )
+ {
+ $it->current();
+ }
- $it->next();
- }
+ $it->next();
+ }
- $it->current();
+ $it->current();
}
catch(Exception $e)
{
diff --git a/ext/spl/tests/bug67539.phpt b/ext/spl/tests/bug67539.phpt
index 8bab2a8c21..61f70cf459 100644
--- a/ext/spl/tests/bug67539.phpt
+++ b/ext/spl/tests/bug67539.phpt
@@ -6,10 +6,15 @@ Bug #67539 (ArrayIterator use-after-free due to object change during sorting)
$it = new ArrayIterator(array_fill(0,2,'X'), 1 );
function badsort($a, $b) {
+ try {
$GLOBALS['it']->unserialize($GLOBALS['it']->serialize());
- return TRUE;
+ } catch (Error $e) {
+ echo $e->getMessage(), "\n";
+ }
+ return 0;
}
$it->uksort('badsort');
---EXPECTF--
-Warning: Modification of ArrayObject during sorting is prohibited in %sbug67539.php on line %d
+?>
+--EXPECT--
+Modification of ArrayObject during sorting is prohibited
diff --git a/ext/spl/tests/bug67582.phpt b/ext/spl/tests/bug67582.phpt
index b22f615034..331accbe7e 100644
--- a/ext/spl/tests/bug67582.phpt
+++ b/ext/spl/tests/bug67582.phpt
@@ -4,8 +4,8 @@ Bug #67582: Cloned SplObjectStorage with overwritten getHash fails offsetExists(
<?php
class MyObjectStorage extends SplObjectStorage {
- // Overwrite getHash() with just some (working) test-method
- public function getHash($object) { return get_class($object); }
+ // Overwrite getHash() with just some (working) test-method
+ public function getHash($object) { return get_class($object); }
}
class TestObject {}
diff --git a/ext/spl/tests/bug68128.phpt b/ext/spl/tests/bug68128.phpt
index 5ac7f8b2fb..69d63a890a 100644
--- a/ext/spl/tests/bug68128.phpt
+++ b/ext/spl/tests/bug68128.phpt
@@ -21,13 +21,13 @@ foreach ($rRegexIterator as $key1 => $value1) {
// print all children
echo "Children: ";
foreach ($rRegexIterator->getChildren() as $key => $value) {
- print_r($value);
+ print_r($value);
}
echo "\n";
} else {
echo "No children ";
- print_r($value1);
- echo "\n";
+ print_r($value1);
+ echo "\n";
}
}
diff --git a/ext/spl/tests/bug68175.phpt b/ext/spl/tests/bug68175.phpt
index bba769b23b..109a2cee26 100644
--- a/ext/spl/tests/bug68175.phpt
+++ b/ext/spl/tests/bug68175.phpt
@@ -10,9 +10,7 @@ var_dump(
$regex->getPregFlags()
);
?>
-===DONE===
--EXPECT--
int(0)
int(0)
int(0)
-===DONE===
diff --git a/ext/spl/tests/bug68479.phpt b/ext/spl/tests/bug68479.phpt
index 5d2aacb346..e749d01120 100644
--- a/ext/spl/tests/bug68479.phpt
+++ b/ext/spl/tests/bug68479.phpt
@@ -8,7 +8,6 @@ $params = $method->getParameters();
var_dump($params);
?>
-===DONE===
--EXPECT--
array(4) {
[0]=>
@@ -19,7 +18,7 @@ array(4) {
[1]=>
object(ReflectionParameter)#3 (1) {
["name"]=>
- string(9) "delimiter"
+ string(9) "separator"
}
[2]=>
object(ReflectionParameter)#4 (1) {
@@ -32,4 +31,3 @@ array(4) {
string(6) "escape"
}
}
-===DONE===
diff --git a/ext/spl/tests/bug68825.phpt b/ext/spl/tests/bug68825.phpt
index eda2e01037..7524a4c6d3 100644
--- a/ext/spl/tests/bug68825.phpt
+++ b/ext/spl/tests/bug68825.phpt
@@ -24,10 +24,8 @@ foreach ($di as $entry) {
}
}
?>
-===DONE===
--EXPECTF--
string(%d) "%s%eext%espl%etests%ebug68825.php"
-===DONE===
--CLEAN--
<?php
$dir = __DIR__ . '/bug68825';
diff --git a/ext/spl/tests/bug69108.phpt b/ext/spl/tests/bug69108.phpt
index 1829e9b2a2..3122da599c 100644
--- a/ext/spl/tests/bug69108.phpt
+++ b/ext/spl/tests/bug69108.phpt
@@ -7,9 +7,9 @@ zend.enable_gc=1
$a = array();
$b = new SplObjectStorage();
for ($i = 10000; $i > 0; $i--) {
- $object = new StdClass();
- $a[] = $object;
- $b->attach($object);
+ $object = new StdClass();
+ $a[] = $object;
+ $b->attach($object);
}
$c = serialize(array($a, $b));
diff --git a/ext/spl/tests/bug69335.phpt b/ext/spl/tests/bug69335.phpt
index 3b065b6473..acd5588b3e 100644
--- a/ext/spl/tests/bug69335.phpt
+++ b/ext/spl/tests/bug69335.phpt
@@ -6,10 +6,10 @@ $a = array(1=>1, 3=>3, 5=>5, 7=>7);
$a = new ArrayObject($a);
foreach ($a as $k => $v) {
- var_dump("$k => $v");
- if ($k == 3) {
- $a['a'] = "?";
- }
+ var_dump("$k => $v");
+ if ($k == 3) {
+ $a['a'] = "?";
+ }
}
?>
--EXPECT--
diff --git a/ext/spl/tests/bug69845.phpt b/ext/spl/tests/bug69845.phpt
index db88a8e10d..09c9f2356d 100644
--- a/ext/spl/tests/bug69845.phpt
+++ b/ext/spl/tests/bug69845.phpt
@@ -3,9 +3,9 @@ Fixed bug #69845 (ArrayObject with ARRAY_AS_PROPS broken)
--FILE--
<?php
for ($i = 0; $i<2; $i++) {
- $data = new \ArrayObject(new stdClass(), ArrayObject::ARRAY_AS_PROPS);
- $data->itemType = 'bulletin';
- var_dump(!is_null($data['itemType']));
+ $data = new \ArrayObject(new stdClass(), ArrayObject::ARRAY_AS_PROPS);
+ $data->itemType = 'bulletin';
+ var_dump(!is_null($data['itemType']));
}
?>
--EXPECT--
diff --git a/ext/spl/tests/bug69970.phpt b/ext/spl/tests/bug69970.phpt
index a488037b8c..c82d0b58c6 100644
--- a/ext/spl/tests/bug69970.phpt
+++ b/ext/spl/tests/bug69970.phpt
@@ -10,12 +10,12 @@ class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator {
echo "dummy\n";
}
function endChildren() {
- global $count;
- echo $this->getDepth();
- if (--$count > 0) {
- // Trigger use-after-free
- parent::rewind();
- }
+ global $count;
+ echo $this->getDepth();
+ if (--$count > 0) {
+ // Trigger use-after-free
+ parent::rewind();
+ }
}
}
$arr = array("a", array("ba", array("bba", "bbb")));
diff --git a/ext/spl/tests/bug70068.phpt b/ext/spl/tests/bug70068.phpt
index dc949da8fa..54f3cca449 100644
--- a/ext/spl/tests/bug70068.phpt
+++ b/ext/spl/tests/bug70068.phpt
@@ -5,7 +5,7 @@ Bug #70068 (Dangling pointer in the unserialization of ArrayObject items)
try {
$a = unserialize('a:3:{i:0;C:11:"ArrayObject":20:{x:i:0;r:3;;m:a:0:{};}i:1;d:11;i:2;S:31:"AAAAAAAABBBBCCCC\01\00\00\00\04\00\00\00\00\00\00\00\00\00\00";}');
} catch(Exception $e) {
- print $e->getMessage()."\n";
+ print $e->getMessage()."\n";
}
?>
OK
diff --git a/ext/spl/tests/bug70166.phpt b/ext/spl/tests/bug70166.phpt
index 51a35965a5..a990a33a6a 100644
--- a/ext/spl/tests/bug70166.phpt
+++ b/ext/spl/tests/bug70166.phpt
@@ -13,7 +13,6 @@ for($i = 0; $i < 5; $i++) {
var_dump($data);
?>
-===DONE===
--EXPECTF--
array(2) {
[0]=>
@@ -26,4 +25,3 @@ array(2) {
array(0) {
}
}
-===DONE===
diff --git a/ext/spl/tests/bug70168.phpt b/ext/spl/tests/bug70168.phpt
index e1f7e9f820..d0cfc50e20 100644
--- a/ext/spl/tests/bug70168.phpt
+++ b/ext/spl/tests/bug70168.phpt
@@ -13,7 +13,6 @@ for($i = 0; $i < 5; $i++) {
var_dump($data);
?>
-===DONE===
--EXPECTF--
array(2) {
[0]=>
@@ -33,4 +32,3 @@ array(2) {
[1]=>
int(1)
}
-===DONE===
diff --git a/ext/spl/tests/bug70169.phpt b/ext/spl/tests/bug70169.phpt
index 9d814be5fa..418b4f4d0a 100644
--- a/ext/spl/tests/bug70169.phpt
+++ b/ext/spl/tests/bug70169.phpt
@@ -13,7 +13,6 @@ for($i = 0; $i < 5; $i++) {
var_dump($data);
?>
-===DONE===
--EXPECTF--
array(2) {
[0]=>
@@ -27,4 +26,3 @@ array(2) {
[1]=>
int(1)
}
-===DONE===
diff --git a/ext/spl/tests/bug70365.phpt b/ext/spl/tests/bug70365.phpt
index c18110e3ca..55ff58c9e9 100644
--- a/ext/spl/tests/bug70365.phpt
+++ b/ext/spl/tests/bug70365.phpt
@@ -3,10 +3,10 @@ SPL: Bug #70365 use-after-free vulnerability in unserialize() with SplObjectStor
--FILE--
<?php
class obj {
- var $ryat;
- function __wakeup() {
- $this->ryat = 1;
- }
+ var $ryat;
+ function __wakeup() {
+ $this->ryat = 1;
+ }
}
$fakezval = ptr2str(1122334455);
@@ -25,13 +25,14 @@ var_dump($data);
function ptr2str($ptr)
{
- $out = '';
- for ($i = 0; $i < 8; $i++) {
- $out .= chr($ptr & 0xff);
- $ptr >>= 8;
- }
- return $out;
+ $out = '';
+ for ($i = 0; $i < 8; $i++) {
+ $out .= chr($ptr & 0xff);
+ $ptr >>= 8;
+ }
+ return $out;
}
+?>
--EXPECTF--
array(5) {
[0]=>
diff --git a/ext/spl/tests/bug70366.phpt b/ext/spl/tests/bug70366.phpt
index da4cc2d389..d3d3317bff 100644
--- a/ext/spl/tests/bug70366.phpt
+++ b/ext/spl/tests/bug70366.phpt
@@ -3,10 +3,10 @@ SPL: Bug #70366 use-after-free vulnerability in unserialize() with SplDoublyLink
--FILE--
<?php
class obj {
- var $ryat;
- function __wakeup() {
- $this->ryat = 1;
- }
+ var $ryat;
+ function __wakeup() {
+ $this->ryat = 1;
+ }
}
$fakezval = ptr2str(1122334455);
@@ -25,12 +25,12 @@ var_dump($data);
function ptr2str($ptr)
{
- $out = '';
- for ($i = 0; $i < 8; $i++) {
- $out .= chr($ptr & 0xff);
- $ptr >>= 8;
- }
- return $out;
+ $out = '';
+ for ($i = 0; $i < 8; $i++) {
+ $out .= chr($ptr & 0xff);
+ $ptr >>= 8;
+ }
+ return $out;
}
?>
--EXPECTF--
diff --git a/ext/spl/tests/bug70730.phpt b/ext/spl/tests/bug70730.phpt
index 5710c9586d..9d52238426 100644
--- a/ext/spl/tests/bug70730.phpt
+++ b/ext/spl/tests/bug70730.phpt
@@ -4,20 +4,20 @@ Bug #70730 (Incorrect ArrayObject serialization if unset is called in serialize(
<?php
class A extends \ArrayObject
{
- protected $foo;
+ protected $foo;
- public function __construct()
- {
- $this->foo = 'bar';
- }
+ public function __construct()
+ {
+ $this->foo = 'bar';
+ }
- public function serialize()
- {
- unset($this->foo);
- $result = parent::serialize();
- $this->foo = 'bar';
- return $result;
- }
+ public function serialize()
+ {
+ unset($this->foo);
+ $result = parent::serialize();
+ $this->foo = 'bar';
+ return $result;
+ }
}
$a = new A();
diff --git a/ext/spl/tests/bug70852.phpt b/ext/spl/tests/bug70852.phpt
index 2b23ce4e09..44168f9903 100644
--- a/ext/spl/tests/bug70852.phpt
+++ b/ext/spl/tests/bug70852.phpt
@@ -7,11 +7,9 @@ $y = new ArrayObject();
var_dump($y[NULL]);
var_dump($y[NULL]++);
?>
-===DONE===
--EXPECTF--
-Notice: Undefined index: in %s on line %d
+Warning: Undefined array key "" in %s on line %d
NULL
-Notice: Undefined index: in %s on line %d
+Warning: Undefined array key "" in %s on line %d
NULL
-===DONE===
diff --git a/ext/spl/tests/bug70959.phpt b/ext/spl/tests/bug70959.phpt
index 541807ae16..65bdbac997 100644
--- a/ext/spl/tests/bug70959.phpt
+++ b/ext/spl/tests/bug70959.phpt
@@ -3,15 +3,15 @@ Bug #70959 (ArrayObject unserialize does not restore protected fields)
--FILE--
<?php
class testObject extends ArrayObject {
- protected $test;
+ protected $test;
- public function getTest() {
- return $this->test;
- }
+ public function getTest() {
+ return $this->test;
+ }
- public function setTest($test) {
- $this->test = $test;
- }
+ public function setTest($test) {
+ $this->test = $test;
+ }
}
$obj = new testObject();
@@ -19,6 +19,7 @@ $obj->setTest('test');
var_dump($obj->getTest());
$obj2 = unserialize(serialize($obj));
var_dump($obj2->getTest());
+?>
--EXPECT--
string(4) "test"
string(4) "test"
diff --git a/ext/spl/tests/bug71028.phpt b/ext/spl/tests/bug71028.phpt
index b8f0cc962f..20aa4467e9 100644
--- a/ext/spl/tests/bug71028.phpt
+++ b/ext/spl/tests/bug71028.phpt
@@ -3,7 +3,7 @@ Bug #71028 (Undefined index with ArrayIterator)
--FILE--
<?php
function cast(&$a) {
- $a = (int)$a;
+ $a = (int)$a;
}
$a = new ArrayIterator;
diff --git a/ext/spl/tests/bug71202.phpt b/ext/spl/tests/bug71202.phpt
index d26d7e1f35..84c9b60944 100644
--- a/ext/spl/tests/bug71202.phpt
+++ b/ext/spl/tests/bug71202.phpt
@@ -4,34 +4,34 @@ Bug #71202 (Autoload function registered by another not activated immediately)
<?php
function inner_autoload ($name){
- if ($name == 'A') {
- class A {
- function __construct(){
- echo "okey, ";
- }
- }
- } else {
- class B {
- function __construct() {
- die("error");
- }
- }
- }
+ if ($name == 'A') {
+ class A {
+ function __construct(){
+ echo "okey, ";
+ }
+ }
+ } else {
+ class B {
+ function __construct() {
+ die("error");
+ }
+ }
+ }
}
spl_autoload_register(function ($name) {
- if ($name == 'A') {
- spl_autoload_register("inner_autoload");
- } else {
- spl_autoload_unregister("inner_autoload");
- }
+ if ($name == 'A') {
+ spl_autoload_register("inner_autoload");
+ } else {
+ spl_autoload_unregister("inner_autoload");
+ }
});
$c = new A();
try {
- $c = new B();
+ $c = new B();
} catch (Error $e) {
- echo "done";
+ echo "done";
}
?>
--EXPECT--
diff --git a/ext/spl/tests/bug71204.phpt b/ext/spl/tests/bug71204.phpt
index 64fa13bfb1..8d1c721c10 100644
--- a/ext/spl/tests/bug71204.phpt
+++ b/ext/spl/tests/bug71204.phpt
@@ -4,7 +4,7 @@ Bug #71204 (segfault if clean spl_autoload_funcs while autoloading )
<?php
spl_autoload_register(function ($name) {
- spl_autoload_unregister("spl_autoload_call");
+ spl_autoload_unregister("spl_autoload_call");
});
spl_autoload_register(function ($name) {
@@ -13,7 +13,7 @@ spl_autoload_register(function ($name) {
new A();
?>
--EXPECTF--
-Fatal error: Uncaught Error: Class 'A' not found in %sbug71204.php:%d
+Fatal error: Uncaught Error: Class "A" not found in %s:%d
Stack trace:
#0 {main}
thrown in %sbug71204.php on line %d
diff --git a/ext/spl/tests/bug71236.phpt b/ext/spl/tests/bug71236.phpt
new file mode 100644
index 0000000000..55c7cb88fe
--- /dev/null
+++ b/ext/spl/tests/bug71236.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #71236: Second call of spl_autoload_register() does nothing if it has no arguments
+--FILE--
+<?php
+
+spl_autoload_register(function ($class) {});
+spl_autoload_register();
+var_dump(spl_autoload_functions());
+
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ object(Closure)#1 (1) {
+ ["parameter"]=>
+ array(1) {
+ ["$class"]=>
+ string(10) "<required>"
+ }
+ }
+ [1]=>
+ string(12) "spl_autoload"
+}
diff --git a/ext/spl/tests/bug71412.phpt b/ext/spl/tests/bug71412.phpt
index 7857f27ace..e6623dd2fc 100644
--- a/ext/spl/tests/bug71412.phpt
+++ b/ext/spl/tests/bug71412.phpt
@@ -8,7 +8,7 @@ echo (new ReflectionMethod('ArrayIterator', '__construct'));
Method [ <internal:SPL, ctor> public method __construct ] {
- Parameters [2] {
- Parameter #0 [ <optional> $array ]
- Parameter #1 [ <optional> $flags ]
+ Parameter #0 [ <optional> object|array $array = [] ]
+ Parameter #1 [ <optional> int $flags = 0 ]
}
}
diff --git a/ext/spl/tests/bug71617.phpt b/ext/spl/tests/bug71617.phpt
index 412f83f541..cc0c105a96 100644
--- a/ext/spl/tests/bug71617.phpt
+++ b/ext/spl/tests/bug71617.phpt
@@ -6,23 +6,23 @@ Bug #71617: private properties lost when unserializing ArrayObject
class Test extends ArrayObject
{
- private $name = null;
-
- public function __construct(array $input)
- {
- parent::__construct($input, ArrayObject::ARRAY_AS_PROPS);
- }
-
- public function setName($name)
- {
- $this->name = $name;
- return $this;
- }
-
- public function getName()
- {
- return $this->name;
- }
+ private $name = null;
+
+ public function __construct(array $input)
+ {
+ parent::__construct($input, ArrayObject::ARRAY_AS_PROPS);
+ }
+
+ public function setName($name)
+ {
+ $this->name = $name;
+ return $this;
+ }
+
+ public function getName()
+ {
+ return $this->name;
+ }
}
$test = new Test(['a' => 'a', 'b' => 'b']);
diff --git a/ext/spl/tests/bug71735.phpt b/ext/spl/tests/bug71735.phpt
index 1134b5d6dd..7063aaab5a 100644
--- a/ext/spl/tests/bug71735.phpt
+++ b/ext/spl/tests/bug71735.phpt
@@ -6,10 +6,8 @@ try {
$var_1=new SplStack();
$var_1->offsetSet(100,new DateTime('2000-01-01'));
} catch(OutOfRangeException $e) {
- print $e->getMessage()."\n";
+ print $e->getMessage()."\n";
}
?>
-===DONE===
--EXPECT--
-Offset invalid or out of range
-===DONE===
+SplDoublyLinkedList::offsetSet(): Argument #1 ($index) is out of range
diff --git a/ext/spl/tests/bug72051.phpt b/ext/spl/tests/bug72051.phpt
index 1dfc056d7e..42cc1ea833 100644
--- a/ext/spl/tests/bug72051.phpt
+++ b/ext/spl/tests/bug72051.phpt
@@ -4,12 +4,12 @@ Bug #72051 (The reference in CallbackFilterIterator doesn't work as expected)
<?php
$data = [
- [1,2]
+ [1,2]
];
$callbackTest = new CallbackFilterIterator(new ArrayIterator($data), function (&$current) {
- $current['message'] = 'Test message';
- return true;
+ $current['message'] = 'Test message';
+ return true;
});
$callbackTest->rewind();
@@ -17,10 +17,10 @@ $data = $callbackTest->current();
$callbackTest->next();
print_r($data);
?>
---EXPECT--
+--EXPECTF--
+Warning: {closure}(): Argument #1 ($current) must be passed by reference, value given in %s on line %d
Array
(
[0] => 1
[1] => 2
- [message] => Test message
)
diff --git a/ext/spl/tests/bug72684.phpt b/ext/spl/tests/bug72684.phpt
index 7a99901f53..06665efdaa 100644
--- a/ext/spl/tests/bug72684.phpt
+++ b/ext/spl/tests/bug72684.phpt
@@ -11,9 +11,9 @@ $appendIterator->append($generator);
iterator_to_array($appendIterator);
try {
- iterator_to_array($appendIterator);
+ iterator_to_array($appendIterator);
} catch (\Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
diff --git a/ext/spl/tests/bug72884.phpt b/ext/spl/tests/bug72884.phpt
index 178e0e1d70..83a536fd07 100644
--- a/ext/spl/tests/bug72884.phpt
+++ b/ext/spl/tests/bug72884.phpt
@@ -6,5 +6,6 @@ $x=new SplFileObject(__FILE__);
$r=new ReflectionObject($x);
var_dump($r->isCloneable());
+?>
--EXPECT--
bool(false)
diff --git a/ext/spl/tests/bug72888.phpt b/ext/spl/tests/bug72888.phpt
index d354490f88..5ca99a40a5 100644
--- a/ext/spl/tests/bug72888.phpt
+++ b/ext/spl/tests/bug72888.phpt
@@ -5,14 +5,14 @@ Bug #72888 (Segfault on clone on splFileObject)
$x = new SplFileObject(__FILE__);
try {
- $y=clone $x;
+ $y=clone $x;
} catch (Error $e) {
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
var_dump($y);
?>
--EXPECTF--
string(60) "Trying to clone an uncloneable object of class SplFileObject"
-Notice: Undefined variable: y in %sbug72888.php on line %d
+Warning: Undefined variable $y in %s on line %d
NULL
diff --git a/ext/spl/tests/bug73029.phpt b/ext/spl/tests/bug73029.phpt
index 8789e91df2..5c3cd8420d 100644
--- a/ext/spl/tests/bug73029.phpt
+++ b/ext/spl/tests/bug73029.phpt
@@ -7,7 +7,7 @@ $a = 'C:11:"ArrayObject":19:0x:i:0;r:2;;m:a:0:{}}';
$m = unserialize($a);
$x = $m[2];
} catch(UnexpectedValueException $e) {
- print $e->getMessage() . "\n";
+ print $e->getMessage() . "\n";
}
?>
DONE
diff --git a/ext/spl/tests/bug73423.phpt b/ext/spl/tests/bug73423.phpt
index 549ceabb8a..e1fc312651 100644
--- a/ext/spl/tests/bug73423.phpt
+++ b/ext/spl/tests/bug73423.phpt
@@ -48,7 +48,7 @@ class fooIterator extends \RecursiveFilterIterator
{
public Function __destruct ()
{
- eval("class A extends NotExists {}");
+ eval("class A extends NotExists {}");
/* CRASH */
}
@@ -68,13 +68,13 @@ foreach (new \RecursiveIteratorIterator (new fooIterator ($foo)) as $bar) ;
?>
--EXPECTF--
-Fatal error: Uncaught Error: Class 'NotExists' not found in %s:%d
+Fatal error: Uncaught Error: Class "NotExists" not found in %s:%d
Stack trace:
#0 %s(%d): eval()
#1 %s(%d): fooIterator->__destruct()
#2 {main}
-Next Error: Class 'NotExists' not found in %s:%d
+Next Error: Class "NotExists" not found in %s:%d
Stack trace:
#0 %s(%d): eval()
#1 %s(%d): fooIterator->__destruct()
diff --git a/ext/spl/tests/bug73629.phpt b/ext/spl/tests/bug73629.phpt
index 9ad0cec60f..f66c319ca1 100644
--- a/ext/spl/tests/bug73629.phpt
+++ b/ext/spl/tests/bug73629.phpt
@@ -14,7 +14,5 @@ try {
echo 'expected exception: ' . $e->getMessage() . "\n";
}
?>
-===DONE===
--EXPECT--
expected exception: Iterators' LIFO/FIFO modes for SplStack/SplQueue objects are frozen
-===DONE===
diff --git a/ext/spl/tests/bug73686.phpt b/ext/spl/tests/bug73686.phpt
index ae9a59c4aa..51858bc33c 100644
--- a/ext/spl/tests/bug73686.phpt
+++ b/ext/spl/tests/bug73686.phpt
@@ -7,8 +7,8 @@ $ao = new ArrayObject;
foreach ([1, 2, 3] as $i => $var)
{
- settype($var, 'string');
- $ao[$i] = $var;
+ settype($var, 'string');
+ $ao[$i] = $var;
}
var_dump($ao);
@@ -16,7 +16,7 @@ $ao = new ArrayObject;
foreach ([1, 2, 3] as $i => $var)
{
- $ao[$i] = &$var;
+ $ao[$i] = &$var;
}
var_dump($ao);
?>
diff --git a/ext/spl/tests/bug73896.phpt b/ext/spl/tests/bug73896.phpt
index 08d8f1e6c8..657f30c50d 100644
--- a/ext/spl/tests/bug73896.phpt
+++ b/ext/spl/tests/bug73896.phpt
@@ -18,7 +18,7 @@ class teLoader {
}
protected function autoload($class) {
- die("Protected autoload() called!\n");
+ die("Protected autoload() called!\n");
}
public function doSomething() {
@@ -29,10 +29,10 @@ class teLoader {
$teLoader = new teLoader();
try {
- new teChild();
+ new teChild();
} catch (Throwable $e) {
- echo "Exception: ", $e->getMessage() , "\n";
+ echo "Exception: ", $e->getMessage() , "\n";
}
?>
--EXPECT--
-Exception: Class 'teException' not found
+Exception: Class "teException" not found
diff --git a/ext/spl/tests/bug74372.phpt b/ext/spl/tests/bug74372.phpt
index 161238af0e..c2506009a5 100644
--- a/ext/spl/tests/bug74372.phpt
+++ b/ext/spl/tests/bug74372.phpt
@@ -14,4 +14,4 @@ new Foo;
?>
--EXPECTF--
-Parse error: syntax error, unexpected 'ha' (T_STRING) in %s on line %d
+Parse error: syntax error, unexpected identifier "ha" in %s on line %d
diff --git a/ext/spl/tests/bug74519.phpt b/ext/spl/tests/bug74519.phpt
index 6492997b1a..5a2b958d01 100644
--- a/ext/spl/tests/bug74519.phpt
+++ b/ext/spl/tests/bug74519.phpt
@@ -10,14 +10,12 @@ $iterator->append($events);
$events->next();
while($iterator->valid()) {
- echo $iterator->current(), "\n";
- $iterator->next();
+ echo $iterator->current(), "\n";
+ $iterator->next();
}
?>
-===DONE===
--EXPECT--
2
3
4
5
-===DONE===
diff --git a/ext/spl/tests/bug74669.phpt b/ext/spl/tests/bug74669.phpt
index 6b4ceec65c..98e9c88672 100644
--- a/ext/spl/tests/bug74669.phpt
+++ b/ext/spl/tests/bug74669.phpt
@@ -98,7 +98,7 @@ var_dump($selfArray['foo']);
0 => test1
1 => test2
-Notice: Undefined index: foo in %s on line %d
+Warning: Undefined array key "foo" in %s on line %d
NULL
object(SelfArray)#9 (1) {
["foo"]=>
diff --git a/ext/spl/tests/bug75049.phpt b/ext/spl/tests/bug75049.phpt
index eafdb84541..85e3ef12ca 100644
--- a/ext/spl/tests/bug75049.phpt
+++ b/ext/spl/tests/bug75049.phpt
@@ -9,8 +9,9 @@ echo (int)spl_autoload_register($autoloader);
echo (int)spl_autoload_unregister($autoloader);
echo (int)spl_autoload_register($autoloader);
foreach (spl_autoload_functions() as $loader) {
- echo (int)spl_autoload_unregister($loader);
+ echo (int)spl_autoload_unregister($loader);
}
echo (int)count(spl_autoload_functions());
+?>
--EXPECT--
11110
diff --git a/ext/spl/tests/bug75173.phpt b/ext/spl/tests/bug75173.phpt
index fa5d2ac371..f4374744ee 100644
--- a/ext/spl/tests/bug75173.phpt
+++ b/ext/spl/tests/bug75173.phpt
@@ -13,6 +13,7 @@ foreach ($it as $item) {
$it->append(new ArrayIterator(['bar']));
}
}
+?>
--EXPECT--
string(3) "foo"
string(3) "bar"
diff --git a/ext/spl/tests/bug75717.phpt b/ext/spl/tests/bug75717.phpt
index 485b9d8bc4..77226e1099 100644
--- a/ext/spl/tests/bug75717.phpt
+++ b/ext/spl/tests/bug75717.phpt
@@ -8,7 +8,7 @@ function flatten(array $nestedArraysAndStrings){
$iter = new RecursiveIteratorIterator(
new RecursiveArrayIterator($nestedArraysAndStrings));
foreach($iter as $leaf){ $flat[] = $leaf; }
- return join(NULL, $flat);
+ return join(null, $flat);
}
$noRefs = [[[['some']]],[' nested '],"items"];
diff --git a/ext/spl/tests/bug76367.phpt b/ext/spl/tests/bug76367.phpt
index 38aefbc922..7e9d7e66ba 100644
--- a/ext/spl/tests/bug76367.phpt
+++ b/ext/spl/tests/bug76367.phpt
@@ -7,7 +7,7 @@ $arr = [1,3,55,66,43,6];
$iter = new NoRewindIterator(new ArrayIterator($arr));
while($iter->valid()) {
- $iter->next();
+ $iter->next();
}
var_dump($iter->current());
diff --git a/ext/spl/tests/bug77298.phpt b/ext/spl/tests/bug77298.phpt
index 0b24cfff48..bf0c440859 100644
--- a/ext/spl/tests/bug77298.phpt
+++ b/ext/spl/tests/bug77298.phpt
@@ -11,6 +11,7 @@ $o3 = new ArrayObject();
$o3->unserialize($o->serialize());
$o3['xm']=456;
var_dump($o3);
+?>
--EXPECT--
object(ArrayObject)#2 (1) {
["storage":"ArrayObject":private]=>
diff --git a/ext/spl/tests/bug77431.phpt b/ext/spl/tests/bug77431.phpt
index eb1ca96b75..2d14d082ec 100644
--- a/ext/spl/tests/bug77431.phpt
+++ b/ext/spl/tests/bug77431.phpt
@@ -5,5 +5,8 @@ Bug #77431 (SplFileInfo::__construct() accepts NUL bytes)
new SplFileInfo("bad\0good");
?>
--EXPECTF--
-Fatal error: Uncaught TypeError: SplFileInfo::__construct() expects parameter 1 to be a valid path, string given in %s:%d
-Stack trace:%A \ No newline at end of file
+Fatal error: Uncaught ValueError: SplFileInfo::__construct(): Argument #1 ($filename) must not contain any null bytes in %s:%d
+Stack trace:
+#0 %s(%d): SplFileInfo->__construct('bad\x00good')
+#1 {main}
+ thrown in %s on line %d
diff --git a/ext/spl/tests/bug78863.phpt b/ext/spl/tests/bug78863.phpt
index dc88d98dee..100d5c0c58 100644
--- a/ext/spl/tests/bug78863.phpt
+++ b/ext/spl/tests/bug78863.phpt
@@ -16,7 +16,7 @@ foreach ($it as $fileinfo) {
}
?>
--EXPECTF--
-Fatal error: Uncaught UnexpectedValueException: DirectoryIterator::__construct() expects parameter 1 to be a valid path, string given in %s:%d
+Fatal error: Uncaught ValueError: DirectoryIterator::__construct(): Argument #1 ($directory) must not contain any null bytes in %s:%d
Stack trace:
#0 %s(%d): DirectoryIterator->__construct('%s')
#1 {main}
diff --git a/ext/spl/tests/bug79432.phpt b/ext/spl/tests/bug79432.phpt
new file mode 100644
index 0000000000..1230340e99
--- /dev/null
+++ b/ext/spl/tests/bug79432.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #79432 (spl_autoload_call() with non-string argument violates assertion)
+--FILE--
+<?php
+
+try {
+ spl_autoload_call([]);
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+spl_autoload_call(): Argument #1 ($class) must be of type string, array given
diff --git a/ext/spl/tests/bug79710.phpt b/ext/spl/tests/bug79710.phpt
index a5c065fd67..8bfaddb0f8 100644
--- a/ext/spl/tests/bug79710.phpt
+++ b/ext/spl/tests/bug79710.phpt
@@ -32,7 +32,7 @@ Run::main();
?>
--EXPECTF--
-Fatal error: Uncaught RuntimeException: Object not initialized in %s:%d
+Fatal error: Uncaught Error: Object not initialized in %s:%d
Stack trace:
#0 %s(%d): SplFileObject->flock(2)
#1 [internal function]: Target->__destruct()
diff --git a/ext/spl/tests/bug79987.phpt b/ext/spl/tests/bug79987.phpt
new file mode 100644
index 0000000000..b6ea8e2a9c
--- /dev/null
+++ b/ext/spl/tests/bug79987.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Bug #79987 (Memory leak in SplFileInfo because of missing zend_restore_error_handling())
+--FILE--
+<?php
+class BadSplFileInfo extends SplFileInfo {
+ public function __construct() {
+ }
+}
+$x = new BadSplFileInfo();
+set_error_handler(function ($type, $msg, $file, $line, $context = []) {
+ echo "ops\n";
+});
+try {
+ var_dump($x->getLinkTarget());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($x->getFilename());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($x->getExtension());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+try {
+ var_dump($x->getBasename());
+} catch (Throwable $e) {
+ echo $e->getMessage() . "\n";
+}
+?>
+--EXPECT--
+Object not initialized
+Object not initialized
+Object not initialized
+Object not initialized
diff --git a/ext/spl/tests/bug80719.phpt b/ext/spl/tests/bug80719.phpt
index 66d83fad91..506b250dae 100644
--- a/ext/spl/tests/bug80719.phpt
+++ b/ext/spl/tests/bug80719.phpt
@@ -4,12 +4,16 @@ Bug #80719: Iterating after failed ArrayObject::setIteratorClass() causes Segmen
<?php
$array = new ArrayObject([42]);
-$array->setIteratorClass(FilterIterator::class);
+try {
+ $array->setIteratorClass(FilterIterator::class);
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
foreach ($array as $v) {
var_dump($v);
}
?>
---EXPECTF--
-Warning: ArrayObject::setIteratorClass() expects parameter 1 to be a class name derived from ArrayIterator, 'FilterIterator' given in %s on line %d
+--EXPECT--
+ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, FilterIterator given
int(42)
diff --git a/ext/spl/tests/class_implements_basic.phpt b/ext/spl/tests/class_implements_basic.phpt
index 986b81e8bc..0a51251588 100644
--- a/ext/spl/tests/class_implements_basic.phpt
+++ b/ext/spl/tests/class_implements_basic.phpt
@@ -2,12 +2,6 @@
SPL: Test class_implements() function : basic
--FILE--
<?php
-/* Prototype : array class_implements(mixed what [, bool autoload ])
- * Description: Return all classes and interfaces implemented by SPL
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_implements() : basic ***\n";
@@ -19,7 +13,6 @@ var_dump(class_implements('bar'));
?>
-===DONE===
--EXPECT--
*** Testing class_implements() : basic ***
array(1) {
@@ -30,4 +23,3 @@ array(1) {
["foo"]=>
string(3) "foo"
}
-===DONE===
diff --git a/ext/spl/tests/class_implements_basic2.phpt b/ext/spl/tests/class_implements_basic2.phpt
index 6eb3af4556..d0dbb37ba9 100644
--- a/ext/spl/tests/class_implements_basic2.phpt
+++ b/ext/spl/tests/class_implements_basic2.phpt
@@ -2,12 +2,6 @@
SPL: Test class_implements() function : basic
--FILE--
<?php
-/* Prototype : array class_implements(mixed what [, bool autoload ])
- * Description: Return all classes and interfaces implemented by SPL
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_implements() : basic ***\n";
@@ -36,7 +30,6 @@ function s_var_dump($arr) {
var_dump($arr);
}
?>
-===DONE===
--EXPECT--
*** Testing class_implements() : basic ***
array(2) {
@@ -71,4 +64,3 @@ array(1) {
["foo"]=>
string(3) "foo"
}
-===DONE===
diff --git a/ext/spl/tests/class_implements_variation.phpt b/ext/spl/tests/class_implements_variation.phpt
index 7498a14559..9c7f07231e 100644
--- a/ext/spl/tests/class_implements_variation.phpt
+++ b/ext/spl/tests/class_implements_variation.phpt
@@ -2,12 +2,6 @@
SPL: Test class_implements() function : variation - no interfaces and autoload
--FILE--
<?php
-/* Prototype : array class_implements(mixed what [, bool autoload ])
- * Description: Return all classes and interfaces implemented by SPL
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_implements() : variation ***\n";
echo "--- testing no interfaces ---\n";
@@ -24,7 +18,6 @@ var_dump(class_implements('non_existent'));
var_dump(class_implements('non_existent2', false));
?>
-===DONE===
--EXPECTF--
*** Testing class_implements() : variation ***
--- testing no interfaces ---
@@ -41,4 +34,3 @@ bool(false)
Warning: class_implements(): Class non_existent2 does not exist in %s on line %d
bool(false)
-===DONE===
diff --git a/ext/spl/tests/class_implements_variation1.phpt b/ext/spl/tests/class_implements_variation1.phpt
index 9d876d3a36..2843745171 100644
--- a/ext/spl/tests/class_implements_variation1.phpt
+++ b/ext/spl/tests/class_implements_variation1.phpt
@@ -2,21 +2,15 @@
SPL: Test class_implements() function : variation
--FILE--
<?php
-/* Prototype : array class_implements(mixed what [, bool autoload ])
- * Description: Return all classes and interfaces implemented by SPL
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_implements() : variation ***\n";
// Define error handler
-function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
- if (error_reporting() != 0) {
- // report non-silenced errors
- echo "Error: $err_no - $err_msg, $filename($linenum)\n";
- }
+function test_error_handler($err_no, $err_msg, $filename, $linenum) {
+ if (error_reporting() & $err_no) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
}
set_error_handler('test_error_handler');
@@ -33,9 +27,9 @@ unset ($unset_var);
// define some classes
class classWithToString
{
- public function __toString() {
- return "Class A object";
- }
+ public function __toString() {
+ return "Class A object";
+ }
}
class classWithoutToString
@@ -105,91 +99,75 @@ $inputs = array(
foreach($inputs as $key =>$value) {
echo "\n--$key--\n";
- var_dump( class_implements($value, $autoload) );
+ try {
+ var_dump( class_implements($value, $autoload) );
+ } catch (\TypeError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
};
fclose($res);
?>
-===DONE===
--EXPECTF--
*** Testing class_implements() : variation ***
--int 0--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, int given
--int 1--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, int given
--int 12345--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, int given
--int -12345--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, int given
--float 10.5--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, float given
--float -10.5--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, float given
--float 12.3456789000e10--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, float given
--float -12.3456789000e10--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, float given
--float .5--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, float given
--empty array--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, array given
--int indexed array--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, array given
--associative array--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, array given
--nested arrays--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, array given
--uppercase NULL--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, null given
--lowercase null--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, null given
--lowercase true--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, bool given
--lowercase false--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, bool given
--uppercase TRUE--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, bool given
--uppercase FALSE--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, bool given
--empty string DQ--
Error: 2 - class_implements(): Class does not exist and could not be loaded, %s(%d)
@@ -200,7 +178,9 @@ Error: 2 - class_implements(): Class does not exist and could not be loaded, %s
bool(false)
--instance of classWithToString--
-array(0) {
+array(1) {
+ ["Stringable"]=>
+ string(10) "Stringable"
}
--instance of classWithoutToString--
@@ -208,14 +188,10 @@ array(0) {
}
--undefined var--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, null given
--unset var--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, null given
--resource--
-Error: 2 - class_implements(): object or string expected, %s(%d)
-bool(false)
-===DONE===
+class_implements(): Argument #1 ($object_or_class) must be of type object|string, resource given
diff --git a/ext/spl/tests/class_uses_basic.phpt b/ext/spl/tests/class_uses_basic.phpt
index 8cad9cab07..c981c5a925 100644
--- a/ext/spl/tests/class_uses_basic.phpt
+++ b/ext/spl/tests/class_uses_basic.phpt
@@ -2,12 +2,6 @@
SPL: Test class_implements() function : basic
--FILE--
<?php
-/* Prototype : array class_uses(mixed what [, bool autoload ])
- * Description: Return all traits used by a class
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_uses() : basic ***\n";
@@ -19,7 +13,6 @@ var_dump(class_uses('bar'));
?>
-===DONE===
--EXPECT--
*** Testing class_uses() : basic ***
array(1) {
@@ -30,4 +23,3 @@ array(1) {
["foo"]=>
string(3) "foo"
}
-===DONE===
diff --git a/ext/spl/tests/class_uses_basic2.phpt b/ext/spl/tests/class_uses_basic2.phpt
index be4bfa08d0..ff7761fcd5 100644
--- a/ext/spl/tests/class_uses_basic2.phpt
+++ b/ext/spl/tests/class_uses_basic2.phpt
@@ -2,12 +2,6 @@
SPL: Test class_uses() function : basic
--FILE--
<?php
-/* Prototype : array class_uses(mixed what [, bool autoload ])
- * Description: Return all traits used by a class
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_uses() : basic ***\n";
@@ -20,7 +14,7 @@ class barUser { use bar; }
class foobarUser { use foo, bar; }
/** There is no semantics for traits in the inheritance chain.
- Traits are flattend into a class, and that semantics is nothing
+ Traits are flattened into a class, and that semantics is nothing
like a type, or interface, and thus, not propergated. */
class fooViaBarUser extends barUser { use foo; }
@@ -39,7 +33,6 @@ function s_var_dump($arr) {
var_dump($arr);
}
?>
-===DONE===
--EXPECT--
*** Testing class_uses() : basic ***
array(2) {
@@ -66,4 +59,3 @@ array(0) {
}
array(0) {
}
-===DONE===
diff --git a/ext/spl/tests/class_uses_variation.phpt b/ext/spl/tests/class_uses_variation.phpt
index 5df38cc2a4..625e05b8da 100644
--- a/ext/spl/tests/class_uses_variation.phpt
+++ b/ext/spl/tests/class_uses_variation.phpt
@@ -2,12 +2,6 @@
SPL: Test class_uses() function : variation - no interfaces and autoload
--FILE--
<?php
-/* Prototype : array class_uses(mixed what [, bool autoload ])
- * Description: Return all traits used by a class
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_uses() : variation ***\n";
echo "--- testing no traits ---\n";
@@ -24,7 +18,6 @@ var_dump(class_uses('non_existent'));
var_dump(class_uses('non_existent2', false));
?>
-===DONE===
--EXPECTF--
*** Testing class_uses() : variation ***
--- testing no traits ---
@@ -41,4 +34,3 @@ bool(false)
Warning: class_uses(): Class non_existent2 does not exist in %s on line %d
bool(false)
-===DONE===
diff --git a/ext/spl/tests/class_uses_variation1.phpt b/ext/spl/tests/class_uses_variation1.phpt
index be6aa9ac7f..da26b26301 100644
--- a/ext/spl/tests/class_uses_variation1.phpt
+++ b/ext/spl/tests/class_uses_variation1.phpt
@@ -2,21 +2,15 @@
SPL: Test class_uses() function : variation
--FILE--
<?php
-/* Prototype : array class_uses(mixed what [, bool autoload ])
- * Description: Return all traits used by a class
- * Source code: ext/spl/php_spl.c
- * Alias to functions:
- */
-
echo "*** Testing class_uses() : variation ***\n";
// Define error handler
-function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) {
- if (error_reporting() != 0) {
- // report non-silenced errors
- echo "Error: $err_no - $err_msg, $filename($linenum)\n";
- }
+function test_error_handler($err_no, $err_msg, $filename, $linenum) {
+ if (error_reporting() & $err_no) {
+ // report non-silenced errors
+ echo "Error: $err_no - $err_msg, $filename($linenum)\n";
+ }
}
set_error_handler('test_error_handler');
@@ -33,9 +27,9 @@ unset ($unset_var);
// define some classes
class classWithToString
{
- public function __toString() {
- return "Class A object";
- }
+ public function __toString() {
+ return "Class A object";
+ }
}
class classWithoutToString
@@ -105,91 +99,75 @@ $inputs = array(
foreach($inputs as $key =>$value) {
echo "\n--$key--\n";
- var_dump( class_uses($value, $autoload) );
+ try {
+ var_dump( class_uses($value, $autoload) );
+ } catch (\TypeError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
};
fclose($res);
?>
-===DONE===
--EXPECTF--
*** Testing class_uses() : variation ***
--int 0--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, int given
--int 1--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, int given
--int 12345--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, int given
--int -12345--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, int given
--float 10.5--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, float given
--float -10.5--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, float given
--float 12.3456789000e10--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, float given
--float -12.3456789000e10--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, float given
--float .5--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, float given
--empty array--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, array given
--int indexed array--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, array given
--associative array--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, array given
--nested arrays--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, array given
--uppercase NULL--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, null given
--lowercase null--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, null given
--lowercase true--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, bool given
--lowercase false--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, bool given
--uppercase TRUE--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, bool given
--uppercase FALSE--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, bool given
--empty string DQ--
Error: 2 - class_uses(): Class does not exist and could not be loaded, %s(%d)
@@ -208,14 +186,10 @@ array(0) {
}
--undefined var--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, null given
--unset var--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, null given
--resource--
-Error: 2 - class_uses(): object or string expected, %s(%d)
-bool(false)
-===DONE===
+class_uses(): Argument #1 ($object_or_class) must be of type object|string, resource given
diff --git a/ext/spl/tests/countable_count_variation1.phpt b/ext/spl/tests/countable_count_variation1.phpt
index 0a99399329..0e17eccbe6 100644
--- a/ext/spl/tests/countable_count_variation1.phpt
+++ b/ext/spl/tests/countable_count_variation1.phpt
@@ -4,32 +4,32 @@ SPL: Countable::count() with wrong return types and exception.
<?php
Class returnNull implements Countable {
- function count() {
- }
+ function count() {
+ }
}
Class returnString implements Countable {
- function count() {
- return "hello";
- }
+ function count() {
+ return "hello";
+ }
}
Class returnObject implements Countable {
- function count() {
- return new returnObject;
- }
+ function count() {
+ return new returnObject;
+ }
}
Class returnArray implements Countable {
- function count() {
- return array(1,2,3);
- }
+ function count() {
+ return array(1,2,3);
+ }
}
Class throwException implements Countable {
- function count() {
- throw new Exception('Thrown from count');
- }
+ function count() {
+ throw new Exception('Thrown from count');
+ }
}
@@ -47,9 +47,9 @@ var_dump(count(new returnArray));
echo "Count throws an exception:\n";
try {
- echo count(new throwException);
+ echo count(new throwException);
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
@@ -60,7 +60,7 @@ Count returns a string:
int(0)
Count returns an object:
-Notice: Object of class returnObject could not be converted to int in %s on line 40
+Warning: Object of class returnObject could not be converted to int in %s on line %d
int(1)
Count returns an array:
int(1)
diff --git a/ext/spl/tests/dit_001.phpt b/ext/spl/tests/dit_001.phpt
index a56166def0..6d21abbf49 100644
--- a/ext/spl/tests/dit_001.phpt
+++ b/ext/spl/tests/dit_001.phpt
@@ -11,7 +11,6 @@ var_dump(is_string($d));
preg_match('/x/', $d);
var_dump(is_string($d));
?>
-===DONE===
--EXPECTF--
object(DirectoryIterator)#%d (4) {
%s"pathName"%s"SplFileInfo":private]=>
@@ -25,4 +24,3 @@ object(DirectoryIterator)#%d (4) {
}
bool(false)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/dit_001_noglob.phpt b/ext/spl/tests/dit_001_noglob.phpt
index 00deac36b8..a1996ef85e 100644
--- a/ext/spl/tests/dit_001_noglob.phpt
+++ b/ext/spl/tests/dit_001_noglob.phpt
@@ -11,7 +11,6 @@ var_dump(is_string($d));
preg_match('/x/', $d);
var_dump(is_string($d));
?>
-===DONE===
--EXPECTF--
object(DirectoryIterator)#%d (3) {
%s"pathName"%s"SplFileInfo":private]=>
@@ -23,4 +22,3 @@ object(DirectoryIterator)#%d (3) {
}
bool(false)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/dit_002.phpt b/ext/spl/tests/dit_002.phpt
index f4cd3ab058..f456101ed2 100644
--- a/ext/spl/tests/dit_002.phpt
+++ b/ext/spl/tests/dit_002.phpt
@@ -6,44 +6,43 @@ SPL: DirectoryIterator defaults
<?php
$classes = array(
- 'DirectoryIterator' => 0,
- 'FilesystemIterator' => 1,
- 'RecursiveDirectoryIterator' => 1,
- 'GlobIterator' => 1,
+ 'DirectoryIterator' => 0,
+ 'FilesystemIterator' => 1,
+ 'RecursiveDirectoryIterator' => 1,
+ 'GlobIterator' => 1,
);
foreach ($classes as $class => $flags) {
- echo "===$class===\n";
- $ref = new ReflectionClass($class);
- $obj = $ref->newInstance('glob://*');
- echo get_class($obj->current()) . "\n";
- if ($flags)
- {
- var_dump($obj->getFlags());
- $flags = array(
- FilesystemIterator::CURRENT_AS_FILEINFO => 0,
- FilesystemIterator::CURRENT_AS_SELF => 0,
- FilesystemIterator::CURRENT_AS_PATHNAME => 1,
- );
- foreach($flags as $flag => $isstring) {
- $obj->setFlags($flag);
- $obj->rewind();
- var_dump($obj->getFlags());
- if ($isstring) {
- $val = $obj->current();
- if (is_string($val)) {
- var_dump(true);
- } else {
- var_dump($val);
- }
- } else {
- echo get_class($obj->current()) . "\n";
- }
- }
- }
+ echo "===$class===\n";
+ $ref = new ReflectionClass($class);
+ $obj = $ref->newInstance('glob://*');
+ echo get_class($obj->current()) . "\n";
+ if ($flags)
+ {
+ var_dump($obj->getFlags());
+ $flags = array(
+ FilesystemIterator::CURRENT_AS_FILEINFO => 0,
+ FilesystemIterator::CURRENT_AS_SELF => 0,
+ FilesystemIterator::CURRENT_AS_PATHNAME => 1,
+ );
+ foreach($flags as $flag => $isstring) {
+ $obj->setFlags($flag);
+ $obj->rewind();
+ var_dump($obj->getFlags());
+ if ($isstring) {
+ $val = $obj->current();
+ if (is_string($val)) {
+ var_dump(true);
+ } else {
+ var_dump($val);
+ }
+ } else {
+ echo get_class($obj->current()) . "\n";
+ }
+ }
+ }
}
?>
-===DONE===
--EXPECTF--
===DirectoryIterator===
DirectoryIterator
@@ -74,4 +73,3 @@ int(16)
GlobIterator
int(32)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/dit_003.phpt b/ext/spl/tests/dit_003.phpt
index 507ed49f0e..f943075878 100644
--- a/ext/spl/tests/dit_003.phpt
+++ b/ext/spl/tests/dit_003.phpt
@@ -5,11 +5,9 @@ SPL: FilesystemIterator and foreach
$count = 0;
foreach(new FilesystemIterator(__DIR__) as $ent)
{
- ++$count;
+ ++$count;
}
var_dump($count > 0);
?>
-===DONE===
--EXPECT--
bool(true)
-===DONE===
diff --git a/ext/spl/tests/dit_004.phpt b/ext/spl/tests/dit_004.phpt
index d9f1912283..c54d4bf3c0 100644
--- a/ext/spl/tests/dit_004.phpt
+++ b/ext/spl/tests/dit_004.phpt
@@ -2,7 +2,13 @@
SPL: DirectoryIterator and clone
--FILE--
<?php
-$a = new DirectoryIterator(__DIR__);
+
+@mkdir($dir = __DIR__ . '/dit_004');
+touch($dir . '/file1');
+touch($dir . '/file2');
+touch($dir . '/file3');
+
+$a = new DirectoryIterator($dir);
$b = clone $a;
var_dump((string)$b == (string)$a);
var_dump($a->key(), $b->key());
@@ -13,7 +19,14 @@ $c = clone $a;
var_dump((string)$c == (string)$a);
var_dump($a->key(), $c->key());
?>
-===DONE===
+--CLEAN--
+<?php
+$dir = __DIR__ . '/dit_004';
+unlink($dir . '/file1');
+unlink($dir . '/file2');
+unlink($dir . '/file3');
+rmdir($dir);
+?>
--EXPECT--
bool(true)
int(0)
@@ -21,4 +34,3 @@ int(0)
bool(true)
int(3)
int(3)
-===DONE===
diff --git a/ext/spl/tests/dit_005.phpt b/ext/spl/tests/dit_005.phpt
index 942a58d4ae..ebdc56e031 100644
--- a/ext/spl/tests/dit_005.phpt
+++ b/ext/spl/tests/dit_005.phpt
@@ -14,10 +14,8 @@ $c = clone $a;
var_dump((string)$c == (string)$a);
var_dump($a->key() == $c->key());
?>
-===DONE===
--EXPECT--
bool(true)
bool(true)
bool(true)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/dit_006.phpt b/ext/spl/tests/dit_006.phpt
index ed1ceffc05..42a2309c99 100644
--- a/ext/spl/tests/dit_006.phpt
+++ b/ext/spl/tests/dit_006.phpt
@@ -40,7 +40,6 @@ try {
var_dump($n !== $m, $m === $o, $p === 0);
?>
-===DONE===
--EXPECTF--
With seek(2) we get %d
With seek(0) we get %d
@@ -49,4 +48,3 @@ Seek position %d is out of range
bool(true)
bool(true)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/dllist_001.phpt b/ext/spl/tests/dllist_001.phpt
index 4a18cf2322..e6ac2468af 100644
--- a/ext/spl/tests/dllist_001.phpt
+++ b/ext/spl/tests/dllist_001.phpt
@@ -46,8 +46,6 @@ $dll_clone = clone $dll;
$dll_clone->pop();
echo count($dll)."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Exception: Can't pop from an empty datastructure
Exception: Can't shift from an empty datastructure
@@ -60,4 +58,3 @@ Exception: Can't shift from an empty datastructure
NULL
NULL
1
-===DONE===
diff --git a/ext/spl/tests/dllist_002.phpt b/ext/spl/tests/dllist_002.phpt
index e1287718de..61836ac889 100644
--- a/ext/spl/tests/dllist_002.phpt
+++ b/ext/spl/tests/dllist_002.phpt
@@ -33,8 +33,6 @@ foreach($dll2 as $k=>$v) {
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
0=>2
->0=>2
@@ -57,4 +55,3 @@ foreach($dll2 as $k=>$v) {
popped 4
1=>3
popped 3
-===DONE===
diff --git a/ext/spl/tests/dllist_003.phpt b/ext/spl/tests/dllist_003.phpt
index 53dd7cb752..0eff4aa036 100644
--- a/ext/spl/tests/dllist_003.phpt
+++ b/ext/spl/tests/dllist_003.phpt
@@ -26,8 +26,6 @@ foreach ($dll as $k => $v) {
var_dump($dll->count());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
2=>4
1=>3
@@ -40,4 +38,3 @@ int(3)
0=>3
0=>4
int(0)
-===DONE===
diff --git a/ext/spl/tests/dllist_004.phpt b/ext/spl/tests/dllist_004.phpt
index 0a74d59892..8ac028ebf8 100644
--- a/ext/spl/tests/dllist_004.phpt
+++ b/ext/spl/tests/dllist_004.phpt
@@ -44,8 +44,6 @@ $stack_clone = clone $stack;
$stack_clone->pop();
echo count($stack)."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Exception: Can't pop from an empty datastructure
Exception: Can't shift from an empty datastructure
@@ -58,4 +56,3 @@ Exception: Can't shift from an empty datastructure
NULL
NULL
3
-===DONE===
diff --git a/ext/spl/tests/dllist_005.phpt b/ext/spl/tests/dllist_005.phpt
index 2e2058f76a..805f81a68a 100644
--- a/ext/spl/tests/dllist_005.phpt
+++ b/ext/spl/tests/dllist_005.phpt
@@ -44,8 +44,6 @@ $queue_clone = clone $queue;
$queue_clone->dequeue();
echo count($queue)."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Exception: Can't shift from an empty datastructure
Exception: Can't shift from an empty datastructure
@@ -58,4 +56,3 @@ Exception: Can't shift from an empty datastructure
int(1)
int(2)
3
-===DONE===
diff --git a/ext/spl/tests/dllist_006.phpt b/ext/spl/tests/dllist_006.phpt
index d5590642ea..25b8bf3308 100644
--- a/ext/spl/tests/dllist_006.phpt
+++ b/ext/spl/tests/dllist_006.phpt
@@ -29,7 +29,7 @@ try {
try {
var_dump($a["a"]);
-} catch (OutOfRangeException $e) {
+} catch (TypeError $e) {
echo "Exception: ".$e->getMessage()."\n";
}
@@ -45,8 +45,6 @@ try {
echo "Exception: ".$e->getMessage()."\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(1)
int(2)
@@ -56,7 +54,6 @@ Unsetting..
int(3)
int(4)
int(2)
-Exception: Offset invalid or out of range
+Exception: SplDoublyLinkedList::offsetGet(): Argument #1 ($index) must be of type int, string given
int(1)
-Exception: Offset invalid or out of range
-===DONE===
+Exception: SplDoublyLinkedList::offsetGet(): Argument #1 ($index) is out of range
diff --git a/ext/spl/tests/dllist_007.phpt b/ext/spl/tests/dllist_007.phpt
index d15e064ac4..2ccadf99ca 100644
--- a/ext/spl/tests/dllist_007.phpt
+++ b/ext/spl/tests/dllist_007.phpt
@@ -12,8 +12,6 @@ while ($a->valid()) {
var_dump($a->current(), $a->next());
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(1)
NULL
@@ -21,4 +19,3 @@ int(2)
NULL
int(3)
NULL
-===DONE===
diff --git a/ext/spl/tests/dllist_008.phpt b/ext/spl/tests/dllist_008.phpt
index ab37d83afa..114b50c4f5 100644
--- a/ext/spl/tests/dllist_008.phpt
+++ b/ext/spl/tests/dllist_008.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: SplDoublyLinkedList with overriden count()
+SPL: SplDoublyLinkedList with overridden count()
--FILE--
<?php
$obj = new SplDoublyLinkedList();
diff --git a/ext/spl/tests/dllist_010.phpt b/ext/spl/tests/dllist_010.phpt
index 7e389559e2..7fd7e8993f 100644
--- a/ext/spl/tests/dllist_010.phpt
+++ b/ext/spl/tests/dllist_010.phpt
@@ -23,11 +23,9 @@ $dll->prev();
var_dump($dll->current());
?>
-===DONE===
--EXPECT--
NULL
int(1)
int(2)
int(4)
int(3)
-===DONE===
diff --git a/ext/spl/tests/dllist_011.phpt b/ext/spl/tests/dllist_011.phpt
index b9be872555..bd1b0d3161 100644
--- a/ext/spl/tests/dllist_011.phpt
+++ b/ext/spl/tests/dllist_011.phpt
@@ -7,7 +7,5 @@ $dll->rewind();
$dll->prev();
var_dump($dll->current());
?>
-===DONE===
--EXPECT--
NULL
-===DONE===
diff --git a/ext/spl/tests/dllist_012.phpt b/ext/spl/tests/dllist_012.phpt
index 4eec9bda3b..c9b9f2cf25 100644
--- a/ext/spl/tests/dllist_012.phpt
+++ b/ext/spl/tests/dllist_012.phpt
@@ -7,7 +7,6 @@ $a[] = $a;
var_dump($a);
?>
-===DONE===
--EXPECTF--
object(SplDoublyLinkedList)#%d (2) {
["flags":"SplDoublyLinkedList":private]=>
@@ -18,4 +17,3 @@ object(SplDoublyLinkedList)#%d (2) {
*RECURSION*
}
}
-===DONE===
diff --git a/ext/spl/tests/dllist_013.phpt b/ext/spl/tests/dllist_013.phpt
index b9a4ef7648..8bcc5e5884 100644
--- a/ext/spl/tests/dllist_013.phpt
+++ b/ext/spl/tests/dllist_013.phpt
@@ -5,9 +5,9 @@ SPL: DoublyLinkedList: insert operations
$dll = new SplDoublyLinkedList();
// errors
try {
- $dll->add(2,5);
+ $dll->add(2,5);
} catch (OutOfRangeException $e) {
- echo "Exception: ".$e->getMessage()."\n";
+ echo "Exception: ".$e->getMessage()."\n";
}
$dll->add(0,6); // 6
@@ -30,10 +30,8 @@ echo $dll->pop()."\n";
echo $dll->pop()."\n";
echo $dll->pop()."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
-Exception: Offset invalid or out of range
+Exception: SplDoublyLinkedList::add(): Argument #1 ($index) is out of range
7
7
6
@@ -42,4 +40,3 @@ Exception: Offset invalid or out of range
3
2
1
-===DONE===
diff --git a/ext/spl/tests/dllist_memleak.phpt b/ext/spl/tests/dllist_memleak.phpt
index a52d2887d0..142206f0a7 100644
--- a/ext/spl/tests/dllist_memleak.phpt
+++ b/ext/spl/tests/dllist_memleak.phpt
@@ -16,9 +16,6 @@ $dll->next();
echo $dll->current()."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1
3
-===DONE===
diff --git a/ext/spl/tests/dualiterator.inc b/ext/spl/tests/dualiterator.inc
index eeb8ae869c..0830ebe644 100644
--- a/ext/spl/tests/dualiterator.inc
+++ b/ext/spl/tests/dualiterator.inc
@@ -16,195 +16,195 @@
*/
class DualIterator implements Iterator
{
- const CURRENT_LHS = 0x01;
- const CURRENT_RHS = 0x02;
- const CURRENT_ARRAY = 0x03;
- const CURRENT_0 = 0x00;
-
- const KEY_LHS = 0x10;
- const KEY_RHS = 0x20;
- const KEY_0 = 0x00;
-
- const DEFAULT_FLAGS = 0x13;
-
- private $lhs;
- private $rhs;
- private $flags;
-
- /** construct iterator from two iterators
- *
- * @param lhs Left Hand Side Iterator
- * @param rhs Right Hand Side Iterator
- * @param flags iteration flags
- */
- function __construct(Iterator $lhs, Iterator $rhs,
- $flags = 0x13 /*DualIterator::DEFAULT_FLAGS*/)
- {
- $this->lhs = $lhs;
- $this->rhs = $rhs;
- $this->flags = $flags;
- }
-
- /** @return Left Hand Side Iterator
- */
- function getLHS()
- {
- return $this->lhs;
- }
-
- /** @return Right Hand Side Iterator
- */
- function getRHS()
- {
- return $this->rhs;
- }
-
- /** @param flags new flags
- */
- function setFlags($flags)
- {
- $this->flags = $flags;
- }
-
- /** @return current flags
- */
- function getFlags()
- {
- return $this->flags;
- }
-
- /** rewind both inner iterators
- */
- function rewind()
- {
- $this->lhs->rewind();
- $this->rhs->rewind();
- }
-
- /** @return whether both inner iterators are valid
- */
- function valid()
- {
- return $this->lhs->valid() && $this->rhs->valid();
- }
-
- /** @return current value depending on CURRENT_* flags
- */
- function current()
- {
- switch($this->flags & 0x0F)
- {
- default:
- case self::CURRENT_ARRAY:
- return array($this->lhs->current(), $this->rhs->current());
- case self::CURRENT_LHS:
- return $this->lhs->current();
- case self::CURRENT_RHS:
- return $this->rhs->current();
- case self::CURRENT_0:
- return NULL;
- }
- }
-
- /** @return key value depending on KEY_* flags
- */
- function key()
- {
- switch($this->flags & 0xF0)
- {
- default:
- case self::KEY_LHS:
- return $this->lhs->key();
- case self::KEY_RHS:
- return $this->rhs->key();
- case self::KEY_0:
- return NULL;
- }
- }
-
- /** move both inner iterators forward
- */
- function next()
- {
- $this->lhs->next();
- $this->rhs->next();
- }
-
- /** @return whether both inner iterators are valid and have identical
- * current and key values or both are non valid.
- */
- function areIdentical()
- {
- return $this->valid()
- ? $this->lhs->current() === $this->rhs->current()
- && $this->lhs->key() === $this->rhs->key()
- : $this->lhs->valid() == $this->rhs->valid();
- }
-
- /** @return whether both inner iterators are valid and have equal current
- * and key values or both are non valid.
- */
- function areEqual()
- {
- return $this->valid()
- ? $this->lhs->current() == $this->rhs->current()
- && $this->lhs->key() == $this->rhs->key()
- : $this->lhs->valid() == $this->rhs->valid();
- }
-
- /** Compare two iterators
- *
- * @param lhs Left Hand Side Iterator
- * @param rhs Right Hand Side Iterator
- * @param identical whether to use areEqual() or areIdentical()
- * @return whether both iterators are equal/identical
- *
- * @note If one implements RecursiveIterator the other must do as well.
- * And if both do then a recursive comparison is being used.
- */
- static function compareIterators(Iterator $lhs, Iterator $rhs,
- $identical = false)
- {
- if ($lhs instanceof RecursiveIterator)
- {
- if ($rhs instanceof RecursiveIterator)
- {
- $it = new RecursiveDualIterator($lhs, $rhs,
- self::CURRENT_0 | self::KEY_0);
- $it = new RecursiveCompareDualIterator($it);
- }
- else
- {
- return false;
- }
- }
- else
- {
- $it = new DualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
- }
-
- if ($identical)
- {
- foreach($it as $n)
- {
- if (!$it->areIdentical())
- {
- return false;
- }
- }
- }
- else
- {
- foreach($it as $n)
- {
- if (!$it->areEqual())
- {
- return false;
- }
- }
- }
- return $identical ? $it->areIdentical() : $it->areEqual();
- }
+ const CURRENT_LHS = 0x01;
+ const CURRENT_RHS = 0x02;
+ const CURRENT_ARRAY = 0x03;
+ const CURRENT_0 = 0x00;
+
+ const KEY_LHS = 0x10;
+ const KEY_RHS = 0x20;
+ const KEY_0 = 0x00;
+
+ const DEFAULT_FLAGS = 0x13;
+
+ private $lhs;
+ private $rhs;
+ private $flags;
+
+ /** construct iterator from two iterators
+ *
+ * @param lhs Left Hand Side Iterator
+ * @param rhs Right Hand Side Iterator
+ * @param flags iteration flags
+ */
+ function __construct(Iterator $lhs, Iterator $rhs,
+ $flags = 0x13 /*DualIterator::DEFAULT_FLAGS*/)
+ {
+ $this->lhs = $lhs;
+ $this->rhs = $rhs;
+ $this->flags = $flags;
+ }
+
+ /** @return Left Hand Side Iterator
+ */
+ function getLHS()
+ {
+ return $this->lhs;
+ }
+
+ /** @return Right Hand Side Iterator
+ */
+ function getRHS()
+ {
+ return $this->rhs;
+ }
+
+ /** @param flags new flags
+ */
+ function setFlags($flags)
+ {
+ $this->flags = $flags;
+ }
+
+ /** @return current flags
+ */
+ function getFlags()
+ {
+ return $this->flags;
+ }
+
+ /** rewind both inner iterators
+ */
+ function rewind()
+ {
+ $this->lhs->rewind();
+ $this->rhs->rewind();
+ }
+
+ /** @return whether both inner iterators are valid
+ */
+ function valid()
+ {
+ return $this->lhs->valid() && $this->rhs->valid();
+ }
+
+ /** @return current value depending on CURRENT_* flags
+ */
+ function current()
+ {
+ switch($this->flags & 0x0F)
+ {
+ default:
+ case self::CURRENT_ARRAY:
+ return array($this->lhs->current(), $this->rhs->current());
+ case self::CURRENT_LHS:
+ return $this->lhs->current();
+ case self::CURRENT_RHS:
+ return $this->rhs->current();
+ case self::CURRENT_0:
+ return NULL;
+ }
+ }
+
+ /** @return key value depending on KEY_* flags
+ */
+ function key()
+ {
+ switch($this->flags & 0xF0)
+ {
+ default:
+ case self::KEY_LHS:
+ return $this->lhs->key();
+ case self::KEY_RHS:
+ return $this->rhs->key();
+ case self::KEY_0:
+ return NULL;
+ }
+ }
+
+ /** move both inner iterators forward
+ */
+ function next()
+ {
+ $this->lhs->next();
+ $this->rhs->next();
+ }
+
+ /** @return whether both inner iterators are valid and have identical
+ * current and key values or both are non valid.
+ */
+ function areIdentical()
+ {
+ return $this->valid()
+ ? $this->lhs->current() === $this->rhs->current()
+ && $this->lhs->key() === $this->rhs->key()
+ : $this->lhs->valid() == $this->rhs->valid();
+ }
+
+ /** @return whether both inner iterators are valid and have equal current
+ * and key values or both are non valid.
+ */
+ function areEqual()
+ {
+ return $this->valid()
+ ? $this->lhs->current() == $this->rhs->current()
+ && $this->lhs->key() == $this->rhs->key()
+ : $this->lhs->valid() == $this->rhs->valid();
+ }
+
+ /** Compare two iterators
+ *
+ * @param lhs Left Hand Side Iterator
+ * @param rhs Right Hand Side Iterator
+ * @param identical whether to use areEqual() or areIdentical()
+ * @return whether both iterators are equal/identical
+ *
+ * @note If one implements RecursiveIterator the other must do as well.
+ * And if both do then a recursive comparison is being used.
+ */
+ static function compareIterators(Iterator $lhs, Iterator $rhs,
+ $identical = false)
+ {
+ if ($lhs instanceof RecursiveIterator)
+ {
+ if ($rhs instanceof RecursiveIterator)
+ {
+ $it = new RecursiveDualIterator($lhs, $rhs,
+ self::CURRENT_0 | self::KEY_0);
+ $it = new RecursiveCompareDualIterator($it);
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ $it = new DualIterator($lhs, $rhs, self::CURRENT_0 | self::KEY_0);
+ }
+
+ if ($identical)
+ {
+ foreach($it as $n)
+ {
+ if (!$it->areIdentical())
+ {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ foreach($it as $n)
+ {
+ if (!$it->areEqual())
+ {
+ return false;
+ }
+ }
+ }
+ return $identical ? $it->areIdentical() : $it->areEqual();
+ }
}
?>
diff --git a/ext/spl/tests/dualiterator_001.phpt b/ext/spl/tests/dualiterator_001.phpt
index 934f28abee..2bbdc0c56f 100644
--- a/ext/spl/tests/dualiterator_001.phpt
+++ b/ext/spl/tests/dualiterator_001.phpt
@@ -5,17 +5,17 @@ SPL: DualIterator
function spl_examples_autoload($classname)
{
- include(__DIR__ . '/' . strtolower($classname) . '.inc');
+ include(__DIR__ . '/' . strtolower($classname) . '.inc');
}
spl_autoload_register('spl_examples_autoload');
function test($a, $b, $identical = false)
{
- var_dump(DualIterator::compareIterators(
- new RecursiveArrayIterator($a),
- new RecursiveArrayIterator($b),
- $identical));
+ var_dump(DualIterator::compareIterators(
+ new RecursiveArrayIterator($a),
+ new RecursiveArrayIterator($b),
+ $identical));
}
test(array(1,2,3), array(1,2,3));
@@ -30,8 +30,6 @@ test(array(1,array(21,22),3), array(1,array(21,"22"),3), false);
test(array(1,array(21,22),3), array(1,array(21,"22"),3), true);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
bool(true)
bool(false)
@@ -43,4 +41,3 @@ bool(true)
bool(false)
bool(true)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/fileobject_001.phpt b/ext/spl/tests/fileobject_001.phpt
index 4059310bba..5c2240b3c5 100644
--- a/ext/spl/tests/fileobject_001.phpt
+++ b/ext/spl/tests/fileobject_001.phpt
@@ -27,7 +27,7 @@ var_dump($o->key());
echo "===A===\n";
foreach($o as $n => $l)
{
- var_dump($n, $l);
+ var_dump($n, $l);
}
echo "===B===\n";
@@ -35,11 +35,10 @@ $o = new SplFileObject(__DIR__ . '/fileobject_001b.txt');
$o->setFlags(SplFileObject::DROP_NEW_LINE);
foreach($o as $n => $l)
{
- var_dump($n, $l);
+ var_dump($n, $l);
}
?>
-===DONE===
--EXPECTF--
int(0)
string(%d) "0
@@ -85,4 +84,3 @@ int(4)
string(1) "4"
int(5)
string(1) "5"
-===DONE===
diff --git a/ext/spl/tests/fileobject_002.phpt b/ext/spl/tests/fileobject_002.phpt
index 2f43949966..ba30caf23a 100644
--- a/ext/spl/tests/fileobject_002.phpt
+++ b/ext/spl/tests/fileobject_002.phpt
@@ -5,31 +5,29 @@ SPL: SplFileObject::fgetc
function test($name)
{
- echo "===$name===\n";
+ echo "===$name===\n";
- $o = new SplFileObject(__DIR__ . '/' . $name);
+ $o = new SplFileObject(__DIR__ . '/' . $name);
- var_dump($o->key());
- while(($c = $o->fgetc()) !== false)
- {
+ var_dump($o->key());
+ while(($c = $o->fgetc()) !== false)
+ {
// Kinda ugly but works around new lines mess
if ($c === "\r") {
continue;
}
- var_dump($o->key(), $c, $o->eof());
- }
- echo "===EOF?===\n";
- var_dump($o->eof());
- var_dump($o->key());
- var_dump($o->eof());
+ var_dump($o->key(), $c, $o->eof());
+ }
+ echo "===EOF?===\n";
+ var_dump($o->eof());
+ var_dump($o->key());
+ var_dump($o->eof());
}
test('fileobject_001a.txt');
test('fileobject_001b.txt');
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===fileobject_001a.txt===
int(0)
@@ -123,4 +121,3 @@ bool(false)
bool(true)
int(5)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/fileobject_003.phpt b/ext/spl/tests/fileobject_003.phpt
index c3452bc93f..4f33065d42 100644
--- a/ext/spl/tests/fileobject_003.phpt
+++ b/ext/spl/tests/fileobject_003.phpt
@@ -5,40 +5,40 @@ SPL: SplFileInfo cloning
function test($name, $lc, $lp)
{
- static $i = 0;
- echo "===$i===\n";
- $i++;
+ static $i = 0;
+ echo "===$i===\n";
+ $i++;
- $o = new SplFileInfo($name);
+ $o = new SplFileInfo($name);
- var_dump($o);
- $c = clone $o;
- var_dump($c);
- var_dump($o === $c);
- var_dump($o == $c);
- var_dump($o->getPathname() == $c->getPathname());
+ var_dump($o);
+ $c = clone $o;
+ var_dump($c);
+ var_dump($o === $c);
+ var_dump($o == $c);
+ var_dump($o->getPathname() == $c->getPathname());
- try {
- $f = new SplFileObject($name);
- var_dump($name);
- var_dump($f->getPathName());
- $l = substr($f->getPathName(), -1);
- var_dump($l != '/' && $l != '\\' && $l == $lc);
- var_dump($f->getFileName());
- $l = substr($f->getFileName(), -1);
- var_dump($l != '/' && $l != '\\' && $l == $lc);
- var_dump($f->getPath());
- $l = substr($f->getPath(), -1);
- var_dump($l != '/' && $l != '\\' && $l == $lp);
- } catch (LogicException $e) {
- echo "LogicException: ".$e->getMessage()."\n";
- }
- try {
- $fo = $o->openFile();
- var_dump($fo->getPathName(), $fo->getFileName(), $fo->getPath());
- } catch (LogicException $e) {
- echo "LogicException: ".$e->getMessage()."\n";
- }
+ try {
+ $f = new SplFileObject($name);
+ var_dump($name);
+ var_dump($f->getPathName());
+ $l = substr($f->getPathName(), -1);
+ var_dump($l != '/' && $l != '\\' && $l == $lc);
+ var_dump($f->getFileName());
+ $l = substr($f->getFileName(), -1);
+ var_dump($l != '/' && $l != '\\' && $l == $lc);
+ var_dump($f->getPath());
+ $l = substr($f->getPath(), -1);
+ var_dump($l != '/' && $l != '\\' && $l == $lp);
+ } catch (LogicException $e) {
+ echo "LogicException: ".$e->getMessage()."\n";
+ }
+ try {
+ $fo = $o->openFile();
+ var_dump($fo->getPathName(), $fo->getFileName(), $fo->getPath());
+ } catch (LogicException $e) {
+ echo "LogicException: ".$e->getMessage()."\n";
+ }
}
test(__DIR__ . '/' . 'fileobject_001a.txt', 't', substr(__DIR__,-1));
@@ -46,8 +46,6 @@ test(__DIR__ . '/', substr(__DIR__,-1), 'l');
test(__DIR__, substr(__DIR__,-1), 'l');
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
===0===
object(SplFileInfo)#%d (2) {
@@ -111,4 +109,3 @@ bool(true)
bool(true)
LogicException: Cannot use SplFileObject with directories
LogicException: Cannot use SplFileObject with directories
-===DONE===
diff --git a/ext/spl/tests/fileobject_004.phpt b/ext/spl/tests/fileobject_004.phpt
index fad87298ca..f446674dd8 100644
--- a/ext/spl/tests/fileobject_004.phpt
+++ b/ext/spl/tests/fileobject_004.phpt
@@ -14,9 +14,7 @@ var_dump($fo->getPath());
var_dump($fo->getFilename());
var_dump($fo->getRealPath());
?>
-==DONE==
--EXPECTF--
string(%d) "%sspl%stests"
string(19) "fileobject_004.phpt"
string(%d) "%sspl%stests%sfileobject_004.phpt"
-==DONE==
diff --git a/ext/spl/tests/fileobject_005.phpt b/ext/spl/tests/fileobject_005.phpt
index 41a04dd118..cce4a7d6a6 100644
--- a/ext/spl/tests/fileobject_005.phpt
+++ b/ext/spl/tests/fileobject_005.phpt
@@ -16,27 +16,17 @@ $fo->fwrite("blahlubba");
var_dump($fo->ftruncate(4));
$fo->rewind();
-var_dump($fo->fgets(8));
+var_dump($fo->fgets());
$fo->rewind();
$fo->fwrite("blahlubba");
-// This should throw a warning and return NULL since an argument is missing
-var_dump($fo->ftruncate());
-
?>
-==DONE==
--CLEAN--
<?php
$path = __DIR__.DIRECTORY_SEPARATOR.'fileobject_005.txt';
unlink($path);
?>
---EXPECTF--
+--EXPECT--
bool(true)
-
-Warning: SplFileObject::fgets() expects exactly 0 parameters, 1 given in %s on line %d
-NULL
-
-Warning: SplFileObject::ftruncate() expects exactly 1 parameter, 0 given in %s on line %d
-NULL
-==DONE==
+string(4) "blah"
diff --git a/ext/spl/tests/fileobject_getcurrentline_basic.phpt b/ext/spl/tests/fileobject_getcurrentline_basic.phpt
index 607fce6640..47f6e28dd8 100644
--- a/ext/spl/tests/fileobject_getcurrentline_basic.phpt
+++ b/ext/spl/tests/fileobject_getcurrentline_basic.phpt
@@ -15,5 +15,5 @@ echo $s->getCurrentLine();
echo $s->getCurrentLine();
?>
--EXPECT--
+//line 2
//line 3
-//line 4
diff --git a/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt b/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt
index 6bfdfdcf50..018ecd47b4 100644
--- a/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt
+++ b/ext/spl/tests/fileobject_setmaxlinelen_error001.phpt
@@ -8,10 +8,10 @@ $s = new SplFileObject( __FILE__ );
try {
$s->setMaxLineLen(-1);
}
-catch (DomainException $e) {
- echo 'DomainException thrown';
+catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
?>
--EXPECT--
-DomainException thrown
+SplFileObject::setMaxLineLen(): Argument #1 ($maxLength) must be greater than or equal to 0
diff --git a/ext/spl/tests/filesystemiterator_flags.phpt b/ext/spl/tests/filesystemiterator_flags.phpt
index c74129760c..1a8cce034e 100644
--- a/ext/spl/tests/filesystemiterator_flags.phpt
+++ b/ext/spl/tests/filesystemiterator_flags.phpt
@@ -9,19 +9,19 @@ $it = new FileSystemIterator(".");
printflags($it);
$it->setFlags(FileSystemIterator::CURRENT_AS_SELF |
- FileSystemIterator::KEY_AS_FILENAME |
- FileSystemIterator::SKIP_DOTS |
- FileSystemIterator::UNIX_PATHS);
+ FileSystemIterator::KEY_AS_FILENAME |
+ FileSystemIterator::SKIP_DOTS |
+ FileSystemIterator::UNIX_PATHS);
printflags($it);
$it->setFlags(-1);
printflags($it);
function printflags($it) {
- printf("%08X\n", $it->getFlags());
- printf("%08X\n", ($it->getFlags() & FileSystemIterator::CURRENT_MODE_MASK));
- printf("%08X\n", ($it->getFlags() & FileSystemIterator::KEY_MODE_MASK));
- printf("%08X\n", ($it->getFlags() & FileSystemIterator::OTHER_MODE_MASK));
+ printf("%08X\n", $it->getFlags());
+ printf("%08X\n", ($it->getFlags() & FileSystemIterator::CURRENT_MODE_MASK));
+ printf("%08X\n", ($it->getFlags() & FileSystemIterator::KEY_MODE_MASK));
+ printf("%08X\n", ($it->getFlags() & FileSystemIterator::OTHER_MODE_MASK));
}
?>
diff --git a/ext/spl/tests/fixedarray_001.phpt b/ext/spl/tests/fixedarray_001.phpt
index c85d9e8dcc..0c080a5fa1 100644
--- a/ext/spl/tests/fixedarray_001.phpt
+++ b/ext/spl/tests/fixedarray_001.phpt
@@ -44,7 +44,6 @@ $b = clone $a;
$a[0] = "valueNew";
var_dump($b[0]);
?>
-===DONE===
--EXPECT--
Exception: Index invalid or out of range
Exception: Index invalid or out of range
@@ -57,4 +56,3 @@ int(10)
int(10)
bool(true)
string(6) "value0"
-===DONE===
diff --git a/ext/spl/tests/fixedarray_002.phpt b/ext/spl/tests/fixedarray_002.phpt
index ade6b7decf..f111dd1bfc 100644
--- a/ext/spl/tests/fixedarray_002.phpt
+++ b/ext/spl/tests/fixedarray_002.phpt
@@ -3,8 +3,8 @@ SPL: FixedArray: overloading
--FILE--
<?php
class A extends SplFixedArray {
- public $prop1 = NULL;
- public $prop2 = NULL;
+ public $prop1 = NULL;
+ public $prop2 = NULL;
public function count() {
return 2;
@@ -67,7 +67,6 @@ var_dump($a[0], $a[2], $a[3], $a[4]);
var_dump(count($a), $a->getSize(), count($a) == $a->getSize());
?>
-===DONE===
--EXPECT--
A::offsetSet
Exception: Index invalid or out of range
@@ -100,4 +99,3 @@ string(6) "value4"
int(2)
int(10)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/fixedarray_003.phpt b/ext/spl/tests/fixedarray_003.phpt
deleted file mode 100644
index 33043a80e3..0000000000
--- a/ext/spl/tests/fixedarray_003.phpt
+++ /dev/null
@@ -1,88 +0,0 @@
---TEST--
-SPL: FixedArray: Iterators
---FILE--
-<?php
-class A extends SplFixedArray {
- public $prop1 = "dummy";
- public $prop2 = "dummy";
-
- public function current() {
- echo "A::current\n";
- return parent::current();
- }
- public function key() {
- echo "A::key\n";
- return parent::key();
- }
- public function rewind() {
- echo "A::rewind\n";
- return parent::rewind();
- }
- public function valid() {
- echo "A::valid\n";
- return parent::valid();
- }
- public function next() {
- echo "A::next\n";
- return parent::next();
- }
-}
-
-echo "==Direct instance==\n";
-$a = new SplFixedArray(5);
-$a[0] = "a";
-$a[1] = "c";
-$a[2] = "d";
-$a[3] = "e";
-$a[4] = "f";
-foreach ($a as $k => $v) {
- echo "$k => $v\n";
-}
-echo "==Child instance==\n";
-$a = new A(5);
-$a[0] = "a";
-$a[1] = "c";
-$a[2] = "d";
-$a[3] = "e";
-$a[4] = "f";
-foreach ($a as $k => $v) {
- echo "$k => $v\n";
-}
-?>
-===DONE===
---EXPECT--
-==Direct instance==
-0 => a
-1 => c
-2 => d
-3 => e
-4 => f
-==Child instance==
-A::rewind
-A::valid
-A::current
-A::key
-0 => a
-A::next
-A::valid
-A::current
-A::key
-1 => c
-A::next
-A::valid
-A::current
-A::key
-2 => d
-A::next
-A::valid
-A::current
-A::key
-3 => e
-A::next
-A::valid
-A::current
-A::key
-4 => f
-A::next
-A::valid
-===DONE===
diff --git a/ext/spl/tests/fixedarray_004.phpt b/ext/spl/tests/fixedarray_004.phpt
index fb32c2fd52..054fb3d9b5 100644
--- a/ext/spl/tests/fixedarray_004.phpt
+++ b/ext/spl/tests/fixedarray_004.phpt
@@ -6,13 +6,11 @@ SPL: FixedArray: adding new elements
$a = new SplFixedArray(10);
try {
- $a[] = 1;
+ $a[] = 1;
} catch (Exception $e) {
- var_dump($e->getMessage());
+ var_dump($e->getMessage());
}
?>
-===DONE===
--EXPECT--
string(29) "Index invalid or out of range"
-===DONE===
diff --git a/ext/spl/tests/fixedarray_005.phpt b/ext/spl/tests/fixedarray_005.phpt
index 7240c0abc6..f726c9d956 100644
--- a/ext/spl/tests/fixedarray_005.phpt
+++ b/ext/spl/tests/fixedarray_005.phpt
@@ -4,27 +4,25 @@ SPL: FixedArray: Invalid arguments
<?php
try {
- $a = new SplFixedArray(new stdClass);
+ $a = new SplFixedArray(new stdClass);
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
try {
- $a = new SplFixedArray('FOO');
+ $a = new SplFixedArray('FOO');
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
try {
- $a = new SplFixedArray('');
+ $a = new SplFixedArray('');
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
-===DONE===
--EXPECT--
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, object given
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, string given
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, string given
-===DONE===
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, stdClass given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, string given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, string given
diff --git a/ext/spl/tests/fixedarray_006.phpt b/ext/spl/tests/fixedarray_006.phpt
index 8641821ae3..2e762467c4 100644
--- a/ext/spl/tests/fixedarray_006.phpt
+++ b/ext/spl/tests/fixedarray_006.phpt
@@ -7,11 +7,11 @@ $b = 10000;
$a = new SplFixedArray($b);
try {
- for ($i = 0; $i < 100; $i++) {
- $a[] = new stdClass;
- }
+ for ($i = 0; $i < 100; $i++) {
+ $a[] = new stdClass;
+ }
} catch (Exception $e) {
- echo $e->getMessage(), "\n";
+ echo $e->getMessage(), "\n";
}
print "ok\n";
diff --git a/ext/spl/tests/fixedarray_007.phpt b/ext/spl/tests/fixedarray_007.phpt
index 308ce315a5..65b4dad90e 100644
--- a/ext/spl/tests/fixedarray_007.phpt
+++ b/ext/spl/tests/fixedarray_007.phpt
@@ -7,15 +7,15 @@ $b = 10;
$a = new SplFixedArray($b);
try {
- $a[1] = $a;
+ $a[1] = $a;
} catch (Exception $e) {
- echo $e->getMessage(), "\n";
+ echo $e->getMessage(), "\n";
}
foreach ($a as $c) {
- if ($c) {
- echo $c->getSize(), "\n";
- }
+ if ($c) {
+ echo $c->getSize(), "\n";
+ }
}
print "ok\n";
diff --git a/ext/spl/tests/fixedarray_008.phpt b/ext/spl/tests/fixedarray_008.phpt
index 6d9c9cbf09..8bac0824d1 100644
--- a/ext/spl/tests/fixedarray_008.phpt
+++ b/ext/spl/tests/fixedarray_008.phpt
@@ -13,11 +13,11 @@ $a[2] = $a;
$a[2][0] = 3;
foreach ($a as $x) {
- if (is_object($x)) {
- var_dump($x[0]);
- } else {
- var_dump($x);
- }
+ if (is_object($x)) {
+ var_dump($x[0]);
+ } else {
+ var_dump($x);
+ }
}
var_dump($a->getSize());
diff --git a/ext/spl/tests/fixedarray_009.phpt b/ext/spl/tests/fixedarray_009.phpt
index 185b9d1acc..9cc684ce03 100644
--- a/ext/spl/tests/fixedarray_009.phpt
+++ b/ext/spl/tests/fixedarray_009.phpt
@@ -1,13 +1,13 @@
--TEST--
-SPL: FixedArray: Trying to instantiate passing string to construtor parameter
+SPL: FixedArray: Trying to instantiate passing string to constructor parameter
--FILE--
<?php
try {
- $a = new SplFixedArray('FOO');
+ $a = new SplFixedArray('FOO');
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
?>
--EXPECT--
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, string given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, string given
diff --git a/ext/spl/tests/fixedarray_012.phpt b/ext/spl/tests/fixedarray_012.phpt
index 3461b3a9b5..df725aad46 100644
--- a/ext/spl/tests/fixedarray_012.phpt
+++ b/ext/spl/tests/fixedarray_012.phpt
@@ -6,9 +6,9 @@ SPL: FixedArray: Assigning the object to another variable using []
$a = new SplFixedArray(100);
try {
- $b = &$a[];
+ $b = &$a[];
} catch (Exception $e) {
- echo $e->getMessage(), "\n";
+ echo $e->getMessage(), "\n";
}
print "ok\n";
diff --git a/ext/spl/tests/fixedarray_013.phpt b/ext/spl/tests/fixedarray_013.phpt
index 52ae3c161e..cf43b3c7e7 100644
--- a/ext/spl/tests/fixedarray_013.phpt
+++ b/ext/spl/tests/fixedarray_013.phpt
@@ -7,13 +7,13 @@ $a = new SplFixedArray(100);
function test(SplFixedArray &$arr) {
- print "ok\n";
+ print "ok\n";
}
try {
- test($a[]);
+ test($a[]);
} catch (Exception $e) {
- echo $e->getMessage(), "\n";
+ echo $e->getMessage(), "\n";
}
?>
diff --git a/ext/spl/tests/fixedarray_014.phpt b/ext/spl/tests/fixedarray_014.phpt
index de8e214dc0..a6f2fc188c 100644
--- a/ext/spl/tests/fixedarray_014.phpt
+++ b/ext/spl/tests/fixedarray_014.phpt
@@ -4,10 +4,10 @@ SPL: FixedArray: Trying to access inexistent item
<?php
try {
- $a = new SplFixedArray(NULL);
- echo $a[0]++;
+ $a = new SplFixedArray(NULL);
+ echo $a[0]++;
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
diff --git a/ext/spl/tests/fixedarray_015.phpt b/ext/spl/tests/fixedarray_015.phpt
index 3fedd35090..1936cc962b 100644
--- a/ext/spl/tests/fixedarray_015.phpt
+++ b/ext/spl/tests/fixedarray_015.phpt
@@ -4,13 +4,13 @@ SPL: FixedArray: accessing uninitialized array
<?php
try {
- $a = new SplFixedArray('');
+ $a = new SplFixedArray('');
} catch (TypeError $iae) {
- echo "Ok - ".$iae->getMessage().PHP_EOL;
+ echo "Ok - ".$iae->getMessage().PHP_EOL;
}
echo "Done\n";
?>
--EXPECT--
-Ok - SplFixedArray::__construct() expects parameter 1 to be int, string given
+Ok - SplFixedArray::__construct(): Argument #1 ($size) must be of type int, string given
Done
diff --git a/ext/spl/tests/fixedarray_018.phpt b/ext/spl/tests/fixedarray_018.phpt
index 84ab109195..aa02fb5de1 100644
--- a/ext/spl/tests/fixedarray_018.phpt
+++ b/ext/spl/tests/fixedarray_018.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: FixedArray: overriden count()
+SPL: FixedArray: overridden count()
--FILE--
<?php
$obj = new SplFixedArray(2);
diff --git a/ext/spl/tests/fixedarray_019.phpt b/ext/spl/tests/fixedarray_019.phpt
deleted file mode 100644
index f28edfda41..0000000000
--- a/ext/spl/tests/fixedarray_019.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-SPL: FixedArray: overriden iterator methods
---FILE--
-<?php
-class SplFixedArray2 extends SplFixedArray {
- public function rewind() {
- echo "rewind\n";
- return parent::rewind();
- }
- public function valid() {
- echo "valid\n";
- return parent::valid();
- }
- public function next() {
- echo "next\n";
- return parent::next();
- }
- public function current() {
- echo "current\n";
- return parent::current();
- }
- public function key() {
- echo "key\n";
- return parent::key();
- }
-}
-
-$fa = new SplFixedArray2(3);
-foreach($fa as $k=>$v) {
- echo "$k=>";
- var_dump($v);
-}
-?>
---EXPECT--
-rewind
-valid
-current
-key
-0=>NULL
-next
-valid
-current
-key
-1=>NULL
-next
-valid
-current
-key
-2=>NULL
-next
-valid
diff --git a/ext/spl/tests/fixedarray_021.phpt b/ext/spl/tests/fixedarray_021.phpt
index 97b0a70f13..376985fd5d 100644
--- a/ext/spl/tests/fixedarray_021.phpt
+++ b/ext/spl/tests/fixedarray_021.phpt
@@ -11,17 +11,17 @@ var_dump($a->count());
/* negative init value */
try {
- $b = new SplFixedArray(-10);
-} catch (Exception $e) {
- var_dump($e->getMessage());
+ $b = new SplFixedArray(-10);
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
/* resize and negative value */
$b = new SplFixedArray();
try {
- $b->setSize(-5);
-} catch (Exception $e) {
- var_dump($e->getMessage());
+ $b->setSize(-5);
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
/* calling __construct() twice */
@@ -43,11 +43,11 @@ $e[1] = 5;
$e[2] = 10;
try {
- foreach ($e as $k=>&$v) {
- var_dump($v);
- }
-} catch (Exception $e) {
- var_dump($e->getMessage());
+ foreach ($e as $k=>&$v) {
+ var_dump($v);
+ }
+} catch (\Error $e) {
+ var_dump($e->getMessage());
}
//non-long indexes
@@ -60,12 +60,11 @@ var_dump(isset($a["0"], $a[-1]), $a["1"]);
var_dump(empty($a["3"]));
?>
-==DONE==
--EXPECTF--
int(0)
int(0)
-string(35) "array size cannot be less than zero"
-string(35) "array size cannot be less than zero"
+SplFixedArray::__construct(): Argument #1 ($size) must be greater than or equal to 0
+SplFixedArray::setSize(): Argument #1 ($size) must be greater than or equal to 0
NULL
int(0)
int(0)
@@ -75,4 +74,3 @@ string(52) "An iterator cannot be used with foreach by reference"
bool(false)
string(3) "foo"
bool(true)
-==DONE==
diff --git a/ext/spl/tests/heap_001.phpt b/ext/spl/tests/heap_001.phpt
index f9cfd68710..33f091838b 100644
--- a/ext/spl/tests/heap_001.phpt
+++ b/ext/spl/tests/heap_001.phpt
@@ -36,8 +36,6 @@ $h2 = clone $h;
echo $h->extract()."\n";
echo $h2->extract()."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Exception: Can't extract from an empty heap
5
@@ -50,4 +48,3 @@ Exception: Can't extract from an empty heap
--
4
4
-===DONE===
diff --git a/ext/spl/tests/heap_002.phpt b/ext/spl/tests/heap_002.phpt
index 578d15b21c..452fdf189a 100644
--- a/ext/spl/tests/heap_002.phpt
+++ b/ext/spl/tests/heap_002.phpt
@@ -34,8 +34,6 @@ $b = 5;
echo $h->extract()."\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Exception: Can't extract from an empty heap
5
@@ -47,4 +45,3 @@ Exception: Can't extract from an empty heap
0
--
4
-===DONE===
diff --git a/ext/spl/tests/heap_003.phpt b/ext/spl/tests/heap_003.phpt
index 4a4bcff5ff..69620af8ef 100644
--- a/ext/spl/tests/heap_003.phpt
+++ b/ext/spl/tests/heap_003.phpt
@@ -27,8 +27,6 @@ foreach ($h as $out) {
echo $out."\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
10
9
@@ -41,4 +39,3 @@ foreach ($h as $out) {
2
1
0
-===DONE===
diff --git a/ext/spl/tests/heap_004.phpt b/ext/spl/tests/heap_004.phpt
index e493d20fac..892da20fb7 100644
--- a/ext/spl/tests/heap_004.phpt
+++ b/ext/spl/tests/heap_004.phpt
@@ -53,8 +53,6 @@ try {
echo "Exception: ".$e->getMessage()."\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
inserted 1
Exception: foo
@@ -64,4 +62,3 @@ Exception: Heap is corrupted, heap properties are no longer ensured.
Recovering..
int(1)
int(2)
-===DONE===
diff --git a/ext/spl/tests/heap_005.phpt b/ext/spl/tests/heap_005.phpt
index 8621f09aa4..39a9e81ebb 100644
--- a/ext/spl/tests/heap_005.phpt
+++ b/ext/spl/tests/heap_005.phpt
@@ -15,8 +15,6 @@ foreach ($h as $k => $o) {
echo "$k => $o\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
99 => 1
98 => 2
@@ -118,4 +116,3 @@ foreach ($h as $k => $o) {
2 => 98
1 => 99
0 => 100
-===DONE===
diff --git a/ext/spl/tests/heap_006.phpt b/ext/spl/tests/heap_006.phpt
index 41c7b84638..998c07c91e 100644
--- a/ext/spl/tests/heap_006.phpt
+++ b/ext/spl/tests/heap_006.phpt
@@ -15,8 +15,6 @@ foreach ($h as $k => $o) {
echo "$k => $o\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
99 => 100
98 => 99
@@ -118,4 +116,3 @@ foreach ($h as $k => $o) {
2 => 3
1 => 2
0 => 1
-===DONE===
diff --git a/ext/spl/tests/heap_007.phpt b/ext/spl/tests/heap_007.phpt
index 27bd66edf1..291f27d69f 100644
--- a/ext/spl/tests/heap_007.phpt
+++ b/ext/spl/tests/heap_007.phpt
@@ -20,8 +20,6 @@ while ($h->valid()) {
$h->next();
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
count($h) = 4
$h->count() = 4
@@ -29,4 +27,3 @@ $h->count() = 4
2=>4
1=>1
0=>0
-===DONE===
diff --git a/ext/spl/tests/heap_008.phpt b/ext/spl/tests/heap_008.phpt
index 3a746b2e6f..419726e6ff 100644
--- a/ext/spl/tests/heap_008.phpt
+++ b/ext/spl/tests/heap_008.phpt
@@ -11,8 +11,6 @@ $h->insert(4);
var_dump($h);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
object(SplMaxHeap)#1 (3) {
["flags":"SplHeap":private]=>
@@ -31,4 +29,3 @@ object(SplMaxHeap)#1 (3) {
int(1)
}
}
-===DONE===
diff --git a/ext/spl/tests/heap_009.phpt b/ext/spl/tests/heap_009.phpt
index f660b24d89..833d079b25 100644
--- a/ext/spl/tests/heap_009.phpt
+++ b/ext/spl/tests/heap_009.phpt
@@ -11,26 +11,26 @@ function testForException( $heap )
{
foreach( $heap as &$item );
}
- catch( RuntimeException $e )
+ catch( \Error $e )
{
echo $e->getMessage(),"\n";
}
}
-// 1. SplMinHeap emtpy
+// 1. SplMinHeap empty
$heap = new SplMinHeap;
testForException( $heap );
-// 2. SplMinHeap non-emtpy
+// 2. SplMinHeap non-empty
$heap = new SplMinHeap;
$heap->insert( 1 );
testForException( $heap );
-// 3. SplMaxHeap emtpy
+// 3. SplMaxHeap empty
$heap = new SplMaxHeap;
testForException( $heap );
-// 4. SplMaxHeap non-emtpy
+// 4. SplMaxHeap non-empty
$heap = new SplMaxHeap;
$heap->insert( 1 );
testForException( $heap );
@@ -45,7 +45,6 @@ $heap->insert( 1, 2 );
testForException( $heap );
?>
-==DONE==
--EXPECT--
An iterator cannot be used with foreach by reference
An iterator cannot be used with foreach by reference
@@ -53,4 +52,3 @@ An iterator cannot be used with foreach by reference
An iterator cannot be used with foreach by reference
An iterator cannot be used with foreach by reference
An iterator cannot be used with foreach by reference
-==DONE==
diff --git a/ext/spl/tests/heap_010.phpt b/ext/spl/tests/heap_010.phpt
index 8c7d8d5c96..81e71c2398 100644
--- a/ext/spl/tests/heap_010.phpt
+++ b/ext/spl/tests/heap_010.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: SplHeap with overriden count()
+SPL: SplHeap with overridden count()
--FILE--
<?php
$obj = new SplMaxHeap();
diff --git a/ext/spl/tests/heap_011.phpt b/ext/spl/tests/heap_011.phpt
index 1689abfae1..fae62585b0 100644
--- a/ext/spl/tests/heap_011.phpt
+++ b/ext/spl/tests/heap_011.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: SplHeap with overriden compare()
+SPL: SplHeap with overridden compare()
--FILE--
<?php
class SplMinHeap2 extends SplMinHeap {
diff --git a/ext/spl/tests/heap_012.phpt b/ext/spl/tests/heap_012.phpt
index f86f14f4d0..69f3708868 100644
--- a/ext/spl/tests/heap_012.phpt
+++ b/ext/spl/tests/heap_012.phpt
@@ -6,7 +6,6 @@ $a = new SplMaxHeap;
$a->insert($a);
var_dump($a)
?>
-===DONE===
--EXPECTF--
object(SplMaxHeap)#%d (3) {
["flags":"SplHeap":private]=>
@@ -19,4 +18,3 @@ object(SplMaxHeap)#%d (3) {
*RECURSION*
}
}
-===DONE===
diff --git a/ext/spl/tests/heap_corruption.phpt b/ext/spl/tests/heap_corruption.phpt
index 47e8d008c0..9b14a0fe0b 100644
--- a/ext/spl/tests/heap_corruption.phpt
+++ b/ext/spl/tests/heap_corruption.phpt
@@ -8,30 +8,30 @@ Mike Sullivan <mikesul@php.net>
class myHeap extends SplHeap
{
- public $allow_compare = true;
+ public $allow_compare = true;
- public function compare($v1, $v2)
- {
- if ($this->allow_compare == true)
- {
- if ($v1 > $v2)
- {
- return 1;
- }
- else if ($v1 < $v2)
- {
- return -1;
- }
- else
- {
- return 0;
- }
- }
- else
- {
- throw new Exception('Compare exception');
- }
- }
+ public function compare($v1, $v2)
+ {
+ if ($this->allow_compare == true)
+ {
+ if ($v1 > $v2)
+ {
+ return 1;
+ }
+ else if ($v1 < $v2)
+ {
+ return -1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ throw new Exception('Compare exception');
+ }
+ }
}
$heap = new myHeap();
@@ -45,17 +45,17 @@ $heap->allow_compare = false;
var_dump($heap->isCorrupted());
try {
- $heap->extract();
+ $heap->extract();
}
catch (Exception $e) {
- echo "Compare Exception: " . $e->getMessage() . PHP_EOL;
+ echo "Compare Exception: " . $e->getMessage() . PHP_EOL;
}
try {
- $heap->top();
+ $heap->top();
}
catch (Exception $e) {
- echo "Corruption Exception: " . $e->getMessage() . PHP_EOL;
+ echo "Corruption Exception: " . $e->getMessage() . PHP_EOL;
}
var_dump($heap->isCorrupted());
diff --git a/ext/spl/tests/heap_current_variation_001.phpt b/ext/spl/tests/heap_current_variation_001.phpt
index f67eb428c3..a55bb486e9 100644
--- a/ext/spl/tests/heap_current_variation_001.phpt
+++ b/ext/spl/tests/heap_current_variation_001.phpt
@@ -8,10 +8,10 @@ Mike Sullivan <mikesul@php.net>
class myHeap extends SplHeap
{
- public function compare($v1, $v2)
- {
- throw new Exception('');
- }
+ public function compare($v1, $v2)
+ {
+ throw new Exception('');
+ }
}
$heap = new myHeap();
diff --git a/ext/spl/tests/heap_top_variation_002.phpt b/ext/spl/tests/heap_top_variation_002.phpt
index 4d6bdd593a..add363eab3 100644
--- a/ext/spl/tests/heap_top_variation_002.phpt
+++ b/ext/spl/tests/heap_top_variation_002.phpt
@@ -7,9 +7,9 @@ TestFest London May 2009
<?php
// override heap to force corruption by throwing exception in compare
class SplMinHeap2 extends SplMinHeap {
- public function compare($a, $b) {
- throw new Exception('Corrupt heap');
- }
+ public function compare($a, $b) {
+ throw new Exception('Corrupt heap');
+ }
}
$h = new SplMinHeap2();
@@ -17,14 +17,14 @@ $h = new SplMinHeap2();
// insert 2 elements to hit our overridden compare
$h->insert(4);
try {
- $h->insert(5);
+ $h->insert(5);
} catch (Exception $e) {}
// call top, should fail with corrupted heap
try {
- $h->top();
+ $h->top();
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
--EXPECT--
diff --git a/ext/spl/tests/heap_top_variation_003.phpt b/ext/spl/tests/heap_top_variation_003.phpt
index c2ea2bcd95..40d70c5966 100644
--- a/ext/spl/tests/heap_top_variation_003.phpt
+++ b/ext/spl/tests/heap_top_variation_003.phpt
@@ -7,9 +7,9 @@ TestFest London May 2009
<?php
$h = new SplMinHeap();
try {
- $h->top();
+ $h->top();
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
--EXPECT--
diff --git a/ext/spl/tests/iterator_001.phpt b/ext/spl/tests/iterator_001.phpt
index f5bb6974d9..c8151533a8 100644
--- a/ext/spl/tests/iterator_001.phpt
+++ b/ext/spl/tests/iterator_001.phpt
@@ -5,69 +5,69 @@ SPL: Iterator aggregating inner iterator's methods
class NumericArrayIterator implements Iterator
{
- protected $a;
- protected $i = 0;
+ protected $a;
+ protected $i = 0;
- public function __construct($a)
- {
- echo __METHOD__ . "\n";
- $this->a = $a;
- }
+ public function __construct($a)
+ {
+ echo __METHOD__ . "\n";
+ $this->a = $a;
+ }
- public function rewind()
- {
- echo __METHOD__ . "\n";
- $this->i = 0;
- }
+ public function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->i = 0;
+ }
- public function valid()
- {
- $ret = $this->i < count($this->a);
- echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
- return $ret;
- }
+ public function valid()
+ {
+ $ret = $this->i < count($this->a);
+ echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
+ return $ret;
+ }
- public function key()
- {
- echo __METHOD__ . "\n";
- return $this->i;
- }
+ public function key()
+ {
+ echo __METHOD__ . "\n";
+ return $this->i;
+ }
- public function current()
- {
- echo __METHOD__ . "\n";
- return $this->a[$this->i];
- }
+ public function current()
+ {
+ echo __METHOD__ . "\n";
+ return $this->a[$this->i];
+ }
- public function next()
- {
- echo __METHOD__ . "\n";
- $this->i++;
- }
+ public function next()
+ {
+ echo __METHOD__ . "\n";
+ $this->i++;
+ }
- public function greaterThan($comp)
- {
- echo get_class($this) . '::' . __FUNCTION__ . '(' . $comp . ")\n";
- return $this->current() > $comp;
- }
+ public function greaterThan($comp)
+ {
+ echo get_class($this) . '::' . __FUNCTION__ . '(' . $comp . ")\n";
+ return $this->current() > $comp;
+ }
}
class SeekableNumericArrayIterator extends NumericArrayIterator implements SeekableIterator
{
- public function seek($index)
- {
- if ($index < count($this->a)) {
- $this->i = $index;
- }
- echo __METHOD__ . '(' . $index . ")\n";
- }
+ public function seek($index)
+ {
+ if ($index < count($this->a)) {
+ $this->i = $index;
+ }
+ echo __METHOD__ . '(' . $index . ")\n";
+ }
}
$a = array(1, 2, 3, 4, 5);
$it = new LimitIterator(new NumericArrayIterator($a), 1, 3);
foreach ($it as $v)
{
- print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
+ print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
}
echo "===SEEKABLE===\n";
@@ -75,7 +75,7 @@ $a = array(1, 2, 3, 4, 5);
$it = new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3);
foreach($it as $v)
{
- print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
+ print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
}
echo "===STACKED===\n";
@@ -84,12 +84,10 @@ $a = array(1, 2, 3, 4, 5);
$it = new CachingIterator(new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3));
foreach($it as $v)
{
- print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
+ print $v . ' is ' . ($it->greaterThan(2) ? 'greater than 2' : 'less than or equal 2') . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
NumericArrayIterator::__construct
NumericArrayIterator::rewind
@@ -168,4 +166,3 @@ NumericArrayIterator::next
SeekableNumericArrayIterator::greaterThan(2)
NumericArrayIterator::current
4 is greater than 2
-===DONE===
diff --git a/ext/spl/tests/iterator_002.phpt b/ext/spl/tests/iterator_002.phpt
index 61765421f1..da790988fc 100644
--- a/ext/spl/tests/iterator_002.phpt
+++ b/ext/spl/tests/iterator_002.phpt
@@ -5,33 +5,33 @@ SPL: Iterator using getInnerIterator
class RecursiceArrayIterator extends ArrayIterator implements RecursiveIterator
{
- function hasChildren()
- {
- return is_array($this->current());
- }
-
- function getChildren()
- {
- return new RecursiceArrayIterator($this->current());
- }
+ function hasChildren()
+ {
+ return is_array($this->current());
+ }
+
+ function getChildren()
+ {
+ return new RecursiceArrayIterator($this->current());
+ }
}
class CrashIterator extends FilterIterator implements RecursiveIterator
{
- function accept()
- {
- return true;
- }
-
- function hasChildren()
- {
- return $this->getInnerIterator()->hasChildren();
- }
-
- function getChildren()
- {
- return new RecursiceArrayIterator($this->getInnerIterator()->current());
- }
+ function accept()
+ {
+ return true;
+ }
+
+ function hasChildren()
+ {
+ return $this->getInnerIterator()->hasChildren();
+ }
+
+ function getChildren()
+ {
+ return new RecursiceArrayIterator($this->getInnerIterator()->current());
+ }
}
$array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
@@ -39,12 +39,10 @@ $array = array(1, 2 => array(21, 22 => array(221, 222), 23 => array(231)), 3);
$dir = new RecursiveIteratorIterator(new CrashIterator(new RecursiceArrayIterator($array)), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($dir as $file) {
- print "$file\n";
+ print "$file\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1
21
@@ -52,4 +50,3 @@ foreach ($dir as $file) {
222
231
3
-===DONE===
diff --git a/ext/spl/tests/iterator_003.phpt b/ext/spl/tests/iterator_003.phpt
index f119661f57..b7b331a496 100644
--- a/ext/spl/tests/iterator_003.phpt
+++ b/ext/spl/tests/iterator_003.phpt
@@ -5,73 +5,73 @@ SPL: CachingIterator and __toString()
class Student
{
- private $id;
- private $name;
+ private $id;
+ private $name;
public function __construct($id, $name)
{
- $this->id = $id;
- $this->name = $name;
+ $this->id = $id;
+ $this->name = $name;
}
- public function __toString()
- {
- return $this->id . ', ' . $this->name;
- }
+ public function __toString()
+ {
+ return $this->id . ', ' . $this->name;
+ }
- public function getId()
- {
- return $this->id;
- }
+ public function getId()
+ {
+ return $this->id;
+ }
}
class StudentIdFilter extends FilterIterator
{
- private $id;
+ private $id;
- public function __construct(ArrayObject $students, Student $other)
- {
- FilterIterator::__construct($students->getIterator());
- $this->id = $other->getId();
- }
+ public function __construct(ArrayObject $students, Student $other)
+ {
+ FilterIterator::__construct($students->getIterator());
+ $this->id = $other->getId();
+ }
- public function accept()
- {
- echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
- return $this->current()->getId() == $this->id;
- }
+ public function accept()
+ {
+ echo "ACCEPT ".$this->current()->getId()." == ".$this->id."\n";
+ return $this->current()->getId() == $this->id;
+ }
}
class StudentList implements IteratorAggregate
{
- private $students;
+ private $students;
- public function __construct()
- {
- $this->students = new ArrayObject(array());
- }
+ public function __construct()
+ {
+ $this->students = new ArrayObject(array());
+ }
- public function add(Student $student)
- {
- if (!$this->contains($student)) {
- $this->students[] = $student;
- }
- }
+ public function add(Student $student)
+ {
+ if (!$this->contains($student)) {
+ $this->students[] = $student;
+ }
+ }
- public function contains(Student $student)
- {
- foreach ($this->students as $s)
- {
- if ($s->getId() == $student->getId()) {
- return true;
- }
- }
- return false;
- }
+ public function contains(Student $student)
+ {
+ foreach ($this->students as $s)
+ {
+ if ($s->getId() == $student->getId()) {
+ return true;
+ }
+ }
+ return false;
+ }
- public function getIterator() {
- return new CachingIterator($this->students->getIterator(), true);
- }
+ public function getIterator() {
+ return new CachingIterator($this->students->getIterator(), true);
+ }
}
$students = new StudentList();
@@ -84,12 +84,9 @@ $students->add(new Student('00000014', 'Foo'));
// iterator's __toString() method.
$it = $students->getIterator();
foreach ($it as $student) {
- echo $it->__toString(), "\n";
+ echo $it->__toString(), "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
01234123, Joe
00000014, Bob
-===DONE===
diff --git a/ext/spl/tests/iterator_004.phpt b/ext/spl/tests/iterator_004.phpt
index e07cd32c39..d131593ad2 100644
--- a/ext/spl/tests/iterator_004.phpt
+++ b/ext/spl/tests/iterator_004.phpt
@@ -5,69 +5,69 @@ SPL: SeekableIterator and string keys
class NumericArrayIterator implements Iterator
{
- protected $a;
- protected $i;
+ protected $a;
+ protected $i;
- public function __construct($a)
- {
- echo __METHOD__ . "\n";
- $this->a = $a;
- }
+ public function __construct($a)
+ {
+ echo __METHOD__ . "\n";
+ $this->a = $a;
+ }
- public function rewind()
- {
- echo __METHOD__ . "\n";
- $this->i = 0;
- }
+ public function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->i = 0;
+ }
- public function valid()
- {
- $ret = $this->i < count($this->a);
- echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
- return $ret;
- }
+ public function valid()
+ {
+ $ret = $this->i < count($this->a);
+ echo __METHOD__ . '(' . ($ret ? 'true' : 'false') . ")\n";
+ return $ret;
+ }
- public function key()
- {
- echo __METHOD__ . "\n";
- return $this->i;
- }
+ public function key()
+ {
+ echo __METHOD__ . "\n";
+ return $this->i;
+ }
- public function current()
- {
- echo __METHOD__ . "\n";
- return $this->a[$this->i];
- }
+ public function current()
+ {
+ echo __METHOD__ . "\n";
+ return $this->a[$this->i];
+ }
- public function next()
- {
- echo __METHOD__ . "\n";
- $this->i++;
- }
+ public function next()
+ {
+ echo __METHOD__ . "\n";
+ $this->i++;
+ }
}
class SeekableNumericArrayIterator extends NumericArrayIterator implements SeekableIterator
{
- public function seek($index)
- {
- if ($index < count($this->a)) {
- $this->i = $index;
- }
- echo __METHOD__ . '(' . $index . ")\n";
- }
+ public function seek($index)
+ {
+ if ($index < count($this->a)) {
+ $this->i = $index;
+ }
+ echo __METHOD__ . '(' . $index . ")\n";
+ }
}
$a = array(1, 2, 3, 4, 5);
foreach (new LimitIterator(new NumericArrayIterator($a), 1, 3) as $v)
{
- print "$v\n";
+ print "$v\n";
}
echo "===SEEKABLE===\n";
$a = array(1, 2, 3, 4, 5);
foreach(new LimitIterator(new SeekableNumericArrayIterator($a), 1, 3) as $v)
{
- print "$v\n";
+ print "$v\n";
}
echo "===SEEKING===\n";
@@ -75,13 +75,11 @@ $a = array(1, 2, 3, 4, 5);
$l = new LimitIterator(new SeekableNumericArrayIterator($a));
for($i = 1; $i < 4; $i++)
{
- $l->seek($i);
- print $l->current() . "\n";
+ $l->seek($i);
+ print $l->current() . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
NumericArrayIterator::__construct
NumericArrayIterator::rewind
@@ -139,4 +137,3 @@ NumericArrayIterator::valid(true)
NumericArrayIterator::current
NumericArrayIterator::key
4
-===DONE===
diff --git a/ext/spl/tests/iterator_005.phpt b/ext/spl/tests/iterator_005.phpt
index cacf006c5a..9f13889a18 100644
--- a/ext/spl/tests/iterator_005.phpt
+++ b/ext/spl/tests/iterator_005.phpt
@@ -5,39 +5,37 @@ SPL: IteratorIterator and ArrayIterator/Object
class ArrayIteratorEx extends ArrayIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- return parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ return parent::rewind();
+ }
}
$it = new ArrayIteratorEx(range(0,3));
foreach(new IteratorIterator($it) as $v)
{
- var_dump($v);
+ var_dump($v);
}
class ArrayObjectEx extends ArrayObject
{
- function getIterator()
- {
- echo __METHOD__ . "\n";
- return parent::getIterator();
- }
+ function getIterator()
+ {
+ echo __METHOD__ . "\n";
+ return parent::getIterator();
+ }
}
$it = new ArrayObjectEx(range(0,3));
foreach(new IteratorIterator($it) as $v)
{
- var_dump($v);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
ArrayIteratorEx::rewind
int(0)
@@ -49,4 +47,3 @@ int(0)
int(1)
int(2)
int(3)
-===DONE===
diff --git a/ext/spl/tests/iterator_006.phpt b/ext/spl/tests/iterator_006.phpt
index 794eca0da9..78c597a795 100644
--- a/ext/spl/tests/iterator_006.phpt
+++ b/ext/spl/tests/iterator_006.phpt
@@ -13,12 +13,9 @@ $root = simplexml_load_string('<?xml version="1.0"?>
');
foreach (new IteratorIterator($root->child) as $child) {
- echo $child."\n";
+ echo $child."\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Hello
World
-===DONE===
diff --git a/ext/spl/tests/iterator_007.phpt b/ext/spl/tests/iterator_007.phpt
index d26c01ef79..8fb503c79a 100644
--- a/ext/spl/tests/iterator_007.phpt
+++ b/ext/spl/tests/iterator_007.phpt
@@ -5,72 +5,72 @@ SPL: NoRewindIterator
class ArrayIteratorEx extends ArrayIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
- function valid()
- {
- echo __METHOD__ . "\n";
- return parent::valid();
- }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return parent::valid();
+ }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
}
class NoRewindIteratorEx extends NoRewindIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
- function valid()
- {
- echo __METHOD__ . "\n";
- return parent::valid();
- }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return parent::valid();
+ }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
}
$it = new NoRewindIteratorEx(new ArrayIteratorEx(range(0,3)));
echo "===0===\n";
foreach ($it->getInnerIterator() as $v) {
- var_dump($v);
+ var_dump($v);
}
echo "===1===\n";
foreach ($it as $v) {
- var_dump($v);
+ var_dump($v);
}
$pos =0;
@@ -79,24 +79,22 @@ $it = new NoRewindIteratorEx(new ArrayIteratorEx(range(0,3)));
echo "===2===\n";
foreach ($it as $v) {
- var_dump($v);
- if ($pos++ > 1) {
- break;
- }
+ var_dump($v);
+ if ($pos++ > 1) {
+ break;
+ }
}
echo "===3===\n";
foreach ($it as $v) {
- var_dump($v);
+ var_dump($v);
}
echo "===4===\n";
foreach ($it as $v) {
- var_dump($v);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===0===
ArrayIteratorEx::rewind
@@ -163,4 +161,3 @@ ArrayIteratorEx::valid
NoRewindIteratorEx::rewind
NoRewindIteratorEx::valid
ArrayIteratorEx::valid
-===DONE===
diff --git a/ext/spl/tests/iterator_008.phpt b/ext/spl/tests/iterator_008.phpt
index 04f8c00348..19c6038e3c 100644
--- a/ext/spl/tests/iterator_008.phpt
+++ b/ext/spl/tests/iterator_008.phpt
@@ -5,31 +5,31 @@ SPL: InfiniteIterator
class ArrayIteratorEx extends ArrayIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
- function valid()
- {
- echo __METHOD__ . "\n";
- return parent::valid();
- }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return parent::valid();
+ }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
}
$it = new InfiniteIterator(new ArrayIteratorEx(range(0,2)));
@@ -37,15 +37,13 @@ $it = new InfiniteIterator(new ArrayIteratorEx(range(0,2)));
$pos =0;
foreach ($it as $v) {
- var_dump($v);
- if ($pos++ > 5) {
- break;
- }
+ var_dump($v);
+ if ($pos++ > 5) {
+ break;
+ }
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
ArrayIteratorEx::rewind
ArrayIteratorEx::valid
@@ -86,4 +84,3 @@ ArrayIteratorEx::valid
ArrayIteratorEx::current
ArrayIteratorEx::key
int(0)
-===DONE===
diff --git a/ext/spl/tests/iterator_009.phpt b/ext/spl/tests/iterator_009.phpt
index 0bfe74ef7f..19447deac4 100644
--- a/ext/spl/tests/iterator_009.phpt
+++ b/ext/spl/tests/iterator_009.phpt
@@ -5,41 +5,38 @@ SPL: EmptyIterator
class EmptyIteratorEx extends EmptyIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
- function valid()
- {
- echo __METHOD__ . "\n";
- return parent::valid();
- }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return parent::valid();
+ }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
}
foreach (new EmptyIteratorEx() as $v) {
- var_dump($v);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
EmptyIteratorEx::rewind
EmptyIteratorEx::valid
-===DONE===
diff --git a/ext/spl/tests/iterator_010.phpt b/ext/spl/tests/iterator_010.phpt
index b8013d7311..17e901f0c1 100644
--- a/ext/spl/tests/iterator_010.phpt
+++ b/ext/spl/tests/iterator_010.phpt
@@ -7,12 +7,9 @@ echo "===EmptyIterator===\n";
foreach(new LimitIterator(new EmptyIterator(), 0, 3) as $key => $val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
?>
-===DONE===
-<?php exit(0);
--EXPECT--
===EmptyIterator===
-===DONE===
diff --git a/ext/spl/tests/iterator_011.phpt b/ext/spl/tests/iterator_011.phpt
index 62b8ed8ea9..5d814ce1f7 100644
--- a/ext/spl/tests/iterator_011.phpt
+++ b/ext/spl/tests/iterator_011.phpt
@@ -7,7 +7,7 @@ echo "===EmptyIterator===\n";
foreach(new LimitIterator(new InfiniteIterator(new EmptyIterator()), 0, 3) as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===InfiniteIterator===\n";
@@ -17,7 +17,7 @@ $it = new InfiniteIterator($it);
$it = new LimitIterator($it, 2, 5);
foreach($it as $val=>$key)
{
- echo "$val=>$key\n";
+ echo "$val=>$key\n";
}
echo "===Infinite/LimitIterator===\n";
@@ -28,12 +28,10 @@ $it = new InfiniteIterator($it);
$it = new LimitIterator($it, 2, 5);
foreach($it as $val=>$key)
{
- echo "$val=>$key\n";
+ echo "$val=>$key\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===EmptyIterator===
===InfiniteIterator===
@@ -48,4 +46,3 @@ foreach($it as $val=>$key)
1=>B
2=>C
1=>B
-===DONE===
diff --git a/ext/spl/tests/iterator_012.phpt b/ext/spl/tests/iterator_012.phpt
index 63a3fce8bf..733dc10a12 100644
--- a/ext/spl/tests/iterator_012.phpt
+++ b/ext/spl/tests/iterator_012.phpt
@@ -17,12 +17,10 @@ echo "===Foreach===\n";
foreach($it as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===Current===
0=>A
@@ -30,4 +28,3 @@ foreach($it as $key=>$val)
===Foreach===
1=>B
2=>C
-===DONE===
diff --git a/ext/spl/tests/iterator_013.phpt b/ext/spl/tests/iterator_013.phpt
index 6da31e391d..daab33ab7e 100644
--- a/ext/spl/tests/iterator_013.phpt
+++ b/ext/spl/tests/iterator_013.phpt
@@ -9,7 +9,7 @@ $it = new AppendIterator;
foreach($it as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Append===\n";
@@ -18,14 +18,14 @@ $it->append(new ArrayIterator(array(0 => 'A', 1 => 'B')));
foreach($it as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Rewind===\n";
foreach($it as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Append===\n";
@@ -34,19 +34,17 @@ $it->append(new ArrayIterator(array(2 => 'C', 3 => 'D')));
foreach(new NoRewindIterator($it) as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
echo "===Rewind===\n";
foreach($it as $key=>$val)
{
- echo "$key=>$val\n";
+ echo "$key=>$val\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===Empty===
===Append===
@@ -63,4 +61,3 @@ foreach($it as $key=>$val)
1=>B
2=>C
3=>D
-===DONE===
diff --git a/ext/spl/tests/iterator_014.phpt b/ext/spl/tests/iterator_014.phpt
index 119fad05fb..363b2916fe 100644
--- a/ext/spl/tests/iterator_014.phpt
+++ b/ext/spl/tests/iterator_014.phpt
@@ -5,76 +5,74 @@ SPL: RecursiveIteratorIterator and beginChildren/endChildren
class MyRecursiveArrayIterator extends RecursiveArrayIterator
{
- function valid()
- {
- if (!parent::valid())
- {
- echo __METHOD__ . " = false\n";
- return false;
- }
- else
- {
- return true;
- }
- }
+ function valid()
+ {
+ if (!parent::valid())
+ {
+ echo __METHOD__ . " = false\n";
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
- function getChildren()
- {
- echo __METHOD__ . "\n";
- return parent::getChildren();
- }
+ function getChildren()
+ {
+ echo __METHOD__ . "\n";
+ return parent::getChildren();
+ }
}
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
- function valid()
- {
- echo __METHOD__ . "\n";
- return parent::valid();
- }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return parent::valid();
+ }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
- function beginChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function beginChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
- function endChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function endChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
}
foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"))), array("ca"), "d"))) as $k=>$v)
{
- echo "$k=>$v\n";
+ echo "$k=>$v\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
RecursiveArrayIteratorIterator::rewind
RecursiveArrayIteratorIterator::valid
@@ -135,4 +133,3 @@ RecursiveArrayIteratorIterator::next
MyRecursiveArrayIterator::valid = false
RecursiveArrayIteratorIterator::valid
MyRecursiveArrayIterator::valid = false
-===DONE===
diff --git a/ext/spl/tests/iterator_015.phpt b/ext/spl/tests/iterator_015.phpt
index bce00ae4d5..f83366bb1c 100644
--- a/ext/spl/tests/iterator_015.phpt
+++ b/ext/spl/tests/iterator_015.phpt
@@ -5,28 +5,28 @@ SPL: RecursiveIteratorIterator and beginChildren/endChildren
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
{
- function rewind()
- {
- echo "<ul>\n";
- parent::rewind();
- }
- function beginChildren()
- {
- echo str_repeat(' ',$this->getDepth())."<ul>\n";
- }
+ function rewind()
+ {
+ echo "<ul>\n";
+ parent::rewind();
+ }
+ function beginChildren()
+ {
+ echo str_repeat(' ',$this->getDepth())."<ul>\n";
+ }
- function endChildren()
- {
- echo str_repeat(' ',$this->getDepth())."</ul>\n";
- }
- function valid()
- {
- if (!parent::valid()) {
- echo "<ul>\n";
- return false;
- }
- return true;
- }
+ function endChildren()
+ {
+ echo str_repeat(' ',$this->getDepth())."</ul>\n";
+ }
+ function valid()
+ {
+ if (!parent::valid()) {
+ echo "<ul>\n";
+ return false;
+ }
+ return true;
+ }
}
$arr = array("a", array("ba", array("bba", "bbb"), array(array("bcaa"))), array("ca"), "d");
@@ -34,11 +34,9 @@ $obj = new RecursiveArrayIterator($arr);
$rit = new RecursiveArrayIteratorIterator($obj);
foreach($rit as $k=>$v)
{
- echo str_repeat(' ',$rit->getDepth()+1)."$k=>$v\n";
+ echo str_repeat(' ',$rit->getDepth()+1)."$k=>$v\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
<ul>
0=>a
@@ -59,4 +57,3 @@ foreach($rit as $k=>$v)
</ul>
3=>d
<ul>
-===DONE===
diff --git a/ext/spl/tests/iterator_016.phpt b/ext/spl/tests/iterator_016.phpt
index 77ffae83b0..966c05d989 100644
--- a/ext/spl/tests/iterator_016.phpt
+++ b/ext/spl/tests/iterator_016.phpt
@@ -5,41 +5,41 @@ SPL: RecursiveIteratorIterator and beginChildren/endChildren
class Menu extends ArrayObject
{
- function getIterator()
- {
- echo __METHOD__ . "\n";
- return new RecursiveArrayIterator($this);
- }
+ function getIterator()
+ {
+ echo __METHOD__ . "\n";
+ return new RecursiveArrayIterator($this);
+ }
}
class MenuOutput extends RecursiveIteratorIterator
{
- function __construct(Menu $it)
- {
- parent::__construct($it);
- }
- function rewind()
- {
- echo "<ul>\n";
- parent::rewind();
- }
- function beginChildren()
- {
- echo str_repeat(' ',$this->getDepth())."<ul>\n";
- }
+ function __construct(Menu $it)
+ {
+ parent::__construct($it);
+ }
+ function rewind()
+ {
+ echo "<ul>\n";
+ parent::rewind();
+ }
+ function beginChildren()
+ {
+ echo str_repeat(' ',$this->getDepth())."<ul>\n";
+ }
- function endChildren()
- {
- echo str_repeat(' ',$this->getDepth())."</ul>\n";
- }
- function valid()
- {
- if (!parent::valid()) {
- echo "<ul>\n";
- return false;
- }
- return true;
- }
+ function endChildren()
+ {
+ echo str_repeat(' ',$this->getDepth())."</ul>\n";
+ }
+ function valid()
+ {
+ if (!parent::valid()) {
+ echo "<ul>\n";
+ return false;
+ }
+ return true;
+ }
}
$arr = array("a", array("ba", array("bba", "bbb"), array(array("bcaa"))), array("ca"), "d");
@@ -47,11 +47,9 @@ $obj = new Menu($arr);
$rit = new MenuOutput($obj);
foreach($rit as $k=>$v)
{
- echo str_repeat(' ',$rit->getDepth()+1)."$k=>$v\n";
+ echo str_repeat(' ',$rit->getDepth()+1)."$k=>$v\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Menu::getIterator
<ul>
@@ -73,4 +71,3 @@ Menu::getIterator
</ul>
3=>d
<ul>
-===DONE===
diff --git a/ext/spl/tests/iterator_018.phpt b/ext/spl/tests/iterator_018.phpt
deleted file mode 100644
index 618988630d..0000000000
--- a/ext/spl/tests/iterator_018.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-SPL: InfiniteIterator
---FILE--
-<?php
-
-echo "===EmptyIterator===\n";
-
-foreach(new LimitIterator(new InfiniteIterator(new EmptyIterator()), 0, 3) as $key=>$val)
-{
- echo "$key=>$val\n";
-}
-
-echo "===InfiniteIterator===\n";
-
-$it = new ArrayIterator(array(0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D'));
-$it = new InfiniteIterator($it);
-$it = new LimitIterator($it, 2, 5);
-foreach($it as $val=>$key)
-{
- echo "$val=>$key\n";
-}
-
-echo "===Infinite/LimitIterator===\n";
-
-$it = new ArrayIterator(array(0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D'));
-$it = new LimitIterator($it, 1, 2);
-$it = new InfiniteIterator($it);
-$it = new LimitIterator($it, 2, 5);
-foreach($it as $val=>$key)
-{
- echo "$val=>$key\n";
-}
-
-?>
-===DONE===
-<?php exit(0);
---EXPECT--
-===EmptyIterator===
-===InfiniteIterator===
-2=>C
-3=>D
-0=>A
-1=>B
-2=>C
-===Infinite/LimitIterator===
-1=>B
-2=>C
-1=>B
-2=>C
-1=>B
-===DONE===
diff --git a/ext/spl/tests/iterator_021.phpt b/ext/spl/tests/iterator_021.phpt
index 4f2395a8e5..433ced95e7 100644
--- a/ext/spl/tests/iterator_021.phpt
+++ b/ext/spl/tests/iterator_021.phpt
@@ -5,109 +5,107 @@ SPL: RecursiveIteratorIterator and hasChildren
class MyRecursiveArrayIterator extends RecursiveArrayIterator
{
- function valid()
- {
- if (!parent::valid())
- {
- echo __METHOD__ . " = false\n";
- return false;
- }
- else
- {
- return true;
- }
- }
+ function valid()
+ {
+ if (!parent::valid())
+ {
+ echo __METHOD__ . " = false\n";
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
- function getChildren()
- {
- echo __METHOD__ . "\n";
- return parent::getChildren();
- }
+ function getChildren()
+ {
+ echo __METHOD__ . "\n";
+ return parent::getChildren();
+ }
}
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
{
- private $max_depth;
- private $over = 0;
- private $skip = false;
+ private $max_depth;
+ private $over = 0;
+ private $skip = false;
- function __construct($it, $max_depth)
- {
- $this->max_depth = $max_depth;
- parent::__construct($it);
- }
+ function __construct($it, $max_depth)
+ {
+ $this->max_depth = $max_depth;
+ parent::__construct($it);
+ }
- function rewind()
- {
- echo __METHOD__ . "\n";
- $this->skip = false;
- parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->skip = false;
+ parent::rewind();
+ }
- function valid()
- {
- echo __METHOD__ . "\n";
- if ($this->skip)
- {
- $this->skip = false;
- $this->next();
- }
- return parent::valid();
- }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ if ($this->skip)
+ {
+ $this->skip = false;
+ $this->next();
+ }
+ return parent::valid();
+ }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
- function callHasChildren()
- {
- $this->skip = false;
- $has = parent::callHasChildren();
- $res = $this->getDepth() < $this->max_depth && $has;
- echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
- if ($has && !$res)
- {
- $this->over++;
- if ($this->over == 2) {
- $this->skip = true;
- }
- }
- return $res;
- }
+ function callHasChildren()
+ {
+ $this->skip = false;
+ $has = parent::callHasChildren();
+ $res = $this->getDepth() < $this->max_depth && $has;
+ echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
+ if ($has && !$res)
+ {
+ $this->over++;
+ if ($this->over == 2) {
+ $this->skip = true;
+ }
+ }
+ return $res;
+ }
- function beginChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function beginChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
- function endChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function endChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
}
foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2) as $k=>$v)
{
- if (is_array($v)) $v = join('',$v);
- echo "$k=>$v\n";
+ if (is_array($v)) $v = join('',$v);
+ echo "$k=>$v\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
RecursiveArrayIteratorIterator::rewind
RecursiveArrayIteratorIterator::callHasChildren(0) = no/no
@@ -177,4 +175,3 @@ RecursiveArrayIteratorIterator::next
MyRecursiveArrayIterator::valid = false
RecursiveArrayIteratorIterator::valid
MyRecursiveArrayIterator::valid = false
-===DONE===
diff --git a/ext/spl/tests/iterator_022.phpt b/ext/spl/tests/iterator_022.phpt
index f0831d5799..ae79932828 100644
--- a/ext/spl/tests/iterator_022.phpt
+++ b/ext/spl/tests/iterator_022.phpt
@@ -5,128 +5,126 @@ SPL: RecursiveIteratorIterator and callHasChildren/callGetChildren
class MyRecursiveArrayIterator extends RecursiveArrayIterator
{
- function getChildren()
- {
- echo __METHOD__ . "\n";
- return $this->current();
- }
+ function getChildren()
+ {
+ echo __METHOD__ . "\n";
+ return $this->current();
+ }
- function valid()
- {
- if (!parent::valid())
- {
- echo __METHOD__ . " = false\n";
- return false;
- }
- else
- {
- return true;
- }
- }
+ function valid()
+ {
+ if (!parent::valid())
+ {
+ echo __METHOD__ . " = false\n";
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
}
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
{
- private $max_depth;
- private $over = 0;
- private $skip = false;
+ private $max_depth;
+ private $over = 0;
+ private $skip = false;
- function __construct($it, $max_depth)
- {
- $this->max_depth = $max_depth;
- parent::__construct($it);
- }
+ function __construct($it, $max_depth)
+ {
+ $this->max_depth = $max_depth;
+ parent::__construct($it);
+ }
- function rewind()
- {
- echo __METHOD__ . "\n";
- $this->skip = false;
- parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->skip = false;
+ parent::rewind();
+ }
- function valid()
- {
- echo __METHOD__ . "\n";
- if ($this->skip)
- {
- $this->skip = false;
- $this->next();
- }
- return parent::valid();
- }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ if ($this->skip)
+ {
+ $this->skip = false;
+ $this->next();
+ }
+ return parent::valid();
+ }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
- function callHasChildren()
- {
- $this->skip = false;
- $has = parent::callHasChildren();
- $res = $this->getDepth() < $this->max_depth && $has;
- echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
- if ($has && !$res)
- {
- $this->over++;
- if ($this->over == 2) {
- $this->skip = true;
- }
- }
- return $res;
- }
+ function callHasChildren()
+ {
+ $this->skip = false;
+ $has = parent::callHasChildren();
+ $res = $this->getDepth() < $this->max_depth && $has;
+ echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
+ if ($has && !$res)
+ {
+ $this->over++;
+ if ($this->over == 2) {
+ $this->skip = true;
+ }
+ }
+ return $res;
+ }
- function callGetChildren()
- {
- if ($this->over == 2)
- {
- echo __METHOD__ . "(skip)\n";
- return NULL;
- }
- echo __METHOD__ . "(ok:{$this->over})\n";
- return new MyRecursiveArrayIterator($this->current());
- }
+ function callGetChildren()
+ {
+ if ($this->over == 2)
+ {
+ echo __METHOD__ . "(skip)\n";
+ return NULL;
+ }
+ echo __METHOD__ . "(ok:{$this->over})\n";
+ return new MyRecursiveArrayIterator($this->current());
+ }
- function beginChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function beginChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
- function endChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function endChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
}
try
{
- foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2) as $k=>$v)
- {
- if (is_array($v)) $v = join('',$v);
- echo "$k=>$v\n";
- }
+ foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2) as $k=>$v)
+ {
+ if (is_array($v)) $v = join('',$v);
+ echo "$k=>$v\n";
+ }
}
catch(UnexpectedValueException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
RecursiveArrayIteratorIterator::rewind
RecursiveArrayIteratorIterator::callHasChildren(0) = no/no
@@ -183,4 +181,3 @@ RecursiveArrayIteratorIterator::endChildren(1)
RecursiveArrayIteratorIterator::callHasChildren(0) = yes/yes
RecursiveArrayIteratorIterator::callGetChildren(skip)
Objects returned by RecursiveIterator::getChildren() must implement RecursiveIterator
-===DONE===
diff --git a/ext/spl/tests/iterator_023.phpt b/ext/spl/tests/iterator_023.phpt
index c11a7355cf..b75b2bcb7a 100644
--- a/ext/spl/tests/iterator_023.phpt
+++ b/ext/spl/tests/iterator_023.phpt
@@ -5,128 +5,126 @@ SPL: RecursiveIteratorIterator and catch getChildren
class MyRecursiveArrayIterator extends RecursiveArrayIterator
{
- function getChildren()
- {
- echo __METHOD__ . "\n";
- return $this->current();
- }
+ function getChildren()
+ {
+ echo __METHOD__ . "\n";
+ return $this->current();
+ }
- function valid()
- {
- if (!parent::valid())
- {
- echo __METHOD__ . " = false\n";
- return false;
- }
- else
- {
- return true;
- }
- }
+ function valid()
+ {
+ if (!parent::valid())
+ {
+ echo __METHOD__ . " = false\n";
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
}
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
{
- private $max_depth;
- private $over = 0;
- private $skip = false;
+ private $max_depth;
+ private $over = 0;
+ private $skip = false;
- function __construct($it, $max_depth)
- {
- $this->max_depth = $max_depth;
- parent::__construct($it, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD);
- }
+ function __construct($it, $max_depth)
+ {
+ $this->max_depth = $max_depth;
+ parent::__construct($it, RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD);
+ }
- function rewind()
- {
- echo __METHOD__ . "\n";
- $this->skip = false;
- parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->skip = false;
+ parent::rewind();
+ }
- function valid()
- {
- echo __METHOD__ . "\n";
- if ($this->skip)
- {
- $this->skip = false;
- $this->next();
- }
- return parent::valid();
- }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ if ($this->skip)
+ {
+ $this->skip = false;
+ $this->next();
+ }
+ return parent::valid();
+ }
- function current()
- {
- echo __METHOD__ . "\n";
- return parent::current();
- }
+ function current()
+ {
+ echo __METHOD__ . "\n";
+ return parent::current();
+ }
- function key()
- {
- echo __METHOD__ . "\n";
- return parent::key();
- }
+ function key()
+ {
+ echo __METHOD__ . "\n";
+ return parent::key();
+ }
- function next()
- {
- echo __METHOD__ . "\n";
- parent::next();
- }
+ function next()
+ {
+ echo __METHOD__ . "\n";
+ parent::next();
+ }
- function callHasChildren()
- {
- $this->skip = false;
- $has = parent::callHasChildren();
- $res = $this->getDepth() < $this->max_depth && $has;
- echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
- if ($has && !$res)
- {
- $this->over++;
- if ($this->over == 2) {
- $this->skip = true;
- }
- }
- return $res;
- }
+ function callHasChildren()
+ {
+ $this->skip = false;
+ $has = parent::callHasChildren();
+ $res = $this->getDepth() < $this->max_depth && $has;
+ echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
+ if ($has && !$res)
+ {
+ $this->over++;
+ if ($this->over == 2) {
+ $this->skip = true;
+ }
+ }
+ return $res;
+ }
- function callGetChildren()
- {
- if ($this->over == 2)
- {
- echo __METHOD__ . "(throw)\n";
- throw new Exception("Thrown in callGetChildren()");
- }
- echo __METHOD__ . "(ok:{$this->over})\n";
- return new MyRecursiveArrayIterator($this->current());
- }
+ function callGetChildren()
+ {
+ if ($this->over == 2)
+ {
+ echo __METHOD__ . "(throw)\n";
+ throw new Exception("Thrown in callGetChildren()");
+ }
+ echo __METHOD__ . "(ok:{$this->over})\n";
+ return new MyRecursiveArrayIterator($this->current());
+ }
- function beginChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function beginChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
- function endChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- }
+ function endChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ }
}
try
{
- foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2) as $k=>$v)
- {
- if (is_array($v)) $v = join('',$v);
- echo "$k=>$v\n";
- }
+ foreach(new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2) as $k=>$v)
+ {
+ if (is_array($v)) $v = join('',$v);
+ echo "$k=>$v\n";
+ }
}
catch(UnexpectedValueException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
RecursiveArrayIteratorIterator::rewind
RecursiveArrayIteratorIterator::callHasChildren(0) = no/no
@@ -190,4 +188,3 @@ RecursiveArrayIteratorIterator::next
MyRecursiveArrayIterator::valid = false
RecursiveArrayIteratorIterator::valid
MyRecursiveArrayIterator::valid = false
-===DONE===
diff --git a/ext/spl/tests/iterator_024.phpt b/ext/spl/tests/iterator_024.phpt
index 0c7dea15bc..21f0216d9b 100644
--- a/ext/spl/tests/iterator_024.phpt
+++ b/ext/spl/tests/iterator_024.phpt
@@ -12,11 +12,11 @@ var_dump($it->getIteratorClass());
try
{
- foreach(new RecursiveIteratorIterator(new ArrayObject($ar)) as $v) echo "$v\n";
+ foreach(new RecursiveIteratorIterator(new ArrayObject($ar)) as $v) echo "$v\n";
}
catch (InvalidArgumentException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
echo "===MANUAL===\n";
@@ -27,8 +27,6 @@ foreach(new RecursiveIteratorIterator($it) as $v) echo "$v\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1
2
@@ -46,4 +44,3 @@ string(22) "RecursiveArrayIterator"
32
331
4
-===DONE===
diff --git a/ext/spl/tests/iterator_025.phpt b/ext/spl/tests/iterator_025.phpt
index 623a4cbcf4..f3df902a64 100644
--- a/ext/spl/tests/iterator_025.phpt
+++ b/ext/spl/tests/iterator_025.phpt
@@ -5,15 +5,15 @@ SPL: RecursiveIteratorIterator and begin/endIteration()
class MyRecursiveIteratorIterator extends RecursiveIteratorIterator
{
- function beginIteration()
- {
- echo __METHOD__ . "()\n";
- }
+ function beginIteration()
+ {
+ echo __METHOD__ . "()\n";
+ }
- function endIteration()
- {
- echo __METHOD__ . "()\n";
- }
+ function endIteration()
+ {
+ echo __METHOD__ . "()\n";
+ }
}
$ar = array(1, 2, array(31, 32, array(331)), 4);
@@ -37,20 +37,18 @@ echo "===MANUAL===\n";
$it->rewind();
while($it->valid())
{
- echo $it->current() . "\n";
- $it->next();
- break;
+ echo $it->current() . "\n";
+ $it->next();
+ break;
}
$it->rewind();
while($it->valid())
{
- echo $it->current() . "\n";
- $it->next();
+ echo $it->current() . "\n";
+ $it->next();
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
MyRecursiveIteratorIterator::beginIteration()
1
@@ -89,4 +87,3 @@ MyRecursiveIteratorIterator::beginIteration()
331
4
MyRecursiveIteratorIterator::endIteration()
-===DONE===
diff --git a/ext/spl/tests/iterator_026.phpt b/ext/spl/tests/iterator_026.phpt
index 8eb77a7baf..1117b65f8a 100644
--- a/ext/spl/tests/iterator_026.phpt
+++ b/ext/spl/tests/iterator_026.phpt
@@ -11,28 +11,25 @@ $it = new RecursiveIteratorIterator($it);
foreach($it as $k=>$v)
{
- echo "$k=>$v\n";
- echo "hasNext: " . ($it->getInnerIterator()->hasNext() ? "yes" : "no") . "\n";
+ echo "$k=>$v\n";
+ echo "hasNext: " . ($it->getInnerIterator()->hasNext() ? "yes" : "no") . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
0=>1
hasNext: yes
1=>2
hasNext: yes
-Notice: Array to string conversion in %siterator_026.php on line %d
+Warning: Array to string conversion in %s on line %d
0=>31
hasNext: yes
1=>32
hasNext: yes
-Notice: Array to string conversion in %siterator_026.php on line %d
+Warning: Array to string conversion in %s on line %d
0=>331
hasNext: no
3=>4
hasNext: no
-===DONE===
diff --git a/ext/spl/tests/iterator_027.phpt b/ext/spl/tests/iterator_027.phpt
index fd9ba70c0f..1bd6990493 100644
--- a/ext/spl/tests/iterator_027.phpt
+++ b/ext/spl/tests/iterator_027.phpt
@@ -11,17 +11,17 @@ $it = new CachingIterator($it, CachingIterator::FULL_CACHE);
foreach($it as $k=>$v)
{
- echo "$k=>$v\n";
+ echo "$k=>$v\n";
}
echo "===CHECK===\n";
for ($i = 0; $i < 4; $i++)
{
- if (isset($it[$i]))
- {
- var_dump($i, $it[$i]);
- }
+ if (isset($it[$i]))
+ {
+ var_dump($i, $it[$i]);
+ }
}
$it[2] = 'foo';
@@ -51,8 +51,6 @@ var_dump(isset($it[2])); // unset
var_dump(isset($it[3])); // deleted
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
0=>1
1=>2
@@ -80,4 +78,3 @@ bool(true)
bool(false)
bool(false)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/iterator_028.phpt b/ext/spl/tests/iterator_028.phpt
index 8b53b2123a..92e00b4f78 100644
--- a/ext/spl/tests/iterator_028.phpt
+++ b/ext/spl/tests/iterator_028.phpt
@@ -39,19 +39,14 @@ foreach($it as $v) echo $it->getDepth() . ": $v\n";
echo "===-1===\n";
$it->setMaxDepth(-1);
var_dump($it->getMaxDepth());
-try
-{
- $it->setMaxDepth(4);
- $it->setMaxDepth(-2);
-}
-catch(Exception $e)
-{
- var_dump($e->getMessage());
+$it->setMaxDepth(4);
+try {
+ $it->setMaxDepth(-2);
+} catch(\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
var_dump($it->getMaxDepth());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===?===
bool(false)
@@ -107,6 +102,5 @@ int(0)
0: 4
===-1===
bool(false)
-string(33) "Parameter max_depth must be >= -1"
+RecursiveIteratorIterator::setMaxDepth(): Argument #1 ($maxDepth) must be greater than or equal to -1
int(4)
-===DONE===
diff --git a/ext/spl/tests/iterator_029.phpt b/ext/spl/tests/iterator_029.phpt
index e5bfde0219..a6f79343c7 100644
--- a/ext/spl/tests/iterator_029.phpt
+++ b/ext/spl/tests/iterator_029.phpt
@@ -7,7 +7,7 @@ $ar = array(0, "123", 123, 22 => "abc", "a2b", 22, "a2d" => 7, 42);
foreach(new RegexIterator(new ArrayIterator($ar), "/2/") as $k => $v)
{
- echo "$k=>$v\n";
+ echo "$k=>$v\n";
}
?>
@@ -16,12 +16,10 @@ foreach(new RegexIterator(new ArrayIterator($ar), "/2/") as $k => $v)
foreach(new RegexIterator(new ArrayIterator($ar), "/2/", 0, RegexIterator::USE_KEY) as $k => $v)
{
- echo "$k=>$v\n";
+ echo "$k=>$v\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1=>123
2=>123
@@ -35,4 +33,3 @@ foreach(new RegexIterator(new ArrayIterator($ar), "/2/", 0, RegexIterator::USE_K
24=>22
a2d=>7
25=>42
-===DONE===
diff --git a/ext/spl/tests/iterator_030.phpt b/ext/spl/tests/iterator_030.phpt
index 29d147f12b..6a684ec300 100644
--- a/ext/spl/tests/iterator_030.phpt
+++ b/ext/spl/tests/iterator_030.phpt
@@ -13,27 +13,25 @@ var_dump($it->valid());
try
{
- var_dump($it->key());
+ var_dump($it->key());
}
catch(BadMethodCallException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
try
{
- var_dump($it->current());
+ var_dump($it->current());
}
catch(BadMethodCallException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
var_dump($it->valid());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
bool(false)
bool(false)
@@ -41,4 +39,3 @@ bool(false)
Accessing the key of an EmptyIterator
Accessing the value of an EmptyIterator
bool(false)
-===DONE===
diff --git a/ext/spl/tests/iterator_031.phpt b/ext/spl/tests/iterator_031.phpt
index da91469f08..d1aed21ac0 100644
--- a/ext/spl/tests/iterator_031.phpt
+++ b/ext/spl/tests/iterator_031.phpt
@@ -5,71 +5,71 @@ SPL: AppendIterator::append() rewinds when necessary
class MyArrayIterator extends ArrayIterator
{
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
}
$it = new MyArrayIterator(array(1,2));
foreach($it as $k=>$v)
{
- echo "$k=>$v\n";
+ echo "$k=>$v\n";
}
class MyAppendIterator extends AppendIterator
{
- function __construct()
- {
- echo __METHOD__ . "\n";
- }
+ function __construct()
+ {
+ echo __METHOD__ . "\n";
+ }
- function rewind()
- {
- echo __METHOD__ . "\n";
- parent::rewind();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "\n";
+ parent::rewind();
+ }
- function valid()
- {
- echo __METHOD__ . "\n";
- return parent::valid();
- }
+ function valid()
+ {
+ echo __METHOD__ . "\n";
+ return parent::valid();
+ }
- function append(Iterator $what)
- {
- echo __METHOD__ . "\n";
- parent::append($what);
- }
+ function append(Iterator $what)
+ {
+ echo __METHOD__ . "\n";
+ parent::append($what);
+ }
- function parent__construct()
- {
- parent::__construct();
- }
+ function parent__construct()
+ {
+ parent::__construct();
+ }
}
$ap = new MyAppendIterator;
try
{
- $ap->append($it);
+ $ap->append($it);
}
-catch(LogicException $e)
+catch(\Error $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
$ap->parent__construct();
try
{
- $ap->parent__construct($it);
+ $ap->parent__construct($it);
}
catch(BadMethodCallException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
$ap->append($it);
@@ -78,12 +78,10 @@ $ap->append($it);
foreach($ap as $k=>$v)
{
- echo "$k=>$v\n";
+ echo "$k=>$v\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
MyArrayIterator::rewind
0=>1
@@ -113,4 +111,3 @@ MyAppendIterator::valid
MyAppendIterator::valid
1=>2
MyAppendIterator::valid
-===DONE===
diff --git a/ext/spl/tests/iterator_032.phpt b/ext/spl/tests/iterator_032.phpt
index 84eb8e61fb..9f56d7574d 100644
--- a/ext/spl/tests/iterator_032.phpt
+++ b/ext/spl/tests/iterator_032.phpt
@@ -7,17 +7,17 @@ $it = new LimitIterator(new ArrayIterator(array(1,2,3,4)), 1, 2);
foreach($it as $k=>$v)
{
- echo "$k=>$v\n";
- var_dump($it->getPosition());
+ echo "$k=>$v\n";
+ var_dump($it->getPosition());
}
try
{
- $it->seek(0);
+ $it->seek(0);
}
catch(OutOfBoundsException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
$it->seek(2);
@@ -25,19 +25,17 @@ var_dump($it->current());
try
{
- $it->seek(3);
+ $it->seek(3);
}
catch(OutOfBoundsException $e)
{
- echo $e->getMessage() . "\n";
+ echo $e->getMessage() . "\n";
}
$it->next();
var_dump($it->valid());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
1=>2
int(1)
@@ -47,4 +45,3 @@ Cannot seek to 0 which is below the offset 1
int(3)
Cannot seek to 3 which is behind offset 1 plus count 2
bool(false)
-===DONE===
diff --git a/ext/spl/tests/iterator_033.phpt b/ext/spl/tests/iterator_033.phpt
index 548759ccbb..7e1f93a6ee 100644
--- a/ext/spl/tests/iterator_033.phpt
+++ b/ext/spl/tests/iterator_033.phpt
@@ -7,21 +7,19 @@ $it = new ParentIterator(new RecursiveArrayIterator(array(1,array(21,22, array(2
foreach(new RecursiveIteratorIterator($it) as $k=>$v)
{
- var_dump($k);
- var_dump($v);
+ var_dump($k);
+ var_dump($v);
}
echo "==SECOND==\n";
foreach(new RecursiveIteratorIterator($it, 1) as $k=>$v)
{
- var_dump($k);
- var_dump($v);
+ var_dump($k);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
==SECOND==
int(1)
@@ -41,4 +39,3 @@ array(1) {
[0]=>
int(231)
}
-===DONE===
diff --git a/ext/spl/tests/iterator_034.phpt b/ext/spl/tests/iterator_034.phpt
index 84b15d4eec..76cc9589ce 100644
--- a/ext/spl/tests/iterator_034.phpt
+++ b/ext/spl/tests/iterator_034.phpt
@@ -5,106 +5,106 @@ SPL: RecursiveIteratorIterator and break deep
class MyRecursiveArrayIterator extends RecursiveArrayIterator
{
- function valid()
- {
- if (!parent::valid())
- {
- echo __METHOD__ . "() = false\n";
- return false;
- }
- else
- {
- return true;
- }
- }
-
- function getChildren()
- {
- echo __METHOD__ . "()\n";
- return parent::getChildren();
- }
-
- function rewind()
- {
- echo __METHOD__ . "()\n";
- parent::rewind();
- }
+ function valid()
+ {
+ if (!parent::valid())
+ {
+ echo __METHOD__ . "() = false\n";
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+ function getChildren()
+ {
+ echo __METHOD__ . "()\n";
+ return parent::getChildren();
+ }
+
+ function rewind()
+ {
+ echo __METHOD__ . "()\n";
+ parent::rewind();
+ }
}
class RecursiveArrayIteratorIterator extends RecursiveIteratorIterator
{
- private $max_depth;
- private $over = 0;
-
- function __construct($it, $max_depth)
- {
- $this->max_depth = $max_depth;
- parent::__construct($it);
- }
-
- function rewind()
- {
- echo __METHOD__ . "() - BEGIN\n";
- parent::rewind();
- echo __METHOD__ . "() - DONE\n";
- }
-
- function valid()
- {
- echo __METHOD__ . "()\n";
- return parent::valid();
- }
-
- function current()
- {
- echo __METHOD__ . "()\n";
- return parent::current();
- }
-
- function key()
- {
- echo __METHOD__ . "()\n";
- return parent::key();
- }
-
- function next()
- {
- echo __METHOD__ . "()\n";
- parent::next();
- }
-
- function callHasChildren()
- {
- $has = parent::callHasChildren();
- $res = $this->getDepth() < $this->max_depth && $has;
- echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
- return $res;
- }
-
- function beginChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- parent::beginChildren();
- }
-
- function endChildren()
- {
- echo __METHOD__ . "(".$this->getDepth().")\n";
- parent::endChildren();
- }
+ private $max_depth;
+ private $over = 0;
+
+ function __construct($it, $max_depth)
+ {
+ $this->max_depth = $max_depth;
+ parent::__construct($it);
+ }
+
+ function rewind()
+ {
+ echo __METHOD__ . "() - BEGIN\n";
+ parent::rewind();
+ echo __METHOD__ . "() - DONE\n";
+ }
+
+ function valid()
+ {
+ echo __METHOD__ . "()\n";
+ return parent::valid();
+ }
+
+ function current()
+ {
+ echo __METHOD__ . "()\n";
+ return parent::current();
+ }
+
+ function key()
+ {
+ echo __METHOD__ . "()\n";
+ return parent::key();
+ }
+
+ function next()
+ {
+ echo __METHOD__ . "()\n";
+ parent::next();
+ }
+
+ function callHasChildren()
+ {
+ $has = parent::callHasChildren();
+ $res = $this->getDepth() < $this->max_depth && $has;
+ echo __METHOD__ . "(".$this->getDepth().") = ".($res?"yes":"no")."/".($has?"yes":"no")."\n";
+ return $res;
+ }
+
+ function beginChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ parent::beginChildren();
+ }
+
+ function endChildren()
+ {
+ echo __METHOD__ . "(".$this->getDepth().")\n";
+ parent::endChildren();
+ }
}
$p = 0;
$it = new RecursiveArrayIteratorIterator(new MyRecursiveArrayIterator(array("a", array("ba", array("bba", "bbb"), array(array("bcaa"), array("bcba"))), array("ca"), "d")), 2);
foreach($it as $k=>$v)
{
- if (is_array($v)) $v = join('',$v);
- echo "$k=>$v\n";
- if ($p++ == 5)
- {
- echo "===BREAK===\n";
- break;
- }
+ if (is_array($v)) $v = join('',$v);
+ echo "$k=>$v\n";
+ if ($p++ == 5)
+ {
+ echo "===BREAK===\n";
+ break;
+ }
}
echo "===FOREND===\n";
@@ -117,8 +117,6 @@ var_dump($it->valid());
var_dump($it->current() == "a");
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
RecursiveArrayIteratorIterator::rewind() - BEGIN
MyRecursiveArrayIterator::rewind()
@@ -185,4 +183,3 @@ RecursiveArrayIteratorIterator::valid()
bool(true)
RecursiveArrayIteratorIterator::current()
bool(true)
-===DONE===
diff --git a/ext/spl/tests/iterator_036.phpt b/ext/spl/tests/iterator_036.phpt
index 07a1f79134..bfe1825abe 100644
--- a/ext/spl/tests/iterator_036.phpt
+++ b/ext/spl/tests/iterator_036.phpt
@@ -5,10 +5,10 @@ SPL: CachingIterator and __toString and flags = 0
function test($it)
{
- foreach($it as $v)
- {
- var_dump((string)$it);
- }
+ foreach($it as $v)
+ {
+ var_dump((string)$it);
+ }
}
$ar = new ArrayIterator(array(1, 2, 3));
diff --git a/ext/spl/tests/iterator_037.phpt b/ext/spl/tests/iterator_037.phpt
index da8c465ca9..baa15f3684 100644
--- a/ext/spl/tests/iterator_037.phpt
+++ b/ext/spl/tests/iterator_037.phpt
@@ -5,51 +5,45 @@ SPL: CachingIterator and __toString
function test($ar, $flags)
{
- echo "===$flags===\n";
- $it = new CachingIterator($ar, 0);
- try
- {
- $it->setFlags($flags);
- }
- catch (Exception $e)
- {
- echo 'Exception: ' . $e->getMessage() . "\n";
- var_dump($it->getFlags());
- return;
- }
- var_dump($it->getFlags());
- try
- {
- foreach($it as $v)
- {
- var_dump((string)$it);
- }
- }
- catch (Exception $e)
- {
- echo 'Exception: ' . $e->getMessage() . "\n";
- }
+ echo "===$flags===\n";
+ $it = new CachingIterator($ar, 0);
+ try {
+ $it->setFlags($flags);
+ } catch (\ValueError $e) {
+ echo 'Exception: ' . $e->getMessage() . "\n";
+ var_dump($it->getFlags());
+ return;
+ }
+ var_dump($it->getFlags());
+ try {
+ foreach($it as $v)
+ {
+ var_dump((string)$it);
+ }
+ } catch (Exception $e) {
+ echo 'Exception: ' . $e->getMessage() . "\n";
+ }
}
class MyItem
{
- function __construct($value)
- {
- $this->value = $value;
- }
+ function __construct($value)
+ {
+ $this->value = $value;
+ }
- function __toString()
- {
- return (string)$this->value;
- }
+ function __toString()
+ {
+ return (string)$this->value;
+ }
}
class MyArrayIterator extends ArrayIterator
{
- function __toString()
- {
- return $this->key() . ':' . $this->current();
- }
+ function __toString()
+ {
+ return $this->key() . ':' . $this->current();
+ }
}
$ar = new MyArrayIterator(array(1, 2, 3));
@@ -70,25 +64,24 @@ test($ar, CachingIterator::TOSTRING_USE_KEY | CachingIterator::TOSTRING_USE_INNE
echo "===X===\n";
try
{
- $it = new CachingIterator($ar, CachingIterator::CALL_TOSTRING);
- $it->setFlags(0);
+ $it = new CachingIterator($ar, CachingIterator::CALL_TOSTRING);
+ $it->setFlags(0);
}
catch (Exception $e)
{
- echo 'Exception: ' . $e->getMessage() . "\n";
+ echo 'Exception: ' . $e->getMessage() . "\n";
}
try
{
- $it = new CachingIterator($ar, CachingIterator::TOSTRING_USE_INNER);
- $it->setFlags(0);
+ $it = new CachingIterator($ar, CachingIterator::TOSTRING_USE_INNER);
+ $it->setFlags(0);
}
catch (Exception $e)
{
- echo 'Exception: ' . $e->getMessage() . "\n";
+ echo 'Exception: ' . $e->getMessage() . "\n";
}
?>
-===DONE===
--EXPECT--
===1===
int(1)
@@ -111,21 +104,20 @@ string(3) "0:1"
string(3) "1:2"
string(3) "2:3"
===3===
-Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER
+Exception: CachingIterator::setFlags(): Argument #1 ($flags) must contain only one of CachingIterator::CALL_TOSTRING, CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, or CachingIterator::TOSTRING_USE_INNER
int(0)
===5===
-Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER
+Exception: CachingIterator::setFlags(): Argument #1 ($flags) must contain only one of CachingIterator::CALL_TOSTRING, CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, or CachingIterator::TOSTRING_USE_INNER
int(0)
===9===
-Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER
+Exception: CachingIterator::setFlags(): Argument #1 ($flags) must contain only one of CachingIterator::CALL_TOSTRING, CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, or CachingIterator::TOSTRING_USE_INNER
int(0)
===6===
-Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER
+Exception: CachingIterator::setFlags(): Argument #1 ($flags) must contain only one of CachingIterator::CALL_TOSTRING, CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, or CachingIterator::TOSTRING_USE_INNER
int(0)
===10===
-Exception: Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER
+Exception: CachingIterator::setFlags(): Argument #1 ($flags) must contain only one of CachingIterator::CALL_TOSTRING, CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, or CachingIterator::TOSTRING_USE_INNER
int(0)
===X===
Exception: Unsetting flag CALL_TO_STRING is not possible
Exception: Unsetting flag TOSTRING_USE_INNER is not possible
-===DONE===
diff --git a/ext/spl/tests/iterator_038.phpt b/ext/spl/tests/iterator_038.phpt
index 9b890e2662..cb4d3a3795 100644
--- a/ext/spl/tests/iterator_038.phpt
+++ b/ext/spl/tests/iterator_038.phpt
@@ -5,15 +5,13 @@ SPL: RoRewindIterator and string keys
foreach(new NoRewindIterator(new ArrayIterator(array('Hello'=>0, 'World'=>1))) as $k => $v)
{
- var_dump($v);
- var_dump($k);
+ var_dump($v);
+ var_dump($k);
}
?>
-===DONE===
--EXPECT--
int(0)
string(5) "Hello"
int(1)
string(5) "World"
-===DONE===
diff --git a/ext/spl/tests/iterator_039.phpt b/ext/spl/tests/iterator_039.phpt
index 17c9bc1ca5..18f9a24168 100644
--- a/ext/spl/tests/iterator_039.phpt
+++ b/ext/spl/tests/iterator_039.phpt
@@ -5,52 +5,52 @@ SPL: LimitIterator and backward seeking
class NumericArrayIterator implements Iterator
{
- protected $a;
- protected $i = 0;
+ protected $a;
+ protected $i = 0;
- public function __construct($a)
- {
- echo __METHOD__ . "\n";
- $this->a = $a;
- }
+ public function __construct($a)
+ {
+ echo __METHOD__ . "\n";
+ $this->a = $a;
+ }
- public function valid()
- {
- echo __METHOD__ . "\n";
- return $this->i < count($this->a);
- }
+ public function valid()
+ {
+ echo __METHOD__ . "\n";
+ return $this->i < count($this->a);
+ }
- public function rewind()
- {
- echo __METHOD__ . "\n";
- $this->i = 0;
- }
+ public function rewind()
+ {
+ echo __METHOD__ . "\n";
+ $this->i = 0;
+ }
- public function key()
- {
- echo __METHOD__ . "\n";
- return $this->i;
- }
+ public function key()
+ {
+ echo __METHOD__ . "\n";
+ return $this->i;
+ }
- public function current()
- {
- echo __METHOD__ . "\n";
- return $this->a[$this->i];
- }
+ public function current()
+ {
+ echo __METHOD__ . "\n";
+ return $this->a[$this->i];
+ }
- public function next()
- {
- echo __METHOD__ . "\n";
- $this->i++;
- }
+ public function next()
+ {
+ echo __METHOD__ . "\n";
+ $this->i++;
+ }
}
$it = new LimitIterator(new NumericArrayIterator(array(12, 25, 42, 56)));
foreach($it as $k => $v)
{
- var_dump($k);
- var_dump($v);
+ var_dump($k);
+ var_dump($v);
}
echo "===SEEK===\n";
@@ -61,13 +61,11 @@ echo "===LOOP===\n";
foreach(new NoRewindIterator($it) as $k => $v)
{
- var_dump($k);
- var_dump($v);
+ var_dump($k);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
NumericArrayIterator::__construct
NumericArrayIterator::rewind
@@ -118,4 +116,3 @@ int(3)
int(56)
NumericArrayIterator::next
NumericArrayIterator::valid
-===DONE===
diff --git a/ext/spl/tests/iterator_040.phpt b/ext/spl/tests/iterator_040.phpt
index ae00c81df3..1e8bd55764 100644
--- a/ext/spl/tests/iterator_040.phpt
+++ b/ext/spl/tests/iterator_040.phpt
@@ -5,10 +5,10 @@ SPL: RecursiveFilterIterator
class MyRecursiveFilterIterator extends RecursiveFilterIterator
{
- function accept()
- {
- return true;
- }
+ function accept()
+ {
+ return true;
+ }
}
$ar = array(1, array(21, 22), 3);
@@ -18,15 +18,13 @@ $it = new RecursiveIteratorIterator($it);
foreach($it as $k => $v)
{
- echo "===\n";
- var_dump($it->getDepth());
- var_dump($k);
- var_dump($v);
+ echo "===\n";
+ var_dump($it->getDepth());
+ var_dump($k);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===
int(0)
@@ -44,4 +42,3 @@ int(22)
int(0)
int(2)
int(3)
-===DONE===
diff --git a/ext/spl/tests/iterator_041.phpt b/ext/spl/tests/iterator_041.phpt
index e00ac6bc2b..98892c87e0 100644
--- a/ext/spl/tests/iterator_041.phpt
+++ b/ext/spl/tests/iterator_041.phpt
@@ -5,93 +5,91 @@ SPL: iterator_to_array() and exceptions
class MyArrayIterator extends ArrayIterator
{
- static protected $fail = 0;
- public $state;
+ static protected $fail = 0;
+ public $state;
- static function fail($state, $method)
- {
- if (self::$fail == $state)
- {
- throw new Exception("State $state: $method()");
- }
- }
+ static function fail($state, $method)
+ {
+ if (self::$fail == $state)
+ {
+ throw new Exception("State $state: $method()");
+ }
+ }
- function __construct()
- {
- $this->state = MyArrayIterator::$fail;
- self::fail(0, __FUNCTION__);
- parent::__construct(array(1, 2));
- self::fail(1, __FUNCTION__);
- }
+ function __construct()
+ {
+ $this->state = MyArrayIterator::$fail;
+ self::fail(0, __FUNCTION__);
+ parent::__construct(array(1, 2));
+ self::fail(1, __FUNCTION__);
+ }
- function rewind()
- {
- self::fail(2, __FUNCTION__);
- return parent::rewind();
- }
+ function rewind()
+ {
+ self::fail(2, __FUNCTION__);
+ return parent::rewind();
+ }
- function valid()
- {
- self::fail(3, __FUNCTION__);
- return parent::valid();
- }
+ function valid()
+ {
+ self::fail(3, __FUNCTION__);
+ return parent::valid();
+ }
- function current()
- {
- self::fail(4, __FUNCTION__);
- return parent::current();
- }
+ function current()
+ {
+ self::fail(4, __FUNCTION__);
+ return parent::current();
+ }
- function key()
- {
- self::fail(5, __FUNCTION__);
- return parent::key();
- }
+ function key()
+ {
+ self::fail(5, __FUNCTION__);
+ return parent::key();
+ }
- function next()
- {
- self::fail(6, __FUNCTION__);
- return parent::next();
- }
+ function next()
+ {
+ self::fail(6, __FUNCTION__);
+ return parent::next();
+ }
- function __destruct()
- {
+ function __destruct()
+ {
// self::fail(7, __FUNCTION__);
- }
+ }
- static function test($func, $skip = null)
- {
- echo "===$func===\n";
- self::$fail = 0;
- while(self::$fail < 10)
- {
- try
- {
- var_dump($func(new MyArrayIterator()));
- break;
- }
- catch (Exception $e)
- {
- echo $e->getMessage() . "\n";
- }
- if (isset($skip[self::$fail]))
- {
- self::$fail = $skip[self::$fail];
- }
- else
- {
- self::$fail++;
- }
- }
- }
+ static function test($func, $skip = null)
+ {
+ echo "===$func===\n";
+ self::$fail = 0;
+ while(self::$fail < 10)
+ {
+ try
+ {
+ var_dump($func(new MyArrayIterator()));
+ break;
+ }
+ catch (Exception $e)
+ {
+ echo $e->getMessage() . "\n";
+ }
+ if (isset($skip[self::$fail]))
+ {
+ self::$fail = $skip[self::$fail];
+ }
+ else
+ {
+ self::$fail++;
+ }
+ }
+ }
}
MyArrayIterator::test('iterator_to_array');
MyArrayIterator::test('iterator_count', array(3 => 6));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===iterator_to_array===
State 0: __construct()
@@ -114,4 +112,3 @@ State 2: rewind()
State 3: valid()
State 6: next()
int(2)
-===DONE===
diff --git a/ext/spl/tests/iterator_041a.phpt b/ext/spl/tests/iterator_041a.phpt
index ec999a5dae..37b4341297 100644
--- a/ext/spl/tests/iterator_041a.phpt
+++ b/ext/spl/tests/iterator_041a.phpt
@@ -5,93 +5,91 @@ SPL: iterator_to_array() and exceptions from destruct
class MyArrayIterator extends ArrayIterator
{
- static protected $fail = 0;
- public $state;
+ static protected $fail = 0;
+ public $state;
- static function fail($state, $method)
- {
- if (self::$fail == $state)
- {
- throw new Exception("State $state: $method()");
- }
- }
+ static function fail($state, $method)
+ {
+ if (self::$fail == $state)
+ {
+ throw new Exception("State $state: $method()");
+ }
+ }
- function __construct()
- {
- $this->state = MyArrayIterator::$fail;
- self::fail(0, __FUNCTION__);
- parent::__construct(array(1, 2));
- self::fail(1, __FUNCTION__);
- }
+ function __construct()
+ {
+ $this->state = MyArrayIterator::$fail;
+ self::fail(0, __FUNCTION__);
+ parent::__construct(array(1, 2));
+ self::fail(1, __FUNCTION__);
+ }
- function rewind()
- {
- self::fail(2, __FUNCTION__);
- return parent::rewind();
- }
+ function rewind()
+ {
+ self::fail(2, __FUNCTION__);
+ return parent::rewind();
+ }
- function valid()
- {
- self::fail(3, __FUNCTION__);
- return parent::valid();
- }
+ function valid()
+ {
+ self::fail(3, __FUNCTION__);
+ return parent::valid();
+ }
- function current()
- {
- self::fail(4, __FUNCTION__);
- return parent::current();
- }
+ function current()
+ {
+ self::fail(4, __FUNCTION__);
+ return parent::current();
+ }
- function key()
- {
- self::fail(5, __FUNCTION__);
- return parent::key();
- }
+ function key()
+ {
+ self::fail(5, __FUNCTION__);
+ return parent::key();
+ }
- function next()
- {
- self::fail(6, __FUNCTION__);
- return parent::next();
- }
+ function next()
+ {
+ self::fail(6, __FUNCTION__);
+ return parent::next();
+ }
- function __destruct()
- {
- self::fail(7, __FUNCTION__);
- }
+ function __destruct()
+ {
+ self::fail(7, __FUNCTION__);
+ }
- static function test($func, $skip = null)
- {
- echo "===$func===\n";
- self::$fail = 7;
- while(self::$fail < 10)
- {
- try
- {
- var_dump($func(new MyArrayIterator()));
- break;
- }
- catch (Exception $e)
- {
- echo $e->getMessage() . "\n";
- }
- if (isset($skip[self::$fail]))
- {
- self::$fail = $skip[self::$fail];
- }
- else
- {
- self::$fail++;
- }
- }
- }
+ static function test($func, $skip = null)
+ {
+ echo "===$func===\n";
+ self::$fail = 7;
+ while(self::$fail < 10)
+ {
+ try
+ {
+ var_dump($func(new MyArrayIterator()));
+ break;
+ }
+ catch (Exception $e)
+ {
+ echo $e->getMessage() . "\n";
+ }
+ if (isset($skip[self::$fail]))
+ {
+ self::$fail = $skip[self::$fail];
+ }
+ else
+ {
+ self::$fail++;
+ }
+ }
+ }
}
MyArrayIterator::test('iterator_to_array');
MyArrayIterator::test('iterator_count', array(3 => 6));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===iterator_to_array===
State 7: __destruct()
@@ -104,4 +102,3 @@ array(2) {
===iterator_count===
State 7: __destruct()
int(2)
-===DONE===
diff --git a/ext/spl/tests/iterator_041b.phpt b/ext/spl/tests/iterator_041b.phpt
index 8f55ade319..517b8fc5e4 100644
--- a/ext/spl/tests/iterator_041b.phpt
+++ b/ext/spl/tests/iterator_041b.phpt
@@ -5,97 +5,95 @@ SPL: iterator_to_array() and exceptions from delayed destruct
class MyArrayIterator extends ArrayIterator
{
- static protected $fail = 0;
- public $state;
+ static protected $fail = 0;
+ public $state;
- static function fail($state, $method)
- {
- if (self::$fail == $state)
- {
- throw new Exception("State $state: $method()");
- }
- }
+ static function fail($state, $method)
+ {
+ if (self::$fail == $state)
+ {
+ throw new Exception("State $state: $method()");
+ }
+ }
- function __construct()
- {
- $this->state = MyArrayIterator::$fail;
- self::fail(0, __FUNCTION__);
- parent::__construct(array(1, 2));
- self::fail(1, __FUNCTION__);
- }
+ function __construct()
+ {
+ $this->state = MyArrayIterator::$fail;
+ self::fail(0, __FUNCTION__);
+ parent::__construct(array(1, 2));
+ self::fail(1, __FUNCTION__);
+ }
- function rewind()
- {
- self::fail(2, __FUNCTION__);
- return parent::rewind();
- }
+ function rewind()
+ {
+ self::fail(2, __FUNCTION__);
+ return parent::rewind();
+ }
- function valid()
- {
- self::fail(3, __FUNCTION__);
- return parent::valid();
- }
+ function valid()
+ {
+ self::fail(3, __FUNCTION__);
+ return parent::valid();
+ }
- function current()
- {
- self::fail(4, __FUNCTION__);
- return parent::current();
- }
+ function current()
+ {
+ self::fail(4, __FUNCTION__);
+ return parent::current();
+ }
- function key()
- {
- self::fail(5, __FUNCTION__);
- return parent::key();
- }
+ function key()
+ {
+ self::fail(5, __FUNCTION__);
+ return parent::key();
+ }
- function next()
- {
- self::fail(6, __FUNCTION__);
- return parent::next();
- }
+ function next()
+ {
+ self::fail(6, __FUNCTION__);
+ return parent::next();
+ }
- function __destruct()
- {
- self::fail(7, __FUNCTION__);
- }
+ function __destruct()
+ {
+ self::fail(7, __FUNCTION__);
+ }
- static function test($func, $skip = null)
- {
- echo "===$func===\n";
- self::$fail = 0;
- while(self::$fail < 10)
- {
- try
- {
- var_dump($func(new MyArrayIterator()));
- break;
- }
- catch (Exception $e)
- {
- echo $e->getMessage() . "\n";
- }
- if (isset($skip[self::$fail]))
- {
- self::$fail = $skip[self::$fail];
- }
- else
- {
- self::$fail++;
- }
- try {
- $e = null;
- } catch (Exception $e) {
- }
- }
- }
+ static function test($func, $skip = null)
+ {
+ echo "===$func===\n";
+ self::$fail = 0;
+ while(self::$fail < 10)
+ {
+ try
+ {
+ var_dump($func(new MyArrayIterator()));
+ break;
+ }
+ catch (Exception $e)
+ {
+ echo $e->getMessage() . "\n";
+ }
+ if (isset($skip[self::$fail]))
+ {
+ self::$fail = $skip[self::$fail];
+ }
+ else
+ {
+ self::$fail++;
+ }
+ try {
+ $e = null;
+ } catch (Exception $e) {
+ }
+ }
+ }
}
MyArrayIterator::test('iterator_to_array');
MyArrayIterator::test('iterator_count', array(3 => 6));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
===iterator_to_array===
State 0: __construct()
@@ -120,4 +118,3 @@ State 3: valid()
State 6: next()
State 7: __destruct()
int(2)
-===DONE===
diff --git a/ext/spl/tests/iterator_042.phpt b/ext/spl/tests/iterator_042.phpt
index a344d60e33..4ede8afa59 100644
--- a/ext/spl/tests/iterator_042.phpt
+++ b/ext/spl/tests/iterator_042.phpt
@@ -5,8 +5,8 @@ SPL: AppendIterator and its ArrayIterator
function test_error_handler($errno, $msg, $filename, $linenum)
{
- echo "Error $msg in $filename on line $linenum\n";
- return true;
+ echo "Error $msg in $filename on line $linenum\n";
+ return true;
}
set_error_handler('test_error_handler');
@@ -14,9 +14,9 @@ set_error_handler('test_error_handler');
$it = new AppendIterator;
try {
- $it->append(array());
+ $it->append(array());
} catch (Error $e) {
- test_error_handler($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
+ test_error_handler($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
}
$it->append(new ArrayIterator(array(1)));
$it->append(new ArrayIterator(array(21, 22)));
@@ -31,17 +31,15 @@ $idx = 0;
foreach($it as $k => $v)
{
- echo '===' . $idx++ . "===\n";
- var_dump($it->getIteratorIndex());
- var_dump($k);
- var_dump($v);
+ echo '===' . $idx++ . "===\n";
+ var_dump($it->getIteratorIndex());
+ var_dump($k);
+ var_dump($v);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
-Error Argument 1 passed to AppendIterator::append() must implement interface Iterator, array given in %siterator_042.php on line %d
+Error AppendIterator::append(): Argument #1 ($iterator) must be of type Iterator, array given in %s on line %d
object(ArrayIterator)#%d (1) {
%s"storage"%s"ArrayIterator":private]=>
array(2) {
@@ -124,4 +122,3 @@ int(32)
int(2)
int(2)
int(33)
-===DONE===
diff --git a/ext/spl/tests/iterator_043.phpt b/ext/spl/tests/iterator_043.phpt
index 6dbbfdd97b..2ee75a1080 100644
--- a/ext/spl/tests/iterator_043.phpt
+++ b/ext/spl/tests/iterator_043.phpt
@@ -10,9 +10,6 @@ $it->rewind();
var_dump($it->getChildren());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
NULL
NULL
-===DONE===
diff --git a/ext/spl/tests/iterator_044.phpt b/ext/spl/tests/iterator_044.phpt
index 1271ccaa64..66f722af9a 100644
--- a/ext/spl/tests/iterator_044.phpt
+++ b/ext/spl/tests/iterator_044.phpt
@@ -5,56 +5,61 @@ SPL: CachingIterator and offsetGet/Exists using flag FULL_CACHE
class MyFoo
{
- function __toString()
- {
- return 'foo';
- }
+ function __toString()
+ {
+ return 'foo';
+ }
}
class MyCachingIterator extends CachingIterator
{
- function __construct(Iterator $it, $flags = 0)
- {
- parent::__construct($it, $flags);
- }
-
- function test($ar)
- {
- foreach($ar as $k => $v)
- {
- echo "===$k===\n";
- var_dump($v);
- var_dump($this->offsetExists($v));
- var_dump($this->offsetGet($v));
- }
- }
+ function __construct(Iterator $it, $flags = 0)
+ {
+ parent::__construct($it, $flags);
+ }
+
+ function test($ar)
+ {
+ foreach($ar as $k => $v)
+ {
+ echo "===$k===\n";
+ var_dump($v);
+ try {
+ var_dump($this->offsetExists($v));
+ } catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+ }
+ try {
+ var_dump($this->offsetGet($v));
+ } catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+ }
+ }
+ }
}
$it = new MyCachingIterator(new ArrayIterator(array(0, 'foo'=>1, 2, 'bar'=>3, 4)));
try
{
- var_dump($it->offsetExists(0));
+ var_dump($it->offsetExists(0));
}
catch(Exception $e)
{
- echo "Exception: " . $e->getMessage() . "\n";
+ echo "Exception: " . $e->getMessage() . "\n";
}
try
{
- var_dump($it->offsetGet(0));
+ var_dump($it->offsetGet(0));
}
catch(Exception $e)
{
- echo "Exception: " . $e->getMessage() . "\n";
+ echo "Exception: " . $e->getMessage() . "\n";
}
$it = new MyCachingIterator(new ArrayIterator(array(0, 'foo'=>1, 2, 'bar'=>3, 4)), CachingIterator::FULL_CACHE);
-var_dump($it->offsetExists());
-var_dump($it->offsetGet());
-
$checks = array(0, new stdClass, new MyFoo, NULL, 2, 'foo', 3);
$it->test($checks);
@@ -66,62 +71,50 @@ foreach($it as $v); // read all into cache
$it->test($checks);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
-
-Warning: CachingIterator::offsetExists() expects exactly 1 parameter, 0 given in %siterator_044.php on line %d
-NULL
-
-Warning: CachingIterator::offsetGet() expects exactly 1 parameter, 0 given in %siterator_044.php on line %d
-NULL
===0===
int(0)
bool(false)
-Notice: Undefined index: 0 in %siterator_044.php on line %d
+Warning: Undefined array key "0" in %s on line %d
NULL
===1===
object(stdClass)#%d (0) {
}
-
-Warning: CachingIterator::offsetExists() expects parameter 1 to be string, object given in %siterator_044.php on line %d
-NULL
-
-Warning: CachingIterator::offsetGet() expects parameter 1 to be string, object given in %siterator_044.php on line %d
-NULL
+CachingIterator::offsetExists(): Argument #1 ($key) must be of type string, stdClass given
+CachingIterator::offsetGet(): Argument #1 ($key) must be of type string, stdClass given
===2===
object(MyFoo)#%d (0) {
}
bool(false)
-Notice: Undefined index: foo in %siterator_044.php on line %d
+Warning: Undefined array key "foo" in %s on line %d
NULL
===3===
NULL
bool(false)
-Notice: Undefined index: in %siterator_044.php on line %d
+Warning: Undefined array key "" in %s on line %d
NULL
===4===
int(2)
bool(false)
-Notice: Undefined index: 2 in %siterator_044.php on line %d
+Warning: Undefined array key "2" in %s on line %d
NULL
===5===
string(3) "foo"
bool(false)
-Notice: Undefined index: foo in %siterator_044.php on line %d
+Warning: Undefined array key "foo" in %s on line %d
NULL
===6===
int(3)
bool(false)
-Notice: Undefined index: 3 in %siterator_044.php on line %d
+Warning: Undefined array key "3" in %s on line %d
NULL
===FILL===
===0===
@@ -131,12 +124,8 @@ int(0)
===1===
object(stdClass)#1 (0) {
}
-
-Warning: CachingIterator::offsetExists() expects parameter 1 to be string, object given in %siterator_044.php on line %d
-NULL
-
-Warning: CachingIterator::offsetGet() expects parameter 1 to be string, object given in %siterator_044.php on line %d
-NULL
+CachingIterator::offsetExists(): Argument #1 ($key) must be of type string, stdClass given
+CachingIterator::offsetGet(): Argument #1 ($key) must be of type string, stdClass given
===2===
object(MyFoo)#2 (0) {
}
@@ -146,7 +135,7 @@ int(1)
NULL
bool(false)
-Notice: Undefined index: in %siterator_044.php on line %d
+Warning: Undefined array key "" in %s on line %d
NULL
===4===
int(2)
@@ -160,6 +149,5 @@ int(1)
int(3)
bool(false)
-Notice: Undefined index: 3 in %siterator_044.php on line %d
+Warning: Undefined array key "3" in %s on line %d
NULL
-===DONE===
diff --git a/ext/spl/tests/iterator_045.phpt b/ext/spl/tests/iterator_045.phpt
index c8ffae77a5..e245b95688 100644
--- a/ext/spl/tests/iterator_045.phpt
+++ b/ext/spl/tests/iterator_045.phpt
@@ -5,78 +5,74 @@ SPL: CachingIterator and offsetSet/Unset, getCache using flag FULL_CACHE
class MyFoo
{
- function __toString()
- {
- return 'foo';
- }
+ function __toString()
+ {
+ return 'foo';
+ }
}
class MyCachingIterator extends CachingIterator
{
- function __construct(Iterator $it, $flags = 0)
- {
- parent::__construct($it, $flags);
- }
-
- function testSet($ar)
- {
- echo __METHOD__ . "()\n";
- foreach($ar as $k => $v)
- {
- echo "set($k,$v)\n";
- $this->offsetSet($k, $v);
- }
- }
-
- function testUnset($ar)
- {
- echo __METHOD__ . "()\n";
- foreach($ar as $k => $v)
- {
- echo "unset($v)\n";
- $this->offsetUnset($v);
- }
- }
-
- function fill()
- {
- echo __METHOD__ . "()\n";
- foreach($this as $v) ;
- }
-
- function show()
- {
- echo __METHOD__ . "()\n";
- var_dump($this->getCache());
- }
+ function __construct(Iterator $it, $flags = 0)
+ {
+ parent::__construct($it, $flags);
+ }
+
+ function testSet($ar)
+ {
+ echo __METHOD__ . "()\n";
+ foreach($ar as $k => $v)
+ {
+ echo "set($k,$v)\n";
+ $this->offsetSet($k, $v);
+ }
+ }
+
+ function testUnset($ar)
+ {
+ echo __METHOD__ . "()\n";
+ foreach($ar as $k => $v)
+ {
+ echo "unset($v)\n";
+ $this->offsetUnset($v);
+ }
+ }
+
+ function fill()
+ {
+ echo __METHOD__ . "()\n";
+ foreach($this as $v) ;
+ }
+
+ function show()
+ {
+ echo __METHOD__ . "()\n";
+ var_dump($this->getCache());
+ }
}
$it = new MyCachingIterator(new ArrayIterator(array(0, 'foo'=>1, 2, 'bar'=>3, 4)));
try
{
- var_dump($it->offsetSet(0, 0));
+ var_dump($it->offsetSet(0, 0));
}
catch(Exception $e)
{
- echo "Exception: " . $e->getMessage() . "\n";
+ echo "Exception: " . $e->getMessage() . "\n";
}
try
{
- var_dump($it->offsetUnset(0));
+ var_dump($it->offsetUnset(0));
}
catch(Exception $e)
{
- echo "Exception: " . $e->getMessage() . "\n";
+ echo "Exception: " . $e->getMessage() . "\n";
}
$it = new MyCachingIterator(new ArrayIterator(array(0, 1, 2, 3)), CachingIterator::FULL_CACHE);
-var_dump($it->offsetSet());
-var_dump($it->offsetSet(0));
-var_dump($it->offsetUnset());
-
$checks = array(0 => 25, 1 => 42, 3 => 'FooBar');
$unsets = array(0, 2);
@@ -92,20 +88,9 @@ $it->testUnset($unsets);
$it->show();
?>
-===DONE===
-<?php exit(0); ?>
---EXPECTF--
+--EXPECT--
Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
Exception: MyCachingIterator does not use a full cache (see CachingIterator::__construct)
-
-Warning: CachingIterator::offsetSet() expects exactly 2 parameters, 0 given in %siterator_045.php on line %d
-NULL
-
-Warning: CachingIterator::offsetSet() expects exactly 2 parameters, 1 given in %siterator_045.php on line %d
-NULL
-
-Warning: CachingIterator::offsetUnset() expects exactly 1 parameter, 0 given in %siterator_045.php on line %d
-NULL
MyCachingIterator::testSet()
set(0,25)
set(1,42)
@@ -166,4 +151,3 @@ array(2) {
[3]=>
string(6) "FooBar"
}
-===DONE===
diff --git a/ext/spl/tests/iterator_046.phpt b/ext/spl/tests/iterator_046.phpt
index b31e3bc533..e377dcb731 100644
--- a/ext/spl/tests/iterator_046.phpt
+++ b/ext/spl/tests/iterator_046.phpt
@@ -5,33 +5,33 @@ SPL: CachingIterator and __toString using bypassed string keys
class MyFoo
{
- function __toString()
- {
- return 'foo';
- }
+ function __toString()
+ {
+ return 'foo';
+ }
}
class MyCachingIterator extends CachingIterator
{
- function __construct(Iterator $it, $flags = 0)
- {
- parent::__construct($it, $flags);
- }
+ function __construct(Iterator $it, $flags = 0)
+ {
+ parent::__construct($it, $flags);
+ }
- function fill()
- {
- echo __METHOD__ . "()\n";
- foreach($this as $v) ;
- }
+ function fill()
+ {
+ echo __METHOD__ . "()\n";
+ foreach($this as $v) ;
+ }
- function show()
- {
- echo __METHOD__ . "()\n";
- foreach($this as $v)
- {
- var_dump((string)$this);
- }
- }
+ function show()
+ {
+ echo __METHOD__ . "()\n";
+ foreach($this as $v)
+ {
+ var_dump((string)$this);
+ }
+ }
}
$it = new MyCachingIterator(new ArrayIterator(array(0, 'foo'=>1, 'bar'=>2)), CachingIterator::TOSTRING_USE_KEY);
@@ -40,12 +40,9 @@ $it->fill();
$it->show();
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
MyCachingIterator::fill()
MyCachingIterator::show()
string(1) "0"
string(3) "foo"
string(3) "bar"
-===DONE===
diff --git a/ext/spl/tests/iterator_047.phpt b/ext/spl/tests/iterator_047.phpt
index 548f486528..9d7586bf4e 100644
--- a/ext/spl/tests/iterator_047.phpt
+++ b/ext/spl/tests/iterator_047.phpt
@@ -5,54 +5,54 @@ SPL: RecursiveCachingIterator and exception in has/getChildren
class MyRecursiveArrayIterator extends RecursiveArrayIterator
{
- static public $fail = 0;
+ static public $fail = 0;
- static function fail($state, $method)
- {
- if (self::$fail == $state)
- {
- throw new Exception("State $state: $method()");
- }
- }
+ static function fail($state, $method)
+ {
+ if (self::$fail == $state)
+ {
+ throw new Exception("State $state: $method()");
+ }
+ }
- function hasChildren()
- {
- echo __METHOD__ . "()\n";
- self::fail(1, __METHOD__);
- return parent::hasChildren();
- }
+ function hasChildren()
+ {
+ echo __METHOD__ . "()\n";
+ self::fail(1, __METHOD__);
+ return parent::hasChildren();
+ }
- function getChildren()
- {
- echo __METHOD__ . "()\n";
- self::fail(2, __METHOD__);
- return parent::getChildren();
- }
+ function getChildren()
+ {
+ echo __METHOD__ . "()\n";
+ self::fail(2, __METHOD__);
+ return parent::getChildren();
+ }
}
class MyRecursiveCachingIterator extends RecursiveCachingIterator
{
- function show()
- {
- MyRecursiveArrayIterator::$fail = 0;
- while(MyRecursiveArrayIterator::$fail < 4)
- {
- echo "===" . MyRecursiveArrayIterator::$fail . "===\n";
- try
- {
- foreach(new RecursiveIteratorIterator($this) as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
- catch (Exception $e)
- {
- echo "Exception: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
- }
- MyRecursiveArrayIterator::$fail++;
- }
- }
+ function show()
+ {
+ MyRecursiveArrayIterator::$fail = 0;
+ while(MyRecursiveArrayIterator::$fail < 4)
+ {
+ echo "===" . MyRecursiveArrayIterator::$fail . "===\n";
+ try
+ {
+ foreach(new RecursiveIteratorIterator($this) as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
+ catch (Exception $e)
+ {
+ echo "Exception: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
+ }
+ MyRecursiveArrayIterator::$fail++;
+ }
+ }
}
$it = new MyRecursiveArrayIterator(array(0, array(10), 2, array(30), 4));
@@ -61,8 +61,6 @@ $it = new MyRecursiveCachingIterator($it);
$it->show();
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
===0===
MyRecursiveArrayIterator::hasChildren()
@@ -71,7 +69,7 @@ int(0)
MyRecursiveArrayIterator::hasChildren()
MyRecursiveArrayIterator::getChildren()
-Notice: Array to string conversion in %siterator_047.php on line %d
+Warning: Array to string conversion in %s on line %d
MyRecursiveArrayIterator::hasChildren()
int(0)
int(10)
@@ -81,7 +79,7 @@ int(2)
MyRecursiveArrayIterator::hasChildren()
MyRecursiveArrayIterator::getChildren()
-Notice: Array to string conversion in %siterator_047.php on line %d
+Warning: Array to string conversion in %s on line %d
MyRecursiveArrayIterator::hasChildren()
int(0)
int(30)
@@ -105,7 +103,7 @@ int(0)
MyRecursiveArrayIterator::hasChildren()
MyRecursiveArrayIterator::getChildren()
-Notice: Array to string conversion in %siterator_047.php on line %d
+Warning: Array to string conversion in %s on line %d
MyRecursiveArrayIterator::hasChildren()
int(0)
int(10)
@@ -115,11 +113,10 @@ int(2)
MyRecursiveArrayIterator::hasChildren()
MyRecursiveArrayIterator::getChildren()
-Notice: Array to string conversion in %siterator_047.php on line %d
+Warning: Array to string conversion in %s on line %d
MyRecursiveArrayIterator::hasChildren()
int(0)
int(30)
MyRecursiveArrayIterator::hasChildren()
int(4)
int(4)
-===DONE===
diff --git a/ext/spl/tests/iterator_048.phpt b/ext/spl/tests/iterator_048.phpt
index de13e5b6b2..ce5a06993a 100644
--- a/ext/spl/tests/iterator_048.phpt
+++ b/ext/spl/tests/iterator_048.phpt
@@ -5,14 +5,14 @@ SPL: RecursiveRegexIterator and exception in has/getChildren
class MyRecursiveRegexIterator extends RecursiveRegexIterator
{
- function show()
- {
- foreach(new RecursiveIteratorIterator($this) as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach(new RecursiveIteratorIterator($this) as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
}
$ar = new RecursiveArrayIterator(array('Foo', array('Bar'), 'FooBar', array('Baz'), 'Biz'));
@@ -21,11 +21,8 @@ $it = new MyRecursiveRegexIterator($ar, '/Bar/');
$it->show();
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(0)
string(3) "Bar"
int(2)
string(6) "FooBar"
-===DONE===
diff --git a/ext/spl/tests/iterator_049.phpt b/ext/spl/tests/iterator_049.phpt
index b9ab2c30ac..e9b81fbff3 100644
--- a/ext/spl/tests/iterator_049.phpt
+++ b/ext/spl/tests/iterator_049.phpt
@@ -8,8 +8,6 @@ $ar = new ArrayIterator(array(NULL=>NULL));
var_dump($ar->getArrayCopy());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
object(ArrayIterator)#%d (1) {
["storage":"ArrayIterator":private]=>
@@ -22,4 +20,3 @@ array(1) {
[""]=>
NULL
}
-===DONE===
diff --git a/ext/spl/tests/iterator_049b.phpt b/ext/spl/tests/iterator_049b.phpt
index 5175f41c0c..54a2c2e040 100644
--- a/ext/spl/tests/iterator_049b.phpt
+++ b/ext/spl/tests/iterator_049b.phpt
Binary files differ
diff --git a/ext/spl/tests/iterator_050.phpt b/ext/spl/tests/iterator_050.phpt
index 63d8fbfa9a..dd8ad544b8 100644
--- a/ext/spl/tests/iterator_050.phpt
+++ b/ext/spl/tests/iterator_050.phpt
@@ -5,14 +5,14 @@ SPL: RegexIterator::GET_MATCH
class MyRegexIterator extends RegexIterator
{
- function show()
- {
- foreach($this as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach($this as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
}
$ar = new ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
@@ -25,8 +25,6 @@ $it->show();
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(1)
array(3) {
@@ -91,4 +89,3 @@ object(ArrayIterator)#%d (1) {
%s(2) ",,"
}
}
-===DONE===
diff --git a/ext/spl/tests/iterator_051.phpt b/ext/spl/tests/iterator_051.phpt
index 2d198db520..8b3c6563d1 100644
--- a/ext/spl/tests/iterator_051.phpt
+++ b/ext/spl/tests/iterator_051.phpt
@@ -5,14 +5,14 @@ SPL: RegexIterator::GET_MATCH, USE_KEY
class MyRegexIterator extends RegexIterator
{
- function show()
- {
- foreach($this as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach($this as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
}
$ar = new ArrayIterator(array('1'=>0,'1,2'=>1,'1,2,3'=>2,0=>3,'FooBar'=>4,','=>5,',,'=>6));
@@ -25,8 +25,6 @@ $it->show();
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
string(3) "1,2"
array(3) {
@@ -93,4 +91,3 @@ object(ArrayIterator)#%d (1) {
int(6)
}
}
-===DONE===
diff --git a/ext/spl/tests/iterator_052.phpt b/ext/spl/tests/iterator_052.phpt
index 4c8191fab7..e73d40203d 100644
--- a/ext/spl/tests/iterator_052.phpt
+++ b/ext/spl/tests/iterator_052.phpt
@@ -5,31 +5,31 @@ SPL: RegexIterator::ALL_MATCHES
class MyRegexIterator extends RegexIterator
{
- public $uk, $re;
+ public $uk, $re;
- function __construct($it, $re, $mode, $flags = 0)
- {
- $this->uk = $flags & self::USE_KEY;
- $this->re = $re;
- parent::__construct($it, $re, $mode, $flags);
- }
+ function __construct($it, $re, $mode, $flags = 0)
+ {
+ $this->uk = $flags & self::USE_KEY;
+ $this->re = $re;
+ parent::__construct($it, $re, $mode, $flags);
+ }
- function show()
- {
- foreach($this as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach($this as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
- function accept()
- {
- @preg_match_all($this->re, (string)($this->uk ? $this->key() : $this->current()), $sub);
- $ret = parent::accept();
- var_dump($sub == $this->current());
- return $ret;
- }
+ function accept()
+ {
+ @preg_match_all($this->re, (string)($this->uk ? $this->key() : $this->current()), $sub);
+ $ret = parent::accept();
+ var_dump($sub == $this->current());
+ return $ret;
+ }
}
$ar = new ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
@@ -42,8 +42,6 @@ $it->show();
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
bool(true)
bool(true)
@@ -174,4 +172,3 @@ object(ArrayIterator)#%d (1) {
%s(2) ",,"
}
}
-===DONE===
diff --git a/ext/spl/tests/iterator_053.phpt b/ext/spl/tests/iterator_053.phpt
index fb8e1e5f14..ac8f438a04 100644
--- a/ext/spl/tests/iterator_053.phpt
+++ b/ext/spl/tests/iterator_053.phpt
@@ -5,31 +5,31 @@ SPL: RegexIterator::ALL_MATCHES
class MyRegexIterator extends RegexIterator
{
- public $uk, $re;
+ public $uk, $re;
- function __construct($it, $re, $mode, $flags = 0)
- {
- $this->uk = $flags & self::USE_KEY;
- $this->re = $re;
- parent::__construct($it, $re, $mode, $flags);
- }
+ function __construct($it, $re, $mode, $flags = 0)
+ {
+ $this->uk = $flags & self::USE_KEY;
+ $this->re = $re;
+ parent::__construct($it, $re, $mode, $flags);
+ }
- function show()
- {
- foreach($this as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach($this as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
- function accept()
- {
- @preg_match_all($this->re, (string)($this->uk ? $this->key() : $this->current()), $sub);
- $ret = parent::accept();
- var_dump($sub == $this->current());
- return $ret;
- }
+ function accept()
+ {
+ @preg_match_all($this->re, (string)($this->uk ? $this->key() : $this->current()), $sub);
+ $ret = parent::accept();
+ var_dump($sub == $this->current());
+ return $ret;
+ }
}
$ar = new ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
@@ -42,8 +42,6 @@ $it->show();
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
bool(true)
bool(true)
@@ -204,4 +202,3 @@ object(ArrayIterator)#%d (1) {
%s(2) ",,"
}
}
-===DONE===
diff --git a/ext/spl/tests/iterator_054.phpt b/ext/spl/tests/iterator_054.phpt
index 91266c9571..f40639dd36 100644
--- a/ext/spl/tests/iterator_054.phpt
+++ b/ext/spl/tests/iterator_054.phpt
@@ -5,14 +5,14 @@ SPL: RegexIterator::SPLIT
class MyRegexIterator extends RegexIterator
{
- function show()
- {
- foreach($this as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach($this as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
}
$ar = new ArrayIterator(array('1','1,2','1,2,3','',NULL,array(),'FooBar',',',',,'));
@@ -23,8 +23,6 @@ $it->show();
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(1)
array(2) {
@@ -82,4 +80,3 @@ object(ArrayIterator)#%d (1) {
%s(2) ",,"
}
}
-===DONE===
diff --git a/ext/spl/tests/iterator_055.phpt b/ext/spl/tests/iterator_055.phpt
index dec68a463b..58d710c04a 100644
--- a/ext/spl/tests/iterator_055.phpt
+++ b/ext/spl/tests/iterator_055.phpt
@@ -5,14 +5,14 @@ SPL: RegexIterator::SPLIT, USE_KEY
class MyRegexIterator extends RegexIterator
{
- function show()
- {
- foreach($this as $k => $v)
- {
- var_dump($k);
- var_dump($v);
- }
- }
+ function show()
+ {
+ foreach($this as $k => $v)
+ {
+ var_dump($k);
+ var_dump($v);
+ }
+ }
}
$ar = new ArrayIterator(array('1'=>0,'1,2'=>1,'1,2,3'=>2,0=>3,'FooBar'=>4,','=>5,',,'=>6));
@@ -23,8 +23,6 @@ $it->show();
var_dump($ar);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
string(3) "1,2"
array(2) {
@@ -59,4 +57,3 @@ object(ArrayIterator)#%d (1) {
int(6)
}
}
-===DONE===
diff --git a/ext/spl/tests/iterator_056.phpt b/ext/spl/tests/iterator_056.phpt
index ec49e6b740..54a31d18ba 100644
--- a/ext/spl/tests/iterator_056.phpt
+++ b/ext/spl/tests/iterator_056.phpt
@@ -6,7 +6,7 @@ Sebastian Schürmann
<?php
class myFilterIterator extends FilterIterator {
- function accept() { }
+ function accept() { }
}
class myCachingIterator extends CachingIterator { }
@@ -20,45 +20,45 @@ class myLimitIterator extends LimitIterator { }
class myNoRewindIterator extends NoRewindIterator {}
try {
- $it = new myFilterIterator();
+ $it = new myFilterIterator();
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
try {
- $it = new myCachingIterator();
+ $it = new myCachingIterator();
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
try {
- $it = new myRecursiveCachingIterator();
+ $it = new myRecursiveCachingIterator();
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
try {
- $it = new myParentIterator();
+ $it = new myParentIterator();
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
try {
- $it = new myLimitIterator();
+ $it = new myLimitIterator();
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
try {
- $it = new myNoRewindIterator();
+ $it = new myNoRewindIterator();
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
?>
--EXPECT--
-FilterIterator::__construct() expects exactly 1 parameter, 0 given
-CachingIterator::__construct() expects at least 1 parameter, 0 given
-RecursiveCachingIterator::__construct() expects at least 1 parameter, 0 given
-ParentIterator::__construct() expects exactly 1 parameter, 0 given
-LimitIterator::__construct() expects at least 1 parameter, 0 given
-NoRewindIterator::__construct() expects exactly 1 parameter, 0 given
+FilterIterator::__construct() expects exactly 1 argument, 0 given
+CachingIterator::__construct() expects at least 1 argument, 0 given
+RecursiveCachingIterator::__construct() expects at least 1 argument, 0 given
+ParentIterator::__construct() expects exactly 1 argument, 0 given
+LimitIterator::__construct() expects at least 1 argument, 0 given
+NoRewindIterator::__construct() expects exactly 1 argument, 0 given
diff --git a/ext/spl/tests/iterator_057.phpt b/ext/spl/tests/iterator_057.phpt
index 61c1dfced6..e88e6a92b0 100644
--- a/ext/spl/tests/iterator_057.phpt
+++ b/ext/spl/tests/iterator_057.phpt
@@ -11,9 +11,9 @@ Sebastian Schürmann
class myArrayIterator extends ArrayIterator {
}
try {
- $it = new myArrayIterator();
+ $it = new myArrayIterator();
} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
+ echo 'InvalidArgumentException thrown';
}
echo 'no Exception thrown'
?>
diff --git a/ext/spl/tests/iterator_058.phpt b/ext/spl/tests/iterator_058.phpt
index 83d9d91feb..ebe7a1ed2c 100644
--- a/ext/spl/tests/iterator_058.phpt
+++ b/ext/spl/tests/iterator_058.phpt
@@ -6,17 +6,17 @@ Sebastian Schürmann
<?php
class myIterator implements Iterator {
- function current() {}
- function next() {}
- function key() {}
- function valid() {}
- function rewind() {}
+ function current() {}
+ function next() {}
+ function key() {}
+ function valid() {}
+ function rewind() {}
}
try {
- $it = new myIterator();
+ $it = new myIterator();
} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
+ echo 'InvalidArgumentException thrown';
}
echo 'no Exception thrown';
?>
diff --git a/ext/spl/tests/iterator_062.phpt b/ext/spl/tests/iterator_062.phpt
index 3694cf1956..904b7f0ccf 100644
--- a/ext/spl/tests/iterator_062.phpt
+++ b/ext/spl/tests/iterator_062.phpt
@@ -9,10 +9,10 @@ class myRecursiveIteratorIterator extends RecursiveIteratorIterator {
}
try {
- $it = new myRecursiveIteratorIterator();
-} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
+ $it = new myRecursiveIteratorIterator();
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
}
?>
--EXPECT--
-InvalidArgumentException thrown
+RecursiveIteratorIterator::__construct() expects at least 1 argument, 0 given
diff --git a/ext/spl/tests/iterator_067.phpt b/ext/spl/tests/iterator_067.phpt
index e05a48d4e0..3c35bd06f7 100644
--- a/ext/spl/tests/iterator_067.phpt
+++ b/ext/spl/tests/iterator_067.phpt
@@ -6,10 +6,10 @@ Sebastian Schürmann
<?php
class myAppendIterator extends AppendIterator {}
try {
- $it = new myAppendIterator();
- echo "no exception";
+ $it = new myAppendIterator();
+ echo "no exception";
} catch (InvalidArgumentException $e) {
- echo 'InvalidArgumentException thrown';
+ echo 'InvalidArgumentException thrown';
}
?>
--EXPECT--
diff --git a/ext/spl/tests/iterator_068.phpt b/ext/spl/tests/iterator_068.phpt
index 4845708d43..00006a3b60 100644
--- a/ext/spl/tests/iterator_068.phpt
+++ b/ext/spl/tests/iterator_068.phpt
@@ -4,21 +4,21 @@ SPL: Iterator: Overloaded object and destruction
<?php
class Test implements Iterator {
- function foo() {
- echo __METHOD__ . "()\n";
- }
- function rewind() {}
- function valid() {}
- function current() {}
- function key() {}
- function next() {}
+ function foo() {
+ echo __METHOD__ . "()\n";
+ }
+ function rewind() {}
+ function valid() {}
+ function current() {}
+ function key() {}
+ function next() {}
}
class TestIteratorIterator extends IteratorIterator {
- function __destruct() {
- echo __METHOD__ . "()\n";
- $this->foo();
- }
+ function __destruct() {
+ echo __METHOD__ . "()\n";
+ $this->foo();
+ }
}
$obj = new TestIteratorIterator(new Test);
@@ -26,9 +26,7 @@ $obj->foo();
unset($obj);
?>
-===DONE===
--EXPECT--
Test::foo()
TestIteratorIterator::__destruct()
Test::foo()
-===DONE===
diff --git a/ext/spl/tests/iterator_069.phpt b/ext/spl/tests/iterator_069.phpt
index 975fbe2f8e..b9ee3f4b82 100644
--- a/ext/spl/tests/iterator_069.phpt
+++ b/ext/spl/tests/iterator_069.phpt
@@ -14,7 +14,7 @@ foreach ($recItIt as &$val) echo "$val\n";
?>
--EXPECTF--
-Fatal error: Uncaught RuntimeException: An iterator cannot be used with foreach by reference in %s:%d
+Fatal error: Uncaught Error: An iterator cannot be used with foreach by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
diff --git a/ext/spl/tests/iterator_070.phpt b/ext/spl/tests/iterator_070.phpt
index 681e327523..94dea30db5 100644
--- a/ext/spl/tests/iterator_070.phpt
+++ b/ext/spl/tests/iterator_070.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: RecursiveIteratorIterator - Ensure that non-overriden methods execute problem free.
+SPL: RecursiveIteratorIterator - Ensure that non-overridden methods execute problem free.
--FILE--
<?php
diff --git a/ext/spl/tests/iterator_071.phpt b/ext/spl/tests/iterator_071.phpt
index 9f48f6ee14..501771119a 100644
--- a/ext/spl/tests/iterator_071.phpt
+++ b/ext/spl/tests/iterator_071.phpt
@@ -11,7 +11,7 @@ $recArrIt = new RecursiveArrayIterator($arrOb->getIterator());
class MyRecursiveIteratorIterator extends RecursiveIteratorIterator {
function nextelement() {
- echo __METHOD__."\n";
+ echo __METHOD__."\n";
}
}
diff --git a/ext/spl/tests/iterator_count.phpt b/ext/spl/tests/iterator_count.phpt
index c0dad0f422..62f9ee8334 100644
--- a/ext/spl/tests/iterator_count.phpt
+++ b/ext/spl/tests/iterator_count.phpt
@@ -9,21 +9,11 @@ $array=array('a','b');
$iterator = new ArrayIterator($array);
-iterator_count();
-
-
-iterator_count($iterator,'1');
-
iterator_count('1');
-
?>
--EXPECTF--
-Warning: iterator_count() expects exactly 1 parameter, 0 given in %s
-
-Warning: iterator_count() expects exactly 1 parameter, 2 given in %s
-
-Fatal error: Uncaught TypeError: Argument 1 passed to iterator_count() must implement interface Traversable, string given in %s:%d
+Fatal error: Uncaught TypeError: iterator_count(): Argument #1 ($iterator) must be of type Traversable, string given in %s:%d
Stack trace:
#0 %s(%d): iterator_count('1')
#1 {main}
diff --git a/ext/spl/tests/iterator_to_array.phpt b/ext/spl/tests/iterator_to_array.phpt
index f36b99db23..a754c9da6f 100644
--- a/ext/spl/tests/iterator_to_array.phpt
+++ b/ext/spl/tests/iterator_to_array.phpt
@@ -9,20 +9,11 @@ $array=array('a','b');
$iterator = new ArrayIterator($array);
-iterator_to_array();
-
-
-iterator_to_array($iterator,'test','test');
-
iterator_to_array('test','test');
?>
--EXPECTF--
-Warning: iterator_to_array() expects at least 1 parameter, 0 given in %s
-
-Warning: iterator_to_array() expects at most 2 parameters, 3 given in %s
-
-Fatal error: Uncaught TypeError: Argument 1 passed to iterator_to_array() must implement interface Traversable, string given in %s:%d
+Fatal error: Uncaught TypeError: iterator_to_array(): Argument #1 ($iterator) must be of type Traversable, string given in %s:%d
Stack trace:
#0 %s(%d): iterator_to_array('test', 'test')
#1 {main}
diff --git a/ext/spl/tests/iterator_to_array_nonscalar_keys.phpt b/ext/spl/tests/iterator_to_array_nonscalar_keys.phpt
index 4ca9485faf..1920b31639 100644
--- a/ext/spl/tests/iterator_to_array_nonscalar_keys.phpt
+++ b/ext/spl/tests/iterator_to_array_nonscalar_keys.phpt
@@ -12,20 +12,12 @@ function gen() {
yield new stdClass => 5;
}
-var_dump(iterator_to_array(gen()));
+try {
+ var_dump(iterator_to_array(gen()));
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
?>
---EXPECTF--
-Warning: Illegal offset type in %s on line %d
-
-Warning: Illegal offset type in %s on line %d
-array(4) {
- ["foo"]=>
- int(0)
- [1]=>
- int(1)
- [2]=>
- int(2)
- [""]=>
- int(3)
-}
+--EXPECT--
+Illegal offset type
diff --git a/ext/spl/tests/multiple_iterator_001.phpt b/ext/spl/tests/multiple_iterator_001.phpt
index be7eeeac7e..7f2b971b55 100644
--- a/ext/spl/tests/multiple_iterator_001.phpt
+++ b/ext/spl/tests/multiple_iterator_001.phpt
@@ -11,7 +11,7 @@ $m = new MultipleIterator();
echo "-- Default flags, no iterators --\n";
foreach($m as $value) {
- var_dump($value);
+ var_dump($value);
}
var_dump($m->current());
@@ -24,17 +24,17 @@ echo "-- Default flags, MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_K
var_dump($m->getFlags() === (MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC));
foreach($m as $key => $value) {
- var_dump($key, $value);
+ var_dump($key, $value);
}
try {
- $m->current();
+ $m->current();
} catch(RuntimeException $e) {
- echo "RuntimeException thrown: " . $e->getMessage() . "\n";
+ echo "RuntimeException thrown: " . $e->getMessage() . "\n";
}
try {
- $m->key();
+ $m->key();
} catch(RuntimeException $e) {
- echo "RuntimeException thrown: " . $e->getMessage() . "\n";
+ echo "RuntimeException thrown: " . $e->getMessage() . "\n";
}
echo "-- Flags = MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC --\n";
@@ -43,7 +43,7 @@ $m->setFlags(MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC
var_dump($m->getFlags() === (MultipleIterator::MIT_NEED_ANY | MultipleIterator::MIT_KEYS_NUMERIC));
foreach($m as $key => $value) {
- var_dump($key, $value);
+ var_dump($key, $value);
}
echo "-- Default flags, added element --\n";
@@ -52,7 +52,7 @@ $m->setFlags(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC
$iter2[] = 3;
foreach($m as $key => $value) {
- var_dump($key, $value);
+ var_dump($key, $value);
}
echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC, with iterator associated with NULL --\n";
@@ -60,9 +60,9 @@ echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC, with iterator associated wit
$m->setFlags(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC);
$m->rewind();
try {
- $m->current();
+ $m->current();
} catch(InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
+ echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
}
echo "-- Flags |= MultipleIterator::MIT_KEYS_ASSOC --\n";
@@ -72,23 +72,23 @@ $m->attachIterator($iter2, "iter2");
$m->attachIterator($iter3, 3);
foreach($m as $key => $value) {
- var_dump($key, $value);
+ var_dump($key, $value);
}
echo "-- Associate with invalid value --\n";
try {
- $m->attachIterator($iter3, new stdClass());
-} catch(InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
+ $m->attachIterator($iter3, new stdClass());
+} catch(TypeError $e) {
+ echo "TypeError thrown: " . $e->getMessage() . "\n";
}
echo "-- Associate with duplicate value --\n";
try {
- $m->attachIterator($iter3, "iter1");
+ $m->attachIterator($iter3, "iter1");
} catch(InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
+ echo "InvalidArgumentException thrown: " . $e->getMessage() . "\n";
}
echo "-- Count, contains, detach, count, contains, iterate --\n";
@@ -99,7 +99,7 @@ var_dump($m->detachIterator($iter2));
var_dump($m->countIterators());
var_dump($m->containsIterator($iter2));
foreach($m as $key => $value) {
- var_dump($key, $value);
+ var_dump($key, $value);
}
?>
@@ -297,7 +297,7 @@ array(3) {
int(3)
}
-- Associate with invalid value --
-InvalidArgumentException thrown: Info must be NULL, integer or string
+TypeError thrown: MultipleIterator::attachIterator(): Argument #2 ($info) must be of type string|int|null, stdClass given
-- Associate with duplicate value --
InvalidArgumentException thrown: Key duplication error
-- Count, contains, detach, count, contains, iterate --
diff --git a/ext/spl/tests/observer_001.phpt b/ext/spl/tests/observer_001.phpt
index 6408406ebf..72feb08a40 100644
--- a/ext/spl/tests/observer_001.phpt
+++ b/ext/spl/tests/observer_001.phpt
@@ -5,66 +5,66 @@ SPL: SplObserver and SplSubject (empty notify)
class ObserverImpl implements SplObserver
{
- protected $name = '';
-
- function __construct($name = 'obj')
- {
- $this->name = '$' . $name;
- }
-
- function update(SplSubject $subject)
- {
- echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
- }
-
- function getName()
- {
- return $this->name;
- }
+ protected $name = '';
+
+ function __construct($name = 'obj')
+ {
+ $this->name = '$' . $name;
+ }
+
+ function update(SplSubject $subject)
+ {
+ echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
+ }
+
+ function getName()
+ {
+ return $this->name;
+ }
}
class SubjectImpl implements SplSubject
{
- protected $name = '';
- protected $observers = array();
+ protected $name = '';
+ protected $observers = array();
- function __construct($name = 'sub')
- {
- $this->name = '$' . $name;
- }
+ function __construct($name = 'sub')
+ {
+ $this->name = '$' . $name;
+ }
function attach(SplObserver $observer)
{
- echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
- if (!in_array($observer, $this->observers))
- {
- $this->observers[] = $observer;
- }
+ echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
+ if (!in_array($observer, $this->observers))
+ {
+ $this->observers[] = $observer;
+ }
}
function detach(SplObserver $observer)
{
- echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
- $idx = array_search($observer, $this->observers);
- if ($idx !== false)
- {
- unset($this->observers[$idx]);
- }
+ echo '$sub->' . __METHOD__ . '(' . $observer->getName() . ");\n";
+ $idx = array_search($observer, $this->observers);
+ if ($idx !== false)
+ {
+ unset($this->observers[$idx]);
+ }
}
function notify()
{
- echo '$sub->' . __METHOD__ . "();\n";
- foreach($this->observers as $observer)
- {
- $observer->update($this);
- }
+ echo '$sub->' . __METHOD__ . "();\n";
+ foreach($this->observers as $observer)
+ {
+ $observer->update($this);
+ }
}
- function getName()
- {
- return $this->name;
- }
+ function getName()
+ {
+ return $this->name;
+ }
}
$sub = new SubjectImpl;
@@ -93,7 +93,6 @@ $sub->attach($ob3);
$sub->notify();
?>
-===DONE===
--EXPECT--
$sub->SubjectImpl::attach($ob1);
$sub->SubjectImpl::attach($ob1);
@@ -113,4 +112,3 @@ $sub->SubjectImpl::notify();
$sub->SubjectImpl::attach($ob3);
$sub->SubjectImpl::notify();
$ob3->ObserverImpl::update($sub);
-===DONE===
diff --git a/ext/spl/tests/observer_002.phpt b/ext/spl/tests/observer_002.phpt
index 504e7ca3f3..2642c28bd5 100644
--- a/ext/spl/tests/observer_002.phpt
+++ b/ext/spl/tests/observer_002.phpt
@@ -5,103 +5,103 @@ SPL: SplObjectStorage
class MyObjectStorage extends SplObjectStorage
{
- function rewind()
- {
- echo __METHOD__ . "()\n";
- parent::rewind();
- }
-
- function valid()
- {
- echo __METHOD__ . "(" . (parent::valid() ? 1 : 0) . ")\n";
- return parent::valid();
- }
-
- function key()
- {
- echo __METHOD__ . "(" . parent::key() . ")\n";
- return parent::key();
- }
-
- function current()
- {
- echo __METHOD__ . "(" . parent::current()->getName() . ")\n";
- return parent::current();
- }
-
- function next()
- {
- echo __METHOD__ . "()\n";
- parent::next();
- }
+ function rewind()
+ {
+ echo __METHOD__ . "()\n";
+ parent::rewind();
+ }
+
+ function valid()
+ {
+ echo __METHOD__ . "(" . (parent::valid() ? 1 : 0) . ")\n";
+ return parent::valid();
+ }
+
+ function key()
+ {
+ echo __METHOD__ . "(" . parent::key() . ")\n";
+ return parent::key();
+ }
+
+ function current()
+ {
+ echo __METHOD__ . "(" . parent::current()->getName() . ")\n";
+ return parent::current();
+ }
+
+ function next()
+ {
+ echo __METHOD__ . "()\n";
+ parent::next();
+ }
}
class ObserverImpl implements SplObserver
{
- protected $name = '';
-
- function __construct($name = 'obj')
- {
- $this->name = '$' . $name;
- }
-
- function update(SplSubject $subject)
- {
- echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
- }
-
- function getName()
- {
- return $this->name;
- }
+ protected $name = '';
+
+ function __construct($name = 'obj')
+ {
+ $this->name = '$' . $name;
+ }
+
+ function update(SplSubject $subject)
+ {
+ echo $this->name . '->' . __METHOD__ . '(' . $subject->getName() . ");\n";
+ }
+
+ function getName()
+ {
+ return $this->name;
+ }
}
class SubjectImpl implements SplSubject
{
- protected $name = '';
- protected $observers;
-
- function __construct($name = 'sub')
- {
- $this->observers = new MyObjectStorage;
- $this->name = '$' . $name;
- }
-
- function attach(SplObserver $observer)
- {
- echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
- $this->observers->attach($observer);
- }
-
- function detach(SplObserver $observer)
- {
- echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
- $this->observers->detach($observer);
- }
-
- function count()
- {
- return $this->observers->count();
- }
-
- function notify()
- {
- echo $this->name . '->' . __METHOD__ . "();\n";
- foreach($this->observers as $key => $observer)
- {
- $observer->update($this);
- }
- }
-
- function getName()
- {
- return $this->name;
- }
-
- function contains($obj)
- {
- return $this->observers->contains($obj);
- }
+ protected $name = '';
+ protected $observers;
+
+ function __construct($name = 'sub')
+ {
+ $this->observers = new MyObjectStorage;
+ $this->name = '$' . $name;
+ }
+
+ function attach(SplObserver $observer)
+ {
+ echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
+ $this->observers->attach($observer);
+ }
+
+ function detach(SplObserver $observer)
+ {
+ echo $this->name . '->' . __METHOD__ . '(' . $observer->getName() . ");\n";
+ $this->observers->detach($observer);
+ }
+
+ function count()
+ {
+ return $this->observers->count();
+ }
+
+ function notify()
+ {
+ echo $this->name . '->' . __METHOD__ . "();\n";
+ foreach($this->observers as $key => $observer)
+ {
+ $observer->update($this);
+ }
+ }
+
+ function getName()
+ {
+ return $this->name;
+ }
+
+ function contains($obj)
+ {
+ return $this->observers->contains($obj);
+ }
}
$sub = new SubjectImpl;
@@ -137,8 +137,6 @@ var_dump($sub->count());
$sub->notify();
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
bool(false)
$sub->SubjectImpl::attach($ob1);
@@ -196,4 +194,3 @@ MyObjectStorage::key(0)
$ob3->ObserverImpl::update($sub);
MyObjectStorage::next()
MyObjectStorage::valid(0)
-===DONE===
diff --git a/ext/spl/tests/observer_003.phpt b/ext/spl/tests/observer_003.phpt
index c7041051b8..36ead92336 100644
--- a/ext/spl/tests/observer_003.phpt
+++ b/ext/spl/tests/observer_003.phpt
@@ -5,12 +5,12 @@ SPL: SplObjectStorage serialization
class TestClass
{
- public $test = 25;
+ public $test = 25;
- public function __construct($test = 42)
- {
- $this->test = $test;
- }
+ public function __construct($test = 42)
+ {
+ $this->test = $test;
+ }
}
$storage = new SplObjectStorage();
@@ -24,7 +24,7 @@ var_dump(count($storage));
foreach($storage as $object)
{
- var_dump($object->test);
+ var_dump($object->test);
}
var_dump(serialize($storage));
@@ -36,12 +36,10 @@ var_dump(count($storage2));
foreach($storage2 as $object)
{
- var_dump($object->test);
+ var_dump($object->test);
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(4)
int(1)
@@ -55,4 +53,3 @@ int(1)
string(1) "2"
string(3) "foo"
bool(true)
-===DONE===
diff --git a/ext/spl/tests/observer_004.phpt b/ext/spl/tests/observer_004.phpt
index a56c514615..7da7f1a651 100644
--- a/ext/spl/tests/observer_004.phpt
+++ b/ext/spl/tests/observer_004.phpt
@@ -5,22 +5,22 @@ SPL: SplObjectStorage serialization & overloading
class TestClass
{
- public $test = 25;
+ public $test = 25;
- public function __construct($test = 42)
- {
- $this->test = $test;
- }
+ public function __construct($test = 42)
+ {
+ $this->test = $test;
+ }
}
class MyStorage extends SplObjectStorage
{
- public $bla = 25;
+ public $bla = 25;
- public function __construct($bla = 26)
- {
- $this->bla = $bla;
- }
+ public function __construct($bla = 26)
+ {
+ $this->bla = $bla;
+ }
}
$storage = new MyStorage();
@@ -34,7 +34,7 @@ var_dump(count($storage));
foreach($storage as $object)
{
- var_dump($object->test);
+ var_dump($object->test);
}
var_dump($storage);
@@ -48,14 +48,12 @@ var_dump(count($storage2));
foreach($storage2 as $object)
{
- var_dump($object->test);
+ var_dump($object->test);
}
var_dump($storage2);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(2)
int(1)
@@ -119,4 +117,3 @@ object(MyStorage)#%d (2) {
}
}
}
-===DONE===
diff --git a/ext/spl/tests/observer_005.phpt b/ext/spl/tests/observer_005.phpt
index fe490525b8..57f632cfbc 100644
--- a/ext/spl/tests/observer_005.phpt
+++ b/ext/spl/tests/observer_005.phpt
@@ -5,17 +5,17 @@ SPL: SplObjectStorage serialization & visibility
class TestClass
{
- public $def = 24;
- public $pub = 25;
- protected $pro = 26;
- private $pri = 27;
-
- public function __construct($pub = 42, $pro = 43, $pri = 44)
- {
- $this->pub = $pub;
- $this->pro = $pro;
- $this->pri = $pri;
- }
+ public $def = 24;
+ public $pub = 25;
+ protected $pro = 26;
+ private $pri = 27;
+
+ public function __construct($pub = 42, $pro = 43, $pri = 44)
+ {
+ $this->pub = $pub;
+ $this->pro = $pro;
+ $this->pri = $pri;
+ }
}
class ExtTestClass
@@ -24,17 +24,17 @@ class ExtTestClass
class MyStorage extends SplObjectStorage
{
- public $def = 24;
- public $pub = 25;
- protected $pro = 26;
- private $pri = 27;
-
- public function __construct($pub = 52, $pro = 53, $pri = 54)
- {
- $this->pub = $pub;
- $this->pro = $pro;
- $this->pri = $pri;
- }
+ public $def = 24;
+ public $pub = 25;
+ protected $pro = 26;
+ private $pri = 27;
+
+ public function __construct($pub = 52, $pro = 53, $pri = 54)
+ {
+ $this->pub = $pub;
+ $this->pro = $pro;
+ $this->pri = $pri;
+ }
}
class ExtStorage extends MyStorage
@@ -52,7 +52,7 @@ var_dump(count($storage));
foreach($storage as $object)
{
- var_dump($object);
+ var_dump($object);
}
var_dump($storage);
@@ -66,14 +66,12 @@ var_dump(count($storage2));
foreach($storage2 as $object)
{
- var_dump($object);
+ var_dump($object);
}
var_dump($storage2);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(2)
object(TestClass)#%d (4) {
@@ -209,4 +207,3 @@ object(MyStorage)#%d (5) {
}
}
}
-===DONE===
diff --git a/ext/spl/tests/observer_006.phpt b/ext/spl/tests/observer_006.phpt
index f021dfb7f2..e130f469ad 100644
--- a/ext/spl/tests/observer_006.phpt
+++ b/ext/spl/tests/observer_006.phpt
@@ -5,22 +5,22 @@ SPL: SplObjectStorage with accociatied information
class TestClass
{
- public $test = 25;
+ public $test = 25;
- public function __construct($test = 42)
- {
- $this->test = $test;
- }
+ public function __construct($test = 42)
+ {
+ $this->test = $test;
+ }
}
class MyStorage extends SplObjectStorage
{
- public $bla = 25;
+ public $bla = 25;
- public function __construct($bla = 26)
- {
- $this->bla = $bla;
- }
+ public function __construct($bla = 26)
+ {
+ $this->bla = $bla;
+ }
}
$storage = new MyStorage();
@@ -34,7 +34,7 @@ var_dump(count($storage));
foreach($storage as $object)
{
- var_dump($object->test);
+ var_dump($object->test);
}
var_dump($storage);
@@ -48,7 +48,7 @@ var_dump(count($storage2));
foreach($storage2 as $object)
{
- var_dump($object->test);
+ var_dump($object->test);
}
var_dump($storage2);
@@ -75,8 +75,6 @@ echo "===UNSERIALIZE4===\n";
var_dump(unserialize(serialize($storage)));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
int(2)
int(1)
@@ -307,4 +305,3 @@ object(MyStorage)#%d (2) {
}
}
}
-===DONE===
diff --git a/ext/spl/tests/observer_007.phpt b/ext/spl/tests/observer_007.phpt
index 4525edc693..254010cb64 100644
--- a/ext/spl/tests/observer_007.phpt
+++ b/ext/spl/tests/observer_007.phpt
@@ -12,11 +12,8 @@ var_dump($a == $b);
$a[$b] = 3;
var_dump($a == $b);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
bool(true)
bool(false)
bool(true)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/observer_008.phpt b/ext/spl/tests/observer_008.phpt
index 65f3e4da52..a584d5492c 100644
--- a/ext/spl/tests/observer_008.phpt
+++ b/ext/spl/tests/observer_008.phpt
@@ -26,10 +26,7 @@ var_dump($a->count());
$a->removeAll($b);
var_dump($a->count());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(3)
int(2)
int(1)
-===DONE===
diff --git a/ext/spl/tests/observer_009.phpt b/ext/spl/tests/observer_009.phpt
index c55660fa29..58f4998084 100644
--- a/ext/spl/tests/observer_009.phpt
+++ b/ext/spl/tests/observer_009.phpt
@@ -22,9 +22,6 @@ foreach ($storageB as $object) {
}
echo "\n";
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Count storage A: 2 x x
Count storage B: 2 x x
-===DONE===
diff --git a/ext/spl/tests/observer_010.phpt b/ext/spl/tests/observer_010.phpt
index a62018958e..f455f68a9b 100644
--- a/ext/spl/tests/observer_010.phpt
+++ b/ext/spl/tests/observer_010.phpt
@@ -9,6 +9,7 @@ $map = new SplObjectStorage();
$map[$a] = 'foo';
var_dump($map[$b] ?? null);
var_dump($map[$a] ?? null);
+?>
--EXPECT--
NULL
string(3) "foo"
diff --git a/ext/spl/tests/pqueue_001.phpt b/ext/spl/tests/pqueue_001.phpt
index c9338484b5..2b67ad4a2a 100644
--- a/ext/spl/tests/pqueue_001.phpt
+++ b/ext/spl/tests/pqueue_001.phpt
@@ -59,8 +59,6 @@ foreach ($pq3 as $k=>$v) {
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Exception: Can't extract from an empty heap
2=>b
@@ -93,4 +91,3 @@ EXTR_PRIORITY
2=>2
1=>1
0=>0
-===DONE===
diff --git a/ext/spl/tests/pqueue_002.phpt b/ext/spl/tests/pqueue_002.phpt
index 5e3767f2fd..ee9a5f30ca 100644
--- a/ext/spl/tests/pqueue_002.phpt
+++ b/ext/spl/tests/pqueue_002.phpt
@@ -53,8 +53,6 @@ try {
echo "Exception: ".$e->getMessage()."\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
inserted 1
Exception: foo
@@ -64,4 +62,3 @@ Exception: Heap is corrupted, heap properties are no longer ensured.
Recovering..
int(1)
int(2)
-===DONE===
diff --git a/ext/spl/tests/pqueue_003.phpt b/ext/spl/tests/pqueue_003.phpt
index c90585767f..1e819c6422 100644
--- a/ext/spl/tests/pqueue_003.phpt
+++ b/ext/spl/tests/pqueue_003.phpt
@@ -19,8 +19,6 @@ while ($h->valid()) {
$h->next();
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
count($h) = 4
$h->count() = 4
@@ -28,4 +26,3 @@ $h->count() = 4
2=>4
1=>1
0=>0
-===DONE===
diff --git a/ext/spl/tests/pqueue_004.phpt b/ext/spl/tests/pqueue_004.phpt
index 172cc8e218..86af228ce2 100644
--- a/ext/spl/tests/pqueue_004.phpt
+++ b/ext/spl/tests/pqueue_004.phpt
@@ -11,8 +11,6 @@ $pq->insert("d", -2);
var_dump($pq);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
object(SplPriorityQueue)#1 (3) {
["flags":"SplPriorityQueue":private]=>
@@ -51,4 +49,3 @@ object(SplPriorityQueue)#1 (3) {
}
}
}
-===DONE===
diff --git a/ext/spl/tests/pqueue_compare_basic.phpt b/ext/spl/tests/pqueue_compare_basic.phpt
index bc4085e8dd..ac05b6f292 100644
--- a/ext/spl/tests/pqueue_compare_basic.phpt
+++ b/ext/spl/tests/pqueue_compare_basic.phpt
@@ -10,10 +10,7 @@ var_dump($h->compare(4, 5) < 0);
var_dump($h->compare(5, 5) == 0);
var_dump($h->compare(5, 4) > 0);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
bool(true)
bool(true)
bool(true)
-===DONE===
diff --git a/ext/spl/tests/recursiveIteratorIterator_beginchildren_error.phpt b/ext/spl/tests/recursiveIteratorIterator_beginchildren_error.phpt
index cac0e2c479..e8b71ebb0d 100644
--- a/ext/spl/tests/recursiveIteratorIterator_beginchildren_error.phpt
+++ b/ext/spl/tests/recursiveIteratorIterator_beginchildren_error.phpt
@@ -11,7 +11,7 @@ $recArrIt = new RecursiveArrayIterator($arrOb->getIterator());
class MyRecursiveIteratorIterator extends RecursiveIteratorIterator {
function beginchildren() {
- throw new Exception;
+ throw new Exception;
}
}
diff --git a/ext/spl/tests/recursiveIteratorIterator_callHasChildren_error.phpt b/ext/spl/tests/recursiveIteratorIterator_callHasChildren_error.phpt
index 1961517253..df66937525 100644
--- a/ext/spl/tests/recursiveIteratorIterator_callHasChildren_error.phpt
+++ b/ext/spl/tests/recursiveIteratorIterator_callHasChildren_error.phpt
@@ -11,7 +11,7 @@ $recArrIt = new RecursiveArrayIterator($arrOb->getIterator());
class MyRecursiveIteratorIterator extends RecursiveIteratorIterator {
function callHasChildren() {
- throw new Exception;
+ throw new Exception;
}
}
diff --git a/ext/spl/tests/recursiveIteratorIterator_endchildren_error.phpt b/ext/spl/tests/recursiveIteratorIterator_endchildren_error.phpt
index 941f92be82..7bd08d444f 100644
--- a/ext/spl/tests/recursiveIteratorIterator_endchildren_error.phpt
+++ b/ext/spl/tests/recursiveIteratorIterator_endchildren_error.phpt
@@ -11,7 +11,7 @@ $recArrIt = new RecursiveArrayIterator($arrOb->getIterator());
class MyRecursiveIteratorIterator extends RecursiveIteratorIterator {
function endchildren() {
- throw new Exception;
+ throw new Exception;
}
}
diff --git a/ext/spl/tests/recursiveIteratorIterator_nextelement_error.phpt b/ext/spl/tests/recursiveIteratorIterator_nextelement_error.phpt
index dd4f038710..bd084f54e6 100644
--- a/ext/spl/tests/recursiveIteratorIterator_nextelement_error.phpt
+++ b/ext/spl/tests/recursiveIteratorIterator_nextelement_error.phpt
@@ -11,7 +11,7 @@ $recArrIt = new RecursiveArrayIterator($arrOb->getIterator());
class MyRecursiveIteratorIterator extends RecursiveIteratorIterator {
function nextelement() {
- throw new Exception;
+ throw new Exception;
}
}
diff --git a/ext/spl/tests/recursive_tree_iterator_001.phpt b/ext/spl/tests/recursive_tree_iterator_001.phpt
index ac9f281388..c3172a58b7 100644
--- a/ext/spl/tests/recursive_tree_iterator_001.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_001.phpt
@@ -1,54 +1,51 @@
--TEST--
SPL: RecursiveTreeIterator
---INI--
-error_reporting=E_ALL&~E_NOTICE
--FILE--
<?php
$ary = array(
- 0 => array(
- "a",
- 1,
- ),
- "a" => array(
- 2,
- "b",
- 3 => array(
- 4,
- "c",
- ),
- "3" => array(
- 4,
- "c",
- ),
- ),
+ 0 => array(
+ "a",
+ 1,
+ ),
+ "a" => array(
+ 2,
+ "b",
+ 3 => array(
+ 4,
+ "c",
+ ),
+ "3" => array(
+ 4,
+ "c",
+ ),
+ ),
);
$it = new RecursiveArrayIterator($ary);
echo "-- flags = BYPASS_KEY --\n";
foreach(new RecursiveTreeIterator($it) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = BYPASS_CURRENT --\n";
foreach(new RecursiveTreeIterator($it, RecursiveTreeIterator::BYPASS_CURRENT) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = BYPASS_KEY|BYPASS_KEY --\n";
foreach(new RecursiveTreeIterator($it, RecursiveTreeIterator::BYPASS_CURRENT|RecursiveTreeIterator::BYPASS_KEY) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = 0 --\n";
foreach(new RecursiveTreeIterator($it, 0) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = 0, caching_it_flags = CachingIterator::CATCH_GET_CHILD --\n";
foreach(new RecursiveTreeIterator($it, 0, CachingIterator::CATCH_GET_CHILD) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
?>
-===DONE===
---EXPECT--
+--EXPECTF--
-- flags = BYPASS_KEY --
[0] => |-Array
[0] => | |-a
@@ -60,22 +57,34 @@ foreach(new RecursiveTreeIterator($it, 0, CachingIterator::CATCH_GET_CHILD) as $
[0] => |-4
[1] => \-c
-- flags = BYPASS_CURRENT --
+
+Warning: Array to string conversion in %s on line %d
[|-0] => Array
[| |-0] => a
[| \-1] => 1
+
+Warning: Array to string conversion in %s on line %d
[\-a] => Array
[ |-0] => 2
[ |-1] => b
+
+Warning: Array to string conversion in %s on line %d
[ \-3] => Array
[ |-0] => 4
[ \-1] => c
-- flags = BYPASS_KEY|BYPASS_KEY --
+
+Warning: Array to string conversion in %s on line %d
[0] => Array
[0] => a
[1] => 1
+
+Warning: Array to string conversion in %s on line %d
[a] => Array
[0] => 2
[1] => b
+
+Warning: Array to string conversion in %s on line %d
[3] => Array
[0] => 4
[1] => c
@@ -99,4 +108,3 @@ foreach(new RecursiveTreeIterator($it, 0, CachingIterator::CATCH_GET_CHILD) as $
[ \-3] => \-Array
[ |-0] => |-4
[ \-1] => \-c
-===DONE===
diff --git a/ext/spl/tests/recursive_tree_iterator_002.phpt b/ext/spl/tests/recursive_tree_iterator_002.phpt
index 7d82b191e2..01f12bf595 100644
--- a/ext/spl/tests/recursive_tree_iterator_002.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_002.phpt
@@ -5,12 +5,10 @@ error_reporting=E_ALL&~E_NOTICE
--FILE--
<?php
try {
- new RecursiveTreeIterator();
-} catch (InvalidArgumentException $e) {
- echo "InvalidArgumentException thrown\n";
+ new RecursiveTreeIterator();
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
}
?>
-===DONE===
--EXPECT--
-InvalidArgumentException thrown
-===DONE===
+RecursiveTreeIterator::__construct() expects at least 1 argument, 0 given
diff --git a/ext/spl/tests/recursive_tree_iterator_003.phpt b/ext/spl/tests/recursive_tree_iterator_003.phpt
index 721b67ac02..80225720f2 100644
--- a/ext/spl/tests/recursive_tree_iterator_003.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_003.phpt
@@ -3,12 +3,10 @@ SPL: RecursiveTreeIterator(non-traversable)
--FILE--
<?php
try {
- new RecursiveTreeIterator(new ArrayIterator(array()));
+ new RecursiveTreeIterator(new ArrayIterator(array()));
} catch (TypeError $e) {
echo $e->getMessage(), "\n";
}
?>
-===DONE===
--EXPECT--
-RecursiveCachingIterator::__construct() expects parameter 1 to be RecursiveIterator, object given
-===DONE===
+RecursiveCachingIterator::__construct(): Argument #1 ($iterator) must be of type RecursiveIterator, ArrayIterator given
diff --git a/ext/spl/tests/recursive_tree_iterator_004.phpt b/ext/spl/tests/recursive_tree_iterator_004.phpt
index 9435db8bbd..28fe8e05f2 100644
--- a/ext/spl/tests/recursive_tree_iterator_004.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_004.phpt
@@ -6,30 +6,29 @@ error_reporting=E_ALL&~E_NOTICE
<?php
$ary = array(
- 0 => array(
- "a",
- 1,
- ),
- "a" => array(
- 2,
- "b",
- 3 => array(
- 4,
- "c",
- ),
- "3" => array(
- 4,
- "c",
- ),
- ),
+ 0 => array(
+ "a",
+ 1,
+ ),
+ "a" => array(
+ 2,
+ "b",
+ 3 => array(
+ 4,
+ "c",
+ ),
+ "3" => array(
+ 4,
+ "c",
+ ),
+ ),
);
$it = new RecursiveTreeIterator(new RecursiveArrayIterator($ary));
foreach($it as $k => $v) {
- echo '[' . $it->key() . '] => ' . $it->getPrefix() . $it->getEntry() . $it->getPostfix() . "\n";
+ echo '[' . $it->key() . '] => ' . $it->getPrefix() . $it->getEntry() . $it->getPostfix() . "\n";
}
?>
-===DONE===
--EXPECT--
[0] => |-Array
[0] => | |-a
@@ -40,4 +39,3 @@ foreach($it as $k => $v) {
[3] => \-Array
[0] => |-4
[1] => \-c
-===DONE===
diff --git a/ext/spl/tests/recursive_tree_iterator_005.phpt b/ext/spl/tests/recursive_tree_iterator_005.phpt
index b14811fbe8..a63b26685c 100644
--- a/ext/spl/tests/recursive_tree_iterator_005.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_005.phpt
@@ -6,40 +6,39 @@ error_reporting=E_ALL&~E_NOTICE
<?php
$ary = array(
- 0 => array(
- (binary) "binary",
- "abc2",
- 1,
- ),
- (binary) "binary" => array(
- 2,
- "b",
- 3 => array(
- 4,
- "c",
- ),
- "4abc" => array(
- 4,
- "c",
- ),
- ),
+ 0 => array(
+ (binary) "binary",
+ "abc2",
+ 1,
+ ),
+ (binary) "binary" => array(
+ 2,
+ "b",
+ 3 => array(
+ 4,
+ "c",
+ ),
+ "4abc" => array(
+ 4,
+ "c",
+ ),
+ ),
);
$it = new RecursiveTreeIterator(new RecursiveArrayIterator($ary), 0);
foreach($it as $k => $v) {
- var_dump($v);
+ var_dump($v);
}
echo "\n----------------\n\n";
foreach($it as $k => $v) {
- var_dump($k);
+ var_dump($k);
}
echo "\n----------------\n\n";
echo "key, getEntry, current:\n";
foreach($it as $k => $v) {
- var_dump($it->key(), $it->getEntry(), $it->current());
+ var_dump($it->key(), $it->getEntry(), $it->current());
}
?>
-===DONE===
--EXPECT--
string(7) "|-Array"
string(10) "| |-binary"
@@ -113,4 +112,3 @@ string(7) " |-4"
string(7) " \-1"
string(1) "c"
string(7) " \-c"
-===DONE===
diff --git a/ext/spl/tests/recursive_tree_iterator_006.phpt b/ext/spl/tests/recursive_tree_iterator_006.phpt
index 1d1891e4a4..ba71586396 100644
--- a/ext/spl/tests/recursive_tree_iterator_006.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_006.phpt
@@ -1,64 +1,61 @@
--TEST--
SPL: RecursiveTreeIterator and IteratorAggregate
---INI--
-error_reporting=E_ALL&~E_NOTICE
--FILE--
<?php
$ary = array(
- 0 => array(
- "a",
- 1,
- ),
- "a" => array(
- 2,
- "b",
- 3 => array(
- 4,
- "c",
- ),
- "3" => array(
- 4,
- "c",
- ),
- ),
+ 0 => array(
+ "a",
+ 1,
+ ),
+ "a" => array(
+ 2,
+ "b",
+ 3 => array(
+ 4,
+ "c",
+ ),
+ "3" => array(
+ 4,
+ "c",
+ ),
+ ),
);
class RecursiveArrayIteratorAggregated implements IteratorAggregate {
- public $it;
- function __construct($it) {
- $this->it = new RecursiveArrayIterator($it);
- }
- function getIterator() {
- return $this->it;
- }
+ public $it;
+ function __construct($it) {
+ $this->it = new RecursiveArrayIterator($it);
+ }
+ function getIterator() {
+ return $this->it;
+ }
}
$it = new RecursiveArrayIteratorAggregated($ary);
echo "-- flags = BYPASS_KEY --\n";
foreach(new RecursiveTreeIterator($it) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = BYPASS_CURRENT --\n";
foreach(new RecursiveTreeIterator($it, RecursiveTreeIterator::BYPASS_CURRENT) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = BYPASS_KEY|BYPASS_KEY --\n";
foreach(new RecursiveTreeIterator($it, RecursiveTreeIterator::BYPASS_CURRENT|RecursiveTreeIterator::BYPASS_KEY) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = 0 --\n";
foreach(new RecursiveTreeIterator($it, 0) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "-- flags = 0, caching_it_flags = CachingIterator::CATCH_GET_CHILD --\n";
foreach(new RecursiveTreeIterator($it, 0, CachingIterator::CATCH_GET_CHILD) as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
?>
-===DONE===
---EXPECT--
+--EXPECTF--
-- flags = BYPASS_KEY --
[0] => |-Array
[0] => | |-a
@@ -70,22 +67,34 @@ foreach(new RecursiveTreeIterator($it, 0, CachingIterator::CATCH_GET_CHILD) as $
[0] => |-4
[1] => \-c
-- flags = BYPASS_CURRENT --
+
+Warning: Array to string conversion in %s on line %d
[|-0] => Array
[| |-0] => a
[| \-1] => 1
+
+Warning: Array to string conversion in %s on line %d
[\-a] => Array
[ |-0] => 2
[ |-1] => b
+
+Warning: Array to string conversion in %s on line %d
[ \-3] => Array
[ |-0] => 4
[ \-1] => c
-- flags = BYPASS_KEY|BYPASS_KEY --
+
+Warning: Array to string conversion in %s on line %d
[0] => Array
[0] => a
[1] => 1
+
+Warning: Array to string conversion in %s on line %d
[a] => Array
[0] => 2
[1] => b
+
+Warning: Array to string conversion in %s on line %d
[3] => Array
[0] => 4
[1] => c
@@ -109,4 +118,3 @@ foreach(new RecursiveTreeIterator($it, 0, CachingIterator::CATCH_GET_CHILD) as $
[ \-3] => \-Array
[ |-0] => |-4
[ \-1] => \-c
-===DONE===
diff --git a/ext/spl/tests/recursive_tree_iterator_007.phpt b/ext/spl/tests/recursive_tree_iterator_007.phpt
index a017254df0..196f6a1d90 100644
--- a/ext/spl/tests/recursive_tree_iterator_007.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_007.phpt
@@ -8,26 +8,24 @@ error_reporting=E_ALL&~E_NOTICE
$ary = array(new stdClass);
class RecursiveArrayIteratorAggregated implements IteratorAggregate {
- public $it;
- function __construct($it) {
- $this->it = new RecursiveArrayIterator($it);
- }
- function getIterator() {
- return $this->it;
- }
+ public $it;
+ function __construct($it) {
+ $this->it = new RecursiveArrayIterator($it);
+ }
+ function getIterator() {
+ return $this->it;
+ }
}
$it = new RecursiveArrayIteratorAggregated($ary);
try {
- foreach(new RecursiveTreeIterator($it) as $k => $v) {
- echo "[$k] => $v\n";
- }
+ foreach(new RecursiveTreeIterator($it) as $k => $v) {
+ echo "[$k] => $v\n";
+ }
} catch (Error $e) {
- echo $e->getMessage(), "\n";
+ echo $e->getMessage(), "\n";
}
?>
-===DONE===
--EXPECT--
Object of class stdClass could not be converted to string
-===DONE===
diff --git a/ext/spl/tests/recursive_tree_iterator_008.phpt b/ext/spl/tests/recursive_tree_iterator_008.phpt
index 6ce555007d..2dd5318824 100644
--- a/ext/spl/tests/recursive_tree_iterator_008.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_008.phpt
@@ -6,36 +6,33 @@ error_reporting=E_ALL&~E_NOTICE
<?php
$ary = array(
- "a" => array("b"),
- "c" => array("d"),
+ "a" => array("b"),
+ "c" => array("d"),
);
$it = new RecursiveArrayIterator($ary);
$it = new RecursiveTreeIterator($it);
for($i = 0; $i < 6; ++$i) {
- $it->setPrefixPart($i, $i);
+ $it->setPrefixPart($i, $i);
}
foreach($it as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
try {
- $it->setPrefixPart(-1, "");
- $it->setPrefixPart(6, "");
-} catch (OutOfRangeException $e) {
- echo "OutOfRangeException thrown\n";
+ $it->setPrefixPart(-1, "");
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
try {
- $it->setPrefixPart(6, "");
-} catch (OutOfRangeException $e) {
- echo "OutOfRangeException thrown\n";
+ $it->setPrefixPart(6, "");
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
?>
-===DONE===
--EXPECT--
[a] => 035Array
[0] => 0145b
[c] => 045Array
[0] => 0245d
-OutOfRangeException thrown
-OutOfRangeException thrown
-===DONE===
+RecursiveTreeIterator::setPrefixPart(): Argument #1 ($part) must be a RecursiveTreeIterator::PREFIX_* constant
+RecursiveTreeIterator::setPrefixPart(): Argument #1 ($part) must be a RecursiveTreeIterator::PREFIX_* constant
diff --git a/ext/spl/tests/recursive_tree_iterator_setpostfix.phpt b/ext/spl/tests/recursive_tree_iterator_setpostfix.phpt
index b363c1dd4b..eea4da795a 100644
--- a/ext/spl/tests/recursive_tree_iterator_setpostfix.phpt
+++ b/ext/spl/tests/recursive_tree_iterator_setpostfix.phpt
@@ -6,22 +6,22 @@ Joshua Thijssen (jthijssen@noxlogic.nl)
<?php
$arr = array(
- 0 => array(
- "a",
- 1,
- ),
- "a" => array(
- 2,
- "b",
- 3 => array(
- 4,
- "c",
- ),
- "3" => array(
- 4,
- "c",
- ),
- ),
+ 0 => array(
+ "a",
+ 1,
+ ),
+ "a" => array(
+ 2,
+ "b",
+ 3 => array(
+ 4,
+ "c",
+ ),
+ "3" => array(
+ 4,
+ "c",
+ ),
+ ),
);
$it = new RecursiveArrayIterator($arr);
@@ -38,7 +38,7 @@ echo "\n\n";
echo "----\n";
foreach($it as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
echo "----\n";
@@ -48,13 +48,12 @@ echo "\n\n";
echo "----\n";
foreach($it as $k => $v) {
- echo "[$k] => $v\n";
+ echo "[$k] => $v\n";
}
?>
-===DONE===
--EXPECT--
----
@@ -85,4 +84,3 @@ POSTFIX
[3] => \-Array
[0] => |-4
[1] => \-c
-===DONE===
diff --git a/ext/spl/tests/recursivecomparedualiterator.inc b/ext/spl/tests/recursivecomparedualiterator.inc
index 5b63e9f0b3..15f8b177c0 100644
--- a/ext/spl/tests/recursivecomparedualiterator.inc
+++ b/ext/spl/tests/recursivecomparedualiterator.inc
@@ -16,54 +16,54 @@
*/
class RecursiveCompareDualIterator extends RecursiveIteratorIterator
{
- /** Used to keep end of recursion equality. That is en leaving a nesting
- * level we need to check whether both child iterators are at their end.
- */
- protected $equal = false;
+ /** Used to keep end of recursion equality. That is en leaving a nesting
+ * level we need to check whether both child iterators are at their end.
+ */
+ protected $equal = false;
- /** Construct from RecursiveDualIterator
- *
- * @param $it RecursiveDualIterator
- * @param $mode should be LEAVES_ONLY
- * @param $flags should be 0
- */
- function __construct(RecursiveDualIterator $it, $mode = self::LEAVES_ONLY, $flags = 0)
- {
- parent::__construct($it);
- }
+ /** Construct from RecursiveDualIterator
+ *
+ * @param $it RecursiveDualIterator
+ * @param $mode should be LEAVES_ONLY
+ * @param $flags should be 0
+ */
+ function __construct(RecursiveDualIterator $it, $mode = self::LEAVES_ONLY, $flags = 0)
+ {
+ parent::__construct($it);
+ }
- /** Rewind iteration andcomparison process. Starting with $equal = true.
- */
- function rewind()
- {
- $this->equal = true;
- parent::rewind();
- }
+ /** Rewind iteration and comparison process. Starting with $equal = true.
+ */
+ function rewind()
+ {
+ $this->equal = true;
+ parent::rewind();
+ }
- /** Calculate $equal
- * @see $equal
- */
- function endChildren()
- {
- $this->equal &= !$this->getInnerIterator()->getLHS()->valid()
- && !$this->getInnerIterator()->getRHS()->valid();
- }
+ /** Calculate $equal
+ * @see $equal
+ */
+ function endChildren()
+ {
+ $this->equal &= !$this->getInnerIterator()->getLHS()->valid()
+ && !$this->getInnerIterator()->getRHS()->valid();
+ }
- /** @return whether both inner iterators are valid and have identical
- * current and key values or both are non valid.
- */
- function areIdentical()
- {
- return $this->equal && $this->getInnerIterator()->areIdentical();
- }
+ /** @return whether both inner iterators are valid and have identical
+ * current and key values or both are non valid.
+ */
+ function areIdentical()
+ {
+ return $this->equal && $this->getInnerIterator()->areIdentical();
+ }
- /** @return whether both inner iterators are valid and have equal current
- * and key values or both are non valid.
- */
- function areEqual()
- {
- return $this->equal && $this->getInnerIterator()->areEqual();
- }
+ /** @return whether both inner iterators are valid and have equal current
+ * and key values or both are non valid.
+ */
+ function areEqual()
+ {
+ return $this->equal && $this->getInnerIterator()->areEqual();
+ }
}
?>
diff --git a/ext/spl/tests/recursivedualiterator.inc b/ext/spl/tests/recursivedualiterator.inc
index a56984e083..45abf4c8f4 100644
--- a/ext/spl/tests/recursivedualiterator.inc
+++ b/ext/spl/tests/recursivedualiterator.inc
@@ -16,57 +16,57 @@
*/
class RecursiveDualIterator extends DualIterator implements RecursiveIterator
{
- private $ref;
+ private $ref;
- /** construct iterator from two RecursiveIterator instances
- *
- * @param lhs Left Hand Side Iterator
- * @param rhs Right Hand Side Iterator
- * @param flags iteration flags
- */
- function __construct(RecursiveIterator $lhs, RecursiveIterator $rhs,
- $flags = 0x33 /*DualIterator::DEFAULT_FLAGS*/)
- {
- parent::__construct($lhs, $rhs, $flags);
- }
+ /** construct iterator from two RecursiveIterator instances
+ *
+ * @param lhs Left Hand Side Iterator
+ * @param rhs Right Hand Side Iterator
+ * @param flags iteration flags
+ */
+ function __construct(RecursiveIterator $lhs, RecursiveIterator $rhs,
+ $flags = 0x33 /*DualIterator::DEFAULT_FLAGS*/)
+ {
+ parent::__construct($lhs, $rhs, $flags);
+ }
- /** @return whether both LHS and RHS have children
- */
- function hasChildren()
- {
- return $this->getLHS()->hasChildren() && $this->getRHS()->hasChildren();
- }
+ /** @return whether both LHS and RHS have children
+ */
+ function hasChildren()
+ {
+ return $this->getLHS()->hasChildren() && $this->getRHS()->hasChildren();
+ }
- /** @return new RecursiveDualIterator (late binding) for the two inner
- * iterators current children.
- */
- function getChildren()
- {
- if (empty($this->ref))
- {
- $this->ref = new ReflectionClass($this);
- }
- return $this->ref->newInstance(
- $this->getLHS()->getChildren(), $this->getRHS()->getChildren(), $this->getFlags());
- }
+ /** @return new RecursiveDualIterator (late binding) for the two inner
+ * iterators current children.
+ */
+ function getChildren()
+ {
+ if (empty($this->ref))
+ {
+ $this->ref = new ReflectionClass($this);
+ }
+ return $this->ref->newInstance(
+ $this->getLHS()->getChildren(), $this->getRHS()->getChildren(), $this->getFlags());
+ }
- /** @return whether both inner iterators are valid, have same hasChildren()
- * state and identical current and key values or both are non valid.
- */
- function areIdentical()
- {
- return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
- && parent::areIdentical();
- }
+ /** @return whether both inner iterators are valid, have same hasChildren()
+ * state and identical current and key values or both are non valid.
+ */
+ function areIdentical()
+ {
+ return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
+ && parent::areIdentical();
+ }
- /** @return whether both inner iterators are valid, have same hasChildren()
- * state and equal current and key values or both are invalid.
- */
- function areEqual()
- {
- return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
- && parent::areEqual();
- }
+ /** @return whether both inner iterators are valid, have same hasChildren()
+ * state and equal current and key values or both are invalid.
+ */
+ function areEqual()
+ {
+ return $this->getLHS()->hasChildren() === $this->getRHS()->hasChildren()
+ && parent::areEqual();
+ }
}
?>
diff --git a/ext/spl/tests/regexIterator_setMode_error.phpt b/ext/spl/tests/regexIterator_setMode_error.phpt
index 77732b058c..10df255f4a 100644
--- a/ext/spl/tests/regexIterator_setMode_error.phpt
+++ b/ext/spl/tests/regexIterator_setMode_error.phpt
@@ -11,18 +11,14 @@ $regexIterator = new RegexIterator(new ArrayIterator($array), "/f/");
var_dump($regexIterator->getMode());
try {
- $regexIterator->setMode(7);
-} catch (InvalidArgumentException $e) {
- var_dump($e->getMessage());
- var_dump($e->getCode());
+ $regexIterator->setMode(7);
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ var_dump($e->getCode());
}
-$regexIterator->setMode('foo');
-
?>
---EXPECTF--
+--EXPECT--
int(0)
-string(14) "Illegal mode 7"
+RegexIterator::setMode(): Argument #1 ($mode) must be RegexIterator::MATCH, RegexIterator::GET_MATCH, RegexIterator::ALL_MATCHES, RegexIterator::SPLIT, or RegexIterator::REPLACE
int(0)
-
-Warning: RegexIterator::setMode() expects parameter 1 to be int, string given in %s on line %d
diff --git a/ext/spl/tests/spl_001.phpt b/ext/spl/tests/spl_001.phpt
index e101272a84..4fc0be3d0c 100644
--- a/ext/spl/tests/spl_001.phpt
+++ b/ext/spl/tests/spl_001.phpt
@@ -13,11 +13,10 @@ print_r($ar);
foreach($ar as $v)
{
- var_dump($v);
+ var_dump($v);
}
?>
-===DONE===
--EXPECT--
int(4)
Array
@@ -31,4 +30,3 @@ int(1)
int(5)
int(3)
int(4)
-===DONE===
diff --git a/ext/spl/tests/spl_002.phpt b/ext/spl/tests/spl_002.phpt
index d8b71b20cf..5442b1991d 100644
--- a/ext/spl/tests/spl_002.phpt
+++ b/ext/spl/tests/spl_002.phpt
@@ -5,10 +5,10 @@ SPL: Countable
class Test implements Countable
{
- function count()
- {
- return 4;
- }
+ function count()
+ {
+ return 4;
+ }
};
$a = new Test;
@@ -16,7 +16,5 @@ $a = new Test;
var_dump(count($a));
?>
-===DONE===
--EXPECT--
int(4)
-===DONE===
diff --git a/ext/spl/tests/spl_003.phpt b/ext/spl/tests/spl_003.phpt
index 3dd9ab3482..a9080c7298 100644
--- a/ext/spl/tests/spl_003.phpt
+++ b/ext/spl/tests/spl_003.phpt
@@ -30,8 +30,6 @@ var_dump(class_implements(new a),
);
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
Warning: class_parents(): Class foo does not exist in %sspl_003.php on line %d
string(3) "foo"
@@ -72,4 +70,3 @@ array(0) {
}
bool(false)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/spl_004.phpt b/ext/spl/tests/spl_004.phpt
index 60de68b82a..3538fa6b48 100644
--- a/ext/spl/tests/spl_004.phpt
+++ b/ext/spl/tests/spl_004.phpt
@@ -4,30 +4,30 @@ SPL: iterator_apply()
<?php
function my_error_handler($errno, $errstr, $errfile, $errline) {
- echo "Error: $errstr\n";
+ echo "Error: $errstr\n";
}
set_error_handler('my_error_handler');
function test_arg($arg)
{
- if ($arg instanceof Iterator)
- {
- var_dump($arg->key());
- var_dump($arg->current());
- }
- else
- {
- var_dump($arg);
- }
- return true;
+ if ($arg instanceof Iterator)
+ {
+ var_dump($arg->key());
+ var_dump($arg->current());
+ }
+ else
+ {
+ var_dump($arg);
+ }
+ return true;
}
function test()
{
- static $arg = 0;
- var_dump($arg++);
- return true;
+ static $arg = 0;
+ var_dump($arg++);
+ return true;
}
$it = new RecursiveArrayIterator(array(1, array(21, 22), 3));
@@ -43,16 +43,22 @@ var_dump(iterator_apply($it, 'test'));
echo "===ERRORS===\n";
try {
- var_dump(iterator_apply($it, 'test', 1));
-} catch (Error $e) {
- my_error_handler($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
+ var_dump(iterator_apply($it, 'test', 1));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(iterator_apply($it, 'non_existing_function'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(iterator_apply($it, 'non_existing_function', NULL, 2));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
}
-var_dump(iterator_apply($it, 'non_existing_function'));
-var_dump(iterator_apply($it, 'non_existing_function', NULL, 2));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
int(0)
int(1)
@@ -78,9 +84,6 @@ int(5)
int(6)
int(4)
===ERRORS===
-Error: Argument 3 passed to iterator_apply() must be of the type array or null, int given
-Error: iterator_apply() expects parameter 2 to be a valid callback, function 'non_existing_function' not found or invalid function name
-NULL
-Error: iterator_apply() expects at most 3 parameters, 4 given
-NULL
-===DONE===
+iterator_apply(): Argument #3 ($args) must be of type ?array, int given
+iterator_apply(): Argument #2 ($callback) must be a valid callback, function "non_existing_function" not found or invalid function name
+iterator_apply() expects at most 3 arguments, 4 given
diff --git a/ext/spl/tests/spl_006.phpt b/ext/spl/tests/spl_006.phpt
index 1f5f85fb6d..b56ab67354 100644
--- a/ext/spl/tests/spl_006.phpt
+++ b/ext/spl/tests/spl_006.phpt
@@ -12,7 +12,6 @@ var_dump(iterator_to_array($it, false));
var_dump(iterator_to_array($it, true));
?>
-===DONE===
--EXPECT--
array(2) {
[0]=>
@@ -36,4 +35,3 @@ array(2) {
[1]=>
int(3)
}
-===DONE===
diff --git a/ext/spl/tests/spl_007.phpt b/ext/spl/tests/spl_007.phpt
index 6d4059d0b5..b119684894 100644
--- a/ext/spl/tests/spl_007.phpt
+++ b/ext/spl/tests/spl_007.phpt
@@ -15,10 +15,7 @@ $it = new ArrayIterator(array(1, 2, 3));
iterator_apply($it, array(new Foo, "foobar"));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
Called foobar.
Called foobar.
Called foobar.
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_001.phpt b/ext/spl/tests/spl_autoload_001.phpt
index fc5f6ed4f7..c7f5e573f3 100644
--- a/ext/spl/tests/spl_autoload_001.phpt
+++ b/ext/spl/tests/spl_autoload_001.phpt
@@ -17,7 +17,7 @@ if (!class_exists("TestClass")) {
$test_exts = array(NULL, "1", ".inc,,.php.inc", "");
foreach($test_exts as $exts) {
- echo "===($exts)===\n";
+ echo "===($exts)===\n";
spl_autoload("TestClass", $exts);
if (!class_exists("TestClass")) {
echo "Class TestClass could not be loaded\n";
@@ -32,12 +32,12 @@ if (!class_exists("TestClass")) {
function TestFunc1($classname)
{
- echo __METHOD__ . "($classname)\n";
+ echo __METHOD__ . "($classname)\n";
}
function TestFunc2($classname)
{
- echo __METHOD__ . "($classname)\n";
+ echo __METHOD__ . "($classname)\n";
}
echo "===SPL_AUTOLOAD()===\n";
@@ -64,18 +64,13 @@ var_dump(class_exists("TestClass", true));
echo "===NOFUNCTION===\n";
-try
-{
- spl_autoload_register("unavailable_autoload_function");
-}
-catch(Exception $e)
-{
- echo 'Exception: ' . $e->getMessage() . "\n";
+try {
+ spl_autoload_register("unavailable_autoload_function");
+} catch(\TypeError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
===EMPTY===
string(9) ".inc,.php"
@@ -105,5 +100,4 @@ TestFunc2(TestClass)
%stestclass.class.inc
bool(true)
===NOFUNCTION===
-Exception: Function 'unavailable_autoload_function' not found (function 'unavailable_autoload_function' not found or invalid function name)
-===DONE===
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, function "unavailable_autoload_function" not found or invalid function name
diff --git a/ext/spl/tests/spl_autoload_002.phpt b/ext/spl/tests/spl_autoload_002.phpt
index 778b22a7d0..1a67baabd0 100644
--- a/ext/spl/tests/spl_autoload_002.phpt
+++ b/ext/spl/tests/spl_autoload_002.phpt
@@ -1,9 +1,5 @@
--TEST--
SPL: spl_autoload_functions()
---SKIPIF--
-<?php
-if (spl_autoload_functions() !== false) die('skip __autoload() registered by php.ini');
-?>
--FILE--
<?php
@@ -39,10 +35,9 @@ spl_autoload_unregister('spl_autoload');
var_dump(spl_autoload_functions());
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
-bool(false)
+array(0) {
+}
array(1) {
[0]=>
string(12) "spl_autoload"
@@ -61,10 +56,11 @@ array(2) {
[1]=>
string(16) "SplAutoloadTest2"
}
-bool(false)
+array(0) {
+}
array(1) {
[0]=>
string(12) "spl_autoload"
}
-bool(false)
-===DONE===
+array(0) {
+}
diff --git a/ext/spl/tests/spl_autoload_003.phpt b/ext/spl/tests/spl_autoload_003.phpt
index 6fe7a38b30..016bcf2394 100644
--- a/ext/spl/tests/spl_autoload_003.phpt
+++ b/ext/spl/tests/spl_autoload_003.phpt
@@ -7,18 +7,18 @@ include_path=.
function TestFunc1($classname)
{
- echo __METHOD__ . "($classname)\n";
+ echo __METHOD__ . "($classname)\n";
}
function TestFunc2($classname)
{
- echo __METHOD__ . "($classname)\n";
- throw new Exception("Class $classname missing");
+ echo __METHOD__ . "($classname)\n";
+ throw new Exception("Class $classname missing");
}
function TestFunc3($classname)
{
- echo __METHOD__ . "($classname)\n";
+ echo __METHOD__ . "($classname)\n";
}
spl_autoload_register("TestFunc1");
@@ -27,18 +27,15 @@ spl_autoload_register("TestFunc3");
try
{
- var_dump(class_exists("TestClass", true));
+ var_dump(class_exists("TestClass", true));
}
catch(Exception $e)
{
- echo 'Exception: ' . $e->getMessage() . "\n";
+ echo 'Exception: ' . $e->getMessage() . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
TestFunc1(TestClass)
TestFunc2(TestClass)
Exception: Class TestClass missing
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_004.phpt b/ext/spl/tests/spl_autoload_004.phpt
index 7dac3abcea..8e1eafc37a 100644
--- a/ext/spl/tests/spl_autoload_004.phpt
+++ b/ext/spl/tests/spl_autoload_004.phpt
@@ -8,7 +8,7 @@ include_path=.
class MyAutoLoader {
static function autoLoad($className) {
- echo __METHOD__ . "($className)\n";
+ echo __METHOD__ . "($className)\n";
}
}
@@ -26,8 +26,6 @@ var_dump(spl_autoload_functions());
var_dump(class_exists("TestClass", true));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
array(1) {
[0]=>
@@ -40,4 +38,3 @@ array(1) {
}
MyAutoLoader::autoLoad(TestClass)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_005.phpt b/ext/spl/tests/spl_autoload_005.phpt
index ccebf91f04..6eb8510325 100644
--- a/ext/spl/tests/spl_autoload_005.phpt
+++ b/ext/spl/tests/spl_autoload_005.phpt
@@ -9,23 +9,20 @@ class MyAutoLoader {
function autoLoad($className)
{
- echo __METHOD__ . "($className)\n";
+ echo __METHOD__ . "($className)\n";
}
function autoThrow($className)
{
- echo __METHOD__ . "($className)\n";
- throw new Exception("Unavailable");
+ echo __METHOD__ . "($className)\n";
+ throw new Exception("Unavailable");
}
}
-try
-{
- spl_autoload_register(array('MyAutoLoader', 'autoLoad'), true);
-}
-catch(Exception $e)
-{
- echo 'Exception: ' . $e->getMessage() . "\n";
+try {
+ spl_autoload_register(array('MyAutoLoader', 'autoLoad'), true);
+} catch(\TypeError $e) {
+ echo $e->getMessage() . \PHP_EOL;
}
// and
@@ -37,19 +34,16 @@ spl_autoload_register(array($myAutoLoader, 'autoThrow'));
try
{
- var_dump(class_exists("TestClass", true));
+ var_dump(class_exists("TestClass", true));
}
catch(Exception $e)
{
- echo 'Exception: ' . $e->getMessage() . "\n";
+ echo 'Exception: ' . $e->getMessage() . "\n";
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
-Exception: Passed array specifies a non static method but no object (non-static method MyAutoLoader::autoLoad() should not be called statically)
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::autoLoad() cannot be called statically
MyAutoLoader::autoLoad(TestClass)
MyAutoLoader::autoThrow(TestClass)
Exception: Unavailable
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_006.phpt b/ext/spl/tests/spl_autoload_006.phpt
index a8d6619b19..7db2b462ca 100644
--- a/ext/spl/tests/spl_autoload_006.phpt
+++ b/ext/spl/tests/spl_autoload_006.phpt
@@ -8,7 +8,7 @@ include_path=.
class MyAutoLoader {
static function autoLoad($className) {
- echo __METHOD__ . "($className)\n";
+ echo __METHOD__ . "($className)\n";
}
}
@@ -20,8 +20,6 @@ var_dump(spl_autoload_functions());
var_dump(class_exists("TestClass", true));
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
array(1) {
[0]=>
@@ -34,4 +32,3 @@ array(1) {
}
MyAutoLoader::autoLoad(TestClass)
bool(false)
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_007.phpt b/ext/spl/tests/spl_autoload_007.phpt
index 3233120790..589ce74b7f 100644
--- a/ext/spl/tests/spl_autoload_007.phpt
+++ b/ext/spl/tests/spl_autoload_007.phpt
@@ -8,65 +8,60 @@ include_path=.
class MyAutoLoader {
static protected function noAccess($className) {
- echo __METHOD__ . "($className)\n";
+ echo __METHOD__ . "($className)\n";
}
static function autoLoad($className) {
- echo __METHOD__ . "($className)\n";
+ echo __METHOD__ . "($className)\n";
}
function dynaLoad($className) {
- echo __METHOD__ . "($className)\n";
+ echo __METHOD__ . "($className)\n";
}
}
$obj = new MyAutoLoader;
$funcs = array(
- 'MyAutoLoader::notExist',
- 'MyAutoLoader::noAccess',
- 'MyAutoLoader::autoLoad',
- 'MyAutoLoader::dynaLoad',
- array('MyAutoLoader', 'notExist'),
- array('MyAutoLoader', 'noAccess'),
- array('MyAutoLoader', 'autoLoad'),
- array('MyAutoLoader', 'dynaLoad'),
- array($obj, 'notExist'),
- array($obj, 'noAccess'),
- array($obj, 'autoLoad'),
- array($obj, 'dynaLoad'),
+ 'MyAutoLoader::notExist',
+ 'MyAutoLoader::noAccess',
+ 'MyAutoLoader::autoLoad',
+ 'MyAutoLoader::dynaLoad',
+ array('MyAutoLoader', 'notExist'),
+ array('MyAutoLoader', 'noAccess'),
+ array('MyAutoLoader', 'autoLoad'),
+ array('MyAutoLoader', 'dynaLoad'),
+ array($obj, 'notExist'),
+ array($obj, 'noAccess'),
+ array($obj, 'autoLoad'),
+ array($obj, 'dynaLoad'),
);
foreach($funcs as $idx => $func)
{
- if ($idx) echo "\n";
- try
- {
- var_dump($func);
- spl_autoload_register($func);
- echo "ok\n";
- }
- catch (Exception $e)
- {
- echo $e->getMessage() . "\n";
- }
+ if ($idx) echo "\n";
+ try {
+ var_dump($func);
+ spl_autoload_register($func);
+ echo "ok\n";
+ } catch(\TypeError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+ }
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
string(22) "MyAutoLoader::notExist"
-Function 'MyAutoLoader::notExist' not found (class 'MyAutoLoader' does not have a method 'notExist')
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, class MyAutoLoader does not have a method "notExist"
string(22) "MyAutoLoader::noAccess"
-Function 'MyAutoLoader::noAccess' not callable (cannot access protected method MyAutoLoader::noAccess())
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, cannot access protected method MyAutoLoader::noAccess()
string(22) "MyAutoLoader::autoLoad"
ok
string(22) "MyAutoLoader::dynaLoad"
-Function 'MyAutoLoader::dynaLoad' not callable (non-static method MyAutoLoader::dynaLoad() should not be called statically)
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically
array(2) {
[0]=>
@@ -74,7 +69,7 @@ array(2) {
[1]=>
string(8) "notExist"
}
-Passed array does not specify an existing static method (class 'MyAutoLoader' does not have a method 'notExist')
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, class MyAutoLoader does not have a method "notExist"
array(2) {
[0]=>
@@ -82,7 +77,7 @@ array(2) {
[1]=>
string(8) "noAccess"
}
-Passed array does not specify a callable static method (cannot access protected method MyAutoLoader::noAccess())
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, cannot access protected method MyAutoLoader::noAccess()
array(2) {
[0]=>
@@ -98,7 +93,7 @@ array(2) {
[1]=>
string(8) "dynaLoad"
}
-Passed array specifies a non static method but no object (non-static method MyAutoLoader::dynaLoad() should not be called statically)
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically
array(2) {
[0]=>
@@ -107,7 +102,7 @@ array(2) {
[1]=>
string(8) "notExist"
}
-Passed array does not specify an existing method (class 'MyAutoLoader' does not have a method 'notExist')
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, class MyAutoLoader does not have a method "notExist"
array(2) {
[0]=>
@@ -116,7 +111,7 @@ array(2) {
[1]=>
string(8) "noAccess"
}
-Passed array does not specify a callable static method (cannot access protected method MyAutoLoader::noAccess())
+spl_autoload_register(): Argument #1 ($callback) must be a valid callback, cannot access protected method MyAutoLoader::noAccess()
array(2) {
[0]=>
@@ -135,4 +130,3 @@ array(2) {
string(8) "dynaLoad"
}
ok
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_008.phpt b/ext/spl/tests/spl_autoload_008.phpt
index df795d02b6..99f61cd561 100644
--- a/ext/spl/tests/spl_autoload_008.phpt
+++ b/ext/spl/tests/spl_autoload_008.phpt
@@ -7,64 +7,65 @@ include_path=.
function MyAutoLoad($className)
{
- echo __METHOD__ . "($className)\n";
- throw new Exception('Bla');
+ echo __METHOD__ . "($className)\n";
+ throw new Exception('Bla');
}
class MyAutoLoader
{
- static function autoLoad($className)
- {
- echo __METHOD__ . "($className)\n";
- throw new Exception('Bla');
- }
+ static function autoLoad($className)
+ {
+ echo __METHOD__ . "($className)\n";
+ throw new Exception('Bla');
+ }
- function dynaLoad($className)
- {
- echo __METHOD__ . "($className)\n";
- throw new Exception('Bla');
- }
+ function dynaLoad($className)
+ {
+ echo __METHOD__ . "($className)\n";
+ throw new Exception('Bla');
+ }
}
$obj = new MyAutoLoader;
$funcs = array(
- 'MyAutoLoad',
- 'MyAutoLoader::autoLoad',
- 'MyAutoLoader::dynaLoad',
- array('MyAutoLoader', 'autoLoad'),
- array('MyAutoLoader', 'dynaLoad'),
- array($obj, 'autoLoad'),
- array($obj, 'dynaLoad'),
+ 'MyAutoLoad',
+ 'MyAutoLoader::autoLoad',
+ 'MyAutoLoader::dynaLoad',
+ array('MyAutoLoader', 'autoLoad'),
+ array('MyAutoLoader', 'dynaLoad'),
+ array($obj, 'autoLoad'),
+ array($obj, 'dynaLoad'),
);
foreach($funcs as $idx => $func)
{
- echo "====$idx====\n";
+ echo "====$idx====\n";
- try
- {
- var_dump($func);
- spl_autoload_register($func);
- if (count(spl_autoload_functions()))
- {
- echo "registered\n";
+ var_dump($func);
+ try {
+ spl_autoload_register($func);
+ } catch (TypeError $e) {
+ echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
+ var_dump(count(spl_autoload_functions()));
+ continue;
+ }
- var_dump(class_exists("NoExistingTestClass", true));
- }
- }
- catch (Exception $e)
- {
- echo get_class($e) . ": " . $e->getMessage() . "\n";
- }
+ if (count(spl_autoload_functions())) {
+ echo "registered\n";
- spl_autoload_unregister($func);
- var_dump(count(spl_autoload_functions()));
+ try {
+ var_dump(class_exists("NoExistingTestClass", true));
+ } catch (Exception $e) {
+ echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
+ }
+ }
+
+ spl_autoload_unregister($func);
+ var_dump(count(spl_autoload_functions()));
}
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
====0====
string(10) "MyAutoLoad"
@@ -80,7 +81,7 @@ Exception: Bla
int(0)
====2====
string(22) "MyAutoLoader::dynaLoad"
-LogicException: Function 'MyAutoLoader::dynaLoad' not callable (non-static method MyAutoLoader::dynaLoad() should not be called statically)
+TypeError: spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically
int(0)
====3====
array(2) {
@@ -100,7 +101,7 @@ array(2) {
[1]=>
string(8) "dynaLoad"
}
-LogicException: Passed array specifies a non static method but no object (non-static method MyAutoLoader::dynaLoad() should not be called statically)
+TypeError: spl_autoload_register(): Argument #1 ($callback) must be a valid callback, non-static method MyAutoLoader::dynaLoad() cannot be called statically
int(0)
====5====
array(2) {
@@ -126,4 +127,3 @@ registered
MyAutoLoader::dynaLoad(NoExistingTestClass)
Exception: Bla
int(0)
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_009.phpt b/ext/spl/tests/spl_autoload_009.phpt
index d5e54137eb..f12fd0af7e 100644
--- a/ext/spl/tests/spl_autoload_009.phpt
+++ b/ext/spl/tests/spl_autoload_009.phpt
@@ -7,8 +7,8 @@ include_path=.
function my_autoload($name)
{
- require $name . '.class.inc';
- var_dump(class_exists($name));
+ require $name . '.class.inc';
+ var_dump(class_exists($name));
}
spl_autoload_register("spl_autoload");
@@ -17,10 +17,7 @@ spl_autoload_register("my_autoload");
$obj = new testclass;
?>
-===DONE===
-<?php exit(0); ?>
--EXPECTF--
%stestclass.inc
%stestclass.class.inc
bool(true)
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_010.phpt b/ext/spl/tests/spl_autoload_010.phpt
index 239b8366ec..3b0754d8df 100644
--- a/ext/spl/tests/spl_autoload_010.phpt
+++ b/ext/spl/tests/spl_autoload_010.phpt
@@ -21,10 +21,7 @@ spl_autoload_register('autoloadC');
new C;
?>
-===DONE===
-<?php exit(0); ?>
--EXPECT--
B -> C
A -> C
C -> C
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_011.phpt b/ext/spl/tests/spl_autoload_011.phpt
index f2bc9496f7..771726ee56 100644
--- a/ext/spl/tests/spl_autoload_011.phpt
+++ b/ext/spl/tests/spl_autoload_011.phpt
@@ -23,7 +23,6 @@ unset($a);
var_dump(class_exists("C", true));
?>
===DONE===
-<?php exit(0); ?>
--EXPECT--
var:2
bool(false)
diff --git a/ext/spl/tests/spl_autoload_012.phpt b/ext/spl/tests/spl_autoload_012.phpt
index 7b13b7105a..218d3e800f 100644
--- a/ext/spl/tests/spl_autoload_012.phpt
+++ b/ext/spl/tests/spl_autoload_012.phpt
@@ -47,7 +47,6 @@ autoload_first
Fatal error: Uncaught Exception: first in %sspl_autoload_012.php:%d
Stack trace:
#0 [internal function]: autoload_first('ThisClassDoesNo...')
-#1 [internal function]: spl_autoload_call('ThisClassDoesNo...')
-#2 %sspl_autoload_012.php(%d): class_exists('ThisClassDoesNo...')
-#3 {main}
+#1 %sspl_autoload_012.php(%d): class_exists('ThisClassDoesNo...')
+#2 {main}
thrown in %s on line %d
diff --git a/ext/spl/tests/spl_autoload_013.phpt b/ext/spl/tests/spl_autoload_013.phpt
index c956ccd92f..fe71562273 100644
--- a/ext/spl/tests/spl_autoload_013.phpt
+++ b/ext/spl/tests/spl_autoload_013.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: spl_autoload_functions() with closures and invokables
+SPL: spl_autoload_functions() with closures and invocables
--FILE--
<?php
$closure = function($class) {
@@ -26,7 +26,6 @@ spl_autoload_register($al2);
var_dump(spl_autoload_functions());
?>
-===DONE===
--EXPECTF--
array(3) {
[0]=>
@@ -48,4 +47,3 @@ array(3) {
string(2) "d2"
}
}
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_014.phpt b/ext/spl/tests/spl_autoload_014.phpt
index 782fe8d07e..3c7cc38f63 100644
--- a/ext/spl/tests/spl_autoload_014.phpt
+++ b/ext/spl/tests/spl_autoload_014.phpt
@@ -1,5 +1,5 @@
--TEST--
-SPL: spl_autoload_unregister() with closures and invokables
+SPL: spl_autoload_unregister() with closures and invocables
--FILE--
<?php
$closure = function($class) {
@@ -38,10 +38,8 @@ spl_autoload_unregister($al1);
$y = new TestY;
?>
-===DONE===
--EXPECT--
closure called with class TestX
Autoloader('d1') called with TestX
WorkingAutoloader() called with TestX
WorkingAutoloader() called with TestY
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_bug48541.phpt b/ext/spl/tests/spl_autoload_bug48541.phpt
index 4936270d3b..acdf36aa71 100644
--- a/ext/spl/tests/spl_autoload_bug48541.phpt
+++ b/ext/spl/tests/spl_autoload_bug48541.phpt
@@ -30,10 +30,8 @@ spl_autoload_register($c);
spl_autoload_register($c2);
$c = new foo;
?>
-===DONE===
--EXPECT--
a called
a2 called
b called
foo
-===DONE===
diff --git a/ext/spl/tests/spl_autoload_called_scope.phpt b/ext/spl/tests/spl_autoload_called_scope.phpt
new file mode 100644
index 0000000000..23f2e84d95
--- /dev/null
+++ b/ext/spl/tests/spl_autoload_called_scope.phpt
@@ -0,0 +1,33 @@
+--TEST--
+SPL autoloader should not do anything magic with called scope
+--FILE--
+<?php
+
+class Test {
+ public static function register() {
+ spl_autoload_register([Test::class, 'autoload']);
+ }
+
+ public static function autoload($class) {
+ echo "self=" . self::class, ", static=", static::class, "\n";
+ }
+}
+
+class Test2 extends Test {
+ public static function register() {
+ spl_autoload_register([Test2::class, 'autoload']);
+ }
+
+ public static function runTest() {
+ class_exists('FooBar');
+ }
+}
+
+Test::register();
+Test2::register();
+Test2::runTest();
+
+?>
+--EXPECT--
+self=Test, static=Test
+self=Test, static=Test2
diff --git a/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt b/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt
new file mode 100644
index 0000000000..943d80ae25
--- /dev/null
+++ b/ext/spl/tests/spl_autoload_throw_with_spl_autoloader_call_as_autoloader.phpt
@@ -0,0 +1,14 @@
+--TEST--
+spl_autoload_register() function - warn when using spl_autoload_call() as the autoloading function
+--FILE--
+<?php
+
+try {
+ spl_autoload_register('spl_autoload_call');
+} catch (\ValueError $e) {
+ echo $e->getMessage() . \PHP_EOL;
+}
+
+?>
+--EXPECT--
+spl_autoload_register(): Argument #1 ($callback) must not be the spl_autoload_call() function
diff --git a/ext/spl/tests/spl_autoload_warn_on_false_do_throw.phpt b/ext/spl/tests/spl_autoload_warn_on_false_do_throw.phpt
new file mode 100644
index 0000000000..f16976e78c
--- /dev/null
+++ b/ext/spl/tests/spl_autoload_warn_on_false_do_throw.phpt
@@ -0,0 +1,16 @@
+--TEST--
+spl_autoload_register() function - warn when using false as second argument for spl_autoload_register()
+--FILE--
+<?php
+function customAutolader($class) {
+ require_once __DIR__ . '/testclass.class.inc';
+}
+spl_autoload_register('customAutolader', false);
+
+spl_autoload_call('TestClass');
+var_dump(class_exists('TestClass', false));
+?>
+--EXPECTF--
+Notice: spl_autoload_register(): Argument #2 ($do_throw) has been ignored, spl_autoload_register() will always throw in %s on line %d
+%stestclass.class.inc
+bool(true)
diff --git a/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt b/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt
index f45625f045..0d107d206f 100644
--- a/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt
+++ b/ext/spl/tests/spl_caching_iterator_constructor_flags.phpt
@@ -8,18 +8,18 @@ TestFest London May 2009
//line 681 ...
$array = array(array(7,8,9),1,2,3,array(4,5,6));
$arrayIterator = new ArrayIterator($array);
+new CachingIterator($arrayIterator, 0); /* TODO Should this throw? */
+new CachingIterator($arrayIterator, CachingIterator::CALL_TOSTRING);
+new CachingIterator($arrayIterator, CachingIterator::TOSTRING_USE_KEY);
+new CachingIterator($arrayIterator, CachingIterator::TOSTRING_USE_CURRENT);
+new CachingIterator($arrayIterator, CachingIterator::TOSTRING_USE_INNER);
try {
-$test = new CachingIterator($arrayIterator, 0);
-$test = new CachingIterator($arrayIterator, 1);
-$test = new CachingIterator($arrayIterator, 2);
-$test = new CachingIterator($arrayIterator, 3); // this throws an exception
-} catch (InvalidArgumentException $e){
+ $test = new CachingIterator($arrayIterator, 3); // this throws an exception
+} catch (\ValueError $e){
print $e->getMessage() . "\n";
}
?>
-===DONE===
--EXPECT--
-Flags must contain only one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, TOSTRING_USE_INNER
-===DONE===
+CachingIterator::__construct(): Argument #2 ($flags) must contain only one of CachingIterator::CALL_TOSTRING, CachingIterator::TOSTRING_USE_KEY, CachingIterator::TOSTRING_USE_CURRENT, or CachingIterator::TOSTRING_USE_INNER
diff --git a/ext/spl/tests/spl_cachingiterator___toString_basic.phpt b/ext/spl/tests/spl_cachingiterator___toString_basic.phpt
index 91948c80b4..a3ad699917 100644
--- a/ext/spl/tests/spl_cachingiterator___toString_basic.phpt
+++ b/ext/spl/tests/spl_cachingiterator___toString_basic.phpt
@@ -9,7 +9,7 @@ Chris Scott chris.scott@nstein.com
$ai = new ArrayIterator(array(new stdClass(), new stdClass()));
$ci = new CachingIterator($ai);
var_dump(
-$ci->__toString() // if conversion to string is done by echo, for example, an exeption is thrown. Invoking __toString explicitly covers different code.
+$ci->__toString() // if conversion to string is done by echo, for example, an exception is thrown. Invoking __toString explicitly covers different code.
);
?>
--EXPECT--
diff --git a/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt b/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt
index cee557e330..92aae6dc78 100644
--- a/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt
+++ b/ext/spl/tests/spl_fileinfo_getlinktarget_basic.phpt
@@ -13,7 +13,7 @@ symlink(__FILE__, $link );
$fileInfo = new SplFileInfo($link);
if ($fileInfo->isLink()) {
- echo $fileInfo->getLinkTarget() == __FILE__ ? 'same' : 'different',PHP_EOL;
+ echo $fileInfo->getLinkTarget() == __FILE__ ? 'same' : 'different',PHP_EOL;
}
var_dump(unlink($link));
?>
diff --git a/ext/spl/tests/spl_heap_count_basic.phpt b/ext/spl/tests/spl_heap_count_basic.phpt
index 3bdd6580dc..2be8c432fc 100644
--- a/ext/spl/tests/spl_heap_count_basic.phpt
+++ b/ext/spl/tests/spl_heap_count_basic.phpt
@@ -24,9 +24,9 @@ class MyHeap extends SplHeap
$heap = new MyHeap();
$heap->insert(1);
try {
- count($heap);// refers to MyHeap->count() method
+ count($heap);// refers to MyHeap->count() method
} catch (Exception $e) {
- echo "Exception: " . $e->getMessage() . "\n";
+ echo "Exception: " . $e->getMessage() . "\n";
}
?>
diff --git a/ext/spl/tests/spl_heap_is_empty_basic.phpt b/ext/spl/tests/spl_heap_is_empty_basic.phpt
index 47d7ccce9a..abf64f8d9d 100644
--- a/ext/spl/tests/spl_heap_is_empty_basic.phpt
+++ b/ext/spl/tests/spl_heap_is_empty_basic.phpt
@@ -21,11 +21,8 @@ $heap->insert(1);
var_dump($heap->isEmpty());
$heap->extract();
var_dump($heap->isEmpty());
-$heap->isEmpty('var');
?>
---EXPECTF--
+--EXPECT--
bool(true)
bool(false)
bool(true)
-
-Warning: SplHeap::isEmpty() expects exactly 0 parameters, 1 given in %s
diff --git a/ext/spl/tests/spl_iterator_apply_error.phpt b/ext/spl/tests/spl_iterator_apply_error.phpt
index 8e7cba483a..c73fe468a1 100644
--- a/ext/spl/tests/spl_iterator_apply_error.phpt
+++ b/ext/spl/tests/spl_iterator_apply_error.phpt
@@ -4,9 +4,9 @@ SPL: Error: iterator_apply when an iterator method (eg rewind) throws exception
<?php
class MyArrayIterator extends ArrayIterator {
- public function rewind() {
- throw new Exception('Make the iterator break');
- }
+ public function rewind() {
+ throw new Exception('Make the iterator break');
+ }
}
function test() {}
@@ -14,9 +14,9 @@ function test() {}
$it = new MyArrayIterator(array(1, 21, 22));
try {
- $res = iterator_apply($it, 'test');
+ $res = iterator_apply($it, 'test');
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
diff --git a/ext/spl/tests/spl_iterator_apply_error_001.phpt b/ext/spl/tests/spl_iterator_apply_error_001.phpt
index 54663c0da8..9c021cf98f 100644
--- a/ext/spl/tests/spl_iterator_apply_error_001.phpt
+++ b/ext/spl/tests/spl_iterator_apply_error_001.phpt
@@ -4,15 +4,15 @@ SPL: Error: iterator_apply when the callback throws an exception
<?php
function test() {
- throw new Exception('Broken callback');
+ throw new Exception('Broken callback');
}
$it = new RecursiveArrayIterator(array(1, 21, 22));
try {
- iterator_apply($it, 'test');
+ iterator_apply($it, 'test');
} catch (Exception $e) {
- echo $e->getMessage();
+ echo $e->getMessage();
}
?>
diff --git a/ext/spl/tests/spl_iterator_caching_count_basic.phpt b/ext/spl/tests/spl_iterator_caching_count_basic.phpt
index 4d9c90f86b..136704dbd6 100644
--- a/ext/spl/tests/spl_iterator_caching_count_basic.phpt
+++ b/ext/spl/tests/spl_iterator_caching_count_basic.phpt
@@ -11,11 +11,9 @@ foreach ($i as $value) {
echo $i->count()."\n";
}
?>
-===DONE===
--EXPECT--
1
2
3
4
5
-===DONE===
diff --git a/ext/spl/tests/spl_iterator_caching_count_error.phpt b/ext/spl/tests/spl_iterator_caching_count_error.phpt
index 68d92dcf38..f3a91b5cf4 100644
--- a/ext/spl/tests/spl_iterator_caching_count_error.phpt
+++ b/ext/spl/tests/spl_iterator_caching_count_error.phpt
@@ -15,7 +15,5 @@ try {
}
?>
-===DONE===
--EXPECT--
Exception raised
-===DONE===
diff --git a/ext/spl/tests/spl_iterator_caching_getcache_error.phpt b/ext/spl/tests/spl_iterator_caching_getcache_error.phpt
index 9db726df43..61ca47ce57 100644
--- a/ext/spl/tests/spl_iterator_caching_getcache_error.phpt
+++ b/ext/spl/tests/spl_iterator_caching_getcache_error.phpt
@@ -15,7 +15,5 @@ try {
}
?>
-===DONE===
--EXPECT--
Exception raised
-===DONE===
diff --git a/ext/spl/tests/spl_iterator_getcallchildren.phpt b/ext/spl/tests/spl_iterator_getcallchildren.phpt
index 8d825481fb..8a0d1cd735 100644
--- a/ext/spl/tests/spl_iterator_getcallchildren.phpt
+++ b/ext/spl/tests/spl_iterator_getcallchildren.phpt
@@ -15,17 +15,16 @@ $test->next();
var_dump($test->current());
try {
$output = $test->callGetChildren();
-} catch (InvalidArgumentException $ilae){
+} catch (TypeError $exception) {
$output = null;
- print "invalid argument exception\n";
+ echo $exception->getMessage() . "\n";
}
var_dump($output);
?>
-===DONE===
--EXPECT--
- array(3) {
+array(3) {
[0]=>
int(7)
[1]=>
@@ -34,6 +33,5 @@ var_dump($output);
int(9)
}
int(7)
-invalid argument exception
+ArrayIterator::__construct(): Argument #1 ($array) must be of type array, int given
NULL
-===DONE===
diff --git a/ext/spl/tests/spl_iterator_iterator_constructor.phpt b/ext/spl/tests/spl_iterator_iterator_constructor.phpt
index 97ceee219c..2349a13e31 100644
--- a/ext/spl/tests/spl_iterator_iterator_constructor.phpt
+++ b/ext/spl/tests/spl_iterator_iterator_constructor.phpt
@@ -20,7 +20,5 @@ try {
}
?>
-===DONE===
--EXPECT--
-IteratorIterator::__construct() expects at most 2 parameters, 3 given
-===DONE===
+IteratorIterator::__construct() expects at most 2 arguments, 3 given
diff --git a/ext/spl/tests/spl_iterator_to_array_error.phpt b/ext/spl/tests/spl_iterator_to_array_error.phpt
index 755ef7b990..2704fea29d 100644
--- a/ext/spl/tests/spl_iterator_to_array_error.phpt
+++ b/ext/spl/tests/spl_iterator_to_array_error.phpt
@@ -4,25 +4,25 @@ SPL: Error: iterator_to_array when the current operation throws an exception
<?php
class MyArrayIterator extends ArrayIterator {
- public function current() {
- throw new Exception('Make the iterator break');
- }
+ public function current() {
+ throw new Exception('Make the iterator break');
+ }
}
$it = new MyArrayIterator(array(4, 6, 2));
try {
- // get keys
- $ar = iterator_to_array($it);
+ // get keys
+ $ar = iterator_to_array($it);
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo $e->getMessage() . PHP_EOL;
}
try {
- // get values
- $ar = iterator_to_array($it, false);
+ // get values
+ $ar = iterator_to_array($it, false);
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo $e->getMessage() . PHP_EOL;
}
?>
diff --git a/ext/spl/tests/spl_limit_iterator_check_limits.phpt b/ext/spl/tests/spl_limit_iterator_check_limits.phpt
index 03bdb787ae..3cf4bbab17 100644
--- a/ext/spl/tests/spl_limit_iterator_check_limits.phpt
+++ b/ext/spl/tests/spl_limit_iterator_check_limits.phpt
@@ -10,28 +10,19 @@ $arrayIterator = new ArrayIterator($array);
try {
$limitIterator = new LimitIterator($arrayIterator, -1);
-} catch (OutOfRangeException $e){
+} catch (\ValueError $e){
print $e->getMessage(). "\n";
}
-
try {
$limitIterator = new LimitIterator($arrayIterator, 0, -2);
-} catch (OutOfRangeException $e){
- print $e->getMessage() . "\n";
-}
-
-try {
- $limitIterator = new LimitIterator($arrayIterator, 0, -1);
-} catch (OutOfRangeException $e){
+} catch (\ValueError $e){
print $e->getMessage() . "\n";
}
-
+$limitIterator = new LimitIterator($arrayIterator, 0, -1);
?>
-===DONE===
--EXPECT--
-Parameter offset must be >= 0
-Parameter count must either be -1 or a value greater than or equal 0
-===DONE===
+LimitIterator::__construct(): Argument #2 ($offset) must be greater than or equal to 0
+LimitIterator::__construct(): Argument #3 ($limit) must be greater than or equal to -1
diff --git a/ext/spl/tests/spl_object_id.phpt b/ext/spl/tests/spl_object_id.phpt
index ca13b03fee..a4e8518eaf 100644
--- a/ext/spl/tests/spl_object_id.phpt
+++ b/ext/spl/tests/spl_object_id.phpt
@@ -4,18 +4,10 @@ SPL: spl_object_id()
<?php
var_dump(spl_object_id(new stdClass));
-var_dump(spl_object_id(42));
-var_dump(spl_object_id());
$a = new stdClass();
var_dump(spl_object_id(new stdClass) === spl_object_id($a));
?>
--EXPECTF--
int(%d)
-
-Warning: spl_object_id() expects parameter 1 to be object, int given in %sspl_object_id.php on line %d
-NULL
-
-Warning: spl_object_id() expects exactly 1 parameter, 0 given in %sspl_object_id.php on line %d
-NULL
bool(false)
diff --git a/ext/spl/tests/spl_pq_top_error_corrupt.phpt b/ext/spl/tests/spl_pq_top_error_corrupt.phpt
index 30b6fde5a1..838e763447 100644
--- a/ext/spl/tests/spl_pq_top_error_corrupt.phpt
+++ b/ext/spl/tests/spl_pq_top_error_corrupt.phpt
@@ -8,13 +8,13 @@ Nathaniel McHugh nat@fishtrap.co.uk
class myPriorityQueue extends SplPriorityQueue{
- public function compare($a, $b){
- if ($b == 2) {
- throw new Exception('ignore me');
- } else {
- return parent::compare($a, $b);
- }
- }
+ public function compare($a, $b){
+ if ($b == 2) {
+ throw new Exception('ignore me');
+ } else {
+ return parent::compare($a, $b);
+ }
+ }
}
$priorityQueue = new myPriorityQueue();
diff --git a/ext/spl/tests/spl_pqueue_gc.phpt b/ext/spl/tests/spl_pqueue_gc.phpt
index cc392cbac2..18c96c5a29 100644
--- a/ext/spl/tests/spl_pqueue_gc.phpt
+++ b/ext/spl/tests/spl_pqueue_gc.phpt
@@ -1,7 +1,7 @@
--TEST--
Bug #78436: Broken GC for SplPriorityQueue
--FILE--
-<?php
+<?php
$pqueue = new SplPriorityQueue();
$pqueue->insert($pqueue, 1);
diff --git a/ext/spl/tests/unserialize.phpt b/ext/spl/tests/unserialize.phpt
index 3232b79678..97031ceac4 100644
--- a/ext/spl/tests/unserialize.phpt
+++ b/ext/spl/tests/unserialize.phpt
@@ -6,19 +6,18 @@ SPL: unserialize with no data (for PHPUnit)
$types = array('SplDoublyLinkedList', 'SplObjectStorage', 'ArrayObject');
foreach ($types as $type) {
- // serialize an empty new object
- $exp = serialize(new $type());
- // hack to instanciate an object without constructor
- $str = sprintf('C:%d:"%s":0:{}', strlen($type), $type);
- $obj = unserialize($str);
- var_dump($obj);
- // serialize result
- $out = serialize($obj);
- // both should match
- var_dump($exp === $out);
+ // serialize an empty new object
+ $exp = serialize(new $type());
+ // hack to instantiate an object without constructor
+ $str = sprintf('C:%d:"%s":0:{}', strlen($type), $type);
+ $obj = unserialize($str);
+ var_dump($obj);
+ // serialize result
+ $out = serialize($obj);
+ // both should match
+ var_dump($exp === $out);
}
?>
-===DONE===
--EXPECTF--
object(SplDoublyLinkedList)#%d (2) {
["flags":"SplDoublyLinkedList":private]=>
@@ -40,4 +39,3 @@ object(ArrayObject)#%d (1) {
}
}
bool(true)
-===DONE===