org.apache.royale.utils.Language.is = function()

in asdoc/org/apache/royale/utils/Language.js [159:233]


org.apache.royale.utils.Language.is = function(leftOperand, rightOperand) {
  var /** @type {Object} */ superClass;
  if (leftOperand == null || rightOperand == null)
    return false;
  if (rightOperand === Array) {
    return (Array.isArray(leftOperand) && !(org.apache.royale.utils.Language.SYNTH_TAG_FIELD in leftOperand));
  }
  if (leftOperand instanceof rightOperand)
    return true;
  if (rightOperand === Object)
    return true;
  var /** @type {string} */ theType = typeof(leftOperand);
  if (theType === 'string')
    return rightOperand === String;
  if (theType === 'number') {
    if (rightOperand === Number)
      return true;
  }
  if (theType === 'boolean')
    return rightOperand === Boolean;
  if (rightOperand.constructor === org.apache.royale.utils.Language._synthType)
    return !!(rightOperand['checkIs'](leftOperand));
  if (leftOperand.ROYALE_CLASS_INFO === undefined)
    return false;
  if (!org.apache.royale.utils.Language.isInitInterfaceMap) {
    if (typeof(WeakMap) == "function") {
      org.apache.royale.utils.Language.interfaceMap = new WeakMap();
    }
    org.apache.royale.utils.Language.isInitInterfaceMap = true;
  }
  var /** @type {Object} */ classInterfaceMap;
  if (org.apache.royale.utils.Language.interfaceMap && org.apache.royale.utils.Language.interfaceMap.has(leftOperand.ROYALE_CLASS_INFO)) {
    classInterfaceMap = org.apache.royale.utils.Language.interfaceMap.get(leftOperand.ROYALE_CLASS_INFO);
    if (classInterfaceMap && classInterfaceMap.has(rightOperand))
      return !!(classInterfaceMap.get(rightOperand));
  }
  if (leftOperand.ROYALE_CLASS_INFO && leftOperand.ROYALE_CLASS_INFO.interfaces) {
    if (org.apache.royale.utils.Language.checkInterfaces(leftOperand, rightOperand)) {
      if (org.apache.royale.utils.Language.interfaceMap) {
        if (!org.apache.royale.utils.Language.interfaceMap.has(leftOperand.ROYALE_CLASS_INFO)) {
          org.apache.royale.utils.Language.interfaceMap.set(leftOperand.ROYALE_CLASS_INFO, new WeakMap());
        }
        classInterfaceMap = org.apache.royale.utils.Language.interfaceMap.get(leftOperand.ROYALE_CLASS_INFO);
        classInterfaceMap.set(rightOperand, true);
      }
      return true;
    }
  }
  superClass = leftOperand.constructor.superClass_;
  if (superClass) {
    while (superClass && superClass.ROYALE_CLASS_INFO) {
      if (superClass.ROYALE_CLASS_INFO.interfaces) {
        if (org.apache.royale.utils.Language.checkInterfaces(superClass, rightOperand)) {
          if (org.apache.royale.utils.Language.interfaceMap) {
            if (!org.apache.royale.utils.Language.interfaceMap.has(leftOperand.ROYALE_CLASS_INFO)) {
              org.apache.royale.utils.Language.interfaceMap.set(leftOperand.ROYALE_CLASS_INFO, new WeakMap());
            }
            classInterfaceMap = org.apache.royale.utils.Language.interfaceMap.get(leftOperand.ROYALE_CLASS_INFO);
            classInterfaceMap.set(rightOperand, true);
          }
          return true;
        }
      }
      superClass = superClass.constructor.superClass_;
    }
  }
  if (org.apache.royale.utils.Language.interfaceMap) {
    if (!org.apache.royale.utils.Language.interfaceMap.has(leftOperand.ROYALE_CLASS_INFO)) {
      org.apache.royale.utils.Language.interfaceMap.set(leftOperand.ROYALE_CLASS_INFO, new WeakMap());
    }
    classInterfaceMap = org.apache.royale.utils.Language.interfaceMap.get(leftOperand.ROYALE_CLASS_INFO);
    classInterfaceMap.set(rightOperand, false);
  }
  return false;
};