]> git.saurik.com Git - cycript.git/blobdiff - Parser.hpp
Add support for ECMA6 for-of iteration statements.
[cycript.git] / Parser.hpp
index 3860caa04a891e659b1b8e8a15eae0d59683cb60..9364826d9e51e24c52775c0ca45c1d4f0f91f082 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <iostream>
 
+#include <stack>
 #include <string>
 #include <vector>
 #include <map>
@@ -447,9 +448,12 @@ enum CYState {
 
 class CYDriver {
   public:
-    CYState state_;
     void *scanner_;
 
+    CYState state_;
+    bool nobrace_;
+    std::stack<bool> in_;
+
     const char *data_;
     size_t size_;
     FILE *file_;
@@ -536,6 +540,8 @@ struct CYForInInitialiser {
 
     virtual CYExpression *Replace(CYContext &context) = 0;
     virtual CYAssignment *Assignment(CYContext &context) = 0;
+
+    virtual void Output(CYOutput &out, CYFlags flags) const = 0;
 };
 
 struct CYNumber;
@@ -623,35 +629,22 @@ struct CYCompound :
     void Output(CYOutput &out, CYFlags flags) const;
 };
 
+struct CYDeclaration;
+
 struct CYFunctionParameter :
     CYNext<CYFunctionParameter>,
     CYThing
 {
-    CYIdentifier *name_;
+    CYForInInitialiser *initialiser_;
 
-    CYFunctionParameter(CYIdentifier *name, CYFunctionParameter *next = NULL) :
+    CYFunctionParameter(CYForInInitialiser *initialiser, CYFunctionParameter *next = NULL) :
         CYNext<CYFunctionParameter>(next),
-        name_(name)
-    {
-    }
-
-    virtual CYFunctionParameter *Replace(CYContext &context, CYBlock &code);
-    virtual void Output(CYOutput &out) const;
-};
-
-struct CYOptionalFunctionParameter :
-    CYFunctionParameter
-{
-    CYExpression *initializer_;
-
-    CYOptionalFunctionParameter(CYIdentifier *name, CYExpression *initializer, CYFunctionParameter *next = NULL) :
-        CYFunctionParameter(name, next),
-        initializer_(initializer)
+        initialiser_(initialiser)
     {
     }
 
-    virtual CYFunctionParameter *Replace(CYContext &context, CYBlock &code);
-    virtual void Output(CYOutput &out) const;
+    void Replace(CYContext &context, CYBlock &code);
+    void Output(CYOutput &out) const;
 };
 
 struct CYComprehension :
@@ -1221,13 +1214,13 @@ struct CYVar :
     virtual void Output(CYOutput &out, CYFlags flags) const;
 };
 
-struct CYLet :
+struct CYLetStatement :
     CYStatement
 {
     CYDeclarations *declarations_;
     CYStatement *code_;
 
-    CYLet(CYDeclarations *declarations, CYStatement *code) :
+    CYLetStatement(CYDeclarations *declarations, CYStatement *code) :
         declarations_(declarations),
         code_(code)
     {
@@ -1706,6 +1699,17 @@ struct CYSwitch :
     virtual void Output(CYOutput &out, CYFlags flags) const;
 };
 
+struct CYDebugger :
+    CYStatement
+{
+    CYDebugger()
+    {
+    }
+
+    virtual CYStatement *Replace(CYContext &context);
+    virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
 struct CYCondition :
     CYExpression
 {