Reject all invalid enum base types.
commitfd61d187bda08b2c64f7179f3014557d3fcdcdd2
authorAlexey Toptygin <alexeyt@fb.com>
Tue, 2 Aug 2022 08:04:42 +0000 (2 01:04 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Tue, 2 Aug 2022 08:04:42 +0000 (2 01:04 -0700)
tree64f160440b1b1b8c54ce235cb1ca39a33e301205
parent8c645df3e7e84a8d64befcd03515b36dec726927
Reject all invalid enum base types.

Summary:
Update TypeConstraint::validForEnumBase to reject invalid base types that are not "precise" (i.e. don't exactly map to a DataType) as well. Add unit tests for all invalid base types.

This is safe because the typechecker already rejects all these invalid base types (any types that aren't a subtype of arraykey), which I verified manually. Omitting a base type is a parse error.

Reviewed By: ricklavoie

Differential Revision: D38329639

fbshipit-source-id: 8e1816d7f723cf1e2629c5134478b0d3ca36050f
45 files changed:
hphp/runtime/vm/type-constraint.h
hphp/test/slow/enum-invalid-base/bool.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/bool.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/callable.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/callable.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/dict.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/dict.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/float.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/float.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/keyset.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/keyset.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_bool.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_bool.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_dict.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_dict.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_float.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_float.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_keyset.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_keyset.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_object.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_object.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_resource.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_resource.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_vec.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/maybe_vec.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/mixed.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/mixed.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/nonnull.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/nonnull.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/noreturn.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/noreturn.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/null.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/null.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/num.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/num.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/object.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/object.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/resource.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/resource.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/this.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/this.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/vec.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/vec.php.expectf [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/vec_or_dict.php [new file with mode: 0644]
hphp/test/slow/enum-invalid-base/vec_or_dict.php.expectf [new file with mode: 0644]