Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Description
The check for whether there are__future__ imports which are not in the beginning of the script appears in two places:
infuture.c, future_parse, the ff_lineno is stored (last lineno of a__future__ import) and there is a check forbad__future__ imports on the same line.
Then incompile.c, compiler_from_import(), any import from__future__ which is in a line afterc->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 fileMy 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