         variable = @eval(exp.variable)
         value = @eval(exp.value)
 
-        baseName = variable.base.value
+        baseName = exp.variable.base.value
         switch baseName
           when 'module'
-            unless variable.properties?[0]?.name?.value is 'exports'
+            return if exp.variable.properties.length is 0 # Ignore `module = ...` (atom/src/browser/main.coffee)
+            unless exp.variable.properties?[0]?.name?.value is 'exports'
+              # console.log _.map variable.properties, (item) -> item.name.value
               throw new Error 'BUG: Does not support module.somthingOtherThanExports'
             baseName = 'exports'
-            firstProp = variable.properties[1]
+            firstProp = exp.variable.properties[1]
           when 'exports'
-            firstProp = variable.properties[0]
+            firstProp = exp.variable.properties[0]
 
         switch baseName
           when 'exports'

      constructor: (root) ->
        root.traverseChildren no, (exp) => @visit(exp) # `no` means Stop at scope boundaries

      visit: (exp) ->  @["visit#{exp.constructor.name}"](exp)
      eval:  (exp) ->  @["eval#{exp.constructor.name}"](exp)

      visitComment: (exp) ->
        # Skip the 1st comment which is added by coffeescript


          # case left-hand-side is anything other than `exports...`
          else
            # Handle 4 common cases:
            #
            # X     = ...
            # {X}   = ...
            # {X:Y} = ...
            # X.y   = ...
            switch exp.variable.base.constructor.name
              when 'Literal'
                # case X.y = ...  (just ignore it)
                unless exp.variable.properties?.length > 0
                  # case X = ...
                  @defs[exp.variable.base.value] = _.extend name: exp.variable.base.value, value
              when 'Obj'
                for key in exp.variable.base.objects
                  switch key.constructor.name
                    when 'Value'
                      # case {X} = ...
