X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/561e7f1c23ea3804db1625ab806be939b4e9c5d1..56e02e5b879e679302c8d9a20654b8a193791a3a:/Cycript.yy.in diff --git a/Cycript.yy.in b/Cycript.yy.in index 90588f7..d049537 100644 --- a/Cycript.yy.in +++ b/Cycript.yy.in @@ -82,7 +82,8 @@ typedef struct { CYThis *this_; CYTrue *true_; CYTypeModifier *type_; - CYTypedIdentifier *typed_; + CYTypedIdentifier *typedIdentifier_; + CYTypedParameter *typedParameter_; CYWord *word_; @begin ObjectiveC @@ -479,7 +480,8 @@ int cylex(YYSTYPE *, cy::location *, void *); %type MessageParameterListOpt %type MessageScope %type ModifiedType -%type PrefixedType +%type PrefixedType +%type QualifiedType %type SelectorCall_ %type SelectorCall %type SelectorExpression_ @@ -487,9 +489,12 @@ int cylex(YYSTYPE *, cy::location *, void *); %type SelectorExpressionOpt %type SelectorList %type SelectorWordOpt -%type SuffixedType +%type SuffixedType %type TypeOpt -%type TypedIdentifier +%type TypedIdentifier +%type TypedParameterList_ +%type TypedParameterList +%type TypedParameterListOpt %type VariadicCall @end @@ -1342,7 +1347,7 @@ ProgramBodyOpt /* Cycript (Objective-C): Type Encoding {{{ */ SuffixedType : IdentifierOpt { $$ = CYNew CYTypedIdentifier($1); } - | "(" PrefixedType ")" { $$ = $2; } + | "(" LexPushInOff PrefixedType LexPopIn ")" { $$ = $3; } | SuffixedType "[" NumericLiteral "]" { CYSetLast($1->type_) = CYNew CYTypeArrayOf($3->Value()); $$ = $1; } ; @@ -1352,13 +1357,19 @@ PrefixedType | "*" PrefixedType { CYSetLast($2->type_) = CYNew CYTypePointerTo(); $$ = $2; } ; -ModifiedType +QualifiedType : Variable { $$ = CYNew CYTypeVariable($1); } - | "const" ModifiedType { $$ = CYNew CYTypeConstant($2); } + | "const" QualifiedType { $$ = CYNew CYTypeConstant($2); } + ; + +ModifiedType + : QualifiedType { $$ = $1; } + | QualifiedType "*" { $$ = CYNew CYTypePointerTo($1); } + | QualifiedType "const" { $$ = CYNew CYTypeConstant($1); } ; TypedIdentifier - : ModifiedType PrefixedType { CYSetLast($2->type_) = $1; $$ = $2;} + : QualifiedType PrefixedType { CYSetLast($2->type_) = $1; $$ = $2;} ; EncodedType @@ -1391,7 +1402,7 @@ MessageScope ; TypeOpt - : "(" EncodedType ")" { $$ = $2; } + : "(" LexSetRegExp EncodedType ")" { $$ = $3; } | "(" LexSetRegExp "void" ")" { $$ = CYNew CYString("v"); } | { $$ = NULL; } ; @@ -1555,6 +1566,25 @@ PrimaryExpression : "@" BoxableExpression { $$ = CYNew CYBox($2); } ; /* }}} */ +/* Cycript (Objective-C): Block Expressions {{{ */ +TypedParameterList_ + : "," TypedParameterList { $$ = $2; } + | { $$ = NULL; } + ; + +TypedParameterList + : TypedIdentifier TypedParameterList_ { $$ = CYNew CYTypedParameter($1, $2); } + ; + +TypedParameterListOpt + : TypedParameterList { $$ = $1; } + | { $$ = NULL; } + ; + +PrimaryExpression + : "^" ModifiedType "(" LexPushInOff TypedParameterListOpt LexPopIn ")" BRACE LexPushInOff FunctionBody LexPopIn "}" { $$ = CYNew CYObjCBlock($2, $5, $10); } + ; +/* }}} */ @end @begin C