CYProperty *property_;
CYPropertyName *propertyName_;
CYRubyProc *rubyProc_;
- CYTypeSpecifier *specifier_;
CYStatement *statement_;
CYString *string_;
CYThis *this_;
CYTrue *true_;
CYWord *word_;
+@begin C
+ CYTypeModifier *modifier_;
+ CYTypeSpecifier *specifier_;
+ CYTypedIdentifier *typedIdentifier_;
+ CYTypedParameter *typedParameter_;
+@end
+
@begin ObjectiveC
CYClassName *className_;
CYField *field_;
CYMessageParameter *messageParameter_;
CYProtocol *protocol_;
CYSelectorPart *selector_;
- CYTypeModifier *modifier_;
- CYTypedIdentifier *typedIdentifier_;
- CYTypedParameter *typedParameter_;
@end
@begin E4X
%type <member_> MemberAccess
%type <expression_> MemberExpression_
%type <expression_> MemberExpression
+%type <module_> Module
%type <expression_> MultiplicativeExpression
%type <expression_> NewExpression
%type <null_> NullLiteral
%type <word_> WordOpt
%type <expression_> Variable
-@begin ObjectiveC
+@begin C
%type <typedIdentifier_> ArrayedType
+%type <expression_> EncodedType
+%type <modifier_> FunctionedType
+%type <specifier_> IntegerType
+%type <specifier_> IntegerTypeOpt
+%type <typedIdentifier_> PrefixedType
+%type <specifier_> PrimitiveType
+%type <typedIdentifier_> TypeParenthetical
+%type <typedIdentifier_> TypeSignifier
+%type <typedIdentifier_> SuffixedType
+%type <modifier_> TypeQualifierLeft
+%type <typedIdentifier_> TypeQualifierRight
+%type <typedIdentifier_> TypedIdentifier
+%type <typedParameter_> TypedParameterList_
+%type <typedParameter_> TypedParameterList
+%type <typedParameter_> TypedParameterListOpt
+@end
+
+@begin ObjectiveC
%type <expression_> BoxableExpression
%type <statement_> CategoryStatement
%type <expression_> ClassExpression
%type <protocol_> ClassProtocolListOpt
%type <protocol_> ClassProtocols
%type <protocol_> ClassProtocolsOpt
-%type <expression_> EncodedType
-%type <modifier_> FunctionedType
-%type <specifier_> IntegerType
-%type <specifier_> IntegerTypeOpt
%type <expression_> MessageExpression
%type <messageParameter_> MessageParameter
%type <messageParameter_> MessageParameters
%type <messageParameter_> MessageParameterListOpt
%type <bool_> MessageScope
%type <typedIdentifier_> ModifiedType
-%type <module_> Module
-%type <typedIdentifier_> PrefixedType
-%type <specifier_> PrimitiveType
%type <argument_> SelectorCall_
%type <argument_> SelectorCall
%type <selector_> SelectorExpression_
%type <selector_> SelectorExpressionOpt
%type <argument_> SelectorList
%type <word_> SelectorWordOpt
-%type <typedIdentifier_> SuffixedType
%type <expression_> TypeOpt
-%type <typedIdentifier_> TypeParenthetical
-%type <modifier_> TypeQualifierLeft
-%type <typedIdentifier_> TypeQualifierRight
-%type <typedIdentifier_> TypeSignifier
-%type <typedIdentifier_> TypedIdentifier
-%type <typedParameter_> TypedParameterList_
-%type <typedParameter_> TypedParameterList
-%type <typedParameter_> TypedParameterListOpt
%type <argument_> VariadicCall
@end
| "typedef" { $$ = $1; }
| "unsigned" { $$ = $1; }
| "signed" { $$ = $1; }
+@end
+@begin ObjectiveC
| "YES" { $$ = $1; }
| "NO" { $$ = $1; }
@end
/* 11.14 Comma Operator {{{ */
Expression_
: "," Expression { $$ = $2; }
- | { $$ = CYNew CYCompound(); }
+ | { $$ = NULL; }
;
Expression
- : AssignmentExpression Expression_ { $2->AddPrev($1); $$ = $2; }
+ : AssignmentExpression Expression_ { $$ = CYNew CYCompound($1, $2); }
;
ExpressionOpt
;
/* }}} */
-@begin ObjectiveC
-/* Cycript (Objective-C): Type Encoding {{{ */
+@begin C
+/* Cycript (C): Type Encoding {{{ */
TypeParenthetical
: "(" LexPushInOff PrefixedType ")" LexPopIn { $$ = $3; }
;
IntegerTypeOpt
: IntegerType { $$ = $1; }
- |
+ | { $$ = CYNew CYTypeVariable("int"); }
;
PrimitiveType
;
PrimaryExpression
- : AtEncode "(" EncodedType ")" { $$ = $3; }
+ : "@encode" "(" EncodedType ")" { $$ = $3; }
;
/* }}} */
+@end
+
+@begin ObjectiveC
/* Cycript (Objective-C): @class Declaration {{{ */
ClassSuperOpt
/* XXX: why the hell did I choose MemberExpression? */
;
ClassFieldListOpt
- : Expression Identifier ";" ClassFieldListOpt { $$ = CYNew CYField($1, $2, $4); }
+ : TypedIdentifier ";" ClassFieldListOpt { $$ = CYNew CYField($1, $3); }
| LexSetRegExp { $$ = NULL; }
;
| "@selector" "(" LexPushInOff SelectorExpression ")" LexPopIn { $$ = CYNew CYSelector($4); }
;
/* }}} */
-/* Cycript (Objective-C): @import Directive {{{ */
+@end
+
+/* Cycript: @import Directive {{{ */
Module
: Module "." Word { $$ = CYNew CYModule($3, $1); }
| Word { $$ = CYNew CYModule($1); }
: "@import" Module { $$ = CYNew CYImport($2); }
;
/* }}} */
+
+@begin ObjectiveC
/* Cycript (Objective-C): Boxed Expressions {{{ */
BoxableExpression
: NullLiteral { $$ = $1; }