[pypy-svn] pypy compile-from-stream: Translation fixes
amauryfa
commits-noreply at bitbucket.org
Tue Mar 22 17:54:12 CET 2011
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: compile-from-stream
Changeset: r42842:3b5978d60efd
Date: 2011-03-22 17:49 +0100
http://bitbucket.org/pypy/pypy/changeset/3b5978d60efd/
Log: Translation fixes
diff --git a/pypy/interpreter/pyparser/future.py b/pypy/interpreter/pyparser/future.py
--- a/pypy/interpreter/pyparser/future.py
+++ b/pypy/interpreter/pyparser/future.py
@@ -5,19 +5,25 @@
flags = 0
pos = (-1, 0)
- if not isinstance(tree, (ast.Module, ast.Interactive)):
+ if isinstance(tree, ast.Module):
+ stmts = tree.body
+ elif isinstance(tree, ast.Interactive):
+ stmts = tree.body
+ else:
return flags, pos
- if not tree.body:
+ if stmts is None:
return flags, pos
found_docstring = False
- for elem in tree.body:
+ for elem in stmts:
if isinstance(elem, ast.ImportFrom):
if elem.module != '__future__':
break
for alias in elem.names:
+ if not isinstance(alias, ast.alias):
+ continue
name = alias.name
try:
flags |= future_flags.compiler_features[name]
diff --git a/pypy/module/_file/interp_file.py b/pypy/module/_file/interp_file.py
--- a/pypy/module/_file/interp_file.py
+++ b/pypy/module/_file/interp_file.py
@@ -470,6 +470,10 @@
file.fdopenstream(stream, fd, mode)
return space.wrap(file)
+def detach_stream(space, w_file):
+ file = space.interp_w(W_File, w_file)
+ return file.detach()
+
def descr_file_closed(space, file):
return space.wrap(file.stream is None)
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
@@ -2,6 +2,8 @@
from pypy.interpreter.error import OperationError
from pypy.interpreter.pyparser import parser, pytokenizer, pygram, error
from pypy.interpreter.astcompiler import consts
+from pypy.interpreter.unicodehelper import PyUnicode_EncodeUTF8
+
_recode_to_utf8 = gateway.applevel(r'''
@@ -115,7 +117,8 @@
return self.stream.readline()
else:
w_line = self.space.call_function(self.w_readline)
- return self.space.unicode_w(w_line).encode('utf-8')
+ return PyUnicode_EncodeUTF8(self.space,
+ self.space.unicode_w(w_line))
def set_encoding(self, encoding):
self.encoding = encoding
@@ -132,12 +135,15 @@
def close(self):
if self.w_file:
- self.w_file.detach()
+ from pypy.module._file import interp_file
+ interp_file.detach_stream(self.space, self.w_file)
class PythonParser(parser.Parser):
- def __init__(self, space, grammar=pygram.python_grammar):
- parser.Parser.__init__(self, grammar)
+ IMPORT_FROM = pygram.python_grammar.symbol_ids['import_from']
+
+ def __init__(self, space):
+ parser.Parser.__init__(self, pygram.python_grammar)
self.space = space
def _detect_encoding(self, text, lineno, compile_info):
@@ -234,7 +240,7 @@
return self.build_tree(source_lines, compile_info)
def parse_future_import(self, node):
- if node.type != self.grammar.symbol_ids['import_from']:
+ if node.type != self.IMPORT_FROM:
return
children = node.children
# from __future__ import ..., must have at least 4 children
@@ -256,9 +262,11 @@
for i in range(0, len(child.children), 2):
c = child.children[i]
- if (len(c.children) >= 1 and
- c.children[0].type == pygram.tokens.NAME):
- name = c.children[0].value
+ if (len(c.children) == 0 or
+ c.children[0].type != pygram.tokens.NAME):
+ continue
+
+ name = c.children[0].value
if name == 'print_function':
self.compile_info.flags |= consts.CO_FUTURE_PRINT_FUNCTION
More information about the Pypy-commit
mailing list