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)