Errors: {
}
method /*isNullableByDefault, from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dynamic a, dynamic b) → dynamic
  return ((dynamic a, dynamic b) → dart.core::bool* {
    if(!a._usedData.{dart.core::Object::==}(b._usedData) || !a._deletedKeys.{dart.core::Object::==}(b._deletedKeys) || !a._hashMask.{dart.core::Object::==}(b._hashMask) || !a._index.length.{dart.core::Object::==}(b._index.length) || !a._data.length.{dart.core::Object::==}(b._data.length)) {
      return false;
    }
    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._index.length as{TypeError,ForDynamic} dart.core::num); i = i.{dart.core::num::+}(1)) {
      if(!a._index.[](i).{dart.core::Object::==}(b._index.[](i))) {
        return false;
      }
    }
    for (dart.core::int* i = 0; i.{dart.core::num::<}(a._data.length as{TypeError,ForDynamic} dart.core::num); i = i.{dart.core::num::+}(1)) {
      dynamic ad = a._data.[](i);
      dynamic bd = b._data.[](i);
      if(!dart.core::identical(ad, bd) && !(ad.{dart.core::Object::==}(a) && bd.{dart.core::Object::==}(b))) {
        return false;
      }
    }
    return true;
  }).call(a, b);
