bugfix: recursive record objects break the write procedure
This commit is contained in:
parent
3ac392628e
commit
8e1d16e961
|
@ -172,7 +172,8 @@ traverse(pic_state *pic, pic_value obj, struct writer_control *p)
|
||||||
switch (pic_type(pic, obj)) {
|
switch (pic_type(pic, obj)) {
|
||||||
case PIC_TYPE_PAIR:
|
case PIC_TYPE_PAIR:
|
||||||
case PIC_TYPE_VECTOR:
|
case PIC_TYPE_VECTOR:
|
||||||
case PIC_TYPE_DICT: {
|
case PIC_TYPE_DICT:
|
||||||
|
case PIC_TYPE_RECORD: {
|
||||||
|
|
||||||
if (! pic_weak_has(pic, shared, obj)) {
|
if (! pic_weak_has(pic, shared, obj)) {
|
||||||
/* first time */
|
/* first time */
|
||||||
|
@ -188,13 +189,16 @@ traverse(pic_state *pic, pic_value obj, struct writer_control *p)
|
||||||
for (i = 0; i < len; ++i) {
|
for (i = 0; i < len; ++i) {
|
||||||
traverse(pic, pic_vec_ref(pic, obj, i), p);
|
traverse(pic, pic_vec_ref(pic, obj, i), p);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (pic_dict_p(pic, obj)) {
|
||||||
/* dictionary */
|
/* dictionary */
|
||||||
int it = 0;
|
int it = 0;
|
||||||
pic_value val;
|
pic_value val;
|
||||||
while (pic_dict_next(pic, obj, &it, NULL, &val)) {
|
while (pic_dict_next(pic, obj, &it, NULL, &val)) {
|
||||||
traverse(pic, val, p);
|
traverse(pic, val, p);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
/* record */
|
||||||
|
traverse(pic, pic_record_datum(pic, obj), p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->op == OP_WRITE) {
|
if (p->op == OP_WRITE) {
|
||||||
|
|
|
@ -21,21 +21,21 @@ enum {
|
||||||
PIC_TYPE_FALSE = 9,
|
PIC_TYPE_FALSE = 9,
|
||||||
PIC_IVAL_END = 10,
|
PIC_IVAL_END = 10,
|
||||||
/* -------------------- */
|
/* -------------------- */
|
||||||
PIC_TYPE_STRING = 16,
|
PIC_TYPE_SYMBOL = 16,
|
||||||
PIC_TYPE_VECTOR = 17,
|
PIC_TYPE_STRING = 17,
|
||||||
PIC_TYPE_BLOB = 18,
|
PIC_TYPE_BLOB = 18,
|
||||||
PIC_TYPE_PORT = 20,
|
PIC_TYPE_DATA = 19,
|
||||||
PIC_TYPE_ERROR = 21,
|
PIC_TYPE_PAIR = 20,
|
||||||
PIC_TYPE_DATA = 24,
|
PIC_TYPE_VECTOR = 21,
|
||||||
PIC_TYPE_DICT = 25,
|
PIC_TYPE_DICT = 22,
|
||||||
PIC_TYPE_WEAK = 26,
|
PIC_TYPE_RECORD = 23,
|
||||||
PIC_TYPE_RECORD = 27,
|
PIC_TYPE_WEAK = 24,
|
||||||
PIC_TYPE_SYMBOL = 28,
|
PIC_TYPE_PORT = 25,
|
||||||
PIC_TYPE_PAIR = 29,
|
PIC_TYPE_ERROR = 26,
|
||||||
PIC_TYPE_FRAME = 30,
|
PIC_TYPE_IREP = 27,
|
||||||
PIC_TYPE_PROC_FUNC = 32,
|
PIC_TYPE_FRAME = 28,
|
||||||
PIC_TYPE_PROC_IREP = 33,
|
PIC_TYPE_PROC_FUNC = 29,
|
||||||
PIC_TYPE_IREP = 34,
|
PIC_TYPE_PROC_IREP = 30,
|
||||||
PIC_TYPE_MAX = 63
|
PIC_TYPE_MAX = 63
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue