summaryrefslogtreecommitdiff
path: root/tools/preproc/charmap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/preproc/charmap.cpp')
-rw-r--r--tools/preproc/charmap.cpp10
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;
}