]> git.saurik.com Git - cycript.git/blobdiff - Cycript.y.in
Accidentally let CYProtocol leak on non-Objective-C systems.
[cycript.git] / Cycript.y.in
index 79d277da4a7b96580f1fc94fab50cd41a45ddb92..3b7d21f982d3b4fb461a62d275cfd51f478811df 100644 (file)
@@ -67,6 +67,7 @@ typedef struct {
         CYBoolean *boolean_;
         CYClause *clause_;
         cy::Syntax::Catch *catch_;
+        CYComment *comment_;
         CYComprehension *comprehension_;
         CYCompound *compound_;
         CYDeclaration *declaration_;
@@ -98,6 +99,7 @@ typedef struct {
         CYField *field_;
         CYMessage *message_;
         CYMessageParameter *messageParameter_;
+        CYProtocol *protocol_;
         CYSelectorPart *selector_;
 @end
 
@@ -209,6 +211,8 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %token SemiColon ";"
 %token NewLine "\n"
 
+%token <comment_> Comment
+
 %token OpenParen "("
 %token CloseParen ")"
 
@@ -321,7 +325,6 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <literal_> ArrayLiteral
 %type <expression_> AssigneeExpression
 %type <expression_> AssigneeExpressionNoBF
-%type <expression_> AssigneeExpressionNoRE
 %type <expression_> AssignmentExpression
 %type <assignment_> AssignmentExpression_
 %type <expression_> AssignmentExpressionNoBF
@@ -341,7 +344,6 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <statement_> BreakStatement
 %type <expression_> CallExpression
 %type <expression_> CallExpressionNoBF
-%type <expression_> CallExpressionNoRE
 %type <clause_> CaseBlock
 %type <clause_> CaseClause
 %type <clause_> CaseClausesOpt
@@ -394,7 +396,6 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <statement_> LabelledStatement
 %type <expression_> LeftHandSideExpression
 %type <expression_> LeftHandSideExpressionNoBF
-%type <expression_> LeftHandSideExpressionNoRE
 //%type <statement_> LetStatement
 %type <literal_> Literal
 %type <literal_> LiteralNoRE
@@ -409,18 +410,15 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <expression_> MemberExpression
 %type <expression_> MemberExpression_
 %type <expression_> MemberExpressionNoBF
-%type <expression_> MemberExpressionNoRE
 %type <expression_> MultiplicativeExpression
 %type <expression_> MultiplicativeExpressionNoBF
 %type <expression_> NewExpression
 %type <expression_> NewExpression_
 %type <expression_> NewExpressionNoBF
-%type <expression_> NewExpressionNoRE
 %type <null_> NullLiteral
 %type <literal_> ObjectLiteral
 %type <expression_> PostfixExpression
 %type <expression_> PostfixExpressionNoBF
-%type <expression_> PostfixExpressionNoRE
 %type <expression_> PrimaryExpression
 %type <expression_> PrimaryExpressionNo
 %type <expression_> PrimaryExpressionNoBF
@@ -450,11 +448,9 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <statement_> SwitchStatement
 %type <statement_> ThrowStatement
 %type <statement_> TryStatement
-%type <expression_> UnaryAssigneeExpression
 %type <expression_> UnaryExpression
 %type <expression_> UnaryExpression_
 %type <expression_> UnaryExpressionNoBF
-%type <expression_> UnaryExpressionNoRE
 %type <declaration_> VariableDeclaration
 %type <declaration_> VariableDeclarationNoIn
 %type <declarations_> VariableDeclarationList
@@ -465,6 +461,17 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <statement_> WhileStatement
 %type <statement_> WithStatement
 
+@begin C
+%type <expression_> AssigneeExpressionNoRE
+%type <expression_> CallExpressionNoRE
+%type <expression_> LeftHandSideExpressionNoRE
+%type <expression_> MemberExpressionNoRE
+%type <expression_> NewExpressionNoRE
+%type <expression_> PostfixExpressionNoRE
+%type <expression_> UnaryAssigneeExpression
+%type <expression_> UnaryExpressionNoRE
+@end
+
 @begin ObjectiveC
 %type <statement_> CategoryStatement
 %type <expression_> ClassExpression
@@ -475,6 +482,9 @@ int cylex(YYSTYPE *lvalp, cy::location *llocp, void *scanner);
 %type <message_> ClassMessageDeclarationListOpt
 %type <className_> ClassName
 %type <className_> ClassNameOpt
+%type <protocol_> ClassProtocolListOpt
+%type <protocol_> ClassProtocols
+%type <protocol_> ClassProtocolsOpt
 %type <expression_> MessageExpression
 %type <messageParameter_> MessageParameter
 %type <messageParameter_> MessageParameters
@@ -789,12 +799,14 @@ MemberExpressionNoBF
     | MemberExpression_ { $$ = $1; }
     ;
 
+@begin C
 MemberExpressionNoRE
     : PrimaryExpressionNoRE { $$ = $1; }
     | FunctionExpression { $$ = $1; }
     | MemberExpressionNoRE MemberAccess { $2->SetLeft($1); $$ = $2; }
     | MemberExpression_ { $$ = $1; }
     ;
+@end
 
 NewExpression_
     : "new" NewExpression { $$ = new(driver.pool_) CYNew($2, NULL); }
@@ -810,10 +822,12 @@ NewExpressionNoBF
     | NewExpression_ { $$ = $1; }
     ;
 
+@begin C
 NewExpressionNoRE
     : MemberExpressionNoRE { $$ = $1; }
     | NewExpression_ { $$ = $1; }
     ;
+@end
 
 CallExpression
     : MemberExpression Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
@@ -827,11 +841,13 @@ CallExpressionNoBF
     | CallExpressionNoBF MemberAccess { $2->SetLeft($1); $$ = $2; }
     ;
 
+@begin C
 CallExpressionNoRE
     : MemberExpressionNoRE Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
     | CallExpressionNoRE Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
     | CallExpressionNoRE MemberAccess { $2->SetLeft($1); $$ = $2; }
     ;
+@end
 
 ArgumentList_
     : "," ArgumentList { $$ = $2; }
@@ -861,10 +877,12 @@ LeftHandSideExpressionNoBF
     | CallExpressionNoBF { $$ = $1; }
     ;
 
+@begin C
 LeftHandSideExpressionNoRE
     : NewExpressionNoRE { $$ = $1; }
     | CallExpressionNoRE { $$ = $1; }
     ;
+@end
 /* }}} */
 /* 11.3 Postfix Expressions {{{ */
 PostfixExpression
@@ -879,11 +897,13 @@ PostfixExpressionNoBF
     | LeftHandSideExpressionNoBF "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
     ;
 
+@begin C
 PostfixExpressionNoRE
     : AssigneeExpressionNoRE { $$ = $1; }
     | LeftHandSideExpressionNoRE "++" { $$ = new(driver.pool_) CYPostIncrement($1); }
     | LeftHandSideExpressionNoRE "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
     ;
+@end
 /* }}} */
 /* 11.4 Unary Operators {{{ */
 UnaryExpression_
@@ -910,10 +930,12 @@ UnaryExpressionNoBF
     | UnaryExpression_ { $$ = $1; }
     ;
 
+@begin C
 UnaryExpressionNoRE
     : PostfixExpressionNoRE { $$ = $1; }
     | UnaryExpression_ { $$ = $1; }
     ;
+@end
 /* }}} */
 /* 11.5 Multiplicative Operators {{{ */
 MultiplicativeExpression
@@ -1123,18 +1145,24 @@ AssignmentExpression_
 
 AssigneeExpression
     : LeftHandSideExpression { $$ = $1; }
+@begin C
     | LexSetRegExp UnaryAssigneeExpression { $$ = $2; }
+@end
     ;
 
 AssigneeExpressionNoBF
     : LeftHandSideExpressionNoBF { $$ = $1; }
+@begin C
     | UnaryAssigneeExpression { $$ = $1; }
+@end
     ;
 
+@begin C
 AssigneeExpressionNoRE
     : LeftHandSideExpressionNoRE { $$ = $1; }
     | UnaryAssigneeExpression { $$ = $1; }
     ;
+@end
 
 AssignmentExpression
     : ConditionalExpression { $$ = $1; }
@@ -1517,12 +1545,27 @@ ClassNameOpt
     | { $$ = NULL; }
     ;
 
+// XXX: this should be AssignmentExpressionNoRight
+ClassProtocols
+    : ShiftExpression ClassProtocolsOpt { $$ = new(driver.pool_) CYProtocol($1, $2); }
+    ;
+
+ClassProtocolsOpt
+    : "," ClassProtocols { $$ = $2; }
+    | { $$ = NULL; }
+    ;
+
+ClassProtocolListOpt
+    : "<" ClassProtocols ">" { $$ = $2; }
+    | { $$ = NULL; }
+    ;
+
 ClassExpression
-    : "@class" ClassNameOpt ClassSuperOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassExpression($2, $3, $4, $5); }
+    : "@class" ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassExpression($2, $3, $4, $5, $6); }
     ;
 
 ClassStatement
-    : "@class" ClassName ClassSuperOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassStatement($2, $3, $4, $5); }
+    : "@class" ClassName ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassStatement($2, $3, $4, $5, $6); }
     ;
 
 CategoryStatement
@@ -1601,6 +1644,12 @@ MemberAccess
 /* }}} */
 @end
 
+/* YUI: Documentation Comments {{{ */
+Statement_
+    : Comment { $$ = $1; }
+    ;
+/* }}} */
+
 @begin E4X
 /* Lexer State {{{ */
 LexPushRegExp