hack around Jython's incorrect AST heriachy
--HG-- branch : trunk
This commit is contained in:
parent
d2e6cd0523
commit
37295dff0a
|
@ -10,6 +10,29 @@ import py
|
||||||
from _py.code.assertion import _format_explanation, BuiltinAssertionError
|
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):
|
class Failure(Exception):
|
||||||
"""Error found while interpreting AST."""
|
"""Error found while interpreting AST."""
|
||||||
|
|
||||||
|
@ -91,7 +114,7 @@ class DebugInterpreter(ast.NodeVisitor):
|
||||||
|
|
||||||
def generic_visit(self, node):
|
def generic_visit(self, node):
|
||||||
# Fallback when we don't have a special implementation.
|
# Fallback when we don't have a special implementation.
|
||||||
if isinstance(node, ast.expr):
|
if _is_ast_expr(node):
|
||||||
mod = ast.Expression(node)
|
mod = ast.Expression(node)
|
||||||
co = self._compile(mod)
|
co = self._compile(mod)
|
||||||
try:
|
try:
|
||||||
|
@ -100,7 +123,7 @@ class DebugInterpreter(ast.NodeVisitor):
|
||||||
raise Failure()
|
raise Failure()
|
||||||
explanation = self.frame.repr(result)
|
explanation = self.frame.repr(result)
|
||||||
return explanation, result
|
return explanation, result
|
||||||
elif isinstance(node, ast.stmt):
|
elif _is_ast_stmt(node):
|
||||||
mod = ast.Module([node])
|
mod = ast.Module([node])
|
||||||
co = self._compile(mod, "exec")
|
co = self._compile(mod, "exec")
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue