| 'use strict'; | 
| var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); | 
| var isCallable = require('../internals/is-callable'); | 
| var classofRaw = require('../internals/classof-raw'); | 
| var wellKnownSymbol = require('../internals/well-known-symbol'); | 
|   | 
| var TO_STRING_TAG = wellKnownSymbol('toStringTag'); | 
| var $Object = Object; | 
|   | 
| // ES3 wrong here | 
| var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; | 
|   | 
| // fallback for IE11 Script Access Denied error | 
| var tryGet = function (it, key) { | 
|   try { | 
|     return it[key]; | 
|   } catch (error) { /* empty */ } | 
| }; | 
|   | 
| // getting tag from ES6+ `Object.prototype.toString` | 
| module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { | 
|   var O, tag, result; | 
|   return it === undefined ? 'Undefined' : it === null ? 'Null' | 
|     // @@toStringTag case | 
|     : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag | 
|     // builtinTag case | 
|     : CORRECT_ARGUMENTS ? classofRaw(O) | 
|     // ES3 arguments fallback | 
|     : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; | 
| }; |