     }
     
     mutating func skipWhitespaces() throws {
-        while currentChar != nil && [9, 10, 13, 32].contains(currentChar!) {
-            scanner.next()
+        Loop: while currentChar != nil {
+            switch currentChar! {
+            case 9, 10, 13, 32: scanner.next()
+            default: break Loop
+            }
         }
         if currentChar == nil {
             throw JsonParseError.UnexpectedEndOfToken

                scanner.next()
            }
        }
        if let val = strbuf.getString() {
            return Json(val)
        }
        throw JsonParseError.UnexpectedToken(position: scanner.pos)
    }
    
    mutating func parseArray() throws -> Json {

    }
    
    mutating func parseNumber() throws -> Json {
        let start: UnsafeMutablePointer<Int8> = UnsafeMutablePointer(scanner.bytes - 1)
        var end: UnsafeMutablePointer<Int8> = start
        let val = strtod(start, &end)
        if start == end {
            throw JsonParseError.UnexpectedToken(position: scanner.pos)
        }
        scanner.bytes = UnsafePointer(end)
        scanner.pos += abs(end - start) - 1
        scanner.next()
        return Json(val)
    }
    
    mutating func parseString() throws -> Json {
        if scanner.next() == nil {
            throw JsonParseError.UnexpectedEndOfToken
        }
        strbuf.removeAll(keepCapacity: true)
        Loop: while currentChar != nil {
            switch currentChar! {
            case 92:
