summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/Parser.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-10-10 20:27:53 +0000
committerMarc Laukien <marc@zeroc.com>2001-10-10 20:27:53 +0000
commitca4177b0f7e3090a783601f284baa8413c457cca (patch)
tree6cb3435fa8da91f5cf46f14c7eed28387eb0a84a /cpp/src/Slice/Parser.cpp
parentrenamed file (diff)
downloadice-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.cpp38
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),