summaryrefslogtreecommitdiff
path: root/cpp/src/slice2freezej/Main.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2004-10-01 16:14:03 +0000
committerBernard Normier <bernard@zeroc.com>2004-10-01 16:14:03 +0000
commitf7aec284be70ea1dd6266d0f2d02ed19a610f216 (patch)
tree313fd606ccc2464539ba83c0764a1fbb5ee00ee8 /cpp/src/slice2freezej/Main.cpp
parentmore session stuff (diff)
downloadice-f7aec284be70ea1dd6266d0f2d02ed19a610f216.tar.bz2
ice-f7aec284be70ea1dd6266d0f2d02ed19a610f216.tar.xz
ice-f7aec284be70ea1dd6266d0f2d02ed19a610f216.zip
Added error checking
Diffstat (limited to 'cpp/src/slice2freezej/Main.cpp')
-rw-r--r--cpp/src/slice2freezej/Main.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/cpp/src/slice2freezej/Main.cpp b/cpp/src/slice2freezej/Main.cpp
index 4f47302b2aa..90d8f41be66 100644
--- a/cpp/src/slice2freezej/Main.cpp
+++ b/cpp/src/slice2freezej/Main.cpp
@@ -18,6 +18,11 @@ struct DictIndex
{
string member;
bool caseSensitive;
+
+ bool operator==(const DictIndex& rhs) const
+ {
+ return member == rhs.member;
+ }
};
struct Dict
@@ -118,7 +123,13 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict)
cerr << _prog << ": bad index for dictionary `" << dict.name << "'" << endl;
return false;
}
-
+
+ if(!Dictionary::legalKeyType(valueType))
+ {
+ cerr << _prog << ": `" << dict.value << "' is not a valid index type" << endl;
+ return false;
+ }
+
if(index.caseSensitive == false)
{
//
@@ -179,6 +190,12 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict)
TypePtr dataMemberType = dataMember->type();
+ if(!Dictionary::legalKeyType(dataMemberType))
+ {
+ cerr << _prog << ": `" << index.member << "' cannot be used as an index" << endl;
+ return false;
+ }
+
if(index.caseSensitive == false)
{
//
@@ -187,7 +204,7 @@ FreezeGenerator::generate(UnitPtr& u, const Dict& dict)
BuiltinPtr memberType = BuiltinPtr::dynamicCast(dataMemberType);
if(memberType == 0 || memberType->kind() != Builtin::KindString)
{
- cerr << _prog << ": `" << index.member << "'is not a string " << endl;
+ cerr << _prog << ": `" << index.member << "' is not a string " << endl;
return false;
}
}
@@ -1123,6 +1140,13 @@ main(int argc, char* argv[])
{
if(p->name == dictName)
{
+ if(find(p->indices.begin(), p->indices.end(), index) != p->indices.end())
+ {
+ cerr << argv[0] << ": " << argv[idx] << " " << argv[idx + 1]
+ << ": this dict-index is defined twice" << endl;
+ return EXIT_FAILURE;
+ }
+
p->indices.push_back(index);
found = true;
break;