]> git.saurik.com Git - cycript.git/blobdiff - Driver.cpp
CYPool::str*dup was leaking memory via global new.
[cycript.git] / Driver.cpp
index 6501fbf14144142da38850134923f3fdbe738b09..e529cbc07a86be8f426dc7f7bdac5958d2b848bb 100644 (file)
@@ -1,5 +1,5 @@
 /* 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 {{{ */
@@ -25,6 +25,7 @@
 CYDriver::CYDriver(std::istream &data, const std::string &filename) :
     state_(CYClear),
     data_(data),
+    debug_(0),
     strict_(false),
     commented_(false),
     filename_(filename),
@@ -42,7 +43,22 @@ CYDriver::~CYDriver() {
     ScannerDestroy();
 }
 
-void CYDriver::Warning(const cy::location &location, const char *message) {
+bool CYDriver::Parse(CYPool &pool) {
+    CYLocal<CYPool> local(&pool);
+    cy::parser parser(*this);
+#ifdef YYDEBUG
+    parser.set_debug_level(debug_);
+#endif
+    return parser.parse() != 0;
+}
+
+void CYDriver::Replace(CYPool &pool, 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;