Finished dicts ;)

This commit is contained in:
Michael Hansen
2009-07-24 21:39:51 +00:00
parent 1737240a7c
commit 3d813075bd
3 changed files with 45 additions and 3 deletions

View File

@@ -271,6 +271,28 @@ static void print_const(PycRef<PycObject> obj)
printf("]"); printf("]");
} }
break; break;
case PycObject::TYPE_DICT:
{
printf("{");
PycDict::key_t keys = obj.cast<PycDict>()->keys();
PycDict::value_t values = obj.cast<PycDict>()->values();
PycDict::key_t::iterator ki = keys.begin();
PycDict::value_t::iterator vi = values.begin();
if (ki != keys.end()) {
print_const(*ki);
printf(": ");
print_const(*vi);
while (++ki != keys.end()) {
++vi;
printf(", ");
print_const(*ki);
printf(": ");
print_const(*vi);
}
}
printf("}");
}
break;
case PycObject::TYPE_NONE: case PycObject::TYPE_NONE:
printf("None"); printf("None");
break; break;

View File

@@ -87,6 +87,20 @@ void output_object(PycRef<PycObject> obj, PycModule* mod, int indent)
iprintf(indent, "]\n"); iprintf(indent, "]\n");
} }
break; break;
case PycObject::TYPE_DICT:
{
iprintf(indent, "{\n");
PycDict::key_t keys = obj.cast<PycDict>()->keys();
PycDict::value_t values = obj.cast<PycDict>()->values();
PycDict::key_t::iterator ki = keys.begin();
PycDict::value_t::iterator vi = values.begin();
while (ki != keys.end()) {
output_object(*ki, mod, indent + 1);
output_object(*vi, mod, indent + 2);
}
iprintf(indent, "}\n");
}
break;
case PycObject::TYPE_NONE: case PycObject::TYPE_NONE:
iprintf(indent, "None\n"); iprintf(indent, "None\n");
break; break;

View File

@@ -54,9 +54,15 @@ bool PycList::isEqual(PycRef<PycObject> obj) const
/* PycDict */ /* PycDict */
void PycDict::load(PycData* stream, PycModule* mod) void PycDict::load(PycData* stream, PycModule* mod)
{ {
m_size = stream->get32(); PycRef<PycObject> key, val;
for (int i=0; i<m_size; i++) for (;;) {
m_values.push_back(LoadObject(stream, mod)); key = LoadObject(stream, mod);
if (key == Pyc_NULL)
break;
val = LoadObject(stream, mod);
m_keys.push_back(key);
m_values.push_back(val);
}
} }
bool PycDict::isEqual(PycRef<PycObject> obj) const bool PycDict::isEqual(PycRef<PycObject> obj) const