Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 64b4552

Browse files
committed
Add marshalling for dictionaries.
1 parent 6548140 commit 64b4552

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

Python/marshal.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,22 @@ wr_object(v, fp)
125125
wr_object(getlistitem(v, (int)i), fp);
126126
}
127127
}
128+
else if (is_dictobject(v)) {
129+
wr_byte(TYPE_DICT, fp);
130+
/* This one is NULL object terminated! */
131+
n = getdictsize(v);
132+
for (i = 0; i < n; i++) {
133+
object *key, *val;
134+
extern object *getdict2key();
135+
key = getdict2key(v, (int)i);
136+
if (key != NULL) {
137+
val = dictlookup(v, getstringvalue(key));
138+
wr_object(key, fp);
139+
wr_object(val, fp);
140+
}
141+
}
142+
wr_object((object *)NULL, fp);
143+
}
128144
else if (is_codeobject(v)) {
129145
codeobject *co = (codeobject *)v;
130146
wr_byte(TYPE_CODE, fp);
@@ -261,6 +277,22 @@ rd_object(fp)
261277
setlistitem(v, (int)i, rd_object(fp));
262278
return v;
263279

280+
case TYPE_DICT:
281+
v = newdictobject();
282+
if (v == NULL)
283+
return NULL;
284+
for (;;) {
285+
object *key, *val;
286+
key = rd_object(fp);
287+
if (key == NULL)
288+
break;
289+
val = rd_object(fp);
290+
dict2insert(v, key, val);
291+
DECREF(key);
292+
XDECREF(val);
293+
}
294+
return v;
295+
264296
case TYPE_CODE:
265297
{
266298
object *code = rd_object(fp);
@@ -288,7 +320,7 @@ rd_object(fp)
288320
}
289321
}
290322

291-
/* The rest is meant to test only... */
323+
/* And an interface for Python programs... */
292324

293325
static object *
294326
dump(self, args)

0 commit comments

Comments
 (0)