             return makeParseError("unexpected end of data while parsing number at position \(start)")
         }
         switch input[loc] {
-        case Literal.zero
-        ,    Literal.one
-        ,    Literal.two
-        ,    Literal.three
-        ,    Literal.four
-        ,    Literal.five
-        ,    Literal.six
-        ,    Literal.seven
-        ,    Literal.eight
-        ,    Literal.nine:
+        case Literal.zero...Literal.nine:
             return decodeNumberExponentDigits(start, sign: sign, value: value, expSign: expSign)
 
         default:

        case Literal.zero:
            return decodeNumberLeadingZero(start, sign: .Negative)

        case Literal.one
        ,    Literal.two
        ,    Literal.three
        ,    Literal.four
        ,    Literal.five
        ,    Literal.six
        ,    Literal.seven
        ,    Literal.eight
        ,    Literal.nine:
            return decodeNumberPreDecimalDigits(start, sign: .Negative)

        default:

        while loc < input.count {
            let c = input[loc]
            switch c {
            case Literal.zero...Literal.nine:
                value = 10 * value + Double(c - Literal.zero)
                ++loc

