]> git.saurik.com Git - cycript.git/commitdiff
Add actual syntax that desugars to new Instance().
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 20 Jan 2014 16:53:24 +0000 (08:53 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 20 Jan 2014 16:53:46 +0000 (08:53 -0800)
Cycript.yy.in
ObjectiveC/Output.cpp
ObjectiveC/Replace.cpp
ObjectiveC/Syntax.hpp

index 57b1ac60d4d49a1976769f4e469b79682d2e7d64..5a35dd7624c5e34414952954bf9dd4feac5c6697 100644 (file)
@@ -1634,6 +1634,11 @@ PrimaryExpression
     : "^" ModifiedType "(" LexPushInOff TypedParameterListOpt ")" LexPopIn BRACE LexPushInOff FunctionBody "}" LexPopIn { $$ = CYNew CYObjCBlock($2, $5, $10); }
     ;
 /* }}} */
+/* Cycript (Objective-C): Instance Literals {{{ */
+PrimaryExpression
+    : "#" NumericLiteral { $$ = CYNew CYInstanceLiteral($2); }
+    ;
+/* }}} */
 @end
 
 @begin C
index 6fd2229abbe28b64f3bbbe296f4c1c681a8d0a42..d67971fa241dcefe81d8ab3235c3323a9ab40d02 100644 (file)
@@ -81,6 +81,11 @@ void CYImport::Output(CYOutput &out, CYFlags flags) const {
     out << "@import";
 }
 
+void CYInstanceLiteral::Output(CYOutput &out, CYFlags flags) const {
+    out << '#';
+    number_->Output(out, CYRight(flags));
+}
+
 void CYMessage::Output(CYOutput &out, bool replace) const {
     out << (instance_ ? '-' : '+');
 
index a2a4c114a5c7f43cc941dd07cecdf8cdb9bc4b55..ae3b20e9891ff7171a9eacd7c2403b8abb9773ae 100644 (file)
@@ -96,6 +96,10 @@ CYStatement *CYImport::Replace(CYContext &context) {
     return $ CYVar($L1($L(module_->part_->Word(), $C1($V("require"), module_->Replace(context, "/")))));
 }
 
+CYExpression *CYInstanceLiteral::Replace(CYContext &context) {
+    return $N1($V("Instance"), number_);
+}
+
 CYStatement *CYMessage::Replace(CYContext &context, bool replace) const { $T(NULL)
     CYVariable *cyn($V("$cyn"));
     CYVariable *cyt($V("$cyt"));
index 8fa10ee6687f0a3b61ae271fc6dbc8fb650c48a0..4c15344da5a4265c5889a51f370957d1ac1d5e0f 100644 (file)
 
 #include "Parser.hpp"
 
+struct CYInstanceLiteral :
+    CYExpression
+{
+    CYNumber *number_;
+
+    CYInstanceLiteral(CYNumber *number) :
+        number_(number)
+    {
+    }
+
+    CYPrecedence(1)
+
+    virtual CYExpression *Replace(CYContext &context);
+    virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
 struct CYObjCBlock :
     CYExpression
 {