MCPcopy Create free account
hub / github.com/microsoft/SandDance / shouldUseNative

Function shouldUseNative

docs/tests/v2/es6/js/sanddance.js:7563–7609  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

7561}
7562
7563function shouldUseNative() {
7564 try {
7565 if (!Object.assign) {
7566 return false;
7567 } // Detect buggy property enumeration order in older V8 versions.
7568 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
7569
7570
7571 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
7572
7573 test1[5] = 'de';
7574
7575 if (Object.getOwnPropertyNames(test1)[0] === '5') {
7576 return false;
7577 } // https://bugs.chromium.org/p/v8/issues/detail?id=3056
7578
7579
7580 var test2 = {};
7581
7582 for (var i = 0; i < 10; i++) {
7583 test2['_' + String.fromCharCode(i)] = i;
7584 }
7585
7586 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
7587 return test2[n];
7588 });
7589
7590 if (order2.join('') !== '0123456789') {
7591 return false;
7592 } // https://bugs.chromium.org/p/v8/issues/detail?id=3056
7593
7594
7595 var test3 = {};
7596 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
7597 test3[letter] = letter;
7598 });
7599
7600 if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {
7601 return false;
7602 }
7603
7604 return true;
7605 } catch (err) {
7606 // We don't expect any of the above to throw, but better to be safe.
7607 return false;
7608 }
7609}
7610
7611module.exports = shouldUseNative() ? Object.assign : function (target, source) {
7612 var from;

Callers 1

sanddance.jsFile · 0.70

Calls 1

forEachMethod · 0.45

Tested by

no test coverage detected