Author: Benjamin Peterson <[email protected]>
Branch:
Changeset: r44577:c3d4c113ff9c
Date: 2011-05-28 09:31 -0500
http://bitbucket.org/pypy/pypy/changeset/c3d4c113ff9c/
Log: detect future features after source is in utf-8
This should fix #732.
diff --git a/pypy/interpreter/pycompiler.py b/pypy/interpreter/pycompiler.py
--- a/pypy/interpreter/pycompiler.py
+++ b/pypy/interpreter/pycompiler.py
@@ -101,9 +101,9 @@
"""
def __init__(self, space, override_version=None):
PyCodeCompiler.__init__(self, space)
- self.parser = pyparse.PythonParser(space)
+ self.future_flags = future.futureFlags_2_7
+ self.parser = pyparse.PythonParser(space, self.future_flags)
self.additional_rules = {}
- self.future_flags = future.futureFlags_2_7
self.compiler_flags = self.future_flags.allowed_flags
def compile_ast(self, node, filename, mode, flags):
@@ -140,9 +140,6 @@
def _compile_to_ast(self, source, info):
space = self.space
try:
- f_flags, future_info = future.get_futures(self.future_flags,
source)
- info.last_future_import = future_info
- info.flags |= f_flags
parse_tree = self.parser.parse_source(source, info)
mod = astbuilder.ast_from_node(space, parse_tree, info)
except parseerror.IndentationError, e:
diff --git a/pypy/interpreter/pyparser/pyparse.py
b/pypy/interpreter/pyparser/pyparse.py
--- a/pypy/interpreter/pyparser/pyparse.py
+++ b/pypy/interpreter/pyparser/pyparse.py
@@ -1,6 +1,6 @@
from pypy.interpreter import gateway
from pypy.interpreter.error import OperationError
-from pypy.interpreter.pyparser import parser, pytokenizer, pygram, error
+from pypy.interpreter.pyparser import future, parser, pytokenizer, pygram,
error
from pypy.interpreter.astcompiler import consts
@@ -88,9 +88,11 @@
class PythonParser(parser.Parser):
- def __init__(self, space, grammar=pygram.python_grammar):
+ def __init__(self, space, future_flags=future.futureFlags_2_7,
+ grammar=pygram.python_grammar):
parser.Parser.__init__(self, grammar)
self.space = space
+ self.future_flags = future_flags
def parse_source(self, textsrc, compile_info):
"""Main entry point for parsing Python source.
@@ -133,6 +135,10 @@
raise error.SyntaxError(space.str_w(w_message))
raise
+ f_flags, future_info = future.get_futures(self.future_flags, textsrc)
+ compile_info.last_future_import = future_info
+ compile_info.flags |= f_flags
+
flags = compile_info.flags
if flags & consts.CO_FUTURE_PRINT_FUNCTION:
diff --git a/pypy/interpreter/test/test_compiler.py
b/pypy/interpreter/test/test_compiler.py
--- a/pypy/interpreter/test/test_compiler.py
+++ b/pypy/interpreter/test/test_compiler.py
@@ -714,6 +714,12 @@
class AppTestCompiler:
+ def test_bom_with_future(self):
+ s = '\xef\xbb\xbffrom __future__ import division\nx = 1/2'
+ ns = {}
+ exec s in ns
+ assert ns["x"] == .5
+
def test_values_of_different_types(self):
exec "a = 0; b = 0L; c = 0.0; d = 0j"
assert type(a) is int
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit