]> git.saurik.com Git - cycript.git/blobdiff - Cycript.l.in
Peel away CYCompound layers to fix tab completion.
[cycript.git] / Cycript.l.in
index e109ca99a44be5704fd0f933c1c0097f1258ea31..1923a34b88f7269a57329cbe5fb75fffa8c9172c 100644 (file)
@@ -1,5 +1,5 @@
 /* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2010  Jay Freeman (saurik)
+ * Copyright (C) 2009-2012  Jay Freeman (saurik)
 */
 
 /* GNU Lesser General Public License, Version 3 {{{ */
@@ -30,7 +30,7 @@ typedef cy::parser::token tk;
 
 #define F(value) do { \
     int token(value); \
-    yyextra->statement_ = false; \
+    yyextra->nobrace_ = false; \
     return token; \
 } while (false)
 
@@ -46,8 +46,6 @@ typedef cy::parser::token tk;
 #define C T yyextra->state_ = CYClear;
 #define R T yyextra->state_ = CYRestricted;
 
-#define E L C I(literal, RegEx(Y), tk::RegularExpressionLiteral);
-
 #define N \
     if (yyextra->state_ != CYNewLine) { \
         if (yyextra->state_ != CYRestricted) \
@@ -147,7 +145,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 
 %%
 
-<RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} E
+<RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} L C I(literal, RegEx(Y), tk::RegularExpressionLiteral);
 
 \/\/[^\n]* L
 
@@ -197,6 +195,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "="    L C F(tk::Equal);
 "=="   L C F(tk::EqualEqual);
 "==="  L C F(tk::EqualEqualEqual);
+"=>"   L C F(tk::EqualRight);
 "!"    L C F(tk::Exclamation);
 "!="   L C F(tk::ExclamationEqual);
 "!=="  L C F(tk::ExclamationEqualEqual);
@@ -238,7 +237,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "("    L C F(tk::OpenParen);
 ")"    L C F(tk::CloseParen);
 
-"{"    L C F(yyextra->statement_ ? tk::OpenBrace__ : yylval->newline_ ? tk::OpenBrace_ : tk::OpenBrace);
+"{"    L C F(yyextra->nobrace_ ? tk::OpenBrace__ : yylval->newline_ ? tk::OpenBrace_ : tk::OpenBrace);
 "}"    L C F(tk::CloseBrace);
 
 "["    L C F(tk::OpenBracket);
@@ -250,7 +249,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 
 @begin ObjectiveC
 "@end"            L C F(tk::AtEnd);
-"@implementation" L C F(yyextra->statement_ ? tk::AtImplementation_ : tk::AtImplementation);
+"@implementation" L C F(tk::AtImplementation);
 "@import"         L C F(tk::AtImport);
 "@selector"       L C F(tk::AtSelector);
 @end
@@ -269,7 +268,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "else"         L C I(word, Word("else"), tk::Else);
 "finally"      L C I(word, Word("finally"), tk::Finally);
 "for"          L C I(word, Word("for"), tk::For);
-"function"     L C I(word, Word("function"), yyextra->statement_ ? tk::Function_ : tk::Function);
+"function"     L C I(word, Word("function"), tk::Function);
 "if"           L C I(word, Word("if"), tk::If);
 "in"           L C I(word, Word("in"), yyextra->in_.top() ? tk::In_ : tk::In);
 "instanceof"   L C I(word, Word("instanceof"), tk::InstanceOf);
@@ -325,6 +324,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "yield"        L C I(identifier, Identifier("yield"), tk::Yield);
 
 "each"         L C I(identifier, Identifier("each"), tk::Each);
+"of"           L C I(identifier, Identifier("of"), tk::Of);
 
 @begin E4X
 "namespace"    L C I(identifier, Identifier("namespace"), tk::Namespace);