ruby-changes:44940
From: nobu <ko1@a...>
Date: Wed, 7 Dec 2016 17:44:40 +0900 (JST)
Subject: [ruby-changes:44940] nobu:r57013 (trunk): compile.c: remove dead code
nobu 2016-12-07 17:44:34 +0900 (Wed, 07 Dec 2016) New Revision: 57013 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57013 Log: compile.c: remove dead code * compile.c (DECL_ANCHOR, INIT_ANCHOR): make anchor name an array and unassignable. * compile.c (iseq_compile_each): ret is never 0. Modified files: trunk/compile.c Index: compile.c =================================================================== --- compile.c (revision 57012) +++ compile.c (revision 57013) @@ -404,9 +404,9 @@ do { \ https://github.com/ruby/ruby/blob/trunk/compile.c#L404 /* leave name uninitialized so that compiler warn if INIT_ANCHOR is * missing */ #define DECL_ANCHOR(name) \ - LINK_ANCHOR *name, name##_body__ = {{0,},} + LINK_ANCHOR name[1] = {{{0,},}} #define INIT_ANCHOR(name) \ - (name##_body__.last = &name##_body__.anchor, name = &name##_body__) + (name->last = &name->anchor) static inline VALUE freeze_hide_obj(VALUE obj) @@ -443,17 +443,17 @@ static INSN *new_insn_body(rb_iseq_t *is https://github.com/ruby/ruby/blob/trunk/compile.c#L443 static LABEL *new_label_body(rb_iseq_t *iseq, long line); static ADJUST *new_adjust_body(rb_iseq_t *iseq, LABEL *label, int line); -static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE * n, int); -static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor); -static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor); -static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor); +static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, NODE *n, int); +static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); +static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); +static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_set_local_table(rb_iseq_t *iseq, const ID *tbl); static int iseq_set_exception_local_table(rb_iseq_t *iseq); -static int iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE * node); +static int iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, NODE *node); -static int iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor); -static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor); +static int iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); +static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_set_exception_table(rb_iseq_t *iseq); static int iseq_set_optargs_table(rb_iseq_t *iseq); @@ -462,7 +462,7 @@ static int iseq_set_optargs_table(rb_ise https://github.com/ruby/ruby/blob/trunk/compile.c#L462 */ static void -verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *anchor) +verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *const anchor) { #if CPDEBUG int flag = 0; @@ -497,7 +497,7 @@ verify_list(ISEQ_ARG_DECLARE const char https://github.com/ruby/ruby/blob/trunk/compile.c#L497 * elem1, elem2 => elem1, elem2, elem */ static void -ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem) +ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor, LINK_ELEMENT *elem) { elem->prev = anchor->last; anchor->last->next = elem; @@ -509,7 +509,7 @@ ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *a https://github.com/ruby/ruby/blob/trunk/compile.c#L509 * elem1, before, elem2 => elem1, before, elem, elem2 */ static void -APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *before, LINK_ELEMENT *elem) +APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor, LINK_ELEMENT *before, LINK_ELEMENT *elem) { elem->prev = before; elem->next = before->next; @@ -900,19 +900,19 @@ REMOVE_ELEM(LINK_ELEMENT *elem) https://github.com/ruby/ruby/blob/trunk/compile.c#L900 } static LINK_ELEMENT * -FIRST_ELEMENT(LINK_ANCHOR *anchor) +FIRST_ELEMENT(LINK_ANCHOR *const anchor) { return anchor->anchor.next; } static LINK_ELEMENT * -LAST_ELEMENT(LINK_ANCHOR *anchor) +LAST_ELEMENT(LINK_ANCHOR *const anchor) { return anchor->last; } static LINK_ELEMENT * -POP_ELEMENT(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor) +POP_ELEMENT(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor) { LINK_ELEMENT *elem = anchor->last; anchor->last = anchor->last->prev; @@ -925,7 +925,7 @@ POP_ELEMENT(ISEQ_ARG_DECLARE LINK_ANCHOR https://github.com/ruby/ruby/blob/trunk/compile.c#L925 #endif static int -LIST_SIZE_ZERO(LINK_ANCHOR *anchor) +LIST_SIZE_ZERO(LINK_ANCHOR *const anchor) { if (anchor->anchor.next == 0) { return 1; @@ -943,7 +943,7 @@ LIST_SIZE_ZERO(LINK_ANCHOR *anchor) https://github.com/ruby/ruby/blob/trunk/compile.c#L943 * anc2: e4, e5 (broken) */ static void -APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2) +APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *const anc1, LINK_ANCHOR *const anc2) { if (anc2->anchor.next) { anc1->last->next = anc2->anchor.next; @@ -964,7 +964,7 @@ APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR https://github.com/ruby/ruby/blob/trunk/compile.c#L964 * anc2: e4, e5 (broken) */ static void -INSERT_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2) +INSERT_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *const anc1, LINK_ANCHOR *const anc2) { if (anc2->anchor.next) { LINK_ELEMENT *first = anc1->anchor.next; @@ -987,7 +987,7 @@ INSERT_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR https://github.com/ruby/ruby/blob/trunk/compile.c#L987 #if CPDEBUG && 0 static void -debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor) +debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor) { LINK_ELEMENT *list = FIRST_ELEMENT(anchor); printf("----\n"); @@ -1126,7 +1126,7 @@ new_child_iseq(rb_iseq_t *iseq, NODE *no https://github.com/ruby/ruby/blob/trunk/compile.c#L1126 } static int -iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor) +iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { /* debugs("[compile step 2] (iseq_array_to_linkedlist)\n"); */ @@ -1289,7 +1289,8 @@ iseq_calc_param_size(rb_iseq_t *iseq) https://github.com/ruby/ruby/blob/trunk/compile.c#L1289 } static void -iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *optargs, const struct rb_args_info *args) +iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, + const struct rb_args_info *args) { NODE *node = args->kw_args; struct rb_iseq_param_keyword *keyword; @@ -1359,7 +1360,7 @@ iseq_set_arguments_keywords(rb_iseq_t *i https://github.com/ruby/ruby/blob/trunk/compile.c#L1360 } static int -iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args) +iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, NODE *node_args) { debugs("iseq_set_arguments: %s\n", node_args ? "" : "0"); @@ -1569,7 +1570,7 @@ get_ivar_ic_value(rb_iseq_t *iseq,ID id) https://github.com/ruby/ruby/blob/trunk/compile.c#L1570 ruby insn object list -> raw instruction sequence */ static int -iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor) +iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { struct iseq_line_info_entry *line_info_table; unsigned int last_line = 0; @@ -2457,7 +2458,7 @@ tailcallable_p(rb_iseq_t *iseq) https://github.com/ruby/ruby/blob/trunk/compile.c#L2458 } static int -iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor) +iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { LINK_ELEMENT *list; const int do_peepholeopt = ISEQ_COMPILE_DATA(iseq)->option->peephole_optimization; @@ -2540,7 +2541,7 @@ new_unified_insn(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L2541 * It's future work (if compile time was bottle neck). */ static int -iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor) +iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { #if OPT_INSTRUCTIONS_UNIFICATION LINK_ELEMENT *list; @@ -2654,7 +2655,7 @@ label_set_sc_state(LABEL *lobj, int stat https://github.com/ruby/ruby/blob/trunk/compile.c#L2655 #endif static int -iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor) +iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *const anchor) { #if OPT_STACK_CACHING LINK_ELEMENT *list; @@ -2751,7 +2752,7 @@ iseq_set_sequence_stackcaching(rb_iseq_t https://github.com/ruby/ruby/blob/trunk/compile.c#L2752 } static int -compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int *cntp) +compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int *cntp) { NODE *list = node->nd_next; VALUE lit = node->nd_lit; @@ -2793,7 +2794,7 @@ compile_dstr_fragments(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L2794 } static int -compile_dstr(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node) +compile_dstr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node) { int cnt; compile_dstr_fragments(iseq, ret, node, &cnt); @@ -2802,7 +2803,7 @@ compile_dstr(rb_iseq_t *iseq, LINK_ANCHO https://github.com/ruby/ruby/blob/trunk/compile.c#L2803 } static int -compile_dregx(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node) +compile_dregx(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node) { int cnt; compile_dstr_fragments(iseq, ret, node, &cnt); @@ -2811,7 +2812,7 @@ compile_dregx(rb_iseq_t *iseq, LINK_ANCH https://github.com/ruby/ruby/blob/trunk/compile.c#L2812 } static int -compile_flip_flop(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int again, +compile_flip_flop(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int again, LABEL *then_label, LABEL *else_label) { const int line = nd_line(node); @@ -2844,7 +2845,7 @@ compile_flip_flop(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L2845 } static int -compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * cond, +compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *cond, LABEL *then_label, LABEL *else_label) { switch (nd_type(cond)) { @@ -2907,7 +2908,9 @@ compile_branch_condition(rb_iseq_t *iseq https://github.com/ruby/ruby/blob/trunk/compile.c#L2908 } static int -compile_array_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE * const root_node, struct rb_call_info_kw_arg ** const kw_arg_ptr) +compile_array_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, + const NODE *const root_node, + struct rb_call_info_kw_arg **const kw_arg_ptr) { if (kw_arg_ptr == NULL) return FALSE; @@ -2959,7 +2962,7 @@ enum compile_array_type_t { https://github.com/ruby/ruby/blob/trunk/compile.c#L2962 }; static int -compile_array_(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root, +compile_array_(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE* node_root, enum compile_array_type_t type, struct rb_call_info_kw_arg **keywords_ptr, int popped) { NODE *node = node_root; @@ -3115,13 +3118,13 @@ compile_array_(rb_iseq_t *iseq, LINK_ANC https://github.com/ruby/ruby/blob/trunk/compile.c#L3118 } static VALUE -compile_array(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root, enum compile_array_type_t type) +compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE* node_root, enum compile_array_type_t type) { return compile_array_(iseq, ret, node_root, type, NULL, 0); } static VALUE -case_when_optimizable_literal(NODE * node) +case_when_optimizable_literal(NODE *node) { switch (nd_type(node)) { case NODE_LIT: { @@ -3149,7 +3152,8 @@ case_when_optimizable_literal(NODE * nod https://github.com/ruby/ruby/blob/trunk/compile.c#L3152 } static int -when_vals(rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, int only_special_literals, VALUE literals) +when_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, NODE *vals, + LABEL *l1, int only_special_literals, VALUE literals) { while (vals) { NODE* val = vals->nd_head; @@ -3187,7 +3191,7 @@ when_vals(rb_iseq_t *iseq, LINK_ANCHOR * https://github.com/ruby/ruby/blob/trunk/compile.c#L3191 } static int -compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node) +compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node) { switch (nd_type(node)) { case NODE_ATTRASGN: { @@ -3233,7 +3237,7 @@ compile_massign_lhs(rb_iseq_t *iseq, LIN https://github.com/ruby/ruby/blob/trunk/compile.c#L3237 } static void -compile_massign_opt_lhs(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *lhsn) +compile_massign_opt_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *lhsn) { if (lhsn) { compile_massign_opt_lhs(iseq, ret, lhsn->nd_next); @@ -3242,7 +3246,7 @@ compile_massign_opt_lhs(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/compile.c#L3246 } static int -compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *ret, +compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *rhsn, NODE *orig_lhsn) { VALUE mem[64]; @@ -3307,7 +3311,7 @@ compile_massign_opt(rb_iseq_t *iseq, LIN https://github.com/ruby/ruby/blob/trunk/compile.c#L3311 } static void -adjust_stack(rb_iseq_t *iseq, LINK_ANCHOR *ret, int line, int rlen, int llen) +adjust_stack(rb_iseq_t *iseq, LINK_ANCHOR *const ret, int line, int rlen, int llen) { if (rlen < llen) { do {ADD_INSN(ret, line, putnil);} while (++rlen < llen); @@ -3318,7 +3322,7 @@ adjust_stack(rb_iseq_t *iseq, LINK_ANCHO https://github.com/ruby/ruby/blob/trunk/compile.c#L3322 } static int -compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int popped) +compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int popped) { NODE *rhsn = node->nd_value; NODE *splatn = node->nd_args; @@ -3403,8 +3407,8 @@ compile_massign(rb_iseq_t *iseq, LINK_AN https://github.com/ruby/ruby/blob/trunk/compile.c#L3407 } static int -compile_colon2(rb_iseq_t *iseq, NODE * node, - LINK_ANCHOR *pref, LINK_ANCHOR *body) +compile_colon2(rb_iseq_t *iseq, NODE *node, + LINK_ANCHOR *const pref, LINK_ANCHOR *const body) { switch (nd_type(node)) { case NODE_CONST: @@ -3430,7 +3434,7 @@ compile_colon2(rb_iseq_t *iseq, NODE * n https://github.com/ruby/ruby/blob/trunk/compile.c#L3434 } static VALUE -compile_cpath(LINK_ANCHOR *ret, rb_iseq_t *iseq, NODE *cpath) +compile_cpath(LINK_ANCHOR *const ret, rb_iseq_t *iseq, NODE *cpath) { if (nd_type(cpath) == NODE_COLON3) { /* toplevel class ::Foo */ @@ -3454,7 +3458,7 @@ compile_cpath(LINK_ANCHOR *ret, rb_iseq_ https://github.com/ruby/ruby/blob/trunk/compile.c#L3458 #define defined_expr defined_expr0 static int -defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret, +defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, LABEL **lfinish, VALUE needstr) { enum defined_type expr_type = 0; @@ -3634,7 +3638,7 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHO https://github.com/ruby/ruby/blob/trunk/compile.c#L3638 #undef defined_expr static int -defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret, +defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, LABEL **lfinish, VALUE needstr) { LINK_ELEMENT *lcur = ret->last; @@ -3710,7 +3714,7 @@ add_ensure_range(rb_iseq_t *iseq, struct https://github.com/ruby/ruby/blob/trunk/compile.c#L3714 } static void -add_ensure_iseq(LINK_ANCHOR *ret, rb_iseq_t *iseq, int is_return) +add_ensure_iseq(LINK_ANCHOR *const ret, rb_iseq_t *iseq, int is_return) { struct iseq_compile_data_ensure_node_stack *enlp = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack; @@ -3745,7 +3749,8 @@ add_ensure_iseq(LINK_ANCHOR *ret, rb_ise https://github.com/ruby/ruby/blob/trunk/compile.c#L3749 } static VALUE -setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, unsigned int *flag, struct rb_call_info_kw_arg **keywords) +setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, NODE *argn, + unsigned int *flag, struct rb_call_info_kw_arg **keywords) { VALUE argc = INT2FIX(0); int nsplat = 0; @@ -3826,7 +3831,7 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR https://github.com/ruby/ruby/blob/trunk/compile.c#L3831 } static VALUE -build_postexe_iseq(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *body) +build_postexe_iseq(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *body) { int line = nd_line(body); VALUE argc = INT2FIX(0); @@ -3839,7 +3844,7 @@ build_postexe_iseq(rb_iseq_t *iseq, LINK https://github.com/ruby/ruby/blob/trunk/compile.c#L3844 } static void -compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node) +compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node) { NODE *vars; LINK_ELEMENT *last; @@ -3911,7 +3916,7 @@ number_literal_p(NODE *n) https://github.com/ruby/ruby/blob/trunk/compile.c#L3916 popped: This node will be popped */ static int -iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int popped) +iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int popped) { enum node_type type; LINK_ELEMENT *saved_last_element = 0; @@ -6230,7 +6235,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L6235 } /* check & remove redundant trace(line) */ - if (saved_last_element && ret /* ret can be 0 when error */ && + if (saved_last_element && ret->last == saved_last_element && ((INSN *)saved_last_element)->insn_id == BIN(trace)) { POP_ELEMENT(ret); @@ -6589,7 +6594,7 @@ iseq_build_callinfo_from_hash(rb_iseq_t https://github.com/ruby/ruby/blob/trunk/compile.c#L6594 } static int -iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor, +iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, VALUE body, VALUE labels_wrapper) { /* TODO: body should be frozen */ @@ -7011,7 +7016,7 @@ method_for_self(VALUE name, VALUE arg, r https://github.com/ruby/ruby/blob/trunk/compile.c#L7016 } static VALUE -for_self_aref(rb_iseq_t *iseq, LINK_ANCHOR *ret, VALUE a) +for_self_aref(rb_iseq_t *iseq, LINK_ANCHOR *const ret, VALUE a) { const accessor_args *const args = (void *)a; const int line = args->line; @@ -7026,7 +7031,7 @@ for_self_aref(rb_iseq_t *iseq, LINK_ANCH https://github.com/ruby/ruby/blob/trunk/compile.c#L7031 } static VALUE -for_self_aset(rb_iseq_t *iseq, LINK_ANCHOR *ret, VALUE a) +for_self_aset(rb_iseq_t *iseq, LINK_ANCHOR *const ret, VALUE a) { const accessor_args *const args = (void *)a; const int line = args->line; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/