diff --git a/bytecode.cpp b/bytecode.cpp index 106e03b..6b32dea 100644 --- a/bytecode.cpp +++ b/bytecode.cpp @@ -271,6 +271,28 @@ static void print_const(PycRef obj) printf("]"); } break; + case PycObject::TYPE_DICT: + { + printf("{"); + PycDict::key_t keys = obj.cast()->keys(); + PycDict::value_t values = obj.cast()->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: printf("None"); break; diff --git a/pycdas.cpp b/pycdas.cpp index f670890..ebb4ca0 100644 --- a/pycdas.cpp +++ b/pycdas.cpp @@ -87,6 +87,20 @@ void output_object(PycRef obj, PycModule* mod, int indent) iprintf(indent, "]\n"); } break; + case PycObject::TYPE_DICT: + { + iprintf(indent, "{\n"); + PycDict::key_t keys = obj.cast()->keys(); + PycDict::value_t values = obj.cast()->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: iprintf(indent, "None\n"); break; diff --git a/sequence.cpp b/sequence.cpp index 758bfdc..81b3907 100644 --- a/sequence.cpp +++ b/sequence.cpp @@ -54,9 +54,15 @@ bool PycList::isEqual(PycRef obj) const /* PycDict */ void PycDict::load(PycData* stream, PycModule* mod) { - m_size = stream->get32(); - for (int i=0; i key, val; + for (;;) { + 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 obj) const