                                 rv = create_intrinsic isNull_id, [checkarg]
                                 if exp.operator is "!=="
                                         rv = {
-                                                type: _UnaryExpression
+                                                type: UnaryExpression
                                                 operator: "!"
                                                 argument: rv
                                         }


                # 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
                        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
                        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
                                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

