Forget fake members on property assignment
Summary:
Invalidate fake members on assignment to properties. This selectively invalidates only fake members that have `->prop` suffix whenever there is an assignment to any `$obj->prop`.
- This is similar to forgetting refinements by prefix used when the object of a fake member is assigned. So we consolidate all invalidation mechanisms.
- Since we now invalidate assignments to `prop`, we no longer need to type check LHS of an Obj_get assignment in a special environment without fake members. See the deleted comment in 3978-3987 in `typing.ml` for more details.
- This allows previously illegal programs to become safe. We can now use some refinements in the LHS of an assignment. `$obj->prop1->prop2 = $x` can use a refinement about `$obj->prop1`, I believe (!!!) this is sound.
Reviewed By: andrewjkennedy
Differential Revision:
D21836140
fbshipit-source-id:
82b546041b01dd790d5b5ad4d6794ad5682a659f