diff options
author | Bernard Normier <bernard@zeroc.com> | 2004-10-01 16:14:03 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2004-10-01 16:14:03 +0000 |
commit | f7aec284be70ea1dd6266d0f2d02ed19a610f216 (patch) | |
tree | 313fd606ccc2464539ba83c0764a1fbb5ee00ee8 /cpp/src/slice2freezej/Main.cpp | |
parent | more session stuff (diff) | |
download | ice-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.cpp | 28 |
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; |