]> git.saurik.com Git - cycript.git/blobdiff - Cycript.yy.in
Do not check against classes that are not instanced.
[cycript.git] / Cycript.yy.in
index b40c34868277dd96382fc2cc4640d5afddaf4057..9c05469a3445eebc81fdba7f69e07e55e6934266 100644 (file)
@@ -437,8 +437,10 @@ int cylex(YYSTYPE *, cy::location *, void *);
 %type <infix_> RelationalExpressionNoIn_
 %type <statement_> ReturnStatement
 %type <rubyProc_> RubyProcExpression
+%type <rubyProc_> RubyProcExpressionNoOA
 %type <functionParameter_> RubyProcParameterList
 %type <functionParameter_> RubyProcParameterList_
+%type <functionParameter_> RubyProcParameters
 %type <functionParameter_> RubyProcParametersOpt
 %type <expression_> ShiftExpression
 %type <expression_> ShiftExpressionNoBF
@@ -639,6 +641,13 @@ Word
     | "while" { $$ = $1; }
     | "with" { $$ = $1; }
     ;
+
+PrimaryExpressionNo
+    : "@" LiteralNoRE { $$ = CYNew CYBox($2); }
+    | "@" ArrayLiteral { $$ = CYNew CYBox($2); }
+    | "@" ObjectLiteral { $$ = CYNew CYBox($2); }
+    | "@" "(" Expression ")" { $$ = CYNew CYBox($3); }
+    ;
 @end
 
 Identifier
@@ -685,7 +694,6 @@ LiteralNoRE
     | BooleanLiteral { $$ = $1; }
     | NumericLiteral { $$ = $1; }
     | StringLiteral { $$ = $1; }
-    | "@" StringLiteral { $$ = $2; }
     ;
 
 LiteralRE
@@ -1592,7 +1600,7 @@ ClassStatement
     ;
 
 CategoryName
-    : "(" Word ")"
+    : "(" WordOpt ")"
     ;
 
 CategoryStatement
@@ -1937,8 +1945,13 @@ RubyProcParameterList
     | { $$ = NULL; }
     ;
 
-RubyProcParametersOpt
+RubyProcParameters
     : "|" RubyProcParameterList "|" { $$ = $2; }
+    | "||" { $$ = NULL; }
+    ;
+
+RubyProcParametersOpt
+    : RubyProcParameters
     | { $$ = NULL; }
     ;
 
@@ -1946,6 +1959,14 @@ RubyProcExpression
     : "{" RubyProcParametersOpt StatementListOpt "}" { $$ = CYNew CYRubyProc($2, $3); }
     ;
 
+RubyProcExpressionNoOA
+    : "{" RubyProcParameters StatementListOpt "}" { $$ = CYNew CYRubyProc($2, $3); }
+    ;
+
+PrimaryExpressionNo
+    : RubyProcExpressionNoOA { $$ = $1; }
+    ;
+
 LeftHandSideExpression
     : LeftHandSideExpression RubyProcExpression { $$ = CYNew CYRubyBlock($1, $2); }
     ;