summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/Parser.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2003-05-08 05:46:29 +0000
committerMichi Henning <michi@zeroc.com>2003-05-08 05:46:29 +0000
commit225855fb6b992a4207f9107d988036aa1ee0d217 (patch)
treeefa68b5ed0afbc0753e7b8d98786674262caa872 /cpp/src/Slice/Parser.cpp
parentmore install projects (diff)
downloadice-225855fb6b992a4207f9107d988036aa1ee0d217.tar.bz2
ice-225855fb6b992a4207f9107d988036aa1ee0d217.tar.xz
ice-225855fb6b992a4207f9107d988036aa1ee0d217.zip
Merged HEAD and slicing trees.
Diffstat (limited to 'cpp/src/Slice/Parser.cpp')
-rw-r--r--cpp/src/Slice/Parser.cpp152
1 files changed, 151 insertions, 1 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp
index 92bd2f0a1dc..1dcb6218503 100644
--- a/cpp/src/Slice/Parser.cpp
+++ b/cpp/src/Slice/Parser.cpp
@@ -84,6 +84,12 @@ Slice::Builtin::isLocal() const
return _kind == KindLocalObject;
}
+bool
+Slice::Builtin::usesClasses() const
+{
+ return _kind == KindObject;
+}
+
Builtin::Kind
Slice::Builtin::kind() const
{
@@ -1197,6 +1203,51 @@ Slice::Container::hasClassDefs() const
}
bool
+Slice::Container::hasDataOnlyClasses() const
+{
+ for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
+ {
+ ClassDefPtr q = ClassDefPtr::dynamicCast(*p);
+ if(q)
+ {
+ if(!q->isAbstract())
+ {
+ return true;
+ }
+ }
+
+ ContainerPtr container = ContainerPtr::dynamicCast(*p);
+ if(container && container->hasDataOnlyClasses())
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool
+Slice::Container::hasNonLocalExceptions() const
+{
+ for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
+ {
+ ExceptionPtr q = ExceptionPtr::dynamicCast(*p);
+ if(q && !q->isLocal())
+ {
+ return true;
+ }
+
+ ContainerPtr container = ContainerPtr::dynamicCast(*p);
+ if(container && container->hasNonLocalExceptions())
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool
Slice::Container::hasOtherConstructedOrExceptions() const
{
for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
@@ -1624,6 +1675,12 @@ Slice::ClassDecl::uses(const ContainedPtr&) const
return false;
}
+bool
+Slice::ClassDecl::usesClasses() const
+{
+ return !isLocal() && !_interface;
+}
+
string
Slice::ClassDecl::kindOf() const
{
@@ -1675,7 +1732,7 @@ Slice::ClassDecl::checkBasesAreLegal(const string& name, bool local, const Class
}
}
}
-
+
//
// Check whether, for multiple inheritance, any of the bases define
// the same operations.
@@ -2286,6 +2343,12 @@ Slice::Proxy::isLocal() const
return __class->isLocal();
}
+bool
+Slice::Proxy::usesClasses() const
+{
+ return false;
+}
+
ClassDeclPtr
Slice::Proxy::_class() const
{
@@ -2465,6 +2528,24 @@ Slice::Exception::uses(const ContainedPtr&) const
return false;
}
+bool
+Slice::Exception::usesClasses() const
+{
+ DataMemberList dml = dataMembers();
+ for(DataMemberList::const_iterator i = dml.begin(); i != dml.end(); ++i)
+ {
+ if((*i)->type()->usesClasses())
+ {
+ return true;
+ }
+ }
+ if(_base)
+ {
+ return _base->usesClasses();
+ }
+ return false;
+}
+
string
Slice::Exception::kindOf() const
{
@@ -2603,6 +2684,24 @@ Slice::Struct::uses(const ContainedPtr&) const
return false;
}
+bool
+Slice::Struct::usesClasses() const
+{
+ for(ContainedList::const_iterator p = _contents.begin(); p != _contents.end(); ++p)
+ {
+ DataMemberPtr q = DataMemberPtr::dynamicCast(*p);
+ if(q)
+ {
+ TypePtr t = q->type();
+ if(t->usesClasses())
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
string
Slice::Struct::kindOf() const
{
@@ -2662,6 +2761,12 @@ Slice::Sequence::uses(const ContainedPtr& contained) const
return false;
}
+bool
+Slice::Sequence::usesClasses() const
+{
+ return _type->usesClasses();
+}
+
string
Slice::Sequence::kindOf() const
{
@@ -2738,6 +2843,12 @@ Slice::Dictionary::uses(const ContainedPtr& contained) const
return false;
}
+bool
+Slice::Dictionary::usesClasses() const
+{
+ return _valueType->usesClasses();
+}
+
string
Slice::Dictionary::kindOf() const
{
@@ -2876,6 +2987,12 @@ Slice::Enum::uses(const ContainedPtr&) const
return false;
}
+bool
+Slice::Enum::usesClasses() const
+{
+ return false;
+}
+
string
Slice::Enum::kindOf() const
{
@@ -3389,6 +3506,39 @@ Slice::Operation::uses(const ContainedPtr& contained) const
return false;
}
+bool
+Slice::Operation::sendsClasses() const
+{
+ ParamDeclList pdl = parameters();
+ for(ParamDeclList::const_iterator i = pdl.begin(); i != pdl.end(); ++i)
+ {
+ if(!(*i)->isOutParam() && (*i)->type()->usesClasses())
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool
+Slice::Operation::returnsClasses() const
+{
+ TypePtr t = returnType();
+ if(t && t->usesClasses())
+ {
+ return true;
+ }
+ ParamDeclList pdl = parameters();
+ for(ParamDeclList::const_iterator i = pdl.begin(); i != pdl.end(); ++i)
+ {
+ if((*i)->isOutParam() && (*i)->type()->usesClasses())
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
string
Slice::Operation::kindOf() const
{