X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/a8ef4d3eae5d941d3e63424d97847ee995eccdde..413251da5de4da59f158f65a75d668a67f4161f1:/Cycript.l.in diff --git a/Cycript.l.in b/Cycript.l.in index 17f0013..ea140a8 100644 --- a/Cycript.l.in +++ b/Cycript.l.in @@ -30,12 +30,16 @@ typedef cy::parser::token tk; #define YY_EXTRA_TYPE CYDriver * +// 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; \ - return value; \ + return token; \ } while (false) #define A new($pool) @@ -81,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'; @@ -145,12 +155,12 @@ XMLName {XMLNameStart}{XMLNamePart}* \/{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 "<>" L F(tk::LeftRight, hi::Structure); @@ -246,13 +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); -"nil" L C I(identifier, Identifier("nil"), 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);