]> git.saurik.com Git - cycript.git/blobdiff - Driver.cpp
Commit a generally useful -gtiming implementation.
[cycript.git] / Driver.cpp
index 6501fbf14144142da38850134923f3fdbe738b09..5f3ffa1e2f802730cce806dc1586442741a4f133 100644 (file)
@@ -1,5 +1,5 @@
 /* Cycript - Optimizing JavaScript Compiler/Runtime
 /* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2014  Jay Freeman (saurik)
+ * Copyright (C) 2009-2015  Jay Freeman (saurik)
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
 #include "Cycript.tab.hh"
 #include "Driver.hpp"
 
 #include "Cycript.tab.hh"
 #include "Driver.hpp"
 
-CYDriver::CYDriver(std::istream &data, const std::string &filename) :
+CYDriver::CYDriver(CYPool &pool, std::istream &data, const std::string &filename) :
+    pool_(pool),
     state_(CYClear),
     data_(data),
     state_(CYClear),
     data_(data),
+    debug_(0),
     strict_(false),
     commented_(false),
     filename_(filename),
     strict_(false),
     commented_(false),
     filename_(filename),
@@ -42,7 +44,22 @@ CYDriver::~CYDriver() {
     ScannerDestroy();
 }
 
     ScannerDestroy();
 }
 
-void CYDriver::Warning(const cy::location &location, const char *message) {
+bool CYDriver::Parse() {
+    CYLocal<CYPool> local(&pool_);
+    cy::parser parser(*this);
+#ifdef YYDEBUG
+    parser.set_debug_level(debug_);
+#endif
+    return parser.parse() != 0;
+}
+
+void CYDriver::Replace(CYOptions &options) {
+    CYLocal<CYPool> local(&pool_);
+    CYContext context(options);
+    program_->Replace(context);
+}
+
+void CYDriver::Warning(const cy::parser::location_type &location, const char *message) {
     if (!strict_)
         return;
 
     if (!strict_)
         return;