From c34648c04bd7eef35fba5ff65363330922def888 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Wed, 6 Jun 2012 20:52:40 -0700 Subject: [PATCH] Add lexer-level brace hack back for => {} syntax. --- Cycript.l.in | 3 ++- Cycript.yy.in | 2 +- Parser.cpp | 1 + Parser.hpp | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Cycript.l.in b/Cycript.l.in index f5e762c..a599ed9 100644 --- a/Cycript.l.in +++ b/Cycript.l.in @@ -30,6 +30,7 @@ typedef cy::parser::token tk; #define F(value) do { \ int token(value); \ + yyextra->nobrace_ = 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(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); diff --git a/Cycript.yy.in b/Cycript.yy.in index aeb15cd..241d93f 100644 --- a/Cycript.yy.in +++ b/Cycript.yy.in @@ -524,7 +524,7 @@ LexSetRegExp ; 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 diff --git a/Parser.cpp b/Parser.cpp index fae6bf3..b53aee1 100644 --- a/Parser.cpp +++ b/Parser.cpp @@ -28,6 +28,7 @@ CYRange WordEndRange_ (0x3ff001000000000LLU, 0x7fffffe87fffffeLLU); // A-Za-z_$ CYDriver::CYDriver(const std::string &filename) : state_(CYClear), + nobrace_(false), data_(NULL), size_(0), file_(NULL), diff --git a/Parser.hpp b/Parser.hpp index 53320a3..9364826 100644 --- a/Parser.hpp +++ b/Parser.hpp @@ -451,6 +451,7 @@ class CYDriver { void *scanner_; CYState state_; + bool nobrace_; std::stack in_; const char *data_; -- 2.50.0