diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/errormsg.cc | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff) |
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/errormsg.cc')
-rw-r--r-- | Build/source/utils/asymptote/errormsg.cc | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/errormsg.cc b/Build/source/utils/asymptote/errormsg.cc new file mode 100644 index 00000000000..afa307283b9 --- /dev/null +++ b/Build/source/utils/asymptote/errormsg.cc @@ -0,0 +1,134 @@ +/***** + * errormsg.cc + * Andy Hammerlindl 2002/06/17 + * + * Used in all phases of the compiler to give error messages. + *****/ + +#include <cstdio> +#include <cstdlib> + +#include "errormsg.h" +#include "interact.h" +#include "fileio.h" + +errorstream em; + +position nullPos; +static nullPosInitializer nullPosInit; + +bool errorstream::interrupt=false; + +ostream& operator<< (ostream& out, const position& pos) +{ + if (!pos) + return out; + + string filename=pos.file->name(); + + if(filename != "-" && !settings::getSetting<bool>("quiet")) { + std::ifstream fin(pos.file->name().c_str()); + string s; + size_t count=pos.line; + while(count > 0 && getline(fin,s)) { + count--; + } + out << s << endl; + for(size_t i=1; i < pos.column; ++i) + out << " "; + out << "^" << endl; + } + + out << filename << ": "; + out << pos.line << "." << pos.column << ": "; + + if(settings::getSetting<bool>("xasy")) { + camp::openpipeout(); + fprintf(camp::pipeout,"Error\n"); + fflush(camp::pipeout); + } + + return out; +} + +void errorstream::clear() +{ + sync(); + anyErrors = anyWarnings = false; +} + +void errorstream::message(position pos, const string& s) +{ + if (floating) out << endl; + out << pos << s; + floating = true; +} + +void errorstream::compiler(position pos) +{ + message(pos,"compiler: "); + anyErrors = true; +} + +void errorstream::compiler() +{ + message(nullPos,"compiler: "); + anyErrors = true; +} + +void errorstream::runtime(position pos) +{ + message(pos,"runtime: "); + anyErrors = true; +} + +void errorstream::error(position pos) +{ + message(pos,""); + anyErrors = true; +} + +void errorstream::warning(position pos, string s) +{ + message(pos,"warning ["+s+"]: "); + anyWarnings = true; +} + +void errorstream::warning(position pos) +{ + message(pos,"warning: "); + anyWarnings = true; +} + +void errorstream::fatal(position pos) +{ + message(pos,"abort: "); + anyErrors = true; +} + +void errorstream::trace(position pos) +{ + static position lastpos; + if(!pos || (pos.match(lastpos.filename()) && pos.match(lastpos.Line()))) + return; + lastpos=pos; + message(pos,""); + sync(); +} + +void errorstream::cont() +{ + floating = false; +} + +void errorstream::sync() +{ + if (floating) out << endl; + floating = false; +} + +void outOfMemory() +{ + cerr << "error: out of memory" << endl; + exit(1); +} |