       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)
+      visit: (exp) ->
+        # throw new Error "Could not parse line #{lineMapping[exp.locationData.first_line]} because of missing visit#{exp.constructor.name}()" unless @["visit#{exp.constructor.name}"]
+        @["visit#{exp.constructor.name}"](exp)
+      eval:  (exp) ->
+        # throw new Error "Could not parse line #{lineMapping[exp.locationData.first_line]} because of missing eval#{exp.constructor.name}()" unless @["eval#{exp.constructor.name}"]
+        @["eval#{exp.constructor.name}"](exp)
 
       visitComment: (exp) ->
         # Skip the 1st comment which is added by coffeescript

        startLineNumber:  lineMapping[exp.locationData.first_line]
        endLineNumber:    lineMapping[exp.locationData.last_line]

      evalValue: (exp) -> exp
      evalCall: (exp) ->
        # The only interesting call is `require('foo')`
        if exp.variable.base.value is 'require'


          # 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} = ...
