[pypy-svn] r17336 - in pypy/dist/pypy/interpreter: astcompiler pyparser
pedronis at codespeak.net
pedronis at codespeak.net
Wed Sep 7 19:41:14 CEST 2005
Author: pedronis
Date: Wed Sep 7 19:41:12 2005
New Revision: 17336
Modified:
pypy/dist/pypy/interpreter/astcompiler/future.py
pypy/dist/pypy/interpreter/astcompiler/pyassem.py
pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
pypy/dist/pypy/interpreter/astcompiler/symbols.py
pypy/dist/pypy/interpreter/astcompiler/transformer.py
pypy/dist/pypy/interpreter/astcompiler/visitor.py
pypy/dist/pypy/interpreter/pyparser/error.py
Log:
has_key -> in
solved some other cases of mixed None and ints
don't use hasattr on valid_future
Modified: pypy/dist/pypy/interpreter/astcompiler/future.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/future.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/future.py Wed Sep 7 19:41:12 2005
@@ -22,25 +22,33 @@
def visitModule(self, node):
stmt = node.node
+ invalid = False
for s in stmt.nodes:
- if not self.check_stmt(s):
- break
+ if not self.check_stmt(s, invalid):
+ invalid = True
- def check_stmt(self, stmt):
- if is_future(stmt):
- for name, asname in stmt.names:
- if name in self.features:
- self.found[name] = 1
- elif name=="*":
- raise SyntaxError(
- "future statement does not support import *",
- ( stmt.filename, stmt.lineno, 0, "" ) )
- else:
- raise SyntaxError(
- "future feature %s is not defined" % name,
- ( stmt.filename, stmt.lineno, 0, "" ) )
- stmt.valid_future = 1
- return 1
+ def check_stmt(self, stmt, invalid):
+ if isinstance(stmt, ast.From):
+ stmt.valid_future = 0
+ if invalid:
+ return 0
+ if is_future(stmt):
+ assert isinstance(stmt, ast.From)
+ for name, asname in stmt.names:
+ if name in self.features:
+ self.found[name] = 1
+ elif name=="*":
+ raise SyntaxError(
+ "future statement does not support import *",
+ filename = stmt.filename,
+ lineno = stmt.lineno)
+ else:
+ raise SyntaxError(
+ "future feature %s is not defined" % name,
+ filename = stmt.filename,
+ lineno = stmt.lineno)
+ stmt.valid_future = 1
+ return 1
return 0
def get_features(self):
@@ -52,13 +60,22 @@
Those not marked valid are appearing after other statements
"""
+ def visitModule(self, node):
+ stmt = node.node
+ for s in stmt.nodes:
+ if isinstance(s, ast.From):
+ if s.valid_future:
+ continue
+ if s.modname != "__future__":
+ continue
+ self.visitFrom(s)
+ else:
+ self.default(s)
+
def visitFrom(self, node):
- if hasattr(node, 'valid_future'):
- return
- if node.modname != "__future__":
- return
raise SyntaxError( "from __future__ imports must occur at the beginning of the file",
- ( node.filename, node.lineno, 0, "" ) )
+ filename=node.filename,
+ lineno=node.lineno)
def find_futures(node):
p1 = FutureParser()
Modified: pypy/dist/pypy/interpreter/astcompiler/pyassem.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/pyassem.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/pyassem.py Wed Sep 7 19:41:12 2005
@@ -305,7 +305,7 @@
order = []
seen[b] = b
for c in b.get_children():
- if seen.has_key(c):
+ if c in seen:
continue
order = order + dfs_postorder(c, seen)
order.append(b)
@@ -512,7 +512,7 @@
sys.stdout = save
def _max_depth(self, depth, seen, b, d):
- if seen.has_key(b):
+ if b in seen:
return d
seen[b] = 1
d = d + depth[b]
@@ -641,7 +641,7 @@
for name in self.cellvars:
cells[name] = 1
self.cellvars = [name for name in self.varnames
- if cells.has_key(name)]
+ if name in cells]
for name in self.cellvars:
del cells[name]
self.cellvars = self.cellvars + cells.keys()
Modified: pypy/dist/pypy/interpreter/astcompiler/pycodegen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/pycodegen.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/pycodegen.py Wed Sep 7 19:41:12 2005
@@ -1242,6 +1242,7 @@
name = "<lambda.%d>" % klass.lambdaCount
klass.lambdaCount = klass.lambdaCount + 1
else:
+ assert isinstance(func, ast.Function)
name = func.name
args, hasTupleArg = generateArgList(func.argnames)
Modified: pypy/dist/pypy/interpreter/astcompiler/symbols.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/symbols.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/symbols.py Wed Sep 7 19:41:12 2005
@@ -26,8 +26,8 @@
self.children = []
# nested is true if the class could contain free variables,
# i.e. if it is nested within another function.
- self.nested = None
- self.generator = None
+ self.nested = 0
+ self.generator = 0
self.klass = None
if klass is not None:
for i in range(len(klass)):
@@ -51,9 +51,9 @@
def add_global(self, name):
name = self.mangle(name)
- if self.uses.has_key(name) or self.defs.has_key(name):
+ if name in self.uses or name in self.defs:
pass # XXX warn about global following def/use
- if self.params.has_key(name):
+ if name in self.params:
raise SyntaxError, "%s in %s is global and parameter" % \
(name, self.name)
self.globals[name] = 1
@@ -90,14 +90,14 @@
The scope of a name could be LOCAL, GLOBAL, FREE, or CELL.
"""
- if self.globals.has_key(name):
+ if name in self.globals:
return SC_REALLY_GLOBAL
- if self.cells.has_key(name):
+ if name in self.cells:
return SC_CELL
- if self.defs.has_key(name):
+ if name in self.defs:
return SC_LOCAL
- if self.nested and (self.frees.has_key(name) or
- self.uses.has_key(name)):
+ if self.nested and (name in self.frees or
+ name in self.uses):
return SC_FREE
if self.nested:
return SC_UNKNOWN
@@ -110,8 +110,8 @@
free = {}
free.update(self.frees)
for name in self.uses.keys():
- if not (self.defs.has_key(name) or
- self.globals.has_key(name)):
+ if not (name in self.defs or
+ name in self.globals):
free[name] = 1
return free.keys()
@@ -136,7 +136,7 @@
free.
"""
self.globals[name] = 1
- if self.frees.has_key(name):
+ if name in self.frees:
del self.frees[name]
for child in self.children:
if child.check_name(name) == SC_FREE:
Modified: pypy/dist/pypy/interpreter/astcompiler/transformer.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/transformer.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/transformer.py Wed Sep 7 19:41:12 2005
@@ -86,7 +86,7 @@
def Node(*args):
kind = args[0]
- if nodes.has_key(kind):
+ if kind in nodes:
try:
return nodes[kind](*args[1:])
except TypeError:
Modified: pypy/dist/pypy/interpreter/astcompiler/visitor.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/visitor.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/visitor.py Wed Sep 7 19:41:12 2005
@@ -84,7 +84,7 @@
meth(node, *args)
elif self.VERBOSE > 0:
klass = node.__class__
- if not self.examples.has_key(klass):
+ if klass not in self.examples:
self.examples[klass] = klass
print
print self.visitor
Modified: pypy/dist/pypy/interpreter/pyparser/error.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/error.py (original)
+++ pypy/dist/pypy/interpreter/pyparser/error.py Wed Sep 7 19:41:12 2005
@@ -27,12 +27,12 @@
class SyntaxError(Exception):
"""Base class for exceptions raised by the parser."""
- def __init__(self, msg, lineno=0, offset=0, text=0):
+ def __init__(self, msg, lineno=0, offset=0, text="", filename=""):
self.msg = msg
self.lineno = lineno
self.offset = offset
self.text = text
- self.filename = ""
+ self.filename = filename
self.print_file_and_line = False
def wrap_info(self, space, filename):
More information about the Pypy-commit
mailing list