                 assertionFailure("Invalid internal state while parsing number")
 
             case .Done:
-                guard case let (signedValue, false) = Int.multiplyWithOverflow(sign.rawValue, value) else {
-                    throw InternalError.NumberOverflow(offset: parser.start)
-                }
-
-                loc = parser.loc
-                return .Int(signedValue)
-            }
-        }
+                fatalError("impossible condition")
+            }
+        }
+
+        guard case let (signedValue, false) = Int.multiplyWithOverflow(sign.rawValue, value) else {
+            throw InternalError.NumberOverflow(offset: parser.start)
+        }
+
+        loc = parser.loc
+        return .Int(signedValue)
     }
 
     private mutating func decodeFloatingPointValue(parser: NumberParser, sign: Sign, value: Double) throws -> JSON {

        var exponent = Double(0)
        var position = 0.1

        while true {
            switch parser.state {
            case .LeadingMinus, .LeadingZero, .PreDecimalDigits:
                assertionFailure("Invalid internal state while parsing number")

                }

            case .Done:
                fatalError("impossible condition")
            }
        }

        loc = parser.loc
        return .Double(Double(sign.rawValue) * value * pow(10, Double(exponentSign.rawValue) * exponent))
    }

    private mutating func decodeNumberAsString(start: Int) throws -> JSON {
