summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/Parser.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2012-12-19 13:08:44 +0100
committerBenoit Foucher <benoit@zeroc.com>2012-12-19 13:08:44 +0100
commit7c287857f3bd50b806109660d23e2993b7a4b7ad (patch)
treeca0bcebbc06373520b7badd426762b6caa744fe5 /cpp/src/Slice/Parser.cpp
parentICE-5148 - adding more tests (diff)
downloadice-7c287857f3bd50b806109660d23e2993b7a4b7ad.tar.bz2
ice-7c287857f3bd50b806109660d23e2993b7a4b7ad.tar.xz
ice-7c287857f3bd50b806109660d23e2993b7a4b7ad.zip
ICE-4938: support for compact IDs
Diffstat (limited to 'cpp/src/Slice/Parser.cpp')
-rw-r--r--cpp/src/Slice/Parser.cpp37
1 files changed, 33 insertions, 4 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp
index 16a06384e10..4867c3af593 100644
--- a/cpp/src/Slice/Parser.cpp
+++ b/cpp/src/Slice/Parser.cpp
@@ -586,7 +586,7 @@ Slice::Container::createModule(const string& name)
}
ClassDefPtr
-Slice::Container::createClassDef(const string& name, bool intf, const ClassList& bases, bool local)
+Slice::Container::createClassDef(const string& name, int id, bool intf, const ClassList& bases, bool local)
{
checkIdentifier(name);
ContainedList matches = _unit->findContents(thisScope() + name);
@@ -655,7 +655,7 @@ Slice::Container::createClassDef(const string& name, bool intf, const ClassList&
ClassDecl::checkBasesAreLegal(name, intf, local, bases, _unit);
- ClassDefPtr def = new ClassDef(this, name, intf, bases, local);
+ ClassDefPtr def = new ClassDef(this, name, id, intf, bases, local);
_contents.push_back(def);
for(ContainedList::const_iterator q = matches.begin(); q != matches.end(); ++q)
@@ -3584,7 +3584,13 @@ Slice::ClassDef::visit(ParserVisitor* visitor, bool all)
}
}
-Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, bool intf, const ClassList& bases,
+int
+Slice::ClassDef::compactId() const
+{
+ return _compactId;
+}
+
+Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, int id, bool intf, const ClassList& bases,
bool local) :
SyntaxTreeBase(container->unit()),
Container(container->unit()),
@@ -3593,7 +3599,8 @@ Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, boo
_hasDataMembers(false),
_hasOperations(false),
_bases(bases),
- _local(local)
+ _local(local),
+ _compactId(id)
{
//
// First element of bases may be a class, all others must be
@@ -3605,6 +3612,11 @@ Slice::ClassDef::ClassDef(const ContainerPtr& container, const string& name, boo
assert(p == _bases.begin() || (*p)->isInterface());
}
#endif
+
+ if(_compactId >= 0)
+ {
+ _unit->addTypeId(_compactId, scoped());
+ }
}
// ----------------------------------------------------------------------
@@ -5982,6 +5994,23 @@ Slice::Unit::findUsedBy(const ContainedPtr& contained) const
return usedBy;
}
+void
+Slice::Unit::addTypeId(int compactId, const std::string& typeId)
+{
+ _typeIds.insert(make_pair(compactId, typeId));
+}
+
+std::string
+Slice::Unit::getTypeId(int compactId)
+{
+ map<int, string>::const_iterator p = _typeIds.find(compactId);
+ if(p != _typeIds.end())
+ {
+ return p->second;
+ }
+ return string();
+}
+
bool
Slice::Unit::usesNonLocals() const
{