/* 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 {{{ */
#define F(value) do { \
int token(value); \
- yyextra->statement_ = false; \
+ yyextra->nobrace_ = false; \
return token; \
} while (false)
#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) \
%%
-<RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} E
+<RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} L C I(literal, RegEx(Y), tk::RegularExpressionLiteral);
\/\/[^\n]* L
"=" 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);
"(" 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);
@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
"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);
"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);