docs: function Date(Y, M, D, h, m, s, ms) {
                  var length = arguments.length;
                  var date;
                  if (this instanceof NativeDate) {
                      var seconds = s;
                      var millis = ms;
                      if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
                          // work around a Safari 8/9 bug where it treats the seconds as signed
                          var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
                          var sToShift = Math.floor(msToShift / 1e3);
                          seconds += sToShift;
                          millis -= sToShift * 1e3;
                      }
                      date = length === 1 && $String(Y) === Y ? // isString(Y)
                          // We explicitly pass it through parse:
                          new NativeDate(DateShim.parse(Y)) :
                          // We have to manually make calls depending on argument
                          // length here
                          length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) :
                          length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) :
                          length >= 5 ? new NativeDate(Y, M, D, h, m) :
                          length >= 4 ? new NativeDate(Y, M, D, h) :
                          length >= 3 ? new NativeDate(Y, M, D) :
                          length >= 2 ? new NativeDate(Y, M) :
                          length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y) :
                                        new NativeDate();
                  } else {
                      date = NativeDate.apply(this, arguments);
                  }
                  if (!isPrimitive(date)) {
                      // Prevent mixups with unfixed Date object
                      defineProperties(date, { constructor: DateShim }, true);
                  }
                  return date;
              }