 
         var p = target.utf8Start
         let endp = p.advancedBy(Int(target.byteSize))
-
-        LOOP: for ; p != endp; p++, advance() {
+        while p != endp {
             if p.memory != currentChar {
                 cur = start // unread
                 lineNumber = l
                 columnNumber = c
                 return false
             }
-        }
-
+            
+            p++
+            advance()
+        }
+    
         return true
     }
 

        case Char(ascii: "0"):
            advance()
        case Char(ascii: "1") ... Char(ascii: "9"):
            for ; cur != end; advance() {
                if let value = digitToInt(currentChar) {
                    integer = (integer * 10) + Int64(value)
                } else {
                    break
                }
            }
        default:
            throw InvalidNumberError("invalid token in number", self)
        }

        if integer != Int64(Double(integer)) {
            // TODO
            //return .Error(InvalidNumberError("too much integer part in number", self))
        }

        var fraction: Double = 0.0

            exponent = 0

            var exponentLength = 0
            while let value = digitToInt(currentChar) where cur != end {
                exponent = (exponent * 10) + Int64(value)
                exponentLength++
                advance()
            }
            
            guard exponentLength != 0 else {
                throw InvalidNumberError("insufficient exponent part in number", self)
            }

            exponent *= expSign
        }

        return .NumberValue(sign * (Double(integer) + fraction) * pow(10, Double(exponent)))
    }

