code: function(datum, targetType, args, isClass, mod, main) {
      let dtype = typeof(datum)
      let value = datum
  
      switch(dtype) {
        case 'string':
        case 'boolean':
        case 'number':
        case 'function':
        case 'undefined':
          // noop
          break
        case 'object':
          if (_.isNull(datum)) {
            // noop
          } else {
            value = this._makeObject(datum, targetType, args, isClass, mod, main);
          }
          break
        default:
          throw new Error("Unable to make from datum: " + datum);
      }
  
      return value
    }
docs: ***************************************************************************
  @method make
  @description "Makes" an object or class. This method does the heavy lifting for
  the :js:func:`~atom.o` and :js:func:`~atom.oo` functions and returns
  the object or class being constructed.
  @param {Object} datum -- An object describing an instance or class
  @param {Object|string} targetType -- The instance type or prototype constructor
  depending on whether we are instantiating an
  object or building a class
  @param {Object} args -- Arguments to pass to the constructor if we are instantiating
  an object
  @param {boolean} isClass -- Whether or not we instantiating an object or creating
  a class
  @param {Object} mod -- The module context that this is being called in (note, this
  is used to determine whether or not to call ``main``)
  @param {boolean} main -- Whether or not main should be called (note, this also depends
  on ``require.main`` and ``mod``)
  @returns {*}
  @throws {Error}
  @ignore