 
                 # now make sure the init block initializes update_identifier_name
 
-                if exp.init.type isnt _VariableDeclaration and exp.init.type isnt _AssignmentExpression
-                        return super
-
-                if exp.init.type is _VariableDeclaration
+                if exp.init.type isnt VariableDeclaration and exp.init.type isnt AssignmentExpression
+                        return super
+
+                if exp.init.type is VariableDeclaration
                         found = false
                         # check for var/let $update_identifier_name = ...
-                        found = found || (decl.id.name is update_identifier_name and decl.init.type is _Literal and typeof decl.init.value is 'number') for decl in exp.init.declarations
+                        found = found || (decl.id.name is update_identifier_name and decl.init.type is Literal and typeof decl.init.value is 'number') for decl in exp.init.declarations
                         if not found
                                 return super
                         # else we win and the initializer is ok
                 else
-                        if exp.init.left.type isnt _Identifier or exp.init.left.name isnt update_identifier_name
+                        if exp.init.left.type isnt Identifier or exp.init.left.name isnt update_identifier_name
                                 return super
                         # else we win and the initializer is ok
                         

        constructor: -> super
        
        visitUnaryExpression: (n) ->
                if n.operator is "void" and n.argument.type is _Literal and n.argument.value is 0
                        return create_intrinsic builtinUndefined_id, []
                n


# ==/!= of constants null or undefined
# 
class EqIdioms extends TreeVisitor
        is_typeof = (e) -> e.type is UnaryExpression and e.operator is "typeof"
        is_string_literal = (e) -> e.type is Literal and typeof e.value is "string"
        is_undefined_literal = (e) -> e.type is Literal and e.value is undefined
        is_null_literal = (e) -> e.type is Literal and e.value is null

        visitBinaryExpression: (exp) ->
                return super if exp.operator isnt "==" and exp.operator isnt "===" and exp.operator isnt "!=" and exp.operator isnt "!=="
