00001 var DataView = require('./_DataView'),
00002 Map = require('./_Map'),
00003 Promise = require('./_Promise'),
00004 Set = require('./_Set'),
00005 WeakMap = require('./_WeakMap'),
00006 baseGetTag = require('./_baseGetTag'),
00007 toSource = require('./_toSource');
00008
00010 var mapTag = '[object Map]',
00011 objectTag = '[object Object]',
00012 promiseTag = '[object Promise]',
00013 setTag = '[object Set]',
00014 weakMapTag = '[object WeakMap]';
00015
00016 var dataViewTag = '[object DataView]';
00017
00019 var dataViewCtorString = toSource(DataView),
00020 mapCtorString = toSource(Map),
00021 promiseCtorString = toSource(Promise),
00022 setCtorString = toSource(Set),
00023 weakMapCtorString = toSource(WeakMap);
00024
00032 var getTag = baseGetTag;
00033
00034
00035 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
00036 (Map && getTag(new Map) != mapTag) ||
00037 (Promise && getTag(Promise.resolve()) != promiseTag) ||
00038 (Set && getTag(new Set) != setTag) ||
00039 (WeakMap && getTag(new WeakMap) != weakMapTag)) {
00040 getTag = function(value) {
00041 var result = baseGetTag(value),
00042 Ctor = result == objectTag ? value.constructor : undefined,
00043 ctorString = Ctor ? toSource(Ctor) : '';
00044
00045 if (ctorString) {
00046 switch (ctorString) {
00047 case dataViewCtorString: return dataViewTag;
00048 case mapCtorString: return mapTag;
00049 case promiseCtorString: return promiseTag;
00050 case setCtorString: return setTag;
00051 case weakMapCtorString: return weakMapTag;
00052 }
00053 }
00054 return result;
00055 };
00056 }
00057
00058 module.exports = getTag;