|
1 | 1 | 'use strict';
|
2 | 2 |
|
3 |
| -var objectKeys = require('object-keys'); |
4 |
| -var isArguments = require('is-arguments'); |
5 |
| -var is = require('object-is'); |
6 |
| -var isRegex = require('is-regex'); |
| 3 | +var assign = require('object.assign'); |
| 4 | +var callBound = require('call-bind/callBound'); |
7 | 5 | var flags = require('regexp.prototype.flags');
|
| 6 | +var GetIntrinsic = require('get-intrinsic'); |
| 7 | +var getIterator = require('es-get-iterator'); |
| 8 | +var getSideChannel = require('side-channel'); |
| 9 | +var is = require('object-is'); |
| 10 | +var isArguments = require('is-arguments'); |
8 | 11 | var isArray = require('isarray');
|
| 12 | +var isArrayBuffer = require('is-array-buffer'); |
9 | 13 | var isDate = require('is-date-object');
|
| 14 | +var isRegex = require('is-regex'); |
| 15 | +var isSharedArrayBuffer = require('is-shared-array-buffer'); |
| 16 | +var objectKeys = require('object-keys'); |
10 | 17 | var whichBoxedPrimitive = require('which-boxed-primitive');
|
11 |
| -var GetIntrinsic = require('get-intrinsic'); |
12 |
| -var callBound = require('call-bind/callBound'); |
13 | 18 | var whichCollection = require('which-collection');
|
14 |
| -var getIterator = require('es-get-iterator'); |
15 |
| -var getSideChannel = require('side-channel'); |
16 | 19 | var whichTypedArray = require('which-typed-array');
|
17 |
| -var assign = require('object.assign'); |
18 |
| -var isArrayBuffer = require('is-array-buffer'); |
19 | 20 |
|
20 |
| -var byteLength = callBound('%ArrayBuffer.prototype.byteLength%', true) |
| 21 | +var byteLength = callBound('ArrayBuffer.prototype.byteLength', true) |
21 | 22 | || function byteLength(ab) { return ab.byteLength; }; // in node < 0.11, byteLength is an own nonconfigurable property
|
| 23 | +var sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); |
22 | 24 |
|
23 | 25 | var $getTime = callBound('Date.prototype.getTime');
|
24 | 26 | var gPO = Object.getPrototypeOf;
|
@@ -335,6 +337,14 @@ function objEquiv(a, b, opts, channel) {
|
335 | 337 | return typeof Uint8Array === 'function' && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel);
|
336 | 338 | }
|
337 | 339 |
|
| 340 | + var aIsSAB = isSharedArrayBuffer(a); |
| 341 | + var bIsSAB = isSharedArrayBuffer(b); |
| 342 | + if (aIsSAB !== bIsSAB) { return false; } |
| 343 | + if (aIsSAB || bIsSAB) { // && would work too, because both are true or both false here |
| 344 | + if (sabByteLength(a) !== sabByteLength(b)) { return false; } |
| 345 | + return typeof Uint8Array === 'function' && internalDeepEqual(new Uint8Array(a), new Uint8Array(b), opts, channel); |
| 346 | + } |
| 347 | + |
338 | 348 | if (typeof a !== typeof b) { return false; }
|
339 | 349 |
|
340 | 350 | var ka = objectKeys(a);
|
|
0 commit comments