hack around Jython's incorrect AST heriachy

--HG--
branch : trunk
This commit is contained in:
Benjamin Peterson 2009-10-27 16:22:46 -05:00
parent d2e6cd0523
commit 37295dff0a
1 changed files with 25 additions and 2 deletions

View File

@ -10,6 +10,29 @@ import py
from _py.code.assertion import _format_explanation, BuiltinAssertionError
if sys.platform.startswith("java") and sys.version_info < (2, 5, 2):
# See http://bugs.jython.org/issue1497
_exprs = ("BoolOp", "BinOp", "UnaryOp", "Lambda", "IfExp", "Dict",
"ListComp", "GeneratorExp", "Yield", "Compare", "Call",
"Repr", "Num", "Str", "Attribute", "Subscript", "Name",
"List", "Tuple")
_stmts = ("FunctionDef", "ClassDef", "Return", "Delete", "Assign",
"AugAssign", "Print", "For", "While", "If", "With", "Raise",
"TryExcept", "TryFinally", "Assert", "Import", "ImportFrom",
"Exec", "Global", "Expr", "Pass", "Break", "Continue")
_expr_nodes = set(getattr(ast, name) for name in _exprs)
_stmt_nodes = set(getattr(ast, name) for name in _stmts)
def _is_ast_expr(node):
return node.__class__ in _expr_nodes
def _is_ast_stmt(node):
return node.__class__ in _stmt_nodes
else:
def _is_ast_expr(node):
return isinstance(node, ast.expr)
def _is_ast_stmt(node):
return isinstance(node, ast.stmt)
class Failure(Exception):
"""Error found while interpreting AST."""
@ -91,7 +114,7 @@ class DebugInterpreter(ast.NodeVisitor):
def generic_visit(self, node):
# Fallback when we don't have a special implementation.
if isinstance(node, ast.expr):
if _is_ast_expr(node):
mod = ast.Expression(node)
co = self._compile(mod)
try:
@ -100,7 +123,7 @@ class DebugInterpreter(ast.NodeVisitor):
raise Failure()
explanation = self.frame.repr(result)
return explanation, result
elif isinstance(node, ast.stmt):
elif _is_ast_stmt(node):
mod = ast.Module([node])
co = self._compile(mod, "exec")
try: