From 8d77972334187b72a245e6857fe849208b773b0d Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 16 Aug 2006 23:12:40 +0000 Subject: [PATCH] fix unmarshalling of syntax objects with a renaming fboth from and to a module binding svn: r4075 --- src/mzscheme/src/stxobj.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index 05b90be44d..953b609be1 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -4585,6 +4585,15 @@ static Scheme_Object *datum_to_wraps(Scheme_Object *w, if (SCHEME_MARKP(a)) { kfirst = unmarshal_mark(a, rns); } else { + Scheme_Object *bdg = NULL; + + if (SCHEME_VECTORP(a)) { + if (SCHEME_VEC_SIZE(a) != 2) return_NULL; + bdg = SCHEME_VEC_ELS(a)[1]; + if (!SCHEME_SYMBOLP(bdg)) return_NULL; + a = SCHEME_VEC_ELS(a)[0]; + } + for (; SCHEME_PAIRP(a); a = SCHEME_CDR(a)) { kp = CONS(unmarshal_mark(SCHEME_CAR(a), rns), scheme_null); if (!klast) @@ -4593,7 +4602,19 @@ static Scheme_Object *datum_to_wraps(Scheme_Object *w, SCHEME_CDR(klast) = kp; klast = kp; } - if (!SCHEME_NULLP(a)) return_NULL; + if (!SCHEME_NULLP(a)) { + if (bdg && SCHEME_MARKP(a) && SCHEME_NULLP(kfirst)) + kfirst = unmarshal_mark(a, rns); + else + return_NULL; + } + + if (bdg) { + a = scheme_make_vector(2, NULL); + SCHEME_VEC_ELS(a)[0] = kfirst; + SCHEME_VEC_ELS(a)[1] = bdg; + kfirst = a; + } } ll = CONS(CONS(kfirst, kkey), ll);