         //    plus = %x2B                ; +
         //    zero = %x30                ; 0
 
-        numberStorage.removeAll(keepingCapacity: true)
+
+        var sign: Double = 1
+        var value: Double = 0
+        var fraction: Double = 0
+        var exponent: Double = 0
+        var exponentSign: Double = 1
+        var fractionMultiplier: Double = 10
+
         var state: NumberParsingState = .initial
         var valid = false
 

            case (_, Token.E, .integer): fallthrough
            case (_, Token.e, .fractional): fallthrough
            case (_, Token.E, .fractional):
                numberStorage.append(codeunit)
                state = .exponent

            case (_, Token.Minus, .exponent): fallthrough
            case (_, Token.Plus, .exponent):
                numberStorage.append(codeunit)
                state = .exponentSign
            
            case (_, Token.Zero...Token.Nine, .exponent): fallthrough
            case (_, Token.Zero...Token.Nine, .exponentSign): fallthrough
            case (_, Token.Zero...Token.Nine, .exponentDigits):
                numberStorage.append(codeunit)
                state = .exponentDigits

            case (_, Token.Period, .leadingZero): fallthrough
            case (_, Token.Period, .integer):
                numberStorage.append(codeunit)
                state = .decimal

            default:

                throw JsonParserError(code: ErrorCode.ParsingError.code, domain: JSValueErrorDomain, userInfo: info)

            case (_, Token.Zero, .initial):
                state = .leadingZero

            case (_, Token.Zero, .leadingNegativeSign):
                state = .leadingZero

            case (_, Token.Zero...Token.Nine, .leadingZero):
