Skip to content

__futures__ parsing can be simplified using complete source locations for error detection. Also the error's offset is off by one sometimes. #98811

Description

@iritkatriel

The check for whether there are __future__ imports which are not in the beginning of the script appears in two places:

in future.c, future_parse, the ff_lineno is stored (last lineno of a __future__ import) and there is a check for bad __future__ imports on the same line .

Then in compile.c, compiler_from_import(), any import from __future__ which is in a line after c->c_future->ff_lineno is rejected.

If we replace ff_lineno by ff_location (the complete location information) then the check in compile.c can use the column info to detect the same-line case, and we no longer need to check for this in future.c. The code of future_parse will become much simpler.

There is also a bug in the future.c exception - the offset is off by 1, and this results in incorrect hilighting of the bad import:

python.exe -c "import test.badsyntax_future7.py"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/iritkatriel/src/cpython/Lib/test/badsyntax_future7.py", line 3
    from __future__ import nested_scopes; import string; from __future__ import \
                                                        ^
SyntaxError: from __future__ imports must occur at the beginning of the file

My patch will result in this output instead:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/iritkatriel/src/cpython-654/Lib/test/badsyntax_future7.py", line 3
    from __future__ import nested_scopes; import string; from __future__ import \
                                                         ^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: from __future__ imports must occur at the beginning of the file

Activity

  1. added
    type-bugAn unexpected behavior, bug, or error
    interpreter-core(Objects, Python, Grammar, and Parser dirs)
    3.12only security fixes
    on Oct 28, 2022
  2. self-assigned this
    on Oct 28, 2022
  3. added 2 commits that reference this issue on Oct 28, 2022
  4. changed the title [-]__futures__ parsing can be simplified using complete source locations for error detection[/-] [+]__futures__ parsing can be simplified using complete source locations for error detection. Also the error's offset is off by one sometimes.[/+] on Oct 28, 2022
  5. added a commit that references this issue on Oct 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

3.12only security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errortype-featureA feature request or enhancement

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions