convert ***sort builtins to use inout instead of references
commita37250d5c522aa7c51bf062ade83e40c0392ff4b
authorDaniel Neiter <dneiter@fb.com>
Wed, 25 Sep 2019 05:52:45 +0000 (24 22:52 -0700)
committerHhvm Bot <hhvm-bot@users.noreply.github.com>
Wed, 25 Sep 2019 05:56:13 +0000 (24 22:56 -0700)
tree7cc67f139e2d760437379bdfae9f9d51832b1332
parent157768df3b442656a0891c7f78bd425b8b4576a6
convert ***sort builtins to use inout instead of references

Summary:
As title.

The tedious bit here is updating the logic to
1. use Variant& instead of VRefParam (i.e. use new inout native convention)
2. still handle references correctly, if passed-in variant happens to contain a reference.

For arrays code paths using `container.toCell()` achieves both - Cell is an alias for TypedValue, and Variant::toCell() unwraps references.

For collections code paths no changes are needed - the code is already references-oblivious (both Variant::isObject() and Variant::getObjectData() unwrap references).

I'm not sure, what was the initial purpose of extra logic in usort(), but I don't think it serves any purpose now. Simplify it to be more similar with php_sort() and friends.

Most of sort functions are already typed as inout in hphp/hack/hhi/container_functions.hhi. Update hhi for natsort() and natcasesort() to use inout as well.

Reviewed By: billf

Differential Revision: D17552549

fbshipit-source-id: 2c20a23128110decd6377471cdbcdbc13a2c7c0a
251 files changed:
hphp/hack/hhi/stdlib/builtins_array.hhi
hphp/runtime/debugger/cmd/cmd_constant.cpp
hphp/runtime/ext/array/ext_array.cpp
hphp/runtime/ext/array/ext_array.h
hphp/runtime/ext/array/ext_array.php
hphp/system/php/apc/APCIterator.php
hphp/system/php/spl/iterators/ArrayIterator.php
hphp/system/php/spl/miscellaneous/ArrayObject.php
hphp/test/quick/array_apc_sort.php
hphp/test/quick/class_implements.php
hphp/test/quick/closure_get_declared_classes.php
hphp/test/quick/dict/builtins.php
hphp/test/quick/get_class_methods2.php
hphp/test/quick/keyset/builtins.php
hphp/test/quick/stack_overflow.php
hphp/test/quick/undefined-global.php
hphp/test/quick/vec/builtins.php
hphp/test/run.php
hphp/test/server/http/server_root/test_duplicate_headers.php
hphp/test/server/http/server_root/test_get_headers_secure.php
hphp/test/slow/array/zend_sort_locale.php
hphp/test/slow/array_functions/usort.php
hphp/test/slow/bad_function_calls/1716.php
hphp/test/slow/bug-30877824.php
hphp/test/slow/closure/1933.php
hphp/test/slow/collection_classes/802.php
hphp/test/slow/collection_classes/813.php
hphp/test/slow/collection_classes/814.php
hphp/test/slow/collection_classes/array-diff-2.php
hphp/test/slow/collection_classes/array-diff-key-2.php
hphp/test/slow/collection_classes/array-intersect-2.php
hphp/test/slow/collection_classes/array-intersect-key-2.php
hphp/test/slow/collection_classes/array_keys.php
hphp/test/slow/collection_classes/array_values.php
hphp/test/slow/collection_classes/frozen_map/api.php
hphp/test/slow/collection_classes/frozen_map/constructors.php
hphp/test/slow/collection_classes/frozen_map/materialization.php
hphp/test/slow/collection_classes/frozen_vector/materialization.php
hphp/test/slow/collection_classes/materialize-methods-1.php
hphp/test/slow/collection_classes/set-sort.php
hphp/test/slow/collection_classes/uasort-mutate.php
hphp/test/slow/collection_classes/uasort-throw.php
hphp/test/slow/collection_classes/uasort-valid-hash.php
hphp/test/slow/collection_classes/uksort-mutate.php
hphp/test/slow/collection_classes/uksort-throw.php
hphp/test/slow/collection_classes/uksort-valid-hash.php
hphp/test/slow/compilation/unbox_collection.php
hphp/test/slow/directory/1702.php
hphp/test/slow/dom_document/1676.php
hphp/test/slow/dv_array/ext_heapgraph.php
hphp/test/slow/dv_array/ext_objprof.php
hphp/test/slow/dv_array_hack_arr/ext_heapgraph.php
hphp/test/slow/dv_array_hack_arr/ext_objprof.php
hphp/test/slow/dynamic-calls/cls_meth/forbid-notice.php
hphp/test/slow/dynamic-calls/cls_meth/forbid-throw.php
hphp/test/slow/dynamic-calls/constructs/forbid-notice.php
hphp/test/slow/dynamic-calls/constructs/forbid-throw.php
hphp/test/slow/dynamic-calls/forbid-notice.php
hphp/test/slow/dynamic-calls/forbid-throw.php
hphp/test/slow/dynamic-calls/func/forbid-notice.php
hphp/test/slow/dynamic-calls/func/forbid-throw.php
hphp/test/slow/dynamic-calls/inst_meth/forbid-notice.php
hphp/test/slow/dynamic-calls/inst_meth/forbid-throw.php
hphp/test/slow/exceptions/66.php
hphp/test/slow/ext_apc_iterator/iterator_001.php
hphp/test/slow/ext_apc_iterator/iterator_002.php
hphp/test/slow/ext_apc_iterator/iterator_003.php
hphp/test/slow/ext_apc_iterator/iterator_004.php
hphp/test/slow/ext_apc_iterator/iterator_005.php
hphp/test/slow/ext_array/1767.php
hphp/test/slow/ext_array/1773.php
hphp/test/slow/ext_array/1774.php
hphp/test/slow/ext_array/arsort.php
hphp/test/slow/ext_array/asort.php
hphp/test/slow/ext_array/natcasesort.php
hphp/test/slow/ext_array/natsort.php
hphp/test/slow/ext_array/sort.php
hphp/test/slow/ext_array/uasort.php
hphp/test/slow/ext_array/usort.php
hphp/test/slow/ext_collator/getSortKey.php
hphp/test/slow/ext_iterator/1798.php
hphp/test/slow/ext_iterator/1799.php
hphp/test/slow/ext_iterator/1800.php
hphp/test/slow/ext_iterator/1801.php
hphp/test/slow/ext_iterator/1802.php
hphp/test/slow/ext_iterator/1803.php
hphp/test/slow/ext_iterator/1804.php
hphp/test/slow/ext_iterator/RecursiveIteratorIterator_call.php
hphp/test/slow/ext_json/json_decode_collections.php
hphp/test/slow/ext_json/json_decode_darrays.php
hphp/test/slow/ext_json/json_decode_hack_arrays.php
hphp/test/slow/ext_mailparse/ext_mailparse.php
hphp/test/slow/ext_options/get_included_files_test.php
hphp/test/slow/ext_preg/ext_preg.php
hphp/test/slow/ext_preg/hackarrdvarrs/ext_preg.php
hphp/test/slow/ext_string/get-html-trans-table-bad.php
hphp/test/slow/ext_string/get-html-trans-table-iso8859-1.php
hphp/test/slow/ext_string/get-html-trans-table-utf8.php
hphp/test/slow/filesystem_iterator/construct.php
hphp/test/slow/filesystem_iterator/current.php
hphp/test/slow/filesystem_iterator/key.php
hphp/test/slow/filesystem_iterator/next.php
hphp/test/slow/filesystem_iterator/setFlags.php
hphp/test/slow/global_func/class_meth/dv_arr_hack_arr/container_builtins_warn.php
hphp/test/slow/hack_arr_compat/varr_to_darr.php
hphp/test/slow/ini/collection_ini_options.php
hphp/test/slow/lang/reflection.php
hphp/test/slow/locale/173.php
hphp/test/slow/locale/174.php
hphp/test/slow/locale/175.php
hphp/test/slow/locale/176.php
hphp/test/slow/object/672.php
hphp/test/slow/object_property/684.php
hphp/test/slow/object_property/685.php
hphp/test/slow/object_property/691.php
hphp/test/slow/objprof/heapgraph.php
hphp/test/slow/objprof/objprof_paths.php
hphp/test/slow/reference/bug-t21872803.php
hphp/test/slow/reference/ref-annotate-strict.php
hphp/test/slow/reflection/ReflectionTypeAliasAttrs.php
hphp/test/slow/reflection/is_constructor.php
hphp/test/slow/reflection/setAccessible.php
hphp/test/slow/reflection_classes/1354.php
hphp/test/slow/reflection_classes/1362.php
hphp/test/slow/reflection_classes/1366.php
hphp/test/slow/reflection_classes/this.php
hphp/test/slow/reified_generics/hhbbc-combine-reified-type.php
hphp/test/slow/rqtrace.php
hphp/test/slow/traits/2007.php
hphp/test/slow/traits/2129.php
hphp/test/slow/user_attributes/2198.php
hphp/test/slow/user_attributes/2200.php
hphp/test/slow/user_attributes/2201.php
hphp/test/slow/vec/uksort_vec.php
hphp/test/zend/good/ext/dom/tests/dom007.php
hphp/test/zend/good/ext/fileinfo/tests/finfo_file_002.php
hphp/test/zend/good/ext/mbstring/tests/mb_encoding_aliases.php
hphp/test/zend/good/ext/reflection/tests/001.php
hphp/test/zend/good/ext/spl/tests/DirectoryIterator_getExtension_basic.php
hphp/test/zend/good/ext/spl/tests/RecursiveDirectoryIterator_getSubPath_basic.php
hphp/test/zend/good/ext/spl/tests/bug64228.php
hphp/test/zend/good/ext/spl/tests/class_implements_basic2.php
hphp/test/zend/good/ext/spl/tests/class_uses_basic2.php
hphp/test/zend/good/ext/standard/tests/array/003.php
hphp/test/zend/good/ext/standard/tests/array/004.php
hphp/test/zend/good/ext/standard/tests/array/arsort_basic.php
hphp/test/zend/good/ext/standard/tests/array/arsort_variation1.php
hphp/test/zend/good/ext/standard/tests/array/arsort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/arsort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/arsort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/arsort_variation6.php
hphp/test/zend/good/ext/standard/tests/array/arsort_variation8.php
hphp/test/zend/good/ext/standard/tests/array/asort_basic.php
hphp/test/zend/good/ext/standard/tests/array/asort_object1.php
hphp/test/zend/good/ext/standard/tests/array/asort_object2.php
hphp/test/zend/good/ext/standard/tests/array/asort_variation1.php
hphp/test/zend/good/ext/standard/tests/array/asort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/asort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/asort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/asort_variation6.php
hphp/test/zend/good/ext/standard/tests/array/asort_variation8.php
hphp/test/zend/good/ext/standard/tests/array/bug33382.php
hphp/test/zend/good/ext/standard/tests/array/krsort_basic.php
hphp/test/zend/good/ext/standard/tests/array/krsort_object.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation1.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation11.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation3.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation6.php
hphp/test/zend/good/ext/standard/tests/array/krsort_variation7.php
hphp/test/zend/good/ext/standard/tests/array/ksort_basic.php
hphp/test/zend/good/ext/standard/tests/array/ksort_object.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation1.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation11.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation3.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation6.php
hphp/test/zend/good/ext/standard/tests/array/ksort_variation7.php
hphp/test/zend/good/ext/standard/tests/array/locale_sort.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_error.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_object1.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_object2.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_variation11.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/natcasesort_variation8.php
hphp/test/zend/good/ext/standard/tests/array/natsort_basic.php
hphp/test/zend/good/ext/standard/tests/array/rsort_basic.php
hphp/test/zend/good/ext/standard/tests/array/rsort_object1.php
hphp/test/zend/good/ext/standard/tests/array/rsort_object2.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation1.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation6.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation7.php
hphp/test/zend/good/ext/standard/tests/array/rsort_variation8.php
hphp/test/zend/good/ext/standard/tests/array/sort_basic.php
hphp/test/zend/good/ext/standard/tests/array/sort_object1.php
hphp/test/zend/good/ext/standard/tests/array/sort_object2.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation1.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation3.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation6.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation7.php
hphp/test/zend/good/ext/standard/tests/array/sort_variation8.php
hphp/test/zend/good/ext/standard/tests/array/uasort_basic1.php
hphp/test/zend/good/ext/standard/tests/array/uasort_object1.php
hphp/test/zend/good/ext/standard/tests/array/uasort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/uasort_variation3.php
hphp/test/zend/good/ext/standard/tests/array/uasort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/uasort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/uasort_variation7.php
hphp/test/zend/good/ext/standard/tests/array/uasort_variation9.php
hphp/test/zend/good/ext/standard/tests/array/uksort_basic.php
hphp/test/zend/good/ext/standard/tests/array/uksort_error.php
hphp/test/zend/good/ext/standard/tests/array/usort_basic.php
hphp/test/zend/good/ext/standard/tests/array/usort_error1.php
hphp/test/zend/good/ext/standard/tests/array/usort_object1.php
hphp/test/zend/good/ext/standard/tests/array/usort_object2.php
hphp/test/zend/good/ext/standard/tests/array/usort_variation10.php
hphp/test/zend/good/ext/standard/tests/array/usort_variation3.php
hphp/test/zend/good/ext/standard/tests/array/usort_variation4.php
hphp/test/zend/good/ext/standard/tests/array/usort_variation5.php
hphp/test/zend/good/ext/standard/tests/array/usort_variation7.php
hphp/test/zend/good/ext/standard/tests/array/usort_variation9.php
hphp/test/zend/good/ext/standard/tests/dir/readdir_variation2.php
hphp/test/zend/good/ext/standard/tests/dir/readdir_variation4.php
hphp/test/zend/good/ext/standard/tests/file/bug24482.php
hphp/test/zend/good/ext/standard/tests/file/glob_basic.php
hphp/test/zend/good/ext/standard/tests/image/getimagesize.php
hphp/test/zend/good/ext/standard/tests/image/getimagesize_246x247.php
hphp/test/zend/good/ext/standard/tests/image/getimagesize_384x385.php
hphp/test/zend/good/ext/standard/tests/image/image_type_to_mime_type.php
hphp/test/zend/good/ext/standard/tests/strings/004.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic1.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic10.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic2.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic3.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic4.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic7.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic8.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_basic9.php
hphp/test/zend/good/ext/standard/tests/strings/get_html_translation_table_variation1.php
hphp/tools/perf-call-graph.php