diff options
author | YamaArashi <shadow962@live.com> | 2016-04-30 04:19:00 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-04-30 04:19:00 -0700 |
commit | 1e6eb4f81296eca9c2f1f373c19716939f9b6be6 (patch) | |
tree | ffd770e2b6447120c513cf75ef059d588beff112 /tools/preproc/charmap.cpp | |
parent | 000e34c6f29655aa20034e390e4e2a6c1f7a1258 (diff) |
use compiled libgcc
Diffstat (limited to 'tools/preproc/charmap.cpp')
-rw-r--r-- | tools/preproc/charmap.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/tools/preproc/charmap.cpp b/tools/preproc/charmap.cpp index de693eda5..c7091c4b8 100644 --- a/tools/preproc/charmap.cpp +++ b/tools/preproc/charmap.cpp @@ -51,6 +51,7 @@ public: void ExpectEqualsSign(); std::string ReadSequence(); void ExpectEmptyRestOfLine(); + void RaiseError(const char* format, ...); private: char* m_buffer; @@ -59,7 +60,6 @@ private: long m_lineNum; std::string m_filename; - void RaiseError(const char* format, ...); void RemoveComments(); std::string ReadConstant(); void SkipWhitespace(); @@ -309,6 +309,8 @@ void CharmapReader::RaiseError(const char* format, ...) va_end(args); std::fprintf(stderr, "%s:%ld: error: %s\n", m_filename.c_str(), m_lineNum, buffer); + + std::exit(1); } void CharmapReader::RemoveComments() @@ -382,12 +384,18 @@ Charmap::Charmap(std::string filename) switch (lhs.type) { case LhsType::Char: + if (m_chars.find(lhs.code) != m_chars.end()) + reader.RaiseError("redefining char"); m_chars[lhs.code] = sequence; break; case LhsType::Escape: + if (m_escapes[lhs.code].length() != 0) + reader.RaiseError("redefining escape"); m_escapes[lhs.code] = sequence; break; case LhsType::Constant: + if (m_constants.find(lhs.name) != m_constants.end()) + reader.RaiseError("redefining constant"); m_constants[lhs.name] = sequence; break; } |