]> git.saurik.com Git - cycript.git/commitdiff
Move message parameter name into typed identifier. v0.9.504
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 11 Nov 2015 09:50:03 +0000 (01:50 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Wed, 11 Nov 2015 09:50:03 +0000 (01:50 -0800)
Cycript.yy.in
ObjectiveC/Output.cpp
ObjectiveC/Replace.cpp
ObjectiveC/Syntax.hpp

index 9ae389c7f8a140360a517b3e08f00bc68a9d4b74..298d16f8454a7d9653d177e0e1a7e1d1cf2a9863 100644 (file)
@@ -1490,12 +1490,12 @@ MessageScope
     ;
 
 TypeOpt
-    : "(" LexSetRegExp TypedIdentifier ")" { $$ = $3; }
-    | { $$ = NULL; }
+    : "(" LexSetRegExp TypedIdentifier ")" { if ($3->identifier_ != NULL) error($3->location_, "unexpected identifier"); $$ = $3; }
+    | { $$ = CYNew CYTypedIdentifier(CYNew CYTypeVariable("id")); }
     ;
 
 MessageParameter
-    : Word ":" TypeOpt Identifier { $$ = CYNew CYMessageParameter($1, $3, $4); }
+    : Word ":" TypeOpt Identifier { $3->identifier_ = $4; $$ = CYNew CYMessageParameter($1, $3); }
     ;
 
 MessageParameterList
@@ -1509,7 +1509,7 @@ MessageParameterListOpt
 
 MessageParameters
     : MessageParameterList { $$ = $1; }
-    | Word { $$ = CYNew CYMessageParameter($1, NULL, NULL); }
+    | Word { $$ = CYNew CYMessageParameter($1, NULL); }
     ;
 
 ClassMessageDeclaration
index fa96e320963e5613e54fb77deed0d5f5897dbcbb..b9a9b6b6cf671639e7b1ebb69919245387dfc419 100644 (file)
@@ -88,8 +88,8 @@ void CYMessage::Output(CYOutput &out, bool replace) const {
     CYForEach (parameter, parameters_)
         if (parameter->tag_ != NULL) {
             out << ' ' << *parameter->tag_;
-            if (parameter->name_ != NULL)
-                out << ':' << *parameter->name_;
+            if (parameter->type_ != NULL)
+                out << ':' << *parameter->type_->identifier_;
         }
 
     out << code_;
index 62a28c5398c67a3883b033ff6c23acfa0f754826..15361f2260a09dda14e565ef8425227632ad9d34 100644 (file)
 #include <sstream>
 
 static CYExpression *MessageType(CYContext &context, CYTypedIdentifier *type, CYMessageParameter *next, CYExpression *extra = NULL) {
-    if (type == NULL)
-        return NULL;
-
     CYExpression *left($C0($M(type->Replace(context), $S("toString"))));
     if (extra != NULL)
         left = $ CYAdd(left, extra);
 
-    if (next == NULL || next->name_ == NULL)
+    if (next == NULL || next->type_ == NULL)
         return left;
 
     CYExpression *right(next->TypeSignature(context));
@@ -102,12 +99,10 @@ CYStatement *CYMessage::Replace(CYContext &context, bool replace) const { $T(NUL
     CYVariable *self($V("self"));
     CYVariable *_class($V(instance_ ? "$cys" : "$cyp"));
 
-    CYExpression *type(TypeSignature(context) ?: $C1($M(cyn, $S("type")), _class));
-
     return $ CYBlock($$->*
         next_->Replace(context, replace)->*
         $E($ CYAssign(cyn, parameters_->Selector(context)))->*
-        $E($ CYAssign(cyt, type))->*
+        $E($ CYAssign(cyt, TypeSignature(context)))->*
         $E($C4($V(replace ? "class_replaceMethod" : "class_addMethod"),
             $V(instance_ ? "$cyc" : "$cym"),
             cyn,
@@ -126,7 +121,7 @@ CYExpression *CYMessage::TypeSignature(CYContext &context) const {
 
 CYFunctionParameter *CYMessageParameter::Parameters(CYContext &context) const { $T(NULL)
     CYFunctionParameter *next(next_->Parameters(context));
-    return name_ == NULL ? next : $ CYFunctionParameter($ CYDeclaration(name_), next);
+    return type_ == NULL ? next : $ CYFunctionParameter($ CYDeclaration(type_->identifier_), next);
 }
 
 CYSelector *CYMessageParameter::Selector(CYContext &context) const {
@@ -135,7 +130,7 @@ CYSelector *CYMessageParameter::Selector(CYContext &context) const {
 
 CYSelectorPart *CYMessageParameter::SelectorPart(CYContext &context) const { $T(NULL)
     CYSelectorPart *next(next_->SelectorPart(context));
-    return tag_ == NULL ? next : $ CYSelectorPart(tag_, name_ != NULL, next);
+    return tag_ == NULL ? next : $ CYSelectorPart(tag_, type_ != NULL, next);
 }
 
 CYExpression *CYMessageParameter::TypeSignature(CYContext &context) const {
index fe9778283b1641387b332676d3588d398315c05e..4cee64f87fa6b2641d20ed83be9dd6bcb7127a57 100644 (file)
@@ -130,12 +130,10 @@ struct CYMessageParameter :
 {
     CYWord *tag_;
     CYTypedIdentifier *type_;
-    CYIdentifier *name_;
 
-    CYMessageParameter(CYWord *tag, CYTypedIdentifier *type, CYIdentifier *name) :
+    CYMessageParameter(CYWord *tag, CYTypedIdentifier *type) :
         tag_(tag),
-        type_(type),
-        name_(name)
+        type_(type)
     {
     }