Experimental error for references in array cells
commite22e23dca2abed4a8f14a1dffb4b05f568f4417a
authorMike Qian <mqian@fb.com>
Thu, 22 Feb 2018 02:37:41 +0000 (21 18:37 -0800)
committerHhvm Bot <hhvm-bot@users.noreply.github.com>
Thu, 22 Feb 2018 02:45:54 +0000 (21 18:45 -0800)
tree840783543a537f7f4829e4b03dee834e6a52ce96
parent6fecb9f6ef9d0bca1819cf216db6fe87a00aa707
Experimental error for references in array cells

Summary: A new `.hhconfig` experimental config setting can be enabled to generate Hack errors when PHP references are created inside arrays by the `&` punctuator. Currently, this ignores the implicit binding of a reference when an array cell is passed to a `byRef` function parameter.

Reviewed By: jamesjwu

Differential Revision: D7038189

fbshipit-source-id: bc01d26f35f5ec8b0ae2ff3983fc40fa9795c52f
31 files changed:
hphp/hack/src/hh_single_type_check.ml
hphp/hack/src/options/globalOptions.ml
hphp/hack/src/options/globalOptions.mli
hphp/hack/src/options/typecheckerOptions.ml
hphp/hack/src/typing/typing.ml
hphp/hack/src/utils/errors/errors.ml
hphp/hack/src/utils/errors/errors_sig.ml
hphp/hack/test/typecheck/references/pass_by_ref/HH_FLAGS
hphp/hack/test/typecheck/references/refs_in_array/HH_FLAGS [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/binding_new_element1.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/binding_new_element1.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/binding_new_element2.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/binding_new_element2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/element_assign1.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/element_assign1.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/element_assign1b.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/element_assign1b.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/element_assign2.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/element_assign2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach1.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach1.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach2.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach3.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach3.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach4.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/foreach4.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/intrinsic.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/intrinsic.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/pass_by_ref.php [new file with mode: 0644]
hphp/hack/test/typecheck/references/refs_in_array/pass_by_ref.php.exp [new file with mode: 0644]