Refine types in as-expressions
commit35a0f78bb3b9c9e45f29a7610479bf072bccfae4
authorKunal Mehta <kunalm@fb.com>
Fri, 18 May 2018 18:46:29 +0000 (18 11:46 -0700)
committerHhvm Bot <hhvm-bot@users.noreply.github.com>
Fri, 18 May 2018 19:02:42 +0000 (18 12:02 -0700)
tree6c911b92541d0e9d31347b53f2a443bac9111c97
parentbd7ef9194dfc9d61b487d9b93a2743d3edcd1380
Refine types in as-expressions

Summary:
This uses the same logic to refine types in as-expressions as we do for is-expressions. We extract `safely_refine_type` into a module-level function and reuse it when typing as-expressions.

We also add some tests that display the nuance of this behavior, such as with wildcards and refinement of individual elements in tuples.

Reviewed By: oulgen

Differential Revision: D8045669

fbshipit-source-id: 1505e3eccae2958b9dcc6c4dd6682dd88f70becc
24 files changed:
hphp/hack/src/decl/decl_pos_utils.ml
hphp/hack/src/naming/naming.ml
hphp/hack/src/typing/coverage_level.ml
hphp/hack/src/typing/typing.ml
hphp/hack/src/typing/typing_reason.ml
hphp/hack/test/typecheck/as_expression/HH_FLAGS
hphp/hack/test/typecheck/as_expression/callable.php.exp
hphp/hack/test/typecheck/as_expression/dict.php [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/dict.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/invalid_hint_generic.php.exp
hphp/hack/test/typecheck/as_expression/invalid_hint_noreturn.php.exp
hphp/hack/test/typecheck/as_expression/invalid_hint_void.php.exp
hphp/hack/test/typecheck/as_expression/keyset.php [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/keyset.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/option2.php.exp
hphp/hack/test/typecheck/as_expression/primitive2.php.exp
hphp/hack/test/typecheck/as_expression/primitive4.php.exp
hphp/hack/test/typecheck/as_expression/tuple2.php.exp
hphp/hack/test/typecheck/as_expression/tuple3.php.exp
hphp/hack/test/typecheck/as_expression/tuple4.php.exp
hphp/hack/test/typecheck/as_expression/tuple5.php [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/tuple5.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/vec.php [new file with mode: 0644]
hphp/hack/test/typecheck/as_expression/vec.php.exp [new file with mode: 0644]