var Symbol = require('./_Symbol');

/** Used for built-in method references. */ var objectProto = Object.prototype;

/** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty;

/**

* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/

var nativeObjectToString = objectProto.toString;

/** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

/**

* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the raw `toStringTag`.
*/

function getRawTag(value) {

var isOwn = hasOwnProperty.call(value, symToStringTag),
    tag = value[symToStringTag];

try {
  value[symToStringTag] = undefined;
  var unmasked = true;
} catch (e) {}

var result = nativeObjectToString.call(value);
if (unmasked) {
  if (isOwn) {
    value[symToStringTag] = tag;
  } else {
    delete value[symToStringTag];
  }
}
return result;

}

module.exports = getRawTag;