fixed compat. with the upcoming Jython 2.5b1 by removing all the Jython
workarounds; its AST matches CPython's pretty closely
diff --git a/CHANGES b/CHANGES
index 2177dde..557b9ef 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+0.2.4
+- Fixed compatibility with Jython 2.5b1.
+
0.2.3
- the <%namespacename:defname> syntax described at
http://techspot.zzzeek.org/?p=28 has now
diff --git a/lib/mako/_ast_util.py b/lib/mako/_ast_util.py
index e0b1dea..706425c 100644
--- a/lib/mako/_ast_util.py
+++ b/lib/mako/_ast_util.py
@@ -25,36 +25,8 @@
:copyright: Copyright 2008 by Armin Ronacher.
:license: Python License.
"""
-import sys
from _ast import *
-if sys.platform.startswith('java'):
- import array
-
- ast_list = array.ArrayType
- get_symbol_key = lambda op: op
-
- def get_class_name(t):
- result = t.__class__.__name__
- if result in ("expr_contextType",
- "boolopType",
- "unaryopType",
- "cmpopType",
- "operatorType"):
- result = str(t)
- if result == "AugLoad":
- result = "Load"
- elif result == "AugStore":
- result = "Store"
- elif result.endswith("Type"):
- result = result[:-4]
- return result
-
-else:
- ast_list = list
- get_symbol_key = type
- get_class_name = lambda node: node.__class__.__name__
-
BOOLOP_SYMBOLS = {
And: 'and',
@@ -137,7 +109,7 @@
return '%s(%s)' % (node.__class__.__name__,
', '.join('%s=%s' % (a, _format(b))
for a, b in iter_fields(node)))
- elif isinstance(node, ast_list):
+ elif isinstance(node, list):
return '[%s]' % ', '.join(_format(x) for x in node)
return repr(node)
if not isinstance(node, AST):
@@ -199,8 +171,6 @@
def iter_fields(node):
"""Iterate over all fields of a node, only yielding existing fields."""
- if not hasattr(node, '_fields') or not node._fields:
- return
for field in node._fields:
try:
yield field, getattr(node, field)
@@ -218,7 +188,7 @@
for name, field in iter_fields(node):
if isinstance(field, AST):
yield field
- elif isinstance(field, ast_list):
+ elif isinstance(field, list):
for item in field:
if isinstance(item, AST):
yield item
@@ -290,7 +260,7 @@
exists for this node. In that case the generic visit function is
used instead.
"""
- method = 'visit_' + get_class_name(node)
+ method = 'visit_' + node.__class__.__name__
return getattr(self, method, None)
def visit(self, node):
@@ -303,7 +273,7 @@
def generic_visit(self, node):
"""Called if no explicit visitor function exists for a node."""
for field, value in iter_fields(node):
- if isinstance(value, ast_list):
+ if isinstance(value, list):
for item in value:
if isinstance(item, AST):
self.visit(item)
@@ -349,7 +319,7 @@
def generic_visit(self, node):
for field, old_value in iter_fields(node):
old_value = getattr(node, field, None)
- if isinstance(old_value, ast_list):
+ if isinstance(old_value, list):
new_values = []
for value in old_value:
if isinstance(value, AST):
@@ -450,7 +420,7 @@
def visit_AugAssign(self, node):
self.newline()
self.visit(node.target)
- self.write(BINOP_SYMBOLS[get_symbol_key(node.op)] + '=')
+ self.write(BINOP_SYMBOLS[type(node.op)] + '=')
self.visit(node.value)
def visit_ImportFrom(self, node):
@@ -726,7 +696,7 @@
def visit_BinOp(self, node):
self.write('(')
self.visit(node.left)
- self.write(' %s ' % BINOP_SYMBOLS[get_symbol_key(node.op)])
+ self.write(' %s ' % BINOP_SYMBOLS[type(node.op)])
self.visit(node.right)
self.write(')')
@@ -734,7 +704,7 @@
self.write('(')
for idx, value in enumerate(node.values):
if idx:
- self.write(' %s ' % BOOLOP_SYMBOLS[get_symbol_key(node.op)])
+ self.write(' %s ' % BOOLOP_SYMBOLS[type(node.op)])
self.visit(value)
self.write(')')
@@ -742,13 +712,13 @@
self.write('(')
self.visit(node.left)
for op, right in zip(node.ops, node.comparators):
- self.write(' %s ' % CMPOP_SYMBOLS[get_symbol_key(op)])
+ self.write(' %s ' % CMPOP_SYMBOLS[type(op)])
self.visit(right)
self.write(')')
def visit_UnaryOp(self, node):
self.write('(')
- op = UNARYOP_SYMBOLS[get_symbol_key(node.op)]
+ op = UNARYOP_SYMBOLS[type(node.op)]
self.write(op)
if op == 'not':
self.write(' ')
diff --git a/lib/mako/pyparser.py b/lib/mako/pyparser.py
index cc9c04e..c79692c 100644
--- a/lib/mako/pyparser.py
+++ b/lib/mako/pyparser.py
@@ -10,15 +10,12 @@
module is used.
"""
-import sys
from StringIO import StringIO
from mako import exceptions, util
# words that cannot be assigned to (notably smaller than the total keys in __builtins__)
reserved = util.Set(['True', 'False', 'None'])
-jython = sys.platform.startswith('java')
-
try:
import _ast
util.restore__ast(_ast)
@@ -91,10 +88,7 @@
for statement in node.orelse:
self.visit(statement)
def visit_Name(self, node):
- if jython:
- if node.ctx == _ast.Store:
- self._add_declared(node.id)
- elif isinstance(node.ctx, _ast.Store):
+ if isinstance(node.ctx, _ast.Store):
self._add_declared(node.id)
if node.id not in reserved and node.id not in self.listener.declared_identifiers and node.id not in self.local_ident_stack:
self.listener.undeclared_identifiers.add(node.id)