           ret
 
         else
-          null
-
-      evalAssign: (exp) -> throw new Error 'BUG: Not implemented yet'
-      evalLiteral: (exp) -> throw new Error 'BUG: Not implemented yet'
-      evalObj: (exp) -> throw new Error 'BUG: Not implemented yet'
-      evalAccess: (exp) -> throw new Error 'BUG: Not implemented yet'
-
+          type: 'function'
+          doc: @commentLines[lineMapping[exp.locationData.first_line] - 1]
+          startLineNumber:  lineMapping[exp.locationData.first_line]
+          endLineNumber:    lineMapping[exp.locationData.last_line]
+
+
+      evalError: (str, exp) ->
+        throw new Error "BUG: Not implemented yet: #{str}. Line #{exp.locationData.first_line}"
+      evalAssign: (exp) -> @eval(exp.value) # Support x = y = z
+      evalLiteral: (exp) -> @evalError 'evalLiteral', exp
+      evalObj: (exp) -> @evalError 'evalObj', exp
+      evalAccess: (exp) -> @evalError 'evalAccess', exp
+
+      evalUnknown: (exp) -> exp
+      evalIf: -> @evalUnknown(arguments)
+      visitIf: ->
+      visitOp: ->
+      visitArr: ->
+      visitNull: ->
+      visitBool: ->
+      visitIndex: ->
+      visitParens: ->
+
+      evalOp: (exp) -> exp
+
+    # console.log 'Visiting ' + file
 
     {defs:unindexedObjects, exports:exports} = new Visitor(root)
     objects = {}


          # case left-hand-side is anything other than `exports...`
          else
            # Handle 3 common cases:
            #
            # X     = ...
            # {X}   = ...
            # {X:Y} = ...
            switch variable.base.constructor.name
              when 'Literal'
                # case X = ...
                @defs[variable.base.value] = _.extend name: variable.base.value, value
              when 'Obj'
                for key in variable.base.objects
                  switch key.constructor.name
                    when 'Value'
                      # case {X} = ...

        variable = @eval(exp.variable)
        value = @eval(exp.value)

        baseName = exp.variable.base.value
        switch baseName
          when 'module'
            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 = exp.variable.properties[1]
          when 'exports'
            firstProp = exp.variable.properties[0]

        switch baseName
          when 'exports'
