]> git.saurik.com Git - cycript.git/blobdiff - Parser.hpp
Split CYLast into CYSetLast (eol) and CYGetLast.
[cycript.git] / Parser.hpp
index 53320a3c96c145f0b012618c43b0cb9012405d8e..c26e6d298fb8d61815feeb9d8a214656651f6c89 100644 (file)
@@ -1,5 +1,5 @@
 /* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2010  Jay Freeman (saurik)
+ * Copyright (C) 2009-2012  Jay Freeman (saurik)
 */
 
 /* GNU Lesser General Public License, Version 3 {{{ */
@@ -430,7 +430,7 @@ struct CYBlock :
     }
 
     void AddPrev(CYStatement *statement) {
-        CYSetLast(statement, statements_);
+        CYSetLast(statement) = statements_;
         statements_ = statement;
     }
 
@@ -451,6 +451,7 @@ class CYDriver {
     void *scanner_;
 
     CYState state_;
+    bool nobrace_;
     std::stack<bool> in_;
 
     const char *data_;
@@ -618,7 +619,7 @@ struct CYCompound :
     }
 
     void AddPrev(CYExpression *expression) {
-        CYSetLast(expression, expressions_);
+        CYSetLast(expression) = expressions_;
         expressions_ = expression;
     }
 
@@ -626,6 +627,8 @@ struct CYCompound :
 
     virtual CYExpression *Replace(CYContext &context);
     void Output(CYOutput &out, CYFlags flags) const;
+
+    virtual CYExpression *Primitive(CYContext &context);
 };
 
 struct CYDeclaration;
@@ -650,6 +653,11 @@ struct CYComprehension :
     CYNext<CYComprehension>,
     CYThing
 {
+    CYComprehension(CYComprehension *next = NULL) :
+        CYNext<CYComprehension>(next)
+    {
+    }
+
     virtual const char *Name() const = 0;
 
     virtual CYFunctionParameter *Parameter(CYContext &context) const = 0;
@@ -664,7 +672,8 @@ struct CYForInComprehension :
     CYIdentifier *name_;
     CYExpression *set_;
 
-    CYForInComprehension(CYIdentifier *name, CYExpression *set) :
+    CYForInComprehension(CYIdentifier *name, CYExpression *set, CYComprehension *next = NULL) :
+        CYComprehension(next),
         name_(name),
         set_(set)
     {
@@ -679,13 +688,14 @@ struct CYForInComprehension :
     virtual void Output(CYOutput &out) const;
 };
 
-struct CYForEachInComprehension :
+struct CYForOfComprehension :
     CYComprehension
 {
     CYIdentifier *name_;
     CYExpression *set_;
 
-    CYForEachInComprehension(CYIdentifier *name, CYExpression *set) :
+    CYForOfComprehension(CYIdentifier *name, CYExpression *set, CYComprehension *next = NULL) :
+        CYComprehension(next),
         name_(name),
         set_(set)
     {
@@ -1267,14 +1277,14 @@ struct CYForIn :
     virtual void Output(CYOutput &out, CYFlags flags) const;
 };
 
-struct CYForEachIn :
+struct CYForOf :
     CYStatement
 {
     CYForInInitialiser *initialiser_;
     CYExpression *set_;
     CYStatement *code_;
 
-    CYForEachIn(CYForInInitialiser *initialiser, CYExpression *set, CYStatement *code) :
+    CYForOf(CYForInInitialiser *initialiser, CYExpression *set, CYStatement *code) :
         initialiser_(initialiser),
         set_(set),
         code_(code)