]> git.saurik.com Git - cycript.git/blobdiff - Scanner.lpp.in
Avoid crash when using toCYON on String.prototype.
[cycript.git] / Scanner.lpp.in
index 399feb828e273a44cdb3d45f360a29e4ed4cfa62..7df83885fd9e822c1d81770e0915f9088552c0ea 100644 (file)
@@ -184,15 +184,9 @@ static unsigned U(char *&local, const char *text, yy_size_t &i) {
     I(type, Type(P.strmemdup(yyextra->buffer_.data(), yyextra->buffer_.size()), yyextra->buffer_.size()), value, highlight); \
 } while (false)
 
-#define YY_INPUT(data, value, size) { \
-    if (yyextra->data_.eof()) \
-        value = YY_NULL; \
-    else { \
-        yyextra->data_.read(data, size); \
-        size_t copy(yyextra->data_.gcount()); \
-        value = copy == 0 ? YY_NULL : copy; \
-    } \
-}
+#define YY_INPUT(data, value, size) do { \
+    value = yyextra->data_.sgetn(data, size) ?: YY_NULL; \
+} while (false)
 
 %}
 
@@ -279,7 +273,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 
     /* RegEx {{{ */
 <RegularExpression>{
-    \/{UnicodePart}* R CYLexBufferUnits(yytext, yyleng); CYLexBufferEnd(literal, RegEx, tk::RegularExpressionLiteral, hi::Constant);
+    \/{UnicodePart}* R CYLexBufferUnits(yytext, yyleng); CYLexBufferEnd(literal, RegEx, tk::RegularExpressionLiteral_, hi::Constant);
     \/{UnicodePart}*{UnicodeError} R E("invalid character");
 
     {RegExCharacter}+ R CYLexBufferUnits(yytext, yyleng);
@@ -450,6 +444,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
     /* }}} */
     /* Reserved {{{ */
 "abstract"        L /*FII*/ F(tk::_abstract_, hi::Meta);
+"as"              L /*III*/ F(tk::_as_, hi::Meta);
 "await"           L /*II?*/ F(tk::_await_, hi::Meta);
 "boolean"         L /*FII*/ F(tk::_boolean_, hi::Type);
 "break"           L /*KKK*/ F(tk::_break_, hi::Control);
@@ -496,8 +491,11 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "package"         L /*FSS*/ F(tk::_package_, hi::Meta);
 "private"         L /*FSS*/ F(tk::_private_, hi::Meta);
 "protected"       L /*FSS*/ F(tk::_protected_, hi::Meta);
+"__proto__"       L /*III*/ F(tk::___proto___, hi::Special);
 "prototype"       L /*III*/ F(tk::_prototype_, hi::Special);
 "public"          L /*FSS*/ F(tk::_public_, hi::Meta);
+"__restrict"      L /*III*/ F(tk::___restrict_, hi::Meta);
+"restrict"        L /*III*/ F(tk::_restrict_, hi::Meta);
 "return"          L /*KKK*/ F(tk::_return_, hi::Control);
 "set"             L /*III*/ F(tk::_set_, hi::Meta);
 "short"           L /*FII*/ F(tk::_short_, hi::Type);
@@ -520,13 +518,13 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "with"            L /*KKK*/ F(tk::_with_, hi::Control);
 "yield"           L /*IS?*/ F(tk::_yield_, hi::Control);
 
-"auto"            L F(tk::_auto_, hi::Meta);
 "each"            L F(tk::_each_, hi::Control);
 "of"              L F(tk::_of_, hi::Operator);
 
 @begin C
 "extern"          L F(tk::_extern_, hi::Type);
 "signed"          L F(tk::_signed_, hi::Type);
+"struct"          L F(tk::_struct_, hi::Meta);
 "typedef"         L F(tk::_typedef_, hi::Meta);
 "unsigned"        L F(tk::_unsigned_, hi::Type);
 @end