summaryrefslogtreecommitdiff
path: root/cpp/src/slice2php/Main.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2009-08-27 10:18:06 -0700
committerMark Spruiell <mes@zeroc.com>2009-08-27 10:18:06 -0700
commit6e2eae8e4f9babd2881070a7301d85cf430cd970 (patch)
tree0cf9b8c1854fd62d39fe624954b9372715a69ac7 /cpp/src/slice2php/Main.cpp
parentUpdate patchs for db 4.7.25 (diff)
downloadice-6e2eae8e4f9babd2881070a7301d85cf430cd970.tar.bz2
ice-6e2eae8e4f9babd2881070a7301d85cf430cd970.tar.xz
ice-6e2eae8e4f9babd2881070a7301d85cf430cd970.zip
bug 4230: add support for enumerations as dictionary keys in PHP
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);