]> git.saurik.com Git - cycript.git/blobdiff - Parser.hpp
Remove now-obsolete prefix size clip.
[cycript.git] / Parser.hpp
index 9ff1d38548ed1054ed3e56d8fbc99f28f8d33ea1..a994ead8c08a49c36c3c9ea49f1b0827ffac17c9 100644 (file)
@@ -50,6 +50,7 @@
 #include <map>
 #include <set>
 
+#include <cstdio>
 #include <cstdlib>
 
 #include "location.hh"
@@ -356,9 +357,7 @@ struct CYProgram :
     virtual void Output(CYOutput &out) const;
 };
 
-struct CYContext :
-    CYScope
-{
+struct CYContext {
     apr_pool_t *pool_;
     CYOptions &options_;
     CYScope *scope_;
@@ -367,7 +366,7 @@ struct CYContext :
     CYContext(apr_pool_t *pool, CYOptions &options) :
         pool_(pool),
         options_(options),
-        scope_(this)
+        scope_(NULL)
     {
     }
 
@@ -454,12 +453,39 @@ class CYDriver {
     CYProgram *program_;
     Errors errors_;
 
+    bool auto_;
+
+    struct Context {
+        CYExpression *context_;
+
+        Context(CYExpression *context) :
+            context_(context)
+        {
+        }
+
+        typedef std::vector<CYWord *> Words;
+        Words words_;
+    };
+
+    typedef std::vector<Context> Contexts;
+    Contexts contexts_;
+
+    CYExpression *context_;
+
+    enum Mode {
+        AutoNone,
+        AutoPrimary,
+        AutoDirect,
+        AutoIndirect,
+        AutoMessage
+    } mode_;
+
   private:
     void ScannerInit();
     void ScannerDestroy();
 
   public:
-    CYDriver(const std::string &filename);
+    CYDriver(apr_pool_t *pool = NULL, const std::string &filename = "");
     ~CYDriver();
 
     Condition GetCondition();