diff options
author | Marc Laukien <marc@zeroc.com> | 2001-10-10 20:27:53 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-10-10 20:27:53 +0000 |
commit | ca4177b0f7e3090a783601f284baa8413c457cca (patch) | |
tree | 6cb3435fa8da91f5cf46f14c7eed28387eb0a84a /cpp/src/Slice/Parser.cpp | |
parent | renamed file (diff) | |
download | ice-ca4177b0f7e3090a783601f284baa8413c457cca.tar.bz2 ice-ca4177b0f7e3090a783601f284baa8413c457cca.tar.xz ice-ca4177b0f7e3090a783601f284baa8413c457cca.zip |
more error checks
Diffstat (limited to 'cpp/src/Slice/Parser.cpp')
-rw-r--r-- | cpp/src/Slice/Parser.cpp | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index dad34391146..e250d3e8468 100644 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -673,8 +673,7 @@ Slice::Container::lookupContained(const string& scoped, bool printError) } return ContainedList(); } - return contained->container()->lookupContained(scoped, - printError); + return contained->container()->lookupContained(scoped, printError); } else { @@ -690,6 +689,31 @@ Slice::Container::lookupContained(const string& scoped, bool printError) } } +ExceptionPtr +Slice::Container::lookupException(const string& scoped, bool printError) +{ + ContainedList contained = lookupContained(scoped, printError); + ExceptionList exceptions; + for (ContainedList::iterator p = contained.begin(); p != contained.end(); ++p) + { + ExceptionPtr ex = ExceptionPtr::dynamicCast(*p); + if (!ex) + { + if (printError) + { + string msg = "`"; + msg += scoped; + msg += "' is not an exception"; + _unit->error(msg); + } + return 0; + } + exceptions.push_back(ex); + } + assert(exceptions.size() == 1); + return exceptions.front(); +} + ModuleList Slice::Container::modules() { @@ -1173,7 +1197,7 @@ Slice::ClassDef::createOperation(const string& name, const TypePtr& returnType, const TypeStringList& inParams, const TypeStringList& outParams, - const TypeList& throws, + const ExceptionList& throws, bool nonmutating) { ContainedList matches = _unit->findContents(thisScope() + name); @@ -1705,7 +1729,7 @@ Slice::Operation::outputParameters() return _outParams; } -TypeList +ExceptionList Slice::Operation::throws() { return _throws; @@ -1748,7 +1772,7 @@ Slice::Operation::uses(const ConstructedPtr& constructed) } } - TypeList::const_iterator q; + ExceptionList::const_iterator q; for (q = _throws.begin(); q != _throws.end(); ++q) { @@ -1775,8 +1799,8 @@ Slice::Operation::visit(ParserVisitor* visitor) } Slice::Operation::Operation(const ContainerPtr& container, const string& name, const TypePtr& returnType, - const TypeStringList& inParams, const TypeStringList& outParams, const TypeList& throws, - bool nonmutating) : + const TypeStringList& inParams, const TypeStringList& outParams, + const ExceptionList& throws, bool nonmutating) : Contained(container, name), SyntaxTreeBase(container->unit()), _returnType(returnType), |