X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/11c1cc16b7cda02473081cc398195484a1ab82f2..561ac4181ec3ad1e1e207e840f70d5017ba9a1ed:/Console.cpp diff --git a/Console.cpp b/Console.cpp index 98e3cc6..7f97963 100644 --- a/Console.cpp +++ b/Console.cpp @@ -37,9 +37,6 @@ */ /* }}} */ -#define _GNU_SOURCE - -#include #include "cycript.hpp" #include @@ -66,6 +63,8 @@ #include #include +#include + static volatile enum { Working, Parsing, @@ -106,8 +105,11 @@ void Setup(CYDriver &driver, cy::parser &parser) { driver.strict_ = true; } -void Setup(CYOutput &out) { +void Setup(CYOutput &out, CYDriver &driver) { out.pretty_ = pretty_; + + CYContext context(driver.pool_); + driver.program_->Replace(context); } void Run(int socket, const char *data, size_t size, FILE *fout = NULL, bool expand = false) { @@ -116,7 +118,11 @@ void Run(int socket, const char *data, size_t size, FILE *fout = NULL, bool expa const char *json; if (socket == -1) { mode_ = Running; +#ifdef CY_EXECUTE json = CYExecute(pool, data); +#else + json = NULL; +#endif mode_ = Working; if (json != NULL) size = strlen(json); @@ -261,7 +267,7 @@ static void Console(int socket) { std::cerr << lines[begin.line - 1] << std::endl; } - std::cerr << " | "; + std::cerr << "...."; for (size_t i(0); i != begin.column - 1; ++i) std::cerr << '.'; if (begin.line != end.line || begin.column == end.column) @@ -293,8 +299,8 @@ static void Console(int socket) { else { std::ostringstream str; CYOutput out(str); - Setup(out); - driver.program_->Multiple(out); + Setup(out, driver); + out << *driver.program_; code = str.str(); } } @@ -328,62 +334,99 @@ static void *Map(const char *path, size_t *psize) { return base; } -int main(int argc, char *argv[]) { +int main(int argc, char const * const argv[], char const * const envp[]) { + _aprcall(apr_app_initialize(&argc, &argv, &envp)); + bool tty(isatty(STDIN_FILENO)); - pid_t pid(_not(pid_t)); bool compile(false); - for (;;) switch (getopt(argc, argv, "cg:n:p:s")) { - case -1: - goto getopt; - case '?': - fprintf(stderr, "usage: cycript [-c] [-p ] [