]> git.saurik.com Git - cycript.git/commitdiff
Add lexer-level brace hack back for => {} syntax.
authorJay Freeman (saurik) <saurik@saurik.com>
Thu, 7 Jun 2012 03:52:40 +0000 (20:52 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 7 Jun 2012 03:52:40 +0000 (20:52 -0700)
Cycript.l.in
Cycript.yy.in
Parser.cpp
Parser.hpp

index f5e762c10de7bc5a9cd454c97a8db4d93b86e1f5..a599ed9f5bbba3ff7abc6ce2ba18d26c586a775c 100644 (file)
@@ -30,6 +30,7 @@ typedef cy::parser::token tk;
 
 #define F(value) do { \
     int token(value); \
 
 #define F(value) do { \
     int token(value); \
+    yyextra->nobrace_ = false; \
     return token; \
 } while (false)
 
     return token; \
 } while (false)
 
@@ -238,7 +239,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 "("    L C F(tk::OpenParen);
 ")"    L C F(tk::CloseParen);
 
 "("    L C F(tk::OpenParen);
 ")"    L C F(tk::CloseParen);
 
-"{"    L C F(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);
 "}"    L C F(tk::CloseBrace);
 
 "["    L C F(tk::OpenBracket);
index aeb15cd1579f23397290b1a078c0855d4a1155e4..241d93f00aa8dc26bd04dae10913ce64791baa85 100644 (file)
@@ -524,7 +524,7 @@ LexSetRegExp
     ;
 
 LexNoBrace
     ;
 
 LexNoBrace
-    : { if (yychar == token::OpenBrace || yychar == token::OpenBrace_) yychar = token::OpenBrace__; }
+    : { if (yychar == yyempty_) driver.nobrace_ = true; else if (yychar == token::OpenBrace || yychar == token::OpenBrace_) yychar = token::OpenBrace__; }
     ;
 
 LexNoFunction
     ;
 
 LexNoFunction
index fae6bf373dfb5c2006213a127d3c1c3e93db4b48..b53aee117c158a81aeaddf907001ae0b25cc4028 100644 (file)
@@ -28,6 +28,7 @@ CYRange WordEndRange_  (0x3ff001000000000LLU, 0x7fffffe87fffffeLLU); // A-Za-z_$
 
 CYDriver::CYDriver(const std::string &filename) :
     state_(CYClear),
 
 CYDriver::CYDriver(const std::string &filename) :
     state_(CYClear),
+    nobrace_(false),
     data_(NULL),
     size_(0),
     file_(NULL),
     data_(NULL),
     size_(0),
     file_(NULL),
index 53320a3c96c145f0b012618c43b0cb9012405d8e..9364826d9e51e24c52775c0ca45c1d4f0f91f082 100644 (file)
@@ -451,6 +451,7 @@ class CYDriver {
     void *scanner_;
 
     CYState state_;
     void *scanner_;
 
     CYState state_;
+    bool nobrace_;
     std::stack<bool> in_;
 
     const char *data_;
     std::stack<bool> in_;
 
     const char *data_;