Commit a618110
authored
[used before def] improve handling of global definitions in local scopes (#14517)
While working on #14483, we discovered that variable inheritance didn't
work quite right. In particular, functions would inherit variables from
outer scope. On the surface, this is what you want but actually, they
only inherit the scope if there isn't a colliding definition within that
scope.
Here's an example:
```python
class c: pass
def f0() -> None:
s = c() # UnboundLocalError is raised when this code is executed.
class c: pass
def f1() -> None:
s = c() # No error.
```
This PR also fixes issues with builtins (exactly the same example as
above but instead of `c` we have a builtin).
Fixes #14213 (as much as is reasonable to do)1 parent c245e91 commit a618110
File tree
4 files changed
+148
-78
lines changed- mypyc/test-data
- mypy
- test-data/unit
4 files changed
+148
-78
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
83 | 85 | | |
84 | 86 | | |
85 | 87 | | |
| |||
171 | 173 | | |
172 | 174 | | |
173 | 175 | | |
174 | | - | |
| 176 | + | |
175 | 177 | | |
176 | 178 | | |
177 | 179 | | |
| |||
199 | 201 | | |
200 | 202 | | |
201 | 203 | | |
202 | | - | |
| 204 | + | |
203 | 205 | | |
204 | 206 | | |
205 | 207 | | |
| |||
216 | 218 | | |
217 | 219 | | |
218 | 220 | | |
219 | | - | |
220 | | - | |
221 | | - | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
222 | 226 | | |
223 | 227 | | |
224 | 228 | | |
| |||
342 | 346 | | |
343 | 347 | | |
344 | 348 | | |
345 | | - | |
346 | 349 | | |
347 | 350 | | |
348 | 351 | | |
349 | 352 | | |
350 | 353 | | |
351 | 354 | | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
352 | 358 | | |
353 | 359 | | |
354 | 360 | | |
| |||
415 | 421 | | |
416 | 422 | | |
417 | 423 | | |
418 | | - | |
419 | 424 | | |
420 | | - | |
421 | 425 | | |
422 | 426 | | |
423 | 427 | | |
424 | 428 | | |
425 | | - | |
426 | | - | |
427 | | - | |
428 | | - | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
429 | 442 | | |
430 | 443 | | |
431 | 444 | | |
| |||
603 | 616 | | |
604 | 617 | | |
605 | 618 | | |
606 | | - | |
| 619 | + | |
607 | 620 | | |
608 | 621 | | |
609 | 622 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
144 | | - | |
145 | 144 | | |
| 145 | + | |
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
491 | 491 | | |
492 | 492 | | |
493 | 493 | | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
494 | 497 | | |
495 | 498 | | |
496 | 499 | | |
497 | | - | |
498 | | - | |
499 | | - | |
500 | 500 | | |
501 | 501 | | |
502 | 502 | | |
503 | 503 | | |
504 | | - | |
505 | | - | |
506 | | - | |
507 | | - | |
508 | 504 | | |
509 | 505 | | |
510 | 506 | | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
511 | 510 | | |
512 | 511 | | |
513 | 512 | | |
514 | | - | |
515 | | - | |
516 | | - | |
517 | 513 | | |
518 | 514 | | |
519 | 515 | | |
520 | 516 | | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
521 | 520 | | |
522 | 521 | | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
523 | 525 | | |
524 | 526 | | |
525 | 527 | | |
526 | 528 | | |
527 | | - | |
528 | | - | |
529 | | - | |
530 | 529 | | |
531 | 530 | | |
532 | 531 | | |
533 | 532 | | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
534 | 536 | | |
535 | 537 | | |
536 | 538 | | |
537 | 539 | | |
538 | | - | |
539 | | - | |
540 | | - | |
541 | 540 | | |
542 | 541 | | |
543 | 542 | | |
544 | 543 | | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | 544 | | |
549 | 545 | | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
550 | 549 | | |
551 | 550 | | |
552 | 551 | | |
| |||
2612 | 2611 | | |
2613 | 2612 | | |
2614 | 2613 | | |
2615 | | - | |
| 2614 | + | |
2616 | 2615 | | |
2617 | 2616 | | |
2618 | 2617 | | |
| |||
0 commit comments