summaryrefslogtreecommitdiff
path: root/cpp/src/slice2php/Main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2php/Main.cpp')
-rw-r--r--cpp/src/slice2php/Main.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/cpp/src/slice2php/Main.cpp b/cpp/src/slice2php/Main.cpp
index a51a7e17ef6..de7997f0339 100644
--- a/cpp/src/slice2php/Main.cpp
+++ b/cpp/src/slice2php/Main.cpp
@@ -863,6 +863,39 @@ CodeVisitor::visitSequence(const SequencePtr& p)
void
CodeVisitor::visitDictionary(const DictionaryPtr& p)
{
+ TypePtr keyType = p->keyType();
+ BuiltinPtr b = BuiltinPtr::dynamicCast(keyType);
+ if(b)
+ {
+ switch(b->kind())
+ {
+ case Slice::Builtin::KindBool:
+ case Slice::Builtin::KindByte:
+ case Slice::Builtin::KindShort:
+ case Slice::Builtin::KindInt:
+ case Slice::Builtin::KindLong:
+ case Slice::Builtin::KindString:
+ //
+ // These types are acceptable as dictionary keys.
+ //
+ break;
+
+ case Slice::Builtin::KindFloat:
+ case Slice::Builtin::KindDouble:
+ emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP");
+ break;
+
+ case Slice::Builtin::KindObject:
+ case Slice::Builtin::KindObjectProxy:
+ case Slice::Builtin::KindLocalObject:
+ assert(false);
+ }
+ }
+ else if(!EnumPtr::dynamicCast(keyType))
+ {
+ emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP");
+ }
+
string type = getTypeVar(p);
startNamespace(p);