From 27be90e7b734da6a6febc2fe3efe1a9c0ad9ea5d Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 20 Sep 2011 16:06:18 -0600 Subject: [PATCH] adjust cycle-detection valeu to avoid fixnum encoding Just in case. --- src/racket/src/read.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/racket/src/read.c b/src/racket/src/read.c index 310c9be95a..20d0b4d43c 100644 --- a/src/racket/src/read.c +++ b/src/racket/src/read.c @@ -4705,6 +4705,9 @@ static Scheme_Object *read_compact_k(void) return read_compact(port, p->ku.k.i1); } +/* never a valid symtab value: */ +#define SYMTAB_IN_PROGRESS SCHEME_MULTIPLE_VALUES + static Scheme_Object *read_compact(CPort *port, int use_stack) { #define BLK_BUF_SIZE 32 @@ -4746,13 +4749,13 @@ static Scheme_Object *read_compact(CPort *port, int use_stack) l = read_compact_number(port); RANGE_CHECK(l, < port->symtab_size); v = port->symtab[l]; - if (v == (Scheme_Object *)-1) { + if (v == SYMTAB_IN_PROGRESS) { /* there is a cycle */ scheme_ill_formed_code(port); - }; + } if (!v) { intptr_t save_pos = port->pos; - port->symtab[l] = (Scheme_Object *)-1; /* avoid cycles if marshaled form is broken: */ + port->symtab[l] = SYMTAB_IN_PROGRESS; /* avoid cycles if marshaled form is broken: */ port->pos = port->shared_offsets[l - 1]; v = read_compact(port, 0); port->pos = save_pos; @@ -5116,7 +5119,7 @@ static Scheme_Object *read_compact(CPort *port, int use_stack) (Scheme_Object *)port->delay_info); } else { intptr_t save_pos = port->pos; - port->symtab[l] = scheme_false; /* avoid cycles if marshaled form is broken: */ + port->symtab[l] = SYMTAB_IN_PROGRESS; /* avoid cycles if marshaled form is broken: */ port->pos = port->shared_offsets[l - 1]; v = read_compact(port, 0); port->pos = save_pos;