]> git.saurik.com Git - cycript.git/commitdiff
Fix support for multiple "block lambda" arguments.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 6 Dec 2015 22:27:43 +0000 (14:27 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 6 Dec 2015 22:27:43 +0000 (14:27 -0800)
Parser.ypp.in
Replace.cpp
Syntax.hpp

index 2a00d69ea19d4039875df99d337ed7d889e47b57..fe1c5f353ded4ab64d8c1e09f2749aa5c92a9686 100644 (file)
@@ -1062,7 +1062,7 @@ UnaryExpression_
     ;
 
 UnaryExpression
-    : PostfixExpression { $$ = $1; }
+    : %prec "" PostfixExpression { $$ = $1; }
     | LexSetRegExp UnaryExpression_ { $$ = $2; }
     ;
 /* }}} */
@@ -2352,7 +2352,7 @@ PrimaryExpression
     ;
 
 PostfixExpression
-    : LeftHandSideExpression RubyProcExpression { $$ = CYNew CYRubyBlock($1, $2); }
+    : PostfixExpression RubyProcExpression { $$ = CYNew CYRubyBlock($1, $2); }
     ;
 /* }}} */
 
index 54e931ea7307166a197c33f424505b106aa8ae62..2ac69422c4904914191a99c809d1f1d600f8596d 100644 (file)
@@ -738,6 +738,10 @@ CYExpression *CYRubyBlock::Replace(CYContext &context) {
     return call_->AddArgument(context, proc_->Replace(context));
 }
 
+CYExpression *CYRubyBlock::AddArgument(CYContext &context, CYExpression *value) {
+    return Replace(context)->AddArgument(context, value);
+}
+
 CYExpression *CYRubyProc::Replace(CYContext &context) {
     CYFunctionExpression *function($ CYFunctionExpression(NULL, parameters_, code_));
     function = CYNonLocalize(context, function);
index a70e4a31ad7f7520c9a7b766cf8205b809b188fa..82b1392dd6bad5b45efa82802f497220d98cacf0 100644 (file)
@@ -1420,6 +1420,8 @@ struct CYRubyBlock :
 
     virtual CYExpression *Replace(CYContext &context);
     virtual void Output(CYOutput &out, CYFlags flags) const;
+
+    virtual CYExpression *AddArgument(CYContext &context, CYExpression *value);
 };
 
 struct CYIf :