             switch (idx, codeunit, state) {
 
             case (_, Token.Minus, .initial):
-                numberStorage.append(codeunit)
+                sign = -1
                 state = .leadingNegativeSign
             
             case (_, Token.Plus, .initial):


            }

            let string = String(bytes: numberStorage, encoding: .utf8)
            if let number = Double(string!) {
                return JSValue(number)
            }
            else {
                let info = [
                    ErrorKeys.LocalizedDescription: ErrorCode.ParsingError.message,
                    ErrorKeys.LocalizedFailureReason: "Unable to convert parsed number into a `Double`: \(string!)."]
                throw JsonParserError(code: ErrorCode.ParsingError.code, domain: JSValueErrorDomain, userInfo: info)
            }
        }

        let info = [

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

            case (_, Token.Minus, .exponent):
                exponentSign = -1
                state = .exponentSign

            case (_, Token.Plus, .exponent):
                state = .exponentSign
            
            case (_, Token.Zero...Token.Nine, .exponent): fallthrough
            case (_, Token.Zero...Token.Nine, .exponentSign): fallthrough
            case (_, Token.Zero...Token.Nine, .exponentDigits):
                exponent = exponent * 10 + Double(codeunit - Token.Zero)
                state = .exponentDigits

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

            default:
