From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS12876 62.210.0.0/16 X-Spam-Status: No, score=-1.5 required=3.0 tests=BAYES_00,RCVD_IN_XBL shortcircuit=no autolearn=no version=3.3.2 X-Original-To: spew@80x24.org Received: from 80x24.org (exit2.telostor.ca [62.210.74.186]) by dcvr.yhbt.net (Postfix) with ESMTP id D39E81FA55 for ; Wed, 26 Nov 2014 08:02:49 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH 1/2] compile.c (iseq_calc_param_size): hoist out of iseq_set_arguments Date: Wed, 26 Nov 2014 08:02:44 +0000 Message-Id: X-Mailer: git-send-email 2.2.0.rc0.37.gf6f61cb List-Id: This will be reused for iseq loading. --- compile.c | 70 ++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/compile.c b/compile.c index 7a73ddf..5dc4787 100644 --- a/compile.c +++ b/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 && -- EW