]> git.saurik.com Git - cycript.git/commitdiff
Drop support for ObjC @implementation expressions.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 30 Nov 2015 21:27:16 +0000 (13:27 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 30 Nov 2015 21:27:16 +0000 (13:27 -0800)
Cycript.l.in
Cycript.yy.in
Driver.hpp
Execute.cpp
ObjectiveC/Output.cpp
ObjectiveC/Replace.cpp
ObjectiveC/Syntax.hpp

index ec251b601c26b2f2b8542ef01f518c6f6d02d034..38a9459deb1d8f2bba31c734c201b90f8eb70266 100644 (file)
@@ -46,9 +46,6 @@ typedef cy::parser::token tk;
 // do /not/ fold token to the return: this is a macro and the ordering is dependent
 #define F(value, highlight) do { \
     int token(value); \
-@begin ObjectiveC
-    yyextra->no_.AtImplementation = false; \
-@end
     yyextra->no_.Class = false; \
     yyextra->no_.Function = false; \
     yyextra->no_.NewLine = false; \
@@ -412,7 +409,7 @@ XMLName {XMLNameStart}{XMLNamePart}*
 @begin ObjectiveC
 "@end"            L C F(tk::At_end_, hi::Meta);
 "@false"          L C F(tk::At_false_, hi::Constant);
-"@implementation" L C F(yyextra->no_.AtImplementation ? tk::At_implementation__ : tk::At_implementation_, hi::Meta);
+"@implementation" L C F(tk::At_implementation_, hi::Meta);
 "@import"         L C F(tk::At_import_, hi::Special);
 "@NO"             L C F(tk::At_NO_, hi::Constant);
 "@null"           L C F(tk::At_null_, hi::Constant);
index 908d4ca077a43645eb933026233b79eba0b2be00..289283e52c581730e3ae75aeb0905ba52db5f121 100644 (file)
@@ -254,7 +254,6 @@ _finline int yylex(cy::parser::semantic_type *semantic, CYLocation *location, vo
 
 @begin ObjectiveC
 %token At_implementation_ "@implementation"
-%token At_implementation__ ";@implementation"
 %token At_import_ "@import"
 %token At_end_ "@end"
 %token At_selector_ "@selector"
@@ -515,7 +514,6 @@ _finline int yylex(cy::parser::semantic_type *semantic, CYLocation *location, vo
 @begin ObjectiveC
 %type <expression_> BoxableExpression
 %type <statement_> CategoryStatement
-%type <expression_> ClassExpression
 %type <classField_> ClassFieldListOpt
 %type <classField_> ClassFields
 %type <statement_> ClassStatement
@@ -523,7 +521,6 @@ _finline int yylex(cy::parser::semantic_type *semantic, CYLocation *location, vo
 %type <message_> ClassMessageDeclaration
 %type <message_> ClassMessageDeclarationListOpt
 %type <className_> ClassName
-%type <className_> ClassNameOpt
 %type <protocol_> ClassProtocolListOpt
 %type <protocol_> ClassProtocols
 %type <protocol_> ClassProtocolsOpt
@@ -610,14 +607,8 @@ LexNoFunction
     : { if (yyla.empty()) driver.no_.Function = true; else if (yyla.type == yytranslate_(token::_function_)) yyla.type = yytranslate_(token::_function__); }
     ;
 
-LexNoAtImplementation :
-@begin ObjectiveC
-    { if (yyla.empty()) driver.no_.AtImplementation = true; else if (yyla.type == yytranslate_(token::At_implementation_)) yyla.type = yytranslate_(token::At_implementation__); }
-@end
-    ;
-
 LexSetStatement
-    : LexNoBrace LexNoClass LexNoFunction LexNoAtImplementation
+    : LexNoBrace LexNoClass LexNoFunction
     ;
 /* }}} */
 /* Virtual Tokens {{{ */
@@ -1562,11 +1553,6 @@ ClassName
     | "(" AssignmentExpression ")" { $$ = $2; }
     ;
 
-ClassNameOpt
-    : ClassName { $$ = $1; }
-    | { $$ = NULL; }
-    ;
-
 // XXX: this should be AssignmentExpressionNoRight
 ClassProtocols
     : ShiftExpression ClassProtocolsOpt { $$ = CYNew CYProtocol($1, $2); }
@@ -1582,12 +1568,8 @@ ClassProtocolListOpt
     | { $$ = NULL; }
     ;
 
-ClassExpression
-    : "@implementation" LexPushInOff ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt "@end" LexPopIn { $$ = CYNew CYClassExpression($3, $4, $5, $6, $7); }
-    ;
-
 ClassStatement
-    : ";@implementation" ClassName ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYClassStatement($2, $3, $4, $5, $6); }
+    : "@implementation" ClassName ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYClassStatement($2, $3, $4, $5, $6); }
     ;
 
 CategoryName
@@ -1595,11 +1577,7 @@ CategoryName
     ;
 
 CategoryStatement
-    : ";@implementation" ClassName CategoryName ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYCategory($2, $4); }
-    ;
-
-PrimaryExpression
-    : ClassExpression { $$ = $1; }
+    : "@implementation" ClassName CategoryName ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYCategory($2, $4); }
     ;
 
 Statement__
index 3f0a9600c6276029823ef842bd536205679f043f..634177aaeb3a7b4154bda9c33c57c96c434c91b7 100644 (file)
@@ -46,7 +46,6 @@ class _visible CYDriver {
     bool last_;
 
     struct {
-        bool AtImplementation;
         bool Class;
         bool Function;
         bool OpenBrace;
index 9f4535433acb4340d29087524c1cc3ba6ede9226..89a796a84841fddf1463b0eacf83ec2f37a7efcf 100644 (file)
@@ -358,14 +358,6 @@ static JSValueRef System_print(JSContextRef context, JSObjectRef object, JSObjec
     return CYJSUndefined(context);
 } CYCatch(NULL) }
 
-static size_t Nonce_(0);
-
-static JSValueRef $cyq(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
-    CYPool pool;
-    const char *name(pool.strcat(CYPoolCString(pool, context, arguments[0]), pool.itoa(Nonce_++), NULL));
-    return CYCastJSValue(context, name);
-} CYCatch(NULL) }
-
 static void (*JSSynchronousGarbageCollectForDebugging$)(JSContextRef);
 
 _visible void CYGarbageCollect(JSContextRef context) {
@@ -1927,8 +1919,6 @@ extern "C" void CYSetupContext(JSGlobalContextRef context) {
         CYSetPrototype(context, last, all);
     }
 
-    CYSetProperty(context, global, CYJSString("$cyq"), &$cyq, kJSPropertyAttributeDontEnum);
-
     JSObjectRef System(JSObjectMake(context, NULL, NULL));
     CYSetProperty(context, cy, CYJSString("System"), System);
 
index ee41e48c89221a616a5e8572821971c0340b4b6e..9d0caa052c210681a4bed647fa2b0186a294e1dc 100644 (file)
@@ -36,15 +36,12 @@ void CYCategory::Output(CYOutput &out, CYFlags flags) const {
     out << ';';
 }
 
-void CYClass::Output(CYOutput &out, CYFlags flags) const {
+void CYClassStatement::Output(CYOutput &out, CYFlags flags) const {
     // XXX: I don't necc. need the ()s
     out << "(function($cys,$cyp,$cyc,$cyn,$cyt,$cym){";
     out << "$cyp=object_getClass($cys);";
     out << "$cyc=objc_allocateClassPair($cys,";
-    if (name_ != NULL)
-        name_->ClassName(out, false);
-    else
-        out << "$cyq(\"CY$\")";
+    name_->ClassName(out, false);
     out << ",0);";
     out << "$cym=object_getClass($cyc);";
     if (fields_ != NULL)
@@ -66,14 +63,6 @@ void CYClass::Output(CYOutput &out, CYFlags flags) const {
     out << "))";
 }
 
-void CYClassExpression::Output(CYOutput &out, CYFlags flags) const {
-    CYClass::Output(out, flags);
-}
-
-void CYClassStatement::Output(CYOutput &out, CYFlags flags) const {
-    CYClass::Output(out, flags);
-}
-
 void CYClassField::Output(CYOutput &out) const {
 }
 
index 086287baab243c0a25878d2a78a656900d442aeb..1b71e02db0d18cb766dfcd2543ba9a3a86cee87f 100644 (file)
@@ -50,12 +50,12 @@ CYStatement *CYCategory::Replace(CYContext &context) {
     ), name_->ClassName(context, true)));
 }
 
-CYExpression *CYClass::Replace_(CYContext &context) {
+CYStatement *CYClassStatement::Replace(CYContext &context) {
     CYVariable *cyc($V("$cyc")), *cys($V("$cys"));
 
-    CYExpression *name(name_ != NULL ? name_->ClassName(context, false) : $C1($V("$cyq"), $S("CY$")));
+    CYExpression *name(name_->ClassName(context, false));
 
-    return $C1($F(NULL, $P6($L("$cys"), $L("$cyp"), $L("$cyc"), $L("$cyn"), $L("$cyt"), $L("$cym")), $$->*
+    return $E($C1($F(NULL, $P6($L("$cys"), $L("$cyp"), $L("$cyc"), $L("$cyn"), $L("$cyt"), $L("$cym")), $$->*
         $E($ CYAssign($V("$cyp"), $C1($V("object_getClass"), cys)))->*
         $E($ CYAssign(cyc, $C3($V("objc_allocateClassPair"), cys, name, $D(0))))->*
         $E($ CYAssign($V("$cym"), $C1($V("object_getClass"), cyc)))->*
@@ -64,15 +64,7 @@ CYExpression *CYClass::Replace_(CYContext &context) {
         messages_->Replace(context, false)->*
         $E($C1($V("objc_registerClassPair"), cyc))->*
         $ CYReturn(cyc)
-    ), super_ == NULL ? $ CYNull() : super_);
-}
-
-CYExpression *CYClassExpression::Replace(CYContext &context) {
-    return Replace_(context);
-}
-
-CYStatement *CYClassStatement::Replace(CYContext &context) {
-    return $E(Replace_(context));
+    ), super_ == NULL ? $ CYNull() : super_));
 }
 
 CYStatement *CYClassField::Replace(CYContext &context) const { $T(NULL)
index 0f3cc38ca498484c019f7000a8443ade36642416..d7a74cd76195f6c78702c8c086f5c7b642d789c0 100644 (file)
@@ -181,14 +181,16 @@ struct CYProtocol :
     void Output(CYOutput &out) const;
 };
 
-struct CYClass {
+struct CYClassStatement :
+    CYStatement
+{
     CYClassName *name_;
     CYExpression *super_;
     CYProtocol *protocols_;
     CYClassField *fields_;
     CYMessage *messages_;
 
-    CYClass(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
+    CYClassStatement(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
         name_(name),
         super_(super),
         protocols_(protocols),
@@ -197,37 +199,6 @@ struct CYClass {
     {
     }
 
-    virtual ~CYClass() {
-    }
-
-    CYExpression *Replace_(CYContext &context);
-    virtual void Output(CYOutput &out, CYFlags flags) const;
-};
-
-struct CYClassExpression :
-    CYClass,
-    CYExpression
-{
-    CYClassExpression(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
-        CYClass(name, super, protocols, fields, messages)
-    {
-    }
-
-    CYPrecedence(0)
-
-    virtual CYExpression *Replace(CYContext &context);
-    virtual void Output(CYOutput &out, CYFlags flags) const;
-};
-
-struct CYClassStatement :
-    CYClass,
-    CYStatement
-{
-    CYClassStatement(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
-        CYClass(name, super, protocols, fields, messages)
-    {
-    }
-
     CYCompact(None)
 
     virtual CYStatement *Replace(CYContext &context);