Skip to content

Commit

Permalink
Fix to overwrite succ_block
Browse files Browse the repository at this point in the history
  • Loading branch information
yui-knk committed Apr 15, 2023
1 parent e7c6d26 commit 25d20fe
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 7 deletions.
2 changes: 1 addition & 1 deletion internal/parse.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ VALUE rb_ruby_parser_encoding(rb_parser_t *p);
int rb_ruby_parser_end_seen_p(rb_parser_t *p);
int rb_ruby_parser_set_yydebug(rb_parser_t *p, int flag);

int rb_reg_named_capture_assign_iter_impl(struct parser_params *p, const char *s, long len, void *enc, NODE *succ_block, const rb_code_location_t *loc);
int rb_reg_named_capture_assign_iter_impl(struct parser_params *p, const char *s, long len, void *enc, NODE **succ_block, const rb_code_location_t *loc);


#undef rb_encoding
Expand Down
6 changes: 3 additions & 3 deletions parse.y
Original file line number Diff line number Diff line change
Expand Up @@ -13601,7 +13601,7 @@ reg_fragment_check(struct parser_params* p, VALUE str, int options)

int
rb_reg_named_capture_assign_iter_impl(struct parser_params *p, const char *s, long len,
rb_encoding *enc, NODE *succ_block, const rb_code_location_t *loc)
rb_encoding *enc, NODE **succ_block, const rb_code_location_t *loc)
{
ID var;
NODE *node, *succ;
Expand All @@ -13615,10 +13615,10 @@ rb_reg_named_capture_assign_iter_impl(struct parser_params *p, const char *s, lo
if (!lvar_defined(p, var)) return ST_CONTINUE;
}
node = node_assign(p, assignable(p, var, 0, loc), NEW_LIT(ID2SYM(var), loc), NO_LEX_CTXT, loc);
succ = succ_block;
succ = *succ_block;
if (!succ) succ = NEW_BEGIN(0, loc);
succ = block_append(p, succ, node);
succ_block = succ;
*succ_block = succ;
return ST_CONTINUE;
}

Expand Down
5 changes: 2 additions & 3 deletions ruby_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ enc_symname_type(const char *name, long len, void *enc, unsigned int allowed_att
}

typedef struct {
struct parser_params* parser;
struct parser_params *parser;
rb_encoding *enc;
NODE *succ_block;
const rb_code_location_t *loc;
Expand All @@ -341,12 +341,11 @@ reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
struct parser_params* p = arg->parser;
rb_encoding *enc = arg->enc;
NODE *succ_block = arg->succ_block;
const rb_code_location_t *loc = arg->loc;
long len = name_end - name;
const char *s = (const char *)name;

return rb_reg_named_capture_assign_iter_impl(p, s, len, (void *)enc, succ_block, loc);
return rb_reg_named_capture_assign_iter_impl(p, s, len, (void *)enc, &arg->succ_block, loc);
}

static NODE *
Expand Down

0 comments on commit 25d20fe

Please sign in to comment.