hunk.code_window:   [ABI14_0_0RCTSharedApplication() setStatusBarStyle:_initialStatusBarStyle animated:YES];
     _redirectResolve = nil;
     _redirectReject = nil;
   }
   @end
hunk.labels: add keep keep keep keep keep
hunk.after_edit: #pragma clang diagnostic pop
  
hunk.file_path: ios/versioned-react-native/ABI14_0_0/Exponent/Modules/Api/ABI14_0_0EXWebBrowser.m
hunk.type: add
file: /**
   * Copyright 2013-2015, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   */
  
  'use strict';
  
  // TODO: Move deepDiffer into react
  
  var deepDiffer = function(one: any, two: any): boolean {
    if (one === two) {
      // Short circuit on identical object references instead of traversing them.
      return false;
    }
    if ((typeof one === 'function') && (typeof two === 'function')) {
      // We consider all functions equal
      return false;
    }
    if ((typeof one !== 'object') || (one === null)) {
      // Primitives can be directly compared
      return one !== two;
    }
    if ((typeof two !== 'object') || (two === null)) {
      // We know they are different because the previous case would have triggered
      // otherwise.
      return true;
    }
    if (one.constructor !== two.constructor) {
      return true;
    }
    if (Array.isArray(one)) {
      // We know two is also an array because the constructors are equal
      var len = one.length;
      if (two.length !== len) {
        return true;
      }
      for (var ii = 0; ii < len; ii++) {
        if (deepDiffer(one[ii], two[ii])) {
          return true;
        }
      }
    } else {
      for (var key in one) {
        if (deepDiffer(one[key], two[key])) {
          return true;
        }
      }
      for (var twoKey in two) {
        // The only case we haven't checked yet is keys that are in two but aren't
        // in one, which means they are different.
        if (one[twoKey] === undefined && two[twoKey] !== undefined) {
          return true;
        }
      }
    }
    return false;
  };
  
  module.exports = deepDiffer;
  