Typecheck reified function pointers
commitc2c955527104abf8f4e69908e7106e4bd27f303e
authorThomas Jiang <thomasjiang@fb.com>
Thu, 30 Jul 2020 05:06:34 +0000 (29 22:06 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Thu, 30 Jul 2020 05:33:13 +0000 (29 22:33 -0700)
tree6b7175162f1dbe03824afa755e504290282a717a
parent2393d25e1b2163e5fe0b10a84c72e9595e77261e
Typecheck reified function pointers

Summary:
We want to ensure that when a function pointer is created to a function with reified generics, that we correctly capture those types when passing around the function pointer.

`reified_check` is modified. Normally it expects that any call of a function with reified generics has the generics bound at the call site. Since function pointers break this assumption, we want to ensure that we check the reified generics for function pointers but do not need to check them when calling it. So added a bit in the flag map to mark function pointers.

Reviewed By: Wilfred

Differential Revision: D22080890

fbshipit-source-id: 14ede11594f6b23afee93cb30a76bb137c1ae234
48 files changed:
hphp/hack/src/oxidized_by_ref/manual/typing_defs_flags.rs
hphp/hack/src/typing/tast_check/reified_check.ml
hphp/hack/src/typing/typing.ml
hphp/hack/src/typing/typing_defs.ml
hphp/hack/src/typing/typing_defs_flags.ml
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs2.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_mismatched_parameters.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_mismatched_parameters.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_missing.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_missing.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_missing2.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_missing2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_missing3.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_missing3.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_wildcard.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/class_meth_reified_targs_wildcard.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/explicit_targs.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/explicit_targs.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/explicit_targs2.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/explicit_targs2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/explicit_targs3.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/explicit_targs3.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs.php
hphp/hack/test/typecheck/function_pointer/reified_targs.php.exp
hphp/hack/test/typecheck/function_pointer/reified_targs2.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_enforceable.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_enforceable.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_enforceable.php.like_types.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_mismatched_parameters.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_mismatched_parameters.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_missing.php [copied from hphp/hack/test/typecheck/function_pointer/reified_targs.php with 56% similarity]
hphp/hack/test/typecheck/function_pointer/reified_targs_missing.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_missing2.php [copied from hphp/hack/test/typecheck/function_pointer/reified_targs.php with 61% similarity]
hphp/hack/test/typecheck/function_pointer/reified_targs_missing2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_missing3.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_missing3.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_newable.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_newable.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_newable2.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_newable2.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_return_type.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_return_type.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_wildcard.php [new file with mode: 0644]
hphp/hack/test/typecheck/function_pointer/reified_targs_wildcard.php.exp [new file with mode: 0644]