]> git.saurik.com Git - cycript.git/blobdiff - Cycript.l.in
Port build environment to automake (break -arch).
[cycript.git] / Cycript.l.in
index a3aed14629a909716eb0f9589ee7a9b89cbf3e4c..ea140a851728949901fa63ddfc8960e1fce01f67 100644 (file)
@@ -33,7 +33,9 @@ typedef cy::parser::token tk;
 // do /not/ fold token to the return: this is a macro and the ordering is dependent
 #define F(value, highlight) do { \
     int token(value); \
+@begin ObjectiveC
     yyextra->no_.AtImplementation = false; \
+@end
     yyextra->no_.Function = false; \
     yyextra->no_.OpenBrace = false; \
     yylval->highlight_ = highlight; \
@@ -83,6 +85,12 @@ typedef cy::parser::token tk;
     yylloc->columns(yyleng); \
 }
 
+#define M { \
+    if (yyextra->commented_) { \
+        I(comment, Comment(Y), tk::Comment, hi::Comment); \
+    } \
+}
+
 int H(char c) {
     if (c >= '0' && c <= '9')
         return c - '0';
@@ -147,12 +155,12 @@ XMLName {XMLNameStart}{XMLNamePart}*
 
 <RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} L C I(literal, RegEx(Y), tk::RegularExpressionLiteral, hi::Constant);
 
-\/\/[^\n]* L
+\/\/[^\n]* L M
 
        /* http://ostermiller.org/findcomment.html */
        /* XXX: unify these two rules using !? */
 \/\*!([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V() C I(comment, Comment(Y), tk::Comment, hi::Comment);
-\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N)
+\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N) M
 
 @begin E4X
 <RegExp>"<>"      L F(tk::LeftRight, hi::Structure);
@@ -248,17 +256,24 @@ XMLName {XMLNameStart}{XMLNamePart}*
 @end
 
 @begin ObjectiveC
+"@encode"         L C F(tk::AtEncode, hi::Meta);
 "@end"            L C F(tk::AtEnd, hi::Meta);
 "@implementation" L C F(yyextra->no_.AtImplementation ? tk::AtImplementation_ : tk::AtImplementation, hi::Meta);
 "@import"         L C F(tk::AtImport, hi::Meta);
 "@selector"       L C F(tk::AtSelector, hi::Meta);
 
-"NULL"             L C I(identifier, Identifier("NULL"), tk::Identifier_, hi::Constant);
-"nil"             L C I(identifier, Identifier("nil"), tk::Identifier_, hi::Constant);
-"YES"             L C I(identifier, Identifier("YES"), tk::Identifier_, hi::Constant);
-"NO"             L C I(identifier, Identifier("NO"), tk::Identifier_, hi::Constant);
+"NULL"         L C I(identifier, Identifier("NULL"), tk::Identifier_, hi::Constant);
+"nil"          L C I(identifier, Identifier("nil"), tk::Identifier_, hi::Constant);
+"YES"          L C I(identifier, Identifier("YES"), tk::Identifier_, hi::Constant);
+"NO"           L C I(identifier, Identifier("NO"), tk::Identifier_, hi::Constant);
+
+"bool"         L C I(identifier, Identifier("bool"), tk::Identifier_, hi::Type);
+"BOOL"         L C I(identifier, Identifier("BOOL"), tk::Identifier_, hi::Type);
+"id"           L C I(identifier, Identifier("id"), tk::Identifier_, hi::Type);
 @end
 
+"undefined"    L C I(identifier, Identifier("undefined"), tk::Identifier_, hi::Operator);
+
 "false"        L C I(false, False(), tk::False, hi::Constant);
 "null"         L C I(null, Null(), tk::Null, hi::Constant);
 "true"         L C I(true, True(), tk::True, hi::Constant);