Yes, this seems to fix it, thanks.

Paul

On Thu, May 10, 2007 at 04:51:18PM +0900, Nobuyoshi Nakada wrote:
> Hi,
> 
> At Thu, 3 May 2007 04:42:53 +0900,
> Paul Brannan wrote in [ruby-core:11073]:
> > The following program segfaults:
> > 
> > i = VM::InstructionSequence.compile('for a in b; end')
> > p i.to_a
> 
> Thank you, does this patch fix it?
> 
> 
> Index: iseq.c > =================================================================== > --- iseq.c (revision 12267) > +++ iseq.c (working copy) > @@ -1140,5 +1140,5 @@ iseq_data_to_ary(rb_iseq_t *iseq) > ID lid = iseq->local_table[i]; > if (lid) { > - rb_ary_push(locals, ID2SYM(lid)); > + if (rb_id2str(lid)) rb_ary_push(locals, ID2SYM(lid)); > } > else { > @@ -1181,8 +1181,8 @@ iseq_data_to_ary(rb_iseq_t *iseq) > /* body */ > for (seq = iseq->iseq; seq < iseq->iseq + iseq->size; ) { > - VALUE ary = rb_ary_new(); > VALUE insn = *seq++; > int j, len = insn_len(insn); > VALUE *nseq = seq + len - 1; > + VALUE ary = rb_ary_new2(len); > > rb_ary_push(ary, insn_syms[insn]); > Index: parse.y > =================================================================== > --- parse.y (revision 12268) > +++ parse.y (working copy) > @@ -388,5 +388,6 @@ static int local_id_gen(struct parser_p > static ID *local_tbl_gen(struct parser_params*); > #define local_tbl() local_tbl_gen(parser) > -static ID internal_id(void); > +static ID internal_id_gen(struct parser_params*); > +#define internal_id() internal_id_gen(parser) > > static void dyna_push_gen(struct parser_params*); > @@ -8271,7 +8272,8 @@ rb_gc_mark_symbols(void) > > static ID > -internal_id(void) > +internal_id_gen(struct parser_params *parser) > { > - return ID_INTERNAL | (++global_symbols.last_id << ID_SCOPE_SHIFT); > + int id = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars); > + return ID_INTERNAL | (id << ID_SCOPE_SHIFT); > } >
> > -- > Nobu Nakada