Decimal StepRange::parseStep(AnyStepHandling anyStepHandling, const StepDescription& stepDescription, const String& stepString) { if (stepString.isEmpty()) return stepDescription.defaultValue(); if (equalIgnoringCase(stepString, "any")) { switch (anyStepHandling) { case RejectAny: return Decimal::nan(); case AnyIsDefaultStep: return stepDescription.defaultValue(); default: ASSERT_NOT_REACHED(); } } Decimal step = parseToDecimalForNumberType(stepString); if (!step.isFinite() || step <= 0) return stepDescription.defaultValue(); switch (stepDescription.stepValueShouldBe) { case StepValueShouldBeReal: step *= stepDescription.stepScaleFactor; break; case ParsedStepValueShouldBeInteger: // For date, month, and week, the parsed value should be an integer for some types. step = std::max(step.round(), Decimal(1)); step *= stepDescription.stepScaleFactor; break; case ScaledStepValueShouldBeInteger: // For datetime, datetime-local, time, the result should be an integer. step *= stepDescription.stepScaleFactor; step = std::max(step.round(), Decimal(1)); break; default: ASSERT_NOT_REACHED(); } ASSERT(step > 0); return step; }