ruby-changes:45424
From: nobu <ko1@a...>
Date: Thu, 2 Feb 2017 14:45:25 +0900 (JST)
Subject: [ruby-changes:45424] nobu:r57497 (trunk): compile.c: restore misc params
nobu 2017-02-02 14:45:22 +0900 (Thu, 02 Feb 2017) New Revision: 57497 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57497 Log: compile.c: restore misc params * compile.c (rb_iseq_build_from_ary): restore misc params. accurate stack depths cannot be calculated from dumped array. Modified files: trunk/compile.c Index: compile.c =================================================================== --- compile.c (revision 57496) +++ compile.c (revision 57497) @@ -6919,6 +6919,7 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L6919 { #define SYM(s) ID2SYM(rb_intern(#s)) int i, len; + unsigned int arg_size, local_size, stack_max; ID *tbl; struct st_table *labels_table = st_init_numtable(); VALUE labels_wrapper = Data_Wrap_Struct(0, 0, st_free_table, labels_table); @@ -6943,11 +6944,6 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L6944 } } - /* - * we currently ignore misc params, - * local_size, stack_size and param.size are all calculated - */ - #define INT_PARAM(F) int_param(&iseq->body->param.F, params, SYM(F)) if (INT_PARAM(lead_num)) { iseq->body->param.flags.has_lead = TRUE; @@ -6957,6 +6953,14 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L6953 if (INT_PARAM(rest_start)) iseq->body->param.flags.has_rest = TRUE; if (INT_PARAM(block_start)) iseq->body->param.flags.has_block = TRUE; #undef INT_PARAM + { +#define INT_PARAM(F) F = (int_param(&x, misc, SYM(F)) ? (unsigned int)x : 0) + int x; + INT_PARAM(arg_size); + INT_PARAM(local_size); + INT_PARAM(stack_max); +#undef INT_PARAM + } switch (TYPE(arg_opt_labels)) { case T_ARRAY: @@ -7012,6 +7016,10 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L7016 /* body */ iseq_build_from_ary_body(iseq, anchor, body, labels_wrapper); + + iseq->body->param.size = arg_size; + iseq->body->local_table_size = local_size; + iseq->body->stack_max = stack_max; } /* for parser */ -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/