X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/d2742118d583fb2438e68bc85ca6639e239e8a6b..be36c292cf875904599e45d49e4f8b2f8b4e9ca6:/Console.cpp?ds=sidebyside diff --git a/Console.cpp b/Console.cpp index fc74540..b6bcedf 100644 --- a/Console.cpp +++ b/Console.cpp @@ -39,6 +39,10 @@ #include "cycript.hpp" +#ifdef CY_EXECUTE +#include "JavaScript.hpp" +#endif + #include #include @@ -108,10 +112,9 @@ void Setup(CYDriver &driver, cy::parser &parser) { driver.strict_ = true; } -void Setup(CYOutput &out, CYDriver &driver) { +void Setup(CYOutput &out, CYDriver &driver, CYOptions &options) { out.pretty_ = pretty_; - - CYContext context(driver.pool_); + CYContext context(driver.pool_, options); driver.program_->Replace(context); } @@ -178,7 +181,7 @@ void Run(int client, std::string &code, FILE *fout = NULL, bool expand = false) int (*append_history$)(int, const char *); -static void Console(apr_pool_t *pool, int client) { +static void Console(apr_pool_t *pool, int client, CYOptions &options) { passwd *passwd; if (const char *username = getenv("LOGNAME")) passwd = getpwnam(username); @@ -320,8 +323,8 @@ static void Console(apr_pool_t *pool, int client) { code = command; else { std::ostringstream str; - CYOutput out(str); - Setup(out, driver); + CYOutput out(str, options); + Setup(out, driver, options); out << *driver.program_; code = str.str(); } @@ -332,7 +335,6 @@ static void Console(apr_pool_t *pool, int client) { if (debug) std::cout << code << std::endl; - code = "with(Cycript.all){" + code + "}"; Run(client, code, fout, expand); } @@ -370,6 +372,7 @@ void InjectLibrary(pid_t pid); int Main(int argc, char const * const argv[], char const * const envp[]) { bool tty(isatty(STDIN_FILENO)); bool compile(false); + CYOptions options; append_history$ = reinterpret_cast(dlsym(RTLD_DEFAULT, "append_history")); @@ -417,6 +420,8 @@ int Main(int argc, char const * const argv[], char const * const envp[]) { case 'g': if (false); + else if (strcmp(arg, "rename") == 0) + options.verbose_ = true; #if YYDEBUG else if (strcmp(arg, "bison") == 0) bison_ = true; @@ -563,7 +568,7 @@ int Main(int argc, char const * const argv[], char const * const envp[]) { #endif if (script == NULL && tty) - Console(pool, client); + Console(pool, client, options); else { CYDriver driver(script ?: ""); cy::parser parser(driver); @@ -598,20 +603,19 @@ int Main(int argc, char const * const argv[], char const * const envp[]) { for (CYDriver::Errors::const_iterator i(driver.errors_.begin()); i != driver.errors_.end(); ++i) std::cerr << i->location_.begin << ": " << i->message_ << std::endl; } else if (driver.program_ != NULL) - if (client != -1) - Run(client, start, end - start, stdout); - else { + if (client != -1) { + std::string code(start, end-start); + Run(client, code, stdout); + } else { std::ostringstream str; - CYOutput out(str); - Setup(out, driver); + CYOutput out(str, options); + Setup(out, driver, options); out << *driver.program_; std::string code(str.str()); if (compile) std::cout << code; - else { - code = "with(Cycript.all){" + code + "}"; + else Run(client, code, stdout); - } } }