static VALUE initialize_params(VALUE vparams, VALUE parser, VALUE lexer, VALUE lexmid) { struct cparse_params *v; Data_Get_Struct(vparams, struct cparse_params, v); v->value_v = vparams; v->parser = parser; v->lexer = lexer; if (! NIL_P(lexmid)) v->lexmid = value_to_id(lexmid); v->debug = RTEST(rb_ivar_get(parser, id_yydebug)); Check_Type(arg, T_ARRAY); if (!(13 <= RARRAY_LEN(arg) && RARRAY_LEN(arg) <= 14)) rb_raise(RaccBug, "[Racc Bug] wrong arg.size %ld", RARRAY_LEN(arg)); v->action_table = assert_array (rb_ary_entry(arg, 0)); v->action_check = assert_array (rb_ary_entry(arg, 1)); v->action_default = assert_array (rb_ary_entry(arg, 2)); v->action_pointer = assert_array (rb_ary_entry(arg, 3)); v->goto_table = assert_array (rb_ary_entry(arg, 4)); v->goto_check = assert_array (rb_ary_entry(arg, 5)); v->goto_default = assert_array (rb_ary_entry(arg, 6)); v->goto_pointer = assert_array (rb_ary_entry(arg, 7)); v->nt_base = assert_integer(rb_ary_entry(arg, 8)); v->reduce_table = assert_array (rb_ary_entry(arg, 9)); v->token_table = assert_hash (rb_ary_entry(arg, 10)); v->shift_n = assert_integer(rb_ary_entry(arg, 11)); v->reduce_n = assert_integer(rb_ary_entry(arg, 12)); if (RARRAY_LEN(arg) > 13) { v->use_result_var = RTEST(rb_ary_entry(arg, 13)); } else { v->use_result_var = Qtrue; } v->use_result_var = NUM2INT(rb_ivar_get(parser, id_use_result)); /* if (RARRAY_LEN(arg) > 13) { */ /* v->use_result_var = RTEST(RARRAY_PTR(arg)[13]); */ /* } */ /* else { */ /* v->use_result_var = Qtrue; */ /* } */ PUSH(v->state, INT2FIX(0)); rb_ivar_set(parser, id_errstatus, LONG2NUM(v->errstatus)); rb_iv_set(parser, "@vstack", v->vstack); if (v->debug) { rb_iv_set(parser, "@tstack", v->tstack); } else { rb_iv_set(parser, "@tstack", Qnil); } return vparams; }
static VALUE initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lexmid) { struct cparse_params *v; Data_Get_Struct(vparams, struct cparse_params, v); v->value_v = vparams; v->parser = parser; v->lexer = lexer; if (! NIL_P(lexmid)) v->lexmid = value_to_id(lexmid); v->debug = RTEST(rb_ivar_get(parser, id_yydebug)); Check_Type(arg, T_ARRAY); if (!(13 <= RARRAY_LEN(arg) && RARRAY_LEN(arg) <= 14)) rb_raise(RaccBug, "[Racc Bug] wrong arg.size %ld", RARRAY_LEN(arg)); v->action_table = assert_array (RARRAY_PTR(arg)[ 0]); v->action_check = assert_array (RARRAY_PTR(arg)[ 1]); v->action_default = assert_array (RARRAY_PTR(arg)[ 2]); v->action_pointer = assert_array (RARRAY_PTR(arg)[ 3]); v->goto_table = assert_array (RARRAY_PTR(arg)[ 4]); v->goto_check = assert_array (RARRAY_PTR(arg)[ 5]); v->goto_default = assert_array (RARRAY_PTR(arg)[ 6]); v->goto_pointer = assert_array (RARRAY_PTR(arg)[ 7]); v->nt_base = assert_integer(RARRAY_PTR(arg)[ 8]); v->reduce_table = assert_array (RARRAY_PTR(arg)[ 9]); v->token_table = assert_hash (RARRAY_PTR(arg)[10]); v->shift_n = assert_integer(RARRAY_PTR(arg)[11]); v->reduce_n = assert_integer(RARRAY_PTR(arg)[12]); if (RARRAY_LEN(arg) > 13) { v->use_result_var = RTEST(RARRAY_PTR(arg)[13]); } else { v->use_result_var = Qtrue; } v->tstack = v->debug ? NEW_STACK() : Qnil; v->vstack = NEW_STACK(); v->state = NEW_STACK(); v->curstate = 0; PUSH(v->state, INT2FIX(0)); v->t = INT2FIX(FINAL_TOKEN + 1); /* must not init to FINAL_TOKEN */ v->nerr = 0; v->errstatus = 0; rb_ivar_set(parser, id_errstatus, LONG2NUM(v->errstatus)); v->retval = Qnil; v->fin = 0; v->lex_is_iterator = Qfalse; rb_iv_set(parser, "@vstack", v->vstack); if (v->debug) { rb_iv_set(parser, "@tstack", v->tstack); } else { rb_iv_set(parser, "@tstack", Qnil); } return vparams; }