Commit b1f24f7
Simplify treatment of parent::__construct and fix issues with like types
Summary:
The logic for checking `parent::__construct` calls is shared with that for checking `new`. It's broken in at least a couple of ways:
* There is no check that a constructor exists in the parent (T38050584)
* It doesn't properly support like-type calling i.e. treating the constructor as "supporting dynamic"
Also, the logic is kind of nonsense: for a base class that has generics e.g. `Base<TB>` we generate fresh type variables for the generics, do all the argument checking, and then after the fact check that `Base<#1> = Base<TB>`.
It's much simpler instead to treat `parent::__construct` just like a normal call. We don't need the nonsense of fresh type variables, e.g. if we have `Derived<T> extends Base<vec<T>>` then we're simply checking parameter types that involve `T` in scope. But in order to enable like-type calling, we must make sure that `supportdyn` is wrapped around the function type of the constructor, just as with methods.
Note that we already check constructors under both static and dynamic assumptions, so this "use-site" `supportdyn` treatment now fits with the "definition-site" checking of the constructor.
Differential Revision: D87070529
fbshipit-source-id: d37417f699d57fcacf27de9d37cc1d071a0a24ab1 parent 1332662 commit b1f24f7
File tree
21 files changed
+167
-544
lines changed- hphp/hack
- src
- decl
- hackrs/folded_decl_provider
- typing
- test
- extended_reasons
- complex
- ide_code_actions
- show_inline_chat
- show_sidebar_chat
- typecheck
- construct
- magic_methods
- meth_caller
- tconst
- typehole
21 files changed
+167
-544
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
390 | 390 | | |
391 | 391 | | |
392 | 392 | | |
393 | | - | |
| 393 | + | |
394 | 394 | | |
395 | 395 | | |
396 | 396 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2490 | 2490 | | |
2491 | 2491 | | |
2492 | 2492 | | |
| 2493 | + | |
| 2494 | + | |
| 2495 | + | |
| 2496 | + | |
| 2497 | + | |
| 2498 | + | |
| 2499 | + | |
| 2500 | + | |
| 2501 | + | |
| 2502 | + | |
| 2503 | + | |
| 2504 | + | |
| 2505 | + | |
| 2506 | + | |
| 2507 | + | |
| 2508 | + | |
| 2509 | + | |
| 2510 | + | |
| 2511 | + | |
| 2512 | + | |
| 2513 | + | |
| 2514 | + | |
| 2515 | + | |
| 2516 | + | |
| 2517 | + | |
| 2518 | + | |
| 2519 | + | |
| 2520 | + | |
| 2521 | + | |
2493 | 2522 | | |
2494 | 2523 | | |
2495 | 2524 | | |
| |||
4569 | 4598 | | |
4570 | 4599 | | |
4571 | 4600 | | |
| 4601 | + | |
| 4602 | + | |
| 4603 | + | |
| 4604 | + | |
4572 | 4605 | | |
4573 | 4606 | | |
4574 | 4607 | | |
| |||
4578 | 4611 | | |
4579 | 4612 | | |
4580 | 4613 | | |
4581 | | - | |
4582 | | - | |
4583 | | - | |
4584 | | - | |
4585 | | - | |
4586 | | - | |
4587 | | - | |
4588 | | - | |
4589 | | - | |
4590 | | - | |
4591 | | - | |
4592 | | - | |
4593 | | - | |
4594 | | - | |
4595 | | - | |
4596 | | - | |
4597 | | - | |
4598 | | - | |
4599 | | - | |
4600 | | - | |
4601 | | - | |
4602 | | - | |
4603 | | - | |
| 4614 | + | |
4604 | 4615 | | |
4605 | 4616 | | |
4606 | 4617 | | |
| |||
4950 | 4961 | | |
4951 | 4962 | | |
4952 | 4963 | | |
4953 | | - | |
| 4964 | + | |
4954 | 4965 | | |
4955 | 4966 | | |
4956 | 4967 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
472 | 472 | | |
473 | 473 | | |
474 | 474 | | |
475 | | - | |
| 475 | + | |
476 | 476 | | |
477 | 477 | | |
478 | 478 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2600 | 2600 | | |
2601 | 2601 | | |
2602 | 2602 | | |
2603 | | - | |
2604 | 2603 | | |
2605 | 2604 | | |
2606 | 2605 | | |
| |||
4602 | 4601 | | |
4603 | 4602 | | |
4604 | 4603 | | |
4605 | | - | |
4606 | 4604 | | |
4607 | 4605 | | |
4608 | 4606 | | |
| |||
5240 | 5238 | | |
5241 | 5239 | | |
5242 | 5240 | | |
5243 | | - | |
5244 | 5241 | | |
5245 | 5242 | | |
5246 | 5243 | | |
| |||
5320 | 5317 | | |
5321 | 5318 | | |
5322 | 5319 | | |
5323 | | - | |
5324 | | - | |
| 5320 | + | |
5325 | 5321 | | |
5326 | 5322 | | |
5327 | 5323 | | |
| |||
5357 | 5353 | | |
5358 | 5354 | | |
5359 | 5355 | | |
5360 | | - | |
5361 | | - | |
5362 | 5356 | | |
5363 | 5357 | | |
5364 | 5358 | | |
| |||
5494 | 5488 | | |
5495 | 5489 | | |
5496 | 5490 | | |
5497 | | - | |
5498 | | - | |
5499 | 5491 | | |
5500 | 5492 | | |
5501 | 5493 | | |
| |||
5593 | 5585 | | |
5594 | 5586 | | |
5595 | 5587 | | |
5596 | | - | |
5597 | | - | |
5598 | | - | |
5599 | | - | |
5600 | | - | |
5601 | | - | |
5602 | | - | |
5603 | | - | |
5604 | | - | |
5605 | | - | |
5606 | | - | |
5607 | | - | |
5608 | | - | |
5609 | | - | |
5610 | | - | |
5611 | | - | |
5612 | | - | |
5613 | | - | |
5614 | | - | |
5615 | | - | |
5616 | | - | |
5617 | | - | |
5618 | | - | |
5619 | | - | |
5620 | | - | |
5621 | | - | |
5622 | | - | |
5623 | | - | |
5624 | | - | |
5625 | | - | |
5626 | | - | |
5627 | | - | |
5628 | | - | |
5629 | | - | |
5630 | | - | |
5631 | | - | |
5632 | | - | |
5633 | | - | |
5634 | | - | |
5635 | | - | |
5636 | | - | |
5637 | | - | |
5638 | | - | |
5639 | | - | |
5640 | | - | |
5641 | | - | |
5642 | | - | |
5643 | | - | |
5644 | | - | |
5645 | | - | |
5646 | | - | |
5647 | | - | |
5648 | | - | |
5649 | | - | |
5650 | | - | |
5651 | | - | |
5652 | | - | |
5653 | | - | |
| 5588 | + | |
| 5589 | + | |
5654 | 5590 | | |
5655 | | - | |
5656 | | - | |
| 5591 | + | |
| 5592 | + | |
5657 | 5593 | | |
5658 | | - | |
5659 | | - | |
5660 | | - | |
5661 | | - | |
5662 | | - | |
5663 | | - | |
5664 | 5594 | | |
5665 | 5595 | | |
5666 | 5596 | | |
5667 | 5597 | | |
| 5598 | + | |
5668 | 5599 | | |
5669 | 5600 | | |
5670 | 5601 | | |
5671 | 5602 | | |
5672 | 5603 | | |
5673 | | - | |
5674 | | - | |
| 5604 | + | |
5675 | 5605 | | |
5676 | 5606 | | |
5677 | 5607 | | |
| |||
5683 | 5613 | | |
5684 | 5614 | | |
5685 | 5615 | | |
5686 | | - | |
5687 | | - | |
5688 | | - | |
| 5616 | + | |
| 5617 | + | |
5689 | 5618 | | |
5690 | 5619 | | |
5691 | 5620 | | |
| |||
5694 | 5623 | | |
5695 | 5624 | | |
5696 | 5625 | | |
5697 | | - | |
5698 | | - | |
5699 | | - | |
5700 | | - | |
5701 | | - | |
5702 | | - | |
5703 | | - | |
5704 | | - | |
5705 | | - | |
5706 | | - | |
5707 | | - | |
5708 | | - | |
5709 | | - | |
5710 | | - | |
5711 | | - | |
5712 | | - | |
5713 | | - | |
| 5626 | + | |
| 5627 | + | |
5714 | 5628 | | |
| 5629 | + | |
5715 | 5630 | | |
5716 | 5631 | | |
5717 | | - | |
5718 | | - | |
5719 | | - | |
| 5632 | + | |
5720 | 5633 | | |
5721 | 5634 | | |
5722 | 5635 | | |
| |||
6257 | 6170 | | |
6258 | 6171 | | |
6259 | 6172 | | |
6260 | | - | |
6261 | | - | |
6262 | | - | |
6263 | | - | |
6264 | | - | |
6265 | | - | |
6266 | | - | |
6267 | | - | |
6268 | | - | |
6269 | | - | |
6270 | | - | |
6271 | | - | |
6272 | | - | |
6273 | | - | |
6274 | | - | |
6275 | | - | |
6276 | | - | |
6277 | | - | |
6278 | | - | |
6279 | | - | |
6280 | | - | |
6281 | | - | |
6282 | | - | |
6283 | | - | |
6284 | | - | |
6285 | | - | |
6286 | | - | |
6287 | | - | |
6288 | | - | |
6289 | 6173 | | |
6290 | | - | |
| 6174 | + | |
| 6175 | + | |
| 6176 | + | |
| 6177 | + | |
| 6178 | + | |
| 6179 | + | |
| 6180 | + | |
| 6181 | + | |
| 6182 | + | |
6291 | 6183 | | |
6292 | 6184 | | |
6293 | 6185 | | |
| |||
11272 | 11164 | | |
11273 | 11165 | | |
11274 | 11166 | | |
11275 | | - | |
11276 | 11167 | | |
11277 | 11168 | | |
11278 | 11169 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
116 | 119 | | |
117 | 120 | | |
118 | 121 | | |
| |||
901 | 904 | | |
902 | 905 | | |
903 | 906 | | |
904 | | - | |
905 | | - | |
906 | | - | |
907 | | - | |
908 | | - | |
909 | | - | |
910 | | - | |
911 | | - | |
912 | | - | |
913 | | - | |
914 | | - | |
915 | 907 | | |
916 | 908 | | |
917 | 909 | | |
| |||
0 commit comments