Require type parameters in new T() to be <<__Newable>>
commit2068730908f4b28cd9898c74f2c80368a5b074d3
authorVassil Mladenov <vmladenov@fb.com>
Thu, 28 Feb 2019 18:58:21 +0000 (28 10:58 -0800)
committerHhvm Bot <hhvm-bot@users.noreply.github.com>
Thu, 28 Feb 2019 19:02:58 +0000 (28 11:02 -0800)
tree8494e5a324f0268c963ca6dc76797ab06cdb0524
parentd95b926572de0ab10833768af6770db1e6e66fb1
Require type parameters in new T() to be <<__Newable>>

Summary: Similar to `<<__Enforceable>>` in D14163043, we have `<<__Newable>>` as a gate to reified type arguments. Then, only newable type parameters can be used in `new`. This forces only compatible type arguments (i.e. not abstract) to be given to places that will use `new`.

Reviewed By: oulgen

Differential Revision: D13932875

fbshipit-source-id: 301c6bb0394eef3b106bac4dcde13d880d2e9eb9
16 files changed:
hphp/hack/src/errors/error_codes.ml
hphp/hack/src/errors/errors.ml
hphp/hack/src/errors/errors.mli
hphp/hack/src/typing/tast_check/reified_check.ml
hphp/hack/src/typing/tast_env.ml
hphp/hack/src/typing/tast_env.mli
hphp/hack/src/typing/type_parameter_env.ml
hphp/hack/src/typing/typing.ml
hphp/hack/src/typing/typing_env.ml
hphp/hack/src/typing/typing_env.mli
hphp/hack/src/typing/typing_phase.ml
hphp/hack/test/errors/error_map.ml
hphp/hack/test/typecheck/reified_generics/new_without_newable.php [new file with mode: 0644]
hphp/hack/test/typecheck/reified_generics/new_without_newable.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/reified_generics/new_without_newable_simple.php [new file with mode: 0644]
hphp/hack/test/typecheck/reified_generics/new_without_newable_simple.php.exp [new file with mode: 0644]