X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/a8ef4d3eae5d941d3e63424d97847ee995eccdde..1c3dd2c343420160ec2ce76357532f1bf93a5bda:/Cycript.l.in?ds=sidebyside diff --git a/Cycript.l.in b/Cycript.l.in index 17f0013..58ed9fd 100644 --- a/Cycript.l.in +++ b/Cycript.l.in @@ -30,12 +30,14 @@ 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); \ yyextra->no_.AtImplementation = false; \ yyextra->no_.Function = false; \ yyextra->no_.OpenBrace = false; \ yylval->highlight_ = highlight; \ - return value; \ + return token; \ } while (false) #define A new($pool) @@ -81,6 +83,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 +153,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); @@ -250,9 +258,15 @@ XMLName {XMLNameStart}{XMLNamePart}* "@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); @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);