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