mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
compile.c (iseq_calc_param_size): hoist out of iseq_set_arguments
This will be reused for iseq loading. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
18a7dade10
commit
b65c619058
2 changed files with 42 additions and 32 deletions
|
|
@ -1,3 +1,7 @@
|
|||
Thu Nov 27 07:11:00 2014 Eric Wong <e@80x24.org>
|
||||
|
||||
* compile.c (iseq_calc_param_size): hoist out of iseq_set_arguments
|
||||
|
||||
Wed Nov 26 22:28:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* include/ruby/ruby.h (rb_get_kwargs, rb_extract_keywords): export
|
||||
|
|
|
|||
70
compile.c
70
compile.c
|
|
@ -1120,6 +1120,43 @@ get_dyna_var_idx(rb_iseq_t *iseq, ID id, int *level, int *ls)
|
|||
return idx;
|
||||
}
|
||||
|
||||
static void
|
||||
iseq_calc_param_size(rb_iseq_t *iseq)
|
||||
{
|
||||
if (iseq->param.flags.has_opt ||
|
||||
iseq->param.flags.has_post ||
|
||||
iseq->param.flags.has_rest ||
|
||||
iseq->param.flags.has_block ||
|
||||
iseq->param.flags.has_kw ||
|
||||
iseq->param.flags.has_kwrest) {
|
||||
|
||||
if (iseq->param.flags.has_block) {
|
||||
iseq->param.size = iseq->param.block_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_kwrest) {
|
||||
iseq->param.size = iseq->param.keyword->rest_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_kw) {
|
||||
iseq->param.size = iseq->param.keyword->bits_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_post) {
|
||||
iseq->param.size = iseq->param.post_start + iseq->param.post_num;
|
||||
}
|
||||
else if (iseq->param.flags.has_rest) {
|
||||
iseq->param.size = iseq->param.rest_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_opt) {
|
||||
iseq->param.size = iseq->param.lead_num + iseq->param.opt_num;
|
||||
}
|
||||
else {
|
||||
rb_bug("unreachable");
|
||||
}
|
||||
}
|
||||
else {
|
||||
iseq->param.size = iseq->param.lead_num;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
|
||||
{
|
||||
|
|
@ -1267,38 +1304,7 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
|
|||
iseq->param.flags.has_block = TRUE;
|
||||
}
|
||||
|
||||
if (iseq->param.flags.has_opt ||
|
||||
iseq->param.flags.has_post ||
|
||||
iseq->param.flags.has_rest ||
|
||||
iseq->param.flags.has_block ||
|
||||
iseq->param.flags.has_kw ||
|
||||
iseq->param.flags.has_kwrest) {
|
||||
|
||||
if (iseq->param.flags.has_block) {
|
||||
iseq->param.size = iseq->param.block_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_kwrest) {
|
||||
iseq->param.size = iseq->param.keyword->rest_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_kw) {
|
||||
iseq->param.size = iseq->param.keyword->bits_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_post) {
|
||||
iseq->param.size = iseq->param.post_start + iseq->param.post_num;
|
||||
}
|
||||
else if (iseq->param.flags.has_rest) {
|
||||
iseq->param.size = iseq->param.rest_start + 1;
|
||||
}
|
||||
else if (iseq->param.flags.has_opt) {
|
||||
iseq->param.size = iseq->param.lead_num + iseq->param.opt_num;
|
||||
}
|
||||
else {
|
||||
rb_bug("unreachable");
|
||||
}
|
||||
}
|
||||
else {
|
||||
iseq->param.size = iseq->param.lead_num;
|
||||
}
|
||||
iseq_calc_param_size(iseq);
|
||||
|
||||
if (iseq->type == ISEQ_TYPE_BLOCK) {
|
||||
if (iseq->param.flags.has_opt == FALSE &&
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue