summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2017-02-03 18:10:20 +0100
committerJose <jose@zeroc.com>2017-02-03 18:10:20 +0100
commit7274ebf13c7a1ff3b587598335201c3a4e848c90 (patch)
treead673e775b6ab68d511bcc86cf420c519b65948d /cpp/src/slice2cpp
parentConnection::close fixes for C#/Java/JS (diff)
downloadice-7274ebf13c7a1ff3b587598335201c3a4e848c90.tar.bz2
ice-7274ebf13c7a1ff3b587598335201c3a4e848c90.tar.xz
ice-7274ebf13c7a1ff3b587598335201c3a4e848c90.zip
Rework warning suppression to use global meta data
Diffstat (limited to 'cpp/src/slice2cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp282
-rw-r--r--cpp/src/slice2cpp/Gen.h60
-rw-r--r--cpp/src/slice2cpp/Main.cpp6
3 files changed, 187 insertions, 161 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index dd1ca22855c..beae822ec6b 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -377,7 +377,7 @@ condString(bool ok, const string& str)
Slice::Gen::Gen(const string& base, const string& headerExtension, const string& sourceExtension,
const vector<string>& extraHeaders, const string& include,
const vector<string>& includePaths, const string& dllExport, const string& dir,
- bool implCpp98, bool implCpp11, bool checksum, bool ice, int warningLevel) :
+ bool implCpp98, bool implCpp11, bool checksum, bool ice) :
_base(base),
_headerExtension(headerExtension),
_implHeaderExtension(headerExtension),
@@ -390,8 +390,7 @@ Slice::Gen::Gen(const string& base, const string& headerExtension, const string&
_implCpp98(implCpp98),
_implCpp11(implCpp11),
_checksum(checksum),
- _ice(ice),
- _warningLevel(warningLevel)
+ _ice(ice)
{
for(vector<string>::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p)
{
@@ -423,7 +422,7 @@ Slice::Gen::generateChecksumMap(const UnitPtr& p)
{
if(_checksum)
{
- ChecksumMap map = createChecksums(p, _warningLevel);
+ ChecksumMap map = createChecksums(p);
if(!map.empty())
{
C << sp << nl << "namespace";
@@ -456,13 +455,19 @@ Slice::Gen::generate(const UnitPtr& p)
string file = p->topLevelFile();
//
- // Give precedence to header-ext global metadata.
+ // Give precedence to header-ext/source-ext global metadata.
//
string headerExtension = getHeaderExt(file, p);
if(!headerExtension.empty())
{
_headerExtension = headerExtension;
}
+
+ string sourceExtension = getSourceExt(file, p);
+ if(!sourceExtension.empty())
+ {
+ _sourceExtension = sourceExtension;
+ }
//
// Give precedence to --dll-export command-line option
@@ -574,7 +579,7 @@ Slice::Gen::generate(const UnitPtr& p)
H << "\n#define __" << s << "__";
H << '\n';
- validateMetaData(p, _warningLevel);
+ validateMetaData(p);
writeExtraHeaders(C);
@@ -685,15 +690,30 @@ Slice::Gen::generate(const UnitPtr& p)
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
StringList globalMetaData = dc->getMetaData();
- for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q)
+ bool emitWarnings = dc->suppressWarning("invalid-metadata");
+ for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end();)
{
- string s = *q;
+ string s = *q++;
static const string includePrefix = "cpp:include:";
- if(s.find(includePrefix) == 0 && s.size() > includePrefix.size())
+ if(s.find(includePrefix) == 0)
{
- H << nl << "#include <" << s.substr(includePrefix.size()) << ">";
+ if(s.size() > includePrefix.size())
+ {
+ H << nl << "#include <" << s.substr(includePrefix.size()) << ">";
+ }
+ else
+ {
+ if(emitWarnings)
+ {
+ ostringstream ostr;
+ ostr << "ignoring invalid global metadata `" << s << "'";
+ emitWarning(file, -1, ostr.str());
+ }
+ globalMetaData.remove(s);
+ }
}
}
+ dc->setMetaData(globalMetaData);
}
//
@@ -728,27 +748,27 @@ Slice::Gen::generate(const UnitPtr& p)
C << nl << "#ifdef ICE_CPP11_MAPPING // C++11 mapping";
C.restoreIndent();
{
- normalizeMetaData(p, true, _warningLevel);
+ normalizeMetaData(p, true);
- Cpp11DeclVisitor declVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11DeclVisitor declVisitor(H, C, _dllExport);
p->visit(&declVisitor, false);
- Cpp11TypesVisitor typesVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11TypesVisitor typesVisitor(H, C, _dllExport);
p->visit(&typesVisitor, false);
- Cpp11LocalObjectVisitor localObjectVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11LocalObjectVisitor localObjectVisitor(H, C, _dllExport);
p->visit(&localObjectVisitor, false);
- Cpp11InterfaceVisitor interfaceVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11InterfaceVisitor interfaceVisitor(H, C, _dllExport);
p->visit(&interfaceVisitor, false);
- Cpp11ValueVisitor valueVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11ValueVisitor valueVisitor(H, C, _dllExport);
p->visit(&valueVisitor, false);
- Cpp11ProxyVisitor proxyVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11ProxyVisitor proxyVisitor(H, C, _dllExport);
p->visit(&proxyVisitor, false);
- Cpp11StreamVisitor streamVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11StreamVisitor streamVisitor(H, C, _dllExport);
p->visit(&streamVisitor, false);
if(_implCpp11)
@@ -769,11 +789,11 @@ Slice::Gen::generate(const UnitPtr& p)
}
implC << _base << "I." << _implHeaderExtension << ">";
- Cpp11ImplVisitor implVisitor(implH, implC, _dllExport, _warningLevel);
+ Cpp11ImplVisitor implVisitor(implH, implC, _dllExport);
p->visit(&implVisitor, false);
}
- Cpp11CompatibilityVisitor compatibilityVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11CompatibilityVisitor compatibilityVisitor(H, C, _dllExport);
p->visit(&compatibilityVisitor, false);
generateChecksumMap(p);
@@ -788,21 +808,21 @@ Slice::Gen::generate(const UnitPtr& p)
C << nl << "#else // C++98 mapping";
C.restoreIndent();
{
- normalizeMetaData(p, false, _warningLevel);
+ normalizeMetaData(p, false);
- ProxyDeclVisitor proxyDeclVisitor(H, C, _dllExport, _warningLevel);
+ ProxyDeclVisitor proxyDeclVisitor(H, C, _dllExport);
p->visit(&proxyDeclVisitor, false);
- ObjectDeclVisitor objectDeclVisitor(H, C, _dllExport, _warningLevel);
+ ObjectDeclVisitor objectDeclVisitor(H, C, _dllExport);
p->visit(&objectDeclVisitor, false);
- TypesVisitor typesVisitor(H, C, _dllExport, _warningLevel);
+ TypesVisitor typesVisitor(H, C, _dllExport);
p->visit(&typesVisitor, false);
- AsyncVisitor asyncVisitor(H, C, _dllExport, _warningLevel);
+ AsyncVisitor asyncVisitor(H, C, _dllExport);
p->visit(&asyncVisitor, false);
- AsyncImplVisitor asyncImplVisitor(H, C, _dllExport, _warningLevel);
+ AsyncImplVisitor asyncImplVisitor(H, C, _dllExport);
p->visit(&asyncImplVisitor, false);
//
@@ -811,16 +831,16 @@ Slice::Gen::generate(const UnitPtr& p)
// the proxy relies on knowing the hierarchy to make the begin_
// methods type-safe.
//
- AsyncCallbackVisitor asyncCallbackVisitor(H, C, _dllExport, _warningLevel);
+ AsyncCallbackVisitor asyncCallbackVisitor(H, C, _dllExport);
p->visit(&asyncCallbackVisitor, false);
- ProxyVisitor proxyVisitor(H, C, _dllExport, _warningLevel);
+ ProxyVisitor proxyVisitor(H, C, _dllExport);
p->visit(&proxyVisitor, false);
- ObjectVisitor objectVisitor(H, C, _dllExport, _warningLevel);
+ ObjectVisitor objectVisitor(H, C, _dllExport);
p->visit(&objectVisitor, false);
- StreamVisitor streamVisitor(H, C, _dllExport, _warningLevel);
+ StreamVisitor streamVisitor(H, C, _dllExport);
p->visit(&streamVisitor, false);
//
@@ -828,7 +848,7 @@ Slice::Gen::generate(const UnitPtr& p)
// definition, because completed calls the begin_ method in the
// proxy.
//
- AsyncCallbackTemplateVisitor asyncCallbackTemplateVisitor(H, C, _dllExport, _warningLevel);
+ AsyncCallbackTemplateVisitor asyncCallbackTemplateVisitor(H, C, _dllExport);
p->visit(&asyncCallbackTemplateVisitor, false);
if(_implCpp98)
@@ -849,7 +869,7 @@ Slice::Gen::generate(const UnitPtr& p)
}
implC << _base << "I." << _implHeaderExtension << ">";
- ImplVisitor implVisitor(implH, implC, _dllExport, _warningLevel);
+ ImplVisitor implVisitor(implH, implC, _dllExport);
p->visit(&implVisitor, false);
}
@@ -903,8 +923,7 @@ Slice::Gen::writeExtraHeaders(IceUtilInternal::Output& out)
}
}
-Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport) :
H(h), C(c), _dllExport(dllExport), _doneStaticSymbol(false), _useWstring(false)
{
}
@@ -1538,8 +1557,7 @@ Slice::Gen::TypesVisitor::emitUpcall(const ExceptionPtr& base, const string& cal
<< call;
}
-Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& h, Output&, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& h, Output&, const string& dllExport) :
H(h), _dllExport(dllExport)
{
}
@@ -1606,8 +1624,8 @@ Slice::Gen::ProxyDeclVisitor::visitClassDecl(const ClassDeclPtr& p)
H << nl << _dllExport << "::IceProxy::Ice::Object* upCast(::IceProxy" << scoped << "*);";
}
-Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
+Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
_dllMemberExport(toDllMemberExport(dllExport)), _useWstring(false)
{
}
@@ -2156,8 +2174,7 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& h, Output& c, const string& dllExport) :
H(h), C(c), _dllExport(dllExport)
{
}
@@ -2226,8 +2243,7 @@ Slice::Gen::ObjectDeclVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::ObjectVisitor::ObjectVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::ObjectVisitor::ObjectVisitor(Output& h, Output& c, const string& dllExport) :
H(h), C(c), _dllExport(dllExport), _doneStaticSymbol(false), _useWstring(false)
{
}
@@ -3387,8 +3403,7 @@ Slice::Gen::ObjectVisitor::emitUpcall(const ClassDefPtr& base, const string& cal
C << nl << (base ? fixKwd(base->scoped()) : string("::Ice::Object")) << call;
}
-Slice::Gen::AsyncCallbackVisitor::AsyncCallbackVisitor(Output& h, Output&, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::AsyncCallbackVisitor::AsyncCallbackVisitor(Output& h, Output&, const string& dllExport) :
H(h), _dllExport(dllExport), _useWstring(false)
{
}
@@ -3447,8 +3462,8 @@ Slice::Gen::AsyncCallbackVisitor::visitOperation(const OperationPtr& p)
H << nl << "typedef ::IceUtil::Handle< " << delName << "_Base> " << delName << "Ptr;";
}
-Slice::Gen::AsyncCallbackTemplateVisitor::AsyncCallbackTemplateVisitor(Output& h, Output&, const string& dllExport, int warningLevel)
- : ParserVisitor(warningLevel), H(h), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::AsyncCallbackTemplateVisitor::AsyncCallbackTemplateVisitor(Output& h, Output&, const string& dllExport)
+ : H(h), _dllExport(dllExport), _useWstring(false)
{
}
@@ -3751,8 +3766,8 @@ Slice::Gen::AsyncCallbackTemplateVisitor::generateOperation(const OperationPtr&
}
}
-Slice::Gen::ImplVisitor::ImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::ImplVisitor::ImplVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
@@ -4043,8 +4058,8 @@ Slice::Gen::ImplVisitor::visitClassDefStart(const ClassDefPtr& p)
return true;
}
-Slice::Gen::AsyncVisitor::AsyncVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::AsyncVisitor::AsyncVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
@@ -4178,8 +4193,8 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::AsyncImplVisitor::AsyncImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::AsyncImplVisitor::AsyncImplVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
@@ -4343,8 +4358,7 @@ Slice::Gen::AsyncImplVisitor::visitOperation(const OperationPtr& p)
C << eb;
}
-Slice::Gen::StreamVisitor::StreamVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::StreamVisitor::StreamVisitor(Output& h, Output& c, const string& dllExport) :
H(h),
C(c),
_dllExport(dllExport)
@@ -4475,16 +4489,12 @@ Slice::Gen::StreamVisitor::visitEnum(const EnumPtr& p)
}
void
-Slice::Gen::validateMetaData(const UnitPtr& u, int warningLevel)
+Slice::Gen::validateMetaData(const UnitPtr& u)
{
- MetaDataVisitor visitor(warningLevel);
+ MetaDataVisitor visitor;
u->visit(&visitor, false);
}
-Slice::Gen::MetaDataVisitor::MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel)
-{
-}
-
bool
Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
{
@@ -4502,22 +4512,22 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
StringList globalMetaData = dc->getMetaData();
- StringList newGlobalMetaData;
int headerExtension = 0;
+ int sourceExtension = 0;
int dllExport = 0;
- for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end(); ++r)
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+ for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end();)
{
- string s = *r;
-
+ string s = *r++;
if(s.find(prefix) == 0)
{
static const string cppIncludePrefix = "cpp:include:";
static const string cppHeaderExtPrefix = "cpp:header-ext:";
+ static const string cppSourceExtPrefix = "cpp:source-ext:";
static const string cppDllExportPrefix = "cpp:dll-export:";
if(s.find(cppIncludePrefix) == 0 && s.size() > cppIncludePrefix.size())
{
- newGlobalMetaData.push_back(s);
continue;
}
else if(s.find(cppHeaderExtPrefix) == 0 && s.size() > cppHeaderExtPrefix.size())
@@ -4525,17 +4535,30 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
headerExtension++;
if(headerExtension > 1)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s
<< "': directive can appear only once per file";
emitWarning(file, -1, ostr.str());
}
+ globalMetaData.remove(s);
}
- else
+ continue;
+ }
+ else if(s.find(cppSourceExtPrefix) == 0 && s.size() > cppSourceExtPrefix.size())
+ {
+ sourceExtension++;
+ if(sourceExtension > 1)
{
- newGlobalMetaData.push_back(s);
+ if(emitWarnings)
+ {
+ ostringstream ostr;
+ ostr << "ignoring invalid global metadata `" << s
+ << "': directive can appear only once per file";
+ emitWarning(file, -1, ostr.str());
+ }
+ globalMetaData.remove(s);
}
continue;
}
@@ -4544,31 +4567,29 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
dllExport++;
if(dllExport > 1)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s
<< "': directive can appear only once per file";
emitWarning(file, -1, ostr.str());
}
- }
- else
- {
- newGlobalMetaData.push_back(s);
+ globalMetaData.remove(s);
}
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s << "'";
emitWarning(file, -1, ostr.str());
}
+ globalMetaData.remove(s);
}
}
- dc->setMetaData(newGlobalMetaData);
+ dc->setMetaData(globalMetaData);
}
return true;
@@ -4640,9 +4661,14 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p)
StringList metaData = p->getMetaData();
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
if(!cl->isLocal() && p->hasMetaData("cpp:noexcept"))
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(p->file(), p->line(), "ignoring metadata `cpp:noexcept' for non local interface");
}
@@ -4654,18 +4680,18 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p)
{
for(StringList::const_iterator q = metaData.begin(); q != metaData.end();)
{
- if(q->find("cpp:type:") == 0 || q->find("cpp:view-type:") == 0 ||
- q->find("cpp:range") == 0 || (*q) == "cpp:array")
+ string s = *q++;
+ if(s.find("cpp:type:") == 0 || s.find("cpp:view-type:") == 0 ||
+ s.find("cpp:range") == 0 || s == "cpp:array")
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
- emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + *q +
+ emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + s +
"' for operation with void return type");
}
- metaData.remove(*q);
+ metaData.remove(s);
continue;
}
- ++q;
}
}
else
@@ -4726,10 +4752,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
static const string cpp11Prefix = "cpp11:";
static const string cpp98Prefix = "cpp98:";
- StringList newMetaData;
- for(StringList::const_iterator p = metaData.begin(); p != metaData.end(); ++p)
+ const UnitPtr unit = cont->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
+ StringList newMetaData = metaData;
+ for(StringList::const_iterator p = newMetaData.begin(); p != newMetaData.end();)
{
- string s = *p;
+ string s = *p++;
string prefix;
bool cpp98 = false;
@@ -4752,7 +4783,6 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
if(s == "cpp:const" && operation)
{
- newMetaData.push_back(s);
continue;
}
if(!prefix.empty())
@@ -4767,7 +4797,6 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
ExceptionPtr exception = ExceptionPtr::dynamicCast(cont);
if((builtin && builtin->kind() == Builtin::KindString) || module || clss || strct || exception)
{
- newMetaData.push_back(s);
continue;
}
}
@@ -4775,7 +4804,6 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
{
if(BuiltinPtr::dynamicCast(cont)->kind() == Builtin::KindString)
{
- newMetaData.push_back(s);
continue;
}
}
@@ -4783,18 +4811,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
{
if(ss.find("type:") == 0 || ss.find("view-type:") == 0 || ss == "array" || ss.find("range") == 0)
{
- newMetaData.push_back(s);
continue;
}
}
if(DictionaryPtr::dynamicCast(cont) && (ss.find("type:") == 0 || ss.find("view-type:") == 0))
{
- newMetaData.push_back(s);
continue;
}
if(!cpp11 && StructPtr::dynamicCast(cont) && (ss == "class" || ss == "comparable"))
{
- newMetaData.push_back(s);
continue;
}
@@ -4804,18 +4829,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
(cl->isLocal() && ss.find("type:") == 0) ||
(!cpp11 && cl->isLocal() && ss == "comparable")))
{
- newMetaData.push_back(s);
continue;
}
}
if(ExceptionPtr::dynamicCast(cont) && ss == "ice_print")
{
- newMetaData.push_back(s);
continue;
}
if(!cpp98 && EnumPtr::dynamicCast(cont) && ss == "unscoped")
{
- newMetaData.push_back(s);
continue;
}
@@ -4823,15 +4845,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(cont);
if(cl && cl->isLocal() && ss.find("type:") == 0)
{
- newMetaData.push_back(s);
continue;
}
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "'");
}
+ newMetaData.remove(s);
continue;
}
@@ -4840,31 +4862,29 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
ClassDefPtr cl = ClassDefPtr::dynamicCast(cont);
if(cl && cl->isDelegate())
{
- newMetaData.push_back(s);
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "'");
}
+ newMetaData.remove(s);
continue;
}
- newMetaData.push_back(s);
}
return newMetaData;
}
void
-Slice::Gen::normalizeMetaData(const UnitPtr& u, bool cpp11, int warningLevel)
+Slice::Gen::normalizeMetaData(const UnitPtr& u, bool cpp11)
{
- NormalizeMetaDataVisitor visitor(cpp11, warningLevel);
+ NormalizeMetaDataVisitor visitor(cpp11);
u->visit(&visitor, false);
}
-Slice::Gen::NormalizeMetaDataVisitor::NormalizeMetaDataVisitor(bool cpp11, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::NormalizeMetaDataVisitor::NormalizeMetaDataVisitor(bool cpp11) :
_cpp11(cpp11)
{
}
@@ -5138,9 +5158,24 @@ Slice::Gen::getHeaderExt(const string& file, const UnitPtr& unit)
return ext;
}
+string
+Slice::Gen::getSourceExt(const string& file, const UnitPtr& unit)
+{
+ string ext;
+ static const string sourceExtPrefix = "cpp:source-ext:";
+ DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ string meta = dc->findMetaData(sourceExtPrefix);
+ if(meta.size() > sourceExtPrefix.size())
+ {
+ ext = meta.substr(sourceExtPrefix.size());
+ }
+ return ext;
+}
+
// C++11 visitors
-Slice::Gen::Cpp11DeclVisitor::Cpp11DeclVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport)
+Slice::Gen::Cpp11DeclVisitor::Cpp11DeclVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport)
{
}
@@ -5295,8 +5330,8 @@ Slice::Gen::Cpp11DeclVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::Cpp11TypesVisitor::Cpp11TypesVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
+Slice::Gen::Cpp11TypesVisitor::Cpp11TypesVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
_dllMemberExport(toDllMemberExport(dllExport)), _doneStaticSymbol(false), _useWstring(false)
{
}
@@ -5693,8 +5728,8 @@ Slice::Gen::Cpp11TypesVisitor::visitDictionary(const DictionaryPtr& p)
}
}
-Slice::Gen::Cpp11ProxyVisitor::Cpp11ProxyVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllClassExport(toDllClassExport(dllExport)),
+Slice::Gen::Cpp11ProxyVisitor::Cpp11ProxyVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllClassExport(toDllClassExport(dllExport)),
_dllMemberExport(toDllMemberExport(dllExport)),
_useWstring(false)
{
@@ -6283,9 +6318,7 @@ Slice::Gen::Cpp11TypesVisitor::emitUpcall(const ExceptionPtr& base, const string
Slice::Gen::Cpp11ObjectVisitor::Cpp11ObjectVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- ParserVisitor(warningLevel),
+ const std::string& dllExport) :
H(h),
C(c),
_dllExport(dllExport),
@@ -6338,9 +6371,8 @@ Slice::Gen::Cpp11ValueVisitor::emitUpcall(const ClassDefPtr& base, const string&
Slice::Gen::Cpp11LocalObjectVisitor::Cpp11LocalObjectVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- Cpp11ObjectVisitor(h, c, dllExport, warningLevel)
+ const std::string& dllExport) :
+ Cpp11ObjectVisitor(h, c, dllExport)
{
}
@@ -6687,9 +6719,8 @@ Slice::Gen::Cpp11LocalObjectVisitor::visitOperation(const OperationPtr& p)
Slice::Gen::Cpp11InterfaceVisitor::Cpp11InterfaceVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- Cpp11ObjectVisitor(h, c, dllExport, warningLevel)
+ const std::string& dllExport) :
+ Cpp11ObjectVisitor(h, c, dllExport)
{
}
@@ -7142,9 +7173,8 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
Slice::Gen::Cpp11ValueVisitor::Cpp11ValueVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- Cpp11ObjectVisitor(h, c, dllExport, warningLevel)
+ const std::string& dllExport) :
+ Cpp11ObjectVisitor(h, c, dllExport)
{
}
@@ -7497,8 +7527,7 @@ Slice::Gen::Cpp11ObjectVisitor::emitOneShotConstructor(const ClassDefPtr& p)
}
}
-Slice::Gen::Cpp11StreamVisitor::Cpp11StreamVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::Cpp11StreamVisitor::Cpp11StreamVisitor(Output& h, Output& c, const string& dllExport) :
H(h),
C(c),
_dllExport(dllExport)
@@ -7610,8 +7639,7 @@ Slice::Gen::Cpp11StreamVisitor::visitEnum(const EnumPtr& p)
}
-Slice::Gen::Cpp11CompatibilityVisitor::Cpp11CompatibilityVisitor(Output& h, Output&, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::Cpp11CompatibilityVisitor::Cpp11CompatibilityVisitor(Output& h, Output&, const string& dllExport) :
H(h),
_dllExport(dllExport)
{
@@ -7661,8 +7689,8 @@ Slice::Gen::Cpp11CompatibilityVisitor::visitClassDecl(const ClassDeclPtr& p)
}
}
-Slice::Gen::Cpp11ImplVisitor::Cpp11ImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::Cpp11ImplVisitor::Cpp11ImplVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
diff --git a/cpp/src/slice2cpp/Gen.h b/cpp/src/slice2cpp/Gen.h
index 660267b0539..b27d791a106 100644
--- a/cpp/src/slice2cpp/Gen.h
+++ b/cpp/src/slice2cpp/Gen.h
@@ -31,8 +31,7 @@ public:
bool,
bool,
bool,
- bool,
- int);
+ bool);
~Gen();
void generate(const UnitPtr&);
@@ -52,6 +51,12 @@ private:
// or an empty string if no global metadata was found.
//
std::string getHeaderExt(const std::string& file, const UnitPtr& unit);
+
+ //
+ // Returns the source extension defined in the global metadata for a given file,
+ // or an empty string if no global metadata was found.
+ //
+ std::string getSourceExt(const std::string& file, const UnitPtr& unit);
::IceUtilInternal::Output H;
::IceUtilInternal::Output C;
@@ -72,13 +77,12 @@ private:
bool _implCpp11;
bool _checksum;
bool _ice;
- int _warningLevel;
class TypesVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -110,7 +114,7 @@ private:
{
public:
- ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -129,7 +133,7 @@ private:
{
public:
- ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -155,7 +159,7 @@ private:
{
public:
- ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -174,7 +178,7 @@ private:
{
public:
- ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -207,7 +211,7 @@ private:
{
public:
- AsyncCallbackVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncCallbackVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -228,7 +232,7 @@ private:
{
public:
- AsyncCallbackTemplateVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncCallbackTemplateVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -253,7 +257,7 @@ private:
{
public:
- ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -283,7 +287,7 @@ private:
{
public:
- AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -305,7 +309,7 @@ private:
{
public:
- AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -329,7 +333,7 @@ private:
{
public:
- StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -351,7 +355,7 @@ private:
{
public:
- Cpp11DeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11DeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -374,7 +378,7 @@ private:
{
public:
- Cpp11TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -408,7 +412,7 @@ private:
{
public:
- Cpp11ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -434,7 +438,7 @@ private:
{
public:
- Cpp11ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
protected:
@@ -457,7 +461,7 @@ private:
{
public:
- Cpp11LocalObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11LocalObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -472,7 +476,7 @@ private:
{
public:
- Cpp11InterfaceVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11InterfaceVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -488,7 +492,7 @@ private:
{
public:
- Cpp11ValueVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ValueVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -504,7 +508,7 @@ private:
{
public:
- Cpp11StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -525,7 +529,7 @@ private:
{
public:
- Cpp11CompatibilityVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11CompatibilityVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -541,7 +545,7 @@ private:
{
public:
- Cpp11ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -573,8 +577,6 @@ private:
{
public:
- MetaDataVisitor(int);
-
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -602,7 +604,7 @@ private:
{
public:
- NormalizeMetaDataVisitor(bool, int);
+ NormalizeMetaDataVisitor(bool);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -628,8 +630,8 @@ private:
bool _cpp11;
};
- static void validateMetaData(const UnitPtr&, int);
- static void normalizeMetaData(const UnitPtr&, bool, int);
+ static void validateMetaData(const UnitPtr&);
+ static void normalizeMetaData(const UnitPtr&, bool);
};
}
diff --git a/cpp/src/slice2cpp/Main.cpp b/cpp/src/slice2cpp/Main.cpp
index 83b19b943c9..7378da1b118 100644
--- a/cpp/src/slice2cpp/Main.cpp
+++ b/cpp/src/slice2cpp/Main.cpp
@@ -88,7 +88,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -118,7 +117,6 @@ compile(const vector<string>& argv)
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
opts.addOpt("", "checksum");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
vector<string> args;
@@ -199,8 +197,6 @@ compile(const vector<string>& argv)
bool checksum = opts.isSet("checksum");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -333,7 +329,7 @@ compile(const vector<string>& argv)
try
{
Gen gen(icecpp->getBaseName(), headerExtension, sourceExtension, extraHeaders, include,
- includePaths, dllExport, output, implCpp98, implCpp11, checksum, ice, warningLevel);
+ includePaths, dllExport, output, implCpp98, implCpp11, checksum, ice);
gen.generate(u);
}
catch(const Slice::FileException& ex)