From: Jay Freeman (saurik) Date: Sat, 19 Dec 2015 08:55:12 +0000 (-0800) Subject: Correct even more bugs in no line terminator code. X-Git-Tag: v0.9.590~177 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/a61a2713e0da8cffde645b2655df4bf7c04e32c5 Correct even more bugs in no line terminator code. --- diff --git a/Parser.ypp.in b/Parser.ypp.in index bd83a15..b5140d6 100644 --- a/Parser.ypp.in +++ b/Parser.ypp.in @@ -587,6 +587,8 @@ type; }) %type RegularExpressionSlash %type RelationalExpression %type ReturnStatement +%type RubyBlockExpression_ +%type RubyBlockExpression %type RubyProcExpression %type RubyProcParameterList_ %type RubyProcParameterList @@ -1155,13 +1157,13 @@ AccessExpression ; LeftHandSideExpression - : AccessExpression[pass] LexNewLineOrOpt { $$ = $pass; } + : RubyBlockExpression[pass] { $$ = $pass; } | IndirectExpression[pass] { $$ = $pass; } ; /* }}} */ /* 12.4 Postfix Expressions {{{ */ PostfixExpression - : AccessExpression[lhs] LexNewLineOrOpt { $$ = $lhs; } + : RubyBlockExpression[pass] { $$ = $pass; } | AccessExpression[lhs] LexNewLineOrOpt "++" { $$ = CYNew CYPostIncrement($lhs); } | AccessExpression[lhs] LexNewLineOrOpt "--" { $$ = CYNew CYPostDecrement($lhs); } ; @@ -1181,7 +1183,6 @@ UnaryExpression_ UnaryExpression : PostfixExpression[expression] { $$ = $expression; } - | PostfixExpression[expression] "\n" { $$ = $expression; } | UnaryExpression_[pass] { $$ = $pass; } ; /* }}} */ @@ -1550,7 +1551,7 @@ ForStatementInitializer ; ForInStatementInitializer - : LexLet LexOf AccessExpression[pass] LexNewLineOrOpt { $$ = $pass; } + : LexLet LexOf RubyBlockExpression[pass] { $$ = $pass; } | LexLet LexOf IndirectExpression[pass] { $$ = $pass; } | LexLet LexOf Var_ LexBind ForBinding[binding] { $$ = CYNew CYForVariable($binding); } | ForDeclaration[pass] { $$ = $pass; } @@ -2518,8 +2519,14 @@ PrimaryExpression : "{" RubyProcParameters[parameters] StatementListOpt[code] "}" { $$ = CYNew CYRubyProc($parameters, $code); } ; -PostfixExpression - : PostfixExpression[lhs] RubyProcExpression[rhs] LexNewLineOrOpt { $$ = CYNew CYRubyBlock($lhs, $rhs); } +RubyBlockExpression_ + : AccessExpression[pass] LexNewLineOrOpt { $$ = $pass; } + | RubyBlockExpression_[lhs] RubyProcExpression[rhs] LexNewLineOrOpt { $$ = CYNew CYRubyBlock($lhs, $rhs); } + ; + +RubyBlockExpression + : RubyBlockExpression_[pass] "\n" { $$ = $pass; } + | RubyBlockExpression_[pass] { $$ = $pass; } ; /* }}} */