From: Jay Freeman (saurik) Date: Thu, 15 Oct 2009 09:44:30 +0000 (+0000) Subject: Improved console syntax error reporting. X-Git-Tag: v0.9.432~344 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/f0360d516594a03fe430435884e47adefadc5e53 Improved console syntax error reporting. --- diff --git a/Application.mm b/Application.mm index 1455012..4bee7e3 100644 --- a/Application.mm +++ b/Application.mm @@ -167,10 +167,24 @@ static void Console(int socket) { driver.size_ = command.size(); if (parser.parse() != 0 || !driver.errors_.empty()) { - for (CYDriver::Errors::const_iterator i(driver.errors_.begin()); i != driver.errors_.end(); ++i) { - cy::position begin(i->location_.begin); + for (CYDriver::Errors::const_iterator error(driver.errors_.begin()); error != driver.errors_.end(); ++error) { + cy::position begin(error->location_.begin); if (begin.line != lines.size() || begin.column - 1 != lines.back().size()) { - std::cerr << i->message_ << std::endl; + cy::position end(error->location_.end); + if (begin.line != lines.size()) { + std::cerr << " | "; + std::cerr << lines[begin.line - 1] << std::endl; + } + std::cerr << " | "; + for (size_t i(0); i != begin.column - 1; ++i) + std::cerr << '.'; + if (begin.line != end.line) + std::cerr << '^'; + else for (size_t i(0), e(end.column - begin.column); i != e; ++i) + std::cerr << '^'; + std::cerr << std::endl; + std::cerr << " | "; + std::cerr << error->message_ << std::endl; add_history(command.c_str()); goto restart; }