Commit 1559587
Add an __ImplementedBy attribute for methods on primitives
Summary:
For methods on primitives, we want to give a class in an .hhi, and tie that to the top-level function that is the runtime implementation of the method. We also want to ensure that the types are compatible. We add an attribute (only allowed in .hhi files) that declares the name of the top-level function. We then fund the function's decl and check that it is a subtype of the method's type. The methods type is instantiated as for `meth_caller` to take into account generics from the class. For example, in the .hhi for string, we might have:
```
class string {
<<__ImplementedBy('\my_length')>>
public method length(): int;
}
function my_length(string $s): int;
```
We use the `Fun_id.synth` and `Meth_caller.synth` functions from `typing.ml` to build the types of the functions. In particular, the Meth_caller one adds the "this" parameter for us, and moves class generics to function generics. It also tries to add `readonly` and `FunctionRef` wrappings, which we disable for this purpose.
Reviewed By: mheiber
Differential Revision: D88174803
fbshipit-source-id: 5308745bf57a91e71b94fa4eeaac54b7adc64fa11 parent 483e1b5 commit 1559587
37 files changed
Lines changed: 290 additions & 9 deletions
File tree
- hphp/hack
- src
- errors
- hackc/compile
- naming
- oxidized/gen
- typing
- nast_check
- test
- autocomplete
- implemented_by_hhi
- typecheck
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
169 | 169 | | |
170 | 170 | | |
171 | 171 | | |
| 172 | + | |
172 | 173 | | |
173 | 174 | | |
174 | 175 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
568 | 568 | | |
569 | 569 | | |
570 | 570 | | |
| 571 | + | |
571 | 572 | | |
572 | 573 | | |
573 | 574 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
402 | 402 | | |
403 | 403 | | |
404 | 404 | | |
| 405 | + | |
| 406 | + | |
405 | 407 | | |
406 | 408 | | |
407 | 409 | | |
| |||
862 | 864 | | |
863 | 865 | | |
864 | 866 | | |
| 867 | + | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
865 | 874 | | |
866 | 875 | | |
867 | 876 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| |||
155 | 155 | | |
156 | 156 | | |
157 | 157 | | |
| 158 | + | |
158 | 159 | | |
159 | 160 | | |
160 | 161 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| |||
276 | 276 | | |
277 | 277 | | |
278 | 278 | | |
| 279 | + | |
| 280 | + | |
279 | 281 | | |
280 | 282 | | |
281 | 283 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
212 | 212 | | |
213 | 213 | | |
214 | 214 | | |
| 215 | + | |
215 | 216 | | |
216 | 217 | | |
217 | 218 | | |
| |||
225 | 226 | | |
226 | 227 | | |
227 | 228 | | |
| 229 | + | |
228 | 230 | | |
229 | 231 | | |
230 | 232 | | |
| |||
247 | 249 | | |
248 | 250 | | |
249 | 251 | | |
| 252 | + | |
250 | 253 | | |
251 | 254 | | |
252 | 255 | | |
| |||
266 | 269 | | |
267 | 270 | | |
268 | 271 | | |
| 272 | + | |
269 | 273 | | |
270 | 274 | | |
271 | 275 | | |
| |||
314 | 318 | | |
315 | 319 | | |
316 | 320 | | |
317 | | - | |
318 | 321 | | |
319 | | - | |
320 | 322 | | |
321 | 323 | | |
322 | 324 | | |
| |||
335 | 337 | | |
336 | 338 | | |
337 | 339 | | |
338 | | - | |
339 | | - | |
| 340 | + | |
340 | 341 | | |
341 | 342 | | |
342 | 343 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
142 | 174 | | |
143 | 175 | | |
144 | 176 | | |
| |||
342 | 374 | | |
343 | 375 | | |
344 | 376 | | |
| 377 | + | |
345 | 378 | | |
346 | 379 | | |
347 | 380 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
167 | 167 | | |
168 | 168 | | |
169 | 169 | | |
| 170 | + | |
170 | 171 | | |
171 | 172 | | |
172 | 173 | | |
| |||
761 | 762 | | |
762 | 763 | | |
763 | 764 | | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
764 | 771 | | |
765 | 772 | | |
766 | 773 | | |
| |||
926 | 933 | | |
927 | 934 | | |
928 | 935 | | |
| 936 | + | |
| 937 | + | |
929 | 938 | | |
930 | 939 | | |
931 | 940 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
166 | 166 | | |
167 | 167 | | |
168 | 168 | | |
| 169 | + | |
169 | 170 | | |
170 | 171 | | |
171 | 172 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8931 | 8931 | | |
8932 | 8932 | | |
8933 | 8933 | | |
| 8934 | + | |
8934 | 8935 | | |
8935 | 8936 | | |
8936 | 8937 | | |
| |||
9047 | 9048 | | |
9048 | 9049 | | |
9049 | 9050 | | |
9050 | | - | |
| 9051 | + | |
9051 | 9052 | | |
9052 | 9053 | | |
9053 | 9054 | | |
| |||
9156 | 9157 | | |
9157 | 9158 | | |
9158 | 9159 | | |
9159 | | - | |
9160 | | - | |
| 9160 | + | |
| 9161 | + | |
| 9162 | + | |
| 9163 | + | |
| 9164 | + | |
| 9165 | + | |
| 9166 | + | |
| 9167 | + | |
| 9168 | + | |
| 9169 | + | |
| 9170 | + | |
| 9171 | + | |
9161 | 9172 | | |
9162 | 9173 | | |
9163 | 9174 | | |
| |||
0 commit comments