From eddd3249793b3b307da2fe7734d5923cd238a35b Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 25 Apr 2020 14:29:58 +0900 Subject: Add `MRB_SYM()` for inline symbols. --- mrbgems/mruby-compiler/core/codegen.c | 16 ++++++++-------- mrbgems/mruby-compiler/core/parse.y | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index c64ffc473..c0d130182 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -737,7 +737,7 @@ for_body(codegen_scope *s, node *tree) genop_2(s, OP_BLOCK, cursp(), s->irep->rlen-1); push();pop(); /* space for a block */ pop(); - idx = new_sym(s, mrb_intern_lit(s->mrb, "each")); + idx = new_sym(s, MRB_SYM(each)); genop_3(s, OP_SENDB, cursp(), idx, 0); } @@ -1489,14 +1489,14 @@ codegen(codegen_scope *s, node *tree, int val) gen_move(s, cursp(), exc, 0); push_n(2); pop_n(2); /* space for one arg and a block */ pop(); - genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1); + genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1); } else { if (n4) { codegen(s, n4->car, VAL); } else { - genop_2(s, OP_GETCONST, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "StandardError"))); + genop_2(s, OP_GETCONST, cursp(), new_sym(s, MRB_SYM(StandardError))); push(); } pop(); @@ -1739,7 +1739,7 @@ codegen(codegen_scope *s, node *tree, int val) gen_move(s, cursp(), head, 0); push(); push(); pop(); pop(); pop(); if (nint(n->car->car) == NODE_SPLAT) { - genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1); + genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1); } else { genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "===")), 1); @@ -2266,7 +2266,7 @@ codegen(codegen_scope *s, node *tree, int val) pop_n(n+1); genop_2S(s, OP_BLKPUSH, cursp(), (ainfo<<4)|(lv & 0xf)); if (sendv) n = CALL_MAXARGS; - genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "call")), n); + genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(call)), n); if (val) push(); } break; @@ -2618,7 +2618,7 @@ codegen(codegen_scope *s, node *tree, int val) { node *n; int ai = mrb_gc_arena_save(s->mrb); - int sym = new_sym(s, mrb_intern_lit(s->mrb, "Kernel")); + int sym = new_sym(s, MRB_SYM(Kernel)); genop_1(s, OP_LOADSELF, cursp()); push(); @@ -2698,7 +2698,7 @@ codegen(codegen_scope *s, node *tree, int val) } push(); /* space for a block */ pop_n(argc+2); - sym = new_sym(s, mrb_intern_lit(s->mrb, "compile")); + sym = new_sym(s, MRB_SYM(compile)); genop_3(s, OP_SEND, cursp(), sym, argc); mrb_gc_arena_restore(s->mrb, ai); push(); @@ -2752,7 +2752,7 @@ codegen(codegen_scope *s, node *tree, int val) } push(); /* space for a block */ pop_n(argc+2); - sym = new_sym(s, mrb_intern_lit(s->mrb, "compile")); + sym = new_sym(s, MRB_SYM(compile)); genop_3(s, OP_SEND, cursp(), sym, argc); mrb_gc_arena_restore(s->mrb, ai); push(); diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 9de45a536..393d6b098 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -311,14 +311,14 @@ static void local_add_blk(parser_state *p, mrb_sym blk) { /* allocate register for block */ - local_add_f(p, blk ? blk : mrb_intern_lit(p->mrb, "&")); + local_add_f(p, blk ? blk : intern_lit("&")); } static void local_add_kw(parser_state *p, mrb_sym kwd) { /* allocate register for keywords hash */ - local_add_f(p, kwd ? kwd : mrb_intern_lit(p->mrb, "**")); + local_add_f(p, kwd ? kwd : intern_lit("**")); } static node* @@ -932,13 +932,13 @@ new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b) static node* new_imaginary(parser_state *p, node *imaginary) { - return new_call(p, new_const(p, intern_lit("Kernel")), intern_lit("Complex"), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1); + return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Complex), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1); } static node* new_rational(parser_state *p, node *rational) { - return new_call(p, new_const(p, intern_lit("Kernel")), intern_lit("Rational"), list1(list1(rational)), 1); + return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Rational), list1(list1(rational)), 1); } /* (:int . i) */ @@ -3010,11 +3010,11 @@ method_call : operation paren_args } | primary_value call_op paren_args { - $$ = new_call(p, $1, intern_lit("call"), $3, $2); + $$ = new_call(p, $1, MRB_SYM(call), $3, $2); } | primary_value tCOLON2 paren_args { - $$ = new_call(p, $1, intern_lit("call"), $3, tCOLON2); + $$ = new_call(p, $1, MRB_SYM(call), $3, tCOLON2); } | keyword_super paren_args { @@ -3580,7 +3580,7 @@ f_args : f_arg ',' f_optarg ',' f_rest_arg opt_args_tail } | /* none */ { - local_add_f(p, mrb_intern_lit(p->mrb, "&")); + local_add_f(p, intern_lit("&")); $$ = new_args(p, 0, 0, 0, 0, 0); } ; @@ -3704,7 +3704,7 @@ f_rest_arg : restarg_mark tIDENTIFIER } | restarg_mark { - local_add_f(p, mrb_intern_lit(p->mrb, "*")); + local_add_f(p, intern_lit("*")); $$ = -1; } ; -- cgit v1.2.3 From e3e559696027b7c65fa27b26223c6aabd08faa76 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 15 May 2020 17:41:00 +0900 Subject: Use `MRB_OPSYM()` instead of `mrb_intern_lit()`. --- mrbgems/mruby-compiler/core/codegen.c | 8 ++-- mrbgems/mruby-compiler/core/parse.y | 74 +++++++++++++++++------------------ src/array.c | 4 +- src/kernel.c | 2 +- src/proc.c | 2 +- src/vm.c | 24 ++++++------ 6 files changed, 57 insertions(+), 57 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index c0d130182..eae1895a6 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1742,7 +1742,7 @@ codegen(codegen_scope *s, node *tree, int val) genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1); } else { - genop_3(s, OP_SEND, cursp(), new_sym(s, mrb_intern_lit(s->mrb, "===")), 1); + genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_OPSYM(eqq)), 1); } } else { @@ -2545,7 +2545,7 @@ codegen(codegen_scope *s, node *tree, int val) default: if (val) { - int sym = new_sym(s, mrb_intern_lit(s->mrb, "-@")); + int sym = new_sym(s, MRB_OPSYM(minus)); codegen(s, tree, VAL); pop(); genop_3(s, OP_SEND, cursp(), sym, 0); @@ -2637,7 +2637,7 @@ codegen(codegen_scope *s, node *tree, int val) } push(); /* for block */ pop_n(3); - sym = new_sym(s, mrb_intern_lit(s->mrb, "`")); + sym = new_sym(s, MRB_OPSYM(tick)); /* ` */ genop_3(s, OP_SEND, cursp(), sym, 1); if (val) push(); mrb_gc_arena_restore(s->mrb, ai); @@ -2657,7 +2657,7 @@ codegen(codegen_scope *s, node *tree, int val) genop_2(s, OP_STRING, cursp(), off); push(); push(); pop_n(3); - sym = new_sym(s, mrb_intern_lit(s->mrb, "`")); + sym = new_sym(s, MRB_OPSYM(tick)); /* ` */ genop_3(s, OP_SEND, cursp(), sym, 1); if (val) push(); mrb_gc_arena_restore(s->mrb, ai); diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 393d6b098..806032e22 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -311,14 +311,14 @@ static void local_add_blk(parser_state *p, mrb_sym blk) { /* allocate register for block */ - local_add_f(p, blk ? blk : intern_lit("&")); + local_add_f(p, blk ? blk : MRB_OPSYM(and)); } static void local_add_kw(parser_state *p, mrb_sym kwd) { /* allocate register for keywords hash */ - local_add_f(p, kwd ? kwd : intern_lit("**")); + local_add_f(p, kwd ? kwd : MRB_OPSYM(pow)); } static node* @@ -1671,7 +1671,7 @@ command_asgn : lhs '=' command_rhs } | primary_value '[' opt_call_args ']' tOP_ASGN command_rhs { - $$ = new_op_asgn(p, new_call(p, $1, intern_lit("[]"), $3, '.'), $5, $6); + $$ = new_op_asgn(p, new_call(p, $1, MRB_OPSYM(aref), $3, '.'), $5, $6); } | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { @@ -1902,7 +1902,7 @@ mlhs_node : variable } | primary_value '[' opt_call_args ']' { - $$ = new_call(p, $1, intern_lit("[]"), $3, '.'); + $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.'); } | primary_value call_op tIDENTIFIER { @@ -1941,7 +1941,7 @@ lhs : variable } | primary_value '[' opt_call_args ']' { - $$ = new_call(p, $1, intern_lit("[]"), $3, '.'); + $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.'); } | primary_value call_op tIDENTIFIER { @@ -2029,36 +2029,36 @@ undef_list : fsym } ; -op : '|' { $$ = intern_lit("|"); } - | '^' { $$ = intern_lit("^"); } - | '&' { $$ = intern_lit("&"); } - | tCMP { $$ = intern_lit("<=>"); } - | tEQ { $$ = intern_lit("=="); } - | tEQQ { $$ = intern_lit("==="); } - | tMATCH { $$ = intern_lit("=~"); } - | tNMATCH { $$ = intern_lit("!~"); } - | '>' { $$ = intern_lit(">"); } - | tGEQ { $$ = intern_lit(">="); } - | '<' { $$ = intern_lit("<"); } - | tLEQ { $$ = intern_lit("<="); } - | tNEQ { $$ = intern_lit("!="); } - | tLSHFT { $$ = intern_lit("<<"); } - | tRSHFT { $$ = intern_lit(">>"); } - | '+' { $$ = intern_lit("+"); } - | '-' { $$ = intern_lit("-"); } - | '*' { $$ = intern_lit("*"); } - | tSTAR { $$ = intern_lit("*"); } - | '/' { $$ = intern_lit("/"); } - | '%' { $$ = intern_lit("%"); } - | tPOW { $$ = intern_lit("**"); } - | tDSTAR { $$ = intern_lit("**"); } - | '!' { $$ = intern_lit("!"); } - | '~' { $$ = intern_lit("~"); } - | tUPLUS { $$ = intern_lit("+@"); } - | tUMINUS { $$ = intern_lit("-@"); } - | tAREF { $$ = intern_lit("[]"); } - | tASET { $$ = intern_lit("[]="); } - | '`' { $$ = intern_lit("`"); } +op : '|' { $$ = MRB_OPSYM(or); } + | '^' { $$ = MRB_OPSYM(xor); } + | '&' { $$ = MRB_OPSYM(and); } + | tCMP { $$ = MRB_OPSYM(cmp); } + | tEQ { $$ = MRB_OPSYM(eq); } + | tEQQ { $$ = MRB_OPSYM(eqq); } + | tMATCH { $$ = MRB_OPSYM(match); } + | tNMATCH { $$ = MRB_OPSYM(nmatch); } + | '>' { $$ = MRB_OPSYM(gt); } + | tGEQ { $$ = MRB_OPSYM(ge); } + | '<' { $$ = MRB_OPSYM(lt); } + | tLEQ { $$ = MRB_OPSYM(le); } + | tNEQ { $$ = MRB_OPSYM(neq); } + | tLSHFT { $$ = MRB_OPSYM(lshift); } + | tRSHFT { $$ = MRB_OPSYM(rshift); } + | '+' { $$ = MRB_OPSYM(add); } + | '-' { $$ = MRB_OPSYM(sub); } + | '*' { $$ = MRB_OPSYM(mul); } + | tSTAR { $$ = MRB_OPSYM(mul); } + | '/' { $$ = MRB_OPSYM(div); } + | '%' { $$ = MRB_OPSYM(mod); } + | tPOW { $$ = MRB_OPSYM(pow); } + | tDSTAR { $$ = MRB_OPSYM(pow); } + | '!' { $$ = MRB_OPSYM(not); } + | '~' { $$ = MRB_OPSYM(neg); } + | tUPLUS { $$ = MRB_OPSYM(plus); } + | tUMINUS { $$ = MRB_OPSYM(minus); } + | tAREF { $$ = MRB_OPSYM(aref); } + | tASET { $$ = MRB_OPSYM(aset); } + | '`' { $$ = MRB_OPSYM(tick); } ; reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__ @@ -2288,8 +2288,8 @@ paren_args : '(' opt_call_args ')' | '(' tDOT3 rparen { #if 1 - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_OPSYM(mul); + mrb_sym b = MRB_OPSYM(and); if (local_var_p(p, r) && local_var_p(p, b)) { $$ = cons(list1(new_splat(p, new_lvar(p, r))), new_block_arg(p, new_lvar(p, b))); diff --git a/src/array.c b/src/array.c index 567ed7d8b..02d792657 100644 --- a/src/array.c +++ b/src/array.c @@ -1086,7 +1086,7 @@ mrb_ary_splat(mrb_state *mrb, mrb_value v) return mrb_obj_value(a); } - if (!mrb_respond_to(mrb, v, mrb_intern_lit(mrb, "to_a"))) { + if (!mrb_respond_to(mrb, v, MRB_SYM(to_a))) { return mrb_ary_new_from_values(mrb, 1, &v); } @@ -1314,7 +1314,7 @@ init_ary_each(mrb_state *mrb, struct RClass *ary) each_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*5); each_irep->syms[0] = MRB_SYM(each); each_irep->syms[1] = MRB_SYM(to_enum); - each_irep->syms[2] = mrb_intern_lit(mrb, "[]"); + each_irep->syms[2] = MRB_OPSYM(aref); each_irep->syms[3] = MRB_SYM(call); each_irep->syms[4] = MRB_SYM(length); each_irep->slen = 5; diff --git a/src/kernel.c b/src/kernel.c index e192ed752..d2074c16b 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -766,7 +766,7 @@ mrb_obj_ceqq(mrb_state *mrb, mrb_value self) { mrb_value v = mrb_get_arg1(mrb); mrb_int i, len; - mrb_sym eqq = mrb_intern_lit(mrb, "==="); + mrb_sym eqq = MRB_OPSYM(eqq); mrb_value ary; if (mrb_array_p(self)) { diff --git a/src/proc.c b/src/proc.c index 743e9610c..bb678558d 100644 --- a/src/proc.c +++ b/src/proc.c @@ -326,7 +326,7 @@ mrb_init_proc(mrb_state *mrb) irep_obj->data = NULL; MRB_METHOD_FROM_PROC(m, p); mrb_define_method_raw(mrb, mrb->proc_class, MRB_SYM(call), m); - mrb_define_method_raw(mrb, mrb->proc_class, mrb_intern_lit(mrb, "[]"), m); + mrb_define_method_raw(mrb, mrb->proc_class, MRB_OPSYM(aref), m); mrb_define_class_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.2.6 */ mrb_define_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.3.27 */ diff --git a/src/vm.c b/src/vm.c index d032f2794..5c305908e 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2142,7 +2142,7 @@ RETRY_TRY_BLOCK: OP_MATH_CASE_STRING_##op_name(); \ default: \ c = 1; \ - mid = mrb_intern_lit(mrb, MRB_STRINGIZE(OP_MATH_OP_##op_name)); \ + mid = MRB_OPSYM(op_name); \ goto L_SEND_SYM; \ } \ NEXT; @@ -2229,7 +2229,7 @@ RETRY_TRY_BLOCK: #endif default: c = 1; - mid = mrb_intern_lit(mrb, "/"); + mid = MRB_OPSYM(div); goto L_SEND_SYM; } @@ -2255,7 +2255,7 @@ RETRY_TRY_BLOCK: default: \ SET_INT_VALUE(regs[a+1], b); \ c = 1; \ - mid = mrb_intern_lit(mrb, MRB_STRINGIZE(OP_MATH_OP_##op_name)); \ + mid = MRB_OPSYM(op_name); \ goto L_SEND_SYM; \ } \ NEXT; @@ -2292,7 +2292,7 @@ RETRY_TRY_BLOCK: #define OP_CMP_BODY(op,v1,v2) (v1(regs[a]) op v2(regs[a+1])) #ifdef MRB_WITHOUT_FLOAT -#define OP_CMP(op) do {\ +#define OP_CMP(op,sym) do {\ int result;\ /* need to check if - is overridden */\ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\ @@ -2301,7 +2301,7 @@ RETRY_TRY_BLOCK: break;\ default:\ c = 1;\ - mid = mrb_intern_lit(mrb, # op);\ + mid = MRB_OPSYM(sym);\ goto L_SEND_SYM;\ }\ if (result) {\ @@ -2312,7 +2312,7 @@ RETRY_TRY_BLOCK: }\ } while(0) #else -#define OP_CMP(op) do {\ +#define OP_CMP(op, sym) do {\ int result;\ /* need to check if - is overridden */\ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\ @@ -2330,7 +2330,7 @@ RETRY_TRY_BLOCK: break;\ default:\ c = 1;\ - mid = mrb_intern_lit(mrb, # op);\ + mid = MRB_OPSYM(sym);\ goto L_SEND_SYM;\ }\ if (result) {\ @@ -2347,28 +2347,28 @@ RETRY_TRY_BLOCK: SET_TRUE_VALUE(regs[a]); } else { - OP_CMP(==); + OP_CMP(==,eq); } NEXT; } CASE(OP_LT, B) { - OP_CMP(<); + OP_CMP(<,lt); NEXT; } CASE(OP_LE, B) { - OP_CMP(<=); + OP_CMP(<=,le); NEXT; } CASE(OP_GT, B) { - OP_CMP(>); + OP_CMP(>,gt); NEXT; } CASE(OP_GE, B) { - OP_CMP(>=); + OP_CMP(>=,ge); NEXT; } -- cgit v1.2.3 From 68f8d73308fce7acca3605858fa2755185844b76 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 15 May 2020 18:05:12 +0900 Subject: Use `MRB_QSYM()` instead of `MRB_OPSYM()`. --- mrbgems/mruby-compiler/core/codegen.c | 8 ++-- mrbgems/mruby-compiler/core/parse.y | 74 +++++++++++++++++------------------ src/array.c | 2 +- src/proc.c | 2 +- src/vm.c | 10 ++--- 5 files changed, 48 insertions(+), 48 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index eae1895a6..980906e38 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1742,7 +1742,7 @@ codegen(codegen_scope *s, node *tree, int val) genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1); } else { - genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_OPSYM(eqq)), 1); + genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_QSYM(eqq)), 1); } } else { @@ -2545,7 +2545,7 @@ codegen(codegen_scope *s, node *tree, int val) default: if (val) { - int sym = new_sym(s, MRB_OPSYM(minus)); + int sym = new_sym(s, MRB_QSYM(minus)); codegen(s, tree, VAL); pop(); genop_3(s, OP_SEND, cursp(), sym, 0); @@ -2637,7 +2637,7 @@ codegen(codegen_scope *s, node *tree, int val) } push(); /* for block */ pop_n(3); - sym = new_sym(s, MRB_OPSYM(tick)); /* ` */ + sym = new_sym(s, MRB_QSYM(tick)); /* ` */ genop_3(s, OP_SEND, cursp(), sym, 1); if (val) push(); mrb_gc_arena_restore(s->mrb, ai); @@ -2657,7 +2657,7 @@ codegen(codegen_scope *s, node *tree, int val) genop_2(s, OP_STRING, cursp(), off); push(); push(); pop_n(3); - sym = new_sym(s, MRB_OPSYM(tick)); /* ` */ + sym = new_sym(s, MRB_QSYM(tick)); /* ` */ genop_3(s, OP_SEND, cursp(), sym, 1); if (val) push(); mrb_gc_arena_restore(s->mrb, ai); diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 806032e22..e0adbfc4b 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -311,14 +311,14 @@ static void local_add_blk(parser_state *p, mrb_sym blk) { /* allocate register for block */ - local_add_f(p, blk ? blk : MRB_OPSYM(and)); + local_add_f(p, blk ? blk : MRB_QSYM(and)); } static void local_add_kw(parser_state *p, mrb_sym kwd) { /* allocate register for keywords hash */ - local_add_f(p, kwd ? kwd : MRB_OPSYM(pow)); + local_add_f(p, kwd ? kwd : MRB_QSYM(pow)); } static node* @@ -1671,7 +1671,7 @@ command_asgn : lhs '=' command_rhs } | primary_value '[' opt_call_args ']' tOP_ASGN command_rhs { - $$ = new_op_asgn(p, new_call(p, $1, MRB_OPSYM(aref), $3, '.'), $5, $6); + $$ = new_op_asgn(p, new_call(p, $1, MRB_QSYM(aref), $3, '.'), $5, $6); } | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs { @@ -1902,7 +1902,7 @@ mlhs_node : variable } | primary_value '[' opt_call_args ']' { - $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.'); + $$ = new_call(p, $1, MRB_QSYM(aref), $3, '.'); } | primary_value call_op tIDENTIFIER { @@ -1941,7 +1941,7 @@ lhs : variable } | primary_value '[' opt_call_args ']' { - $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.'); + $$ = new_call(p, $1, MRB_QSYM(aref), $3, '.'); } | primary_value call_op tIDENTIFIER { @@ -2029,36 +2029,36 @@ undef_list : fsym } ; -op : '|' { $$ = MRB_OPSYM(or); } - | '^' { $$ = MRB_OPSYM(xor); } - | '&' { $$ = MRB_OPSYM(and); } - | tCMP { $$ = MRB_OPSYM(cmp); } - | tEQ { $$ = MRB_OPSYM(eq); } - | tEQQ { $$ = MRB_OPSYM(eqq); } - | tMATCH { $$ = MRB_OPSYM(match); } - | tNMATCH { $$ = MRB_OPSYM(nmatch); } - | '>' { $$ = MRB_OPSYM(gt); } - | tGEQ { $$ = MRB_OPSYM(ge); } - | '<' { $$ = MRB_OPSYM(lt); } - | tLEQ { $$ = MRB_OPSYM(le); } - | tNEQ { $$ = MRB_OPSYM(neq); } - | tLSHFT { $$ = MRB_OPSYM(lshift); } - | tRSHFT { $$ = MRB_OPSYM(rshift); } - | '+' { $$ = MRB_OPSYM(add); } - | '-' { $$ = MRB_OPSYM(sub); } - | '*' { $$ = MRB_OPSYM(mul); } - | tSTAR { $$ = MRB_OPSYM(mul); } - | '/' { $$ = MRB_OPSYM(div); } - | '%' { $$ = MRB_OPSYM(mod); } - | tPOW { $$ = MRB_OPSYM(pow); } - | tDSTAR { $$ = MRB_OPSYM(pow); } - | '!' { $$ = MRB_OPSYM(not); } - | '~' { $$ = MRB_OPSYM(neg); } - | tUPLUS { $$ = MRB_OPSYM(plus); } - | tUMINUS { $$ = MRB_OPSYM(minus); } - | tAREF { $$ = MRB_OPSYM(aref); } - | tASET { $$ = MRB_OPSYM(aset); } - | '`' { $$ = MRB_OPSYM(tick); } +op : '|' { $$ = MRB_QSYM(or); } + | '^' { $$ = MRB_QSYM(xor); } + | '&' { $$ = MRB_QSYM(and); } + | tCMP { $$ = MRB_QSYM(cmp); } + | tEQ { $$ = MRB_QSYM(eq); } + | tEQQ { $$ = MRB_QSYM(eqq); } + | tMATCH { $$ = MRB_QSYM(match); } + | tNMATCH { $$ = MRB_QSYM(nmatch); } + | '>' { $$ = MRB_QSYM(gt); } + | tGEQ { $$ = MRB_QSYM(ge); } + | '<' { $$ = MRB_QSYM(lt); } + | tLEQ { $$ = MRB_QSYM(le); } + | tNEQ { $$ = MRB_QSYM(neq); } + | tLSHFT { $$ = MRB_QSYM(lshift); } + | tRSHFT { $$ = MRB_QSYM(rshift); } + | '+' { $$ = MRB_QSYM(add); } + | '-' { $$ = MRB_QSYM(sub); } + | '*' { $$ = MRB_QSYM(mul); } + | tSTAR { $$ = MRB_QSYM(mul); } + | '/' { $$ = MRB_QSYM(div); } + | '%' { $$ = MRB_QSYM(mod); } + | tPOW { $$ = MRB_QSYM(pow); } + | tDSTAR { $$ = MRB_QSYM(pow); } + | '!' { $$ = MRB_QSYM(not); } + | '~' { $$ = MRB_QSYM(neg); } + | tUPLUS { $$ = MRB_QSYM(plus); } + | tUMINUS { $$ = MRB_QSYM(minus); } + | tAREF { $$ = MRB_QSYM(aref); } + | tASET { $$ = MRB_QSYM(aset); } + | '`' { $$ = MRB_QSYM(tick); } ; reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__ @@ -2288,8 +2288,8 @@ paren_args : '(' opt_call_args ')' | '(' tDOT3 rparen { #if 1 - mrb_sym r = MRB_OPSYM(mul); - mrb_sym b = MRB_OPSYM(and); + mrb_sym r = MRB_QSYM(mul); + mrb_sym b = MRB_QSYM(and); if (local_var_p(p, r) && local_var_p(p, b)) { $$ = cons(list1(new_splat(p, new_lvar(p, r))), new_block_arg(p, new_lvar(p, b))); diff --git a/src/array.c b/src/array.c index 02d792657..5a4639da7 100644 --- a/src/array.c +++ b/src/array.c @@ -1314,7 +1314,7 @@ init_ary_each(mrb_state *mrb, struct RClass *ary) each_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*5); each_irep->syms[0] = MRB_SYM(each); each_irep->syms[1] = MRB_SYM(to_enum); - each_irep->syms[2] = MRB_OPSYM(aref); + each_irep->syms[2] = MRB_QSYM(aref); each_irep->syms[3] = MRB_SYM(call); each_irep->syms[4] = MRB_SYM(length); each_irep->slen = 5; diff --git a/src/proc.c b/src/proc.c index bb678558d..36e7a5652 100644 --- a/src/proc.c +++ b/src/proc.c @@ -326,7 +326,7 @@ mrb_init_proc(mrb_state *mrb) irep_obj->data = NULL; MRB_METHOD_FROM_PROC(m, p); mrb_define_method_raw(mrb, mrb->proc_class, MRB_SYM(call), m); - mrb_define_method_raw(mrb, mrb->proc_class, MRB_OPSYM(aref), m); + mrb_define_method_raw(mrb, mrb->proc_class, MRB_QSYM(aref), m); mrb_define_class_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.2.6 */ mrb_define_method(mrb, mrb->kernel_module, "lambda", proc_lambda, MRB_ARGS_NONE()|MRB_ARGS_BLOCK()); /* 15.3.1.3.27 */ diff --git a/src/vm.c b/src/vm.c index 5c305908e..2e96cd0dc 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2142,7 +2142,7 @@ RETRY_TRY_BLOCK: OP_MATH_CASE_STRING_##op_name(); \ default: \ c = 1; \ - mid = MRB_OPSYM(op_name); \ + mid = MRB_QSYM(op_name); \ goto L_SEND_SYM; \ } \ NEXT; @@ -2229,7 +2229,7 @@ RETRY_TRY_BLOCK: #endif default: c = 1; - mid = MRB_OPSYM(div); + mid = MRB_QSYM(div); goto L_SEND_SYM; } @@ -2255,7 +2255,7 @@ RETRY_TRY_BLOCK: default: \ SET_INT_VALUE(regs[a+1], b); \ c = 1; \ - mid = MRB_OPSYM(op_name); \ + mid = MRB_QSYM(op_name); \ goto L_SEND_SYM; \ } \ NEXT; @@ -2301,7 +2301,7 @@ RETRY_TRY_BLOCK: break;\ default:\ c = 1;\ - mid = MRB_OPSYM(sym);\ + mid = MRB_QSYM(sym);\ goto L_SEND_SYM;\ }\ if (result) {\ @@ -2330,7 +2330,7 @@ RETRY_TRY_BLOCK: break;\ default:\ c = 1;\ - mid = MRB_OPSYM(sym);\ + mid = MRB_QSYM(sym);\ goto L_SEND_SYM;\ }\ if (result) {\ -- cgit v1.2.3 From b941e918664af9390d4a61d6645dd2d1b9336c9d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 16 May 2020 21:39:29 +0900 Subject: Use more `MRB_QSYM()`. --- mrbgems/mruby-compiler/core/parse.y | 50 ++++++++++++++++++------------------- mrbgems/mruby-method/src/method.c | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index e0adbfc4b..70988d13f 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -2085,7 +2085,7 @@ arg : lhs '=' arg_rhs } | primary_value '[' opt_call_args ']' tOP_ASGN arg_rhs { - $$ = new_op_asgn(p, new_call(p, $1, intern_lit("[]"), $3, '.'), $5, $6); + $$ = new_op_asgn(p, new_call(p, $1, MRB_QSYM(aref), $3, '.'), $5, $6); } | primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs { @@ -2295,9 +2295,9 @@ paren_args : '(' opt_call_args ')' new_block_arg(p, new_lvar(p, b))); } #else - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym k = mrb_intern_lit(p->mrb, "**"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym k = MRB_QSYM(pow); + mrb_sym b = MRB_QSYM(and); if (local_var_p(p, r) && local_var_p(p, k) && local_var_p(p, b)) { $$ = cons(list2(new_splat(p, new_lvar(p, r)), new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))), @@ -3026,7 +3026,7 @@ method_call : operation paren_args } | primary_value '[' opt_call_args ']' { - $$ = new_call(p, $1, intern_lit("[]"), $3, '.'); + $$ = new_call(p, $1, MRB_QSYM(aref), $3, '.'); } ; @@ -3409,15 +3409,15 @@ f_arglist : '(' f_args rparen { #if 1 /* til real keyword args implemented */ - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym b = MRB_QSYM(and); local_add_f(p, r); $$ = new_args(p, 0, 0, r, 0, new_args_tail(p, 0, 0, b)); #else - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym k = mrb_intern_lit(p->mrb, "**"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym k = MRB_QSYM(pow); + mrb_sym b = MRB_QSYM(and); local_add_f(p, r); local_add_f(p, k); $$ = new_args(p, 0, 0, r, 0, new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); @@ -3580,7 +3580,7 @@ f_args : f_arg ',' f_optarg ',' f_rest_arg opt_args_tail } | /* none */ { - local_add_f(p, intern_lit("&")); + local_add_f(p, MRB_QSYM(and)); $$ = new_args(p, 0, 0, 0, 0, 0); } ; @@ -3704,7 +3704,7 @@ f_rest_arg : restarg_mark tIDENTIFIER } | restarg_mark { - local_add_f(p, intern_lit("*")); + local_add_f(p, MRB_QSYM(and)); $$ = -1; } ; @@ -4961,7 +4961,7 @@ parser_yylex(parser_state *p) case '*': if ((c = nextc(p)) == '*') { if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("**"); + pylval.id = MRB_QSYM(pow); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -4979,7 +4979,7 @@ parser_yylex(parser_state *p) } else { if (c == '=') { - pylval.id = intern_lit("*"); + pylval.id = MRB_QSYM(mul); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5095,7 +5095,7 @@ parser_yylex(parser_state *p) } if (c == '<') { if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("<<"); + pylval.id = MRB_QSYM(lshift); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5117,7 +5117,7 @@ parser_yylex(parser_state *p) } if (c == '>') { if ((c = nextc(p)) == '=') { - pylval.id = intern_lit(">>"); + pylval.id = MRB_QSYM(rshift); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5225,7 +5225,7 @@ parser_yylex(parser_state *p) if ((c = nextc(p)) == '&') { p->lstate = EXPR_BEG; if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("&&"); + pylval.id = MRB_QSYM(andand); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5237,7 +5237,7 @@ parser_yylex(parser_state *p) return tANDDOT; } else if (c == '=') { - pylval.id = intern_lit("&"); + pylval.id = MRB_QSYM(and); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5264,7 +5264,7 @@ parser_yylex(parser_state *p) if ((c = nextc(p)) == '|') { p->lstate = EXPR_BEG; if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("||"); + pylval.id = MRB_QSYM(oror); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5272,7 +5272,7 @@ parser_yylex(parser_state *p) return tOROP; } if (c == '=') { - pylval.id = intern_lit("|"); + pylval.id = MRB_QSYM(or); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5296,7 +5296,7 @@ parser_yylex(parser_state *p) return '+'; } if (c == '=') { - pylval.id = intern_lit("+"); + pylval.id = MRB_QSYM(add); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5324,7 +5324,7 @@ parser_yylex(parser_state *p) return '-'; } if (c == '=') { - pylval.id = intern_lit("-"); + pylval.id = MRB_QSYM(sub); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5644,7 +5644,7 @@ parser_yylex(parser_state *p) return tREGEXP_BEG; } if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("/"); + pylval.id = MRB_QSYM(div); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5663,7 +5663,7 @@ parser_yylex(parser_state *p) case '^': if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("^"); + pylval.id = MRB_QSYM(xor); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -5840,7 +5840,7 @@ parser_yylex(parser_state *p) } } if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("%"); + pylval.id = MRB_QSYM(mod); p->lstate = EXPR_BEG; return tOP_ASGN; } diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index 502494dd3..13584294f 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -322,7 +322,7 @@ mrb_search_method_owner(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym if (unbound) { goto name_error; } - if (!mrb_respond_to(mrb, obj, mrb_intern_lit(mrb, "respond_to_missing?"))) { + if (!mrb_respond_to(mrb, obj, MRB_QSYM(respond_to_missing_p))) { goto name_error; } ret = mrb_funcall(mrb, obj, "respond_to_missing?", 2, mrb_symbol_value(name), mrb_true_value()); -- cgit v1.2.3 From 00f5ddc9aeeab49d656044d14a03765bd6fdfc53 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 27 May 2020 23:24:31 +0900 Subject: Use `mrb_funcall_id()` extensively. Except for support files e.g. `mruby-test/driver.c`, which are not target of symbol collection via `rake gensym`. --- mrbgems/mruby-array-ext/src/array.c | 4 ++-- mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c | 2 +- mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 4 ++-- mrbgems/mruby-compiler/core/codegen.c | 2 +- mrbgems/mruby-io/src/io.c | 2 +- mrbgems/mruby-kernel-ext/src/kernel.c | 2 +- mrbgems/mruby-metaprog/src/metaprog.c | 2 +- mrbgems/mruby-method/src/method.c | 6 +++--- mrbgems/mruby-range-ext/src/range.c | 4 ++-- mrbgems/mruby-socket/src/socket.c | 16 ++++++++-------- mrbgems/mruby-sprintf/src/sprintf.c | 2 +- src/array.c | 2 +- src/error.c | 2 +- src/hash.c | 8 ++++---- src/kernel.c | 8 ++++---- src/numeric.c | 2 +- src/object.c | 6 +++--- 17 files changed, 37 insertions(+), 37 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-array-ext/src/array.c b/mrbgems/mruby-array-ext/src/array.c index 3ce5d822e..996679b6e 100644 --- a/mrbgems/mruby-array-ext/src/array.c +++ b/mrbgems/mruby-array-ext/src/array.c @@ -149,10 +149,10 @@ mrb_ary_slice_bang(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } case MRB_TT_FIXNUM: - val = mrb_funcall(mrb, self, "delete_at", 1, index); + val = mrb_funcall_id(mrb, self, MRB_SYM(delete_at), 1, index); return val; default: - val = mrb_funcall(mrb, self, "delete_at", 1, index); + val = mrb_funcall_id(mrb, self, MRB_SYM(delete_at), 1, index); return val; } } diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c b/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c index e8702f4df..f3fefc712 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c @@ -67,7 +67,7 @@ mrb_debug_eval(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t recv = dbg->regs[0]; - v = mrb_funcall(mrb, recv, "instance_eval", 1, ruby_code); + v = mrb_funcall_id(mrb, recv, MRB_SYM(instance_eval), 1, ruby_code); } if (exc) { diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index 19d0bfc06..ffe22b885 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -104,13 +104,13 @@ p(mrb_state *mrb, mrb_value obj, int prompt) mrb_value val; char* msg; - val = mrb_funcall(mrb, obj, "inspect", 0); + val = mrb_funcall_id(mrb, obj, MRB_SYM(inspect), 0); if (prompt) { if (!mrb->exc) { fputs(" => ", stdout); } else { - val = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "inspect", 0); + val = mrb_funcall_id(mrb, mrb_obj_value(mrb->exc), MRB_SYM(inspect), 0); } } if (!mrb_string_p(val)) { diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 980906e38..b8dd55bd4 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1603,7 +1603,7 @@ codegen(codegen_scope *s, node *tree, int val) { node *n = tree->car->cdr; mrb_sym mid = nsym(n->cdr->car); - mrb_sym mnil = mrb_intern_lit(s->mrb, "nil?"); + mrb_sym mnil = MRB_QSYM(nil_p); if (mid == mnil && n->cdr->cdr->car == NULL) { nil_p = TRUE; codegen(s, n->car, VAL); diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 2c9cba84a..608fc1623 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -109,7 +109,7 @@ io_set_process_status(mrb_state *mrb, pid_t pid, int status) } } if (c_status != NULL) { - v = mrb_funcall(mrb, mrb_obj_value(c_status), "new", 2, mrb_fixnum_value(pid), mrb_fixnum_value(status)); + v = mrb_funcall_id(mrb, mrb_obj_value(c_status), MRB_SYM(new), 2, mrb_fixnum_value(pid), mrb_fixnum_value(status)); } else { v = mrb_fixnum_value(WEXITSTATUS(status)); } diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c index 1d183aecd..8d9a3fab7 100644 --- a/mrbgems/mruby-kernel-ext/src/kernel.c +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -57,7 +57,7 @@ mrb_f_caller(mrb_state *mrb, mrb_value self) return mrb_ary_new(mrb); } - return mrb_funcall(mrb, bt, "[]", 2, mrb_fixnum_value(lev), mrb_fixnum_value(n)); + return mrb_funcall_id(mrb, bt, MRB_QSYM(aref), 2, mrb_fixnum_value(lev), mrb_fixnum_value(n)); } /* diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index 6c0dc5ad3..01cf723fb 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -622,7 +622,7 @@ remove_method(mrb_state *mrb, mrb_value mod, mrb_sym mid) k = kh_get(mt, mrb, h, mid); if (k != kh_end(h)) { kh_del(mt, mrb, h, k); - mrb_funcall(mrb, mod, "method_removed", 1, mrb_symbol_value(mid)); + mrb_funcall_id(mrb, mod, MRB_SYM(method_removed), 1, mrb_symbol_value(mid)); return; } } diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index 13584294f..d7df381ea 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -256,7 +256,7 @@ method_source_location(mrb_state *mrb, mrb_value self) rproc = mrb_proc_ptr(proc); orig = rproc->c; rproc->c = mrb->proc_class; - ret = mrb_funcall(mrb, proc, "source_location", 0); + ret = mrb_funcall_id(mrb, proc, MRB_SYM(source_location), 0); rproc->c = orig; return ret; } @@ -278,7 +278,7 @@ method_parameters(mrb_state *mrb, mrb_value self) rproc = mrb_proc_ptr(proc); orig = rproc->c; rproc->c = mrb->proc_class; - ret = mrb_funcall(mrb, proc, "parameters", 0); + ret = mrb_funcall_id(mrb, proc, MRB_SYM(parameters), 0); rproc->c = orig; return ret; } @@ -325,7 +325,7 @@ mrb_search_method_owner(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym if (!mrb_respond_to(mrb, obj, MRB_QSYM(respond_to_missing_p))) { goto name_error; } - ret = mrb_funcall(mrb, obj, "respond_to_missing?", 2, mrb_symbol_value(name), mrb_true_value()); + ret = mrb_funcall_id(mrb, obj, MRB_QSYM(respond_to_missing_p), 2, mrb_symbol_value(name), mrb_true_value()); if (!mrb_test(ret)) { goto name_error; } diff --git a/mrbgems/mruby-range-ext/src/range.c b/mrbgems/mruby-range-ext/src/range.c index 2a0b4e97d..633894070 100644 --- a/mrbgems/mruby-range-ext/src/range.c +++ b/mrbgems/mruby-range-ext/src/range.c @@ -81,8 +81,8 @@ range_last(mrb_state *mrb, mrb_value range) return mrb_range_end(mrb, range); } - array = mrb_funcall(mrb, range, "to_a", 0); - return mrb_funcall(mrb, array, "last", 1, mrb_to_int(mrb, num)); + array = mrb_funcall_id(mrb, range, MRB_SYM(to_a), 0); + return mrb_funcall_id(mrb, array, MRB_SYM(last), 1, mrb_to_int(mrb, num)); } /* diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index 3916e35b9..63e2b665b 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -177,7 +177,7 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass) for (res = res0; res != NULL; res = res->ai_next) { sa = mrb_str_new(mrb, (char*)res->ai_addr, res->ai_addrlen); - ai = mrb_funcall(mrb, klass, "new", 4, sa, mrb_fixnum_value(res->ai_family), mrb_fixnum_value(res->ai_socktype), mrb_fixnum_value(res->ai_protocol)); + ai = mrb_funcall_id(mrb, klass, MRB_SYM(new), 4, sa, mrb_fixnum_value(res->ai_family), mrb_fixnum_value(res->ai_socktype), mrb_fixnum_value(res->ai_protocol)); mrb_ary_push(mrb, ary, ai); mrb_gc_arena_restore(mrb, arena_idx); } @@ -200,7 +200,7 @@ mrb_addrinfo_getnameinfo(mrb_state *mrb, mrb_value self) host = mrb_str_buf_new(mrb, NI_MAXHOST); serv = mrb_str_buf_new(mrb, NI_MAXSERV); - sastr = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@sockaddr")); + sastr = mrb_iv_get(mrb, self, MRB_QSYM(a_sockaddr)); if (!mrb_string_p(sastr)) { mrb_raise(mrb, E_SOCKET_ERROR, "invalid sockaddr"); } @@ -222,7 +222,7 @@ mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self) { mrb_value sastr; - sastr = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@sockaddr")); + sastr = mrb_iv_get(mrb, self, MRB_QSYM(a_sockaddr)); if (((struct sockaddr *)RSTRING_PTR(sastr))->sa_family != AF_UNIX) mrb_raise(mrb, E_SOCKET_ERROR, "need AF_UNIX address"); if (RSTRING_LEN(sastr) < (mrb_int)offsetof(struct sockaddr_un, sun_path) + 1) { @@ -269,7 +269,7 @@ sa2addrlist(mrb_state *mrb, const struct sockaddr *sa, socklen_t salen) static int socket_fd(mrb_state *mrb, mrb_value sock) { - return (int)mrb_fixnum(mrb_funcall(mrb, sock, "fileno", 0)); + return (int)mrb_fixnum(mrb_funcall_id(mrb, sock, MRB_SYM(fileno), 0)); } static int @@ -350,7 +350,7 @@ mrb_basicsocket_getsockopt(mrb_state *mrb, mrb_value self) c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Socket")), MRB_SYM(Option)); family = socket_family(s); data = mrb_str_new(mrb, opt, optlen); - return mrb_funcall(mrb, c, "new", 4, mrb_fixnum_value(family), mrb_fixnum_value(level), mrb_fixnum_value(optname), data); + return mrb_funcall_id(mrb, c, MRB_SYM(new), 4, mrb_fixnum_value(family), mrb_fixnum_value(level), mrb_fixnum_value(optname), data); } static mrb_value @@ -472,9 +472,9 @@ mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self) } else if (argc == 1) { if (strcmp(mrb_obj_classname(mrb, so), "Socket::Option") != 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "not an instance of Socket::Option"); - level = mrb_fixnum(mrb_funcall(mrb, so, "level", 0)); - optname = mrb_fixnum(mrb_funcall(mrb, so, "optname", 0)); - optval = mrb_funcall(mrb, so, "data", 0); + level = mrb_fixnum(mrb_funcall_id(mrb, so, MRB_SYM(level), 0)); + optname = mrb_fixnum(mrb_funcall_id(mrb, so, MRB_SYM(optname), 0)); + optval = mrb_funcall_id(mrb, so, MRB_SYM(data), 0); } else { mrb_argnum_error(mrb, argc, 3, 3); } diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index bf7a4d725..0cf462ef7 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -763,7 +763,7 @@ retry: tmp = mrb_str_new(mrb, buf, 1); } else { - tmp = mrb_funcall(mrb, val, "chr", 0); + tmp = mrb_funcall_id(mrb, val, MRB_SYM(chr), 0); mrb_check_type(mrb, tmp, MRB_TT_STRING); } #endif diff --git a/src/array.c b/src/array.c index 5a4639da7..71a957c9e 100644 --- a/src/array.c +++ b/src/array.c @@ -1090,7 +1090,7 @@ mrb_ary_splat(mrb_state *mrb, mrb_value v) return mrb_ary_new_from_values(mrb, 1, &v); } - ary = mrb_funcall(mrb, v, "to_a", 0); + ary = mrb_funcall_id(mrb, v, MRB_SYM(to_a), 0); if (mrb_nil_p(ary)) { return mrb_ary_new_from_values(mrb, 1, &v); } diff --git a/src/error.c b/src/error.c index 30835e206..742049ace 100644 --- a/src/error.c +++ b/src/error.c @@ -114,7 +114,7 @@ exc_to_s(mrb_state *mrb, mrb_value exc) static mrb_value exc_message(mrb_state *mrb, mrb_value exc) { - return mrb_funcall(mrb, exc, "to_s", 0); + return mrb_funcall_id(mrb, exc, MRB_SYM(to_s), 0); } /* diff --git a/src/hash.c b/src/hash.c index a9ac79226..edff1ef1d 100644 --- a/src/hash.c +++ b/src/hash.c @@ -72,7 +72,7 @@ ht_hash_func(mrb_state *mrb, htable *t, mrb_value key) break; default: - hv = mrb_funcall(mrb, key, "hash", 0); + hv = mrb_funcall_id(mrb, key, MRB_SYM(hash), 0); h = (size_t)tt ^ (size_t)mrb_fixnum(hv); break; } @@ -856,7 +856,7 @@ hash_default(mrb_state *mrb, mrb_value hash, mrb_value key) { if (MRB_RHASH_DEFAULT_P(hash)) { if (MRB_RHASH_PROCDEFAULT_P(hash)) { - return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); + return mrb_funcall_id(mrb, RHASH_PROCDEFAULT(hash), MRB_SYM(call), 2, hash, key); } else { return RHASH_IFNONE(hash); @@ -897,7 +897,7 @@ mrb_hash_default(mrb_state *mrb, mrb_value hash) if (MRB_RHASH_DEFAULT_P(hash)) { if (MRB_RHASH_PROCDEFAULT_P(hash)) { if (!given) return mrb_nil_value(); - return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, key); + return mrb_funcall_id(mrb, RHASH_PROCDEFAULT(hash), MRB_SYM(call), 2, hash, key); } else { return RHASH_IFNONE(hash); @@ -1083,7 +1083,7 @@ mrb_hash_shift(mrb_state *mrb, mrb_value hash) if (MRB_RHASH_DEFAULT_P(hash)) { if (MRB_RHASH_PROCDEFAULT_P(hash)) { - return mrb_funcall(mrb, RHASH_PROCDEFAULT(hash), "call", 2, hash, mrb_nil_value()); + return mrb_funcall_id(mrb, RHASH_PROCDEFAULT(hash), MRB_SYM(call), 2, hash, mrb_nil_value()); } else { return RHASH_IFNONE(hash); diff --git a/src/kernel.c b/src/kernel.c index bc42a75d7..519052f4b 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -310,7 +310,7 @@ init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj) default: break; } - mrb_funcall(mrb, dest, "initialize_copy", 1, obj); + mrb_funcall_id(mrb, dest, MRB_SYM(initialize_copy), 1, obj); } /* 15.3.1.3.8 */ @@ -411,8 +411,8 @@ mrb_obj_extend(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value obj) mrb_check_type(mrb, argv[i], MRB_TT_MODULE); } while (argc--) { - mrb_funcall(mrb, argv[argc], "extend_object", 1, obj); - mrb_funcall(mrb, argv[argc], "extended", 1, obj); + mrb_funcall_id(mrb, argv[argc], MRB_SYM(extend_object), 1, obj); + mrb_funcall_id(mrb, argv[argc], MRB_SYM(extended), 1, obj); } return obj; } @@ -749,7 +749,7 @@ obj_respond_to(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "n|b", &id, &priv); respond_to_p = basic_obj_respond_to(mrb, self, id, !priv); if (!respond_to_p) { - rtm_id = mrb_intern_lit(mrb, "respond_to_missing?"); + rtm_id = MRB_QSYM(respond_to_missing_p); if (basic_obj_respond_to(mrb, self, rtm_id, !priv)) { mrb_value args[2], v; args[0] = mrb_symbol_value(id); diff --git a/src/numeric.c b/src/numeric.c index f4961928b..725960cf6 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -1558,7 +1558,7 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2) return -2; return mrb_str_cmp(mrb, obj1, obj2); default: - v = mrb_funcall(mrb, obj1, "<=>", 1, obj2); + v = mrb_funcall_id(mrb, obj1, MRB_SYM(cmp), 1, obj2); if (mrb_nil_p(v) || !mrb_fixnum_p(v)) return -2; return mrb_fixnum(v); diff --git a/src/object.c b/src/object.c index 7257f402d..2ef6228e8 100644 --- a/src/object.c +++ b/src/object.c @@ -58,7 +58,7 @@ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2) return TRUE; } #endif - result = mrb_funcall(mrb, obj1, "==", 1, obj2); + result = mrb_funcall_id(mrb, obj1, MRB_QSYM(eq), 1, obj2); if (mrb_test(result)) return TRUE; return FALSE; } @@ -648,12 +648,12 @@ mrb_check_hash_type(mrb_state *mrb, mrb_value hash) MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj) { - return mrb_obj_as_string(mrb, mrb_funcall(mrb, obj, "inspect", 0)); + return mrb_obj_as_string(mrb, mrb_funcall_id(mrb, obj, MRB_SYM(inspect), 0)); } MRB_API mrb_bool mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2) { if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE; - return mrb_test(mrb_funcall(mrb, obj1, "eql?", 1, obj2)); + return mrb_test(mrb_funcall_id(mrb, obj1, MRB_QSYM(eql_p), 1, obj2)); } -- cgit v1.2.3 From 5405977a6e438678d649ff6cbf6d36926bb752ef Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Mon, 25 May 2020 22:11:02 +0900 Subject: Add `y.tab.c` to remove Bison from build dependencies; ref 4ce3997c I sometimes see Bison related problems in setting up build environments. Therefore to remove Bison from build time dependencies, add `y.tab.c` generated by Bison to the repository. The reduction of dependency at build time also reduces the labor and time for setup and installation in CI. In addition, a path in `#line` directive is converted to a relative path so that its path is constant regardless of development environments. --- mrbgems/mruby-compiler/core/y.tab.c | 132 ++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 66 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index c570fb1d7..7df922575 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -374,14 +374,14 @@ static void local_add_blk(parser_state *p, mrb_sym blk) { /* allocate register for block */ - local_add_f(p, blk ? blk : mrb_intern_lit(p->mrb, "&")); + local_add_f(p, blk ? blk : MRB_QSYM(and)); } static void local_add_kw(parser_state *p, mrb_sym kwd) { /* allocate register for keywords hash */ - local_add_f(p, kwd ? kwd : mrb_intern_lit(p->mrb, "**")); + local_add_f(p, kwd ? kwd : MRB_QSYM(pow)); } static node* @@ -995,13 +995,13 @@ new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b) static node* new_imaginary(parser_state *p, node *imaginary) { - return new_call(p, new_const(p, intern_lit("Kernel")), intern_lit("Complex"), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1); + return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Complex), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1); } static node* new_rational(parser_state *p, node *rational) { - return new_call(p, new_const(p, intern_lit("Kernel")), intern_lit("Rational"), list1(list1(rational)), 1); + return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Rational), list1(list1(rational)), 1); } /* (:int . i) */ @@ -5933,7 +5933,7 @@ yyreduce: case 35: #line 1673 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_lit("[]"), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); + (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), MRB_QSYM(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } #line 5939 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -6304,7 +6304,7 @@ yyreduce: case 89: #line 1904 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_lit("[]"), (yyvsp[-1].nd), '.'); + (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_QSYM(aref), (yyvsp[-1].nd), '.'); } #line 6310 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -6373,7 +6373,7 @@ yyreduce: case 97: #line 1943 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_lit("[]"), (yyvsp[-1].nd), '.'); + (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_QSYM(aref), (yyvsp[-1].nd), '.'); } #line 6379 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -6514,181 +6514,181 @@ yyreduce: case 120: #line 2032 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("|"); } + { (yyval.id) = MRB_QSYM(or); } #line 6519 "mrbgems/mruby-compiler/core/y.tab.c" break; case 121: #line 2033 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("^"); } + { (yyval.id) = MRB_QSYM(xor); } #line 6525 "mrbgems/mruby-compiler/core/y.tab.c" break; case 122: #line 2034 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("&"); } + { (yyval.id) = MRB_QSYM(and); } #line 6531 "mrbgems/mruby-compiler/core/y.tab.c" break; case 123: #line 2035 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("<=>"); } + { (yyval.id) = MRB_QSYM(cmp); } #line 6537 "mrbgems/mruby-compiler/core/y.tab.c" break; case 124: #line 2036 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("=="); } + { (yyval.id) = MRB_QSYM(eq); } #line 6543 "mrbgems/mruby-compiler/core/y.tab.c" break; case 125: #line 2037 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("==="); } + { (yyval.id) = MRB_QSYM(eqq); } #line 6549 "mrbgems/mruby-compiler/core/y.tab.c" break; case 126: #line 2038 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("=~"); } + { (yyval.id) = MRB_QSYM(match); } #line 6555 "mrbgems/mruby-compiler/core/y.tab.c" break; case 127: #line 2039 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("!~"); } + { (yyval.id) = MRB_QSYM(nmatch); } #line 6561 "mrbgems/mruby-compiler/core/y.tab.c" break; case 128: #line 2040 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit(">"); } + { (yyval.id) = MRB_QSYM(gt); } #line 6567 "mrbgems/mruby-compiler/core/y.tab.c" break; case 129: #line 2041 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit(">="); } + { (yyval.id) = MRB_QSYM(ge); } #line 6573 "mrbgems/mruby-compiler/core/y.tab.c" break; case 130: #line 2042 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("<"); } + { (yyval.id) = MRB_QSYM(lt); } #line 6579 "mrbgems/mruby-compiler/core/y.tab.c" break; case 131: #line 2043 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("<="); } + { (yyval.id) = MRB_QSYM(le); } #line 6585 "mrbgems/mruby-compiler/core/y.tab.c" break; case 132: #line 2044 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("!="); } + { (yyval.id) = MRB_QSYM(neq); } #line 6591 "mrbgems/mruby-compiler/core/y.tab.c" break; case 133: #line 2045 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("<<"); } + { (yyval.id) = MRB_QSYM(lshift); } #line 6597 "mrbgems/mruby-compiler/core/y.tab.c" break; case 134: #line 2046 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit(">>"); } + { (yyval.id) = MRB_QSYM(rshift); } #line 6603 "mrbgems/mruby-compiler/core/y.tab.c" break; case 135: #line 2047 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("+"); } + { (yyval.id) = MRB_QSYM(add); } #line 6609 "mrbgems/mruby-compiler/core/y.tab.c" break; case 136: #line 2048 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("-"); } + { (yyval.id) = MRB_QSYM(sub); } #line 6615 "mrbgems/mruby-compiler/core/y.tab.c" break; case 137: #line 2049 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("*"); } + { (yyval.id) = MRB_QSYM(mul); } #line 6621 "mrbgems/mruby-compiler/core/y.tab.c" break; case 138: #line 2050 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("*"); } + { (yyval.id) = MRB_QSYM(mul); } #line 6627 "mrbgems/mruby-compiler/core/y.tab.c" break; case 139: #line 2051 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("/"); } + { (yyval.id) = MRB_QSYM(div); } #line 6633 "mrbgems/mruby-compiler/core/y.tab.c" break; case 140: #line 2052 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("%"); } + { (yyval.id) = MRB_QSYM(mod); } #line 6639 "mrbgems/mruby-compiler/core/y.tab.c" break; case 141: #line 2053 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("**"); } + { (yyval.id) = MRB_QSYM(pow); } #line 6645 "mrbgems/mruby-compiler/core/y.tab.c" break; case 142: #line 2054 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("**"); } + { (yyval.id) = MRB_QSYM(pow); } #line 6651 "mrbgems/mruby-compiler/core/y.tab.c" break; case 143: #line 2055 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("!"); } + { (yyval.id) = MRB_QSYM(not); } #line 6657 "mrbgems/mruby-compiler/core/y.tab.c" break; case 144: #line 2056 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("~"); } + { (yyval.id) = MRB_QSYM(neg); } #line 6663 "mrbgems/mruby-compiler/core/y.tab.c" break; case 145: #line 2057 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("+@"); } + { (yyval.id) = MRB_QSYM(plus); } #line 6669 "mrbgems/mruby-compiler/core/y.tab.c" break; case 146: #line 2058 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("-@"); } + { (yyval.id) = MRB_QSYM(minus); } #line 6675 "mrbgems/mruby-compiler/core/y.tab.c" break; case 147: #line 2059 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("[]"); } + { (yyval.id) = MRB_QSYM(aref); } #line 6681 "mrbgems/mruby-compiler/core/y.tab.c" break; case 148: #line 2060 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("[]="); } + { (yyval.id) = MRB_QSYM(aset); } #line 6687 "mrbgems/mruby-compiler/core/y.tab.c" break; case 149: #line 2061 "mrbgems/mruby-compiler/core/parse.y" - { (yyval.id) = intern_lit("`"); } + { (yyval.id) = MRB_QSYM(tick); } #line 6693 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -6711,7 +6711,7 @@ yyreduce: case 192: #line 2087 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_lit("[]"), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); + (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), MRB_QSYM(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } #line 6717 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -7095,16 +7095,16 @@ yyreduce: #line 2289 "mrbgems/mruby-compiler/core/parse.y" { #if 1 - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym b = MRB_QSYM(and); if (local_var_p(p, r) && local_var_p(p, b)) { (yyval.nd) = cons(list1(new_splat(p, new_lvar(p, r))), new_block_arg(p, new_lvar(p, b))); } #else - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym k = mrb_intern_lit(p->mrb, "**"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym k = MRB_QSYM(pow); + mrb_sym b = MRB_QSYM(and); if (local_var_p(p, r) && local_var_p(p, k) && local_var_p(p, b)) { (yyval.nd) = cons(list2(new_splat(p, new_lvar(p, r)), new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))), @@ -8247,7 +8247,7 @@ yyreduce: case 397: #line 3012 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_call(p, (yyvsp[-2].nd), intern_lit("call"), (yyvsp[0].nd), (yyvsp[-1].num)); + (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM(call), (yyvsp[0].nd), (yyvsp[-1].num)); } #line 8253 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -8255,7 +8255,7 @@ yyreduce: case 398: #line 3016 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_call(p, (yyvsp[-2].nd), intern_lit("call"), (yyvsp[0].nd), tCOLON2); + (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM(call), (yyvsp[0].nd), tCOLON2); } #line 8261 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -8279,7 +8279,7 @@ yyreduce: case 401: #line 3028 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_lit("[]"), (yyvsp[-1].nd), '.'); + (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_QSYM(aref), (yyvsp[-1].nd), '.'); } #line 8285 "mrbgems/mruby-compiler/core/y.tab.c" break; @@ -8795,15 +8795,15 @@ yyreduce: { #if 1 /* til real keyword args implemented */ - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym b = MRB_QSYM(and); local_add_f(p, r); (yyval.nd) = new_args(p, 0, 0, r, 0, new_args_tail(p, 0, 0, b)); #else - mrb_sym r = mrb_intern_lit(p->mrb, "*"); - mrb_sym k = mrb_intern_lit(p->mrb, "**"); - mrb_sym b = mrb_intern_lit(p->mrb, "&"); + mrb_sym r = MRB_QSYM(mul); + mrb_sym k = MRB_QSYM(pow); + mrb_sym b = MRB_QSYM(and); local_add_f(p, r); local_add_f(p, k); (yyval.nd) = new_args(p, 0, 0, r, 0, new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); @@ -9076,7 +9076,7 @@ yyreduce: case 522: #line 3582 "mrbgems/mruby-compiler/core/parse.y" { - local_add_f(p, mrb_intern_lit(p->mrb, "&")); + local_add_f(p, MRB_QSYM(and)); (yyval.nd) = new_args(p, 0, 0, 0, 0, 0); } #line 9083 "mrbgems/mruby-compiler/core/y.tab.c" @@ -9260,7 +9260,7 @@ yyreduce: case 545: #line 3706 "mrbgems/mruby-compiler/core/parse.y" { - local_add_f(p, mrb_intern_lit(p->mrb, "*")); + local_add_f(p, MRB_QSYM(and)); (yyval.id) = -1; } #line 9267 "mrbgems/mruby-compiler/core/y.tab.c" @@ -10758,7 +10758,7 @@ parser_yylex(parser_state *p) case '*': if ((c = nextc(p)) == '*') { if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("**"); + pylval.id = MRB_QSYM(pow); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -10776,7 +10776,7 @@ parser_yylex(parser_state *p) } else { if (c == '=') { - pylval.id = intern_lit("*"); + pylval.id = MRB_QSYM(mul); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -10892,7 +10892,7 @@ parser_yylex(parser_state *p) } if (c == '<') { if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("<<"); + pylval.id = MRB_QSYM(lshift); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -10914,7 +10914,7 @@ parser_yylex(parser_state *p) } if (c == '>') { if ((c = nextc(p)) == '=') { - pylval.id = intern_lit(">>"); + pylval.id = MRB_QSYM(rshift); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11022,7 +11022,7 @@ parser_yylex(parser_state *p) if ((c = nextc(p)) == '&') { p->lstate = EXPR_BEG; if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("&&"); + pylval.id = MRB_QSYM(andand); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11034,7 +11034,7 @@ parser_yylex(parser_state *p) return tANDDOT; } else if (c == '=') { - pylval.id = intern_lit("&"); + pylval.id = MRB_QSYM(and); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11061,7 +11061,7 @@ parser_yylex(parser_state *p) if ((c = nextc(p)) == '|') { p->lstate = EXPR_BEG; if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("||"); + pylval.id = MRB_QSYM(oror); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11069,7 +11069,7 @@ parser_yylex(parser_state *p) return tOROP; } if (c == '=') { - pylval.id = intern_lit("|"); + pylval.id = MRB_QSYM(or); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11093,7 +11093,7 @@ parser_yylex(parser_state *p) return '+'; } if (c == '=') { - pylval.id = intern_lit("+"); + pylval.id = MRB_QSYM(add); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11121,7 +11121,7 @@ parser_yylex(parser_state *p) return '-'; } if (c == '=') { - pylval.id = intern_lit("-"); + pylval.id = MRB_QSYM(sub); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11441,7 +11441,7 @@ parser_yylex(parser_state *p) return tREGEXP_BEG; } if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("/"); + pylval.id = MRB_QSYM(div); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11460,7 +11460,7 @@ parser_yylex(parser_state *p) case '^': if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("^"); + pylval.id = MRB_QSYM(xor); p->lstate = EXPR_BEG; return tOP_ASGN; } @@ -11637,7 +11637,7 @@ parser_yylex(parser_state *p) } } if ((c = nextc(p)) == '=') { - pylval.id = intern_lit("%"); + pylval.id = MRB_QSYM(mod); p->lstate = EXPR_BEG; return tOP_ASGN; } -- cgit v1.2.3 From 5a3e014e4914dbd6421dbbd81e889cd6952e924b Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 5 Jun 2020 07:43:40 +0900 Subject: Constify `irep` members. - `pool` - `syms` - `reps` --- include/mruby/debug.h | 2 +- include/mruby/dump.h | 6 +- include/mruby/irep.h | 9 +- include/mruby/proc.h | 6 +- mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c | 4 +- mrbgems/mruby-compiler/core/codegen.c | 159 +++++++++++++++++-------------- mrbgems/mruby-compiler/core/parse.y | 2 +- mrbgems/mruby-compiler/core/y.tab.c | 2 +- mrbgems/mruby-metaprog/src/metaprog.c | 2 +- mrbgems/mruby-proc-ext/src/proc.c | 4 +- src/array.c | 14 +-- src/backtrace.c | 2 +- src/class.c | 8 +- src/codedump.c | 12 +-- src/debug.c | 2 +- src/dump.c | 54 +++++------ src/gc.c | 2 +- src/load.c | 59 ++++++------ src/proc.c | 10 +- src/state.c | 21 ++-- src/vm.c | 12 +-- 21 files changed, 212 insertions(+), 180 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/debug.h b/include/mruby/debug.h index 5c5d56924..f22c7c77b 100644 --- a/include/mruby/debug.h +++ b/include/mruby/debug.h @@ -46,7 +46,7 @@ typedef struct mrb_irep_debug_info { * get line from irep's debug info and program counter * @return returns NULL if not found */ -MRB_API const char *mrb_debug_get_filename(mrb_state *mrb, mrb_irep *irep, ptrdiff_t pc); +MRB_API const char *mrb_debug_get_filename(mrb_state *mrb, const mrb_irep *irep, ptrdiff_t pc); /* * get line from irep's debug info and program counter diff --git a/include/mruby/dump.h b/include/mruby/dump.h index db3e287d3..2fa5e4d3c 100644 --- a/include/mruby/dump.h +++ b/include/mruby/dump.h @@ -18,10 +18,10 @@ MRB_BEGIN_DECL #define DUMP_DEBUG_INFO 1 -int mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size); +int mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size); #ifndef MRB_DISABLE_STDIO -int mrb_dump_irep_binary(mrb_state*, mrb_irep*, uint8_t, FILE*); -int mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep*, uint8_t flags, FILE *f, const char *initname); +int mrb_dump_irep_binary(mrb_state*, const mrb_irep*, uint8_t, FILE*); +int mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep*, uint8_t flags, FILE *f, const char *initname); mrb_irep *mrb_read_irep_file(mrb_state*, FILE*); MRB_API mrb_value mrb_load_irep_file(mrb_state*,FILE*); MRB_API mrb_value mrb_load_irep_file_cxt(mrb_state*, FILE*, mrbc_context*); diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 661ef2b48..6633bc73e 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -33,11 +33,11 @@ typedef struct mrb_irep { uint8_t flags; const mrb_code *iseq; - mrb_value *pool; - mrb_sym *syms; - struct mrb_irep **reps; + const mrb_value *pool; + const mrb_sym *syms; + const struct mrb_irep **reps; - struct mrb_locals *lv; + const struct mrb_locals *lv; /* debug info */ struct mrb_irep_debug_info* debug_info; @@ -46,6 +46,7 @@ typedef struct mrb_irep { } mrb_irep; #define MRB_ISEQ_NO_FREE 1 +#define MRB_IREP_NO_FREE 2 MRB_API mrb_irep *mrb_add_irep(mrb_state *mrb); diff --git a/include/mruby/proc.h b/include/mruby/proc.h index 12013c3ae..2d06210ef 100644 --- a/include/mruby/proc.h +++ b/include/mruby/proc.h @@ -41,7 +41,7 @@ void mrb_env_unshare(mrb_state*, struct REnv*); struct RProc { MRB_OBJECT_HEADER; union { - mrb_irep *irep; + const mrb_irep *irep; mrb_func_t func; } body; struct RProc *upper; @@ -86,8 +86,8 @@ struct RProc { #define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v))) -struct RProc *mrb_proc_new(mrb_state*, mrb_irep*); -struct RProc *mrb_closure_new(mrb_state*, mrb_irep*); +struct RProc *mrb_proc_new(mrb_state*, const mrb_irep*); +struct RProc *mrb_closure_new(mrb_state*, const mrb_irep*); MRB_API struct RProc *mrb_proc_new_cfunc(mrb_state*, mrb_func_t); MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals); void mrb_proc_copy(struct RProc *a, struct RProc *b); diff --git a/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c b/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c index 4d984e773..5cd9a27fc 100644 --- a/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +++ b/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c @@ -238,10 +238,10 @@ static int dump_file(mrb_state *mrb, FILE *wfp, const char *outfile, struct RProc *proc, struct mrbc_args *args) { int n = MRB_DUMP_OK; - mrb_irep *irep = proc->body.irep; + const mrb_irep *irep = proc->body.irep; if (args->remove_lv) { - mrb_irep_remove_lv(mrb, irep); + mrb_irep_remove_lv(mrb, (mrb_irep*)irep); } if (args->initname) { n = mrb_dump_irep_cfunc(mrb, irep, args->flags, wfp, args->initname); diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index b8dd55bd4..64dcff340 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -70,6 +70,9 @@ typedef struct scope { uint32_t icapa; mrb_irep *irep; + mrb_value *pool; + mrb_sym *syms; + mrb_irep **reps; uint32_t pcapa, scapa, rcapa; uint16_t nlocals; @@ -98,10 +101,22 @@ static void raise_error(codegen_scope *s, const char *msg); static void codegen_error(codegen_scope *s, const char *message) { + int i; + if (!s) return; while (s->prev) { codegen_scope *tmp = s->prev; mrb_free(s->mrb, s->iseq); + mrb_free(s->mrb, s->pool); + mrb_free(s->mrb, s->syms); + if (s->reps) { + /* copied from mrb_irep_free() in state.c */ + for (i=0; iirep->rlen; i++) { + if (s->reps[i]) + mrb_irep_decref(s->mrb, (mrb_irep*)s->reps[i]); + } + mrb_free(s->mrb, s->reps); + } mrb_free(s->mrb, s->lines); mrb_pool_close(s->mpool); s = tmp; @@ -545,7 +560,7 @@ new_lit(codegen_scope *s, mrb_value val) case MRB_TT_STRING: for (i=0; iirep->plen; i++) { mrb_int len; - pv = &s->irep->pool[i]; + pv = &s->pool[i]; if (!mrb_string_p(*pv)) continue; if ((len = RSTRING_LEN(*pv)) != RSTRING_LEN(val)) continue; @@ -557,7 +572,7 @@ new_lit(codegen_scope *s, mrb_value val) case MRB_TT_FLOAT: for (i=0; iirep->plen; i++) { mrb_float f1, f2; - pv = &s->irep->pool[i]; + pv = &s->pool[i]; if (!mrb_float_p(*pv)) continue; f1 = mrb_float(*pv); f2 = mrb_float(val); @@ -567,7 +582,7 @@ new_lit(codegen_scope *s, mrb_value val) #endif case MRB_TT_FIXNUM: for (i=0; iirep->plen; i++) { - pv = &s->irep->pool[i]; + pv = &s->pool[i]; if (!mrb_fixnum_p(*pv)) continue; if (mrb_fixnum(*pv) == mrb_fixnum(val)) return i; } @@ -579,10 +594,10 @@ new_lit(codegen_scope *s, mrb_value val) if (s->irep->plen == s->pcapa) { s->pcapa *= 2; - s->irep->pool = (mrb_value *)codegen_realloc(s, s->irep->pool, sizeof(mrb_value)*s->pcapa); + s->pool = (mrb_value *)codegen_realloc(s, s->pool, sizeof(mrb_value)*s->pcapa); } - pv = &s->irep->pool[s->irep->plen]; + pv = &s->pool[s->irep->plen]; i = s->irep->plen++; switch (mrb_type(val)) { @@ -620,13 +635,13 @@ new_sym(codegen_scope *s, mrb_sym sym) len = s->irep->slen; for (i=0; iirep->syms[i] == sym) return i; + if (s->syms[i] == sym) return i; } if (s->irep->slen >= s->scapa) { s->scapa *= 2; - s->irep->syms = (mrb_sym*)codegen_realloc(s, s->irep->syms, sizeof(mrb_sym)*s->scapa); + s->syms = (mrb_sym*)codegen_realloc(s, s->syms, sizeof(mrb_sym)*s->scapa); } - s->irep->syms[s->irep->slen] = sym; + s->syms[s->irep->slen] = sym; return s->irep->slen++; } @@ -681,7 +696,7 @@ search_upvar(codegen_scope *s, mrb_sym id, int *idx) if (lv < 1) lv = 1; u = s->parser->upper; while (u && !MRB_PROC_CFUNC_P(u)) { - struct mrb_irep *ir = u->body.irep; + const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; const struct mrb_locals *v = ir->lv; for (; n > 1; n --, v ++) { @@ -2993,91 +3008,92 @@ scope_add_irep(codegen_scope *s, mrb_irep *irep) } if (s->irep->rlen == s->rcapa) { s->rcapa *= 2; - s->irep->reps = (mrb_irep**)codegen_realloc(s, s->irep->reps, sizeof(mrb_irep*)*s->rcapa); + s->reps = (mrb_irep**)codegen_realloc(s, s->reps, sizeof(mrb_irep*)*s->rcapa); } - s->irep->reps[s->irep->rlen] = irep; + s->reps[s->irep->rlen] = irep; s->irep->rlen++; } static codegen_scope* -scope_new(mrb_state *mrb, codegen_scope *prev, node *lv) +scope_new(mrb_state *mrb, codegen_scope *prev, node *nlv) { static const codegen_scope codegen_scope_zero = { 0 }; mrb_pool *pool = mrb_pool_open(mrb); - codegen_scope *p = (codegen_scope *)mrb_pool_alloc(pool, sizeof(codegen_scope)); + codegen_scope *s = (codegen_scope *)mrb_pool_alloc(pool, sizeof(codegen_scope)); - if (!p) { + if (!s) { if (prev) codegen_error(prev, "unexpected scope"); return NULL; } - *p = codegen_scope_zero; - p->mrb = mrb; - p->mpool = pool; - if (!prev) return p; - p->prev = prev; - p->ainfo = -1; - p->mscope = 0; - - p->irep = mrb_add_irep(mrb); - scope_add_irep(prev, p->irep); - - p->rcapa = 8; - p->irep->reps = (mrb_irep**)mrb_malloc(mrb, sizeof(mrb_irep*)*p->rcapa); - - p->icapa = 1024; - p->iseq = (mrb_code*)mrb_malloc(mrb, sizeof(mrb_code)*p->icapa); - p->irep->iseq = NULL; - - p->pcapa = 32; - p->irep->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value)*p->pcapa); - p->irep->plen = 0; - - p->scapa = 256; - p->irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*p->scapa); - p->irep->slen = 0; - - p->lv = lv; - p->sp += node_len(lv)+1; /* add self */ - p->nlocals = p->sp; - if (lv) { - node *n = lv; + *s = codegen_scope_zero; + s->mrb = mrb; + s->mpool = pool; + if (!prev) return s; + s->prev = prev; + s->ainfo = -1; + s->mscope = 0; + + s->irep = mrb_add_irep(mrb); + scope_add_irep(prev, s->irep); + + s->rcapa = 8; + s->reps = (mrb_irep**)mrb_malloc(mrb, sizeof(mrb_irep*)*s->rcapa); + + s->icapa = 1024; + s->iseq = (mrb_code*)mrb_malloc(mrb, sizeof(mrb_code)*s->icapa); + s->irep->iseq = NULL; + + s->pcapa = 32; + s->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value)*s->pcapa); + s->irep->plen = 0; + + s->scapa = 256; + s->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*s->scapa); + s->irep->slen = 0; + + s->lv = nlv; + s->sp += node_len(nlv)+1; /* add self */ + s->nlocals = s->sp; + if (nlv) { + struct mrb_locals *lv; + node *n = nlv; size_t i = 0; - p->irep->lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (p->nlocals - 1)); - for (i=0, n=lv; n; i++,n=n->cdr) { - p->irep->lv[i].name = lv_name(n); + s->irep->lv = lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals)*(s->nlocals-1)); + for (i=0, n=nlv; n; i++,n=n->cdr) { + lv[i].name = lv_name(n); if (lv_name(n)) { - p->irep->lv[i].r = lv_idx(p, lv_name(n)); + lv[i].r = lv_idx(s, lv_name(n)); } else { - p->irep->lv[i].r = 0; + lv[i].r = 0; } } - mrb_assert(i + 1 == p->nlocals); + mrb_assert(i + 1 == s->nlocals); } - p->ai = mrb_gc_arena_save(mrb); + s->ai = mrb_gc_arena_save(mrb); - p->filename_sym = prev->filename_sym; - if (p->filename_sym) { - p->lines = (uint16_t*)mrb_malloc(mrb, sizeof(short)*p->icapa); + s->filename_sym = prev->filename_sym; + if (s->filename_sym) { + s->lines = (uint16_t*)mrb_malloc(mrb, sizeof(short)*s->icapa); } - p->lineno = prev->lineno; + s->lineno = prev->lineno; /* debug setting */ - p->debug_start_pos = 0; - if (p->filename_sym) { - mrb_debug_info_alloc(mrb, p->irep); + s->debug_start_pos = 0; + if (s->filename_sym) { + mrb_debug_info_alloc(mrb, s->irep); } else { - p->irep->debug_info = NULL; + s->irep->debug_info = NULL; } - p->parser = prev->parser; - p->filename_index = prev->filename_index; + s->parser = prev->parser; + s->filename_index = prev->filename_index; - p->rlev = prev->rlev+1; + s->rlev = prev->rlev+1; - return p; + return s; } static void @@ -3091,12 +3107,12 @@ scope_finish(codegen_scope *s) } irep->flags = 0; if (s->iseq) { - irep->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc); + irep->iseq = (const mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc); irep->ilen = s->pc; } - irep->pool = (mrb_value*)codegen_realloc(s, irep->pool, sizeof(mrb_value)*irep->plen); - irep->syms = (mrb_sym*)codegen_realloc(s, irep->syms, sizeof(mrb_sym)*irep->slen); - irep->reps = (mrb_irep**)codegen_realloc(s, irep->reps, sizeof(mrb_irep*)*irep->rlen); + irep->pool = (const mrb_value*)codegen_realloc(s, s->pool, sizeof(mrb_value)*irep->plen); + irep->syms = (const mrb_sym*)codegen_realloc(s, s->syms, sizeof(mrb_sym)*irep->slen); + irep->reps = (const mrb_irep**)codegen_realloc(s, s->reps, sizeof(mrb_irep*)*irep->rlen); if (s->filename_sym) { mrb_sym fname = mrb_parser_get_filename(s->parser, s->filename_index); const char *filename = mrb_sym_name_len(s->mrb, fname, NULL); @@ -3242,13 +3258,14 @@ mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep) { int i; + if (irep->flags & MRB_IREP_NO_FREE) return; if (irep->lv) { - mrb_free(mrb, irep->lv); + mrb_free(mrb, (void*)irep->lv); irep->lv = NULL; } - + if (!irep->reps) return; for (i = 0; i < irep->rlen; ++i) { - mrb_irep_remove_lv(mrb, irep->reps[i]); + mrb_irep_remove_lv(mrb, (mrb_irep*)irep->reps[i]); } } diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 70988d13f..b758a259d 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -279,7 +279,7 @@ local_var_p(parser_state *p, mrb_sym sym) u = p->upper; while (u && !MRB_PROC_CFUNC_P(u)) { - struct mrb_irep *ir = u->body.irep; + const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; const struct mrb_locals *v = ir->lv; for (; n > 1; n --, v ++) { diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 7df922575..5c66a18a6 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -342,7 +342,7 @@ local_var_p(parser_state *p, mrb_sym sym) u = p->upper; while (u && !MRB_PROC_CFUNC_P(u)) { - struct mrb_irep *ir = u->body.irep; + const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; const struct mrb_locals *v = ir->lv; for (; n > 1; n --, v ++) { diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index 01cf723fb..8a4a6dc69 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -133,7 +133,7 @@ static mrb_value mrb_local_variables(mrb_state *mrb, mrb_value self) { struct RProc *proc; - mrb_irep *irep; + const mrb_irep *irep; mrb_value vars; size_t i; diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index 5343c478f..a2f3ad101 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -21,7 +21,7 @@ mrb_proc_source_location(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } else { - mrb_irep *irep = p->body.irep; + const mrb_irep *irep = p->body.irep; int32_t line; const char *filename; @@ -41,7 +41,7 @@ mrb_proc_inspect(mrb_state *mrb, mrb_value self) mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_cptr(self))); if (!MRB_PROC_CFUNC_P(p)) { - mrb_irep *irep = p->body.irep; + const mrb_irep *irep = p->body.irep; const char *filename; int32_t line; mrb_str_cat_lit(mrb, str, "@"); diff --git a/src/array.c b/src/array.c index 71a957c9e..1337736f4 100644 --- a/src/array.c +++ b/src/array.c @@ -1309,14 +1309,16 @@ init_ary_each(mrb_state *mrb, struct RClass *ary) mrb_method_t m; mrb_irep *each_irep = (mrb_irep*)mrb_malloc(mrb, sizeof(mrb_irep)); static const mrb_irep mrb_irep_zero = { 0 }; + mrb_sym *syms; *each_irep = mrb_irep_zero; - each_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*5); - each_irep->syms[0] = MRB_SYM(each); - each_irep->syms[1] = MRB_SYM(to_enum); - each_irep->syms[2] = MRB_QSYM(aref); - each_irep->syms[3] = MRB_SYM(call); - each_irep->syms[4] = MRB_SYM(length); + syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*5); + syms[0] = MRB_SYM(each); + syms[1] = MRB_SYM(to_enum); + syms[2] = MRB_QSYM(aref); + syms[3] = MRB_SYM(call); + syms[4] = MRB_SYM(length); + each_irep->syms = syms; each_irep->slen = 5; each_irep->flags = MRB_ISEQ_NO_FREE; each_irep->iseq = each_iseq; diff --git a/src/backtrace.c b/src/backtrace.c index b614a04be..bcc188796 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -39,7 +39,7 @@ each_backtrace(mrb_state *mrb, ptrdiff_t ciidx, const mrb_code *pc0, each_backtr for (i=ciidx; i >= 0; i--) { struct backtrace_location loc; mrb_callinfo *ci; - mrb_irep *irep; + const mrb_irep *irep; const mrb_code *pc; ci = &mrb->c->cibase[i]; diff --git a/src/class.c b/src/class.c index 2864fdda9..daba6f649 100644 --- a/src/class.c +++ b/src/class.c @@ -2315,12 +2315,14 @@ init_class_new(mrb_state *mrb, struct RClass *cls) struct RProc *p; mrb_method_t m; mrb_irep *new_irep = (mrb_irep*)mrb_malloc(mrb, sizeof(mrb_irep)); + mrb_sym *syms; static const mrb_irep mrb_irep_zero = { 0 }; *new_irep = mrb_irep_zero; - new_irep->syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*2); - new_irep->syms[0] = MRB_SYM(allocate); - new_irep->syms[1] = MRB_SYM(initialize); + syms = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*2); + syms[0] = MRB_SYM(allocate); + syms[1] = MRB_SYM(initialize); + new_irep->syms = syms; new_irep->slen = 2; new_irep->flags = MRB_ISEQ_NO_FREE; new_irep->iseq = new_iseq; diff --git a/src/codedump.c b/src/codedump.c index 649be176b..14cca8553 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -7,7 +7,7 @@ #ifndef MRB_DISABLE_STDIO static void -print_r(mrb_state *mrb, mrb_irep *irep, size_t n) +print_r(mrb_state *mrb, const mrb_irep *irep, size_t n) { size_t i; @@ -23,7 +23,7 @@ print_r(mrb_state *mrb, mrb_irep *irep, size_t n) } static void -print_lv_a(mrb_state *mrb, mrb_irep *irep, uint16_t a) +print_lv_a(mrb_state *mrb, const mrb_irep *irep, uint16_t a) { if (!irep->lv || a >= irep->nlocals || a == 0) { printf("\n"); @@ -35,7 +35,7 @@ print_lv_a(mrb_state *mrb, mrb_irep *irep, uint16_t a) } static void -print_lv_ab(mrb_state *mrb, mrb_irep *irep, uint16_t a, uint16_t b) +print_lv_ab(mrb_state *mrb, const mrb_irep *irep, uint16_t a, uint16_t b) { if (!irep->lv || (a >= irep->nlocals && b >= irep->nlocals) || a+b == 0) { printf("\n"); @@ -48,7 +48,7 @@ print_lv_ab(mrb_state *mrb, mrb_irep *irep, uint16_t a, uint16_t b) } static void -print_header(mrb_state *mrb, mrb_irep *irep, ptrdiff_t i) +print_header(mrb_state *mrb, const mrb_irep *irep, ptrdiff_t i) { int32_t line; @@ -66,7 +66,7 @@ print_header(mrb_state *mrb, mrb_irep *irep, ptrdiff_t i) #define CASE(insn,ops) case insn: FETCH_ ## ops (); L_ ## insn static void -codedump(mrb_state *mrb, mrb_irep *irep) +codedump(mrb_state *mrb, const mrb_irep *irep) { int ai; const mrb_code *pc, *pcend; @@ -533,7 +533,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) } static void -codedump_recur(mrb_state *mrb, mrb_irep *irep) +codedump_recur(mrb_state *mrb, const mrb_irep *irep) { int i; diff --git a/src/debug.c b/src/debug.c index 32add68ae..dabc5a56d 100644 --- a/src/debug.c +++ b/src/debug.c @@ -51,7 +51,7 @@ select_line_type(const uint16_t *lines, size_t lines_len) } MRB_API char const* -mrb_debug_get_filename(mrb_state *mrb, mrb_irep *irep, ptrdiff_t pc) +mrb_debug_get_filename(mrb_state *mrb, const mrb_irep *irep, ptrdiff_t pc) { if (irep && pc >= 0 && pc < irep->ilen) { mrb_irep_debug_info_file* f = NULL; diff --git a/src/dump.c b/src/dump.c index a6bbe68f3..770c133fb 100644 --- a/src/dump.c +++ b/src/dump.c @@ -21,7 +21,7 @@ #endif #endif -static size_t get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep); +static size_t get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep); #if UINT32_MAX > SIZE_MAX # error This code cannot be built on your environment. @@ -50,7 +50,7 @@ get_irep_header_size(mrb_state *mrb) } static ptrdiff_t -write_irep_header(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) +write_irep_header(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) { uint8_t *cur = buf; @@ -64,7 +64,7 @@ write_irep_header(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) static size_t -get_iseq_block_size(mrb_state *mrb, mrb_irep *irep) +get_iseq_block_size(mrb_state *mrb, const mrb_irep *irep) { size_t size = 0; @@ -76,7 +76,7 @@ get_iseq_block_size(mrb_state *mrb, mrb_irep *irep) } static ptrdiff_t -write_iseq_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf, uint8_t flags) +write_iseq_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf, uint8_t flags) { uint8_t *cur = buf; @@ -102,7 +102,7 @@ float_to_str(mrb_state *mrb, mrb_value flt) #endif static size_t -get_pool_block_size(mrb_state *mrb, mrb_irep *irep) +get_pool_block_size(mrb_state *mrb, const mrb_irep *irep) { int pool_no; size_t size = 0; @@ -153,7 +153,7 @@ get_pool_block_size(mrb_state *mrb, mrb_irep *irep) } static ptrdiff_t -write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) +write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) { int pool_no; uint8_t *cur = buf; @@ -207,7 +207,7 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) static size_t -get_syms_block_size(mrb_state *mrb, mrb_irep *irep) +get_syms_block_size(mrb_state *mrb, const mrb_irep *irep) { size_t size = 0; int sym_no; @@ -226,7 +226,7 @@ get_syms_block_size(mrb_state *mrb, mrb_irep *irep) } static ptrdiff_t -write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) +write_syms_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) { int sym_no; uint8_t *cur = buf; @@ -255,7 +255,7 @@ write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf) } static size_t -get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep) +get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep) { size_t size = 0; @@ -267,7 +267,7 @@ get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep) } static size_t -get_irep_record_size(mrb_state *mrb, mrb_irep *irep) +get_irep_record_size(mrb_state *mrb, const mrb_irep *irep) { size_t size = 0; int irep_no; @@ -280,7 +280,7 @@ get_irep_record_size(mrb_state *mrb, mrb_irep *irep) } static int -write_irep_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, size_t *irep_record_size, uint8_t flags) +write_irep_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *irep_record_size, uint8_t flags) { int i; uint8_t *src = bin; @@ -341,7 +341,7 @@ write_section_irep_header(mrb_state *mrb, size_t section_size, uint8_t *bin) } static int -write_section_irep(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, size_t *len_p, uint8_t flags) +write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *len_p, uint8_t flags) { int result; size_t rsize = 0; @@ -364,7 +364,7 @@ write_section_irep(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, size_t *len_p, } static size_t -get_debug_record_size(mrb_state *mrb, mrb_irep *irep) +get_debug_record_size(mrb_state *mrb, const mrb_irep *irep) { size_t ret = 0; uint16_t f_idx; @@ -413,11 +413,11 @@ find_filename_index(const mrb_sym *ary, int ary_len, mrb_sym s) } static size_t -get_filename_table_size(mrb_state *mrb, mrb_irep *irep, mrb_sym **fp, uint16_t *lp) +get_filename_table_size(mrb_state *mrb, const mrb_irep *irep, mrb_sym **fp, uint16_t *lp) { mrb_sym *filenames = *fp; size_t size = 0; - mrb_irep_debug_info *di = irep->debug_info; + const mrb_irep_debug_info *di = irep->debug_info; int i; mrb_assert(lp); @@ -444,7 +444,7 @@ get_filename_table_size(mrb_state *mrb, mrb_irep *irep, mrb_sym **fp, uint16_t * } static size_t -write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len) +write_debug_record_1(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len) { uint8_t *cur; uint16_t f_idx; @@ -498,7 +498,7 @@ write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const } static size_t -write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len) +write_debug_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len) { size_t size, len; int irep_no; @@ -516,7 +516,7 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* } static int -write_section_debug(mrb_state *mrb, mrb_irep *irep, uint8_t *cur, mrb_sym const *filenames, uint16_t filenames_len) +write_section_debug(mrb_state *mrb, const mrb_irep *irep, uint8_t *cur, mrb_sym const *filenames, uint16_t filenames_len) { size_t section_size = 0; const uint8_t *bin = cur; @@ -632,7 +632,7 @@ write_lv_record(mrb_state *mrb, const mrb_irep *irep, uint8_t **start, mrb_sym c } static size_t -get_lv_record_size(mrb_state *mrb, mrb_irep *irep) +get_lv_record_size(mrb_state *mrb, const mrb_irep *irep) { size_t ret = 0; int i; @@ -647,7 +647,7 @@ get_lv_record_size(mrb_state *mrb, mrb_irep *irep) } static size_t -get_lv_section_size(mrb_state *mrb, mrb_irep *irep, mrb_sym const *syms, uint32_t syms_len) +get_lv_section_size(mrb_state *mrb, const mrb_irep *irep, mrb_sym const *syms, uint32_t syms_len) { size_t ret = 0, i; @@ -665,7 +665,7 @@ get_lv_section_size(mrb_state *mrb, mrb_irep *irep, mrb_sym const *syms, uint32_ } static int -write_section_lv(mrb_state *mrb, mrb_irep *irep, uint8_t *start, mrb_sym const *syms, uint32_t const syms_len) +write_section_lv(mrb_state *mrb, const mrb_irep *irep, uint8_t *start, mrb_sym const *syms, uint32_t const syms_len) { uint8_t *cur = start; struct rite_section_lv_header *header; @@ -721,7 +721,7 @@ write_rite_binary_header(mrb_state *mrb, size_t binary_size, uint8_t *bin, uint8 } static mrb_bool -debug_info_defined_p(mrb_irep *irep) +debug_info_defined_p(const mrb_irep *irep) { int i; @@ -733,7 +733,7 @@ debug_info_defined_p(mrb_irep *irep) } static mrb_bool -lv_defined_p(mrb_irep *irep) +lv_defined_p(const mrb_irep *irep) { int i; @@ -747,7 +747,7 @@ lv_defined_p(mrb_irep *irep) } static int -dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size) +dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size) { int result = MRB_DUMP_GENERAL_FAILURE; size_t malloc_size; @@ -835,7 +835,7 @@ error_exit: } int -mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size) +mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size) { return dump_irep(mrb, irep, flags, bin, bin_size); } @@ -843,7 +843,7 @@ mrb_dump_irep(mrb_state *mrb, mrb_irep *irep, uint8_t flags, uint8_t **bin, size #ifndef MRB_DISABLE_STDIO int -mrb_dump_irep_binary(mrb_state *mrb, mrb_irep *irep, uint8_t flags, FILE* fp) +mrb_dump_irep_binary(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE* fp) { uint8_t *bin = NULL; size_t bin_size = 0; @@ -865,7 +865,7 @@ mrb_dump_irep_binary(mrb_state *mrb, mrb_irep *irep, uint8_t flags, FILE* fp) } int -mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname) +mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname) { uint8_t *bin = NULL; size_t bin_size = 0, bin_idx = 0; diff --git a/src/gc.c b/src/gc.c index 5531207db..897fa256f 100644 --- a/src/gc.c +++ b/src/gc.c @@ -868,7 +868,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) struct RProc *p = (struct RProc*)obj; if (!MRB_PROC_CFUNC_P(p) && p->body.irep) { - mrb_irep *irep = p->body.irep; + mrb_irep *irep = (mrb_irep*)p->body.irep; if (end) { mrb_irep_cutref(mrb, irep); } diff --git a/src/load.c b/src/load.c index 247d511df..b033d7ad1 100644 --- a/src/load.c +++ b/src/load.c @@ -73,6 +73,8 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag uint16_t tt, pool_data_len, snl; int plen; struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); + mrb_value *pool; + mrb_sym *syms; mrb_irep *irep = mrb_add_irep(mrb); int ai = mrb_gc_arena_save(mrb); @@ -124,7 +126,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag if (SIZE_ERROR_MUL(plen, sizeof(mrb_value))) { return NULL; } - irep->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * plen); + irep->pool = pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * plen); for (i = 0; i < plen; i++) { const char *s; @@ -139,26 +141,26 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag case IREP_TT_FIXNUM: { mrb_value num = mrb_str_len_to_inum(mrb, s, pool_data_len, 10, FALSE); #ifdef MRB_WITHOUT_FLOAT - irep->pool[i] = num; + pool[i] = num; #else - irep->pool[i] = mrb_float_p(num)? mrb_float_pool(mrb, mrb_float(num)) : num; + pool[i] = mrb_float_p(num)? mrb_float_pool(mrb, mrb_float(num)) : num; #endif } break; #ifndef MRB_WITHOUT_FLOAT case IREP_TT_FLOAT: - irep->pool[i] = mrb_float_pool(mrb, str_to_double(mrb, s, pool_data_len)); + pool[i] = mrb_float_pool(mrb, str_to_double(mrb, s, pool_data_len)); break; #endif case IREP_TT_STRING: - irep->pool[i] = mrb_str_pool(mrb, s, pool_data_len, st); + pool[i] = mrb_str_pool(mrb, s, pool_data_len, st); break; default: /* should not happen */ - irep->pool[i] = mrb_nil_value(); + pool[i] = mrb_nil_value(); break; } irep->plen++; @@ -173,22 +175,22 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag if (SIZE_ERROR_MUL(irep->slen, sizeof(mrb_sym))) { return NULL; } - irep->syms = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * irep->slen); + irep->syms = syms = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * irep->slen); for (i = 0; i < irep->slen; i++) { snl = bin_to_uint16(src); /* symbol name length */ src += sizeof(uint16_t); if (snl == MRB_DUMP_NULL_SYM_LEN) { - irep->syms[i] = 0; + syms[i] = 0; continue; } if (flags & FLAG_SRC_MALLOC) { - irep->syms[i] = mrb_intern(mrb, (char *)src, snl); + syms[i] = mrb_intern(mrb, (char *)src, snl); } else { - irep->syms[i] = mrb_intern_static(mrb, (char *)src, snl); + syms[i] = mrb_intern_static(mrb, (char *)src, snl); } src += snl + 1; @@ -196,8 +198,6 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag } } - irep->reps = (mrb_irep**)mrb_calloc(mrb, irep->rlen, sizeof(mrb_irep*)); - diff = src - bin; mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX); *len = (size_t)diff; @@ -214,21 +214,24 @@ read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags) int ai = mrb_gc_arena_save(mrb); mrb_irep *irep = read_irep_record_1(mrb, bin, len, flags); int i; + mrb_irep **reps; mrb_gc_arena_restore(mrb, ai); if (irep == NULL) { return NULL; } + reps = (mrb_irep**)mrb_calloc(mrb, irep->rlen, sizeof(mrb_irep*)); + irep->reps = (const mrb_irep**)reps; irep_obj->data = irep; bin += *len; for (i=0; irlen; i++) { size_t rlen; - irep->reps[i] = read_irep_record(mrb, bin, &rlen, flags); + reps[i] = read_irep_record(mrb, bin, &rlen, flags); mrb_gc_arena_restore(mrb, ai); - if (irep->reps[i] == NULL) { + if (reps[i] == NULL) { return NULL; } bin += rlen; @@ -257,25 +260,26 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t * size_t record_size; uint16_t f_idx; int i; + mrb_irep_debug_info *debug; if (irep->debug_info) { return MRB_DUMP_INVALID_IREP; } - irep->debug_info = (mrb_irep_debug_info*)mrb_calloc(mrb, 1, sizeof(mrb_irep_debug_info)); - irep->debug_info->pc_count = (uint32_t)irep->ilen; + irep->debug_info = debug = (mrb_irep_debug_info*)mrb_calloc(mrb, 1, sizeof(mrb_irep_debug_info)); + debug->pc_count = (uint32_t)irep->ilen; record_size = (size_t)bin_to_uint32(bin); bin += sizeof(uint32_t); - irep->debug_info->flen = bin_to_uint16(bin); - irep->debug_info->files = (mrb_irep_debug_info_file**)mrb_calloc(mrb, irep->debug_info->flen, sizeof(mrb_irep_debug_info*)); + debug->flen = bin_to_uint16(bin); + debug->files = (mrb_irep_debug_info_file**)mrb_calloc(mrb, irep->debug_info->flen, sizeof(mrb_irep_debug_info*)); bin += sizeof(uint16_t); - for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) { + for (f_idx = 0; f_idx < debug->flen; ++f_idx) { mrb_irep_debug_info_file *file; uint16_t filename_idx; file = (mrb_irep_debug_info_file *)mrb_calloc(mrb, 1, sizeof(*file)); - irep->debug_info->files[f_idx] = file; + debug->files[f_idx] = file; file->start_pos = bin_to_uint32(bin); bin += sizeof(uint32_t); @@ -329,7 +333,7 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, size_t * size_t len; int ret; - ret = read_debug_record(mrb, bin, irep->reps[i], &len, filenames, filenames_len); + ret = read_debug_record(mrb, bin, (mrb_irep*)irep->reps[i], &len, filenames, filenames_len); if (ret != MRB_DUMP_OK) return ret; bin += len; } @@ -393,25 +397,26 @@ static int read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *record_len, mrb_sym const *syms, uint32_t syms_len) { const uint8_t *bin = start; + struct mrb_locals *lv; ptrdiff_t diff; int i; - irep->lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (irep->nlocals - 1)); + irep->lv = lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (irep->nlocals - 1)); for (i = 0; i + 1< irep->nlocals; ++i) { uint16_t const sym_idx = bin_to_uint16(bin); bin += sizeof(uint16_t); if (sym_idx == RITE_LV_NULL_MARK) { - irep->lv[i].name = 0; - irep->lv[i].r = 0; + lv[i].name = 0; + lv[i].r = 0; } else { if (sym_idx >= syms_len) { return MRB_DUMP_GENERAL_FAILURE; } - irep->lv[i].name = syms[sym_idx]; + lv[i].name = syms[sym_idx]; - irep->lv[i].r = bin_to_uint16(bin); + lv[i].r = bin_to_uint16(bin); } bin += sizeof(uint16_t); } @@ -420,7 +425,7 @@ read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *rec size_t len; int ret; - ret = read_lv_record(mrb, bin, irep->reps[i], &len, syms, syms_len); + ret = read_lv_record(mrb, bin, (mrb_irep*)irep->reps[i], &len, syms, syms_len); if (ret != MRB_DUMP_OK) return ret; bin += len; } diff --git a/src/proc.c b/src/proc.c index 36e7a5652..2a980620b 100644 --- a/src/proc.c +++ b/src/proc.c @@ -15,7 +15,7 @@ static const mrb_code call_iseq[] = { }; struct RProc* -mrb_proc_new(mrb_state *mrb, mrb_irep *irep) +mrb_proc_new(mrb_state *mrb, const mrb_irep *irep) { struct RProc *p; mrb_callinfo *ci = mrb->c->ci; @@ -34,7 +34,7 @@ mrb_proc_new(mrb_state *mrb, mrb_irep *irep) p->e.target_class = tc; } p->body.irep = irep; - mrb_irep_incref(mrb, irep); + mrb_irep_incref(mrb, (mrb_irep*)irep); return p; } @@ -90,7 +90,7 @@ closure_setup(mrb_state *mrb, struct RProc *p) } struct RProc* -mrb_closure_new(mrb_state *mrb, mrb_irep *irep) +mrb_closure_new(mrb_state *mrb, const mrb_irep *irep) { struct RProc *p = mrb_proc_new(mrb, irep); @@ -181,7 +181,7 @@ mrb_proc_copy(struct RProc *a, struct RProc *b) a->flags = b->flags; a->body = b->body; if (!MRB_PROC_CFUNC_P(a) && a->body.irep) { - a->body.irep->refcnt++; + mrb_irep_incref(NULL, (mrb_irep*)a->body.irep); } a->upper = b->upper; a->e.env = b->e.env; @@ -262,7 +262,7 @@ proc_lambda(mrb_state *mrb, mrb_value self) mrb_int mrb_proc_arity(const struct RProc *p) { - struct mrb_irep *irep; + const mrb_irep *irep; const mrb_code *pc; mrb_aspec aspec; int ma, op, ra, pa, arity; diff --git a/src/state.c b/src/state.c index 790f7ca13..323532363 100644 --- a/src/state.c +++ b/src/state.c @@ -107,12 +107,14 @@ void mrb_free_symtbl(mrb_state *mrb); void mrb_irep_incref(mrb_state *mrb, mrb_irep *irep) { + if (irep->flags & MRB_IREP_NO_FREE) return; irep->refcnt++; } void mrb_irep_decref(mrb_state *mrb, mrb_irep *irep) { + if (irep->flags & MRB_IREP_NO_FREE) return; irep->refcnt--; if (irep->refcnt == 0) { mrb_irep_free(mrb, irep); @@ -122,12 +124,14 @@ mrb_irep_decref(mrb_state *mrb, mrb_irep *irep) void mrb_irep_cutref(mrb_state *mrb, mrb_irep *irep) { - mrb_irep *tmp; + mrb_irep **reps; int i; + if (irep->flags & MRB_IREP_NO_FREE) return; + reps = (mrb_irep**)irep->reps; for (i=0; irlen; i++) { - tmp = irep->reps[i]; - irep->reps[i] = NULL; + mrb_irep *tmp = reps[i]; + reps[i] = NULL; if (tmp) mrb_irep_decref(mrb, tmp); } } @@ -137,6 +141,7 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) { int i; + if (irep->flags & MRB_IREP_NO_FREE) return; if (!(irep->flags & MRB_ISEQ_NO_FREE)) mrb_free(mrb, (void*)irep->iseq); if (irep->pool) for (i=0; iplen; i++) { @@ -150,16 +155,16 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) } #endif } - mrb_free(mrb, irep->pool); - mrb_free(mrb, irep->syms); + mrb_free(mrb, (void*)irep->pool); + mrb_free(mrb, (void*)irep->syms); if (irep->reps) { for (i=0; irlen; i++) { if (irep->reps[i]) - mrb_irep_decref(mrb, irep->reps[i]); + mrb_irep_decref(mrb, (mrb_irep*)irep->reps[i]); } + mrb_free(mrb, (void*)irep->reps); } - mrb_free(mrb, irep->reps); - mrb_free(mrb, irep->lv); + mrb_free(mrb, (void*)irep->lv); mrb_debug_info_free(mrb, irep->debug_info); mrb_free(mrb, irep); } diff --git a/src/vm.c b/src/vm.c index 689c5b85e..064086fb9 100644 --- a/src/vm.c +++ b/src/vm.c @@ -920,7 +920,7 @@ argnum_error(mrb_state *mrb, mrb_int num) MRB_API mrb_value mrb_vm_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep) { - mrb_irep *irep = proc->body.irep; + const mrb_irep *irep = proc->body.irep; mrb_value result; struct mrb_context *c = mrb->c; ptrdiff_t cioff = c->ci - c->cibase; @@ -965,9 +965,9 @@ mrb_vm_exec(mrb_state *mrb, struct RProc *proc, const mrb_code *pc) { /* mrb_assert(MRB_PROC_CFUNC_P(proc)) */ const mrb_code *pc0 = pc; - mrb_irep *irep = proc->body.irep; - mrb_value *pool = irep->pool; - mrb_sym *syms = irep->syms; + const mrb_irep *irep = proc->body.irep; + const mrb_value *pool = irep->pool; + const mrb_sym *syms = irep->syms; mrb_code insn; int ai = mrb_gc_arena_save(mrb); struct mrb_jmpbuf *prev_jmp = mrb->jmp; @@ -2549,7 +2549,7 @@ RETRY_TRY_BLOCK: L_MAKE_LAMBDA: { struct RProc *p; - mrb_irep *nirep = irep->reps[b]; + const mrb_irep *nirep = irep->reps[b]; if (c & OP_L_CAPTURE) { p = mrb_closure_new(mrb, nirep); @@ -2627,7 +2627,7 @@ RETRY_TRY_BLOCK: CASE(OP_EXEC, BB) { mrb_value recv = regs[a]; struct RProc *p; - mrb_irep *nirep = irep->reps[b]; + const mrb_irep *nirep = irep->reps[b]; /* prepare closure */ p = mrb_proc_new(mrb, nirep); -- cgit v1.2.3 From daa37be5495393ce3e4654e00e44099f627e6cd4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 8 Jun 2020 19:17:59 +0900 Subject: Rename `struct mrb_locals` to `struct mrb_lvinfo`. That stands for "local variable information". --- include/mruby/irep.h | 4 ++-- mrbgems/mruby-compiler/core/codegen.c | 6 +++--- mrbgems/mruby-compiler/core/parse.y | 2 +- mrbgems/mruby-compiler/core/y.tab.c | 2 +- src/load.c | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 6633bc73e..9d30f2797 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -21,7 +21,7 @@ enum irep_pool_type { IREP_TT_FLOAT, }; -struct mrb_locals { +struct mrb_lvinfo { /* local variable info (name, idx) */ mrb_sym name; uint16_t r; }; @@ -37,7 +37,7 @@ typedef struct mrb_irep { const mrb_sym *syms; const struct mrb_irep **reps; - const struct mrb_locals *lv; + const struct mrb_lvinfo *lv; /* debug info */ struct mrb_irep_debug_info* debug_info; diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 64dcff340..f8561c0e7 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -698,7 +698,7 @@ search_upvar(codegen_scope *s, mrb_sym id, int *idx) while (u && !MRB_PROC_CFUNC_P(u)) { const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; - const struct mrb_locals *v = ir->lv; + const struct mrb_lvinfo *v = ir->lv; for (; n > 1; n --, v ++) { if (v->name == id) { *idx = v->r; @@ -3056,11 +3056,11 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *nlv) s->sp += node_len(nlv)+1; /* add self */ s->nlocals = s->sp; if (nlv) { - struct mrb_locals *lv; + struct mrb_lvinfo *lv; node *n = nlv; size_t i = 0; - s->irep->lv = lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals)*(s->nlocals-1)); + s->irep->lv = lv = (struct mrb_lvinfo*)mrb_malloc(mrb, sizeof(struct mrb_lvinfo)*(s->nlocals-1)); for (i=0, n=nlv; n; i++,n=n->cdr) { lv[i].name = lv_name(n); if (lv_name(n)) { diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index b758a259d..cb4126713 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -281,7 +281,7 @@ local_var_p(parser_state *p, mrb_sym sym) while (u && !MRB_PROC_CFUNC_P(u)) { const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; - const struct mrb_locals *v = ir->lv; + const struct mrb_lvinfo *v = ir->lv; for (; n > 1; n --, v ++) { if (v->name == sym) return TRUE; } diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 5c66a18a6..504ec6d04 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -344,7 +344,7 @@ local_var_p(parser_state *p, mrb_sym sym) while (u && !MRB_PROC_CFUNC_P(u)) { const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; - const struct mrb_locals *v = ir->lv; + const struct mrb_lvinfo *v = ir->lv; for (; n > 1; n --, v ++) { if (v->name == sym) return TRUE; } diff --git a/src/load.c b/src/load.c index b033d7ad1..d47027350 100644 --- a/src/load.c +++ b/src/load.c @@ -397,11 +397,11 @@ static int read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *record_len, mrb_sym const *syms, uint32_t syms_len) { const uint8_t *bin = start; - struct mrb_locals *lv; + struct mrb_lvinfo *lv; ptrdiff_t diff; int i; - irep->lv = lv = (struct mrb_locals*)mrb_malloc(mrb, sizeof(struct mrb_locals) * (irep->nlocals - 1)); + irep->lv = lv = (struct mrb_lvinfo*)mrb_malloc(mrb, sizeof(struct mrb_lvinfo) * (irep->nlocals - 1)); for (i = 0; i + 1< irep->nlocals; ++i) { uint16_t const sym_idx = bin_to_uint16(bin); -- cgit v1.2.3 From d428fa0c4acfe4f70ab534d420052c193bd83281 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 9 Jun 2020 14:39:38 +0900 Subject: Replace entire `irep->pool`. Changes: - `pool format is completely replaced - supported types: `STR`, `INT32`, `INT64`, `FLOAT` - `FLOAT` may be replaced by binary representation in the future - insert `NUL` after string literals in `mrb` files - `irep->pool` no longer store values in `mrb_value` - instead it stores in `mrb_pool_value` - less allocation - `mrb_irep` can be stored in ROM --- include/mruby/boxing_nan.h | 2 - include/mruby/boxing_no.h | 4 -- include/mruby/boxing_word.h | 5 -- include/mruby/dump.h | 19 ------ include/mruby/irep.h | 26 +++++-- include/mruby/string.h | 10 +-- mrbgems/mruby-compiler/core/codegen.c | 62 ++++++++++++----- src/codedump.c | 37 ++++++---- src/dump.c | 123 ++++++++++++++++++++-------------- src/etc.c | 11 --- src/load.c | 77 ++++++++++++++------- src/state.c | 16 ++--- src/string.c | 26 ------- src/vm.c | 43 +++++++----- 14 files changed, 251 insertions(+), 210 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/boxing_nan.h b/include/mruby/boxing_nan.h index fae3b7630..4b44bba8a 100644 --- a/include/mruby/boxing_nan.h +++ b/include/mruby/boxing_nan.h @@ -51,8 +51,6 @@ typedef struct mrb_value { }; } mrb_value; -#define mrb_float_pool(mrb,f) mrb_float_value(mrb,f) - #define mrb_tt(o) ((enum mrb_vtype)(((o).value.ttt & 0xfc000)>>14)-1) #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT) #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2)) diff --git a/include/mruby/boxing_no.h b/include/mruby/boxing_no.h index 7573428e6..23b48c6f8 100644 --- a/include/mruby/boxing_no.h +++ b/include/mruby/boxing_no.h @@ -24,10 +24,6 @@ typedef struct mrb_value { enum mrb_vtype tt; } mrb_value; -#ifndef MRB_WITHOUT_FLOAT -#define mrb_float_pool(mrb,f) mrb_float_value(mrb,f) -#endif - #define mrb_ptr(o) (o).value.p #define mrb_cptr(o) mrb_ptr(o) #ifndef MRB_WITHOUT_FLOAT diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index 1b7815b7f..56202a420 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -90,11 +90,6 @@ typedef union mrb_value { MRB_API mrb_value mrb_word_boxing_cptr_value(struct mrb_state*, void*); #ifndef MRB_WITHOUT_FLOAT MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); -MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float); -#endif - -#ifndef MRB_WITHOUT_FLOAT -#define mrb_float_pool(mrb,f) mrb_word_boxing_float_pool(mrb,f) #endif #define mrb_ptr(o) (o).value.p diff --git a/include/mruby/dump.h b/include/mruby/dump.h index 384521c45..bad27fdf5 100644 --- a/include/mruby/dump.h +++ b/include/mruby/dump.h @@ -127,16 +127,6 @@ uint32_to_bin(uint32_t l, uint8_t *bin) return sizeof(uint32_t); } -static inline size_t -uint32l_to_bin(uint32_t l, uint8_t *bin) -{ - bin[3] = (l >> 24) & 0xff; - bin[2] = (l >> 16) & 0xff; - bin[1] = (l >> 8) & 0xff; - bin[0] = l & 0xff; - return sizeof(uint32_t); -} - static inline uint32_t bin_to_uint32(const uint8_t *bin) { @@ -146,15 +136,6 @@ bin_to_uint32(const uint8_t *bin) (uint32_t)bin[3]; } -static inline uint32_t -bin_to_uint32l(const uint8_t *bin) -{ - return (uint32_t)bin[3] << 24 | - (uint32_t)bin[2] << 16 | - (uint32_t)bin[1] << 8 | - (uint32_t)bin[0]; -} - static inline uint16_t bin_to_uint16(const uint8_t *bin) { diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 9d30f2797..359fb6796 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -16,11 +16,29 @@ MRB_BEGIN_DECL enum irep_pool_type { - IREP_TT_STRING, - IREP_TT_FIXNUM, - IREP_TT_FLOAT, + IREP_TT_STR = 0, /* string (need free) */ + IREP_TT_SSTR = 2, /* string (static) */ + IREP_TT_INT32 = 1, /* 32bit integer */ + IREP_TT_INT64 = 3, /* 64bit integer */ + IREP_TT_FLOAT = 5, /* float (double/float) */ }; +#define IREP_TT_NFLAG 1 /* number (non string) flag */ +#define IREP_TT_SFLAG 2 /* static string flag */ +#define IREP_TT_SFLAG 2 /* static string flag */ + +typedef struct mrb_pool_value { + uint32_t tt; /* packed type and length (for string) */ + union { + const char *str; + int32_t i32; +#ifdef MRB_INT64 + int64_t i64; +#endif + mrb_float f; + } u; +} mrb_pool_value; + struct mrb_lvinfo { /* local variable info (name, idx) */ mrb_sym name; uint16_t r; @@ -33,7 +51,7 @@ typedef struct mrb_irep { uint8_t flags; const mrb_code *iseq; - const mrb_value *pool; + const mrb_pool_value *pool; const mrb_sym *syms; const struct mrb_irep **reps; diff --git a/include/mruby/string.h b/include/mruby/string.h index 93c94ef5d..0f1b762c1 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -92,9 +92,6 @@ struct RStringEmbed { # define RSTR_COPY_ASCII_FLAG(dst, src) (void)0 #endif -#define RSTR_POOL_P(s) ((s)->flags & MRB_STR_POOL) -#define RSTR_SET_POOL_FLAG(s) ((s)->flags |= MRB_STR_POOL) - /** * Returns a pointer from a Ruby string */ @@ -112,13 +109,11 @@ MRB_API mrb_int mrb_str_strlen(mrb_state*, struct RString*); #define MRB_STR_FSHARED 2 #define MRB_STR_NOFREE 4 #define MRB_STR_EMBED 8 /* type flags up to here */ -#define MRB_STR_POOL 16 /* status flags from here */ -#define MRB_STR_ASCII 32 +#define MRB_STR_ASCII 16 #define MRB_STR_EMBED_LEN_SHIFT 6 #define MRB_STR_EMBED_LEN_BIT 5 #define MRB_STR_EMBED_LEN_MASK (((1 << MRB_STR_EMBED_LEN_BIT) - 1) << MRB_STR_EMBED_LEN_SHIFT) -#define MRB_STR_TYPE_MASK (MRB_STR_POOL - 1) - +#define MRB_STR_TYPE_MASK 15 void mrb_gc_free_str(mrb_state*, struct RString*); @@ -447,7 +442,6 @@ MRB_API int mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2); */ MRB_API char *mrb_str_to_cstr(mrb_state *mrb, mrb_value str); -mrb_value mrb_str_pool(mrb_state *mrb, const char *s, mrb_int len, mrb_bool nofree); uint32_t mrb_str_hash(mrb_state *mrb, mrb_value str); mrb_value mrb_str_dump(mrb_state *mrb, mrb_value str); diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index f8561c0e7..0000e6dbe 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -70,7 +70,7 @@ typedef struct scope { uint32_t icapa; mrb_irep *irep; - mrb_value *pool; + mrb_pool_value *pool; mrb_sym *syms; mrb_irep **reps; uint32_t pcapa, scapa, rcapa; @@ -554,17 +554,17 @@ static inline int new_lit(codegen_scope *s, mrb_value val) { int i; - mrb_value *pv; + mrb_pool_value *pv; switch (mrb_type(val)) { case MRB_TT_STRING: for (i=0; iirep->plen; i++) { mrb_int len; pv = &s->pool[i]; - - if (!mrb_string_p(*pv)) continue; - if ((len = RSTRING_LEN(*pv)) != RSTRING_LEN(val)) continue; - if (memcmp(RSTRING_PTR(*pv), RSTRING_PTR(val), len) == 0) + if (pv->tt & IREP_TT_NFLAG) continue; + len = pv->tt>>2; + if (RSTRING_LEN(val) != len) continue; + if (memcmp(pv->u.str, RSTRING_PTR(val), len) == 0) return i; } break; @@ -573,8 +573,9 @@ new_lit(codegen_scope *s, mrb_value val) for (i=0; iirep->plen; i++) { mrb_float f1, f2; pv = &s->pool[i]; - if (!mrb_float_p(*pv)) continue; - f1 = mrb_float(*pv); + if (pv->tt != IREP_TT_FLOAT) continue; + pv = &s->pool[i]; + f1 = pv->u.f; f2 = mrb_float(val); if (f1 == f2 && !signbit(f1) == !signbit(f2)) return i; } @@ -582,9 +583,17 @@ new_lit(codegen_scope *s, mrb_value val) #endif case MRB_TT_FIXNUM: for (i=0; iirep->plen; i++) { + mrb_int v = mrb_fixnum(val); pv = &s->pool[i]; - if (!mrb_fixnum_p(*pv)) continue; - if (mrb_fixnum(*pv) == mrb_fixnum(val)) return i; + if (pv->tt == IREP_TT_INT32) { + if (v == pv->u.i32) return i; + } +#ifdef MRB_INT64 + else if (pv->tt == IREP_TT_INT64) { + if (v == pv->u.i64) return i; + } + continue; +#endif } break; default: @@ -594,7 +603,7 @@ new_lit(codegen_scope *s, mrb_value val) if (s->irep->plen == s->pcapa) { s->pcapa *= 2; - s->pool = (mrb_value *)codegen_realloc(s, s->pool, sizeof(mrb_value)*s->pcapa); + s->pool = (mrb_pool_value*)codegen_realloc(s, s->pool, sizeof(mrb_pool_value)*s->pcapa); } pv = &s->pool[s->irep->plen]; @@ -602,18 +611,35 @@ new_lit(codegen_scope *s, mrb_value val) switch (mrb_type(val)) { case MRB_TT_STRING: - *pv = mrb_str_pool(s->mrb, RSTRING_PTR(val), RSTRING_LEN(val), RSTR_NOFREE_P(RSTRING(val))); + if (RSTR_NOFREE_P(RSTRING(val))) { + pv->tt = (RSTRING_LEN(val)<<2) | IREP_TT_SSTR; + pv->u.str = RSTRING_PTR(val); + } + else { + char *p; + mrb_int len = RSTRING_LEN(val); + pv->tt = (len<<2) | IREP_TT_STR; + p = (char*)codegen_realloc(s, NULL, len+1); + memcpy(p, RSTRING_PTR(val), len); + p[len] = '\0'; + pv->u.str = p; + } break; #ifndef MRB_WITHOUT_FLOAT case MRB_TT_FLOAT: -#ifdef MRB_WORD_BOXING - *pv = mrb_float_pool(s->mrb, mrb_float(val)); + pv->tt = IREP_TT_FLOAT; + pv->u.f = mrb_float(val); break; -#endif #endif case MRB_TT_FIXNUM: - *pv = val; +#ifdef MRB_INT64 + pv->tt = IREP_TT_INT64; + pv->u.i64 = mrb_fixnum(val); +#else + pv->tt = IREP_TT_INT32; + pv->u.i32 = mrb_fixnum(val); +#endif break; default: @@ -3045,7 +3071,7 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *nlv) s->irep->iseq = NULL; s->pcapa = 32; - s->pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value)*s->pcapa); + s->pool = (mrb_pool_value*)mrb_malloc(mrb, sizeof(mrb_pool_value)*s->pcapa); s->irep->plen = 0; s->scapa = 256; @@ -3110,7 +3136,7 @@ scope_finish(codegen_scope *s) irep->iseq = (const mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc); irep->ilen = s->pc; } - irep->pool = (const mrb_value*)codegen_realloc(s, s->pool, sizeof(mrb_value)*irep->plen); + irep->pool = (const mrb_pool_value*)codegen_realloc(s, s->pool, sizeof(mrb_pool_value)*irep->plen); irep->syms = (const mrb_sym*)codegen_realloc(s, s->syms, sizeof(mrb_sym)*irep->slen); irep->reps = (const mrb_irep**)codegen_realloc(s, s->reps, sizeof(mrb_irep*)*irep->rlen); if (s->filename_sym) { diff --git a/src/codedump.c b/src/codedump.c index 14cca8553..fd73f3104 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -115,10 +115,21 @@ codedump(mrb_state *mrb, const mrb_irep *irep) print_lv_ab(mrb, irep, a, b); break; CASE(OP_LOADL, BB): - { - mrb_value v = irep->pool[b]; - mrb_value s = mrb_inspect(mrb, v); - printf("OP_LOADL\tR%d\tL(%d)\t; %s", a, b, RSTRING_PTR(s)); + switch (irep->pool[b].tt) { + case IREP_TT_FLOAT: + printf("OP_LOADL\tR%d\tL(%d)\t; %f", a, b, (double)irep->pool[b].u.f); + break; + case IREP_TT_INT32: + printf("OP_LOADL\tR%d\tL(%d)\t; %" PRId32, a, b, irep->pool[b].u.i32); + break; +#ifdef MRB_INT64 + case IREP_TT_INT64: + printf("OP_LOADL\tR%d\tL(%d)\t; %" PRId64, a, b, irep->pool[b].u.i64); + break; +#endif + default: + printf("OP_LOADL\tR%d\tL(%d)\t", a, b); + break; } print_lv_a(mrb, irep, a); break; @@ -404,10 +415,11 @@ codedump(mrb_state *mrb, const mrb_irep *irep) print_lv_a(mrb, irep, a); break; CASE(OP_STRING, BB): - { - mrb_value v = irep->pool[b]; - mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v))); - printf("OP_STRING\tR%d\tL(%d)\t; %s", a, b, RSTRING_PTR(s)); + if ((irep->pool[b].tt & IREP_TT_NFLAG) == 0) { + printf("OP_STRING\tR%d\tL(%d)\t; %s", a, b, irep->pool[b].u.str); + } + else { + printf("OP_STRING\tR%d\tL(%d)\t", a, b); } print_lv_a(mrb, irep, a); break; @@ -453,10 +465,11 @@ codedump(mrb_state *mrb, const mrb_irep *irep) print_lv_a(mrb, irep, a); break; CASE(OP_ERR, B): - { - mrb_value v = irep->pool[a]; - mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v))); - printf("OP_ERR\t%s\n", RSTRING_PTR(s)); + if ((irep->pool[a].tt & IREP_TT_NFLAG) == 0) { + printf("OP_ERR\t%s\n", irep->pool[a].u.str); + } + else { + printf("OP_ERR\tL(%d)\n", a); } break; CASE(OP_EPUSH, B): diff --git a/src/dump.c b/src/dump.c index 093e4c256..a1c539e50 100644 --- a/src/dump.c +++ b/src/dump.c @@ -90,14 +90,12 @@ write_iseq_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf, uint8_t fla #ifndef MRB_WITHOUT_FLOAT static mrb_value -float_to_str(mrb_state *mrb, mrb_value flt) +float_to_str(mrb_state *mrb, mrb_float f) { - mrb_float f = mrb_float(flt); - if (isinf(f)) { return f < 0 ? mrb_str_new_lit(mrb, "I") : mrb_str_new_lit(mrb, "i"); } - return mrb_float_to_str(mrb, flt, MRB_FLOAT_FMT); + return mrb_float_to_str(mrb, mrb_float_value(mrb, f), MRB_FLOAT_FMT); } #endif @@ -106,45 +104,50 @@ get_pool_block_size(mrb_state *mrb, const mrb_irep *irep) { int pool_no; size_t size = 0; - mrb_value str; - size += sizeof(uint32_t); /* plen */ - size += irep->plen * (sizeof(uint8_t) + sizeof(uint16_t)); /* len(n) */ + size += sizeof(uint16_t); /* plen */ + size += irep->plen * sizeof(uint8_t); /* len(n) */ for (pool_no = 0; pool_no < irep->plen; pool_no++) { int ai = mrb_gc_arena_save(mrb); - switch (mrb_type(irep->pool[pool_no])) { - case MRB_TT_FIXNUM: - str = mrb_fixnum_to_str(mrb, irep->pool[pool_no], 10); + switch (irep->pool[pool_no].tt) { + case IREP_TT_INT64: +#ifdef MRB_INT64 { - mrb_int len = RSTRING_LEN(str); - mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX); - size += (size_t)len; + int64_t i = irep->pool[pool_no].u.i64; + + if (i < INT32_MIN || INT32_MAX < i) + size += 8; + else + size += 4; } break; +#else + /* fall through */ +#endif + case IREP_TT_INT32: + size += 4; /* 32bits = 4bytes */ + break; + case IREP_TT_FLOAT: #ifndef MRB_WITHOUT_FLOAT - case MRB_TT_FLOAT: - str = float_to_str(mrb, irep->pool[pool_no]); { + mrb_value str = float_to_str(mrb, irep->pool[pool_no].u.f); mrb_int len = RSTRING_LEN(str); mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX); size += (size_t)len; } - break; #endif + break; - case MRB_TT_STRING: + default: /* packed IREP_TT_STRING */ { - mrb_int len = RSTRING_LEN(irep->pool[pool_no]); + mrb_int len = irep->pool[pool_no].tt >> 1; /* unpack length */ mrb_assert_int_fit(mrb_int, len, size_t, SIZE_MAX); - size += (size_t)len; + size += (size_t)len+1; } break; - - default: - break; } mrb_gc_arena_restore(mrb, ai); } @@ -157,48 +160,64 @@ write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) { int pool_no; uint8_t *cur = buf; - uint16_t len; - mrb_value str; - const char *char_ptr; + int len; + const char *ptr; - cur += uint32_to_bin(irep->plen, cur); /* number of pool */ + cur += uint16_to_bin(irep->plen, cur); /* number of pool */ for (pool_no = 0; pool_no < irep->plen; pool_no++) { int ai = mrb_gc_arena_save(mrb); - switch (mrb_type(irep->pool[pool_no])) { - case MRB_TT_FIXNUM: - cur += uint8_to_bin(IREP_TT_FIXNUM, cur); /* data type */ - str = mrb_fixnum_to_str(mrb, irep->pool[pool_no], 10); + switch (irep->pool[pool_no].tt) { +#ifdef MRB_INT64 + case IREP_TT_INT64: + { + int64_t i = irep->pool[pool_no].u.i64; + if (i < INT32_MIN || INT32_MAX < i) { + cur += uint8_to_bin(IREP_TT_INT64, cur); /* data type */ + cur += uint32_to_bin((uint32_t)((i>>32) & 0xffffffff), cur); /* i64 hi */ + cur += uint32_to_bin((uint32_t)((i ) & 0xffffffff), cur); /* i64 lo */ + } + else { + cur += uint8_to_bin(IREP_TT_INT32, cur); /* data type */ + cur += uint32_to_bin(irep->pool[pool_no].u.i32, cur); /* i32 */ + } + } + break; +#endif + case IREP_TT_INT32: + cur += uint8_to_bin(IREP_TT_INT32, cur); /* data type */ + cur += uint32_to_bin(irep->pool[pool_no].u.i32, cur); /* i32 */ break; -#ifndef MRB_WITHOUT_FLOAT - case MRB_TT_FLOAT: + case IREP_TT_FLOAT: cur += uint8_to_bin(IREP_TT_FLOAT, cur); /* data type */ - str = float_to_str(mrb, irep->pool[pool_no]); - break; +#ifndef MRB_WITHOUT_FLOAT + { + mrb_value str = float_to_str(mrb, irep->pool[pool_no].u.f); + ptr = RSTRING_PTR(str); + len = RSTRING_LEN(str); + mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX); + cur += uint16_to_bin((uint16_t)len, cur); /* data length */ + memcpy(cur, ptr, (size_t)len); + cur += len; + } +#else + cur += uint16_to_bin(0, cur); /* zero length */ #endif - - case MRB_TT_STRING: - cur += uint8_to_bin(IREP_TT_STRING, cur); /* data type */ - str = irep->pool[pool_no]; break; - default: - continue; - } - - char_ptr = RSTRING_PTR(str); - { - mrb_int tlen = RSTRING_LEN(str); - mrb_assert_int_fit(mrb_int, tlen, uint16_t, UINT16_MAX); - len = (uint16_t)tlen; + default: /* string */ + cur += uint8_to_bin(IREP_TT_STR, cur); /* data type */ + ptr = irep->pool[pool_no].u.str; + len = irep->pool[pool_no].tt>>2; + mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX); + cur += uint16_to_bin((uint16_t)len, cur); /* data length */ + memcpy(cur, ptr, (size_t)len); + cur += len; + *cur++ = '\0'; + break; } - - cur += uint16_to_bin(len, cur); /* data length */ - memcpy(cur, char_ptr, (size_t)len); - cur += len; - mrb_gc_arena_restore(mrb, ai); } diff --git a/src/etc.c b/src/etc.c index 74b9ab03b..99cdc0157 100644 --- a/src/etc.c +++ b/src/etc.c @@ -158,17 +158,6 @@ mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) MRB_SET_FROZEN_FLAG(v.value.bp); return v; } - -MRB_API mrb_value -mrb_word_boxing_float_pool(mrb_state *mrb, mrb_float f) -{ - struct RFloat *nf = (struct RFloat *)mrb_malloc(mrb, sizeof(struct RFloat)); - nf->tt = MRB_TT_FLOAT; - nf->c = mrb->float_class; - nf->f = f; - MRB_SET_FROZEN_FLAG(nf); - return mrb_obj_value(nf); -} #endif /* MRB_WITHOUT_FLOAT */ #endif /* MRB_WORD_BOXING */ diff --git a/src/load.c b/src/load.c index d47027350..39644c34b 100644 --- a/src/load.c +++ b/src/load.c @@ -73,10 +73,10 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag uint16_t tt, pool_data_len, snl; int plen; struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); - mrb_value *pool; + mrb_pool_value *pool; mrb_sym *syms; + mrb_int ai = mrb_gc_arena_save(mrb); mrb_irep *irep = mrb_add_irep(mrb); - int ai = mrb_gc_arena_save(mrb); irep_obj->data = irep; @@ -120,51 +120,81 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag } /* POOL BLOCK */ - plen = bin_to_uint32(src); /* number of pool */ - src += sizeof(uint32_t); + plen = bin_to_uint16(src); /* number of pool */ + src += sizeof(uint16_t); if (plen > 0) { if (SIZE_ERROR_MUL(plen, sizeof(mrb_value))) { return NULL; } - irep->pool = pool = (mrb_value*)mrb_malloc(mrb, sizeof(mrb_value) * plen); + irep->pool = pool = (mrb_pool_value*)mrb_calloc(mrb, sizeof(mrb_pool_value), plen); for (i = 0; i < plen; i++) { - const char *s; mrb_bool st = (flags & FLAG_SRC_MALLOC)==0; tt = *src++; /* pool TT */ - pool_data_len = bin_to_uint16(src); /* pool data length */ - src += sizeof(uint16_t); - s = (const char*)src; - src += pool_data_len; switch (tt) { /* pool data */ - case IREP_TT_FIXNUM: { - mrb_value num = mrb_str_len_to_inum(mrb, s, pool_data_len, 10, FALSE); -#ifdef MRB_WITHOUT_FLOAT - pool[i] = num; + case IREP_TT_INT32: + { + mrb_int v = (int32_t)bin_to_uint32(src); + src += sizeof(uint32_t); +#ifdef MRB_INT64 + pool[i].tt = IREP_TT_INT64; + pool[i].u.i64 = (int64_t)v; #else - pool[i] = mrb_float_p(num)? mrb_float_pool(mrb, mrb_float(num)) : num; + pool[i].tt = IREP_TT_INT32; + pool[i].u.i32 = v; #endif } break; + case IREP_TT_INT64: +#ifdef MRB_INT64 + { + uint64_t i = bin_to_uint32(src); + src += sizeof(uint32_t); + i <<= 32; + i |= bin_to_uint32(src); + src += sizeof(uint32_t); + pool[i].u.i64 = (int64_t)i; + } +#else + return NULL; /* INT64 not supported on MRB_INT32 */ +#endif + break; -#ifndef MRB_WITHOUT_FLOAT case IREP_TT_FLOAT: - pool[i] = mrb_float_pool(mrb, str_to_double(mrb, s, pool_data_len)); +#ifndef MRB_WITHOUT_FLOAT + pool[i].tt = tt; + pool_data_len = bin_to_uint16(src); /* pool data length */ + src += sizeof(uint16_t); + pool[i].u.f = str_to_double(mrb, (const char*)src, pool_data_len); + src += pool_data_len; break; +#else + return NULL; /* MRB_WITHOUT_FLOAT */ #endif - case IREP_TT_STRING: - pool[i] = mrb_str_pool(mrb, s, pool_data_len, st); + case IREP_TT_STR: + pool_data_len = bin_to_uint16(src); /* pool data length */ + src += sizeof(uint16_t); + if (st) { + pool[i].tt = (pool_data_len<<2) | IREP_TT_SSTR; + pool[i].u.str = (const char*)src; + } + else { + char *p; + pool[i].tt = (pool_data_len<<2) | IREP_TT_STR; + p = (char*)mrb_malloc(mrb, pool_data_len+1); + memcpy(p, src, pool_data_len+1); + pool[i].u.str = (const char*)p; + } + src += pool_data_len + 1; break; default: /* should not happen */ - pool[i] = mrb_nil_value(); - break; + return NULL; } - irep->plen++; - mrb_gc_arena_restore(mrb, ai); + irep->plen = i+1; } } @@ -193,7 +223,6 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag syms[i] = mrb_intern_static(mrb, (char *)src, snl); } src += snl + 1; - mrb_gc_arena_restore(mrb, ai); } } diff --git a/src/state.c b/src/state.c index 323532363..7a1283fa6 100644 --- a/src/state.c +++ b/src/state.c @@ -144,18 +144,14 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) if (irep->flags & MRB_IREP_NO_FREE) return; if (!(irep->flags & MRB_ISEQ_NO_FREE)) mrb_free(mrb, (void*)irep->iseq); - if (irep->pool) for (i=0; iplen; i++) { - if (mrb_string_p(irep->pool[i])) { - mrb_gc_free_str(mrb, RSTRING(irep->pool[i])); - mrb_free(mrb, mrb_obj_ptr(irep->pool[i])); + if (irep->pool) { + for (i=0; iplen; i++) { + if ((irep->pool[i].tt & 3) == IREP_TT_STR) { + mrb_free(mrb, (void*)irep->pool[i].u.str); + } } -#if defined(MRB_WORD_BOXING) && !defined(MRB_WITHOUT_FLOAT) - else if (mrb_float_p(irep->pool[i])) { - mrb_free(mrb, mrb_obj_ptr(irep->pool[i])); - } -#endif + mrb_free(mrb, (void*)irep->pool); } - mrb_free(mrb, (void*)irep->pool); mrb_free(mrb, (void*)irep->syms); if (irep->reps) { for (i=0; irlen; i++) { diff --git a/src/string.c b/src/string.c index 97795221c..73e514f41 100644 --- a/src/string.c +++ b/src/string.c @@ -583,9 +583,6 @@ str_share(mrb_state *mrb, struct RString *orig, struct RString *s) else if (RSTR_FSHARED_P(orig)) { str_init_fshared(orig, s, orig->as.heap.aux.fshared); } - else if (mrb_frozen_p(orig) && !RSTR_POOL_P(orig)) { - str_init_fshared(orig, s, orig); - } else { if (orig->as.heap.aux.capa > orig->as.heap.len) { orig->as.heap.ptr = (char *)mrb_realloc(mrb, orig->as.heap.ptr, len+1); @@ -596,29 +593,6 @@ str_share(mrb_state *mrb, struct RString *orig, struct RString *s) } } -mrb_value -mrb_str_pool(mrb_state *mrb, const char *p, mrb_int len, mrb_bool nofree) -{ - struct RString *s = (struct RString *)mrb_malloc(mrb, sizeof(struct RString)); - - s->tt = MRB_TT_STRING; - s->c = mrb->string_class; - s->flags = 0; - - if (RSTR_EMBEDDABLE_P(len)) { - str_init_embed(s, p, len); - } - else if (nofree) { - str_init_nofree(s, p, len); - } - else { - str_init_normal(mrb, s, p, len); - } - RSTR_SET_POOL_FLAG(s); - MRB_SET_FROZEN_FLAG(s); - return mrb_obj_value(s); -} - mrb_value mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len) { diff --git a/src/vm.c b/src/vm.c index 064086fb9..c3fa12d3d 100644 --- a/src/vm.c +++ b/src/vm.c @@ -966,7 +966,7 @@ mrb_vm_exec(mrb_state *mrb, struct RProc *proc, const mrb_code *pc) /* mrb_assert(MRB_PROC_CFUNC_P(proc)) */ const mrb_code *pc0 = pc; const mrb_irep *irep = proc->body.irep; - const mrb_value *pool = irep->pool; + const mrb_pool_value *pool = irep->pool; const mrb_sym *syms = irep->syms; mrb_code insn; int ai = mrb_gc_arena_save(mrb); @@ -1013,17 +1013,25 @@ RETRY_TRY_BLOCK: } CASE(OP_LOADL, BB) { -#ifdef MRB_WORD_BOXING - mrb_value val = pool[b]; -#ifndef MRB_WITHOUT_FLOAT - if (mrb_float_p(val)) { - val = mrb_float_value(mrb, mrb_float(val)); - } + switch (pool[b].tt) { /* number */ + case IREP_TT_INT32: + regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i32); + break; +#ifdef MRB_INT64 + case IREP_TT_INT64: + regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i64); + break; #endif - regs[a] = val; -#else - regs[a] = pool[b]; +#ifndef MRB_WITHOUT_FLOAT + case IREP_TT_FLOAT: + regs[a] = mrb_float_value(mrb, pool[b].u.f); + break; #endif + default: + /* should not happen (tt:string) */ + regs[a] = mrb_nil_value(); + break; + } NEXT; } @@ -2499,9 +2507,13 @@ RETRY_TRY_BLOCK: } CASE(OP_STRING, BB) { - mrb_value str = mrb_str_dup(mrb, pool[b]); - - regs[a] = str; + size_t len = pool[b].tt >> 2; + if (pool[b].tt & IREP_TT_SFLAG) { + regs[a] = mrb_str_new_static(mrb, pool[b].u.str, len); + } + else { + regs[a] = mrb_str_new(mrb, pool[b].u.str, len); + } mrb_gc_arena_restore(mrb, ai); NEXT; } @@ -2703,10 +2715,11 @@ RETRY_TRY_BLOCK: } CASE(OP_ERR, B) { - mrb_value msg = mrb_str_dup(mrb, pool[a]); + size_t len = pool[a].tt >> 2; mrb_value exc; - exc = mrb_exc_new_str(mrb, E_LOCALJUMP_ERROR, msg); + mrb_assert((pool[a].tt&IREP_TT_NFLAG)==0); + exc = mrb_exc_new(mrb, E_LOCALJUMP_ERROR, pool[a].u.str, len); ERR_PC_SET(mrb); mrb_exc_set(mrb, exc); goto L_RAISE; -- cgit v1.2.3 From 52507b1083ba1c562ae506d63a07a51a26815c21 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 11 Jun 2020 15:37:49 +0900 Subject: Generate C struct from `irep` instead of binary dump. --- Rakefile | 58 ++++++++---- include/mruby.h | 8 +- include/mruby/compile.h | 4 +- include/mruby/error.h | 4 +- include/mruby/proc.h | 7 +- lib/mruby/build/command.rb | 2 +- lib/mruby/gem.rb | 17 ++-- mrbgems/mruby-compiler/core/codegen.c | 2 +- mrbgems/mruby-compiler/core/parse.y | 4 +- mrbgems/mruby-compiler/core/y.tab.c | 4 +- mrbgems/mruby-enumerator/mrblib/enumerator.rb | 1 + mrbgems/mruby-metaprog/src/metaprog.c | 7 +- mrbgems/mruby-socket/src/socket.c | 4 +- mrbgems/mruby-symbol-ext/test/symbol.rb | 6 +- mrbgems/mruby-test/driver.c | 4 +- mrbgems/mruby-test/mrbgem.rake | 14 +-- mrblib/init_mrblib.c | 11 --- mrblib/mrblib.rake | 17 +++- src/class.c | 3 + src/dump.c | 123 +++++++++----------------- src/gc.c | 11 ++- src/kernel.c | 4 +- src/load.c | 6 ++ src/proc.c | 4 +- src/symbol.c | 9 ++ src/variable.c | 12 +-- src/vm.c | 26 +++--- test/presym | 4 + 28 files changed, 201 insertions(+), 175 deletions(-) create mode 100644 test/presym (limited to 'mrbgems/mruby-compiler/core') diff --git a/Rakefile b/Rakefile index 75ed5c905..2198b27fd 100644 --- a/Rakefile +++ b/Rakefile @@ -106,11 +106,17 @@ end mkdir_p "#{MRUBY_ROOT}/build" cfiles = (Dir.glob("#{MRUBY_ROOT}/src/*.c")+ - Dir.glob("#{MRUBY_ROOT}/mrbgems/*/{core,src}/*.c")+ - Dir.glob("#{MRUBY_ROOT}/build/*/mrbgems/**/{src,core}/*.c")).uniq -rbfiles = (Dir.glob("#{MRUBY_ROOT}/mrblib/*.rb")+ - Dir.glob("#{MRUBY_ROOT}/mrbgems/*/mrblib/*.rb")+ - Dir.glob("#{MRUBY_ROOT}/build/*/mrbgems/**/mrblib/*.rb")).uniq + Dir.glob("#{MRUBY_ROOT}/mrbgems/**/*.c")+ + Dir.glob("#{MRUBY_ROOT}/build/*/mrbgems/**/{src,test,core}/*.c")).uniq +rbfiles = (Dir.glob("#{MRUBY_ROOT}/{mrblib,test,test/t}/*.rb")+ + Dir.glob("#{MRUBY_ROOT}/mrbgems/*/{mrblib,test}/*.rb")+ + Dir.glob("#{MRUBY_ROOT}/build/*/mrbgems/**/{mrblib,test}/*.rb")).uniq +psfiles = Dir.glob("#{MRUBY_ROOT}/{mrblib,mrbgems,test}/**/presym") +symbols = [] +psfiles.each do |file| + symbols += File.readlines(file).grep_v(/^# /) +end +symbols.each{|x| x.chomp!} presym_file="#{MRUBY_ROOT}/build/presym" op_table = { "!" => "not", @@ -145,30 +151,42 @@ op_table = { "~" => "neg", } -file presym_file => cfiles+rbfiles+[__FILE__] do +file presym_file => cfiles+rbfiles+psfiles+[__FILE__] do csymbols = cfiles.map do |f| src = File.read(f) [src.scan(/intern_lit\([^\n"]*"([^\n "]*)"/), src.scan(/mrb_define_method\([^\n"]*"([^\n"]*)"/), + src.scan(/mrb_define_class_method\([^\n"]*"([^\n"]*)"/), src.scan(/mrb_define_class\([^\n"]*"([^\n"]*)"/), src.scan(/mrb_define_module\([^\n"]*"([^\n"]*)"/), src.scan(/mrb_define_module_function\([^\n"]*"([^\n"]*)"/), + src.scan(/mrb_define_const\([^\n"]*"([^\n"]*)"/), + src.scan(/mrb_define_global_const\([^\n"]*"([^\n"]*)"/), src.scan(/MRB_SYM\((\w+)\)/), src.scan(/MRB_QSYM\((\w+)\)/).map{|x,| - x.sub!(/_p$/, "?") || x.sub!(/_b$/, "!") || x.sub!(/_e$/, "=") || x.sub!(/^a_/, "@") || x.sub!(/^d_/, "$") + x.sub!(/_p$/, "?") || x.sub!(/_b$/, "!") || x.sub!(/_e$/, "=") || x.sub!(/^0_/, "@") || x.sub!(/^00_/, "@@") }.compact] end rbsymbols = rbfiles.map do |f| src = File.read(f) + src.force_encoding(Encoding::BINARY) [src.scan(/\bclass +([A-Z]\w*)/), src.scan(/\bmodule +([A-Z]\w*)/), - src.scan(/\bdef +(\w+[!?]?)/), + src.scan(/\bdef +(\w+[!?=]?)/), src.scan(/\balias +(\w+[!?]?)/), - src.scan(/\b([A-Z]\w+) *=/), - src.scan(/(@\w+)/), - src.scan(/:(\w+)/)] + src.scan(/\b([A-Z]\w*) *=[^=]/), + src.scan(/(\$[a-zA-Z_]\w*)/), + src.scan(/(\$[$!?]\w*)/), + src.scan(/(@@?[a-zA-Z_]\w*)/), + src.scan(/[^.]\.([a-zA-Z_]\w*[!?]?)/), + src.scan(/\.([a-zA-Z_]\w* *=)/).map{|x|x.map{|s|s.gsub(' ', '')}}, + src.scan(/\b([a-zA-Z_]\w*):/), + src.scan(/:([a-zA-Z_]\w*[!?=]?)/), + src.scan(/[\(\[\{ ]:"([^"]+)"/).map{|x|x.map{|s|s.gsub('\#', '#')}}, + src.scan(/[ \(\[\{]:'([^']+)'/) + ] end - symbols = (csymbols+rbsymbols+op_table.keys).flatten.compact.uniq.sort + symbols = (symbols+csymbols+rbsymbols+op_table.keys).flatten.compact.uniq.sort.map{|x| x.gsub("\n", '\n')} presyms = File.readlines(presym_file) rescue [] presyms.each{|x| x.chomp!} if presyms != symbols @@ -182,10 +200,12 @@ file presym_inc => presym_file do presyms.each{|x| x.chomp!} File.open(presym_inc, "w") do |f| f.print "/* MRB_PRESYM_CSYM(sym, num) - symbol which is valid C id name */\n" - f.print "/* MRB_PRESYM_QSYM(sym, name, num) - symbol with alias name */\n" - f.print "/* MRB_PRESYM_SYM(sym, num) - symbol which is not valid C id */\n\n" + f.print "/* MRB_PRESYM_QSYM(name, sym, num) - symbol with alias name */\n" + f.print "/* MRB_PRESYM_SYM(name, num) - symbol which is not valid C id */\n" presyms.each.with_index do |sym,i| - if /\A\w+\Z/ =~ sym + if sym.bytes.detect{|x|x>0x80} || /\A\$/ =~ sym + f.print "MRB_PRESYM_SYM(\"#{sym}\", #{i+1})\n" + elsif /\A\w+\Z/ =~ sym f.print "MRB_PRESYM_CSYM(#{sym}, #{i+1})\n" elsif op_table.key?(sym) f.print "MRB_PRESYM_QSYM(\"#{sym}\", #{op_table[sym]}, #{i+1})\n" @@ -198,11 +218,11 @@ file presym_inc => presym_file do elsif /\=\Z/ =~ sym s = sym.dup; s[-1] = "_e" f.print "MRB_PRESYM_QSYM(\"#{sym}\", #{s}, #{i+1})\n" - elsif /\A@/ =~ sym - s = sym.dup; s[0] = "a_" + elsif /\A@@/ =~ sym + s = sym.dup; s[0,2] = "00_" f.print "MRB_PRESYM_QSYM(\"#{sym}\", #{s}, #{i+1})\n" - elsif /\A$/ =~ sym - s = sym.dup; s[0] = "d_" + elsif /\A@/ =~ sym + s = sym.dup; s[0] = "0_" f.print "MRB_PRESYM_QSYM(\"#{sym}\", #{s}, #{i+1})\n" else f.print "MRB_PRESYM_SYM(\"#{sym}\", #{i+1})\n" diff --git a/include/mruby.h b/include/mruby.h index 59188e6b5..27c428e85 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -147,7 +147,7 @@ typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud); typedef struct { mrb_sym mid; - struct RProc *proc; + const struct RProc *proc; mrb_value *stackent; uint16_t ridx; uint16_t epos; @@ -1202,9 +1202,9 @@ MRB_API void mrb_close(mrb_state *mrb); MRB_API void* mrb_default_allocf(mrb_state*, void*, size_t, void*); MRB_API mrb_value mrb_top_self(mrb_state *mrb); -MRB_API mrb_value mrb_top_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep); -MRB_API mrb_value mrb_vm_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep); -MRB_API mrb_value mrb_vm_exec(mrb_state *mrb, struct RProc *proc, const mrb_code *iseq); +MRB_API mrb_value mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep); +MRB_API mrb_value mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep); +MRB_API mrb_value mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *iseq); /* compatibility macros */ #define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k)) #define mrb_toplevel_run(m,p) mrb_toplevel_run_keep((m),(p),0) diff --git a/include/mruby/compile.h b/include/mruby/compile.h index e8ab91eb9..36adf5a32 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -33,7 +33,7 @@ typedef struct mrbc_context { mrb_bool no_exec:1; mrb_bool keep_lv:1; mrb_bool no_optimize:1; - struct RProc *upper; + const struct RProc *upper; size_t parser_nerr; } mrbc_context; @@ -153,7 +153,7 @@ struct mrb_parser_state { mrb_bool no_optimize:1; mrb_bool capture_errors:1; - struct RProc *upper; + const struct RProc *upper; struct mrb_parser_message error_buffer[10]; struct mrb_parser_message warn_buffer[10]; diff --git a/include/mruby/error.h b/include/mruby/error.h index d24b5b0c3..72f6c5f3d 100644 --- a/include/mruby/error.h +++ b/include/mruby/error.h @@ -35,7 +35,7 @@ MRB_API mrb_value mrb_f_raise(mrb_state*, mrb_value); #if defined(MRB_64BIT) || defined(MRB_USE_FLOAT) || defined(MRB_NAN_BOXING) || defined(MRB_WORD_BOXING) struct RBreak { MRB_OBJECT_HEADER; - struct RProc *proc; + const struct RProc *proc; mrb_value val; }; #define mrb_break_value_get(brk) ((brk)->val) @@ -43,7 +43,7 @@ struct RBreak { #else struct RBreak { MRB_OBJECT_HEADER; - struct RProc *proc; + const struct RProc *proc; union mrb_value_union value; }; #define RBREAK_VALUE_TT_MASK ((1 << 8) - 1) diff --git a/include/mruby/proc.h b/include/mruby/proc.h index 2d06210ef..fe0cf2eb0 100644 --- a/include/mruby/proc.h +++ b/include/mruby/proc.h @@ -44,7 +44,7 @@ struct RProc { const mrb_irep *irep; mrb_func_t func; } body; - struct RProc *upper; + const struct RProc *upper; union { struct RClass *target_class; struct REnv *env; @@ -93,9 +93,6 @@ MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int void mrb_proc_copy(struct RProc *a, struct RProc *b); mrb_int mrb_proc_arity(const struct RProc *p); -/* implementation of #send method */ -mrb_value mrb_f_send(mrb_state *mrb, mrb_value self); - /* following functions are defined in mruby-proc-ext so please include it when using */ MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state *mrb, mrb_func_t func, mrb_int argc, const mrb_value *argv); MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx); @@ -137,6 +134,8 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx); #include KHASH_DECLARE(mt, mrb_sym, mrb_method_t, TRUE) +MRB_API mrb_value mrb_load_proc(mrb_state *mrb, const struct RProc *proc); + MRB_END_DECL #endif /* MRUBY_PROC_H */ diff --git a/lib/mruby/build/command.rb b/lib/mruby/build/command.rb index 84ce78cb9..39981cc32 100644 --- a/lib/mruby/build/command.rb +++ b/lib/mruby/build/command.rb @@ -310,7 +310,7 @@ module MRuby def initialize(build) super @command = nil - @compile_options = "-B%{funcname} -o-" + @compile_options = "-S -B%{funcname} -o-" end def run(out, infiles, funcname) diff --git a/lib/mruby/gem.rb b/lib/mruby/gem.rb index 6fcaad9c1..d6b1a6851 100644 --- a/lib/mruby/gem.rb +++ b/lib/mruby/gem.rb @@ -174,7 +174,7 @@ module MRuby def generate_gem_init(fname) open(fname, 'w') do |f| print_gem_init_header f - build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}" unless rbfiles.empty? + build.mrbc.run f, rbfiles, "gem_mrblib_#{funcname}_proc" unless rbfiles.empty? f.puts %Q[void mrb_#{funcname}_gem_init(mrb_state *mrb);] f.puts %Q[void mrb_#{funcname}_gem_final(mrb_state *mrb);] f.puts %Q[] @@ -183,7 +183,7 @@ module MRuby f.puts %Q[ struct REnv *e;] unless rbfiles.empty? f.puts %Q[ mrb_#{funcname}_gem_init(mrb);] if objs != [objfile("#{build_dir}/gem_init")] unless rbfiles.empty? - f.puts %Q[ mrb_load_irep(mrb, gem_mrblib_irep_#{funcname});] + f.puts %Q[ mrb_load_proc(mrb, gem_mrblib_#{funcname}_proc);] f.puts %Q[ if (mrb->exc) {] f.puts %Q[ mrb_print_error(mrb);] f.puts %Q[ mrb_close(mrb);] @@ -215,10 +215,13 @@ module MRuby def print_gem_init_header(f) print_gem_comment(f) - f.puts %Q[#include ] unless rbfiles.empty? - f.puts %Q[#include ] - f.puts %Q[#include ] unless rbfiles.empty? - f.puts %Q[#include ] unless rbfiles.empty? + unless rbfiles.empty? + f.puts %Q[#include ] + f.puts %Q[#include ] + f.puts %Q[#include ] + else + f.puts %Q[#include ] + end end def print_gem_test_header(f) @@ -226,7 +229,7 @@ module MRuby f.puts %Q[#include ] f.puts %Q[#include ] f.puts %Q[#include ] - f.puts %Q[#include ] + f.puts %Q[#include ] f.puts %Q[#include ] f.puts %Q[#include ] unless test_args.empty? end diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 0000e6dbe..5d29dcb2d 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -706,7 +706,7 @@ lv_idx(codegen_scope *s, mrb_sym id) static int search_upvar(codegen_scope *s, mrb_sym id, int *idx) { - struct RProc *u; + const struct RProc *u; int lv = 0; codegen_scope *up = s->prev; diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index cb4126713..c7c3d2a2f 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -265,7 +265,7 @@ local_unnest(parser_state *p) static mrb_bool local_var_p(parser_state *p, mrb_sym sym) { - struct RProc *u; + const struct RProc *u; node *l = p->locals; while (l) { @@ -282,7 +282,7 @@ local_var_p(parser_state *p, mrb_sym sym) const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; const struct mrb_lvinfo *v = ir->lv; - for (; n > 1; n --, v ++) { + for (; v && n > 1; n--, v++) { if (v->name == sym) return TRUE; } if (MRB_PROC_SCOPE_P(u)) break; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 504ec6d04..dbcc6a5bd 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -328,7 +328,7 @@ local_unnest(parser_state *p) static mrb_bool local_var_p(parser_state *p, mrb_sym sym) { - struct RProc *u; + const struct RProc *u; node *l = p->locals; while (l) { @@ -345,7 +345,7 @@ local_var_p(parser_state *p, mrb_sym sym) const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; const struct mrb_lvinfo *v = ir->lv; - for (; n > 1; n --, v ++) { + for (; v && n > 1; n--, v++) { if (v->name == sym) return TRUE; } if (MRB_PROC_SCOPE_P(u)) break; diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb index 5a98dc964..f007b8553 100644 --- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb +++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb @@ -130,6 +130,7 @@ class Enumerator @feedvalue = nil @stop_exc = false end + attr_accessor :obj, :meth, :args attr_reader :fib diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index 8a4a6dc69..7a7639410 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -132,7 +132,7 @@ mrb_obj_ivar_set(mrb_state *mrb, mrb_value self) static mrb_value mrb_local_variables(mrb_state *mrb, mrb_value self) { - struct RProc *proc; + const struct RProc *proc; const mrb_irep *irep; mrb_value vars; size_t i; @@ -664,7 +664,7 @@ mrb_mod_s_constants(mrb_state *mrb, mrb_value mod) static mrb_value mrb_mod_s_nesting(mrb_state *mrb, mrb_value mod) { - struct RProc *proc; + const struct RProc *proc; mrb_value ary; struct RClass *c = NULL; @@ -684,6 +684,9 @@ mrb_mod_s_nesting(mrb_state *mrb, mrb_value mod) return ary; } +/* implementation of #send method */ +mrb_value mrb_f_send(mrb_state *mrb, mrb_value self); + void mrb_mruby_metaprog_gem_init(mrb_state* mrb) { diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index f158959a7..001021b81 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -200,7 +200,7 @@ mrb_addrinfo_getnameinfo(mrb_state *mrb, mrb_value self) host = mrb_str_buf_new(mrb, NI_MAXHOST); serv = mrb_str_buf_new(mrb, NI_MAXSERV); - sastr = mrb_iv_get(mrb, self, MRB_QSYM(a_sockaddr)); + sastr = mrb_iv_get(mrb, self, MRB_QSYM(0_sockaddr)); if (!mrb_string_p(sastr)) { mrb_raise(mrb, E_SOCKET_ERROR, "invalid sockaddr"); } @@ -222,7 +222,7 @@ mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self) { mrb_value sastr; - sastr = mrb_iv_get(mrb, self, MRB_QSYM(a_sockaddr)); + sastr = mrb_iv_get(mrb, self, MRB_QSYM(0_sockaddr)); if (((struct sockaddr *)RSTRING_PTR(sastr))->sa_family != AF_UNIX) mrb_raise(mrb, E_SOCKET_ERROR, "need AF_UNIX address"); if (RSTRING_LEN(sastr) < (mrb_int)offsetof(struct sockaddr_un, sun_path) + 1) { diff --git a/mrbgems/mruby-symbol-ext/test/symbol.rb b/mrbgems/mruby-symbol-ext/test/symbol.rb index db686e5f4..34c3c6ba5 100644 --- a/mrbgems/mruby-symbol-ext/test/symbol.rb +++ b/mrbgems/mruby-symbol-ext/test/symbol.rb @@ -13,13 +13,13 @@ end %w[size length].each do |n| assert("Symbol##{n}") do assert_equal 5, :hello.__send__(n) - assert_equal 4, :"aA\0b".__send__(n) + assert_equal 4, :"aA b".__send__(n) if __ENCODING__ == "UTF-8" assert_equal 8, :"こんにちは世界!".__send__(n) - assert_equal 4, :"aあ\0b".__send__(n) + assert_equal 4, :"aあ b".__send__(n) else assert_equal 22, :"こんにちは世界!".__send__(n) - assert_equal 6, :"aあ\0b".__send__(n) + assert_equal 6, :"aあ b".__send__(n) end end end diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index a5f723927..fe1a475d5 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -18,7 +18,7 @@ #include #include -extern const uint8_t mrbtest_assert_irep[]; +extern const struct RProc mrbtest_assert_proc[]; void mrbgemtest_init(mrb_state* mrb); void mrb_init_test_vformat(mrb_state* mrb); @@ -300,7 +300,7 @@ main(int argc, char **argv) } mrb_init_test_driver(mrb, verbose); - mrb_load_irep(mrb, mrbtest_assert_irep); + mrb_load_proc(mrb, mrbtest_assert_proc); mrbgemtest_init(mrb); ret = eval_test(mrb); mrb_close(mrb); diff --git a/mrbgems/mruby-test/mrbgem.rake b/mrbgems/mruby-test/mrbgem.rake index ced252ae6..9e8e4041f 100644 --- a/mrbgems/mruby-test/mrbgem.rake +++ b/mrbgems/mruby-test/mrbgem.rake @@ -28,7 +28,7 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| file assert_c => [assert_rb, build.mrbcfile] do |t| mkdir_p File.dirname(t.name) open(t.name, 'w') do |f| - mrbc.run f, assert_rb, 'mrbtest_assert_irep' + mrbc.run f, assert_rb, 'mrbtest_assert_proc' end end @@ -56,12 +56,12 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| f.puts %Q[ * All manual changes will get lost.] f.puts %Q[ */] if test_preload.nil? - f.puts %Q[extern const uint8_t mrbtest_assert_irep[];] + f.puts %Q[extern const struct RProc mrbtest_assert_proc[];] else - g.build.mrbc.run f, test_preload, "gem_test_irep_#{g.funcname}_preload" + g.build.mrbc.run f, test_preload, "gem_test_#{g.funcname}_preload" end g.test_rbfiles.flatten.each_with_index do |rbfile, i| - g.build.mrbc.run f, rbfile, "gem_test_irep_#{g.funcname}_#{i}" + g.build.mrbc.run f, rbfile, "gem_test_#{g.funcname}_#{i}_proc" end f.puts %Q[void mrb_#{g.funcname}_gem_test(mrb_state *mrb);] unless g.test_objs.empty? dep_list.each do |d| @@ -90,9 +90,9 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| end f.puts %Q[ mrb_init_test_driver(mrb2, mrb_test(mrb_gv_get(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"))));] if test_preload.nil? - f.puts %Q[ mrb_load_irep(mrb2, mrbtest_assert_irep);] + f.puts %Q[ mrb_load_proc(mrb2, mrbtest_assert_proc);] else - f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_preload);] + f.puts %Q[ mrb_load_proc(mrb2, gem_test_#{g.funcname}_preload);] end f.puts %Q[ if (mrb2->exc) {] f.puts %Q[ mrb_print_error(mrb2);] @@ -113,7 +113,7 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| f.puts %Q[ mrb_#{g.funcname}_gem_test(mrb2);] if g.custom_test_init? - f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_#{i});] + f.puts %Q[ mrb_load_proc(mrb2, gem_test_#{g.funcname}_#{i}_proc);] f.puts %Q[ ] f.puts %Q[ mrb_t_pass_result(mrb, mrb2);] diff --git a/mrblib/init_mrblib.c b/mrblib/init_mrblib.c index 4d4bcd25a..e69de29bb 100644 --- a/mrblib/init_mrblib.c +++ b/mrblib/init_mrblib.c @@ -1,11 +0,0 @@ -#include -#include - -extern const uint8_t mrblib_irep[]; - -void -mrb_init_mrblib(mrb_state *mrb) -{ - mrb_load_irep(mrb, mrblib_irep); -} - diff --git a/mrblib/mrblib.rake b/mrblib/mrblib.rake index 6fba0adc1..724d328fa 100644 --- a/mrblib/mrblib.rake +++ b/mrblib/mrblib.rake @@ -11,8 +11,21 @@ MRuby.each_target do mkdir_p File.dirname(t.name) open(t.name, 'w') do |f| _pp "GEN", "*.rb", "#{t.name.relative_path}" - f.puts File.read("#{current_dir}/init_mrblib.c") - mrbc.run f, rbfiles, 'mrblib_irep' + f.puts %Q[/*] + f.puts %Q[ * This file is loading the mrblib] + f.puts %Q[ *] + f.puts %Q[ * IMPORTANT:] + f.puts %Q[ * This file was generated!] + f.puts %Q[ * All manual changes will get lost.] + f.puts %Q[ */] + mrbc.run f, rbfiles, 'mrblib_proc' + f.puts <u.i64); break; case IREP_TT_FLOAT: - fprintf(fp, "{IREP_TT_FLOAT, {.f="MRB_FLOAT_FMT"}},\n", p->u.f); + if (p->u.f == 0) { + fprintf(fp, "{IREP_TT_FLOAT, {.f=%#.1f}},\n", p->u.f); + } + else { + fprintf(fp, "{IREP_TT_FLOAT, {.f="MRB_FLOAT_FMT"}},\n", p->u.f); + } break; } } @@ -951,83 +956,28 @@ dump_pool(mrb_state *mrb, const mrb_pool_value *p, FILE *fp) const char *s = p->u.str; fprintf(fp, "{IREP_TT_STR|(%d<<2), {.str=\"", len); for (i=0; i", "cmp"}, - {"==", "eq"}, - {"===", "eqq"}, - {"=~", "match"}, - {">", "gt"}, - {">=", "ge"}, - {">>", "rshift"}, - {"[]", "aref"}, - {"[]=", "aset"}, - {"^", "xor"}, - {"`", "tick"}, - {"|", "or"}, - {"||", "oror"}, - {"~", "neg"}, - {0}, -}; - +mrb_bool mrb_sym_static_p(mrb_state *mrb, mrb_sym sym); + static int dump_sym(mrb_state *mrb, mrb_sym sym, FILE *fp) { - mrb_int len; - const char *name = mrb_sym_name_len(mrb, sym, &len); - int i; - - if (len == 0 || len != strlen(name)) - return MRB_DUMP_INVALID_ARGUMENT; - for (i=0; op_table[i].op; i++) { - if (strcmp(name, op_table[i].op) == 0) { - fprintf(fp, "MRB_QSYM(%s),", op_table[i].name); - return MRB_DUMP_OK; - } - } - if (name[0] == '@') { - fprintf(fp, "MRB_QSYM(a_%s),", name+1); - } - else if (name[0] == '$') { - fprintf(fp, "MRB_QSYM(d_%s),", name+1); - } - else if (name[len-1] == '!') { - fprintf(fp, "MRB_QSYM(%.*s_b),", (int)len-1, name); - } - else if (name[len-1] == '?') { - fprintf(fp, "MRB_QSYM(%.*s_p),", (int)len-1, name); - } - else if (name[len-1] == '=') { - fprintf(fp, "MRB_QSYM(%.*s_e),", (int)len-1, name); + const char *name; + if (sym == 0) return MRB_DUMP_INVALID_ARGUMENT; + name = mrb_sym_name(mrb, sym); + if (!name) { + fprintf(stderr, "undefined symbol (%d) - define presym\n", sym); } - else { - fprintf(fp, "MRB_SYM(%s),", name); + if (!mrb_sym_static_p(mrb, sym)) { + fprintf(stderr, "no static symbol (%s) - define presym\n", name); } + fprintf(fp, "%d /* %s */,", sym, name); return MRB_DUMP_OK; } @@ -1065,8 +1015,7 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, len=irep->slen; fprintf(fp, "static const mrb_sym %s_syms_%d[%d] = {", name, n, len); for (i=0; isyms[i], fp) != MRB_DUMP_OK) - return MRB_DUMP_INVALID_ARGUMENT; + dump_sym(mrb, irep->syms[i], fp); } fputs("};\n", fp); } @@ -1078,13 +1027,17 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, fprintf(fp, "0x%02x,", irep->iseq[i]); } fputs("};\n", fp); - /* dump irep */ - if (n == 0) { /* topleve irep */ - fprintf(fp, "static const mrb_irep %s = {\n", name); - } - else { - fprintf(fp, "static const mrb_irep %s_irep_%d = {\n", name, n); + /* dump lv */ + if (irep->lv) { + len=irep->nlocals; + fprintf(fp, "static const struct mrb_lvinfo %s_lv_%d[%d] = {", name, n, len); + for (i=0; i+1lv[i].name, irep->lv[i].r); + } + fputs("};\n", fp); } + /* dump irep */ + fprintf(fp, "static const mrb_irep %s_irep_%d = {\n", name, n); fprintf(fp, " %d,%d,\n", irep->nlocals, irep->nregs); fprintf(fp, " MRB_IREP_STATIC,%s_iseq_%d,\n", name, n); if (irep->pool) { @@ -1105,9 +1058,14 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, else { fputs( "NULL,\n", fp); } - fputs( " NULL,\t\t\t\t\t/* lv */\n", fp); + if (irep->lv) { + fprintf(fp, "%s_lv_%d,\n", name, n); + } + else { + fputs( " NULL,\t\t\t\t\t/* lv */\n", fp); + } fputs( " NULL,\t\t\t\t\t/* debug_info */\n", fp); - fprintf(fp, " %d,%d,%d,%d,0\n};", irep->ilen, irep->plen, irep->slen, irep->rlen); + fprintf(fp, " %d,%d,%d,%d,0\n};\n", irep->ilen, irep->plen, irep->slen, irep->rlen); return MRB_DUMP_OK; } @@ -1116,13 +1074,20 @@ int mrb_dump_irep_cstruct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname) { int max = 1; + int n; + if (fp == NULL || initname == NULL || initname[0] == '\0') { return MRB_DUMP_INVALID_ARGUMENT; } - if (fprintf(fp, "#include \n" "#include \n\n") < 0) { + if (fprintf(fp, "#include \n" "#include \n\n") < 0) { return MRB_DUMP_WRITE_FAULT; } - return dump_irep_struct(mrb, irep, flags, fp, initname, 0, &max); + n = dump_irep_struct(mrb, irep, flags, fp, initname, 0, &max); + if (n != MRB_DUMP_OK) return n; + fprintf(fp, "#ifdef __cplusplus\nextern struct RProc %s[];\n#endif\n", initname); + fprintf(fp, "struct RProc %s[] = {{\n", initname); + fprintf(fp, "NULL,NULL,MRB_TT_PROC,7,0,{&%s_irep_0},NULL,{NULL},\n}};\n", initname); + return MRB_DUMP_OK; } #endif /* MRB_DISABLE_STDIO */ diff --git a/src/gc.c b/src/gc.c index 897fa256f..4bee82364 100644 --- a/src/gc.c +++ b/src/gc.c @@ -35,6 +35,11 @@ * Gray - Marked, But the child objects are unmarked. * Black - Marked, the child objects are also marked. + Extra color + + * Red - Static (ROM object) no need to be collected. + - All child objects should be Red as well. + == Two White Types There're two white color types in a flip-flop fashion: White-A and White-B, @@ -185,6 +190,7 @@ gettimeofday_time(void) #define GC_WHITE_A 1 #define GC_WHITE_B (1 << 1) #define GC_BLACK (1 << 2) +#define GC_RED 7 #define GC_WHITES (GC_WHITE_A | GC_WHITE_B) #define GC_COLOR_MASK 7 @@ -194,7 +200,8 @@ gettimeofday_time(void) #define paint_partial_white(s, o) ((o)->color = (s)->current_white_part) #define is_gray(o) ((o)->color == GC_GRAY) #define is_white(o) ((o)->color & GC_WHITES) -#define is_black(o) ((o)->color & GC_BLACK) +#define is_black(o) ((o)->color == GC_BLACK) +#define is_red(o) ((o)->color == GC_RED) #define flip_white_part(s) ((s)->current_white_part = other_white_part(s)) #define other_white_part(s) ((s)->current_white_part ^ GC_WHITES) #define is_dead(s, o) (((o)->color & other_white_part(s) & GC_WHITES) || (o)->tt == MRB_TT_FREE) @@ -584,7 +591,7 @@ add_gray_list(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) static int ci_nregs(mrb_callinfo *ci) { - struct RProc *p = ci->proc; + const struct RProc *p = ci->proc; int n = 0; if (!p) { diff --git a/src/kernel.c b/src/kernel.c index 519052f4b..e4948143d 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -19,7 +19,7 @@ mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func) { struct RClass *c = mrb_class(mrb, obj); mrb_method_t m = mrb_method_search_vm(mrb, &c, mid); - struct RProc *p; + const struct RProc *p; if (MRB_METHOD_UNDEF_P(m)) return FALSE; if (MRB_METHOD_FUNC_P(m)) @@ -143,7 +143,7 @@ mrb_f_block_given_p_m(mrb_state *mrb, mrb_value self) mrb_value *bp; int bidx; struct REnv *e = NULL; - struct RProc *p; + const struct RProc *p; if (ci <= cibase) { /* toplevel does not have block */ diff --git a/src/load.c b/src/load.c index 39644c34b..31059e833 100644 --- a/src/load.c +++ b/src/load.c @@ -676,6 +676,12 @@ mrb_load_irep_buf(mrb_state *mrb, const void *buf, size_t bufsize) return mrb_load_irep_buf_cxt(mrb, buf, bufsize, NULL); } +MRB_API mrb_value +mrb_load_proc(mrb_state *mrb, const struct RProc *proc) +{ + return mrb_vm_run(mrb, proc, mrb_top_self(mrb), 0); +} + #ifndef MRB_DISABLE_STDIO mrb_irep* diff --git a/src/proc.c b/src/proc.c index 2da2ec77e..14ba407d8 100644 --- a/src/proc.c +++ b/src/proc.c @@ -80,7 +80,7 @@ static void closure_setup(mrb_state *mrb, struct RProc *p) { mrb_callinfo *ci = mrb->c->ci; - struct RProc *up = p->upper; + const struct RProc *up = p->upper; struct REnv *e = NULL; if (ci && ci->env) { @@ -170,7 +170,7 @@ mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals) MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx) { - struct RProc *p = mrb->c->ci->proc; + const struct RProc *p = mrb->c->ci->proc; struct REnv *e; if (!p || !MRB_PROC_CFUNC_P(p)) { diff --git a/src/symbol.c b/src/symbol.c index 9981bad7c..3723335cd 100644 --- a/src/symbol.c +++ b/src/symbol.c @@ -330,6 +330,15 @@ mrb_sym_name_len(mrb_state *mrb, mrb_sym sym, mrb_int *lenp) return sym2name_len(mrb, sym, mrb->symbuf, lenp); } +mrb_bool +mrb_sym_static_p(mrb_state *mrb, mrb_sym sym) +{ + if (SYMBOL_INLINE_P(sym)) return TRUE; + sym >>= SYMBOL_NORMAL_SHIFT; + if (sym > MRB_PRESYM_MAX) return FALSE; + return TRUE; +} + void mrb_free_symtbl(mrb_state *mrb) { diff --git a/src/variable.c b/src/variable.c index 8fcbd6427..526d88c80 100644 --- a/src/variable.c +++ b/src/variable.c @@ -741,11 +741,11 @@ mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym) { struct RClass *c; - struct RProc *p = mrb->c->ci->proc; + const struct RProc *p = mrb->c->ci->proc; for (;;) { c = MRB_PROC_TARGET_CLASS(p); - if (c->tt != MRB_TT_SCLASS) break; + if (c && c->tt != MRB_TT_SCLASS) break; p = p->upper; } return mrb_mod_cv_get(mrb, c, sym); @@ -755,11 +755,11 @@ void mrb_vm_cv_set(mrb_state *mrb, mrb_sym sym, mrb_value v) { struct RClass *c; - struct RProc *p = mrb->c->ci->proc; + const struct RProc *p = mrb->c->ci->proc; for (;;) { c = MRB_PROC_TARGET_CLASS(p); - if (c->tt != MRB_TT_SCLASS) break; + if (c && c->tt != MRB_TT_SCLASS) break; p = p->upper; } mrb_mod_cv_set(mrb, c, sym, v); @@ -817,9 +817,10 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym) struct RClass *c; struct RClass *c2; mrb_value v; - struct RProc *proc; + const struct RProc *proc; c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc); + if (!c) c = mrb->object_class; if (iv_get(mrb, c->iv, sym, &v)) { return v; } @@ -862,6 +863,7 @@ mrb_vm_const_set(mrb_state *mrb, mrb_sym sym, mrb_value v) struct RClass *c; c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc); + if (!c) c = mrb->object_class; mrb_obj_iv_set(mrb, (struct RObject*)c, sym, v); } diff --git a/src/vm.c b/src/vm.c index c3fa12d3d..62805b7ed 100644 --- a/src/vm.c +++ b/src/vm.c @@ -224,7 +224,7 @@ mrb_stack_extend(mrb_state *mrb, mrb_int room) static inline struct REnv* uvenv(mrb_state *mrb, int up) { - struct RProc *proc = mrb->c->ci->proc; + const struct RProc *proc = mrb->c->ci->proc; struct REnv *e; while (up--) { @@ -247,8 +247,8 @@ uvenv(mrb_state *mrb, int up) return NULL; } -static inline struct RProc* -top_proc(mrb_state *mrb, struct RProc *proc) +static inline const struct RProc* +top_proc(mrb_state *mrb, const struct RProc *proc) { while (proc->upper) { if (MRB_PROC_SCOPE_P(proc) || MRB_PROC_STRICT_P(proc)) @@ -327,7 +327,7 @@ cipop(mrb_state *mrb) } void mrb_exc_set(mrb_state *mrb, mrb_value exc); -static mrb_value mrb_run(mrb_state *mrb, struct RProc* proc, mrb_value self); +static mrb_value mrb_run(mrb_state *mrb, const struct RProc* proc, mrb_value self); static void ecall(mrb_state *mrb) @@ -423,7 +423,7 @@ mrb_funcall_id(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc, ...) static int ci_nregs(mrb_callinfo *ci) { - struct RProc *p; + const struct RProc *p; int n = 0; if (!ci) return 3; @@ -821,7 +821,7 @@ mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const } static struct RBreak* -break_new(mrb_state *mrb, struct RProc *p, mrb_value val) +break_new(mrb_state *mrb, const struct RProc *p, mrb_value val) { struct RBreak *brk; @@ -918,7 +918,7 @@ argnum_error(mrb_state *mrb, mrb_int num) #endif MRB_API mrb_value -mrb_vm_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep) +mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep) { const mrb_irep *irep = proc->body.irep; mrb_value result; @@ -961,7 +961,7 @@ check_target_class(mrb_state *mrb) void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self); MRB_API mrb_value -mrb_vm_exec(mrb_state *mrb, struct RProc *proc, const mrb_code *pc) +mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc) { /* mrb_assert(MRB_PROC_CFUNC_P(proc)) */ const mrb_code *pc0 = pc; @@ -1534,7 +1534,7 @@ RETRY_TRY_BLOCK: struct RClass *cls; mrb_callinfo *ci = mrb->c->ci; mrb_value recv, blk; - struct RProc *p = ci->proc; + const struct RProc *p = ci->proc; mrb_sym mid = ci->mid; struct RClass* target_class = MRB_PROC_TARGET_CLASS(p); @@ -1975,7 +1975,7 @@ RETRY_TRY_BLOCK: else { int acc; mrb_value v; - struct RProc *dst; + const struct RProc *dst; ci = mrb->c->ci; v = regs[a]; @@ -2612,6 +2612,7 @@ RETRY_TRY_BLOCK: super = regs[a+1]; if (mrb_nil_p(base)) { baseclass = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc); + if (!baseclass) baseclass = mrb->object_class; base = mrb_obj_value(baseclass); } c = mrb_vm_define_class(mrb, base, super, id); @@ -2628,6 +2629,7 @@ RETRY_TRY_BLOCK: base = regs[a]; if (mrb_nil_p(base)) { baseclass = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc); + if (!baseclass) baseclass = mrb->object_class; base = mrb_obj_value(baseclass); } cls = mrb_vm_define_module(mrb, base, id); @@ -2782,7 +2784,7 @@ RETRY_TRY_BLOCK: } static mrb_value -mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) +mrb_run(mrb_state *mrb, const struct RProc *proc, mrb_value self) { if (mrb->c->ci->argc < 0) { return mrb_vm_run(mrb, proc, self, 3); /* receiver, args and block) */ @@ -2793,7 +2795,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } MRB_API mrb_value -mrb_top_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep) +mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep) { mrb_value v; diff --git a/test/presym b/test/presym new file mode 100644 index 000000000..1e551143b --- /dev/null +++ b/test/presym @@ -0,0 +1,4 @@ +# List of symbols that cannot be detected by Rakefile +# Those symbols are not defined (to cause exceptions) +doesNotExistAsAMethodNameForVerySure +UnknownConstant -- cgit v1.2.3 From ee111dd175f3242649d87a4600e2bad62e8e0940 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 15 Jun 2020 08:55:48 +0900 Subject: Clarify the use of `MRB_64BIT` and `MRB_INT64` in `dump.c` and `load.c`. - `MRB_64BIT`: the size of a pointer is 64 bits - `MRB_INT64`: the size of `mrb_int` is 64 bits --- include/mruby/irep.h | 2 +- mrbgems/mruby-compiler/core/codegen.c | 2 +- src/codedump.c | 2 +- src/dump.c | 6 +++--- src/load.c | 8 ++++---- src/vm.c | 8 +++++++- 6 files changed, 17 insertions(+), 11 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 64a38227c..ede6780e6 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -32,7 +32,7 @@ typedef struct mrb_pool_value { union { const char *str; int32_t i32; -#ifdef MRB_INT64 +#ifdef MRB_64BIT int64_t i64; #endif mrb_float f; diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 5d29dcb2d..25e157736 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -588,7 +588,7 @@ new_lit(codegen_scope *s, mrb_value val) if (pv->tt == IREP_TT_INT32) { if (v == pv->u.i32) return i; } -#ifdef MRB_INT64 +#ifdef MRB_64BIT else if (pv->tt == IREP_TT_INT64) { if (v == pv->u.i64) return i; } diff --git a/src/codedump.c b/src/codedump.c index fd73f3104..0e90f22db 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -122,7 +122,7 @@ codedump(mrb_state *mrb, const mrb_irep *irep) case IREP_TT_INT32: printf("OP_LOADL\tR%d\tL(%d)\t; %" PRId32, a, b, irep->pool[b].u.i32); break; -#ifdef MRB_INT64 +#ifdef MRB_64BIT case IREP_TT_INT64: printf("OP_LOADL\tR%d\tL(%d)\t; %" PRId64, a, b, irep->pool[b].u.i64); break; diff --git a/src/dump.c b/src/dump.c index c0c349d68..31dceb593 100644 --- a/src/dump.c +++ b/src/dump.c @@ -113,7 +113,7 @@ get_pool_block_size(mrb_state *mrb, const mrb_irep *irep) switch (irep->pool[pool_no].tt) { case IREP_TT_INT64: -#ifdef MRB_INT64 +#ifdef MRB_64BIT { int64_t i = irep->pool[pool_no].u.i64; @@ -169,7 +169,7 @@ write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) int ai = mrb_gc_arena_save(mrb); switch (irep->pool[pool_no].tt) { -#ifdef MRB_INT64 +#ifdef MRB_64BIT case IREP_TT_INT64: { int64_t i = irep->pool[pool_no].u.i64; @@ -938,7 +938,7 @@ dump_pool(mrb_state *mrb, const mrb_pool_value *p, FILE *fp) case IREP_TT_INT32: fprintf(fp, "{IREP_TT_INT32, {.i32=%"PRId32"}},\n", p->u.i32); break; -#ifdef MRB_INT64 +#ifdef MRB_64BIT case IREP_TT_INT64: fprintf(fp, "{IREP_TT_INT64, {.i64=%"PRId64"}},\n", p->u.i64); break; diff --git a/src/load.c b/src/load.c index 31059e833..766aa0648 100644 --- a/src/load.c +++ b/src/load.c @@ -137,7 +137,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag { mrb_int v = (int32_t)bin_to_uint32(src); src += sizeof(uint32_t); -#ifdef MRB_INT64 +#ifdef MRB_64BIT pool[i].tt = IREP_TT_INT64; pool[i].u.i64 = (int64_t)v; #else @@ -147,7 +147,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag } break; case IREP_TT_INT64: -#ifdef MRB_INT64 +#ifdef MRB_64BIT { uint64_t i = bin_to_uint32(src); src += sizeof(uint32_t); @@ -156,10 +156,10 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += sizeof(uint32_t); pool[i].u.i64 = (int64_t)i; } + break; #else - return NULL; /* INT64 not supported on MRB_INT32 */ + return NULL; /* INT64 not supported on MRB_32BIT */ #endif - break; case IREP_TT_FLOAT: #ifndef MRB_WITHOUT_FLOAT diff --git a/src/vm.c b/src/vm.c index 62805b7ed..98f17e287 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1017,10 +1017,16 @@ RETRY_TRY_BLOCK: case IREP_TT_INT32: regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i32); break; -#ifdef MRB_INT64 case IREP_TT_INT64: +#if defined(MRB_INT64) && defined(MRB_64BIT) regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i64); break; +#else + { + mrb_value exc = mrb_exc_new_str_lit(mrb, E_RUNTIME_ERROR, "integer overflow"); + mrb_exc_set(mrb, exc); + } + goto L_RAISE; #endif #ifndef MRB_WITHOUT_FLOAT case IREP_TT_FLOAT: -- cgit v1.2.3 From d2f267a13dcce67e45ef358e1f133362b0a1c12e Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 15 Jun 2020 15:56:42 +0900 Subject: Add casts to silence warnings. --- mrbgems/mruby-compiler/core/codegen.c | 5 +++-- src/dump.c | 8 ++++---- src/load.c | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 25e157736..14b53d073 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -612,13 +613,13 @@ new_lit(codegen_scope *s, mrb_value val) switch (mrb_type(val)) { case MRB_TT_STRING: if (RSTR_NOFREE_P(RSTRING(val))) { - pv->tt = (RSTRING_LEN(val)<<2) | IREP_TT_SSTR; + pv->tt = (uint32_t)(RSTRING_LEN(val)<<2) | IREP_TT_SSTR; pv->u.str = RSTRING_PTR(val); } else { char *p; mrb_int len = RSTRING_LEN(val); - pv->tt = (len<<2) | IREP_TT_STR; + pv->tt = (uint32_t)(len<<2) | IREP_TT_STR; p = (char*)codegen_realloc(s, NULL, len+1); memcpy(p, RSTRING_PTR(val), len); p[len] = '\0'; diff --git a/src/dump.c b/src/dump.c index 31dceb593..c9b5ccc9d 100644 --- a/src/dump.c +++ b/src/dump.c @@ -160,7 +160,7 @@ write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) { int pool_no; uint8_t *cur = buf; - int len; + mrb_int len; const char *ptr; cur += uint16_to_bin(irep->plen, cur); /* number of pool */ @@ -936,11 +936,11 @@ dump_pool(mrb_state *mrb, const mrb_pool_value *p, FILE *fp) if (p->tt & IREP_TT_NFLAG) { /* number */ switch (p->tt) { case IREP_TT_INT32: - fprintf(fp, "{IREP_TT_INT32, {.i32=%"PRId32"}},\n", p->u.i32); + fprintf(fp, "{IREP_TT_INT32, {.i32=%" PRId32 "}},\n", p->u.i32); break; #ifdef MRB_64BIT case IREP_TT_INT64: - fprintf(fp, "{IREP_TT_INT64, {.i64=%"PRId64"}},\n", p->u.i64); + fprintf(fp, "{IREP_TT_INT64, {.i64=%" PRId64 "}},\n", p->u.i64); break; #endif case IREP_TT_FLOAT: @@ -948,7 +948,7 @@ dump_pool(mrb_state *mrb, const mrb_pool_value *p, FILE *fp) fprintf(fp, "{IREP_TT_FLOAT, {.f=%#.1f}},\n", p->u.f); } else { - fprintf(fp, "{IREP_TT_FLOAT, {.f="MRB_FLOAT_FMT"}},\n", p->u.f); + fprintf(fp, "{IREP_TT_FLOAT, {.f=" MRB_FLOAT_FMT "}},\n", p->u.f); } break; } diff --git a/src/load.c b/src/load.c index 766aa0648..45fe38736 100644 --- a/src/load.c +++ b/src/load.c @@ -242,8 +242,8 @@ read_irep_record(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flags) struct RData *irep_obj = mrb_data_object_alloc(mrb, mrb->object_class, NULL, &tempirep_type); int ai = mrb_gc_arena_save(mrb); mrb_irep *irep = read_irep_record_1(mrb, bin, len, flags); - int i; mrb_irep **reps; + int i; mrb_gc_arena_restore(mrb, ai); if (irep == NULL) { -- cgit v1.2.3 From b2398879fa4d40f65703ca819d012af4a000bbb2 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 25 Jun 2020 11:31:24 +0900 Subject: Avoid including `limits.h` and `stdint.h` before `mruby.h`. They are included from `mruby.h` anyway, and including it ahead can cause some errors regarding `INT32_MAX` etc. with C++ compiler. --- benchmark/build_config_boxing.rb | 28 ---------------------------- mrbgems/mruby-compiler/core/codegen.c | 2 -- target/boxing.rb | 28 ++++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 30 deletions(-) delete mode 100644 benchmark/build_config_boxing.rb create mode 100644 target/boxing.rb (limited to 'mrbgems/mruby-compiler/core') diff --git a/benchmark/build_config_boxing.rb b/benchmark/build_config_boxing.rb deleted file mode 100644 index b478c9005..000000000 --- a/benchmark/build_config_boxing.rb +++ /dev/null @@ -1,28 +0,0 @@ -MRuby::Build.new do |conf| - toolchain :gcc -end - -MRuby::Build.new('no_boxing') do |conf| - toolchain :gcc - - conf.gembox 'default' -end - -MRuby::Build.new('word_boxing') do |conf| - toolchain :gcc - - conf.gembox 'default' - conf.compilers.each do |c| - c.defines += %w(MRB_WORD_BOXING) - end -end - -MRuby::Build.new('nan_boxing') do |conf| - toolchain :gcc - - conf.gembox 'default' - conf.compilers.each do |c| - c.defines += %w(MRB_NAN_BOXING) - end -end - diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 14b53d073..189bb95b8 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -5,8 +5,6 @@ */ #include -#include -#include #include #include #include diff --git a/target/boxing.rb b/target/boxing.rb new file mode 100644 index 000000000..b478c9005 --- /dev/null +++ b/target/boxing.rb @@ -0,0 +1,28 @@ +MRuby::Build.new do |conf| + toolchain :gcc +end + +MRuby::Build.new('no_boxing') do |conf| + toolchain :gcc + + conf.gembox 'default' +end + +MRuby::Build.new('word_boxing') do |conf| + toolchain :gcc + + conf.gembox 'default' + conf.compilers.each do |c| + c.defines += %w(MRB_WORD_BOXING) + end +end + +MRuby::Build.new('nan_boxing') do |conf| + toolchain :gcc + + conf.gembox 'default' + conf.compilers.each do |c| + c.defines += %w(MRB_NAN_BOXING) + end +end + -- cgit v1.2.3 From 6e86e290e4bd029e3ef53be6c4ac1d52e20538af Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 14 Apr 2020 23:47:40 +0900 Subject: Rightward-assign by ASSOC. [ruby-bugs:15921] --- mrbgems/mruby-compiler/core/parse.y | 23 ++++++++++++++++++++++- test/t/syntax.rb | 9 +++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index c7c3d2a2f..73e928b20 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -1416,7 +1416,7 @@ heredoc_end(parser_state *p) %type singleton string string_fragment string_rep string_interp xstring regexp %type literal numeric cpath symbol -%type top_compstmt top_stmts top_stmt +%type top_compstmt top_stmts top_stmt rassign %type bodystmt compstmt stmts stmt expr arg primary command command_call method_call %type expr_value arg_rhs primary_value %type if_tail opt_else case_body cases opt_rescue exc_list exc_var opt_ensure @@ -1658,9 +1658,30 @@ stmt : keyword_alias fsym {p->lstate = EXPR_FNAME;} fsym { $$ = new_masgn(p, $1, new_array(p, $3)); } + | rassign | expr ; +rassign : arg tASSOC lhs + { + void_expr_error(p, $1); + $$ = new_asgn(p, $3, $1); + } + | arg tASSOC mlhs + { + void_expr_error(p, $1); + $$ = new_masgn(p, $3, $1); + } + | rassign tASSOC lhs + { + $$ = new_asgn(p, $3, $1); + } + | rassign tASSOC mlhs + { + $$ = new_masgn(p, $3, $1); + } + ; + command_asgn : lhs '=' command_rhs { $$ = new_asgn(p, $1, $3); diff --git a/test/t/syntax.rb b/test/t/syntax.rb index 436c06601..a52e0dcea 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -345,6 +345,15 @@ assert('splat object in assignment') do assert_equal [2], (a = *o) end +assert('right-ward assignment') do + 1 => a + assert_equal(1, a) + 13.divmod(5) => a,b + assert_equal([2,3], [a, b]) + 13.divmod(5) => a,b => c, d + assert_equal([2,3,2,3], [a, b, c, d]) +end + assert('splat object in case statement') do o = Object.new def o.to_a -- cgit v1.2.3 From c29212cf44e728a47d306bf9a25a9d8d8317a4f9 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 24 Apr 2020 15:54:27 +0900 Subject: Implement endless-def as in CRuby [Feature#16746]. --- mrbgems/mruby-compiler/core/parse.y | 117 ++++++++++++++++++++++++------------ 1 file changed, 80 insertions(+), 37 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 73e928b20..83b9ad422 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -730,7 +730,19 @@ new_module(parser_state *p, node *m, node *b) static node* new_def(parser_state *p, mrb_sym m, node *a, node *b) { - return list5((node*)NODE_DEF, nsym(m), locals_node(p), a, b); + return list5((node*)NODE_DEF, nsym(m), 0, a, b); +} + +static void +defn_setup(parser_state *p, node *d, node *a, node *b) +{ + node *n = d->cdr->cdr; + + n->car = locals_node(p); + p->cmdarg_stack = intn(n->cdr->car); + n->cdr->car = a; + local_resume(p, n->cdr->cdr->car); + n->cdr->cdr->car = b; } /* (:sdef obj m lv (arg . body)) */ @@ -738,7 +750,19 @@ static node* new_sdef(parser_state *p, node *o, mrb_sym m, node *a, node *b) { void_expr_error(p, o); - return list6((node*)NODE_SDEF, o, nsym(m), locals_node(p), a, b); + return list6((node*)NODE_SDEF, o, nsym(m), 0, a, b); +} + +static void +defs_setup(parser_state *p, node *d, node *a, node *b) +{ + node *n = d->cdr->cdr->cdr; + + n->car = locals_node(p); + p->cmdarg_stack = intn(n->cdr->car); + n->cdr->car = a; + local_resume(p, n->cdr->cdr->car); + n->cdr->cdr->car = b; } /* (:arg . sym) */ @@ -1415,7 +1439,7 @@ heredoc_end(parser_state *p) %token tNUMPARAM %type singleton string string_fragment string_rep string_interp xstring regexp -%type literal numeric cpath symbol +%type literal numeric cpath symbol defn_head defs_head %type top_compstmt top_stmts top_stmt rassign %type bodystmt compstmt stmts stmt expr arg primary command command_call method_call %type expr_value arg_rhs primary_value @@ -1425,7 +1449,7 @@ heredoc_end(parser_state *p) %type command_args aref_args opt_block_arg block_arg var_ref var_lhs %type command_asgn command_rhs mrhs superclass block_call block_command %type f_block_optarg f_block_opt -%type f_arglist f_args f_arg f_arg_item f_optarg f_margs +%type f_arglist_paren f_arglist f_args f_arg f_arg_item f_optarg f_margs %type assoc_list assocs assoc undef_list backref for_var %type block_param opt_block_param block_param_def f_opt %type bv_decls opt_bv_decl bvar f_larglist lambda_body @@ -1681,7 +1705,7 @@ rassign : arg tASSOC lhs $$ = new_masgn(p, $3, $1); } ; - + command_asgn : lhs '=' command_rhs { $$ = new_asgn(p, $1, $3); @@ -1747,6 +1771,31 @@ expr : command_call | arg ; + +defn_head : keyword_def fname + { + $$ = new_def(p, $2, nint(p->cmdarg_stack), local_switch(p)); + p->cmdarg_stack = 0; + p->in_def++; + nvars_block(p); + } + ; + +defs_head : keyword_def singleton dot_or_colon + { + p->lstate = EXPR_FNAME; + } + fname + { + $$ = new_sdef(p, $2, $5, nint(p->cmdarg_stack), local_switch(p)); + p->cmdarg_stack = 0; + p->in_def++; + p->in_single++; + nvars_block(p); + p->lstate = EXPR_ENDFN; /* force for args */ + } + ; + expr_value : expr { if (!$1) $$ = new_nil(p); @@ -2267,6 +2316,21 @@ arg : lhs '=' arg_rhs { $$ = new_if(p, cond($1), $3, $6); } + | defn_head f_arglist_paren '=' arg + { + $$ = $1; + defn_setup(p, $$, $2, $4); + nvars_unnest(p); + p->in_def--; + } + | defs_head f_arglist_paren '=' arg + { + $$ = $1; + defs_setup(p, $$, $2, $4); + nvars_unnest(p); + p->in_def--; + p->in_single--; + } | primary { $$ = $1; @@ -2666,50 +2730,26 @@ primary : literal local_resume(p, $3); nvars_unnest(p); } - | keyword_def fname - { - $$ = p->cmdarg_stack; - p->cmdarg_stack = 0; - } - { - p->in_def++; - $$ = local_switch(p); - nvars_block(p); - } + | defn_head f_arglist bodystmt keyword_end { - $$ = new_def(p, $2, $5, $6); - SET_LINENO($$, $1); - local_resume(p, $4); + $$ = $1; + defn_setup(p, $$, $2, $3); nvars_unnest(p); p->in_def--; - p->cmdarg_stack = $3; - } - | keyword_def singleton dot_or_colon - { - p->lstate = EXPR_FNAME; - $$ = p->cmdarg_stack; - p->cmdarg_stack = 0; - } - fname - { - p->in_single++; - p->lstate = EXPR_ENDFN; /* force for args */ - $$ = local_switch(p); - nvars_block(p); } + | defs_head f_arglist bodystmt keyword_end { - $$ = new_sdef(p, $2, $5, $7, $8); - SET_LINENO($$, $1); - local_resume(p, $6); + $$ = $1; + defs_setup(p, $$, $2, $3); nvars_unnest(p); + p->in_def--; p->in_single--; - p->cmdarg_stack = $4; } | keyword_break { @@ -3420,7 +3460,7 @@ superclass : /* term */ } */ ; -f_arglist : '(' f_args rparen +f_arglist_paren : '(' f_args rparen { $$ = $2; p->lstate = EXPR_BEG; @@ -3444,6 +3484,9 @@ f_arglist : '(' f_args rparen new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); #endif } + ; + +f_arglist : f_arglist_paren | f_args term { $$ = $1; -- cgit v1.2.3 From ce7508e0d52e364358294fb3eb3414763d03516c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 14 May 2020 21:41:27 +0900 Subject: Allow `rescue` modifier in endless method definitions. --- mrbgems/mruby-compiler/core/parse.y | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 83b9ad422..2ff66be60 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -2319,18 +2319,39 @@ arg : lhs '=' arg_rhs | defn_head f_arglist_paren '=' arg { $$ = $1; + void_expr_error(p, $4); defn_setup(p, $$, $2, $4); nvars_unnest(p); p->in_def--; } + | defn_head f_arglist_paren '=' arg modifier_rescue arg + { + $$ = $1; + void_expr_error(p, $4); + void_expr_error(p, $6); + defn_setup(p, $$, $2, new_mod_rescue(p, $4, $6)); + nvars_unnest(p); + p->in_def--; + } | defs_head f_arglist_paren '=' arg { $$ = $1; + void_expr_error(p, $4); defs_setup(p, $$, $2, $4); nvars_unnest(p); p->in_def--; p->in_single--; } + | defs_head f_arglist_paren '=' arg modifier_rescue arg + { + $$ = $1; + void_expr_error(p, $4); + void_expr_error(p, $6); + defs_setup(p, $$, $2, new_mod_rescue(p, $4, $6)); + nvars_unnest(p); + p->in_def--; + p->in_single--; + } | primary { $$ = $1; -- cgit v1.2.3 From fd10c7231906ca48cb35892d2a86460004b62249 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 5 Jun 2020 19:17:33 +0900 Subject: Remove `OP_EXT[123]` from operands. --- doc/opcode.md | 11 -- include/mruby/opcode.h | 27 ---- include/mruby/ops.h | 3 - mrbgems/mruby-compiler/core/codegen.c | 88 +------------ src/codedump.c | 239 +++++++++++++++------------------- src/vm.c | 37 +----- 6 files changed, 112 insertions(+), 293 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/doc/opcode.md b/doc/opcode.md index a79453e8a..d5b71d9f0 100644 --- a/doc/opcode.md +++ b/doc/opcode.md @@ -20,14 +20,6 @@ sign) of operands. * sS: signed 16bit * W: 24bit -First two byte operands may be extended to 16bit. When those byte -operands are bigger than 256, the instruction will be prefixed by -`OP_EXT1` (means 1st operand is 16bit) or `OP_EXT2` (means 2nd operand -is 16bit) or `OP_EXT3` (means 1st and 2nd operands are 16bit). - -For instructions marked by `'`, `OP_EXT1` can be prefixed. For those -with `"`, either `OP_EXT1` or `OP_EXT2` or `OP_EXT2` can be prefixed. - ## table.1 Instruction Table | Instruction Name | Operand type | Semantics | @@ -133,8 +125,5 @@ with `"`, either `OP_EXT1` or `OP_EXT2` or `OP_EXT2` can be prefixed. | OP_TCLASS' | B | R(a) = target_class | | OP_DEBUG" | BBB | print a,b,c | | OP_ERR' | B | raise(LocalJumpError, Lit(a)) | -| OP_EXT1 | - | make 1st operand 16bit | -| OP_EXT2 | - | make 2nd operand 16bit | -| OP_EXT3 | - | make 1st and 2nd operands 16bit | | OP_STOP | - | stop VM | |------------------|--------------|--------------------------------------------------------| diff --git a/include/mruby/opcode.h b/include/mruby/opcode.h index 95e6736a4..a6c636cf8 100644 --- a/include/mruby/opcode.h +++ b/include/mruby/opcode.h @@ -39,31 +39,4 @@ enum mrb_insn { #define FETCH_S() do {a=READ_S();} while (0) #define FETCH_W() do {a=READ_W();} while (0) -/* with OP_EXT1 (1st 16bit) */ -#define FETCH_Z_1() FETCH_Z() -#define FETCH_B_1() FETCH_S() -#define FETCH_BB_1() do {a=READ_S(); b=READ_B();} while (0) -#define FETCH_BBB_1() do {a=READ_S(); b=READ_B(); c=READ_B();} while (0) -#define FETCH_BS_1() do {a=READ_S(); b=READ_S();} while (0) -#define FETCH_S_1() FETCH_S() -#define FETCH_W_1() FETCH_W() - -/* with OP_EXT2 (2nd 16bit) */ -#define FETCH_Z_2() FETCH_Z() -#define FETCH_B_2() FETCH_B() -#define FETCH_BB_2() do {a=READ_B(); b=READ_S();} while (0) -#define FETCH_BBB_2() do {a=READ_B(); b=READ_S(); c=READ_B();} while (0) -#define FETCH_BS_2() FETCH_BS() -#define FETCH_S_2() FETCH_S() -#define FETCH_W_2() FETCH_W() - -/* with OP_EXT3 (1st & 2nd 16bit) */ -#define FETCH_Z_3() FETCH_Z() -#define FETCH_B_3() FETCH_B() -#define FETCH_BB_3() do {a=READ_S(); b=READ_S();} while (0) -#define FETCH_BBB_3() do {a=READ_S(); b=READ_S(); c=READ_B();} while (0) -#define FETCH_BS_3() do {a=READ_S(); b=READ_S();} while (0) -#define FETCH_S_3() FETCH_S() -#define FETCH_W_3() FETCH_W() - #endif /* MRUBY_OPCODE_H */ diff --git a/include/mruby/ops.h b/include/mruby/ops.h index e85ee3133..de6106796 100644 --- a/include/mruby/ops.h +++ b/include/mruby/ops.h @@ -111,8 +111,5 @@ OPCODE(SCLASS, B) /* R(a) = R(a).singleton_class */ OPCODE(TCLASS, B) /* R(a) = target_class */ OPCODE(DEBUG, BBB) /* print a,b,c */ OPCODE(ERR, B) /* raise(LocalJumpError, Lit(a)) */ -OPCODE(EXT1, Z) /* make 1st operand 16bit */ -OPCODE(EXT2, Z) /* make 2nd operand 16bit */ -OPCODE(EXT3, Z) /* make 1st and 2nd operands 16bit */ OPCODE(STOP, Z) /* stop VM */ OPCODE(LOADI16, BS) /* R(a) = mrb_int(b) */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 189bb95b8..9da80536b 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -217,9 +217,7 @@ genop_1(codegen_scope *s, mrb_code i, uint16_t a) { s->lastpc = s->pc; if (a > 0xff) { - gen_B(s, OP_EXT1); - gen_B(s, i); - gen_S(s, a); + codegen_error(s, "too big operand"); } else { gen_B(s, i); @@ -231,23 +229,8 @@ static void genop_2(codegen_scope *s, mrb_code i, uint16_t a, uint16_t b) { s->lastpc = s->pc; - if (a > 0xff && b > 0xff) { - gen_B(s, OP_EXT3); - gen_B(s, i); - gen_S(s, a); - gen_S(s, b); - } - else if (b > 0xff) { - gen_B(s, OP_EXT2); - gen_B(s, i); - gen_B(s, (uint8_t)a); - gen_S(s, b); - } - else if (a > 0xff) { - gen_B(s, OP_EXT1); - gen_B(s, i); - gen_S(s, a); - gen_B(s, (uint8_t)b); + if (a > 0xff || b > 0xff) { + codegen_error(s, "too big operand"); } else { gen_B(s, i); @@ -309,32 +292,6 @@ mrb_decode_insn(const mrb_code *pc) #define OPCODE(i,x) case OP_ ## i: FETCH_ ## x (); break; #include "mruby/ops.h" #undef OPCODE - } - switch (insn) { - case OP_EXT1: - insn = READ_B(); - switch (insn) { -#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _1 (); break; -#include "mruby/ops.h" -#undef OPCODE - } - break; - case OP_EXT2: - insn = READ_B(); - switch (insn) { -#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _2 (); break; -#include "mruby/ops.h" -#undef OPCODE - } - break; - case OP_EXT3: - insn = READ_B(); - switch (insn) { -#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _3 (); break; -#include "mruby/ops.h" -#undef OPCODE - } - break; default: break; } @@ -391,11 +348,8 @@ genjmp2(codegen_scope *s, mrb_code i, uint16_t a, int pc, int val) s->lastpc = s->pc; if (a > 0xff) { - gen_B(s, OP_EXT1); - gen_B(s, i); - gen_S(s, a); - pos = s->pc; - gen_S(s, pc); + codegen_error(s, "too big operand"); + pos = 0; } else { gen_B(s, i); @@ -3314,35 +3268,3 @@ uint8_t mrb_insn_size[] = { #undef SB #undef BBB }; -/* EXT1 instruction sizes */ -uint8_t mrb_insn_size1[] = { -#define B 3 -#define BB 4 -#define BBB 5 -#define BS 5 -#define SB 5 -#define OPCODE(_,x) x, -#include "mruby/ops.h" -#undef OPCODE -#undef B -}; -/* EXT2 instruction sizes */ -uint8_t mrb_insn_size2[] = { -#define B 2 -#define OPCODE(_,x) x, -#include "mruby/ops.h" -#undef OPCODE -#undef BB -#undef BBB -#undef BS -#undef SB -}; -/* EXT3 instruction sizes */ -#define BB 5 -#define BBB 6 -#define BS 4 -#define SB 5 -uint8_t mrb_insn_size3[] = { -#define OPCODE(_,x) x, -#include "mruby/ops.h" -}; diff --git a/src/codedump.c b/src/codedump.c index 0e90f22db..67bd8754d 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -63,7 +63,7 @@ print_header(mrb_state *mrb, const mrb_irep *irep, ptrdiff_t i) printf("%03d ", (int)i); } -#define CASE(insn,ops) case insn: FETCH_ ## ops (); L_ ## insn +#define CASE(insn,ops) case insn: FETCH_ ## ops (); static void codedump(mrb_state *mrb, const mrb_irep *irep) @@ -107,14 +107,14 @@ codedump(mrb_state *mrb, const mrb_irep *irep) print_header(mrb, irep, i); ins = READ_B(); switch (ins) { - CASE(OP_NOP, Z): + CASE(OP_NOP, Z); printf("OP_NOP\n"); break; - CASE(OP_MOVE, BB): + CASE(OP_MOVE, BB); printf("OP_MOVE\tR%d\tR%d\t", a, b); print_lv_ab(mrb, irep, a, b); break; - CASE(OP_LOADL, BB): + CASE(OP_LOADL, BB); switch (irep->pool[b].tt) { case IREP_TT_FLOAT: printf("OP_LOADL\tR%d\tL(%d)\t; %f", a, b, (double)irep->pool[b].u.f); @@ -133,144 +133,144 @@ codedump(mrb_state *mrb, const mrb_irep *irep) } print_lv_a(mrb, irep, a); break; - CASE(OP_LOADI, BB): + CASE(OP_LOADI, BB); printf("OP_LOADI\tR%d\t%d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADINEG, BB): + CASE(OP_LOADINEG, BB); printf("OP_LOADI\tR%d\t-%d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADI16, BS): + CASE(OP_LOADI16, BS); printf("OP_LOADI16\tR%d\t%d\t", a, (int)(int16_t)b); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADI__1, B): + CASE(OP_LOADI__1, B); printf("OP_LOADI__1\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADI_0, B): goto L_LOADI; - CASE(OP_LOADI_1, B): goto L_LOADI; - CASE(OP_LOADI_2, B): goto L_LOADI; - CASE(OP_LOADI_3, B): goto L_LOADI; - CASE(OP_LOADI_4, B): goto L_LOADI; - CASE(OP_LOADI_5, B): goto L_LOADI; - CASE(OP_LOADI_6, B): goto L_LOADI; - CASE(OP_LOADI_7, B): + CASE(OP_LOADI_0, B); goto L_LOADI; + CASE(OP_LOADI_1, B); goto L_LOADI; + CASE(OP_LOADI_2, B); goto L_LOADI; + CASE(OP_LOADI_3, B); goto L_LOADI; + CASE(OP_LOADI_4, B); goto L_LOADI; + CASE(OP_LOADI_5, B); goto L_LOADI; + CASE(OP_LOADI_6, B); goto L_LOADI; + CASE(OP_LOADI_7, B); L_LOADI: printf("OP_LOADI_%d\tR%d\t\t", ins-(int)OP_LOADI_0, a); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADSYM, BB): + CASE(OP_LOADSYM, BB); printf("OP_LOADSYM\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADNIL, B): + CASE(OP_LOADNIL, B); printf("OP_LOADNIL\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADSELF, B): + CASE(OP_LOADSELF, B); printf("OP_LOADSELF\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADT, B): + CASE(OP_LOADT, B); printf("OP_LOADT\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_LOADF, B): + CASE(OP_LOADF, B); printf("OP_LOADF\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_GETGV, BB): + CASE(OP_GETGV, BB); printf("OP_GETGV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_SETGV, BB): - printf("OP_SETGV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); + CASE(OP_SETGV, BB); + printf("OP_SETGV\t;%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); print_lv_a(mrb, irep, a); break; - CASE(OP_GETSV, BB): + CASE(OP_GETSV, BB); printf("OP_GETSV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_SETSV, BB): + CASE(OP_SETSV, BB); printf("OP_SETSV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); print_lv_a(mrb, irep, a); break; - CASE(OP_GETCONST, BB): + CASE(OP_GETCONST, BB); printf("OP_GETCONST\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_SETCONST, BB): + CASE(OP_SETCONST, BB); printf("OP_SETCONST\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); print_lv_a(mrb, irep, a); break; - CASE(OP_GETMCNST, BB): + CASE(OP_GETMCNST, BB); printf("OP_GETMCNST\tR%d\tR%d::%s", a, a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_SETMCNST, BB): + CASE(OP_SETMCNST, BB); printf("OP_SETMCNST\tR%d::%s\tR%d", a+1, mrb_sym_dump(mrb, irep->syms[b]), a); print_lv_a(mrb, irep, a); break; - CASE(OP_GETIV, BB): + CASE(OP_GETIV, BB); printf("OP_GETIV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_SETIV, BB): + CASE(OP_SETIV, BB); printf("OP_SETIV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); print_lv_a(mrb, irep, a); break; - CASE(OP_GETUPVAR, BBB): + CASE(OP_GETUPVAR, BBB); printf("OP_GETUPVAR\tR%d\t%d\t%d", a, b, c); print_lv_a(mrb, irep, a); break; - CASE(OP_SETUPVAR, BBB): + CASE(OP_SETUPVAR, BBB); printf("OP_SETUPVAR\tR%d\t%d\t%d", a, b, c); print_lv_a(mrb, irep, a); break; - CASE(OP_GETCV, BB): + CASE(OP_GETCV, BB); printf("OP_GETCV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_SETCV, BB): + CASE(OP_SETCV, BB); printf("OP_SETCV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); print_lv_a(mrb, irep, a); break; - CASE(OP_JMP, S): + CASE(OP_JMP, S); printf("OP_JMP\t\t%03d\n", a); break; - CASE(OP_JMPIF, BS): + CASE(OP_JMPIF, BS); printf("OP_JMPIF\tR%d\t%03d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_JMPNOT, BS): + CASE(OP_JMPNOT, BS); printf("OP_JMPNOT\tR%d\t%03d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_JMPNIL, BS): + CASE(OP_JMPNIL, BS); printf("OP_JMPNIL\tR%d\t%03d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_SENDV, BB): + CASE(OP_SENDV, BB); printf("OP_SENDV\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b])); break; - CASE(OP_SENDVB, BB): + CASE(OP_SENDVB, BB); printf("OP_SENDVB\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b])); break; - CASE(OP_SEND, BBB): + CASE(OP_SEND, BBB); printf("OP_SEND\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c); break; - CASE(OP_SENDB, BBB): + CASE(OP_SENDB, BBB); printf("OP_SENDB\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c); break; - CASE(OP_CALL, Z): + CASE(OP_CALL, Z); printf("OP_CALL\n"); break; - CASE(OP_SUPER, BB): + CASE(OP_SUPER, BB); printf("OP_SUPER\tR%d\t%d\n", a, b); break; - CASE(OP_ARGARY, BS): + CASE(OP_ARGARY, BS); printf("OP_ARGARY\tR%d\t%d:%d:%d:%d (%d)", a, (b>>11)&0x3f, (b>>10)&0x1, @@ -279,7 +279,7 @@ codedump(mrb_state *mrb, const mrb_irep *irep) (b>>0)&0xf); print_lv_a(mrb, irep, a); break; - CASE(OP_ENTER, W): + CASE(OP_ENTER, W); printf("OP_ENTER\t%d:%d:%d:%d:%d:%d:%d\n", MRB_ASPEC_REQ(a), MRB_ASPEC_OPT(a), @@ -289,30 +289,30 @@ codedump(mrb_state *mrb, const mrb_irep *irep) MRB_ASPEC_KDICT(a), MRB_ASPEC_BLOCK(a)); break; - CASE(OP_KEY_P, BB): + CASE(OP_KEY_P, BB); printf("OP_KEY_P\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_KEYEND, Z): + CASE(OP_KEYEND, Z); printf("OP_KEYEND\n"); break; - CASE(OP_KARG, BB): + CASE(OP_KARG, BB); printf("OP_KARG\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_RETURN, B): + CASE(OP_RETURN, B); printf("OP_RETURN\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_RETURN_BLK, B): + CASE(OP_RETURN_BLK, B); printf("OP_RETURN_BLK\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_BREAK, B): + CASE(OP_BREAK, B); printf("OP_BREAK\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_BLKPUSH, BS): + CASE(OP_BLKPUSH, BS); printf("OP_BLKPUSH\tR%d\t%d:%d:%d:%d (%d)", a, (b>>11)&0x3f, (b>>10)&0x1, @@ -321,100 +321,100 @@ codedump(mrb_state *mrb, const mrb_irep *irep) (b>>0)&0xf); print_lv_a(mrb, irep, a); break; - CASE(OP_LAMBDA, BB): + CASE(OP_LAMBDA, BB); printf("OP_LAMBDA\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]); break; - CASE(OP_BLOCK, BB): + CASE(OP_BLOCK, BB); printf("OP_BLOCK\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]); break; - CASE(OP_METHOD, BB): + CASE(OP_METHOD, BB); printf("OP_METHOD\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]); break; - CASE(OP_RANGE_INC, B): + CASE(OP_RANGE_INC, B); printf("OP_RANGE_INC\tR%d\n", a); break; - CASE(OP_RANGE_EXC, B): + CASE(OP_RANGE_EXC, B); printf("OP_RANGE_EXC\tR%d\n", a); break; - CASE(OP_DEF, BB): + CASE(OP_DEF, BB); printf("OP_DEF\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b])); break; - CASE(OP_UNDEF, B): + CASE(OP_UNDEF, B); printf("OP_UNDEF\t:%s\n", mrb_sym_dump(mrb, irep->syms[a])); break; - CASE(OP_ALIAS, BB): + CASE(OP_ALIAS, BB); printf("OP_ALIAS\t:%s\t%s\n", mrb_sym_dump(mrb, irep->syms[a]), mrb_sym_dump(mrb, irep->syms[b])); break; - CASE(OP_ADD, B): + CASE(OP_ADD, B); printf("OP_ADD\tR%d\t\n", a); break; - CASE(OP_ADDI, BB): + CASE(OP_ADDI, BB); printf("OP_ADDI\tR%d\t%d\n", a, b); break; - CASE(OP_SUB, B): + CASE(OP_SUB, B); printf("OP_SUB\tR%d\t\n", a); break; - CASE(OP_SUBI, BB): + CASE(OP_SUBI, BB); printf("OP_SUBI\tR%d\t%d\n", a, b); break; - CASE(OP_MUL, B): + CASE(OP_MUL, B); printf("OP_MUL\tR%d\t\n", a); break; - CASE(OP_DIV, B): + CASE(OP_DIV, B); printf("OP_DIV\tR%d\t\n", a); break; - CASE(OP_LT, B): + CASE(OP_LT, B); printf("OP_LT\t\tR%d\t\n", a); break; - CASE(OP_LE, B): + CASE(OP_LE, B); printf("OP_LE\t\tR%d\t\n", a); break; - CASE(OP_GT, B): + CASE(OP_GT, B); printf("OP_GT\t\tR%d\t\n", a); break; - CASE(OP_GE, B): + CASE(OP_GE, B); printf("OP_GE\t\tR%d\t\n", a); break; - CASE(OP_EQ, B): + CASE(OP_EQ, B); printf("OP_EQ\t\tR%d\t\n", a); break; - CASE(OP_ARRAY, BB): + CASE(OP_ARRAY, BB); printf("OP_ARRAY\tR%d\t%d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_ARRAY2, BBB): + CASE(OP_ARRAY2, BBB); printf("OP_ARRAY\tR%d\tR%d\t%d\t", a, b, c); print_lv_ab(mrb, irep, a, b); break; - CASE(OP_ARYCAT, B): + CASE(OP_ARYCAT, B); printf("OP_ARYCAT\tR%d\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_ARYPUSH, B): + CASE(OP_ARYPUSH, B); printf("OP_ARYPUSH\tR%d\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_ARYDUP, B): + CASE(OP_ARYDUP, B); printf("OP_ARYDUP\tR%d\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_AREF, BBB): + CASE(OP_AREF, BBB); printf("OP_AREF\tR%d\tR%d\t%d", a, b, c); print_lv_ab(mrb, irep, a, b); break; - CASE(OP_ASET, BBB): + CASE(OP_ASET, BBB); printf("OP_ASET\tR%d\tR%d\t%d", a, b, c); print_lv_ab(mrb, irep, a, b); break; - CASE(OP_APOST, BBB): + CASE(OP_APOST, BBB); printf("OP_APOST\tR%d\t%d\t%d", a, b, c); print_lv_a(mrb, irep, a); break; - CASE(OP_INTERN, B): + CASE(OP_INTERN, B); printf("OP_INTERN\tR%d", a); print_lv_a(mrb, irep, a); break; - CASE(OP_STRING, BB): + CASE(OP_STRING, BB); if ((irep->pool[b].tt & IREP_TT_NFLAG) == 0) { printf("OP_STRING\tR%d\tL(%d)\t; %s", a, b, irep->pool[b].u.str); } @@ -423,48 +423,48 @@ codedump(mrb_state *mrb, const mrb_irep *irep) } print_lv_a(mrb, irep, a); break; - CASE(OP_STRCAT, B): + CASE(OP_STRCAT, B); printf("OP_STRCAT\tR%d\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_HASH, BB): + CASE(OP_HASH, BB); printf("OP_HASH\tR%d\t%d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_HASHADD, BB): + CASE(OP_HASHADD, BB); printf("OP_HASHADD\tR%d\t%d\t", a, b); print_lv_a(mrb, irep, a); break; - CASE(OP_HASHCAT, B): + CASE(OP_HASHCAT, B); printf("OP_HASHCAT\tR%d\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_OCLASS, B): + CASE(OP_OCLASS, B); printf("OP_OCLASS\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_CLASS, BB): + CASE(OP_CLASS, BB); printf("OP_CLASS\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_MODULE, BB): + CASE(OP_MODULE, BB); printf("OP_MODULE\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); print_lv_a(mrb, irep, a); break; - CASE(OP_EXEC, BB): + CASE(OP_EXEC, BB); printf("OP_EXEC\tR%d\tI(%d:%p)", a, b, irep->reps[b]); print_lv_a(mrb, irep, a); break; - CASE(OP_SCLASS, B): + CASE(OP_SCLASS, B); printf("OP_SCLASS\tR%d\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_TCLASS, B): + CASE(OP_TCLASS, B); printf("OP_TCLASS\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_ERR, B): + CASE(OP_ERR, B); if ((irep->pool[a].tt & IREP_TT_NFLAG) == 0) { printf("OP_ERR\t%s\n", irep->pool[a].u.str); } @@ -472,70 +472,39 @@ codedump(mrb_state *mrb, const mrb_irep *irep) printf("OP_ERR\tL(%d)\n", a); } break; - CASE(OP_EPUSH, B): + CASE(OP_EPUSH, B); printf("OP_EPUSH\t\t:I(%d:%p)\n", a, irep->reps[a]); break; - CASE(OP_ONERR, S): + CASE(OP_ONERR, S); printf("OP_ONERR\t%03d\n", a); break; - CASE(OP_EXCEPT, B): + CASE(OP_EXCEPT, B); printf("OP_EXCEPT\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_RESCUE, BB): + CASE(OP_RESCUE, BB); printf("OP_RESCUE\tR%d\tR%d", a, b); print_lv_ab(mrb, irep, a, b); break; - CASE(OP_RAISE, B): + CASE(OP_RAISE, B); printf("OP_RAISE\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; - CASE(OP_POPERR, B): + CASE(OP_POPERR, B); printf("OP_POPERR\t%d\t\t\n", a); break; - CASE(OP_EPOP, B): + CASE(OP_EPOP, B); printf("OP_EPOP\t%d\n", a); break; - CASE(OP_DEBUG, BBB): + CASE(OP_DEBUG, BBB); printf("OP_DEBUG\t%d\t%d\t%d\n", a, b, c); break; - CASE(OP_STOP, Z): + CASE(OP_STOP, Z); printf("OP_STOP\n"); break; - CASE(OP_EXT1, Z): - ins = READ_B(); - printf("OP_EXT1\n"); - print_header(mrb, irep, pc-irep->iseq-2); - switch (ins) { -#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _1 (); goto L_OP_ ## i; -#include "mruby/ops.h" -#undef OPCODE - } - break; - CASE(OP_EXT2, Z): - ins = READ_B(); - printf("OP_EXT2\n"); - print_header(mrb, irep, pc-irep->iseq-2); - switch (ins) { -#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _2 (); goto L_OP_ ## i; -#include "mruby/ops.h" -#undef OPCODE - } - break; - CASE(OP_EXT3, Z): - ins = READ_B(); - printf("OP_EXT3\n"); - print_header(mrb, irep, pc-irep->iseq-2); - switch (ins) { -#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _3 (); goto L_OP_ ## i; -#include "mruby/ops.h" -#undef OPCODE - } - break; - default: printf("OP_unknown (0x%x)\n", ins); break; diff --git a/src/vm.c b/src/vm.c index 98f17e287..c97c9678c 100644 --- a/src/vm.c +++ b/src/vm.c @@ -901,7 +901,7 @@ argnum_error(mrb_state *mrb, mrb_int num) #ifndef DIRECT_THREADED #define INIT_DISPATCH for (;;) { insn = BYTECODE_DECODER(*pc); CODE_FETCH_HOOK(mrb, irep, pc, regs); switch (insn) { -#define CASE(insn,ops) case insn: pc0=pc++; FETCH_ ## ops ();; L_ ## insn ## _BODY: +#define CASE(insn,ops) case insn: pc0=pc++; FETCH_ ## ops (); #define NEXT break #define JUMP NEXT #define END_DISPATCH }} @@ -909,7 +909,7 @@ argnum_error(mrb_state *mrb, mrb_int num) #else #define INIT_DISPATCH JUMP; return mrb_nil_value(); -#define CASE(insn,ops) L_ ## insn: pc0=pc++; FETCH_ ## ops (); L_ ## insn ## _BODY: +#define CASE(insn,ops) L_ ## insn: pc0=pc++; FETCH_ ## ops (); #define NEXT insn=BYTECODE_DECODER(*pc); CODE_FETCH_HOOK(mrb, irep, pc, regs); goto *optable[insn] #define JUMP NEXT @@ -1512,7 +1512,7 @@ RETRY_TRY_BLOCK: mrb->c->stack[0] = mrb_nil_value(); a = 0; c = OP_R_NORMAL; - goto L_OP_RETURN_BODY; + goto L_RETURN; } pool = irep->pool; syms = irep->syms; @@ -2733,37 +2733,6 @@ RETRY_TRY_BLOCK: goto L_RAISE; } - CASE(OP_EXT1, Z) { - insn = READ_B(); - switch (insn) { -#define OPCODE(insn,ops) case OP_ ## insn: FETCH_ ## ops ## _1(); goto L_OP_ ## insn ## _BODY; -#include "mruby/ops.h" -#undef OPCODE - } - pc--; - NEXT; - } - CASE(OP_EXT2, Z) { - insn = READ_B(); - switch (insn) { -#define OPCODE(insn,ops) case OP_ ## insn: FETCH_ ## ops ## _2(); goto L_OP_ ## insn ## _BODY; -#include "mruby/ops.h" -#undef OPCODE - } - pc--; - NEXT; - } - CASE(OP_EXT3, Z) { - uint8_t insn = READ_B(); - switch (insn) { -#define OPCODE(insn,ops) case OP_ ## insn: FETCH_ ## ops ## _3(); goto L_OP_ ## insn ## _BODY; -#include "mruby/ops.h" -#undef OPCODE - } - pc--; - NEXT; - } - CASE(OP_STOP, Z) { /* stop VM */ L_STOP: -- cgit v1.2.3 From 3d8a38bea4de5ca3a65ec9bce9359b9c62326f9f Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 29 Jun 2020 08:34:56 +0900 Subject: You don't need to keep index in local variables info in `irep`. --- include/mrbconf.h | 7 + include/mruby/boxing_word.h | 3 +- include/mruby/irep.h | 7 +- mrbgems/mruby-compiler/core/codegen.c | 22 +- mrbgems/mruby-compiler/core/parse.y | 10 +- mrbgems/mruby-compiler/core/y.tab.c | 7974 +++++++++++++++++---------------- mrbgems/mruby-metaprog/src/metaprog.c | 4 +- mrbgems/mruby-proc-ext/src/proc.c | 4 +- src/codedump.c | 17 +- src/dump.c | 14 +- src/load.c | 12 +- 11 files changed, 4121 insertions(+), 3953 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mrbconf.h b/include/mrbconf.h index 81ab36977..1cf72ece9 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -31,6 +31,13 @@ /* exclude floating point numbers */ //#define MRB_WITHOUT_FLOAT +/* stop inlining floating point numbers in mrb_value (effective only with MRB_WORD_BOXING)*/ +/* floating numbers are rounded to fit in 30 bits (float) and 62 bits respectively, */ +/* by inlining. If you need full precision of floating numbers on the platform, */ +/* you have to define this option. when mrb_int is 32bit and mrb_float is double, */ +/* this option is set automatically. */ +// #define MRB_NO_FLOAT_INLINE + /* add -DMRB_NO_METHOD_CACHE to disable method cache to save memory */ //#define MRB_NO_METHOD_CACHE /* size of the method cache (need to be the power of 2) */ diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index 56202a420..6eae789fa 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -11,7 +11,7 @@ #error MRB_INT64 cannot be used with MRB_WORD_BOXING in 32-bit mode. #endif -#ifndef MRB_WITHOUT_FLOAT +#if !defined(MRB_WITHOUT_FLOAT) || defined(MRB_NO_FLOAT_INLINE) struct RFloat { MRB_OBJECT_HEADER; mrb_float f; @@ -64,6 +64,7 @@ enum mrb_special_consts { * undef : ...0001 0100 * fixnum: ...IIII III1 * symbol: ...SSSS SS10 (use only upper 32-bit as symbol value on 64-bit CPU) + * symbol: ...SSSS SS10 (use only upper 32-bit as symbol value on 64-bit CPU) * object: ...PPPP P000 (any bits are 1) */ typedef union mrb_value { diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 5d860273f..0a5b3f1a3 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -39,11 +39,6 @@ typedef struct mrb_pool_value { } u; } mrb_pool_value; -struct mrb_lvinfo { /* local variable info (name, idx) */ - mrb_sym name; - uint16_t r; -}; - /* Program data array struct */ typedef struct mrb_irep { uint16_t nlocals; /* Number of local variables */ @@ -55,7 +50,7 @@ typedef struct mrb_irep { const mrb_sym *syms; const struct mrb_irep * const *reps; - const struct mrb_lvinfo *lv; + const mrb_sym *lv; /* debug info */ struct mrb_irep_debug_info* debug_info; diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 9da80536b..191895668 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -677,10 +677,12 @@ search_upvar(codegen_scope *s, mrb_sym id, int *idx) while (u && !MRB_PROC_CFUNC_P(u)) { const struct mrb_irep *ir = u->body.irep; uint_fast16_t n = ir->nlocals; - const struct mrb_lvinfo *v = ir->lv; - for (; n > 1; n --, v ++) { - if (v->name == id) { - *idx = v->r; + int i; + + const mrb_sym *v = ir->lv; + for (i=1; n > 1; n--, v++, i++) { + if (*v == id) { + *idx = i; return lv - 1; } } @@ -3035,19 +3037,13 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *nlv) s->sp += node_len(nlv)+1; /* add self */ s->nlocals = s->sp; if (nlv) { - struct mrb_lvinfo *lv; + mrb_sym *lv; node *n = nlv; size_t i = 0; - s->irep->lv = lv = (struct mrb_lvinfo*)mrb_malloc(mrb, sizeof(struct mrb_lvinfo)*(s->nlocals-1)); + s->irep->lv = lv = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym)*(s->nlocals-1)); for (i=0, n=nlv; n; i++,n=n->cdr) { - lv[i].name = lv_name(n); - if (lv_name(n)) { - lv[i].r = lv_idx(s, lv_name(n)); - } - else { - lv[i].r = 0; - } + lv[i] = lv_name(n); } mrb_assert(i + 1 == s->nlocals); } diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 2ff66be60..c67c694fe 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -280,10 +280,12 @@ local_var_p(parser_state *p, mrb_sym sym) u = p->upper; while (u && !MRB_PROC_CFUNC_P(u)) { const struct mrb_irep *ir = u->body.irep; - uint_fast16_t n = ir->nlocals; - const struct mrb_lvinfo *v = ir->lv; - for (; v && n > 1; n--, v++) { - if (v->name == sym) return TRUE; + const mrb_sym *v = ir->lv; + int i; + + if (!v) break; + for (i=0; i < ir->nlocals; i++) { + if (v[i] == sym) return TRUE; } if (MRB_PROC_SCOPE_P(u)) break; u = u->upper; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index dbcc6a5bd..096543349 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -343,10 +343,12 @@ local_var_p(parser_state *p, mrb_sym sym) u = p->upper; while (u && !MRB_PROC_CFUNC_P(u)) { const struct mrb_irep *ir = u->body.irep; - uint_fast16_t n = ir->nlocals; - const struct mrb_lvinfo *v = ir->lv; - for (; v && n > 1; n--, v++) { - if (v->name == sym) return TRUE; + const mrb_sym *v = ir->lv; + int i; + + if (!v) break; + for (i=0; i < ir->nlocals; i++) { + if (v[i] == sym) return TRUE; } if (MRB_PROC_SCOPE_P(u)) break; u = u->upper; @@ -793,7 +795,19 @@ new_module(parser_state *p, node *m, node *b) static node* new_def(parser_state *p, mrb_sym m, node *a, node *b) { - return list5((node*)NODE_DEF, nsym(m), locals_node(p), a, b); + return list5((node*)NODE_DEF, nsym(m), 0, a, b); +} + +static void +defn_setup(parser_state *p, node *d, node *a, node *b) +{ + node *n = d->cdr->cdr; + + n->car = locals_node(p); + p->cmdarg_stack = intn(n->cdr->car); + n->cdr->car = a; + local_resume(p, n->cdr->cdr->car); + n->cdr->cdr->car = b; } /* (:sdef obj m lv (arg . body)) */ @@ -801,7 +815,19 @@ static node* new_sdef(parser_state *p, node *o, mrb_sym m, node *a, node *b) { void_expr_error(p, o); - return list6((node*)NODE_SDEF, o, nsym(m), locals_node(p), a, b); + return list6((node*)NODE_SDEF, o, nsym(m), 0, a, b); +} + +static void +defs_setup(parser_state *p, node *d, node *a, node *b) +{ + node *n = d->cdr->cdr->cdr; + + n->car = locals_node(p); + p->cmdarg_stack = intn(n->cdr->car); + n->cdr->car = a; + local_resume(p, n->cdr->cdr->car); + n->cdr->cdr->car = b; } /* (:arg . sym) */ @@ -1404,7 +1430,7 @@ heredoc_end(parser_state *p) /* xxx ----------------------------- */ -#line 1408 "mrbgems/mruby-compiler/core/y.tab.c" +#line 1434 "mrbgems/mruby-compiler/core/y.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -1574,7 +1600,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 1350 "mrbgems/mruby-compiler/core/parse.y" +#line 1376 "mrbgems/mruby-compiler/core/parse.y" node *nd; mrb_sym id; @@ -1582,7 +1608,7 @@ union YYSTYPE stack_type stack; const struct vtable *vars; -#line 1586 "mrbgems/mruby-compiler/core/y.tab.c" +#line 1612 "mrbgems/mruby-compiler/core/y.tab.c" }; typedef union YYSTYPE YYSTYPE; @@ -1900,16 +1926,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 11586 +#define YYLAST 11948 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 147 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 176 +#define YYNNTS 177 /* YYNRULES -- Number of rules. */ -#define YYNRULES 594 +#define YYNRULES 603 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1034 +#define YYNSTATES 1054 #define YYUNDEFTOK 2 #define YYMAXUTOK 375 @@ -1968,66 +1994,67 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 1508, 1508, 1508, 1519, 1525, 1529, 1534, 1538, 1544, - 1546, 1545, 1559, 1586, 1592, 1596, 1601, 1605, 1611, 1611, - 1615, 1619, 1623, 1627, 1631, 1635, 1639, 1644, 1645, 1649, - 1653, 1657, 1661, 1664, 1668, 1672, 1676, 1680, 1684, 1689, - 1693, 1700, 1701, 1705, 1709, 1710, 1714, 1718, 1722, 1726, - 1729, 1738, 1739, 1742, 1743, 1750, 1749, 1764, 1768, 1773, - 1777, 1782, 1786, 1791, 1795, 1799, 1803, 1807, 1813, 1817, - 1823, 1824, 1830, 1834, 1838, 1842, 1846, 1850, 1854, 1858, - 1862, 1866, 1872, 1873, 1879, 1883, 1889, 1893, 1899, 1903, - 1907, 1911, 1915, 1919, 1925, 1931, 1938, 1942, 1946, 1950, - 1954, 1958, 1964, 1970, 1975, 1981, 1985, 1988, 1992, 1996, - 2003, 2004, 2005, 2006, 2011, 2018, 2019, 2022, 2026, 2026, - 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, - 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, - 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, - 2064, 2064, 2064, 2065, 2065, 2066, 2066, 2066, 2067, 2067, - 2067, 2067, 2068, 2068, 2068, 2069, 2069, 2069, 2070, 2070, - 2070, 2070, 2071, 2071, 2071, 2071, 2072, 2072, 2072, 2072, - 2073, 2073, 2073, 2073, 2074, 2074, 2074, 2074, 2075, 2075, - 2078, 2082, 2086, 2090, 2094, 2098, 2102, 2107, 2112, 2117, - 2121, 2125, 2129, 2133, 2137, 2141, 2145, 2149, 2153, 2157, - 2161, 2165, 2169, 2173, 2177, 2181, 2185, 2189, 2193, 2197, + 0, 1534, 1534, 1534, 1545, 1551, 1555, 1560, 1564, 1570, + 1572, 1571, 1585, 1612, 1618, 1622, 1627, 1631, 1637, 1637, + 1641, 1645, 1649, 1653, 1657, 1661, 1665, 1670, 1671, 1675, + 1679, 1683, 1687, 1688, 1691, 1696, 1701, 1705, 1711, 1715, + 1719, 1723, 1727, 1731, 1736, 1740, 1747, 1748, 1752, 1756, + 1757, 1761, 1765, 1769, 1773, 1777, 1787, 1786, 1801, 1810, + 1811, 1814, 1815, 1822, 1821, 1836, 1840, 1845, 1849, 1854, + 1858, 1863, 1867, 1871, 1875, 1879, 1885, 1889, 1895, 1896, + 1902, 1906, 1910, 1914, 1918, 1922, 1926, 1930, 1934, 1938, + 1944, 1945, 1951, 1955, 1961, 1965, 1971, 1975, 1979, 1983, + 1987, 1991, 1997, 2003, 2010, 2014, 2018, 2022, 2026, 2030, + 2036, 2042, 2047, 2053, 2057, 2060, 2064, 2068, 2075, 2076, + 2077, 2078, 2083, 2090, 2091, 2094, 2098, 2098, 2104, 2105, + 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, + 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, + 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2136, 2136, + 2136, 2137, 2137, 2138, 2138, 2138, 2139, 2139, 2139, 2139, + 2140, 2140, 2140, 2141, 2141, 2141, 2142, 2142, 2142, 2142, + 2143, 2143, 2143, 2143, 2144, 2144, 2144, 2144, 2145, 2145, + 2145, 2145, 2146, 2146, 2146, 2146, 2147, 2147, 2150, 2154, + 2158, 2162, 2166, 2170, 2174, 2179, 2184, 2189, 2193, 2197, 2201, 2205, 2209, 2213, 2217, 2221, 2225, 2229, 2233, 2237, - 2241, 2245, 2249, 2255, 2256, 2261, 2265, 2272, 2276, 2284, - 2288, 2314, 2315, 2318, 2319, 2320, 2325, 2330, 2337, 2343, - 2348, 2353, 2358, 2365, 2365, 2376, 2382, 2386, 2392, 2393, - 2396, 2402, 2408, 2413, 2420, 2425, 2430, 2437, 2438, 2439, - 2440, 2441, 2442, 2443, 2444, 2448, 2453, 2452, 2464, 2468, - 2463, 2473, 2473, 2477, 2481, 2485, 2489, 2494, 2499, 2503, - 2507, 2511, 2515, 2519, 2520, 2526, 2532, 2525, 2544, 2552, - 2560, 2560, 2560, 2567, 2567, 2567, 2574, 2580, 2585, 2587, - 2584, 2596, 2594, 2612, 2617, 2610, 2634, 2632, 2649, 2653, - 2648, 2670, 2676, 2669, 2693, 2697, 2701, 2705, 2711, 2718, - 2719, 2720, 2723, 2724, 2727, 2728, 2736, 2737, 2743, 2747, - 2750, 2754, 2758, 2762, 2767, 2771, 2775, 2779, 2785, 2784, - 2794, 2798, 2802, 2806, 2812, 2817, 2822, 2826, 2830, 2834, - 2838, 2842, 2846, 2850, 2854, 2858, 2862, 2866, 2870, 2874, - 2878, 2884, 2889, 2896, 2896, 2900, 2905, 2912, 2916, 2922, - 2923, 2926, 2931, 2934, 2938, 2944, 2948, 2955, 2954, 2969, - 2979, 2983, 2988, 2995, 2999, 3003, 3007, 3011, 3015, 3019, - 3023, 3027, 3034, 3033, 3048, 3047, 3063, 3071, 3080, 3083, - 3090, 3093, 3097, 3098, 3101, 3105, 3108, 3112, 3115, 3116, - 3117, 3118, 3121, 3122, 3128, 3129, 3130, 3134, 3140, 3141, - 3147, 3152, 3151, 3162, 3166, 3172, 3176, 3182, 3186, 3192, - 3195, 3196, 3199, 3205, 3211, 3212, 3215, 3222, 3221, 3235, - 3239, 3246, 3251, 3258, 3264, 3265, 3266, 3267, 3268, 3272, - 3278, 3282, 3288, 3289, 3290, 3294, 3300, 3304, 3308, 3312, - 3316, 3322, 3326, 3332, 3336, 3340, 3344, 3348, 3352, 3360, - 3367, 3378, 3379, 3383, 3387, 3386, 3402, 3408, 3426, 3432, - 3438, 3444, 3451, 3456, 3463, 3467, 3473, 3477, 3483, 3484, - 3487, 3491, 3497, 3501, 3505, 3509, 3515, 3520, 3525, 3529, - 3533, 3537, 3541, 3545, 3549, 3553, 3557, 3561, 3565, 3569, - 3573, 3577, 3582, 3588, 3593, 3598, 3603, 3608, 3615, 3619, - 3626, 3631, 3630, 3642, 3646, 3652, 3660, 3668, 3676, 3680, - 3686, 3690, 3696, 3697, 3700, 3705, 3712, 3713, 3716, 3722, - 3726, 3732, 3737, 3737, 3762, 3763, 3769, 3774, 3780, 3781, - 3784, 3790, 3795, 3805, 3812, 3813, 3814, 3817, 3818, 3819, - 3820, 3823, 3824, 3825, 3828, 3829, 3832, 3836, 3842, 3843, - 3849, 3850, 3853, 3854, 3857, 3860, 3861, 3862, 3865, 3866, - 3867, 3870, 3877, 3878, 3882 + 2241, 2245, 2249, 2253, 2257, 2261, 2265, 2269, 2273, 2277, + 2281, 2285, 2289, 2293, 2297, 2301, 2305, 2309, 2313, 2317, + 2321, 2329, 2338, 2347, 2357, 2363, 2364, 2369, 2373, 2380, + 2384, 2392, 2396, 2422, 2423, 2426, 2427, 2428, 2433, 2438, + 2445, 2451, 2456, 2461, 2466, 2473, 2473, 2484, 2490, 2494, + 2500, 2501, 2504, 2510, 2516, 2521, 2528, 2533, 2538, 2545, + 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2556, 2561, 2560, + 2572, 2576, 2571, 2581, 2581, 2585, 2589, 2593, 2597, 2602, + 2607, 2611, 2615, 2619, 2623, 2627, 2628, 2634, 2640, 2633, + 2652, 2660, 2668, 2668, 2668, 2675, 2675, 2675, 2682, 2688, + 2693, 2695, 2692, 2704, 2702, 2720, 2725, 2718, 2742, 2740, + 2756, 2766, 2777, 2781, 2785, 2789, 2795, 2802, 2803, 2804, + 2807, 2808, 2811, 2812, 2820, 2821, 2827, 2831, 2834, 2838, + 2842, 2846, 2851, 2855, 2859, 2863, 2869, 2868, 2878, 2882, + 2886, 2890, 2896, 2901, 2906, 2910, 2914, 2918, 2922, 2926, + 2930, 2934, 2938, 2942, 2946, 2950, 2954, 2958, 2962, 2968, + 2973, 2980, 2980, 2984, 2989, 2996, 3000, 3006, 3007, 3010, + 3015, 3018, 3022, 3028, 3032, 3039, 3038, 3053, 3063, 3067, + 3072, 3079, 3083, 3087, 3091, 3095, 3099, 3103, 3107, 3111, + 3118, 3117, 3132, 3131, 3147, 3155, 3164, 3167, 3174, 3177, + 3181, 3182, 3185, 3189, 3192, 3196, 3199, 3200, 3201, 3202, + 3205, 3206, 3212, 3213, 3214, 3218, 3224, 3225, 3231, 3236, + 3235, 3246, 3250, 3256, 3260, 3266, 3270, 3276, 3279, 3280, + 3283, 3289, 3295, 3296, 3299, 3306, 3305, 3319, 3323, 3330, + 3335, 3342, 3348, 3349, 3350, 3351, 3352, 3356, 3362, 3366, + 3372, 3373, 3374, 3378, 3384, 3388, 3392, 3396, 3400, 3406, + 3410, 3416, 3420, 3424, 3428, 3432, 3436, 3444, 3451, 3462, + 3463, 3467, 3471, 3470, 3486, 3492, 3512, 3513, 3519, 3525, + 3531, 3538, 3543, 3550, 3554, 3560, 3564, 3570, 3571, 3574, + 3578, 3584, 3588, 3592, 3596, 3602, 3607, 3612, 3616, 3620, + 3624, 3628, 3632, 3636, 3640, 3644, 3648, 3652, 3656, 3660, + 3664, 3669, 3675, 3680, 3685, 3690, 3695, 3702, 3706, 3713, + 3718, 3717, 3729, 3733, 3739, 3747, 3755, 3763, 3767, 3773, + 3777, 3783, 3784, 3787, 3792, 3799, 3800, 3803, 3809, 3813, + 3819, 3824, 3824, 3849, 3850, 3856, 3861, 3867, 3868, 3871, + 3877, 3882, 3892, 3899, 3900, 3901, 3904, 3905, 3906, 3907, + 3910, 3911, 3912, 3915, 3916, 3919, 3923, 3929, 3930, 3936, + 3937, 3940, 3941, 3944, 3947, 3948, 3949, 3952, 3953, 3954, + 3957, 3964, 3965, 3969 }; #endif @@ -2065,33 +2092,33 @@ static const char *const yytname[] = "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "']'", "','", "'`'", "'('", "')'", "';'", "'.'", "'\\n'", "$accept", "program", "$@1", "top_compstmt", "top_stmts", "top_stmt", "@2", "bodystmt", "compstmt", - "stmts", "stmt", "$@3", "command_asgn", "command_rhs", "expr", - "expr_value", "command_call", "block_command", "cmd_brace_block", "$@4", - "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_list", - "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", - "undef_list", "$@5", "op", "reswords", "arg", "aref_args", "arg_rhs", - "paren_args", "opt_paren_args", "opt_call_args", "call_args", - "command_args", "@6", "block_arg", "opt_block_arg", "comma", "args", - "mrhs", "primary", "@7", "@8", "$@9", "$@10", "@11", "@12", "$@13", - "$@14", "$@15", "$@16", "$@17", "$@18", "@19", "@20", "@21", "@22", - "@23", "@24", "@25", "@26", "primary_value", "then", "do", "if_tail", - "opt_else", "for_var", "f_margs", "$@27", "block_args_tail", - "opt_block_args_tail", "block_param", "opt_block_param", - "block_param_def", "$@28", "opt_bv_decl", "bv_decls", "bvar", - "f_larglist", "lambda_body", "do_block", "$@29", "block_call", - "method_call", "brace_block", "@30", "@31", "case_body", "cases", + "stmts", "stmt", "$@3", "rassign", "command_asgn", "command_rhs", "expr", + "defn_head", "defs_head", "$@4", "expr_value", "command_call", + "block_command", "cmd_brace_block", "$@5", "command", "mlhs", + "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_list", "mlhs_post", + "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "undef_list", + "$@6", "op", "reswords", "arg", "aref_args", "arg_rhs", "paren_args", + "opt_paren_args", "opt_call_args", "call_args", "command_args", "@7", + "block_arg", "opt_block_arg", "comma", "args", "mrhs", "primary", "@8", + "@9", "$@10", "$@11", "@12", "@13", "$@14", "$@15", "$@16", "$@17", + "$@18", "$@19", "@20", "@21", "@22", "@23", "primary_value", "then", + "do", "if_tail", "opt_else", "for_var", "f_margs", "$@24", + "block_args_tail", "opt_block_args_tail", "block_param", + "opt_block_param", "block_param_def", "$@25", "opt_bv_decl", "bv_decls", + "bvar", "f_larglist", "lambda_body", "do_block", "$@26", "block_call", + "method_call", "brace_block", "@27", "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal", "string", - "string_fragment", "string_rep", "string_interp", "@32", "xstring", + "string_fragment", "string_rep", "string_interp", "@29", "xstring", "regexp", "heredoc", "heredoc_bodies", "heredoc_body", - "heredoc_string_rep", "heredoc_string_interp", "@33", "words", "symbol", + "heredoc_string_rep", "heredoc_string_interp", "@30", "words", "symbol", "basic_symbol", "sym", "symbols", "numeric", "variable", "var_lhs", - "var_ref", "backref", "superclass", "$@34", "f_arglist", "f_label", - "f_kw", "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", - "f_kwrest", "args_tail", "opt_args_tail", "f_args", "f_bad_arg", - "f_norm_arg", "f_arg_item", "@35", "f_arg", "f_opt_asgn", "f_opt", - "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark", + "var_ref", "backref", "superclass", "$@31", "f_arglist_paren", + "f_arglist", "f_label", "f_kw", "f_block_kw", "f_block_kwarg", "f_kwarg", + "kwrest_mark", "f_kwrest", "args_tail", "opt_args_tail", "f_args", + "f_bad_arg", "f_norm_arg", "f_arg_item", "@32", "f_arg", "f_opt_asgn", + "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg", - "singleton", "$@36", "assoc_list", "assocs", "label_tag", "assoc", + "singleton", "$@33", "assoc_list", "assocs", "label_tag", "assoc", "operation", "operation2", "operation3", "dot_or_colon", "call_op", "call_op2", "opt_terms", "opt_nl", "rparen", "trailer", "term", "nl", "terms", "none", YY_NULLPTR @@ -2121,12 +2148,12 @@ static const yytype_int16 yytoknum[] = }; # endif -#define YYPACT_NINF (-829) +#define YYPACT_NINF (-870) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-595) +#define YYTABLE_NINF (-604) #define yytable_value_is_error(Yyn) \ ((Yyn) == YYTABLE_NINF) @@ -2135,110 +2162,112 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -829, 164, 2491, -829, 7022, 8994, 9330, 5100, -829, 8646, - 8646, -829, -829, 9106, 6520, 4956, 7370, 7370, -829, -829, - 7370, 2735, 5870, -829, -829, -829, -829, -39, 6520, -829, - 36, -829, -829, -829, 5240, 5380, -829, -829, 5520, -829, - -829, -829, -829, -829, -829, -829, 20, 8762, 8762, 129, - 4227, 1481, 7602, 7950, 6798, -829, 6242, 614, 927, 1024, - 1126, 839, -829, 410, 8878, 8762, -829, 852, -829, 1251, - -829, 448, -829, -829, 166, 171, -829, 80, 9218, -829, - 198, 11318, 299, 402, 21, 59, -829, 354, -829, -829, - -829, -829, -829, -829, -829, -829, -829, 203, 165, -829, - 340, 137, -829, -829, -829, -829, -829, 159, 159, 177, - 72, 552, -829, 8646, 99, 4344, 607, -829, 200, -829, - 494, -829, -829, 137, -829, -829, -829, -829, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, 33, 44, 47, 101, -829, -829, -829, -829, - -829, -829, 170, 218, 219, 227, -829, 229, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, -829, 240, 3417, 270, 448, 83, 225, 526, - 61, 247, 86, 83, 8646, 8646, 539, 306, -829, -829, - 609, 329, 95, 110, -829, -829, -829, -829, -829, -829, - -829, -829, -829, 6381, -829, -829, 253, -829, -829, -829, - -829, -829, -829, 852, -829, 264, -829, 386, -829, -829, - 852, 2601, 8762, 8762, 8762, 8762, -829, 11297, -829, -829, - 271, 361, 271, -829, -829, -829, 7138, -829, -829, -829, - 7370, -829, -829, -829, 4956, 8646, -829, -829, 286, 4461, - -829, 796, 355, 398, 7254, 4227, 302, 852, 1251, 852, - 323, -829, 7254, 852, 325, 1517, 1517, -829, 11297, 316, - 1517, -829, 421, 9442, 370, 798, 826, 859, 1597, -829, - -829, -829, -829, 1166, -829, -829, -829, -829, -829, -829, - 679, 749, -829, -829, 1186, -829, 1195, -829, 1257, -829, - 860, 444, 446, -829, -829, -829, -829, 4722, 8646, 8646, - 8646, 8646, 7254, 8646, 8646, -829, -829, 8066, -829, 4227, - 6910, 392, 8066, 8762, 8762, 8762, 8762, 8762, 8762, 8762, - 8762, 8762, 8762, 8762, 8762, 8762, 8762, 8762, 8762, 8762, - 8762, 8762, 8762, 8762, 8762, 8762, 8762, 8762, 8762, 9714, - -829, 7370, -829, 9798, -829, -829, 10974, -829, -829, -829, - -829, 8878, 8878, -829, 428, -829, 448, -829, 961, -829, - -829, -829, -829, -829, 9882, 7370, 9966, 3417, 8646, -829, - -829, -829, -829, 522, 528, 149, -829, 3561, 533, 8762, - 10050, 7370, 10134, 8762, 8762, 3849, 126, 126, 113, 10218, - 7370, 10302, -829, 501, -829, 4461, 386, -829, -829, 8182, - 542, -829, 679, 8762, 11318, 11318, 11318, 8762, 476, -829, - 7486, -829, 8762, -829, 7718, 852, 425, 852, 271, 271, - -829, -829, 745, 431, -829, -829, 6520, 3966, 443, 10050, - 10134, 8762, 1251, 852, -829, -829, 4839, 445, 1251, -829, - -829, 7834, -829, 852, 7950, -829, -829, -829, 961, 80, - 9442, -829, 9442, 10386, 7370, 10470, 30, -829, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, 1719, - -829, 8762, -829, 451, 554, 472, -829, -829, -829, -829, - -829, 479, 8762, -829, 497, 596, 511, 608, -829, -829, - 1283, 4461, 679, -829, -829, -829, -829, -829, -829, -829, - 8762, 8762, -829, -829, -829, -829, -829, -829, -829, -829, - 153, 8762, -829, 11121, 271, -829, 852, 9442, 532, -829, - -829, -829, 570, 572, 2302, -829, -829, 976, 180, 355, - 2331, 2331, 2331, 2331, 1479, 1479, 11455, 11395, 2331, 2331, - 11378, 11378, 671, 671, 11061, 1479, 1479, 1462, 1462, 1490, - 175, 175, 355, 355, 355, 2869, 5986, 3137, 6102, -829, - 159, -829, 550, 437, -829, 563, -829, -829, 5870, -829, - -829, 2061, 153, 153, -829, 11044, -829, -829, -829, -829, - -829, 852, 8646, 3417, 736, 813, -829, 159, 560, 159, - 699, 745, 1650, 6659, -829, 8298, 706, -829, 690, -829, - 5636, 5753, 605, 268, 276, 706, -829, -829, -829, -829, - 79, 88, 613, 121, 140, 8646, 6520, 616, 740, 11318, - 450, -829, 679, 11318, 11318, 679, 8762, 11297, -829, 271, - 11318, -829, -829, -829, -829, 7486, 7718, -829, -829, -829, - 623, -829, -829, 136, 1251, 852, 1517, 392, -829, 736, - 813, 626, 959, 1023, -829, -829, 1123, 622, 77, 11318, - 768, -829, -829, -829, 201, -829, 1719, -829, 11318, 1719, - -829, -829, 1907, -829, -829, -829, 637, -829, 355, 355, - -829, 1719, 3417, -829, -829, 11140, 8414, -829, -829, 9442, - 7254, 8878, 8762, 10554, 7370, 10638, 70, 8878, 8878, -829, - 428, 672, 8878, 8878, -829, 428, 59, 166, 3417, 4461, - 153, -829, 852, 762, -829, -829, -829, 1826, 3417, 852, - -829, 11121, -829, 689, -829, 4110, 774, -829, 8646, 779, - -829, 8762, 8762, 358, 8762, 8762, 800, 4605, 4605, 156, - 126, -829, -829, -829, 8530, 3705, 679, 11318, -829, 271, - -829, -829, -829, 192, -829, 104, 852, 676, 674, 678, - 3417, 4461, -829, 766, -829, 472, -829, -829, -829, 684, - 686, 687, -829, 691, 766, 687, -829, -829, 622, 622, - 9554, -829, 694, 472, 695, 9554, -829, 698, 701, -829, - 835, 8762, 11209, -829, -829, 11318, 3003, 3271, 712, 408, - 432, 8762, 8762, -829, -829, -829, -829, -829, 8878, -829, - -829, -829, -829, -829, -829, -829, 840, 722, 4461, 3417, - -829, -829, 852, 852, 845, -829, 1650, 9666, 83, -829, - -829, 4605, -829, -829, 83, -829, 8762, -829, 855, 856, - -829, 11318, 193, 7718, -829, 733, -829, 1530, -829, 680, - 868, 753, -829, 1719, -829, 1907, -829, 1907, -829, 1907, - -829, -829, 769, 771, 837, 995, 768, -829, -829, 1282, - -829, 995, 1719, -829, 1907, -829, -829, 11228, 439, 11318, - 11318, -829, -829, -829, -829, 761, 896, -829, -829, -829, - 3417, 862, -829, 1028, 826, 859, 3417, -829, 3561, -829, - -829, 4605, -829, -829, -829, 1585, 1585, 547, -829, 22, - -829, -829, -829, -829, 687, 778, 687, 687, -829, -829, - -829, 10722, -829, 472, 768, -829, -829, 780, 792, 793, - -829, 799, 793, -829, -829, 913, 961, 10806, 7370, 10890, - 528, 690, 935, 812, 812, 1585, 823, 680, -829, -829, - 1907, -829, -829, -829, 824, 828, -829, 1719, -829, 1907, - -829, 1907, -829, 1907, -829, -829, -829, 736, 813, 834, - 357, 579, -829, -829, -829, 1585, 812, 1585, -829, 687, - 793, 842, 793, 793, 192, 812, -829, -829, 1907, -829, - -829, -829, 793, -829 + -870, 123, 2747, -870, 7459, 9431, 9767, 5537, -870, 9083, + 9083, -870, -870, 9543, 6957, 5393, 7807, 7807, -870, -870, + 7807, 3172, 6307, -870, -870, -870, -870, 127, 6957, -870, + 78, -870, -870, -870, 5677, 5817, -870, -870, 5957, -870, + -870, -870, -870, -870, -870, -870, 30, 9199, 9199, 95, + 4664, 906, 8039, 8387, 7235, -870, 6679, 1068, 1316, 1360, + 1376, 695, -870, 125, 9315, 9199, -870, 1474, -870, 1634, + 60, -870, 75, 1663, 1663, -870, -870, 163, 87, -870, + 34, 9655, -870, 114, 11676, 197, 488, 260, 39, -870, + 322, -870, -870, -870, -870, -870, -870, -870, -870, -870, + 38, 204, -870, 241, 22, -870, -870, -870, -870, -870, + 94, 94, 155, 275, 998, -870, 9083, 263, 4781, 161, + 1663, 1663, -870, 180, -870, 626, -870, -870, 22, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, 70, 109, 134, + 138, -870, -870, -870, -870, -870, -870, 146, 171, 189, + 201, -870, 205, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, 221, 3854, + 256, 75, 546, 207, 11757, 662, 102, 252, 250, 546, + 9083, 9083, 823, 292, -870, -870, 866, 337, 542, 643, + -870, -870, -870, -870, -870, -870, -870, -870, -870, 6818, + -870, -870, 236, -870, -870, -870, -870, -870, -870, 1474, + -870, 483, -870, 363, -870, -870, 1474, 3038, 9199, 9199, + 9199, 9199, -870, 11736, -870, -870, 259, 349, 259, -870, + -870, -870, 7575, -870, -870, -870, 7807, -870, -870, -870, + 5393, 9083, -870, -870, 272, 4898, -870, 902, 344, 305, + 7691, 4664, 279, 1474, 1634, 1474, 310, -870, 7691, 1474, + 316, 1341, 1341, -870, 11736, 289, 1341, -870, 391, 9879, + 325, 936, 999, 1050, 1903, -870, -870, -870, -870, 1382, + -870, -870, -870, -870, -870, -870, 498, 1322, -870, -870, + 1398, -870, 1451, -870, 1460, -870, 836, 399, 417, -870, + -870, -870, -870, 5159, 9083, 9083, 9083, 9083, 7691, 9543, + 9083, 9083, 54, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, 2024, 378, 3854, 9199, -870, + 370, 452, 384, -870, 1474, -870, -870, -870, 386, 9199, + -870, 407, 467, 408, 504, -870, 430, 3854, -870, -870, + 8503, -870, 4664, 7347, 432, 8503, 9199, 9199, 9199, 9199, + 9199, 9199, 9199, 9199, 9199, 9199, 9199, 9199, 9199, 9199, + 9199, 9543, 9199, 9199, 9199, 9199, 9199, 9199, 9199, 9199, + 9199, 9199, 9199, 1804, -870, 7807, -870, 10151, -870, -870, + 11327, -870, -870, -870, -870, 9315, 9315, -870, 459, -870, + 75, -870, 1169, -870, -870, -870, -870, -870, -870, 10235, + 7807, 10319, 3854, 9083, -870, -870, -870, 555, 561, 295, + -870, 3998, 562, 9199, 10403, 7807, 10487, 9199, 9199, 4286, + 88, 88, 827, 10571, 7807, 10655, -870, 517, -870, 4898, + 363, -870, -870, 8619, 569, -870, 498, 9199, 11757, 11757, + 11757, 9199, 710, -870, 7923, -870, 9199, -870, 8155, 1474, + 443, 1474, 259, 259, -870, -870, 64, 445, -870, -870, + 6957, 4403, 455, 10403, 10487, 9199, 1634, 1474, -870, -870, + 5276, 449, 1634, -870, -870, 8271, -870, 1474, 8387, -870, + -870, -870, 1169, 34, 9879, -870, 9879, 10739, 7807, 10823, + 1771, -870, -870, -870, 1539, 4898, 498, -870, -870, -870, + -870, -870, -870, -870, 9199, 9199, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, 1724, 1474, + 1474, 9199, 586, 11757, 139, -870, -870, -870, 145, -870, + -870, 1771, -870, 11757, 1771, -870, -870, 1417, -870, -870, + 9199, 591, 48, 9199, -870, 11500, 259, -870, 1474, 9879, + 478, -870, -870, -870, 581, 515, 2373, -870, -870, 1180, + 321, 344, 2795, 2795, 2795, 2795, 1483, 1483, 11817, 2139, + 2795, 2795, 2250, 2250, 511, 511, -870, -870, 11475, 1483, + 1483, 981, 981, 1377, 178, 178, 344, 344, 344, 3306, + 6423, 3574, 6539, -870, 94, -870, 507, 334, -870, 366, + -870, -870, 6307, -870, -870, 1624, 48, 48, -870, 2860, + -870, -870, -870, -870, -870, 1474, 9083, 3854, 1191, 100, + -870, 94, 508, 94, 633, 64, 7096, -870, 8735, 640, + -870, 208, -870, 6073, 6190, 521, 351, 439, 640, -870, + -870, -870, -870, 1148, 113, 522, 1227, 1261, 9083, 6957, + 528, 654, 11757, 601, -870, 498, 11757, 11757, 498, 9199, + 11736, -870, 259, 11757, -870, -870, -870, -870, 7923, 8155, + -870, -870, -870, 533, -870, -870, 90, 1634, 1474, 1341, + 432, -870, 1191, 100, 534, 1209, 1306, 532, 81, -870, + 548, -870, 344, 344, -870, 834, 1474, 543, -870, -870, + 11397, -870, 631, -870, 384, -870, -870, -870, 554, 556, + 558, -870, 559, 631, 558, 11415, -870, -870, 1771, 3854, + -870, -870, 11569, 8851, -870, -870, 9879, 7691, 9315, 9199, + 10907, 7807, 10991, 61, 9315, 9315, -870, 459, 414, 9315, + 9315, -870, 459, 39, 163, 3854, 4898, 48, -870, 1474, + 687, -870, -870, -870, -870, 11500, -870, 613, -870, 4547, + 698, -870, 9083, 705, -870, 9199, 9199, 441, 9199, 9199, + 707, 5042, 5042, 722, 88, -870, -870, -870, 8967, 4142, + 498, 11757, -870, 259, -870, -870, -870, 732, 583, 580, + 3854, 4898, -870, -870, -870, 587, -870, 1746, 9199, -870, + 1771, -870, 1417, -870, 1417, -870, 1417, -870, -870, 9199, + -870, 532, 532, 9991, -870, 590, 384, 598, 9991, -870, + 600, 604, -870, 734, 9199, 11588, -870, -870, 11757, 3440, + 3708, 611, 460, 474, 9199, 9199, -870, -870, -870, -870, + -870, 9315, -870, -870, -870, -870, -870, -870, -870, 738, + 617, 4898, 3854, -870, -870, 10103, 546, -870, -870, 5042, + -870, -870, 546, -870, 9199, -870, 748, 752, -870, 11757, + 112, 8155, -870, 1287, 755, 635, 1210, 1210, 1010, 11757, + 558, 636, 558, 558, 11757, 658, 663, 735, 1221, 139, + -870, -870, 1580, -870, 1221, 1771, -870, 1417, -870, -870, + 11657, 475, 11757, 11757, -870, -870, -870, -870, 657, 786, + 761, -870, 1272, 999, 1050, 3854, -870, 3998, -870, -870, + 5042, -870, -870, -870, -870, 14, -870, -870, -870, -870, + 679, 679, 1210, 688, -870, 1417, -870, -870, -870, -870, + -870, -870, 11075, -870, 384, 139, -870, -870, 692, 693, + 694, -870, 696, 694, -870, -870, 1169, 11159, 7807, 11243, + 561, 208, 826, 1287, -870, 1210, 679, 1210, 558, 700, + 708, -870, 1771, -870, 1417, -870, 1417, -870, 1417, -870, + -870, 1191, 100, 699, 1043, 1087, -870, -870, -870, -870, + 679, -870, 694, 712, 694, 694, 732, -870, 1417, -870, + -870, -870, 694, -870 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -2246,156 +2275,158 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 0, 1, 0, 0, 0, 0, 276, 0, - 0, 300, 303, 0, 0, 580, 324, 325, 326, 327, - 288, 253, 400, 475, 474, 476, 477, 582, 0, 10, - 0, 479, 478, 480, 466, 275, 468, 467, 470, 469, - 462, 463, 424, 425, 481, 482, 274, 0, 0, 0, - 0, 278, 594, 594, 80, 295, 0, 0, 0, 0, - 0, 0, 439, 0, 0, 0, 3, 580, 6, 9, - 27, 32, 44, 52, 51, 0, 68, 0, 72, 82, - 0, 49, 232, 0, 53, 293, 267, 268, 422, 269, - 270, 271, 420, 419, 451, 421, 418, 473, 0, 272, - 273, 253, 5, 8, 324, 325, 288, 594, 400, 0, - 105, 106, 274, 0, 0, 0, 0, 108, 483, 328, - 0, 473, 273, 0, 316, 160, 170, 161, 157, 186, - 187, 188, 189, 168, 183, 176, 166, 165, 181, 164, - 163, 159, 184, 158, 171, 175, 177, 169, 162, 178, - 185, 180, 179, 172, 182, 167, 156, 174, 173, 155, - 153, 154, 150, 151, 152, 110, 112, 111, 145, 146, - 141, 123, 124, 125, 132, 129, 131, 126, 127, 147, - 148, 133, 134, 138, 142, 128, 130, 120, 121, 122, - 135, 136, 137, 139, 140, 143, 144, 149, 552, 318, - 113, 114, 551, 0, 0, 0, 50, 0, 0, 0, - 473, 0, 273, 0, 0, 0, 104, 0, 339, 338, - 0, 0, 473, 273, 179, 172, 182, 167, 150, 151, - 152, 110, 111, 0, 115, 117, 20, 116, 442, 447, - 446, 588, 591, 580, 590, 0, 444, 0, 592, 589, - 581, 564, 0, 0, 0, 0, 248, 260, 66, 252, - 594, 422, 594, 556, 67, 65, 594, 242, 289, 64, - 0, 241, 399, 63, 580, 0, 583, 18, 0, 0, - 209, 0, 210, 285, 0, 0, 0, 580, 15, 580, - 70, 14, 0, 580, 0, 585, 585, 233, 0, 0, - 585, 554, 0, 0, 78, 0, 88, 95, 522, 456, - 455, 457, 458, 0, 454, 453, 437, 431, 430, 433, - 0, 0, 428, 449, 0, 460, 0, 426, 0, 435, - 0, 464, 465, 48, 224, 225, 4, 581, 0, 0, - 0, 0, 0, 0, 0, 387, 389, 0, 84, 0, - 76, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 1, 0, 0, 0, 0, 288, 0, + 0, 312, 315, 0, 0, 589, 332, 333, 334, 335, + 300, 265, 408, 483, 482, 484, 485, 591, 0, 10, + 0, 487, 486, 488, 474, 287, 476, 475, 478, 477, + 470, 471, 432, 433, 489, 490, 286, 0, 0, 0, + 0, 290, 603, 603, 88, 307, 0, 0, 0, 0, + 0, 0, 447, 0, 0, 0, 3, 589, 6, 9, + 32, 27, 33, 531, 531, 49, 60, 59, 0, 76, + 0, 80, 90, 0, 54, 244, 0, 61, 305, 279, + 280, 430, 281, 282, 283, 428, 427, 459, 429, 426, + 481, 0, 284, 285, 265, 5, 8, 332, 333, 300, + 603, 408, 0, 113, 114, 286, 0, 0, 0, 0, + 531, 531, 116, 491, 336, 0, 481, 285, 0, 328, + 168, 178, 169, 165, 194, 195, 196, 197, 176, 191, + 184, 174, 173, 189, 172, 171, 167, 192, 166, 179, + 183, 185, 177, 170, 186, 193, 188, 187, 180, 190, + 175, 164, 182, 181, 163, 161, 162, 158, 159, 160, + 118, 120, 119, 153, 154, 149, 131, 132, 133, 140, + 137, 139, 134, 135, 155, 156, 141, 142, 146, 150, + 136, 138, 128, 129, 130, 143, 144, 145, 147, 148, + 151, 152, 157, 561, 55, 121, 122, 560, 0, 0, + 0, 58, 0, 0, 54, 0, 481, 0, 285, 0, + 0, 0, 112, 0, 347, 346, 0, 0, 104, 111, + 187, 180, 190, 175, 158, 159, 160, 118, 119, 0, + 123, 125, 20, 124, 450, 455, 454, 597, 600, 589, + 599, 0, 452, 0, 601, 598, 590, 573, 0, 0, + 0, 0, 260, 272, 74, 264, 603, 430, 603, 565, + 75, 73, 603, 254, 301, 72, 0, 253, 407, 71, + 589, 0, 592, 18, 0, 0, 217, 0, 218, 297, + 0, 0, 0, 589, 15, 589, 78, 14, 0, 589, + 0, 594, 594, 245, 0, 0, 594, 563, 0, 0, + 86, 0, 96, 103, 531, 464, 463, 465, 466, 0, + 462, 461, 445, 439, 438, 441, 0, 0, 436, 457, + 0, 468, 0, 434, 0, 443, 0, 472, 473, 53, + 232, 233, 4, 590, 0, 0, 0, 0, 0, 0, + 0, 0, 538, 534, 533, 532, 535, 536, 507, 540, + 552, 508, 556, 555, 551, 531, 496, 0, 500, 505, + 603, 510, 603, 530, 0, 537, 539, 542, 516, 0, + 549, 516, 554, 516, 0, 514, 496, 0, 395, 397, + 0, 92, 0, 84, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 577, 594, 576, 0, 579, 578, 0, 404, 402, 294, - 423, 0, 0, 393, 57, 292, 313, 105, 106, 107, - 464, 465, 484, 311, 0, 594, 0, 0, 0, 319, - 575, 574, 321, 0, 594, 285, 330, 0, 329, 0, - 0, 594, 0, 0, 0, 0, 0, 0, 285, 0, - 594, 0, 308, 0, 118, 0, 0, 443, 445, 0, - 0, 593, 558, 0, 261, 563, 255, 0, 258, 249, - 0, 257, 0, 250, 0, 580, 0, 580, 594, 594, - 243, 254, 580, 0, 291, 47, 0, 0, 0, 0, - 0, 0, 17, 580, 283, 13, 581, 69, 279, 282, - 286, 587, 234, 586, 587, 236, 287, 555, 94, 86, - 0, 81, 0, 0, 594, 0, 529, 525, 524, 523, - 526, 527, 498, 531, 543, 499, 547, 546, 542, 522, - 296, 491, 496, 594, 501, 594, 521, 384, 528, 530, - 533, 507, 0, 540, 507, 545, 507, 0, 505, 459, - 0, 0, 434, 440, 438, 429, 450, 461, 427, 436, - 0, 0, 7, 21, 22, 23, 24, 25, 45, 46, - 594, 0, 28, 30, 0, 31, 580, 0, 74, 85, - 43, 33, 41, 0, 237, 190, 29, 0, 273, 206, - 214, 219, 220, 221, 216, 218, 228, 229, 222, 223, - 199, 200, 226, 227, 582, 215, 217, 211, 212, 213, - 201, 202, 203, 204, 205, 567, 572, 568, 573, 398, - 253, 396, 0, 567, 569, 568, 570, 397, 594, 567, - 568, 253, 594, 594, 34, 237, 191, 40, 198, 55, - 58, 0, 0, 0, 105, 106, 109, 0, 0, 594, - 0, 580, 522, 0, 277, 594, 594, 410, 594, 331, - 571, 284, 0, 567, 568, 594, 333, 301, 332, 304, - 571, 284, 0, 567, 568, 0, 0, 0, 0, 260, - 0, 307, 559, 561, 560, 0, 0, 262, 256, 594, - 562, 557, 240, 239, 244, 245, 247, 290, 584, 19, - 0, 26, 197, 71, 16, 580, 585, 87, 79, 91, - 93, 0, 90, 92, 489, 535, 0, 582, 0, 490, - 0, 503, 550, 500, 0, 504, 0, 514, 536, 0, - 517, 544, 0, 519, 548, 452, 0, 441, 207, 208, - 375, 373, 0, 372, 371, 266, 0, 83, 77, 0, - 0, 0, 0, 0, 594, 0, 0, 0, 0, 395, - 61, 401, 0, 0, 394, 59, 390, 54, 0, 0, - 594, 314, 0, 0, 401, 317, 553, 522, 0, 0, - 322, 411, 412, 594, 413, 0, 594, 336, 0, 0, - 334, 0, 0, 401, 0, 0, 0, 0, 0, 401, - 0, 119, 448, 306, 0, 0, 259, 263, 251, 594, - 11, 280, 235, 89, 529, 347, 580, 340, 0, 377, - 0, 0, 297, 0, 497, 594, 549, 506, 534, 507, - 507, 507, 541, 507, 529, 507, 432, 370, 582, 582, - 493, 494, 594, 594, 355, 0, 538, 355, 355, 353, - 0, 0, 264, 75, 42, 238, 567, 568, 0, 567, - 568, 0, 0, 39, 195, 38, 196, 62, 0, 36, - 193, 37, 194, 60, 391, 392, 0, 0, 0, 0, - 485, 312, 580, 580, 0, 488, 522, 0, 0, 415, - 337, 0, 12, 417, 0, 298, 0, 299, 0, 0, - 309, 262, 594, 246, 348, 345, 532, 0, 383, 0, - 0, 0, 502, 0, 510, 0, 512, 0, 518, 0, - 515, 520, 0, 0, 0, 492, 0, 351, 352, 355, - 363, 537, 0, 366, 0, 368, 388, 265, 401, 231, - 230, 35, 192, 405, 403, 0, 0, 487, 486, 320, - 0, 0, 414, 0, 96, 103, 0, 416, 0, 302, - 305, 0, 407, 408, 406, 0, 0, 343, 381, 582, - 379, 382, 386, 385, 507, 507, 507, 507, 376, 374, - 285, 0, 495, 594, 0, 354, 361, 355, 355, 355, - 539, 355, 355, 56, 315, 0, 102, 0, 594, 0, - 594, 594, 0, 349, 346, 0, 341, 0, 378, 511, - 0, 508, 513, 516, 571, 284, 350, 0, 358, 0, - 360, 0, 367, 0, 364, 369, 323, 99, 101, 0, - 567, 568, 409, 335, 310, 0, 344, 0, 380, 507, - 355, 355, 355, 355, 97, 342, 509, 359, 0, 356, - 362, 365, 355, 357 + 0, 0, 0, 0, 586, 603, 585, 0, 588, 587, + 0, 412, 410, 306, 431, 0, 0, 401, 65, 304, + 325, 113, 114, 115, 472, 473, 496, 492, 323, 0, + 603, 0, 0, 0, 584, 583, 56, 0, 603, 297, + 338, 0, 337, 0, 0, 603, 0, 0, 0, 0, + 0, 0, 110, 0, 603, 0, 320, 0, 126, 0, + 0, 451, 453, 0, 0, 602, 567, 0, 273, 572, + 267, 0, 270, 261, 0, 269, 0, 262, 0, 589, + 0, 589, 603, 603, 255, 266, 589, 0, 303, 52, + 0, 0, 0, 0, 0, 0, 17, 589, 295, 13, + 590, 77, 291, 294, 298, 596, 246, 595, 596, 248, + 299, 564, 102, 94, 0, 89, 0, 0, 603, 0, + 531, 308, 392, 467, 0, 0, 442, 448, 446, 437, + 458, 469, 435, 444, 0, 0, 7, 21, 22, 23, + 24, 25, 37, 36, 50, 51, 498, 544, 0, 589, + 589, 0, 0, 499, 0, 512, 559, 509, 0, 513, + 497, 0, 523, 545, 0, 526, 553, 0, 528, 557, + 0, 0, 603, 0, 28, 30, 0, 31, 589, 0, + 82, 93, 48, 38, 46, 0, 249, 198, 29, 0, + 285, 214, 222, 227, 228, 229, 224, 226, 236, 237, + 230, 231, 207, 208, 234, 235, 35, 34, 591, 223, + 225, 219, 220, 221, 209, 210, 211, 212, 213, 576, + 581, 577, 582, 406, 265, 404, 0, 576, 578, 577, + 579, 405, 603, 576, 577, 265, 603, 603, 39, 249, + 199, 45, 206, 63, 66, 0, 0, 0, 113, 114, + 117, 0, 0, 603, 0, 589, 0, 289, 603, 603, + 418, 603, 339, 580, 296, 0, 576, 577, 603, 341, + 313, 340, 316, 107, 109, 0, 106, 108, 0, 0, + 0, 0, 272, 0, 319, 568, 570, 569, 0, 0, + 274, 268, 603, 571, 566, 252, 251, 256, 257, 259, + 302, 593, 19, 0, 26, 205, 79, 16, 589, 594, + 95, 87, 99, 101, 0, 98, 100, 591, 0, 460, + 0, 449, 215, 216, 538, 355, 589, 348, 495, 494, + 240, 330, 0, 506, 603, 558, 515, 543, 516, 516, + 516, 550, 516, 538, 516, 242, 331, 383, 381, 0, + 380, 379, 278, 0, 91, 85, 0, 0, 0, 0, + 0, 603, 0, 0, 0, 0, 403, 69, 409, 0, + 0, 402, 67, 398, 62, 0, 0, 603, 326, 0, + 0, 409, 329, 562, 57, 419, 420, 603, 421, 0, + 603, 344, 0, 0, 342, 0, 0, 409, 0, 0, + 0, 0, 0, 105, 0, 127, 456, 318, 0, 0, + 271, 275, 263, 603, 11, 292, 247, 97, 0, 385, + 0, 0, 309, 440, 356, 353, 541, 0, 0, 511, + 0, 519, 0, 521, 0, 527, 0, 524, 529, 0, + 378, 591, 591, 502, 503, 603, 603, 363, 0, 547, + 363, 363, 361, 0, 0, 276, 83, 47, 250, 576, + 577, 0, 576, 577, 0, 0, 44, 203, 43, 204, + 70, 0, 41, 201, 42, 202, 68, 399, 400, 0, + 0, 0, 0, 493, 324, 0, 0, 423, 345, 0, + 12, 425, 0, 310, 0, 311, 0, 0, 321, 274, + 603, 258, 391, 0, 0, 0, 0, 0, 351, 241, + 516, 516, 516, 516, 243, 0, 0, 0, 501, 0, + 359, 360, 363, 371, 546, 0, 374, 0, 376, 396, + 277, 409, 239, 238, 40, 200, 413, 411, 0, 0, + 0, 422, 0, 104, 111, 0, 424, 0, 314, 317, + 0, 415, 416, 414, 389, 591, 387, 390, 394, 393, + 357, 354, 0, 349, 520, 0, 517, 522, 525, 384, + 382, 297, 0, 504, 603, 0, 362, 369, 363, 363, + 363, 548, 363, 363, 64, 327, 110, 0, 603, 0, + 603, 603, 0, 0, 386, 0, 352, 0, 516, 580, + 296, 358, 0, 366, 0, 368, 0, 375, 0, 372, + 377, 107, 109, 0, 576, 577, 417, 343, 322, 388, + 350, 518, 363, 363, 363, 363, 105, 367, 0, 364, + 370, 373, 363, 365 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -829, -829, -829, 510, -829, 32, -829, -214, 182, -829, - 28, -829, -155, -302, 867, 1, -16, -829, -536, -829, - 131, 971, -170, 4, -69, -266, -431, -15, 1295, -48, - 981, 19, 5, -829, -829, 24, -829, 653, -829, 413, - 75, -58, -352, 54, 13, -829, -390, -235, -11, 39, - -303, 89, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, - -829, -829, 8, -206, -382, 7, -568, -829, -829, -829, - 272, 538, -829, -512, -829, -829, -78, -829, 2, -829, - -829, 255, -829, -829, -829, -65, -829, -829, -430, -829, - 14, -829, -829, -829, -829, -829, 154, 58, -196, -829, - -829, -829, -829, -377, -257, -829, 787, -829, -829, -829, - -6, -829, -829, -829, 1461, 1552, 1026, 1065, -829, -829, - 173, 314, 343, 141, -829, -829, -829, 524, -306, 246, - -307, -801, -716, -519, -829, 474, -664, -627, -828, 142, - 346, -829, 236, -829, 517, -439, -829, -829, -829, 92, - 785, -411, 505, -339, -829, -829, -80, -829, 26, -22, - -152, -254, 788, -12, -33, -2 + -870, -870, -870, 342, -870, 37, -870, -62, 106, -870, + 41, -870, -870, -154, -352, 896, 85, 132, -870, 27, + 192, -870, -673, -870, -15, 16, -192, 29, -72, -212, + -436, -5, 1770, -82, 849, 13, 4, -870, -870, 24, + -870, 1132, -870, 307, 84, -224, -289, 131, 12, -870, + -406, -229, -181, 57, -341, 323, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, 8, -215, -463, -136, -624, -870, -870, -870, + 111, 164, -870, -575, -870, -870, -469, -870, -133, -870, + -870, 92, -870, -870, -870, -85, -870, -870, -454, -870, + -129, -870, -870, -870, -870, -870, 43, 83, -165, -870, + -870, -870, -870, -433, -201, -870, 641, -870, -870, -870, + 2, -870, -870, -870, 1740, 2183, 886, 1575, -870, -870, + 421, 66, 287, 320, -41, -870, -870, -870, 280, -27, + 239, -248, -816, -684, -524, -870, 228, -746, -548, -869, + -38, 326, -870, -506, -870, 273, -345, -870, -870, -870, + 51, 647, -442, 593, -296, -870, -870, -80, -870, 55, + -12, 274, -262, 425, -16, -34, -2 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 66, 67, 68, 278, 413, 414, 287, - 288, 466, 70, 561, 71, 207, 72, 73, 620, 750, - 74, 75, 289, 76, 77, 78, 491, 79, 208, 117, - 118, 234, 235, 236, 656, 598, 201, 81, 294, 565, - 599, 268, 456, 457, 269, 270, 259, 449, 484, 458, - 555, 82, 204, 292, 685, 293, 308, 698, 214, 777, - 215, 778, 655, 941, 623, 621, 859, 407, 409, 632, - 633, 866, 281, 417, 647, 769, 770, 221, 796, 945, - 965, 910, 818, 722, 723, 819, 798, 949, 950, 510, - 802, 346, 550, 84, 85, 395, 613, 612, 440, 944, - 636, 763, 868, 872, 86, 87, 88, 321, 322, 531, - 89, 90, 91, 532, 244, 245, 246, 435, 92, 93, - 94, 315, 95, 96, 210, 211, 99, 212, 403, 622, - 758, 511, 512, 821, 822, 513, 514, 515, 807, 707, - 759, 518, 519, 520, 696, 521, 522, 523, 826, 827, - 524, 525, 526, 527, 528, 701, 203, 408, 299, 459, - 443, 263, 123, 627, 601, 412, 406, 386, 463, 799, - 464, 482, 248, 249, 250, 291 + -1, 1, 2, 66, 67, 68, 284, 457, 458, 293, + 294, 510, 70, 71, 603, 72, 73, 74, 676, 212, + 75, 76, 664, 797, 77, 78, 295, 79, 80, 81, + 535, 82, 213, 122, 123, 240, 241, 242, 699, 642, + 206, 84, 300, 607, 643, 274, 500, 501, 275, 276, + 265, 493, 528, 502, 597, 85, 209, 298, 728, 299, + 314, 738, 220, 821, 221, 822, 698, 970, 667, 665, + 902, 452, 287, 461, 690, 813, 814, 227, 746, 926, + 996, 943, 861, 769, 770, 862, 838, 975, 976, 541, + 842, 389, 592, 87, 88, 439, 657, 656, 484, 973, + 679, 807, 906, 910, 89, 90, 91, 327, 328, 545, + 92, 93, 94, 546, 250, 251, 252, 479, 95, 96, + 97, 321, 98, 99, 216, 217, 102, 218, 448, 666, + 446, 367, 368, 369, 864, 865, 370, 371, 372, 756, + 582, 374, 375, 376, 377, 568, 378, 379, 380, 869, + 870, 381, 382, 383, 384, 385, 575, 208, 453, 305, + 503, 487, 269, 128, 671, 645, 456, 451, 430, 507, + 839, 508, 526, 254, 255, 256, 297 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -2403,456 +2434,488 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 102, 517, 516, 383, 385, 275, 658, 425, 237, 351, - 83, 213, 83, 120, 120, 276, 243, 209, 209, 271, - 389, 220, 237, 209, 209, 209, 199, 453, 209, 602, - 69, 200, 69, 277, 337, 273, 103, 490, 200, 304, - 600, 247, 485, 671, 608, 649, 487, 611, 333, 566, - 297, 301, 200, 628, 290, 260, 260, 825, 83, 260, - 668, 688, 305, 533, 668, 662, 399, 629, 766, 642, - 258, 264, 209, 671, 265, 314, 705, 776, 652, 885, - 200, 600, 812, 608, 970, 387, 305, 694, 951, 614, - 617, 295, 629, 336, 119, 119, 267, 272, -564, 416, - 748, 749, 119, 274, -99, 271, 800, 242, 262, 262, - 384, -472, 262, -101, 394, 473, 324, 326, 328, 330, - -96, 209, -475, 83, 380, 535, 728, 841, 535, 422, - 535, 629, 535, -474, 535, -103, -476, 477, -102, -104, - 431, 479, 691, 119, 296, 300, -98, 256, 256, 695, - 397, 256, -471, 646, 398, 794, 629, 497, 498, 499, - 500, -466, 987, 387, 3, -100, 382, 119, 242, 970, - 261, 261, 279, 501, 261, -466, 393, 424, -475, 556, - -96, -97, 267, 272, 283, 533, 951, 808, 801, -474, - -477, 842, -476, 630, 345, 388, 238, 560, 393, 239, - 240, 470, 697, 516, 847, -103, 261, 261, -564, 853, - -466, 765, 83, 439, -564, 426, 427, -466, -401, -91, - 348, -567, 209, 209, 453, 495, 490, 241, -93, 242, - -568, 986, 286, 720, 489, -88, 560, 560, 858, 238, - 471, 390, 239, 240, 884, 825, -477, 353, 825, 450, - -95, 454, 314, -94, 476, -69, 391, 200, 451, -479, - 451, -90, 483, 483, 460, 671, 812, 483, -102, 436, - 241, 392, 242, 388, 209, 717, -83, 721, 209, 266, - -92, -401, 209, 209, 481, 668, 668, 83, 786, 290, - 347, 490, 83, 83, -471, -401, -89, 286, 833, -103, - 83, 266, 506, 672, 376, 377, 378, -478, -480, 260, - 677, 305, 472, 475, 942, -479, -466, 352, -470, 274, - 478, 683, -96, 402, 461, 415, 516, 507, -401, 410, - -401, 552, 762, 825, 535, 558, 562, -401, 423, 543, - 544, 545, 546, -88, 419, 83, 209, 209, 209, 209, - 83, 209, 209, 290, 432, 209, 626, 83, 305, 774, - 567, 428, 262, -478, -480, 69, 892, 775, 808, 542, - 547, 530, -466, -98, -470, 562, 562, 437, 808, 460, - 239, 240, 838, 907, 908, 411, 554, -98, -328, 209, - 808, 554, 119, 434, 600, -100, 608, 256, 880, 567, - 567, 256, -328, 460, 727, 717, 439, 606, 533, 753, - 606, 448, 637, 209, 42, 83, 209, 43, 442, 460, - 261, 687, 467, 489, 261, 83, 665, 353, 460, 209, - 606, 392, 792, 83, 788, 843, 276, -328, 209, 119, - 849, 851, -68, 83, -328, 474, 606, 675, 676, 876, - 863, 516, 943, 486, 785, 606, 451, 451, 607, -103, - 237, 468, 60, 490, 480, 102, 416, 286, 331, 332, - -98, 679, 671, -98, -98, 83, 488, -97, 660, 756, - -95, 607, 808, 674, 83, 343, 344, 735, 489, 471, - 200, 379, 460, 668, 606, 69, 808, 607, 305, 742, - 305, -98, 209, -98, 684, 380, 607, 101, 830, 101, - 492, 702, 256, 702, 101, 101, 540, -102, 541, 606, - 101, 101, 101, 743, 996, 101, 619, -98, 742, 717, - 848, 286, 559, 791, 856, 261, 256, 634, -94, 83, - 381, 635, 669, 726, 864, 607, 921, 382, 724, 639, - 744, -100, 256, 746, 788, 101, -98, 661, -97, 261, - 516, 256, 736, 238, 529, 305, 239, 240, 673, 101, - 607, 744, 276, 686, 678, 261, 560, -90, -565, 119, - 681, 119, 560, 404, 261, -83, 890, 560, 560, -582, - 448, 700, -582, -582, 241, -100, 242, 380, 794, 638, - 497, 498, 499, 500, 261, 703, 271, 645, 261, 271, - 724, 724, 704, 740, 730, 420, 501, 657, 101, 706, - 101, 745, 242, 752, 747, 256, 1009, 271, -274, 380, - 209, 83, 405, 764, 767, 261, 767, 709, 261, 382, - 629, -470, -274, 767, 886, 926, 119, 711, 261, 784, - 237, 712, 760, 483, 743, -470, 780, 200, 454, 714, - 489, 781, 936, 209, 421, 400, 401, 451, 938, 257, - 257, 382, 729, 257, 554, 739, 316, -274, 317, 318, - 200, 854, -100, 267, -274, 276, 267, 985, -565, 741, - -470, 731, -100, 560, -565, -100, -100, -470, 429, 754, - 280, 282, 739, -92, 267, 257, 298, 768, 765, 101, - 927, 928, 380, 716, 755, 562, 975, 334, 335, 101, - 101, 562, 845, -100, 765, -100, 562, 562, 319, 320, - 83, 948, 460, 497, 498, 499, 500, 305, 83, 567, - 902, 903, 209, 353, 773, 567, 209, 430, 724, 501, - 567, 567, 779, 782, 382, 783, 83, 83, 834, 606, - 790, 869, -571, 848, 873, 793, 83, 789, 242, 874, - 710, 101, 713, 83, 816, 101, 209, 861, 883, 101, - 101, 867, 343, 344, 101, 83, 83, 451, 871, 101, - 101, -97, 238, 83, 875, 239, 240, 101, 374, 375, - 376, 377, 378, 702, 616, 618, 276, 276, 83, 83, - 607, 534, -89, 317, 318, 877, 887, 888, 119, 803, - 702, 702, 889, 694, 893, -571, 895, 897, 905, 261, - 261, 899, 562, 911, 906, 909, 616, 618, 912, -571, - 502, 914, 101, 101, 101, 101, 101, 101, 101, 101, - 916, 918, 101, 979, 101, 923, 567, 101, 238, 924, - 929, 239, 240, 319, 320, 256, 83, 83, 505, 506, - 939, 940, -571, 946, -571, 933, 206, 206, -567, 83, - 767, -571, 206, 952, 682, 469, 101, 493, 261, 241, - 953, 242, 960, 958, 507, 959, 101, 101, 973, 380, - 329, 380, -284, 317, 318, 444, 445, 446, 334, 119, - 101, 974, 101, 101, 119, -473, -284, 976, 990, 257, - 997, 539, 101, 257, 317, 318, 101, 988, 1006, -473, - 101, 857, 999, 1001, 421, 101, 494, 276, 83, 1003, - 101, 382, 810, 382, 83, 813, 83, 870, -273, 83, - 1014, -284, 1015, 319, 320, -568, 119, 828, -284, 878, - 879, 702, -273, 1017, -473, 238, -567, 882, 239, 240, - -568, -473, 101, 1024, 319, 320, 460, 680, 637, 767, - 396, 101, 1028, 891, 218, -567, 209, 124, 1013, 1018, - 323, 317, 318, 817, 1012, 418, 241, -273, 242, 101, - 553, 418, 855, 606, -273, 564, 569, 570, 571, 572, - 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, - 593, 594, 438, 202, 257, 820, 101, 261, 441, 930, - 925, 319, 320, 804, 615, 615, 452, 962, -567, -568, - -285, 967, 809, 937, 607, 894, 896, 898, 257, 900, - 0, 901, -567, 0, -285, 733, 0, 100, 0, 100, - 122, 122, 615, 0, 257, 0, 615, 615, 223, 380, - 0, 206, 206, 257, 961, 0, 0, 325, 317, 318, - 0, 0, 659, 0, 0, -567, 663, -567, 380, -285, - 664, -567, 0, 667, -567, 670, -285, 298, 0, 256, - 0, 0, -568, 0, 734, 100, 0, 977, 980, 307, - 981, 382, 0, 982, 615, 441, -568, 101, 101, 955, - 0, 380, 261, 405, 667, 0, 0, 298, 319, 320, - 382, 462, 465, 307, 0, 968, 0, 257, 971, 0, - 844, 846, 0, 0, 0, 850, 852, 0, 0, -568, - 101, -568, 0, 0, 699, -568, 978, 0, -568, 0, - 797, 0, 0, 382, 794, 708, 497, 498, 499, 500, - 100, 0, 0, 811, 844, 846, 815, 850, 852, 327, - 317, 318, 501, 718, 719, 824, 0, 0, 0, 0, - 989, 991, 992, 993, 725, 206, 206, 206, 206, 0, - 548, 549, 0, 0, 648, 648, 503, 806, 0, 0, - 820, 806, 795, 820, 805, 0, 820, 101, 820, 529, - 317, 318, 0, 1021, 0, 101, 101, 0, 829, 101, - 319, 320, 101, 101, 0, 823, 0, 101, 101, 536, - 317, 318, 0, 101, 101, 0, 0, 0, 537, 317, - 318, 922, 0, 101, 441, 1026, 0, 0, 0, 100, - 101, 441, 0, 101, 0, 631, 0, 0, 820, 0, - 319, 320, 101, 101, 0, 0, 0, 0, 761, 922, - 101, 338, 339, 340, 341, 342, 0, 80, 0, 80, - 319, 320, 0, 0, 0, 101, 101, 0, 219, 319, - 320, 820, 0, 820, 0, 820, 0, 820, 0, 787, - 538, 317, 318, 0, 0, 0, 0, 0, 667, 298, - 0, 0, 0, 496, 0, 497, 498, 499, 500, 0, - 0, 0, 820, 0, 100, 80, 715, 317, 318, 100, - 100, 501, 0, 101, 502, 0, 0, 100, 0, 0, - 0, 0, 0, 101, 101, 913, 915, 954, 307, 956, - 0, 319, 320, 957, 0, 503, 101, 0, 0, 832, - 0, 504, 505, 506, 615, 835, 969, 257, 972, 0, - 615, 615, 0, 0, 0, 615, 615, 319, 320, 0, - 0, 0, 100, 0, 0, 0, 0, 100, 507, 751, - 80, 508, 0, 0, 100, 307, 0, 568, 0, 983, - 984, 0, 964, 806, 615, 615, 829, 615, 615, 829, - 963, 829, 0, 823, 0, 101, 823, 881, 823, 0, - 0, 101, 0, 101, 0, 0, 101, 966, 418, 0, - 0, 0, 0, 0, 0, 0, 568, 568, 0, 1016, - 0, 0, 0, 97, 1019, 97, 121, 121, 121, 0, - 0, 1020, 100, 1022, 222, 0, 0, 1023, 0, 0, - 0, 829, 100, 101, 917, 0, 0, 0, 823, 206, - 100, 1025, 0, 0, 919, 920, 0, 0, 0, 80, - 100, 615, 1032, 0, 0, 998, 1000, 1002, 0, 1004, - 1005, 97, 0, 0, 829, 306, 829, 0, 829, 0, - 829, 823, 206, 823, 0, 823, 0, 823, 0, 615, - 0, 0, 100, 0, 353, 0, 298, 0, 0, 306, - 860, 100, 0, 0, 0, 829, 0, 865, 0, 366, - 367, 353, 823, 0, 98, 307, 98, 307, 1027, 1029, - 1030, 1031, 353, 0, 0, 0, 366, 367, 648, 0, - 1033, 0, 0, 0, 80, 0, 97, 366, 367, 80, - 80, 794, 0, 497, 498, 499, 500, 80, 373, 374, - 375, 376, 377, 378, -281, 0, 100, -281, -281, 501, - 0, 0, 98, 371, 372, 373, 374, 375, 376, 377, - 378, 0, 0, 0, 0, 0, 0, 374, 375, 376, - 377, 378, 307, 503, -281, -281, 0, -281, 0, 947, - 238, 257, 80, 239, 240, 206, 794, 80, 497, 498, - 499, 500, 0, 0, 80, 0, 0, 563, 496, 0, - 497, 498, 499, 500, 501, 0, 418, 448, 0, 0, - 0, 241, 418, 242, 0, 97, 501, 98, 0, 502, - 0, 0, 0, 0, 0, 0, 0, 0, 503, 0, - 0, 0, 0, 0, 0, 0, 563, 563, 100, 0, - 503, 0, 0, 0, 0, 0, 504, 505, 506, 0, - 0, 496, 80, 497, 498, 499, 500, 0, 0, 0, - 0, 0, 80, 0, 0, 0, 0, 0, 0, 501, - 80, 0, 502, 507, 0, 0, 508, 0, 0, 0, - 80, 0, 0, 0, 0, 0, 0, 0, 0, 509, - 97, 0, 0, 503, 0, 97, 97, 0, 0, 504, - 505, 506, 0, 97, 0, 0, 98, 0, 0, 0, - 0, 0, 80, 0, 306, 0, 0, 0, 0, 0, - 496, 80, 497, 498, 499, 500, 507, 0, 0, 508, - 0, 0, 0, 0, 0, 0, 0, 100, 501, 0, - 0, 502, 757, 0, 307, 100, 568, 0, 97, 0, - 0, 0, 568, 97, 0, 0, 0, 568, 568, 0, - 97, 306, 503, 100, 100, 0, 0, 0, 504, 505, - 506, 0, 0, 100, 0, 0, 80, 0, 0, 0, - 100, 98, 0, 0, 0, 0, 98, 98, 0, 0, - 0, 0, 100, 100, 98, 507, 0, 0, 508, 0, - 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 100, 100, 0, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 496, 97, 497, - 498, 499, 500, 0, 0, 122, 97, 0, 0, 98, - 122, 0, 0, 0, 98, 501, 97, 0, 502, 0, - 0, 98, 0, 0, 98, 0, 0, 0, 0, 0, - 862, 0, 0, 568, 0, 0, 0, 0, 80, 503, - 0, 0, 0, 100, 100, 504, 505, 506, 97, 0, - 0, 0, 935, 0, 0, 0, 100, 97, 0, 0, - 0, 0, 0, 98, 98, 0, 0, 0, 0, 0, - 0, 306, 507, 306, 0, 508, 0, 0, 814, 98, - 497, 498, 499, 500, 0, 0, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 501, 98, 0, 502, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, - 0, 0, 97, 0, 0, 100, 0, 0, 0, 0, - 503, 100, 0, 100, 0, 0, 100, 505, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 80, 306, 98, - 0, 0, 0, 0, 0, 80, 563, 0, 98, 0, - 0, 0, 563, 507, 0, 0, 0, 563, 563, 0, - 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, - 80, -594, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 80, -594, -594, -594, -594, -594, -594, - 80, -594, 0, 98, 97, 0, 0, -594, -594, 0, - 0, 0, 0, 0, 0, 80, 80, 0, -594, -594, - 0, -594, -594, -594, -594, -594, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 262, 262, 433, 469, 262, 427, 429, 692, 394, + 86, 282, 86, 125, 125, 281, 243, 215, 215, 277, + 204, 226, 868, 215, 215, 215, 701, 579, 215, 224, + 243, 205, 283, 343, 279, 443, 761, 219, 205, 497, + 529, 106, 249, 69, 531, 69, 373, 373, 431, 310, + 303, 307, 205, 705, 608, 810, 714, 757, 86, 267, + 267, 845, 311, 267, 820, 431, 542, 268, 268, 320, + 253, 268, 215, 266, 266, 759, 1001, 266, 762, 296, + 205, 795, 796, 658, 661, 494, 714, 498, 711, 311, + 120, 120, 711, 373, 373, 267, 267, 534, 120, 517, + 731, 350, 351, 302, 306, 273, 278, 977, 277, 301, + 840, 566, 350, 351, 890, 689, 438, 570, 884, 896, + 525, -480, 342, 3, 215, 547, 86, 644, 767, -479, + 809, 652, 483, 434, 655, 466, 646, 121, 121, 120, + 387, 330, 332, 334, 336, 121, 475, 264, 270, -112, + 289, 271, 349, 1001, 1013, 673, 292, -104, 432, -483, + 248, 672, 549, 775, 272, 549, 120, 549, 644, 549, + 652, 549, 768, 567, 391, 432, 685, 244, -96, 673, + 245, 246, 885, 337, 338, 695, 121, 387, 437, -296, + 752, 388, 841, -479, 273, 278, 868, 977, -482, 868, + 598, 244, -296, -296, 245, 246, 390, 514, 247, -77, + 248, 358, 437, 121, 285, -483, -296, 86, 673, 444, + 445, -104, 901, -484, 292, 812, 809, -485, 215, 215, + -91, 539, 247, 395, 248, -487, 272, 533, -296, 361, + 362, 602, -577, 673, 983, -296, 362, 470, 471, 734, + 396, -296, 320, -101, -482, -577, 339, 262, -296, 520, + -486, 262, 871, 205, 495, 363, 495, 527, 527, 280, + 504, 363, 527, 248, 497, 830, 868, 714, -488, -484, + 215, 602, 602, -485, 215, 547, -336, 373, 215, 215, + -474, -487, 737, 86, -478, 435, 971, 280, 86, 86, + -336, -573, 761, 447, 480, 572, 86, 420, 421, 422, + 454, 459, 711, 711, 441, 267, -486, 311, 442, 267, + 296, 718, 719, 757, 534, 591, 463, 268, 124, 124, + 757, 516, 436, 266, -488, -336, 124, 806, 373, 522, + 876, 468, -336, 467, 931, 741, -474, 472, 519, 428, + -478, 86, 215, 215, 215, 215, 86, 226, 215, 215, + -111, 918, 476, 424, -474, 562, 455, 670, 576, -111, + 576, 557, 558, 559, 560, 86, 478, 124, -474, 549, + 556, -103, 42, 483, 69, 43, 515, 534, 600, 561, + 674, 512, 935, 936, 120, 86, 515, 292, 215, 492, + 86, 311, 544, 609, 124, 426, 486, 505, 511, 849, + 262, -573, 436, -474, -110, 773, 396, -573, 757, 226, + -474, 296, 518, 504, -110, 789, 530, 626, 791, -76, + 60, 793, 886, 215, 120, 262, 999, 892, 894, 1002, + -111, 121, 818, 609, 609, -102, 532, 596, 504, 791, + 262, 650, 596, -106, 650, 524, 680, 790, 215, 262, + 86, 215, 730, 504, 533, 536, 972, 836, 267, 86, + -106, 554, 504, 215, -98, 650, 282, 86, 120, 714, + 708, 121, 215, 832, 644, -108, 652, 86, 829, 555, + 650, 757, 881, 267, 366, 386, 120, 571, 292, 650, + 495, 495, 757, 577, 741, 891, -100, 547, 267, 105, + 574, 651, 243, 373, 722, 711, 1043, 267, 586, 86, + 940, 941, 828, 262, 578, 121, 581, 533, 86, 782, + 819, 498, 914, -105, 205, 651, 504, 267, 650, 954, + 703, 267, 311, 121, 311, 712, 215, 584, 587, 590, + 651, 789, 69, 86, -97, 589, 717, 663, -108, 651, + -105, 727, 460, 650, 534, 790, 891, 681, 267, 521, + 677, 267, 601, 523, 678, 688, 729, 423, 682, -106, + 543, 267, 594, 396, 704, 700, 716, 604, 721, -91, + 771, 424, 724, -108, -105, 104, 481, 104, 651, 245, + 246, 751, 104, 104, 832, 800, 766, 311, 104, 104, + 104, 244, 282, 104, 245, 246, 783, 460, 776, 120, + 585, 120, 588, 651, 602, 777, 425, 604, 604, 741, + 602, -481, 124, 426, 778, 602, 602, 462, 418, 419, + 420, 421, 422, 104, 462, -481, 788, 801, 802, 1021, + 277, 740, 921, 277, 771, 771, 787, 104, 809, 244, + 817, 823, 245, 246, 792, 826, 121, 794, 121, 827, + 834, 277, 124, 837, 215, 86, 808, 811, 248, 811, + -481, 485, -96, 847, 120, 843, 811, -481, 566, 804, + 247, 965, 248, 799, 850, 527, 852, 967, 854, 856, + 205, 243, 904, 825, 533, 905, 215, 873, 897, 104, + 495, 104, 909, 673, 244, 449, 124, 245, 246, 1033, + 913, 282, 915, 205, 923, 824, 922, 927, 786, 424, + 939, 121, -285, 899, 124, 596, 273, 602, 942, 273, + 945, 492, 660, 662, 947, 247, -285, 248, -409, 949, + 951, 464, 576, 956, 957, 786, 335, 273, -409, 323, + 324, 267, 267, 968, 450, 424, 262, 969, 485, 833, + 978, 426, 979, 715, 660, 662, 985, 86, 924, 504, + 720, -285, 989, -103, 311, 86, 609, 990, -285, 215, + 991, 726, 609, 215, 1004, 771, 747, 609, 609, 580, + 465, 1005, 104, 86, 86, 907, 650, 426, 911, 325, + 326, -409, 760, 104, 104, 764, 1006, 86, 877, 1015, + 215, -409, 725, -591, 267, -409, -591, -591, 1017, 86, + 86, 495, 1022, 1024, 1026, -409, 1028, 86, 1046, 912, + 959, 1038, -576, 748, 749, 282, 282, 755, 86, 86, + -577, 755, 1048, 723, 754, 129, 248, 124, -409, 124, + -409, 120, -97, 576, 576, 104, 651, -409, -409, 104, + -409, 938, 774, 104, 104, 1037, 944, -409, 104, 860, + 1039, 1036, 1009, 104, 104, 744, 898, 353, 354, 355, + 356, 104, 482, 207, 753, 691, 691, 553, 993, 609, + 323, 324, 900, 357, 998, 211, 211, 758, 121, 86, + 86, 211, -286, 962, 496, 908, -297, 86, 811, 0, + 0, 0, 124, 0, 0, 0, -286, 916, 917, 0, + -297, 0, 0, 0, 0, 920, 104, 104, 104, 104, + 104, 104, 0, 104, 104, 485, 0, 925, 120, 803, + 325, 326, 485, 120, 0, 473, 0, 0, 0, 282, + 104, -286, 0, 1014, 267, -297, 0, -102, -286, 424, + 604, 0, -297, 86, 844, 86, 604, 888, 86, 0, + 104, 604, 604, 104, 0, 104, 0, 0, 104, 0, + 120, 513, 576, 262, 0, 121, 867, 851, 853, 855, + 121, 857, 835, 858, 474, 424, 504, 958, 680, 811, + 0, 426, 440, 0, 0, 966, 215, 0, 104, -293, + 846, 0, -293, -293, -574, 537, 0, 0, 104, 104, + 0, 0, 0, 650, 946, 948, 0, 121, 0, 424, + 465, 872, 0, 104, 0, 104, 104, 426, 866, -293, + -293, 267, -293, 396, 104, 863, 0, 0, 104, -106, + 0, 744, 104, 353, 354, 355, 356, 104, 409, 410, + 0, 1010, 104, 1011, 538, 0, 1012, 0, 930, 357, + 932, 426, 0, 604, 933, 0, 0, -478, -481, 0, + 798, 887, 889, 651, 0, 0, 893, 895, 0, 124, + 0, -478, -481, -108, 104, 0, 997, 417, 418, 419, + 420, 421, 422, 104, 0, 0, 211, 211, 0, 0, + 0, 0, 887, 889, 0, 893, 895, 0, 462, 0, + 322, 104, 323, 324, -574, 0, -478, -481, 104, -285, + -574, 214, 214, -478, -481, 0, 0, 214, 263, 263, + 982, 0, 263, -285, 980, 981, -106, 0, 0, -106, + -106, 0, 1023, 1025, 1027, 0, 1029, 1030, 0, 984, + 986, 987, 988, 1000, -580, 1003, 506, 509, 0, 286, + 288, 0, 325, 326, 263, 304, 124, -106, -285, -106, + 0, 124, 0, 0, 0, -285, 340, 341, 955, 0, + -108, 0, 0, -108, -108, 0, 1047, 1049, 1050, 1051, + 1016, 0, 755, 1018, 0, 872, 1053, -580, 872, 994, + 872, 955, 866, 0, 903, 866, 863, 866, 124, 863, + 0, -108, 863, -108, 863, -576, 0, -580, 0, 0, + 211, 211, 211, 211, 0, 1040, 564, 565, 214, 691, + 1042, -580, 1044, -576, 0, 0, 1045, 1041, -297, 104, + 104, 744, 0, 353, 354, 355, 356, 0, 872, 780, + 0, 0, -297, 0, 0, 866, 1052, 0, 0, 357, + -580, 0, 863, 424, -580, 0, -580, -577, -99, 0, + -576, 104, 0, -580, -580, 872, 0, 872, -576, 872, + 0, 872, 866, 359, 866, 0, 866, -297, 866, 863, + 992, 863, -576, 863, -297, 863, -576, 0, 781, 0, + 0, 872, 0, 0, 424, 426, 0, -580, 866, -580, + -576, 462, -577, -576, 0, 863, -580, 462, 974, 0, + 353, 354, 355, 356, 0, -576, 0, -576, 0, 675, + -577, -576, 214, 214, -576, 0, 357, 0, 0, 450, + 0, 1007, 104, -576, -577, -576, 426, -98, 0, -576, + 104, 104, -576, 0, 104, 424, 0, 104, 104, 329, + 323, 324, 104, 104, 548, 0, 323, 324, 104, 104, + 488, 489, 490, 340, 0, -577, 0, -577, 0, -577, + 0, -100, 104, -577, 263, 104, -577, 0, 263, -577, + 1008, 0, 214, 214, 104, 104, 0, 426, 0, 0, + 0, 0, 104, 331, 323, 324, 0, 0, 0, 0, + 325, 326, 0, 104, 104, 0, 325, 326, 0, 333, + 323, 324, -577, 0, -577, 543, 323, 324, -577, 396, + 0, -577, 0, 0, 244, 0, 0, 245, 246, 0, + 0, 550, 323, 324, 409, 410, 0, 0, 763, 0, + 353, 354, 355, 356, 325, 326, 214, 214, 214, 214, + 0, 492, 214, 214, 104, 247, 357, 248, 0, 358, + 325, 326, 0, 0, 104, 104, 325, 326, 0, 0, + 573, 0, 104, 0, 418, 419, 420, 421, 422, 0, + 359, 583, 325, 326, 551, 323, 324, 361, 362, 0, + 0, 0, 595, 552, 323, 324, 0, 606, 611, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 363, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 396, 0, 263, 104, 0, + 104, 0, 211, 104, 0, 325, 326, 659, 659, 0, + 409, 410, 0, 0, 325, 326, 0, 103, 0, 103, + 127, 127, 263, 0, 0, 214, 0, 244, 229, 0, + 245, 246, 0, 0, 211, 659, 0, 263, 0, 659, + 659, 104, 739, 323, 324, 0, 263, 415, 416, 417, + 418, 419, 420, 421, 422, 702, 0, 0, 247, 706, + 248, 0, 0, 707, -603, 103, 710, 0, 713, 313, + 304, 352, 0, 353, 354, 355, 356, -603, -603, -603, + -603, -603, -603, 0, -603, 0, 0, 659, 0, 357, + -603, -603, 358, 325, 326, 0, 313, 710, 0, 0, + 304, -603, -603, 0, -603, -603, -603, -603, -603, 0, + 263, 0, 0, 359, 344, 345, 346, 347, 348, 360, + 361, 362, 0, 0, 0, 0, 742, 743, 0, 0, + 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 750, 0, 0, 363, 0, 211, 364, + 0, 0, 0, -603, 352, 0, 353, 354, 355, 356, + 995, 0, 765, 0, 0, 772, 0, -603, 0, 0, + 0, 0, 357, 0, 0, 358, 0, -603, 0, 0, + -603, -603, 100, 0, 100, 126, 126, 126, 0, 0, + 0, 0, 0, 228, 0, 0, 359, 0, 0, 0, + -603, -603, 360, 361, 362, 0, 272, -603, -603, -603, + -603, 0, 83, 0, 83, 744, 0, 353, 354, 355, + 356, 0, 0, 225, 103, 0, 0, 0, 0, 363, + 100, 0, 364, 357, 312, 0, 0, 744, 214, 353, + 354, 355, 356, 0, 0, 365, 0, 0, 0, 0, + 805, 0, 0, 0, 0, 357, 0, 359, 0, 0, + 83, 312, 352, 745, 353, 354, 355, 356, 0, 0, + 214, 0, 0, 0, 0, 0, 0, 0, 0, 359, + 357, 831, 0, 358, 0, 928, 0, 0, 0, 0, + 710, 304, 0, 0, 0, 639, 640, 0, 100, 641, + 103, 0, 0, 0, 359, 103, 103, 0, 0, 0, + 360, 361, 362, 103, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 0, 313, 182, 183, 0, 83, 184, + 185, 186, 187, 0, 0, 0, 0, 363, 0, 0, + 364, 0, 0, 188, 189, 875, 0, 0, 0, 0, + 659, 878, 0, 263, 0, 0, 659, 659, 103, 0, + 0, 659, 659, 103, 229, 0, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 0, 200, 201, 0, + 0, 0, 103, 0, 214, 202, 272, 659, 659, 100, + 659, 659, 0, 0, 352, 0, 353, 354, 355, 356, + 919, 0, 103, 0, 0, 0, 0, 103, 313, 0, + 610, 0, 357, 0, 0, 358, 0, 0, 0, 83, + 929, 0, 0, 0, 0, 0, 229, 0, 0, 0, + 0, 934, 0, 0, 0, 0, 359, 0, 0, 0, + 0, 0, 360, 361, 362, 0, 950, 0, 0, 0, + 610, 610, 0, 0, 0, 0, 952, 953, 0, 0, + 0, 0, 0, 659, 0, 100, 0, 103, 0, 363, + 100, 100, 364, 0, 0, 0, 103, 0, 100, 0, + 0, 0, 0, 0, 103, 540, 659, 0, 0, 312, + 0, 0, 0, 304, 103, 83, 0, 0, 0, 0, + 83, 83, 0, 0, 0, 0, 0, 0, 83, 0, + 0, 0, 0, 0, 0, 352, 0, 353, 354, 355, + 356, 0, 0, 100, 0, 0, 103, 0, 100, 228, + 0, 0, 0, 357, 0, 103, 358, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 100, 569, 313, + 0, 313, 0, 83, 0, 0, 0, 359, 83, 563, + 103, 0, 0, 360, 361, 362, 0, 100, 0, 0, + 0, 0, 100, 312, 0, 0, 0, 83, 0, 0, + 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 363, 228, 0, 364, 0, 0, 0, 83, 0, 0, + 0, 0, 83, 0, 0, 605, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, + 0, 627, 0, 0, 0, 101, 0, 101, 0, 0, + 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, + 0, 100, 0, 0, 0, 605, 605, 0, 0, 100, + 0, 396, 397, 398, 399, 400, 401, 402, 403, 100, + 405, 406, 83, 0, 0, 0, 409, 410, 0, 0, + 0, 83, 0, 101, 0, 0, 0, 0, 0, 83, + 0, 0, 103, 0, 0, 0, 0, 0, 0, 83, + 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, + 100, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 0, 0, 0, 312, 0, 312, 0, 0, 0, + 0, 83, 0, 0, 0, 100, 0, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, + 0, 0, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, -604, -604, 0, 0, 409, 410, 312, + 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, + 0, 313, 103, 610, 0, 0, 0, 0, 0, 610, + 0, 0, 0, 0, 610, 610, 0, 0, 0, 0, + 103, 103, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 0, 103, 0, 0, 0, 0, 0, + 0, 0, 101, 0, 0, 0, 103, 103, 0, 0, + 0, 0, 0, 0, 103, 0, 0, 100, 0, 0, + 0, 0, 0, 0, 0, 103, 103, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 127, 0, + 0, 0, 0, 127, 0, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 0, 0, + 409, 410, 0, 0, 0, 0, 610, 0, 101, 0, + 0, 0, 0, 101, 101, 0, 103, 103, 0, 0, + 964, 101, 0, 0, 103, 0, 0, 0, 0, 0, + 0, 0, 0, 412, 0, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 0, 0, 0, 0, 100, + 0, 0, 0, -272, 0, 0, 312, 100, 0, 0, + 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, + 0, 101, 0, 0, 0, 100, 100, 0, 0, 83, + 103, 0, 103, 0, 0, 103, 0, 83, 605, 100, + 101, 0, 0, 0, 605, 0, 0, 0, 0, 605, + 605, 100, 100, 0, 0, 83, 83, 0, 0, 100, + 101, 0, 0, 0, 0, 101, 0, 0, 101, 83, + 100, 100, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 83, 83, 0, 0, 0, 0, 0, 0, 83, + 0, 0, 0, 126, 0, 0, 0, 0, 126, 0, + 83, 83, 0, 0, 0, 0, 0, 0, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 563, 0, 0, 0, 0, 0, 0, - -594, 0, 0, 80, 80, 0, 0, 0, 0, 0, - 0, 0, 932, 0, -594, 0, 80, 0, 0, 0, - 0, 0, 0, 0, -594, 98, 0, -594, -594, 0, - 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, - 306, 97, 0, 0, 0, 0, 0, -594, -594, 0, - 0, 0, 0, 266, -594, -594, -594, -594, 0, 97, - 97, 0, 0, 0, 0, 0, 0, 0, 0, 97, - 0, 0, 0, 0, 0, 80, 97, 0, 0, 0, - 0, 80, 0, 80, 0, 0, 80, 0, 97, 97, - 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, + 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, + 0, 100, 100, 0, 101, 963, 0, 0, 0, 100, + 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 0, 605, 101, 0, 0, 0, 0, 0, 0, 0, + 0, 83, 83, 0, 0, 961, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 97, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 0, 121, 98, 98, 0, 0, 121, 0, 0, 98, - 0, 0, 0, 0, 98, 98, 0, 0, 0, 0, - 98, 98, 0, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 0, 98, 0, 97, - 97, 0, 0, 0, 0, 0, 0, 0, 934, 98, - 98, 0, 97, 0, 0, 0, 0, 98, 0, 0, - 0, 0, 0, 0, 0, 0, 732, 0, 0, 0, - 0, 0, 98, 98, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 0, 0, 366, - 367, 97, 0, 0, 0, 0, 0, 97, 0, 97, - 98, 0, 97, 353, -595, -595, -595, -595, 358, 359, - 98, 98, -595, -595, 0, 0, 0, 0, 366, 367, - 0, 0, 368, 98, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 0, 0, 0, 0, 0, 0, - 0, 0, -260, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 0, 100, 0, 100, 0, 0, + 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, + 0, 0, 0, 0, 0, 83, 0, 83, 0, 0, + 83, 0, 0, 0, 0, 0, 0, -603, 4, 0, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 0, 0, 0, 0, 0, 0, 15, 0, 16, 17, + 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, + 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, + 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, + 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 0, 0, 98, 0, - 98, -594, 4, 98, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, + 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, + 101, 56, 57, 58, 59, 60, 61, 0, 0, 62, + -603, 0, 0, -603, -603, 0, 0, 396, -604, -604, + -604, -604, 401, 402, 0, 0, -604, -604, 0, 63, + 64, 65, 409, 410, 0, 0, 0, 0, 0, 0, + 0, -603, 0, -603, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 0, 0, 0, + 0, 0, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 0, 0, 409, 410, 0, + 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 101, 101, 0, 0, 0, 0, 0, 101, 0, 0, + 0, 0, 101, 101, 0, 0, 0, 0, 101, 101, + 412, 0, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 101, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 101, 0, 0, 0, 0, + 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 101, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, - 54, 0, 0, 55, 0, 56, 57, 58, 59, 60, - 61, -466, 0, 62, -594, 0, 0, -594, -594, 0, - 0, 0, 0, 0, -466, -466, -466, -466, -466, -466, - 0, -466, 0, 63, 64, 65, 0, 0, -466, -466, - 0, 0, 0, 0, 0, -594, 0, -594, -466, -466, - 0, -466, -466, -466, -466, -466, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 442, 0, + 0, -474, -474, -474, -474, -474, -474, 0, -474, 0, + 0, 0, 0, 0, 0, -474, -474, 0, 0, 0, + 0, 0, 0, 0, 101, -474, -474, 0, -474, -474, + -474, -474, -474, 0, 101, 101, 0, 0, 0, 0, + 0, 0, 101, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -466, -466, -466, -466, -466, -466, -466, - -466, -466, -466, -466, -466, -466, 0, 0, -466, -466, - -466, 0, -466, -466, 0, 0, 0, 0, 0, -466, - 0, 0, 0, 0, -466, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -466, 0, 0, -466, -466, 0, - -466, -466, 0, -466, -466, -466, -466, -466, -466, -466, - -466, -466, -466, 0, 0, -594, 0, 0, -466, -466, - -466, -466, 0, 0, -466, -466, -466, -466, -594, -594, - -594, -594, -594, -594, 0, -594, 0, 0, 0, 0, - 0, 0, -594, -594, 0, 0, 0, 0, 0, 0, - 0, 0, -594, -594, 0, -594, -594, -594, -594, -594, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, 0, 0, -474, -474, -474, 0, -474, + -474, 0, 0, 0, 0, 0, -474, 0, 0, 0, + 0, -474, 0, 0, 0, 0, 0, 0, 101, 0, + 101, -474, 0, 101, -474, -474, 0, -474, -474, 0, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + 0, 0, -603, 0, 0, -474, -474, -474, -474, 0, + 0, -474, -474, -474, -474, -603, -603, -603, -603, -603, + -603, 0, -603, 0, 0, 0, 0, 0, 0, -603, + -603, 0, 0, 0, 0, 0, 0, 0, 0, -603, + -603, 0, -603, -603, -603, -603, -603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -594, -594, -594, - -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, - 0, 0, -594, -594, -594, 0, 0, -594, 0, 0, - 0, 0, 0, -594, 0, 0, 0, 0, -594, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -594, 0, - 0, -594, -594, 0, 0, -594, 0, -594, -594, -594, - -594, -594, -594, -594, -594, -594, -594, 0, 0, -571, - 0, 0, -594, -594, -594, -594, 0, 266, -594, -594, - -594, -594, -571, -571, -571, 0, -571, -571, 0, -571, - 0, 0, 0, 0, 0, -571, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -571, -571, 0, -571, - -571, -571, -571, -571, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, 0, 0, -603, + -603, -603, 0, 0, -603, 0, 0, 0, 0, 0, + -603, 0, 0, 0, 0, -603, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -603, 0, 0, -603, -603, + 0, 0, -603, 0, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, 0, 0, -580, 0, 0, -603, + -603, -603, -603, 0, 272, -603, -603, -603, -603, -580, + -580, -580, 0, -580, -580, 0, -580, 0, 0, 0, + 0, 0, -580, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -580, -580, 0, -580, -580, -580, -580, + -580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, 0, 0, -580, -580, -580, 0, 784, -580, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -580, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -580, + 0, 0, -580, -580, 0, -107, -580, 0, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, 0, 0, + -580, 0, -580, -580, -580, 0, -99, 0, 0, -580, + -580, -580, -580, -580, -580, -580, 0, -580, -580, 0, + -580, 0, 0, 0, 0, 0, -580, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -580, -580, 0, + -580, -580, -580, -580, -580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -571, -571, -571, -571, -571, -571, -571, -571, -571, - -571, -571, -571, -571, 0, 0, -571, -571, -571, 0, - 737, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -571, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -571, 0, 0, -571, -571, 0, -99, -571, - 0, -571, -571, -571, -571, -571, -571, -571, -571, -571, - -571, 0, 0, -571, 0, -571, -571, -571, 0, -91, - 0, 0, -571, -571, -571, -571, -571, -571, -571, 0, - -571, -571, 0, -571, 0, 0, 0, 0, 0, -571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -571, -571, 0, -571, -571, -571, -571, -571, 0, 0, + 0, 0, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, 0, 0, -580, -580, -580, + 0, 784, -580, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -580, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -580, 0, 0, -580, -580, 0, -107, + -580, 0, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, 0, 0, -296, 0, -580, -580, -580, 0, + -580, 0, 0, -580, -580, -580, -580, -296, -296, -296, + 0, -296, -296, 0, -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -296, -296, 0, -296, -296, -296, -296, -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -571, -571, -571, -571, -571, - -571, -571, -571, -571, -571, -571, -571, -571, 0, 0, - -571, -571, -571, 0, 737, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -571, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -571, 0, 0, -571, - -571, 0, -99, -571, 0, -571, -571, -571, -571, -571, - -571, -571, -571, -571, -571, 0, 0, -284, 0, -571, - -571, -571, 0, -571, 0, 0, -571, -571, -571, -571, - -284, -284, -284, 0, -284, -284, 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -284, -284, 0, -284, -284, -284, - -284, -284, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, 0, + 0, -296, -296, -296, 0, 785, -296, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -296, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -296, 0, 0, + -296, -296, 0, -109, -296, 0, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, 0, 0, -296, 0, + 0, -296, -296, 0, -101, 0, 0, -296, -296, -296, + -296, -296, -296, -296, 0, -296, -296, 0, -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, 0, 0, -284, -284, -284, 0, 738, 0, + 0, 0, 0, 0, 0, -296, -296, 0, -296, -296, + -296, -296, -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -284, 0, 0, -284, -284, 0, -101, -284, 0, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, 0, - 0, -284, 0, 0, -284, -284, 0, -93, 0, 0, - -284, -284, -284, -284, -284, -284, -284, 0, -284, -284, - 0, -284, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -284, -284, - 0, -284, -284, -284, -284, -284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, 0, 0, -296, -296, -296, 0, 785, + -296, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -296, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -296, 0, 0, -296, -296, 0, -109, -296, 0, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + 0, 0, 0, 0, 0, -296, -296, 0, -296, 0, + 0, -296, -296, -296, -296, 290, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, -603, -603, -603, + 0, 0, -603, 15, 0, 16, 17, 18, 19, 0, + 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, + 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, + 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, + 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, 0, 0, -284, -284, - -284, 0, 738, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -284, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -284, 0, 0, -284, -284, 0, - -101, -284, 0, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 0, 0, 0, 0, 0, -284, -284, - 0, -284, 0, 0, -284, -284, -284, -284, 284, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - -594, -594, -594, 0, 0, -594, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, - 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, + 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, + 58, 59, 60, 61, 0, 0, 62, -603, 0, 0, + -603, -603, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -603, 290, + -603, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, -603, 0, -603, -603, 15, 0, 16, + 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, - 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, - 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, - -594, 0, 0, -594, -594, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, - 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -594, 284, -594, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 0, 0, -594, 0, -594, -594, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 0, 50, 51, 0, 52, 53, 0, 54, 0, 0, + 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, + 62, -603, 0, 0, -603, -603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, - 54, 0, 0, 55, 0, 56, 57, 58, 59, 60, - 61, 0, 0, 62, -594, 0, 0, -594, -594, 0, + 63, 64, 65, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -603, 290, -603, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 0, 0, -603, 0, 0, + -603, 15, -603, 16, 17, 18, 19, 0, 0, 0, + 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, + 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 64, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -594, 284, -594, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, - -594, 0, 0, -594, 15, -594, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, + 0, 0, 49, 0, 0, 50, 51, 0, 52, 53, + 0, 54, 0, 0, 55, 0, 56, 57, 58, 59, + 60, 61, 0, 0, 62, -603, 0, 0, -603, -603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, - 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, - 57, 58, 59, 60, 61, 0, 0, 62, -594, 0, - 0, -594, -594, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -594, - 284, -594, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 0, 0, -594, 0, 0, -594, 15, 0, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, - 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 50, 51, 0, 52, 53, 0, 54, 0, - 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, - 0, 62, -594, 0, 0, -594, -594, 4, 0, 5, + 0, 0, 0, 0, 63, 64, 65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -603, 290, -603, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, - 0, 63, 64, 65, 0, 15, 0, 16, 17, 18, - 19, 0, 0, -594, 0, -594, 20, 21, 22, 23, + 0, -603, 0, 0, -603, 15, 0, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, - 56, 57, 58, 59, 60, 61, 0, 0, 62, -594, - 0, 0, -594, -594, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, - 65, 0, 0, -594, 0, 0, 0, 0, 0, 0, - -594, 284, -594, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 0, -594, -594, 0, 0, 0, 15, - 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, - 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, - 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, - 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 57, 58, 59, 60, 61, 0, 0, 62, -603, + 0, 0, -603, -603, 4, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 0, 0, 63, 64, + 65, 0, 15, 0, 16, 17, 18, 19, 0, 0, + -603, 0, -603, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 50, 51, 0, 52, 53, 0, 54, - 0, 0, 55, 0, 56, 57, 58, 59, 60, 61, - 0, 0, 62, -594, 0, 0, -594, -594, 284, 0, + 0, 0, 0, 49, 0, 0, 50, 51, 0, 52, + 53, 0, 54, 0, 0, 55, 0, 56, 57, 58, + 59, 60, 61, 0, 0, 62, -603, 0, 0, -603, + -603, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 0, 0, + -603, 0, 0, 0, 0, 0, 0, -603, 290, -603, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 0, 0, 63, 64, 65, 0, 15, 0, 16, 17, - 18, 19, 0, 0, -594, 0, -594, 20, 21, 22, + 0, -603, -603, 0, 0, 0, 15, 0, 16, 17, + 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, - 285, 51, 0, 52, 53, 0, 54, 0, 0, 55, + 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, - -594, 0, 0, -594, -594, 284, 0, 5, 6, 7, + -603, 0, 0, -603, -603, 290, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 63, 64, 65, 0, 15, 0, 16, 17, 18, 19, 0, - -594, -594, 0, -594, 20, 21, 22, 23, 24, 25, + 0, -603, 0, -603, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, + 0, 0, 0, 0, 49, 0, 0, 291, 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, - 58, 59, 60, 61, 0, 0, 62, -594, 0, 0, - -594, -594, 284, 0, 5, 6, 7, 8, 9, 10, + 58, 59, 60, 61, 0, 0, 62, -603, 0, 0, + -603, -603, 290, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 63, 64, 65, 0, - 15, 0, 16, 17, 18, 19, 0, -594, -594, 0, - -594, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 15, 0, 16, 17, 18, 19, 0, -603, -603, 0, + -603, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, @@ -2860,1138 +2923,1174 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, 58, 59, 60, - 61, 0, 0, 62, -594, 0, 0, -594, -594, 0, + 61, 0, 0, 62, -603, 0, 0, -603, -603, 290, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, 63, 64, 65, 0, 15, 0, 16, + 17, 18, 19, 0, -603, -603, 0, -603, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 63, 64, 65, 0, 0, -594, 0, - 0, 0, 0, 0, 0, -594, 284, -594, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, - -594, 0, 0, 0, 15, 0, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 0, 50, 51, 0, 52, 53, 0, 54, 0, 0, + 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, + 62, -603, 0, 0, -603, -603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, - 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, - 57, 58, 59, 60, 61, 0, 0, 62, -594, 0, - 0, -594, -594, 0, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 0, 0, 63, 64, 65, - 0, 15, 0, 16, 17, 18, 19, 0, 0, -594, - 0, -594, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, + 63, 64, 65, 0, 0, -603, 0, 0, 0, 0, + 0, 0, -603, 290, -603, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 0, 0, -603, 0, 0, + 0, 15, 0, 16, 17, 18, 19, 0, 0, 0, + 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, + 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, 58, 59, - 60, 61, 0, 0, 62, 238, 0, 0, 239, 240, + 60, 61, 0, 0, 62, -603, 0, 0, -603, -603, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 63, 64, 65, 0, 15, 0, - 16, 17, 18, 19, 0, 0, 241, 0, 242, 20, + 16, 17, 18, 19, 0, 0, -603, 0, -603, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, - 0, 62, 238, 0, 0, 239, 240, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 62, 244, 0, 0, 245, 246, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 63, 64, 65, 0, 15, 0, 16, 17, 18, - 19, 0, 0, 241, 0, 242, 20, 21, 22, 23, + 19, 0, 0, 247, 0, 248, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, + 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 205, 0, 0, 115, - 51, 0, 52, 53, 0, 0, 0, 0, 55, 0, - 56, 57, 58, 59, 60, 61, 0, 0, 62, 238, - 0, 0, 239, 240, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, - 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 241, 0, 242, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 0, 0, 0, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 0, 0, 0, 0, 0, 159, 160, 161, 162, 163, - 164, 165, 166, 36, 37, 167, 39, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 0, - 0, 177, 178, 0, 0, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 0, 195, 196, 0, 0, 0, 0, 0, - 0, 197, 198, -564, -564, -564, -564, -564, -564, -564, - -564, -564, 0, 0, 0, 0, 0, 0, 0, -564, - 0, -564, -564, -564, -564, 0, -564, 0, 0, 0, - -564, -564, -564, -564, -564, -564, -564, 0, 0, -564, - 0, 0, 0, 0, 0, 0, 0, 0, -564, -564, - -564, -564, -564, -564, -564, -564, -564, 0, -564, -564, - -564, 0, 0, -564, 0, 0, -564, -564, 0, -564, - -564, -564, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -564, 0, 0, -564, -564, 0, -564, -564, 0, -564, - -564, -564, -564, 0, -564, -564, -564, -564, -564, -564, - 0, 0, -564, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -564, -564, -564, 0, -564, 0, 0, 0, - 0, 0, -564, -566, -566, -566, -566, -566, -566, -566, - -566, -566, 0, 0, 0, 0, 0, 0, 0, -566, - 0, -566, -566, -566, -566, 0, -566, 0, 0, 0, - -566, -566, -566, -566, -566, -566, -566, 0, 0, -566, - 0, 0, 0, 0, 0, 0, 0, 0, -566, -566, - -566, -566, -566, -566, -566, -566, -566, 0, -566, -566, - -566, 0, 0, -566, 0, 0, -566, -566, 0, -566, - -566, -566, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -566, 0, 0, -566, -566, 0, -566, -566, 0, -566, - -566, -566, -566, 0, -566, -566, -566, -566, -566, -566, - 0, 0, -566, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -566, -566, -566, 0, -566, 0, 0, 0, - 0, 0, -566, -565, -565, -565, -565, -565, -565, -565, - -565, -565, 0, 0, 0, 0, 0, 0, 0, -565, - 0, -565, -565, -565, -565, 0, -565, 0, 0, 0, - -565, -565, -565, -565, -565, -565, -565, 0, 0, -565, - 0, 0, 0, 0, 0, 0, 0, 0, -565, -565, - -565, -565, -565, -565, -565, -565, -565, 0, -565, -565, - -565, 0, 0, -565, 0, 0, -565, -565, 0, -565, - -565, -565, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -565, 0, 0, -565, -565, 0, -565, -565, 0, -565, - -565, -565, -565, 0, -565, -565, -565, -565, -565, -565, - 0, 0, -565, 0, 0, 0, 0, 0, 0, -567, - -567, -567, -567, -567, -567, -567, -567, -567, 0, 0, - 0, 0, -565, -565, -565, -567, -565, -567, -567, -567, - -567, 0, -565, 0, 0, 0, -567, -567, -567, -567, - -567, -567, -567, 0, 0, -567, 0, 0, 0, 0, - 0, 0, 0, 0, -567, -567, -567, -567, -567, -567, - -567, -567, -567, 0, -567, -567, -567, 0, 0, -567, - 0, 0, -567, -567, 0, -567, -567, -567, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -567, 771, 0, -567, - -567, 0, -567, -567, 0, -567, -567, -567, -567, 0, - -567, -567, -567, -567, -567, -567, 0, 0, -567, 0, - 0, 0, 0, 0, 0, -99, -568, -568, -568, -568, - -568, -568, -568, -568, -568, 0, 0, 0, -567, -567, - -567, 0, -568, 0, -568, -568, -568, -568, -567, 0, - 0, 0, 0, -568, -568, -568, -568, -568, -568, -568, - 0, 0, -568, 0, 0, 0, 0, 0, 0, 0, - 0, -568, -568, -568, -568, -568, -568, -568, -568, -568, - 0, -568, -568, -568, 0, 0, -568, 0, 0, -568, - -568, 0, -568, -568, -568, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -568, 772, 0, -568, -568, 0, -568, - -568, 0, -568, -568, -568, -568, 0, -568, -568, -568, - -568, -568, -568, 0, 0, -568, 0, 0, 0, 0, - 0, 0, -101, -253, -253, -253, -253, -253, -253, -253, - -253, -253, 0, 0, 0, -568, -568, -568, 0, -253, - 0, -253, -253, -253, -253, -568, 0, 0, 0, 0, - -253, -253, -253, -253, -253, -253, -253, 0, 0, -253, - 0, 0, 0, 0, 0, 0, 0, 0, -253, -253, - -253, -253, -253, -253, -253, -253, -253, 0, -253, -253, - -253, 0, 0, -253, 0, 0, -253, -253, 0, -253, - -253, -253, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -253, 0, 0, -253, -253, 0, -253, -253, 0, -253, - -253, -253, -253, 0, -253, -253, -253, -253, -253, -253, - 0, 0, -253, 0, 0, 0, 0, 0, 0, -569, - -569, -569, -569, -569, -569, -569, -569, -569, 0, 0, - 0, 0, -253, -253, -253, -569, 0, -569, -569, -569, - -569, 0, 266, 0, 0, 0, -569, -569, -569, -569, - -569, -569, -569, 0, 0, -569, 0, 0, 0, 0, - 0, 0, 0, 0, -569, -569, -569, -569, -569, -569, - -569, -569, -569, 0, -569, -569, -569, 0, 0, -569, - 0, 0, -569, -569, 0, -569, -569, -569, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -569, 0, 0, -569, - -569, 0, -569, -569, 0, -569, -569, -569, -569, 0, - -569, -569, -569, -569, -569, -569, 0, 0, -569, 0, - 0, 0, 0, 0, 0, -570, -570, -570, -570, -570, - -570, -570, -570, -570, 0, 0, 0, 0, -569, -569, - -569, -570, 0, -570, -570, -570, -570, 0, -569, 0, - 0, 0, -570, -570, -570, -570, -570, -570, -570, 0, - 0, -570, 0, 0, 0, 0, 0, 0, 0, 0, - -570, -570, -570, -570, -570, -570, -570, -570, -570, 0, - -570, -570, -570, 0, 0, -570, 0, 0, -570, -570, - 0, -570, -570, -570, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -570, 0, 0, -570, -570, 0, -570, -570, - 0, -570, -570, -570, -570, 0, -570, -570, -570, -570, - -570, -570, 0, 0, -570, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 0, 0, 50, + 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, + 56, 57, 58, 59, 60, 61, 0, 0, 62, 244, + 0, 0, 245, 246, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 63, 64, + 65, 0, 15, 0, 16, 17, 18, 19, 0, 0, + 247, 0, 248, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -570, -570, -570, 0, 0, 0, - 0, 0, 0, 0, -570, 125, 126, 127, 128, 129, + 0, 0, 0, 210, 0, 0, 118, 51, 0, 52, + 53, 0, 0, 0, 0, 55, 0, 56, 57, 58, + 59, 60, 61, 0, 0, 62, 244, 0, 0, 245, + 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, 64, 65, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 247, 0, 248, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 0, - 0, 0, 149, 150, 151, 224, 225, 226, 227, 156, - 157, 158, 0, 0, 0, 0, 0, 159, 160, 161, - 228, 229, 230, 231, 166, 309, 310, 232, 311, 0, - 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, - 0, 0, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 177, 178, 0, 0, 179, 180, 181, - 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 183, 184, 0, 0, 0, 0, 0, 0, 0, - 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 0, 195, 196, 0, 0, 0, - 0, 0, 0, 197, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 0, 0, - 0, 149, 150, 151, 224, 225, 226, 227, 156, 157, - 158, 0, 0, 0, 0, 0, 159, 160, 161, 228, - 229, 230, 231, 166, 309, 310, 232, 311, 0, 0, - 0, 0, 0, 0, 312, 0, 0, 0, 0, 0, - 0, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 0, 0, 177, 178, 0, 0, 179, 180, 181, 182, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 0, 0, 0, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 0, 0, 0, + 0, 0, 164, 165, 166, 167, 168, 169, 170, 171, + 36, 37, 172, 39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 183, 184, 0, 0, 0, 0, 0, 0, 0, 433, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 0, 0, 0, 0, 0, 0, 202, 203, + -573, -573, -573, -573, -573, -573, -573, -573, -573, 0, + 0, 0, 0, 0, 0, 0, -573, 0, -573, -573, + -573, -573, 0, -573, 0, 0, 0, -573, -573, -573, + -573, -573, -573, -573, 0, 0, -573, 0, 0, 0, + 0, 0, 0, 0, 0, -573, -573, -573, -573, -573, + -573, -573, -573, -573, 0, -573, -573, -573, 0, 0, + -573, 0, 0, -573, -573, 0, -573, -573, -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 0, 195, 196, 0, 0, 0, 0, - 0, 0, 197, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 0, 0, 0, - 149, 150, 151, 224, 225, 226, 227, 156, 157, 158, - 0, 0, 0, 0, 0, 159, 160, 161, 228, 229, - 230, 231, 166, 0, 0, 232, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -573, 0, 0, + -573, -573, 0, -573, -573, 0, -573, -573, -573, -573, + 0, -573, -573, -573, -573, -573, -573, 0, 0, -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 0, - 0, 177, 178, 0, 0, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, - 184, 0, 0, 0, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -573, + -573, -573, 0, -573, 0, 0, 0, 0, 0, -573, + -575, -575, -575, -575, -575, -575, -575, -575, -575, 0, + 0, 0, 0, 0, 0, 0, -575, 0, -575, -575, + -575, -575, 0, -575, 0, 0, 0, -575, -575, -575, + -575, -575, -575, -575, 0, 0, -575, 0, 0, 0, + 0, 0, 0, 0, 0, -575, -575, -575, -575, -575, + -575, -575, -575, -575, 0, -575, -575, -575, 0, 0, + -575, 0, 0, -575, -575, 0, -575, -575, -575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 0, 195, 196, 0, 0, 0, 0, 0, - 0, 197, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 0, 0, 0, 149, - 150, 151, 224, 225, 226, 227, 156, 157, 158, 0, - 0, 0, 0, 0, 159, 160, 161, 228, 229, 230, - 231, 166, 0, 0, 232, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 0, 0, - 177, 178, 0, 0, 179, 180, 181, 182, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 183, 184, + 0, 0, 0, 0, 0, 0, 0, -575, 0, 0, + -575, -575, 0, -575, -575, 0, -575, -575, -575, -575, + 0, -575, -575, -575, -575, -575, -575, 0, 0, -575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -575, + -575, -575, 0, -575, 0, 0, 0, 0, 0, -575, + -574, -574, -574, -574, -574, -574, -574, -574, -574, 0, + 0, 0, 0, 0, 0, 0, -574, 0, -574, -574, + -574, -574, 0, -574, 0, 0, 0, -574, -574, -574, + -574, -574, -574, -574, 0, 0, -574, 0, 0, 0, + 0, 0, 0, 0, 0, -574, -574, -574, -574, -574, + -574, -574, -574, -574, 0, -574, -574, -574, 0, 0, + -574, 0, 0, -574, -574, 0, -574, -574, -574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 0, 195, 196, 0, 0, 0, 0, 0, 0, - 197, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 104, - 105, 18, 19, 0, 0, 0, 0, 0, 106, 107, - 108, 23, 24, 25, 26, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -574, 0, 0, + -574, -574, 0, -574, -574, 0, -574, -574, -574, -574, + 0, -574, -574, -574, -574, -574, -574, 0, 0, -574, + 0, 0, 0, 0, 0, 0, -576, -576, -576, -576, + -576, -576, -576, -576, -576, 0, 0, 0, 0, -574, + -574, -574, -576, -574, -576, -576, -576, -576, 0, -574, + 0, 0, 0, -576, -576, -576, -576, -576, -576, -576, + 0, 0, -576, 0, 0, 0, 0, 0, 0, 0, + 0, -576, -576, -576, -576, -576, -576, -576, -576, -576, + 0, -576, -576, -576, 0, 0, -576, 0, 0, -576, + -576, 0, -576, -576, -576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, - 0, 115, 51, 0, 52, 53, 0, 0, 0, 0, - 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, - 62, 0, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 0, 0, 0, 0, 0, 0, 0, 15, - 116, 104, 105, 18, 19, 0, 0, 0, 303, 0, - 106, 107, 108, 23, 24, 25, 26, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 112, + 0, 0, 0, -576, 815, 0, -576, -576, 0, -576, + -576, 0, -576, -576, -576, -576, 0, -576, -576, -576, + -576, -576, -576, 0, 0, -576, 0, 0, 0, 0, + 0, 0, -107, -577, -577, -577, -577, -577, -577, -577, + -577, -577, 0, 0, 0, -576, -576, -576, 0, -577, + 0, -577, -577, -577, -577, -576, 0, 0, 0, 0, + -577, -577, -577, -577, -577, -577, -577, 0, 0, -577, + 0, 0, 0, 0, 0, 0, 0, 0, -577, -577, + -577, -577, -577, -577, -577, -577, -577, 0, -577, -577, + -577, 0, 0, -577, 0, 0, -577, -577, 0, -577, + -577, -577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -577, 816, 0, -577, -577, 0, -577, -577, 0, -577, + -577, -577, -577, 0, -577, -577, -577, -577, -577, -577, + 0, 0, -577, 0, 0, 0, 0, 0, 0, -109, + -265, -265, -265, -265, -265, -265, -265, -265, -265, 0, + 0, 0, -577, -577, -577, 0, -265, 0, -265, -265, + -265, -265, -577, 0, 0, 0, 0, -265, -265, -265, + -265, -265, -265, -265, 0, 0, -265, 0, 0, 0, + 0, 0, 0, 0, 0, -265, -265, -265, -265, -265, + -265, -265, -265, -265, 0, -265, -265, -265, 0, 0, + -265, 0, 0, -265, -265, 0, -265, -265, -265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 302, 0, 0, 115, 51, 0, 52, 53, 0, 0, - 0, 0, 55, 0, 56, 57, 58, 59, 60, 61, - 0, 0, 62, 0, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, - 0, 15, 116, 16, 17, 18, 19, 0, 0, 0, - 557, 0, 20, 21, 22, 23, 24, 25, 26, 0, - 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -265, 0, 0, + -265, -265, 0, -265, -265, 0, -265, -265, -265, -265, + 0, -265, -265, -265, -265, -265, -265, 0, 0, -265, + 0, 0, 0, 0, 0, 0, -578, -578, -578, -578, + -578, -578, -578, -578, -578, 0, 0, 0, 0, -265, + -265, -265, -578, 0, -578, -578, -578, -578, 0, 272, + 0, 0, 0, -578, -578, -578, -578, -578, -578, -578, + 0, 0, -578, 0, 0, 0, 0, 0, 0, 0, + 0, -578, -578, -578, -578, -578, -578, -578, -578, -578, + 0, -578, -578, -578, 0, 0, -578, 0, 0, -578, + -578, 0, -578, -578, -578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 50, 51, 0, 52, 53, - 0, 54, 0, 0, 55, 0, 56, 57, 58, 59, - 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 0, 0, 0, 0, 63, 64, 65, 15, 0, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, - 22, 23, 24, 25, 26, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 32, 33, 251, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, + 0, 0, 0, -578, 0, 0, -578, -578, 0, -578, + -578, 0, -578, -578, -578, -578, 0, -578, -578, -578, + -578, -578, -578, 0, 0, -578, 0, 0, 0, 0, + 0, 0, -579, -579, -579, -579, -579, -579, -579, -579, + -579, 0, 0, 0, 0, -578, -578, -578, -579, 0, + -579, -579, -579, -579, 0, -578, 0, 0, 0, -579, + -579, -579, -579, -579, -579, -579, 0, 0, -579, 0, + 0, 0, 0, 0, 0, 0, 0, -579, -579, -579, + -579, -579, -579, -579, -579, -579, 0, -579, -579, -579, + 0, 0, -579, 0, 0, -579, -579, 0, -579, -579, + -579, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -579, + 0, 0, -579, -579, 0, -579, -579, 0, -579, -579, + -579, -579, 0, -579, -579, -579, -579, -579, -579, 0, + 0, -579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 455, 0, 0, 0, 0, 0, 205, 0, - 0, 115, 51, 0, 52, 53, 0, 252, 253, 254, - 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 0, 0, 0, - 63, 255, 65, 15, 0, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, - 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, + 0, -579, -579, -579, 0, 0, 0, 0, 0, 0, + 0, -579, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 0, 0, 0, 154, + 155, 156, 230, 231, 232, 233, 161, 162, 163, 0, + 0, 0, 0, 0, 164, 165, 166, 234, 235, 236, + 237, 171, 315, 316, 238, 317, 0, 0, 0, 0, + 0, 0, 318, 0, 0, 0, 0, 0, 0, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 50, 51, 0, - 52, 53, 0, 54, 0, 0, 55, 0, 56, 57, - 58, 59, 60, 61, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 0, 0, 0, 0, 63, 64, 65, 15, - 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, - 20, 21, 22, 23, 24, 25, 26, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, - 33, 251, 35, 36, 37, 38, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, - 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 0, 0, 0, 0, 0, 0, + 202, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 0, 0, 0, 154, 155, + 156, 230, 231, 232, 233, 161, 162, 163, 0, 0, + 0, 0, 0, 164, 165, 166, 234, 235, 236, 237, + 171, 315, 316, 238, 317, 0, 0, 0, 0, 0, + 0, 318, 0, 0, 0, 0, 0, 0, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, + 183, 0, 0, 184, 185, 186, 187, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 188, 189, 0, + 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 115, 51, 0, 52, 53, 0, 252, - 253, 254, 55, 0, 56, 57, 58, 59, 60, 61, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, - 0, 0, 63, 255, 65, 15, 0, 104, 105, 18, - 19, 0, 0, 0, 0, 0, 106, 107, 108, 23, - 24, 25, 26, 0, 0, 109, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 251, 35, 36, - 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, - 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 0, 200, 201, 0, 0, 0, 0, 0, 0, 202, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 0, 0, 0, 154, 155, 156, + 230, 231, 232, 233, 161, 162, 163, 0, 0, 0, + 0, 0, 164, 165, 166, 234, 235, 236, 237, 171, + 0, 0, 238, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, + 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 0, 0, 0, 0, 0, 0, 202, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 0, 0, 0, 154, 155, 156, 230, + 231, 232, 233, 161, 162, 163, 0, 0, 0, 0, + 0, 164, 165, 166, 234, 235, 236, 237, 171, 0, + 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, + 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 205, 0, 0, 115, - 51, 0, 52, 53, 0, 666, 253, 254, 55, 0, - 56, 57, 58, 59, 60, 61, 0, 0, 62, 0, - 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 0, 0, 0, 0, 63, 255, - 65, 15, 0, 104, 105, 18, 19, 0, 0, 0, - 0, 0, 106, 107, 108, 23, 24, 25, 26, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 32, 33, 251, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 0, 200, + 201, 0, 0, 0, 0, 0, 0, 202, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 107, 108, 18, 19, + 0, 0, 0, 0, 0, 109, 110, 111, 23, 24, + 25, 26, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, + 0, 44, 45, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 205, 0, 0, 115, 51, 0, 52, 53, - 0, 252, 253, 0, 55, 0, 56, 57, 58, 59, - 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 0, 0, 0, 0, 63, 255, 65, 15, 0, 104, - 105, 18, 19, 0, 0, 0, 0, 0, 106, 107, - 108, 23, 24, 25, 26, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 32, 33, 251, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, + 0, 0, 0, 0, 0, 308, 0, 0, 118, 51, + 0, 52, 53, 0, 0, 0, 0, 55, 0, 56, + 57, 58, 59, 60, 61, 0, 0, 62, 0, 0, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, + 0, 0, 0, 0, 0, 0, 15, 119, 107, 108, + 18, 19, 0, 0, 0, 309, 0, 109, 110, 111, + 23, 24, 25, 26, 0, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, + 43, 0, 0, 44, 45, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, - 0, 115, 51, 0, 52, 53, 0, 0, 253, 254, - 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, - 63, 255, 65, 15, 0, 104, 105, 18, 19, 0, - 0, 0, 0, 0, 106, 107, 108, 23, 24, 25, - 26, 0, 0, 109, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 32, 33, 251, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, + 118, 51, 0, 52, 53, 0, 0, 0, 0, 55, + 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 0, 0, 0, 0, 0, 0, 15, 119, + 16, 17, 18, 19, 0, 0, 0, 599, 0, 20, + 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, + 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, + 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 0, 0, 50, 51, 0, 52, 53, 0, 54, 0, + 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, + 0, 62, 0, 0, 0, 0, 0, 0, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 0, 63, 64, 65, 15, 0, 16, 17, 18, 19, + 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, + 25, 26, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 257, 35, 36, 37, + 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, + 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, + 0, 0, 0, 0, 0, 210, 0, 0, 118, 51, + 0, 52, 53, 0, 258, 259, 260, 55, 0, 56, + 57, 58, 59, 60, 61, 0, 0, 62, 0, 0, + 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 0, 0, 0, 63, 261, 65, + 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, + 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, + 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 205, 0, 0, 115, 51, 0, - 52, 53, 0, 666, 253, 0, 55, 0, 56, 57, - 58, 59, 60, 61, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 0, 0, 0, 0, 63, 255, 65, 15, - 0, 104, 105, 18, 19, 0, 0, 0, 0, 0, - 106, 107, 108, 23, 24, 25, 26, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, - 33, 251, 35, 36, 37, 38, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, - 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 49, 0, 0, 50, 51, 0, 52, 53, 0, + 54, 0, 0, 55, 0, 56, 57, 58, 59, 60, + 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, + 0, 0, 0, 63, 64, 65, 15, 0, 16, 17, + 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, + 23, 24, 25, 26, 0, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 32, 33, 257, 35, + 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, + 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 115, 51, 0, 52, 53, 0, 0, - 253, 0, 55, 0, 56, 57, 58, 59, 60, 61, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, - 0, 0, 63, 255, 65, 15, 0, 16, 17, 18, - 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, - 24, 25, 26, 0, 0, 109, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, - 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, + 118, 51, 0, 52, 53, 0, 258, 259, 260, 55, + 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 0, 63, + 261, 65, 15, 0, 107, 108, 18, 19, 0, 0, + 0, 0, 0, 109, 110, 111, 23, 24, 25, 26, + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 32, 33, 257, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 205, 0, 0, 115, - 51, 0, 52, 53, 0, 551, 0, 0, 55, 0, - 56, 57, 58, 59, 60, 61, 0, 0, 62, 0, - 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 0, 0, 0, 0, 63, 255, - 65, 15, 0, 104, 105, 18, 19, 0, 0, 0, - 0, 0, 106, 107, 108, 23, 24, 25, 26, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 210, 0, 0, 118, 51, 0, 52, + 53, 0, 709, 259, 260, 55, 0, 56, 57, 58, + 59, 60, 61, 0, 0, 62, 0, 0, 0, 0, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 0, 0, 63, 261, 65, 15, 0, + 107, 108, 18, 19, 0, 0, 0, 0, 0, 109, + 110, 111, 23, 24, 25, 26, 0, 0, 112, 0, + 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, + 257, 35, 36, 37, 38, 39, 0, 40, 41, 42, + 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, + 0, 0, 118, 51, 0, 52, 53, 0, 258, 259, + 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, + 0, 62, 0, 0, 0, 0, 0, 0, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 0, 63, 261, 65, 15, 0, 107, 108, 18, 19, + 0, 0, 0, 0, 0, 109, 110, 111, 23, 24, + 25, 26, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 257, 35, 36, 37, + 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, + 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 205, 0, 0, 115, 51, 0, 52, 53, - 0, 252, 0, 0, 55, 0, 56, 57, 58, 59, - 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 0, 0, 0, 0, 63, 255, 65, 15, 0, 104, - 105, 18, 19, 0, 0, 0, 0, 0, 106, 107, - 108, 23, 24, 25, 26, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, + 0, 0, 0, 0, 0, 210, 0, 0, 118, 51, + 0, 52, 53, 0, 0, 259, 260, 55, 0, 56, + 57, 58, 59, 60, 61, 0, 0, 62, 0, 0, + 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, 0, 0, 0, 63, 261, 65, + 15, 0, 107, 108, 18, 19, 0, 0, 0, 0, + 0, 109, 110, 111, 23, 24, 25, 26, 0, 0, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 32, 33, 257, 35, 36, 37, 38, 39, 0, 40, + 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, + 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, - 0, 115, 51, 0, 52, 53, 0, 551, 0, 0, - 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, - 63, 255, 65, 15, 0, 104, 105, 18, 19, 0, - 0, 0, 0, 0, 106, 107, 108, 23, 24, 25, - 26, 0, 0, 109, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, + 0, 210, 0, 0, 118, 51, 0, 52, 53, 0, + 709, 259, 0, 55, 0, 56, 57, 58, 59, 60, + 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, + 0, 0, 0, 63, 261, 65, 15, 0, 107, 108, + 18, 19, 0, 0, 0, 0, 0, 109, 110, 111, + 23, 24, 25, 26, 0, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 32, 33, 257, 35, + 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, + 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 205, 0, 0, 115, 51, 0, - 52, 53, 0, 831, 0, 0, 55, 0, 56, 57, - 58, 59, 60, 61, 0, 0, 62, 0, 0, 0, - 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 0, 0, 0, 0, 63, 255, 65, 15, - 0, 104, 105, 18, 19, 0, 0, 0, 0, 0, - 106, 107, 108, 23, 24, 25, 26, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, - 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, + 118, 51, 0, 52, 53, 0, 0, 259, 0, 55, + 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 0, 63, + 261, 65, 15, 0, 16, 17, 18, 19, 0, 0, + 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 115, 51, 0, 52, 53, 0, 666, - 0, 0, 55, 0, 56, 57, 58, 59, 60, 61, - 0, 0, 62, 0, 0, 0, 0, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, - 0, 0, 63, 255, 65, 15, 0, 16, 17, 18, - 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, - 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, - 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, + 0, 0, 0, 210, 0, 0, 118, 51, 0, 52, + 53, 0, 593, 0, 0, 55, 0, 56, 57, 58, + 59, 60, 61, 0, 0, 62, 0, 0, 0, 0, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 0, 0, 63, 261, 65, 15, 0, + 107, 108, 18, 19, 0, 0, 0, 0, 0, 109, + 110, 111, 23, 24, 25, 26, 0, 0, 112, 0, + 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, + 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, + 0, 0, 118, 51, 0, 52, 53, 0, 258, 0, + 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, + 0, 62, 0, 0, 0, 0, 0, 0, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 0, 63, 261, 65, 15, 0, 107, 108, 18, 19, + 0, 0, 0, 0, 0, 109, 110, 111, 23, 24, + 25, 26, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, + 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 205, 0, 0, 115, - 51, 0, 52, 53, 0, 0, 0, 0, 55, 0, - 56, 57, 58, 59, 60, 61, 0, 0, 62, 0, - 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 0, 0, 0, 0, 63, 64, - 65, 15, 0, 104, 105, 18, 19, 0, 0, 0, - 0, 0, 106, 107, 108, 23, 24, 25, 26, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 210, 0, 0, 118, 51, + 0, 52, 53, 0, 593, 0, 0, 55, 0, 56, + 57, 58, 59, 60, 61, 0, 0, 62, 0, 0, + 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, 0, 0, 0, 63, 261, 65, + 15, 0, 107, 108, 18, 19, 0, 0, 0, 0, + 0, 109, 110, 111, 23, 24, 25, 26, 0, 0, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, + 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, + 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 205, 0, 0, 115, 51, 0, 52, 53, - 0, 0, 0, 0, 55, 0, 56, 57, 58, 59, - 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 0, 0, 0, 0, 63, 255, 65, 15, 0, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, - 22, 23, 24, 25, 26, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, + 0, 210, 0, 0, 118, 51, 0, 52, 53, 0, + 874, 0, 0, 55, 0, 56, 57, 58, 59, 60, + 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, + 0, 0, 0, 63, 261, 65, 15, 0, 107, 108, + 18, 19, 0, 0, 0, 0, 0, 109, 110, 111, + 23, 24, 25, 26, 0, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, + 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, - 0, 115, 51, 0, 52, 53, 0, 0, 0, 0, - 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, - 63, 255, 65, 15, 0, 104, 105, 18, 19, 0, - 0, 0, 0, 0, 106, 107, 108, 23, 24, 25, - 26, 0, 0, 109, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 32, 33, 110, 35, 36, 37, 111, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 112, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, + 118, 51, 0, 52, 53, 0, 709, 0, 0, 55, + 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, + 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 0, 63, + 261, 65, 15, 0, 16, 17, 18, 19, 0, 0, + 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 113, 0, 0, 114, 0, 0, 115, 51, 0, - 52, 53, 0, 0, 0, 0, 55, 0, 56, 57, - 58, 59, 60, 61, 0, 0, 62, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, - 0, 0, 0, 0, 0, 15, 116, 104, 105, 18, - 19, 0, 0, 0, 0, 0, 106, 107, 108, 23, - 24, 25, 26, 0, 0, 109, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, - 0, 0, 44, 45, 0, 216, 0, 0, 0, 0, + 0, 0, 0, 210, 0, 0, 118, 51, 0, 52, + 53, 0, 0, 0, 0, 55, 0, 56, 57, 58, + 59, 60, 61, 0, 0, 62, 0, 0, 0, 0, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 0, 0, 63, 64, 65, 15, 0, + 107, 108, 18, 19, 0, 0, 0, 0, 0, 109, + 110, 111, 23, 24, 25, 26, 0, 0, 112, 0, + 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, + 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, + 0, 0, 118, 51, 0, 52, 53, 0, 0, 0, + 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, + 0, 62, 0, 0, 0, 0, 0, 0, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 0, 63, 261, 65, 15, 0, 16, 17, 18, 19, + 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, + 25, 26, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, + 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 217, 0, 0, 50, - 51, 0, 52, 53, 0, 54, 0, 0, 55, 0, - 56, 57, 58, 59, 60, 61, 0, 0, 62, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 0, 0, 0, 0, 0, 0, 0, 15, 116, 104, - 105, 18, 19, 0, 0, 0, 0, 0, 106, 107, - 108, 23, 24, 25, 26, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 210, 0, 0, 118, 51, + 0, 52, 53, 0, 0, 0, 0, 55, 0, 56, + 57, 58, 59, 60, 61, 0, 0, 62, 0, 0, + 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, 0, 0, 0, 63, 261, 65, + 15, 0, 107, 108, 18, 19, 0, 0, 0, 0, + 0, 109, 110, 111, 23, 24, 25, 26, 0, 0, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 32, 33, 113, 35, 36, 37, 114, 39, 0, 40, + 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, + 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, + 0, 117, 0, 0, 118, 51, 0, 52, 53, 0, + 0, 0, 0, 55, 0, 56, 57, 58, 59, 60, + 61, 0, 0, 62, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, + 0, 0, 15, 119, 107, 108, 18, 19, 0, 0, + 0, 0, 0, 109, 110, 111, 23, 24, 25, 26, + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 302, 0, - 0, 349, 51, 0, 52, 53, 0, 350, 0, 0, - 55, 0, 56, 57, 58, 59, 60, 61, 0, 0, - 62, 0, 0, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 0, 0, 0, 0, 0, 0, 0, 15, - 116, 104, 105, 18, 19, 0, 0, 0, 0, 0, - 106, 107, 108, 23, 24, 25, 26, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, - 33, 110, 35, 36, 37, 111, 39, 0, 40, 41, - 42, 0, 0, 43, 0, 0, 44, 45, 0, 112, + 0, 0, 0, 223, 0, 0, 50, 51, 0, 52, + 53, 0, 54, 0, 0, 55, 0, 56, 57, 58, + 59, 60, 61, 0, 0, 62, 0, 0, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, + 0, 0, 0, 0, 15, 119, 107, 108, 18, 19, + 0, 0, 0, 0, 0, 109, 110, 111, 23, 24, + 25, 26, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, + 0, 44, 45, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 308, 0, 0, 392, 51, + 0, 52, 53, 0, 393, 0, 0, 55, 0, 56, + 57, 58, 59, 60, 61, 0, 0, 62, 0, 0, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, + 0, 0, 0, 0, 0, 0, 15, 119, 107, 108, + 18, 19, 0, 0, 0, 0, 0, 109, 110, 111, + 23, 24, 25, 26, 0, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 32, 33, 113, 35, + 36, 37, 114, 39, 0, 40, 41, 42, 0, 0, + 43, 0, 0, 44, 45, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 0, 0, 115, 51, 0, 52, 53, 0, 0, - 0, 0, 55, 0, 56, 57, 58, 59, 60, 61, - 0, 0, 62, 0, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, - 0, 15, 116, 104, 105, 18, 19, 0, 0, 0, - 0, 0, 106, 107, 108, 23, 24, 25, 26, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, + 118, 51, 0, 52, 53, 0, 0, 0, 0, 55, + 0, 56, 57, 58, 59, 60, 61, 0, 0, 62, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 0, 0, 0, 0, 0, 15, 119, + 107, 108, 18, 19, 0, 0, 0, 0, 0, 109, + 110, 111, 23, 24, 25, 26, 0, 0, 112, 0, + 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, + 0, 0, 43, 0, 0, 44, 45, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 302, 0, 0, 349, 51, 0, 52, 53, - 0, 0, 0, 0, 55, 0, 56, 57, 58, 59, - 60, 61, 0, 0, 62, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, - 0, 0, 0, 15, 116, 104, 105, 18, 19, 0, - 0, 0, 0, 0, 106, 107, 108, 23, 24, 25, - 26, 0, 0, 109, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 112, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, + 0, 0, 392, 51, 0, 52, 53, 0, 0, 0, + 0, 55, 0, 56, 57, 58, 59, 60, 61, 0, + 0, 62, 0, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, + 15, 119, 107, 108, 18, 19, 0, 0, 0, 0, + 0, 109, 110, 111, 23, 24, 25, 26, 0, 0, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, + 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, + 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 904, 0, 0, 115, 51, 0, - 52, 53, 0, 0, 0, 0, 55, 0, 56, 57, - 58, 59, 60, 61, 0, 0, 62, 0, 0, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, - 0, 0, 0, 0, 0, 15, 116, 104, 105, 18, - 19, 0, 0, 0, 0, 0, 106, 107, 108, 23, - 24, 25, 26, 0, 0, 109, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, - 0, 0, 44, 45, 0, 216, 0, 0, 0, 0, + 0, 937, 0, 0, 118, 51, 0, 52, 53, 0, + 0, 0, 0, 55, 0, 56, 57, 58, 59, 60, + 61, 0, 0, 62, 0, 0, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, + 0, 0, 15, 119, 107, 108, 18, 19, 0, 0, + 0, 0, 0, 109, 110, 111, 23, 24, 25, 26, + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, + 45, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 931, 0, 0, 115, - 51, 0, 52, 53, 0, 595, 596, 0, 55, 597, - 56, 57, 58, 59, 60, 61, 0, 0, 62, 0, - 0, 0, 0, 0, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 0, 0, 177, 178, 0, 116, 179, - 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 960, 0, 0, 118, 51, 0, 52, + 53, 0, 647, 648, 0, 55, 649, 56, 57, 58, + 59, 60, 61, 0, 0, 62, 0, 0, 0, 0, + 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 119, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 0, 195, 196, 603, - 604, 0, 0, 605, 0, 197, 266, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 178, 0, 0, 179, 180, 181, 182, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 184, 0, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 668, 640, 0, 0, + 669, 0, 202, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 0, 195, 196, 624, 596, 0, 0, 625, 0, 197, - 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 177, 178, 0, 0, 179, 180, 181, - 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 183, 184, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 653, 648, 0, 0, 654, 0, 202, 272, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 0, 195, 196, 609, 604, 0, - 0, 610, 0, 197, 266, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 0, 0, 177, 178, 0, - 0, 179, 180, 181, 182, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 0, 195, - 196, 640, 596, 0, 0, 641, 0, 197, 266, 0, + 0, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 683, 640, 0, 0, 684, 0, + 202, 272, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 0, - 0, 177, 178, 0, 0, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 686, 648, + 0, 0, 687, 0, 202, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 0, 195, 196, 643, 604, 0, 0, 644, - 0, 197, 266, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 0, 0, 177, 178, 0, 0, 179, - 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 693, 640, 0, 0, 694, 0, 202, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 0, 195, 196, 650, - 596, 0, 0, 651, 0, 197, 266, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 178, 0, 0, 179, 180, 181, 182, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 184, 0, + 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 0, 195, 196, 653, 604, 0, 0, 654, 0, 197, - 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 177, 178, 0, 0, 179, 180, 181, - 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 183, 184, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 696, 648, 0, 0, + 697, 0, 202, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 0, 195, 196, 689, 596, 0, - 0, 690, 0, 197, 266, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 0, 0, 177, 178, 0, - 0, 179, 180, 181, 182, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 183, 184, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 732, 640, 0, 0, 733, 0, 202, 272, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 0, 195, - 196, 692, 604, 0, 0, 693, 0, 197, 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 0, - 0, 177, 178, 0, 0, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 735, 648, 0, 0, 736, 0, + 202, 272, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 0, 195, 196, 836, 596, 0, 0, 837, - 0, 197, 266, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 0, 0, 177, 178, 0, 0, 179, - 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 879, 640, + 0, 0, 880, 0, 202, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 0, 195, 196, 839, - 604, 0, 0, 840, 0, 197, 266, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 0, 0, 177, - 178, 0, 0, 179, 180, 181, 182, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 183, 184, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 0, + 200, 201, 882, 648, 0, 0, 883, 0, 202, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 0, 195, 196, 994, 596, 0, 0, 995, 0, 197, - 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 0, 0, 177, 178, 0, 0, 179, 180, 181, - 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 183, 184, 0, 0, 0, 0, 0, 0, 0, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 0, 195, 196, 1007, 596, 0, - 0, 1008, 0, 197, 266, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 0, 0, 177, 178, 0, - 0, 179, 180, 181, 182, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 183, 184, 0, 0, 0, + 0, 0, 0, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 0, 200, 201, 1019, 640, 0, 0, + 1020, 0, 202, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 0, 195, - 196, 1010, 604, 0, 0, 1011, 0, 197, 266, 0, + 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 0, 200, 201, + 1031, 640, 0, 0, 1032, 0, 202, 272, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 0, - 0, 177, 178, 0, 0, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 0, 195, 196, 609, 604, 0, 0, 610, - 0, 197, 266, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 0, 0, 177, 178, 0, 0, 179, - 180, 181, 182, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 183, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 732, 0, - 0, 0, 0, 0, 0, 0, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 0, 195, 196, 0, - 0, 0, 0, 0, 0, 197, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 0, - 0, 366, 367, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 0, 0, 366, 367, + 0, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 0, 200, 201, 1034, 648, 0, 0, 1035, 0, + 202, 272, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 368, 0, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 0, 0, 0, 0, - 0, 368, 0, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 0, 242, 366, 367, - 0, 0, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 0, 0, 366, 367, 0, + 0, 0, 0, 0, 0, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 0, 200, 201, 653, 648, + 0, 0, 654, 0, 202, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 368, 0, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 0, 0, 0, 0, 0, 0, 0, - 368, -260, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 0, 0, 0, 0, 0, 0, 0, 0, - -261, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 0, 0, 366, 367, 0, 0, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 0, 0, 366, 367, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, - 0, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 0, 0, 0, 0, 0, 0, 0, 368, -262, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 0, 0, 0, 0, 0, 0, 0, 0, -263, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 0, 0, 366, 367, 0, 0, 0, 447, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 0, 0, 366, 367, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 0, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -595, -595, 0, 0, 366, 367, 353, 354, 355, - 356, 357, 358, 359, 360, 0, 362, 363, 0, 0, - 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, + 0, 848, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 859, + 200, 201, 0, 0, 0, 0, 0, 0, 202, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 0, 0, 409, 410, 0, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 0, 0, 409, 410, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 0, + 0, 0, 0, 0, 0, 412, 0, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 0, 0, 409, 410, 0, 0, 0, 0, 0, 0, + 0, 0, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 0, 0, 409, 410, 0, + 0, 0, 0, 0, 0, 412, 0, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 0, 0, 0, 0, 0, 0, 0, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 353, 354, 355, - 356, 357, 358, 359, 0, 0, 362, 363, 0, 0, - 0, 0, 366, 367, 0, 0, 0, 0, 0, 0, + 412, 248, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 0, 0, 0, 0, 0, 0, 0, 0, + -272, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 0, 0, 409, 410, 0, 0, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 0, 0, 409, 410, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, + 0, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 0, 0, 0, 0, 0, 0, 0, 412, -273, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 0, 0, 0, 0, 0, 0, 0, 0, -274, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 0, 0, 409, 410, 0, 0, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 0, 0, 409, 410, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 0, + 0, 0, 0, 0, 0, 0, 412, -275, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 0, 0, 409, 410, 0, 0, 0, 491, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 0, 0, 409, 410, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 412, 0, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 396, + 397, 398, 399, 400, 401, 402, 0, 0, 405, 406, + 0, 0, 0, 0, 409, 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422 }; static const yytype_int16 yycheck[] = { - 2, 308, 308, 83, 84, 27, 436, 213, 14, 78, - 2, 10, 4, 5, 6, 27, 15, 9, 10, 21, - 85, 13, 28, 15, 16, 17, 7, 262, 20, 381, - 2, 7, 4, 28, 67, 22, 4, 303, 14, 54, - 379, 15, 296, 454, 383, 427, 300, 386, 64, 352, - 52, 53, 28, 405, 50, 16, 17, 721, 50, 20, - 450, 492, 54, 320, 454, 442, 114, 406, 636, 421, - 16, 17, 64, 484, 20, 56, 515, 645, 430, 795, - 56, 420, 709, 422, 912, 26, 78, 57, 889, 391, - 392, 52, 431, 67, 5, 6, 21, 22, 26, 16, - 612, 613, 13, 142, 25, 107, 29, 146, 16, 17, - 89, 91, 20, 25, 101, 285, 58, 59, 60, 61, - 25, 113, 89, 115, 103, 321, 557, 57, 324, 209, - 326, 470, 328, 89, 330, 25, 89, 289, 25, 119, - 220, 293, 494, 54, 52, 53, 25, 16, 17, 119, - 51, 20, 91, 27, 55, 51, 495, 53, 54, 55, - 56, 89, 140, 26, 0, 25, 145, 78, 146, 997, - 16, 17, 136, 69, 20, 103, 101, 91, 145, 349, - 119, 25, 107, 108, 55, 442, 987, 706, 111, 145, - 89, 121, 145, 407, 28, 136, 113, 352, 123, 116, - 117, 281, 509, 509, 740, 119, 52, 53, 136, 745, - 138, 18, 204, 20, 142, 214, 215, 145, 26, 140, - 140, 142, 214, 215, 459, 305, 492, 144, 140, 146, - 142, 947, 50, 80, 303, 140, 391, 392, 750, 113, - 91, 87, 116, 117, 140, 909, 145, 72, 912, 260, - 140, 262, 233, 140, 287, 119, 91, 233, 260, 89, - 262, 140, 295, 296, 266, 676, 893, 300, 119, 243, - 144, 91, 146, 136, 266, 532, 140, 124, 270, 142, - 140, 89, 274, 275, 295, 675, 676, 279, 665, 285, - 119, 557, 284, 285, 91, 103, 140, 115, 729, 119, - 292, 142, 101, 455, 129, 130, 131, 89, 89, 270, - 462, 303, 284, 287, 882, 145, 89, 119, 89, 142, - 292, 473, 119, 123, 270, 55, 632, 126, 136, 89, - 138, 347, 635, 997, 530, 350, 352, 145, 91, 338, - 339, 340, 341, 140, 119, 337, 338, 339, 340, 341, - 342, 343, 344, 349, 25, 347, 404, 349, 350, 91, - 352, 55, 270, 145, 145, 337, 805, 91, 887, 337, - 342, 313, 145, 16, 145, 391, 392, 113, 897, 381, - 116, 117, 734, 822, 823, 145, 347, 119, 89, 381, - 909, 352, 303, 140, 733, 119, 735, 266, 780, 391, - 392, 270, 103, 405, 556, 662, 20, 383, 665, 623, - 386, 140, 414, 405, 60, 407, 408, 63, 57, 421, - 266, 490, 136, 492, 270, 417, 448, 72, 430, 421, - 406, 91, 686, 425, 669, 737, 448, 138, 430, 350, - 742, 743, 119, 435, 145, 143, 422, 458, 459, 91, - 757, 757, 882, 137, 660, 431, 458, 459, 383, 119, - 466, 279, 108, 729, 139, 467, 16, 285, 58, 59, - 113, 466, 883, 116, 117, 467, 55, 119, 439, 631, - 140, 406, 1001, 457, 476, 37, 38, 567, 557, 91, - 466, 89, 494, 883, 470, 467, 1015, 422, 490, 91, - 492, 144, 494, 146, 476, 103, 431, 2, 722, 4, - 140, 513, 381, 515, 9, 10, 72, 119, 72, 495, - 15, 16, 17, 91, 963, 20, 98, 119, 91, 786, - 91, 349, 140, 685, 748, 381, 405, 15, 140, 531, - 138, 13, 450, 554, 758, 470, 848, 145, 550, 16, - 608, 119, 421, 611, 789, 50, 119, 15, 119, 405, - 866, 430, 584, 113, 63, 557, 116, 117, 143, 64, - 495, 629, 584, 481, 143, 421, 731, 140, 26, 490, - 137, 492, 737, 89, 430, 140, 800, 742, 743, 113, - 140, 140, 116, 117, 144, 16, 146, 103, 51, 417, - 53, 54, 55, 56, 450, 51, 608, 425, 454, 611, - 612, 613, 140, 600, 44, 89, 69, 435, 113, 140, - 115, 608, 146, 622, 611, 494, 978, 629, 89, 103, - 622, 623, 138, 635, 636, 481, 638, 140, 484, 145, - 979, 89, 103, 645, 796, 859, 557, 51, 494, 660, - 656, 140, 633, 686, 91, 103, 655, 633, 669, 51, - 729, 656, 868, 655, 138, 58, 59, 669, 874, 16, - 17, 145, 140, 20, 635, 600, 62, 138, 64, 65, - 656, 746, 119, 608, 145, 697, 611, 140, 136, 139, - 138, 119, 113, 848, 142, 116, 117, 145, 89, 139, - 47, 48, 627, 140, 629, 52, 53, 17, 18, 204, - 862, 863, 103, 531, 15, 731, 930, 64, 65, 214, - 215, 737, 738, 144, 18, 146, 742, 743, 114, 115, - 722, 51, 734, 53, 54, 55, 56, 729, 730, 731, - 818, 819, 734, 72, 139, 737, 738, 138, 750, 69, - 742, 743, 139, 137, 145, 15, 748, 749, 730, 735, - 137, 763, 26, 91, 766, 139, 758, 675, 146, 768, - 524, 266, 526, 765, 137, 270, 768, 15, 789, 274, - 275, 92, 37, 38, 279, 777, 778, 789, 14, 284, - 285, 119, 113, 785, 15, 116, 117, 292, 127, 128, - 129, 130, 131, 805, 391, 392, 818, 819, 800, 801, - 735, 62, 140, 64, 65, 15, 140, 143, 729, 51, - 822, 823, 144, 57, 140, 89, 140, 140, 820, 675, - 676, 140, 848, 825, 140, 140, 423, 424, 140, 103, - 72, 140, 337, 338, 339, 340, 341, 342, 343, 344, - 15, 139, 347, 933, 349, 15, 848, 352, 113, 137, - 15, 116, 117, 114, 115, 734, 858, 859, 100, 101, - 15, 15, 136, 140, 138, 867, 9, 10, 142, 871, - 882, 145, 15, 15, 471, 89, 381, 89, 734, 144, - 137, 146, 55, 124, 126, 124, 391, 392, 137, 103, - 61, 103, 89, 64, 65, 252, 253, 254, 255, 820, - 405, 15, 407, 408, 825, 89, 103, 55, 140, 266, - 140, 61, 417, 270, 64, 65, 421, 949, 15, 103, - 425, 749, 140, 140, 138, 430, 138, 949, 930, 140, - 435, 145, 706, 145, 936, 709, 938, 765, 89, 941, - 15, 138, 140, 114, 115, 142, 867, 721, 145, 777, - 778, 963, 103, 140, 138, 113, 142, 785, 116, 117, - 142, 145, 467, 139, 114, 115, 978, 467, 980, 981, - 113, 476, 140, 801, 13, 26, 978, 6, 981, 987, - 63, 64, 65, 721, 980, 207, 144, 138, 146, 494, - 347, 213, 747, 979, 145, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 245, 7, 381, 721, 531, 883, 250, 866, - 858, 114, 115, 700, 391, 392, 261, 906, 89, 26, - 89, 909, 706, 871, 979, 809, 810, 811, 405, 813, - -1, 815, 103, -1, 103, 89, -1, 2, -1, 4, - 5, 6, 419, -1, 421, -1, 423, 424, 13, 103, - -1, 214, 215, 430, 89, -1, -1, 63, 64, 65, - -1, -1, 439, -1, -1, 136, 443, 138, 103, 138, - 447, 142, -1, 450, 145, 452, 145, 454, -1, 978, - -1, -1, 89, -1, 138, 50, -1, 89, 936, 54, - 938, 145, -1, 941, 471, 337, 103, 622, 623, 893, - -1, 103, 978, 138, 481, -1, -1, 484, 114, 115, - 145, 274, 275, 78, -1, 909, -1, 494, 912, -1, - 737, 738, -1, -1, -1, 742, 743, -1, -1, 136, - 655, 138, -1, -1, 511, 142, 138, -1, 145, -1, - 696, -1, -1, 145, 51, 522, 53, 54, 55, 56, - 115, -1, -1, 709, 771, 772, 712, 774, 775, 63, - 64, 65, 69, 540, 541, 721, -1, -1, -1, -1, - 954, 955, 956, 957, 551, 338, 339, 340, 341, -1, - 343, 344, -1, -1, 426, 427, 93, 700, -1, -1, - 906, 704, 99, 909, 700, -1, 912, 722, 914, 63, - 64, 65, -1, 997, -1, 730, 731, -1, 721, 734, - 114, 115, 737, 738, -1, 721, -1, 742, 743, 63, - 64, 65, -1, 748, 749, -1, -1, -1, 63, 64, - 65, 848, -1, 758, 476, 1019, -1, -1, -1, 204, - 765, 483, -1, 768, -1, 408, -1, -1, 964, -1, - 114, 115, 777, 778, -1, -1, -1, -1, 635, 876, - 785, 40, 41, 42, 43, 44, -1, 2, -1, 4, - 114, 115, -1, -1, -1, 800, 801, -1, 13, 114, - 115, 997, -1, 999, -1, 1001, -1, 1003, -1, 666, - 63, 64, 65, -1, -1, -1, -1, -1, 675, 676, - -1, -1, -1, 51, -1, 53, 54, 55, 56, -1, - -1, -1, 1028, -1, 279, 50, 63, 64, 65, 284, - 285, 69, -1, 848, 72, -1, -1, 292, -1, -1, - -1, -1, -1, 858, 859, 827, 828, 893, 303, 895, - -1, 114, 115, 899, -1, 93, 871, -1, -1, 726, - -1, 99, 100, 101, 731, 732, 912, 734, 914, -1, - 737, 738, -1, -1, -1, 742, 743, 114, 115, -1, - -1, -1, 337, -1, -1, -1, -1, 342, 126, 621, - 115, 129, -1, -1, 349, 350, -1, 352, -1, 945, - 946, -1, 140, 906, 771, 772, 909, 774, 775, 912, - 906, 914, -1, 909, -1, 930, 912, 784, 914, -1, - -1, 936, -1, 938, -1, -1, 941, 909, 660, -1, - -1, -1, -1, -1, -1, -1, 391, 392, -1, 985, - -1, -1, -1, 2, 990, 4, 5, 6, 7, -1, - -1, 997, 407, 999, 13, -1, -1, 1003, -1, -1, - -1, 964, 417, 978, 831, -1, -1, -1, 964, 622, - 425, 1017, -1, -1, 841, 842, -1, -1, -1, 204, - 435, 848, 1028, -1, -1, 967, 968, 969, -1, 971, - 972, 50, -1, -1, 997, 54, 999, -1, 1001, -1, - 1003, 997, 655, 999, -1, 1001, -1, 1003, -1, 876, - -1, -1, 467, -1, 72, -1, 883, -1, -1, 78, - 752, 476, -1, -1, -1, 1028, -1, 759, -1, 87, - 88, 72, 1028, -1, 2, 490, 4, 492, 1020, 1021, - 1022, 1023, 72, -1, -1, -1, 87, 88, 780, -1, - 1032, -1, -1, -1, 279, -1, 115, 87, 88, 284, - 285, 51, -1, 53, 54, 55, 56, 292, 126, 127, - 128, 129, 130, 131, 113, -1, 531, 116, 117, 69, - -1, -1, 50, 124, 125, 126, 127, 128, 129, 130, - 131, -1, -1, -1, -1, -1, -1, 127, 128, 129, - 130, 131, 557, 93, 143, 144, -1, 146, -1, 99, - 113, 978, 337, 116, 117, 768, 51, 342, 53, 54, - 55, 56, -1, -1, 349, -1, -1, 352, 51, -1, - 53, 54, 55, 56, 69, -1, 868, 140, -1, -1, - -1, 144, 874, 146, -1, 204, 69, 115, -1, 72, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, -1, -1, 391, 392, 623, -1, - 93, -1, -1, -1, -1, -1, 99, 100, 101, -1, - -1, 51, 407, 53, 54, 55, 56, -1, -1, -1, - -1, -1, 417, -1, -1, -1, -1, -1, -1, 69, - 425, -1, 72, 126, -1, -1, 129, -1, -1, -1, - 435, -1, -1, -1, -1, -1, -1, -1, -1, 142, - 279, -1, -1, 93, -1, 284, 285, -1, -1, 99, - 100, 101, -1, 292, -1, -1, 204, -1, -1, -1, - -1, -1, 467, -1, 303, -1, -1, -1, -1, -1, - 51, 476, 53, 54, 55, 56, 126, -1, -1, 129, - -1, -1, -1, -1, -1, -1, -1, 722, 69, -1, - -1, 72, 142, -1, 729, 730, 731, -1, 337, -1, - -1, -1, 737, 342, -1, -1, -1, 742, 743, -1, - 349, 350, 93, 748, 749, -1, -1, -1, 99, 100, - 101, -1, -1, 758, -1, -1, 531, -1, -1, -1, - 765, 279, -1, -1, -1, -1, 284, 285, -1, -1, - -1, -1, 777, 778, 292, 126, -1, -1, 129, -1, - 785, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 800, 801, -1, 407, -1, - -1, -1, -1, -1, -1, -1, -1, 51, 417, 53, - 54, 55, 56, -1, -1, 820, 425, -1, -1, 337, - 825, -1, -1, -1, 342, 69, 435, -1, 72, -1, - -1, 349, -1, -1, 352, -1, -1, -1, -1, -1, - 84, -1, -1, 848, -1, -1, -1, -1, 623, 93, - -1, -1, -1, 858, 859, 99, 100, 101, 467, -1, - -1, -1, 867, -1, -1, -1, 871, 476, -1, -1, - -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, - -1, 490, 126, 492, -1, 129, -1, -1, 51, 407, - 53, 54, 55, 56, -1, -1, -1, -1, -1, 417, - -1, -1, -1, -1, -1, -1, 69, 425, -1, 72, - -1, -1, -1, -1, -1, -1, -1, 435, -1, -1, - -1, -1, 531, -1, -1, 930, -1, -1, -1, -1, - 93, 936, -1, 938, -1, -1, 941, 100, 101, -1, - -1, -1, -1, -1, -1, -1, -1, 722, 557, 467, - -1, -1, -1, -1, -1, 730, 731, -1, 476, -1, - -1, -1, 737, 126, -1, -1, -1, 742, 743, -1, - -1, -1, -1, 748, 749, -1, -1, -1, -1, -1, - -1, -1, -1, 758, -1, -1, -1, -1, -1, -1, - 765, 0, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 777, 778, 13, 14, 15, 16, 17, 18, - 785, 20, -1, 531, 623, -1, -1, 26, 27, -1, - -1, -1, -1, -1, -1, 800, 801, -1, 37, 38, - -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, + 2, 16, 17, 88, 219, 20, 86, 87, 471, 81, + 2, 27, 4, 5, 6, 27, 14, 9, 10, 21, + 7, 13, 768, 15, 16, 17, 480, 372, 20, 13, + 28, 7, 28, 67, 22, 117, 584, 10, 14, 268, + 302, 4, 15, 2, 306, 4, 73, 74, 26, 54, + 52, 53, 28, 486, 395, 679, 498, 581, 50, 16, + 17, 745, 54, 20, 688, 26, 314, 16, 17, 56, + 15, 20, 64, 16, 17, 581, 945, 20, 584, 50, + 56, 656, 657, 435, 436, 266, 528, 268, 494, 81, + 5, 6, 498, 120, 121, 52, 53, 309, 13, 291, + 536, 37, 38, 52, 53, 21, 22, 923, 110, 52, + 29, 57, 37, 38, 787, 27, 104, 365, 57, 792, + 301, 91, 67, 0, 116, 326, 118, 423, 80, 91, + 18, 427, 20, 90, 430, 215, 425, 5, 6, 54, + 74, 58, 59, 60, 61, 13, 226, 16, 17, 119, + 55, 20, 92, 1022, 140, 451, 50, 119, 136, 89, + 146, 450, 327, 599, 142, 330, 81, 332, 464, 334, + 466, 336, 124, 119, 140, 136, 465, 113, 140, 475, + 116, 117, 121, 58, 59, 474, 54, 121, 104, 89, + 51, 28, 111, 91, 110, 111, 942, 1013, 89, 945, + 392, 113, 89, 103, 116, 117, 119, 287, 144, 119, + 146, 72, 128, 81, 136, 145, 103, 209, 514, 58, + 59, 119, 797, 89, 118, 17, 18, 89, 220, 221, + 140, 311, 144, 119, 146, 89, 142, 309, 138, 100, + 101, 395, 142, 539, 928, 145, 101, 220, 221, 538, + 72, 138, 239, 140, 145, 142, 64, 272, 145, 293, + 89, 276, 768, 239, 266, 126, 268, 301, 302, 142, + 272, 126, 306, 146, 503, 708, 1022, 719, 89, 145, + 272, 435, 436, 145, 276, 486, 89, 314, 280, 281, + 89, 145, 540, 285, 89, 91, 920, 142, 290, 291, + 103, 26, 850, 123, 249, 367, 298, 129, 130, 131, + 89, 55, 718, 719, 51, 272, 145, 309, 55, 276, + 291, 502, 503, 847, 536, 387, 119, 276, 5, 6, + 854, 290, 91, 276, 145, 138, 13, 678, 365, 298, + 776, 91, 145, 91, 850, 546, 145, 55, 293, 89, + 145, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 119, 824, 25, 103, 89, 349, 145, 449, 370, 119, + 372, 344, 345, 346, 347, 367, 140, 54, 103, 544, + 343, 140, 60, 20, 343, 63, 91, 599, 393, 348, + 452, 285, 861, 862, 309, 387, 91, 291, 390, 140, + 392, 393, 319, 395, 81, 145, 57, 276, 136, 754, + 425, 136, 91, 138, 119, 596, 72, 142, 942, 411, + 145, 392, 143, 425, 119, 91, 137, 411, 652, 119, + 108, 655, 784, 425, 349, 450, 942, 789, 790, 945, + 119, 309, 91, 435, 436, 140, 55, 390, 450, 673, + 465, 427, 395, 119, 430, 139, 458, 91, 450, 474, + 452, 453, 534, 465, 536, 140, 920, 729, 425, 461, + 119, 72, 474, 465, 140, 451, 492, 469, 393, 921, + 492, 349, 474, 712, 780, 119, 782, 479, 703, 72, + 466, 1015, 781, 450, 73, 74, 411, 119, 392, 475, + 502, 503, 1026, 51, 705, 91, 140, 708, 465, 511, + 140, 427, 510, 540, 510, 921, 1022, 474, 51, 511, + 865, 866, 703, 538, 140, 393, 140, 599, 520, 609, + 91, 712, 91, 119, 510, 451, 538, 494, 514, 891, + 483, 498, 534, 411, 536, 494, 538, 140, 140, 119, + 466, 91, 511, 545, 140, 51, 501, 98, 119, 475, + 119, 520, 16, 539, 776, 91, 91, 461, 525, 295, + 15, 528, 140, 299, 13, 469, 525, 89, 16, 119, + 63, 538, 390, 72, 15, 479, 143, 395, 143, 140, + 592, 103, 137, 119, 119, 2, 113, 4, 514, 116, + 117, 15, 9, 10, 833, 667, 15, 599, 15, 16, + 17, 113, 628, 20, 116, 117, 628, 16, 140, 534, + 381, 536, 383, 539, 778, 44, 138, 435, 436, 830, + 784, 89, 309, 145, 119, 789, 790, 212, 127, 128, + 129, 130, 131, 50, 219, 103, 139, 139, 15, 994, + 652, 545, 833, 655, 656, 657, 644, 64, 18, 113, + 139, 139, 116, 117, 652, 137, 534, 655, 536, 15, + 137, 673, 349, 139, 666, 667, 678, 679, 146, 681, + 138, 256, 140, 140, 599, 137, 688, 145, 57, 676, + 144, 906, 146, 666, 140, 729, 140, 912, 140, 140, + 676, 699, 15, 699, 776, 92, 698, 769, 793, 116, + 712, 118, 14, 1009, 113, 89, 393, 116, 117, 1008, + 15, 737, 15, 699, 144, 698, 143, 140, 644, 103, + 140, 599, 89, 795, 411, 678, 652, 891, 140, 655, + 140, 140, 435, 436, 140, 144, 103, 146, 26, 15, + 139, 89, 754, 15, 137, 671, 61, 673, 26, 64, + 65, 718, 719, 15, 138, 103, 781, 15, 343, 718, + 15, 145, 137, 499, 467, 468, 140, 769, 840, 781, + 506, 138, 124, 140, 776, 777, 778, 124, 145, 781, + 55, 517, 784, 785, 137, 797, 568, 789, 790, 374, + 138, 15, 209, 795, 796, 807, 782, 145, 810, 114, + 115, 89, 584, 220, 221, 587, 55, 809, 777, 140, + 812, 89, 515, 113, 781, 103, 116, 117, 140, 821, + 822, 833, 140, 140, 140, 103, 140, 829, 139, 812, + 902, 15, 142, 569, 570, 861, 862, 574, 840, 841, + 142, 578, 140, 511, 574, 6, 146, 534, 136, 536, + 138, 776, 140, 865, 866, 272, 782, 145, 136, 276, + 138, 863, 598, 280, 281, 1011, 868, 145, 285, 768, + 1013, 1010, 962, 290, 291, 51, 794, 53, 54, 55, + 56, 298, 251, 7, 574, 470, 471, 61, 939, 891, + 64, 65, 796, 69, 942, 9, 10, 581, 776, 901, + 902, 15, 89, 905, 267, 809, 89, 909, 920, -1, + -1, -1, 599, -1, -1, -1, 103, 821, 822, -1, + 103, -1, -1, -1, -1, 829, 343, 344, 345, 346, + 347, 348, -1, 350, 351, 520, -1, 841, 863, 675, + 114, 115, 527, 868, -1, 89, -1, -1, -1, 975, + 367, 138, -1, 975, 921, 138, -1, 140, 145, 103, + 778, -1, 145, 965, 140, 967, 784, 785, 970, -1, + 387, 789, 790, 390, -1, 392, -1, -1, 395, -1, + 905, 89, 994, 1008, -1, 863, 768, 758, 759, 760, + 868, 762, 728, 764, 138, 103, 1008, 901, 1010, 1011, + -1, 145, 116, -1, -1, 909, 1008, -1, 425, 113, + 746, -1, 116, 117, 26, 89, -1, -1, 435, 436, + -1, -1, -1, 1009, 870, 871, -1, 905, -1, 103, + 138, 768, -1, 450, -1, 452, 453, 145, 768, 143, + 144, 1008, 146, 72, 461, 768, -1, -1, 465, 16, + -1, 51, 469, 53, 54, 55, 56, 474, 87, 88, + -1, 965, 479, 967, 138, -1, 970, -1, 850, 69, + 852, 145, -1, 891, 856, -1, -1, 89, 89, -1, + 665, 784, 785, 1009, -1, -1, 789, 790, -1, 776, + -1, 103, 103, 16, 511, -1, 942, 126, 127, 128, + 129, 130, 131, 520, -1, -1, 220, 221, -1, -1, + -1, -1, 815, 816, -1, 818, 819, -1, 703, -1, + 62, 538, 64, 65, 136, -1, 138, 138, 545, 89, + 142, 9, 10, 145, 145, -1, -1, 15, 16, 17, + 140, -1, 20, 103, 926, 927, 113, -1, -1, 116, + 117, -1, 998, 999, 1000, -1, 1002, 1003, -1, 930, + 931, 932, 933, 945, 26, 947, 280, 281, -1, 47, + 48, -1, 114, 115, 52, 53, 863, 144, 138, 146, + -1, 868, -1, -1, -1, 145, 64, 65, 891, -1, + 113, -1, -1, 116, 117, -1, 1042, 1043, 1044, 1045, + 982, -1, 939, 985, -1, 942, 1052, 26, 945, 939, + 947, 914, 942, -1, 799, 945, 939, 947, 905, 942, + -1, 144, 945, 146, 947, 26, -1, 89, -1, -1, + 344, 345, 346, 347, -1, 1017, 350, 351, 116, 824, + 1022, 103, 1024, 26, -1, -1, 1028, 1018, 89, 666, + 667, 51, -1, 53, 54, 55, 56, -1, 995, 89, + -1, -1, 103, -1, -1, 995, 1048, -1, -1, 69, + 89, -1, 995, 103, 136, -1, 138, 26, 140, -1, + 142, 698, -1, 145, 103, 1022, -1, 1024, 89, 1026, + -1, 1028, 1022, 93, 1024, -1, 1026, 138, 1028, 1022, + 89, 1024, 103, 1026, 145, 1028, 89, -1, 138, -1, + -1, 1048, -1, -1, 103, 145, -1, 136, 1048, 138, + 103, 906, 26, 142, -1, 1048, 145, 912, 51, -1, + 53, 54, 55, 56, -1, 136, -1, 138, -1, 453, + 89, 142, 220, 221, 145, -1, 69, -1, -1, 138, + -1, 89, 769, 136, 103, 138, 145, 140, -1, 142, + 777, 778, 145, -1, 781, 103, -1, 784, 785, 63, + 64, 65, 789, 790, 62, -1, 64, 65, 795, 796, + 258, 259, 260, 261, -1, 89, -1, 136, -1, 138, + -1, 140, 809, 142, 272, 812, 145, -1, 276, 103, + 138, -1, 280, 281, 821, 822, -1, 145, -1, -1, + -1, -1, 829, 63, 64, 65, -1, -1, -1, -1, + 114, 115, -1, 840, 841, -1, 114, 115, -1, 63, + 64, 65, 136, -1, 138, 63, 64, 65, 142, 72, + -1, 145, -1, -1, 113, -1, -1, 116, 117, -1, + -1, 63, 64, 65, 87, 88, -1, -1, 51, -1, + 53, 54, 55, 56, 114, 115, 344, 345, 346, 347, + -1, 140, 350, 351, 891, 144, 69, 146, -1, 72, + 114, 115, -1, -1, 901, 902, 114, 115, -1, -1, + 368, -1, 909, -1, 127, 128, 129, 130, 131, -1, + 93, 379, 114, 115, 63, 64, 65, 100, 101, -1, + -1, -1, 390, 63, 64, 65, -1, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 126, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 72, -1, 425, 965, -1, + 967, -1, 666, 970, -1, 114, 115, 435, 436, -1, + 87, 88, -1, -1, 114, 115, -1, 2, -1, 4, + 5, 6, 450, -1, -1, 453, -1, 113, 13, -1, + 116, 117, -1, -1, 698, 463, -1, 465, -1, 467, + 468, 1008, 63, 64, 65, -1, 474, 124, 125, 126, + 127, 128, 129, 130, 131, 483, -1, -1, 144, 487, + 146, -1, -1, 491, 0, 50, 494, -1, 496, 54, + 498, 51, -1, 53, 54, 55, 56, 13, 14, 15, + 16, 17, 18, -1, 20, -1, -1, 515, -1, 69, + 26, 27, 72, 114, 115, -1, 81, 525, -1, -1, + 528, 37, 38, -1, 40, 41, 42, 43, 44, -1, + 538, -1, -1, 93, 40, 41, 42, 43, 44, 99, + 100, 101, -1, -1, -1, -1, 554, 555, -1, -1, + -1, -1, -1, 118, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 571, -1, -1, 126, -1, 812, 129, + -1, -1, -1, 89, 51, -1, 53, 54, 55, 56, + 140, -1, 590, -1, -1, 593, -1, 103, -1, -1, + -1, -1, 69, -1, -1, 72, -1, 113, -1, -1, + 116, 117, 2, -1, 4, 5, 6, 7, -1, -1, + -1, -1, -1, 13, -1, -1, 93, -1, -1, -1, + 136, 137, 99, 100, 101, -1, 142, 143, 144, 145, + 146, -1, 2, -1, 4, 51, -1, 53, 54, 55, + 56, -1, -1, 13, 209, -1, -1, -1, -1, 126, + 50, -1, 129, 69, 54, -1, -1, 51, 666, 53, + 54, 55, 56, -1, -1, 142, -1, -1, -1, -1, + 678, -1, -1, -1, -1, 69, -1, 93, -1, -1, + 50, 81, 51, 99, 53, 54, 55, 56, -1, -1, + 698, -1, -1, -1, -1, -1, -1, -1, -1, 93, + 69, 709, -1, 72, -1, 99, -1, -1, -1, -1, + 718, 719, -1, -1, -1, 51, 52, -1, 118, 55, + 285, -1, -1, -1, 93, 290, 291, -1, -1, -1, + 99, 100, 101, 298, 70, 71, 72, 73, 74, 75, + 76, 77, 78, -1, 309, 81, 82, -1, 118, 85, + 86, 87, 88, -1, -1, -1, -1, 126, -1, -1, + 129, -1, -1, 99, 100, 773, -1, -1, -1, -1, + 778, 779, -1, 781, -1, -1, 784, 785, 343, -1, + -1, 789, 790, 348, 349, -1, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, -1, 133, 134, -1, + -1, -1, 367, -1, 812, 141, 142, 815, 816, 209, + 818, 819, -1, -1, 51, -1, 53, 54, 55, 56, + 828, -1, 387, -1, -1, -1, -1, 392, 393, -1, + 395, -1, 69, -1, -1, 72, -1, -1, -1, 209, + 848, -1, -1, -1, -1, -1, 411, -1, -1, -1, + -1, 859, -1, -1, -1, -1, 93, -1, -1, -1, + -1, -1, 99, 100, 101, -1, 874, -1, -1, -1, + 435, 436, -1, -1, -1, -1, 884, 885, -1, -1, + -1, -1, -1, 891, -1, 285, -1, 452, -1, 126, + 290, 291, 129, -1, -1, -1, 461, -1, 298, -1, + -1, -1, -1, -1, 469, 142, 914, -1, -1, 309, + -1, -1, -1, 921, 479, 285, -1, -1, -1, -1, + 290, 291, -1, -1, -1, -1, -1, -1, 298, -1, + -1, -1, -1, -1, -1, 51, -1, 53, 54, 55, + 56, -1, -1, 343, -1, -1, 511, -1, 348, 349, + -1, -1, -1, 69, -1, 520, 72, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 367, 84, 534, + -1, 536, -1, 343, -1, -1, -1, 93, 348, 349, + 545, -1, -1, 99, 100, 101, -1, 387, -1, -1, + -1, -1, 392, 393, -1, -1, -1, 367, -1, -1, + 1008, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 126, 411, -1, 129, -1, -1, -1, 387, -1, -1, + -1, -1, 392, -1, -1, 395, -1, -1, -1, -1, + -1, -1, -1, -1, 599, -1, -1, -1, -1, -1, + -1, 411, -1, -1, -1, 2, -1, 4, -1, -1, + -1, -1, 452, -1, -1, -1, -1, -1, -1, -1, + -1, 461, -1, -1, -1, 435, 436, -1, -1, 469, + -1, 72, 73, 74, 75, 76, 77, 78, 79, 479, + 81, 82, 452, -1, -1, -1, 87, 88, -1, -1, + -1, 461, -1, 50, -1, -1, -1, -1, -1, 469, + -1, -1, 667, -1, -1, -1, -1, -1, -1, 479, + -1, 511, -1, -1, -1, -1, -1, -1, -1, -1, + 520, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, -1, -1, -1, 534, -1, 536, -1, -1, -1, + -1, 511, -1, -1, -1, 545, -1, -1, -1, -1, + 520, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 118, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 545, -1, -1, -1, -1, + -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, -1, -1, 87, 88, 599, + -1, -1, -1, -1, 769, -1, -1, -1, -1, -1, + -1, 776, 777, 778, -1, -1, -1, -1, -1, 784, + -1, -1, -1, -1, 789, 790, -1, -1, -1, -1, + 795, 796, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, -1, -1, 809, -1, -1, -1, -1, -1, + -1, -1, 209, -1, -1, -1, 821, 822, -1, -1, + -1, -1, -1, -1, 829, -1, -1, 667, -1, -1, + -1, -1, -1, -1, -1, 840, 841, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 667, 863, -1, + -1, -1, -1, 868, -1, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, + 87, 88, -1, -1, -1, -1, 891, -1, 285, -1, + -1, -1, -1, 290, 291, -1, 901, 902, -1, -1, + 905, 298, -1, -1, 909, -1, -1, -1, -1, -1, + -1, -1, -1, 120, -1, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, -1, -1, -1, -1, 769, + -1, -1, -1, 140, -1, -1, 776, 777, -1, -1, + -1, -1, -1, -1, -1, -1, 343, -1, -1, -1, + -1, 348, -1, -1, -1, 795, 796, -1, -1, 769, + 965, -1, 967, -1, -1, 970, -1, 777, 778, 809, + 367, -1, -1, -1, 784, -1, -1, -1, -1, 789, + 790, 821, 822, -1, -1, 795, 796, -1, -1, 829, + 387, -1, -1, -1, -1, 392, -1, -1, 395, 809, + 840, 841, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 821, 822, -1, -1, -1, -1, -1, -1, 829, + -1, -1, -1, 863, -1, -1, -1, -1, 868, -1, + 840, 841, -1, -1, -1, -1, -1, -1, 435, 436, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 452, -1, -1, -1, -1, + -1, 901, 902, -1, 461, 905, -1, -1, -1, 909, + -1, -1, 469, -1, -1, -1, -1, -1, -1, -1, + -1, 891, 479, -1, -1, -1, -1, -1, -1, -1, + -1, 901, 902, -1, -1, 905, -1, -1, -1, 909, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 511, -1, -1, -1, -1, -1, + -1, -1, -1, 520, -1, 965, -1, 967, -1, -1, + 970, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 545, -1, + -1, -1, -1, -1, -1, 965, -1, 967, -1, -1, + 970, -1, -1, -1, -1, -1, -1, 0, 1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + -1, -1, -1, -1, -1, -1, 19, -1, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, -1, -1, 102, + 667, 104, 105, 106, 107, 108, 109, -1, -1, 112, + 113, -1, -1, 116, 117, -1, -1, 72, 73, 74, + 75, 76, 77, 78, -1, -1, 81, 82, -1, 132, + 133, 134, 87, 88, -1, -1, -1, -1, -1, -1, + -1, 144, -1, 146, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, -1, -1, -1, + -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, -1, -1, 87, 88, -1, + -1, -1, 769, -1, -1, -1, -1, -1, -1, -1, + 777, 778, -1, -1, -1, -1, -1, 784, -1, -1, + -1, -1, 789, 790, -1, -1, -1, -1, 795, 796, + 120, -1, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 809, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 821, 822, -1, -1, -1, -1, + -1, -1, 829, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 840, 841, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 13, 14, 15, 16, 17, 18, -1, 20, -1, + -1, -1, -1, -1, -1, 27, 28, -1, -1, -1, + -1, -1, -1, -1, 891, 37, 38, -1, 40, 41, + 42, 43, 44, -1, 901, 902, -1, -1, -1, -1, + -1, -1, 909, -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 848, -1, -1, -1, -1, -1, -1, - 89, -1, -1, 858, 859, -1, -1, -1, -1, -1, - -1, -1, 867, -1, 103, -1, 871, -1, -1, -1, - -1, -1, -1, -1, 113, 623, -1, 116, 117, -1, - -1, -1, -1, 722, -1, -1, -1, -1, -1, -1, - 729, 730, -1, -1, -1, -1, -1, 136, 137, -1, - -1, -1, -1, 142, 143, 144, 145, 146, -1, 748, - 749, -1, -1, -1, -1, -1, -1, -1, -1, 758, - -1, -1, -1, -1, -1, 930, 765, -1, -1, -1, - -1, 936, -1, 938, -1, -1, 941, -1, 777, 778, - -1, -1, -1, -1, -1, -1, 785, -1, -1, -1, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, -1, -1, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, 98, -1, -1, -1, + -1, 103, -1, -1, -1, -1, -1, -1, 965, -1, + 967, 113, -1, 970, 116, 117, -1, 119, 120, -1, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + -1, -1, 0, -1, -1, 137, 138, 139, 140, -1, + -1, 143, 144, 145, 146, 13, 14, 15, 16, 17, + 18, -1, 20, -1, -1, -1, -1, -1, -1, 27, + 28, -1, -1, -1, -1, -1, -1, -1, -1, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 800, 801, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 722, -1, -1, -1, -1, -1, - -1, 820, 730, 731, -1, -1, 825, -1, -1, 737, - -1, -1, -1, -1, 742, 743, -1, -1, -1, -1, - 748, 749, -1, -1, -1, -1, -1, -1, -1, -1, - 758, -1, -1, -1, -1, -1, -1, 765, -1, 858, - 859, -1, -1, -1, -1, -1, -1, -1, 867, 777, - 778, -1, 871, -1, -1, -1, -1, 785, -1, -1, - -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, - -1, -1, 800, 801, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, 87, - 88, 930, -1, -1, -1, -1, -1, 936, -1, 938, - 848, -1, 941, 72, 73, 74, 75, 76, 77, 78, - 858, 859, 81, 82, -1, -1, -1, -1, 87, 88, - -1, -1, 120, 871, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, -1, -1, -1, -1, -1, -1, - -1, -1, 140, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 930, -1, -1, -1, -1, -1, 936, -1, - 938, 0, 1, 941, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, - 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, - 109, 0, -1, 112, 113, -1, -1, 116, 117, -1, - -1, -1, -1, -1, 13, 14, 15, 16, 17, 18, - -1, 20, -1, 132, 133, 134, -1, -1, 27, 28, - -1, -1, -1, -1, -1, 144, -1, 146, 37, 38, - -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 57, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, -1, -1, 87, 88, - 89, -1, 91, 92, -1, -1, -1, -1, -1, 98, - -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 113, -1, -1, 116, 117, -1, - 119, 120, -1, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, -1, -1, 0, -1, -1, 137, 138, - 139, 140, -1, -1, 143, 144, 145, 146, 13, 14, - 15, 16, 17, 18, -1, 20, -1, -1, -1, -1, - -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, - -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, + 88, 89, -1, -1, 92, -1, -1, -1, -1, -1, + 98, -1, -1, -1, -1, 103, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 113, -1, -1, 116, 117, + -1, -1, 120, -1, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, -1, -1, 0, -1, -1, 137, + 138, 139, 140, -1, 142, 143, 144, 145, 146, 13, + 14, 15, -1, 17, 18, -1, 20, -1, -1, -1, + -1, -1, 26, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 87, 88, 89, -1, 91, 92, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 103, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 113, + -1, -1, 116, 117, -1, 119, 120, -1, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, + 0, -1, 136, 137, 138, -1, 140, -1, -1, 143, + 144, 145, 146, 13, 14, 15, -1, 17, 18, -1, + 20, -1, -1, -1, -1, -1, 26, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - -1, -1, 87, 88, 89, -1, -1, 92, -1, -1, - -1, -1, -1, 98, -1, -1, -1, -1, 103, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 113, -1, - -1, 116, 117, -1, -1, 120, -1, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, -1, -1, 0, - -1, -1, 137, 138, 139, 140, -1, 142, 143, 144, - 145, 146, 13, 14, 15, -1, 17, 18, -1, 20, - -1, -1, -1, -1, -1, 26, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, - 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, -1, -1, 87, 88, 89, -1, - 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 103, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 113, -1, -1, 116, 117, -1, 119, 120, - -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, -1, -1, 0, -1, 136, 137, 138, -1, 140, - -1, -1, 143, 144, 145, 146, 13, 14, 15, -1, - 17, 18, -1, 20, -1, -1, -1, -1, -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, -1, -1, 87, 88, 89, + -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 103, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 113, -1, -1, 116, 117, -1, 119, + 120, -1, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, -1, -1, 0, -1, 136, 137, 138, -1, + 140, -1, -1, 143, 144, 145, 146, 13, 14, 15, + -1, 17, 18, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, - 87, 88, 89, -1, 91, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 103, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 113, -1, -1, 116, - 117, -1, 119, 120, -1, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, -1, -1, 0, -1, 136, - 137, 138, -1, 140, -1, -1, 143, 144, 145, 146, - 13, 14, 15, -1, 17, 18, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, -1, + -1, 87, 88, 89, -1, 91, 92, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 103, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 113, -1, -1, + 116, 117, -1, 119, 120, -1, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, -1, -1, 0, -1, + -1, 137, 138, -1, 140, -1, -1, 143, 144, 145, + 146, 13, 14, 15, -1, 17, 18, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, -1, -1, 87, 88, 89, -1, 91, -1, + -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 113, -1, -1, 116, 117, -1, 119, 120, -1, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, - -1, 0, -1, -1, 137, 138, -1, 140, -1, -1, - 143, 144, 145, 146, 13, 14, 15, -1, 17, 18, - -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, - -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, -1, -1, 87, 88, 89, -1, 91, + 92, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 103, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 113, -1, -1, 116, 117, -1, 119, 120, -1, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + -1, -1, -1, -1, -1, 137, 138, -1, 140, -1, + -1, 143, 144, 145, 146, 1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + -1, -1, 18, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, -1, -1, 87, 88, - 89, -1, 91, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 113, -1, -1, 116, 117, -1, - 119, 120, -1, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, -1, -1, -1, -1, -1, 137, 138, - -1, 140, -1, -1, 143, 144, 145, 146, 1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, -1, -1, 18, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, + 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, + 106, 107, 108, 109, -1, -1, 112, 113, -1, -1, + 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 132, 133, 134, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 144, 1, + 146, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, 17, 18, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, - 93, 94, -1, 96, 97, -1, 99, -1, -1, 102, - -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, - 113, -1, -1, 116, 117, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, - 133, 134, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 144, 1, 146, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, -1, -1, 15, -1, 17, 18, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, + -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, + 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, + 112, 113, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, - 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, - 109, -1, -1, 112, 113, -1, -1, 116, 117, -1, + 132, 133, 134, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 144, 1, 146, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 132, 133, 134, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 144, 1, 146, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, - 15, -1, -1, 18, 19, 20, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, + -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, + -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, + 108, 109, -1, -1, 112, 113, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, - -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, - 105, 106, 107, 108, 109, -1, -1, 112, 113, -1, - -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 144, - 1, 146, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, 18, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, - -1, -1, 93, 94, -1, 96, 97, -1, 99, -1, - -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, - -1, 112, 113, -1, -1, 116, 117, 1, -1, 3, + -1, -1, -1, -1, 132, 133, 134, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 144, 1, 146, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, - -1, 132, 133, 134, -1, 19, -1, 21, 22, 23, - 24, -1, -1, 144, -1, 146, 30, 31, 32, 33, + -1, 15, -1, -1, 18, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, 113, - -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, - 134, -1, -1, 137, -1, -1, -1, -1, -1, -1, - 144, 1, 146, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, -1, 14, 15, -1, -1, -1, 19, - -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 116, 117, 1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, -1, -1, 132, 133, + 134, -1, 19, -1, 21, 22, 23, 24, -1, -1, + 144, -1, 146, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, - -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, 113, -1, -1, 116, 117, 1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, 113, -1, -1, 116, + 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 132, 133, 134, -1, -1, + 137, -1, -1, -1, -1, -1, -1, 144, 1, 146, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - -1, -1, 132, 133, 134, -1, 19, -1, 21, 22, - 23, 24, -1, -1, 144, -1, 146, 30, 31, 32, + -1, 14, 15, -1, -1, -1, 19, -1, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, @@ -4003,7 +4102,7 @@ static const yytype_int16 yycheck[] = 113, -1, -1, 116, 117, 1, -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, 132, 133, 134, -1, 19, -1, 21, 22, 23, 24, -1, - 143, 144, -1, 146, 30, 31, 32, 33, 34, 35, + -1, 144, -1, 146, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, @@ -4023,26 +4122,26 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, - 109, -1, -1, 112, 113, -1, -1, 116, 117, -1, + 109, -1, -1, 112, 113, -1, -1, 116, 117, 1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, -1, -1, 132, 133, 134, -1, 19, -1, 21, + 22, 23, 24, -1, 143, 144, -1, 146, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 132, 133, 134, -1, -1, 137, -1, - -1, -1, -1, -1, -1, 144, 1, 146, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, - 15, -1, -1, -1, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, + -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, + 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, + 112, 113, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, - -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, - 105, 106, 107, 108, 109, -1, -1, 112, 113, -1, - -1, 116, 117, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, -1, -1, 132, 133, 134, - -1, 19, -1, 21, 22, 23, 24, -1, -1, 144, - -1, 146, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, + 132, 133, 134, -1, -1, 137, -1, -1, -1, -1, + -1, -1, 144, 1, 146, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + -1, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, @@ -4054,7 +4153,7 @@ static const yytype_int16 yycheck[] = 11, 12, -1, -1, 132, 133, 134, -1, 19, -1, 21, 22, 23, 24, -1, -1, 144, -1, 146, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, + -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4062,88 +4161,88 @@ static const yytype_int16 yycheck[] = -1, -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, 113, -1, -1, 116, 117, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, 132, 133, 134, -1, 19, -1, 21, 22, 23, 24, -1, -1, 144, -1, 146, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, -1, -1, -1, 102, -1, + 94, -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, 113, - -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, - 134, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 144, -1, 146, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, - -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 116, 117, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, 132, 133, + 134, -1, 19, -1, 21, 22, 23, 24, -1, -1, + 144, -1, 146, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, -1, 133, 134, -1, -1, -1, -1, -1, - -1, 141, 142, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, - -1, 21, 22, 23, 24, -1, 26, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, -1, -1, -1, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, 113, -1, -1, 116, + 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 132, 133, 134, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 144, -1, 146, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, + -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, - 100, 101, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, + 133, 134, -1, -1, -1, -1, -1, -1, 141, 142, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, 19, -1, 21, 22, + 23, 24, -1, 26, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 132, 133, 134, -1, 136, -1, -1, -1, - -1, -1, 142, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, - -1, 21, 22, 23, 24, -1, 26, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, 100, 101, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, - 100, 101, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, + 133, 134, -1, 136, -1, -1, -1, -1, -1, 142, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, 19, -1, 21, 22, + 23, 24, -1, 26, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 132, 133, 134, -1, 136, -1, -1, -1, - -1, -1, 142, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, - -1, 21, 22, 23, 24, -1, 26, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, 100, 101, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, - 100, 101, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, 132, 133, 134, 19, 136, 21, 22, 23, - 24, -1, 142, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, + 133, 134, -1, 136, -1, -1, -1, -1, -1, 142, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, 19, -1, 21, 22, + 23, 24, -1, 26, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, 91, -1, 93, - 94, -1, 96, 97, -1, 99, 100, 101, 102, -1, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, -1, -1, -1, -1, 119, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, 132, 133, - 134, -1, 19, -1, 21, 22, 23, 24, 142, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, 100, 101, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, 132, + 133, 134, 19, 136, 21, 22, 23, 24, -1, 142, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, @@ -4162,537 +4261,541 @@ static const yytype_int16 yycheck[] = 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, + 90, 91, -1, 93, 94, -1, 96, 97, -1, 99, 100, 101, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, 132, 133, 134, 19, -1, 21, 22, 23, - 24, -1, 142, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, 99, 100, 101, 102, -1, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, -1, -1, -1, -1, 132, 133, - 134, 19, -1, 21, 22, 23, 24, -1, 142, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, - -1, 99, 100, 101, 102, -1, 104, 105, 106, 107, - 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 132, 133, 134, -1, -1, -1, - -1, -1, -1, -1, 142, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, - -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, - 78, -1, -1, 81, 82, -1, -1, 85, 86, 87, - 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, - 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, -1, 133, 134, -1, -1, -1, - -1, -1, -1, 141, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, -1, - -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, 78, - -1, -1, 81, 82, -1, -1, 85, 86, 87, 88, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 99, 100, -1, -1, -1, -1, -1, -1, -1, 108, + -1, -1, 112, -1, -1, -1, -1, -1, -1, 119, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, 132, 133, 134, -1, 19, -1, 21, 22, + 23, 24, 142, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, -1, 133, 134, -1, -1, -1, -1, - -1, -1, 141, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, - 50, 51, 52, -1, -1, 55, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, 100, 101, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, 132, + 133, 134, 19, -1, 21, 22, 23, 24, -1, 142, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, - -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, -1, -1, -1, 104, -1, -1, -1, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, 99, 100, 101, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, + -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, -1, -1, -1, -1, 132, 133, 134, 19, -1, + 21, 22, 23, 24, -1, 142, -1, -1, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + -1, -1, 93, 94, -1, 96, 97, -1, 99, 100, + 101, 102, -1, 104, 105, 106, 107, 108, 109, -1, + -1, 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, -1, 133, 134, -1, -1, -1, -1, -1, - -1, 141, 3, 4, 5, 6, 7, 8, 9, 10, + -1, 132, 133, 134, -1, -1, -1, -1, -1, -1, + -1, 142, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, - 51, 52, -1, -1, 55, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, + 51, 52, 53, 54, 55, 56, -1, -1, -1, -1, + -1, -1, 63, -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, 100, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, 133, 134, -1, -1, -1, -1, -1, -1, 141, 3, 4, 5, 6, 7, 8, 9, 10, 11, - -1, -1, -1, -1, -1, -1, -1, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, - -1, 93, 94, -1, 96, 97, -1, -1, -1, -1, - 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, - 112, -1, -1, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, - 132, 21, 22, 23, 24, -1, -1, -1, 140, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, -1, - -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, - -1, 19, 132, 21, 22, 23, 24, -1, -1, -1, - 140, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, - -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, - 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - -1, -1, -1, -1, 132, 133, 134, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 84, -1, -1, -1, -1, -1, 90, -1, - -1, 93, 94, -1, 96, 97, -1, 99, 100, 101, - 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, - 112, -1, -1, -1, -1, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, - 132, 133, 134, 19, -1, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, - -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, + -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, -1, -1, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, 78, -1, -1, 81, + 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, + -1, -1, -1, -1, -1, -1, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, - 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, - 106, 107, 108, 109, -1, -1, 112, -1, -1, -1, - -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, 132, 133, 134, 19, - -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + -1, 133, 134, -1, -1, -1, -1, -1, -1, 141, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, + -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, + -1, -1, 55, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, + -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, + 133, 134, -1, -1, -1, -1, -1, -1, 141, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, + -1, 45, 46, 47, 48, 49, 50, 51, 52, -1, + -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, 78, -1, -1, 81, 82, -1, + -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, - 100, 101, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, 132, 133, 134, 19, -1, 21, 22, 23, - 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, -1, 133, + 134, -1, -1, -1, -1, -1, -1, 141, 3, 4, + 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, 19, -1, 21, 22, 23, 24, + -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, + -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, 99, 100, 101, 102, -1, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, -1, -1, -1, -1, 132, 133, - 134, 19, -1, 21, 22, 23, 24, -1, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, + -1, 96, 97, -1, -1, -1, -1, 102, -1, 104, + 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, 19, 132, 21, 22, + 23, 24, -1, -1, -1, 140, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, - -1, 99, 100, -1, 102, -1, 104, 105, 106, 107, - 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - -1, -1, -1, -1, 132, 133, 134, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, -1, -1, -1, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, -1, -1, -1, -1, -1, -1, 19, 132, + 21, 22, 23, 24, -1, -1, -1, 140, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + -1, -1, 93, 94, -1, 96, 97, -1, 99, -1, + -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, + -1, 112, -1, -1, -1, -1, -1, -1, 3, 4, + 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, + -1, 132, 133, 134, 19, -1, 21, 22, 23, 24, + -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, + -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, + -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, + -1, 96, 97, -1, 99, 100, 101, 102, -1, 104, + 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, + -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, -1, -1, -1, 132, 133, 134, + 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, + 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, + 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, + 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, - -1, 93, 94, -1, 96, 97, -1, -1, 100, 101, - 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, - 112, -1, -1, -1, -1, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, - 132, 133, 134, 19, -1, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, + 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, + 109, -1, -1, 112, -1, -1, -1, -1, -1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, 132, 133, 134, 19, -1, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, - 96, 97, -1, 99, 100, -1, 102, -1, 104, 105, - 106, 107, 108, 109, -1, -1, 112, -1, -1, -1, - -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, 132, 133, 134, 19, - -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, 100, 101, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, 132, + 133, 134, 19, -1, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, -1, - 100, -1, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, 132, 133, 134, 19, -1, 21, 22, 23, - 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, 99, 100, 101, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, + -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, -1, -1, -1, -1, 132, 133, 134, 19, -1, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + -1, -1, 93, 94, -1, 96, 97, -1, 99, 100, + -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, + -1, 112, -1, -1, -1, -1, -1, -1, 3, 4, + 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, + -1, 132, 133, 134, 19, -1, 21, 22, 23, 24, + -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, + -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, 99, -1, -1, 102, -1, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, -1, -1, -1, -1, 132, 133, - 134, 19, -1, 21, 22, 23, 24, -1, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, + -1, 96, 97, -1, -1, 100, 101, 102, -1, 104, + 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, + -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, -1, -1, -1, -1, 132, 133, 134, + 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, + 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, + 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, + 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, + 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, - -1, 99, -1, -1, 102, -1, 104, 105, 106, 107, - 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - -1, -1, -1, -1, 132, 133, 134, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, + 99, 100, -1, 102, -1, 104, 105, 106, 107, 108, + 109, -1, -1, 112, -1, -1, -1, -1, -1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, 132, 133, 134, 19, -1, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, - -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, - 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, - 112, -1, -1, -1, -1, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, - 132, 133, 134, 19, -1, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, -1, 100, -1, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, 132, + 133, 134, 19, -1, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, - 96, 97, -1, 99, -1, -1, 102, -1, 104, 105, - 106, 107, 108, 109, -1, -1, 112, -1, -1, -1, - -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, 132, 133, 134, 19, - -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, - 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, + -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, -1, -1, -1, -1, 132, 133, 134, 19, -1, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + -1, -1, 93, 94, -1, 96, 97, -1, 99, -1, + -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, + -1, 112, -1, -1, -1, -1, -1, -1, 3, 4, + 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, + -1, 132, 133, 134, 19, -1, 21, 22, 23, 24, + -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, + -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, 99, - -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, 132, 133, 134, 19, -1, 21, 22, 23, - 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, + -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, + -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, + 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, + -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, -1, -1, -1, -1, 132, 133, 134, + 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, + 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, + 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, + 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, + 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, -1, -1, -1, 102, -1, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, -1, -1, -1, -1, 132, 133, - 134, 19, -1, 21, 22, 23, 24, -1, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, + 99, -1, -1, 102, -1, 104, 105, 106, 107, 108, + 109, -1, -1, 112, -1, -1, -1, -1, -1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, 132, 133, 134, 19, -1, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, - -1, -1, -1, -1, 102, -1, 104, 105, 106, 107, - 108, 109, -1, -1, 112, -1, -1, -1, -1, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - -1, -1, -1, -1, 132, 133, 134, 19, -1, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, 99, -1, -1, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, 132, + 133, 134, 19, -1, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, - -1, 93, 94, -1, 96, 97, -1, -1, -1, -1, - 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, - 112, -1, -1, -1, -1, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, - 132, 133, 134, 19, -1, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, -1, -1, -1, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, + -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, -1, -1, -1, -1, 132, 133, 134, 19, -1, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + -1, -1, 93, 94, -1, 96, 97, -1, -1, -1, + -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, + -1, 112, -1, -1, -1, -1, -1, -1, 3, 4, + 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, + -1, 132, 133, 134, 19, -1, 21, 22, 23, 24, + -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, + -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 87, -1, -1, 90, -1, -1, 93, 94, -1, - 96, 97, -1, -1, -1, -1, 102, -1, 104, 105, - 106, 107, 108, 109, -1, -1, 112, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, -1, -1, -1, 19, 132, 21, 22, 23, - 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, + -1, 96, 97, -1, -1, -1, -1, 102, -1, 104, + 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, + -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, -1, -1, -1, -1, 132, 133, 134, + 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, + 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, + 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, + 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 87, -1, + -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, + -1, -1, -1, 102, -1, 104, 105, 106, 107, 108, + 109, -1, -1, 112, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, 19, 132, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, 99, -1, -1, 102, -1, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - -1, -1, -1, -1, -1, -1, -1, 19, 132, 21, - 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, 99, -1, -1, 102, -1, 104, 105, 106, + 107, 108, 109, -1, -1, 112, -1, -1, 3, 4, + 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, + -1, -1, -1, -1, 19, 132, 21, 22, 23, 24, + -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, + 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, + -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, + 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, + -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 90, -1, - -1, 93, 94, -1, 96, 97, -1, 99, -1, -1, - 102, -1, 104, 105, 106, 107, 108, 109, -1, -1, - 112, -1, -1, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, - 132, 21, 22, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, - -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, - 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + -1, -1, -1, -1, -1, 90, -1, -1, 93, 94, + -1, 96, 97, -1, 99, -1, -1, 102, -1, 104, + 105, 106, 107, 108, 109, -1, -1, 112, -1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + -1, -1, -1, -1, -1, -1, 19, 132, 21, 22, + 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, + -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, + 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, + 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 90, -1, -1, + 93, 94, -1, 96, 97, -1, -1, -1, -1, 102, + -1, 104, 105, 106, 107, 108, 109, -1, -1, 112, + -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, + 11, -1, -1, -1, -1, -1, -1, -1, 19, 132, + 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, + 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, + -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, + 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, + -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, 96, 97, -1, -1, - -1, -1, 102, -1, 104, 105, 106, 107, 108, 109, - -1, -1, 112, -1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, - -1, 19, 132, 21, 22, 23, 24, -1, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, + -1, -1, 93, 94, -1, 96, 97, -1, -1, -1, + -1, 102, -1, 104, 105, 106, 107, 108, 109, -1, + -1, 112, -1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, + 19, 132, 21, 22, 23, 24, -1, -1, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, + 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, + 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, + 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 90, -1, -1, 93, 94, -1, 96, 97, - -1, -1, -1, -1, 102, -1, 104, 105, 106, 107, - 108, 109, -1, -1, 112, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, - -1, -1, -1, 19, 132, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, + -1, 90, -1, -1, 93, 94, -1, 96, 97, -1, + -1, -1, -1, 102, -1, 104, 105, 106, 107, 108, + 109, -1, -1, 112, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, + -1, -1, 19, 132, 21, 22, 23, 24, -1, -1, + -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, + -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, + 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 90, -1, -1, 93, 94, -1, - 96, 97, -1, -1, -1, -1, 102, -1, 104, 105, - 106, 107, 108, 109, -1, -1, 112, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, - -1, -1, -1, -1, -1, 19, 132, 21, 22, 23, - 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, - 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, - 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, - -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, + -1, -1, -1, 90, -1, -1, 93, 94, -1, 96, + 97, -1, 51, 52, -1, 102, 55, 104, 105, 106, + 107, 108, 109, -1, -1, 112, -1, -1, -1, -1, + -1, 70, 71, 72, 73, 74, 75, 76, 77, 78, + -1, -1, 81, 82, -1, 132, 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 90, -1, -1, 93, - 94, -1, 96, 97, -1, 51, 52, -1, 102, 55, - 104, 105, 106, 107, 108, 109, -1, -1, 112, -1, - -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, - 76, 77, 78, -1, -1, 81, 82, -1, 132, 85, - 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, + 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, 133, 134, 51, - 52, -1, -1, 55, -1, 141, 142, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, - 72, 73, 74, 75, 76, 77, 78, -1, -1, 81, - 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, + -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, -1, 133, 134, 51, 52, -1, -1, + 55, -1, 141, 142, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, + 75, 76, 77, 78, -1, -1, 81, 82, -1, -1, + 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, -1, 133, 134, + 51, 52, -1, -1, 55, -1, 141, 142, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, + 71, 72, 73, 74, 75, 76, 77, 78, -1, -1, + 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - -1, 133, 134, 51, 52, -1, -1, 55, -1, 141, - 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, - 78, -1, -1, 81, 82, -1, -1, 85, 86, 87, - 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, -1, 133, 134, 51, 52, -1, - -1, 55, -1, 141, 142, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, - 74, 75, 76, 77, 78, -1, -1, 81, 82, -1, - -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, + -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, -1, 133, 134, 51, 52, -1, -1, 55, -1, + 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, + 77, 78, -1, -1, 81, 82, -1, -1, 85, 86, + 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, -1, 133, - 134, 51, 52, -1, -1, 55, -1, 141, 142, -1, + -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, -1, 133, 134, 51, 52, + -1, -1, 55, -1, 141, 142, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, - -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, + 133, 134, 51, 52, -1, -1, 55, -1, 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, -1, 133, 134, 51, 52, -1, -1, 55, - -1, 141, 142, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, - 76, 77, 78, -1, -1, 81, 82, -1, -1, 85, - 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, + -1, 70, 71, 72, 73, 74, 75, 76, 77, 78, + -1, -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, 133, 134, 51, - 52, -1, -1, 55, -1, 141, 142, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, - 72, 73, 74, 75, 76, 77, 78, -1, -1, 81, - 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, + 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, -1, 133, 134, 51, 52, -1, -1, + 55, -1, 141, 142, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, + 75, 76, 77, 78, -1, -1, 81, 82, -1, -1, + 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - -1, 133, 134, 51, 52, -1, -1, 55, -1, 141, - 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, - 78, -1, -1, 81, 82, -1, -1, 85, 86, 87, - 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, -1, 133, 134, + 51, 52, -1, -1, 55, -1, 141, 142, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, + 71, 72, 73, 74, 75, 76, 77, 78, -1, -1, + 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, -1, 133, 134, 51, 52, -1, - -1, 55, -1, 141, 142, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, - 74, 75, 76, 77, 78, -1, -1, 81, 82, -1, - -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, -1, 133, - 134, 51, 52, -1, -1, 55, -1, 141, 142, -1, + -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, -1, 133, 134, 51, 52, -1, -1, 55, -1, + 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, + 77, 78, -1, -1, 81, 82, -1, -1, 85, 86, + 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, - -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, -1, 133, 134, 51, 52, + -1, -1, 55, -1, 141, 142, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, -1, 133, 134, 51, 52, -1, -1, 55, - -1, 141, 142, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, - 76, 77, 78, -1, -1, 81, 82, -1, -1, 85, - 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, + 133, 134, 51, 52, -1, -1, 55, -1, 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, 133, 134, 51, - 52, -1, -1, 55, -1, 141, 142, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, - 72, 73, 74, 75, 76, 77, 78, -1, -1, 81, - 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, + -1, 70, 71, 72, 73, 74, 75, 76, 77, 78, + -1, -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - -1, 133, 134, 51, 52, -1, -1, 55, -1, 141, - 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, - 78, -1, -1, 81, 82, -1, -1, 85, 86, 87, - 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, -1, 133, 134, 51, 52, -1, -1, + 55, -1, 141, 142, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, + 75, 76, 77, 78, -1, -1, 81, 82, -1, -1, + 85, 86, 87, 88, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, -1, 133, 134, 51, 52, -1, - -1, 55, -1, 141, 142, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, - 74, 75, 76, 77, 78, -1, -1, 81, 82, -1, - -1, 85, 86, 87, 88, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, -1, 133, 134, + 51, 52, -1, -1, 55, -1, 141, 142, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, + 71, 72, 73, 74, 75, 76, 77, 78, -1, -1, + 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, -1, 133, - 134, 51, 52, -1, -1, 55, -1, 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 70, 71, 72, 73, 74, 75, 76, 77, 78, -1, - -1, 81, 82, -1, -1, 85, 86, 87, 88, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, - 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, -1, 133, 134, 51, 52, -1, -1, 55, -1, + 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, + 77, 78, -1, -1, 81, 82, -1, -1, 85, 86, + 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, -1, 133, 134, 51, 52, -1, -1, 55, - -1, 141, 142, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, - 76, 77, 78, -1, -1, 81, 82, -1, -1, 85, - 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, 133, 134, -1, - -1, -1, -1, -1, -1, 141, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, -1, - -1, 87, 88, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, -1, -1, 87, 88, + -1, -1, -1, -1, -1, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, -1, 133, 134, 51, 52, + -1, -1, 55, -1, 141, 142, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 120, -1, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, -1, -1, -1, - -1, 120, -1, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, -1, 146, 87, 88, + -1, 44, -1, -1, -1, -1, -1, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 44, + 133, 134, -1, -1, -1, -1, -1, -1, 141, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, -1, -1, 87, 88, -1, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 120, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, + -1, -1, -1, -1, -1, 120, -1, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, 87, 88, -1, + -1, -1, -1, -1, -1, 120, -1, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 120, -1, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, -1, -1, -1, -1, -1, -1, -1, - 120, 140, 122, 123, 124, 125, 126, 127, 128, 129, + 120, 146, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, -1, -1, -1, -1, -1, -1, 140, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, 87, 88, -1, -1, @@ -4704,27 +4807,27 @@ static const yytype_int16 yycheck[] = 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, -1, -1, -1, -1, -1, -1, 140, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, -1, -1, 87, 88, -1, -1, -1, 92, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, -1, -1, 87, 88, -1, -1, -1, + 83, 84, -1, -1, 87, 88, -1, -1, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 87, 88, -1, -1, -1, 92, -1, -1, -1, -1, -1, -1, -1, -1, 120, -1, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 120, -1, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, -1, -1, 87, 88, 72, 73, 74, - 75, 76, 77, 78, 79, -1, 81, 82, -1, -1, - -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 72, 73, 74, - 75, 76, 77, 78, -1, -1, 81, 82, -1, -1, - -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 120, 140, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 87, 88, -1, -1, -1, 92, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, -1, -1, 87, 88, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 120, -1, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 120, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 72, + 73, 74, 75, 76, 77, 78, -1, -1, 81, 82, + -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131 + -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -4738,103 +4841,105 @@ static const yytype_int16 yystos[] = 58, 59, 60, 63, 66, 67, 69, 70, 71, 90, 93, 94, 96, 97, 99, 102, 104, 105, 106, 107, 108, 109, 112, 132, 133, 134, 150, 151, 152, 157, - 159, 161, 163, 164, 167, 168, 170, 171, 172, 174, - 175, 184, 198, 219, 240, 241, 251, 252, 253, 257, - 258, 259, 265, 266, 267, 269, 270, 271, 272, 273, - 274, 309, 322, 152, 21, 22, 30, 31, 32, 39, - 51, 55, 69, 87, 90, 93, 132, 176, 177, 198, - 219, 271, 274, 309, 177, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 45, - 46, 47, 48, 49, 50, 51, 52, 55, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 81, 82, 85, - 86, 87, 88, 99, 100, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 133, 134, 141, 142, 178, - 182, 183, 273, 303, 199, 90, 161, 162, 175, 219, - 271, 272, 274, 162, 205, 207, 69, 90, 168, 175, - 219, 224, 271, 274, 33, 34, 35, 36, 48, 49, - 50, 51, 55, 104, 178, 179, 180, 267, 113, 116, - 117, 144, 146, 162, 261, 262, 263, 315, 319, 320, - 321, 51, 99, 100, 101, 133, 167, 184, 190, 193, - 196, 253, 306, 308, 190, 190, 142, 187, 188, 191, - 192, 322, 187, 191, 142, 316, 320, 179, 153, 136, - 184, 219, 184, 55, 1, 93, 155, 156, 157, 169, - 170, 322, 200, 202, 185, 196, 306, 322, 184, 305, - 306, 322, 90, 140, 174, 219, 271, 274, 203, 53, - 54, 56, 63, 108, 178, 268, 62, 64, 65, 114, - 115, 254, 255, 63, 254, 63, 254, 63, 254, 61, - 254, 58, 59, 163, 184, 184, 315, 321, 40, 41, - 42, 43, 44, 37, 38, 28, 238, 119, 140, 93, - 99, 171, 119, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 87, 88, 120, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 89, - 103, 138, 145, 313, 89, 313, 314, 26, 136, 242, - 253, 91, 91, 187, 191, 242, 161, 51, 55, 176, - 58, 59, 123, 275, 89, 138, 313, 214, 304, 215, - 89, 145, 312, 154, 155, 55, 16, 220, 319, 119, - 89, 138, 313, 91, 91, 220, 162, 162, 55, 89, - 138, 313, 25, 108, 140, 264, 315, 113, 263, 20, - 245, 319, 57, 307, 184, 184, 184, 92, 140, 194, - 195, 322, 307, 194, 195, 84, 189, 190, 196, 306, - 322, 190, 161, 315, 317, 161, 158, 136, 155, 89, - 313, 91, 157, 169, 143, 315, 321, 317, 157, 317, - 139, 195, 318, 321, 195, 318, 137, 318, 55, 171, - 172, 173, 140, 89, 138, 313, 51, 53, 54, 55, - 56, 69, 72, 93, 99, 100, 101, 126, 129, 142, - 236, 278, 279, 282, 283, 284, 285, 287, 288, 289, - 290, 292, 293, 294, 297, 298, 299, 300, 301, 63, - 254, 256, 260, 261, 62, 255, 63, 63, 63, 61, - 72, 72, 152, 162, 162, 162, 162, 157, 161, 161, - 239, 99, 163, 184, 196, 197, 169, 140, 174, 140, - 159, 160, 163, 175, 184, 186, 197, 219, 274, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 51, 52, 55, 182, 187, - 310, 311, 189, 51, 52, 55, 182, 187, 310, 51, - 55, 310, 244, 243, 160, 184, 186, 160, 186, 98, - 165, 212, 276, 211, 51, 55, 176, 310, 189, 310, - 154, 161, 216, 217, 15, 13, 247, 322, 155, 16, - 51, 55, 189, 51, 55, 155, 27, 221, 319, 221, - 51, 55, 189, 51, 55, 209, 181, 155, 245, 184, - 196, 15, 260, 184, 184, 316, 99, 184, 193, 306, - 184, 308, 317, 143, 315, 195, 195, 317, 143, 179, - 150, 137, 186, 317, 157, 201, 306, 171, 173, 51, - 55, 189, 51, 55, 57, 119, 291, 287, 204, 184, - 140, 302, 322, 51, 140, 302, 140, 286, 184, 140, - 286, 51, 140, 286, 51, 63, 155, 261, 184, 184, - 80, 124, 230, 231, 322, 184, 195, 317, 173, 140, - 44, 119, 44, 89, 138, 313, 316, 91, 91, 187, - 191, 139, 91, 91, 188, 191, 188, 191, 230, 230, - 166, 319, 162, 154, 139, 15, 317, 142, 277, 287, - 178, 184, 197, 248, 322, 18, 223, 322, 17, 222, - 223, 91, 91, 139, 91, 91, 223, 206, 208, 139, - 162, 179, 137, 15, 195, 220, 260, 184, 194, 306, - 137, 317, 318, 139, 51, 99, 225, 292, 233, 316, - 29, 111, 237, 51, 279, 284, 301, 285, 290, 297, - 299, 292, 294, 299, 51, 292, 137, 227, 229, 232, - 278, 280, 281, 284, 292, 293, 295, 296, 299, 301, - 154, 99, 184, 173, 157, 184, 51, 55, 189, 51, - 55, 57, 121, 160, 186, 163, 186, 165, 91, 160, - 186, 160, 186, 165, 242, 238, 154, 155, 230, 213, - 319, 15, 84, 287, 154, 319, 218, 92, 249, 322, - 155, 14, 250, 322, 162, 15, 91, 15, 155, 155, - 221, 184, 155, 195, 140, 289, 317, 140, 143, 144, - 154, 155, 302, 140, 286, 140, 286, 140, 286, 140, - 286, 286, 233, 233, 90, 219, 140, 302, 302, 140, - 228, 219, 140, 228, 140, 228, 15, 184, 139, 184, - 184, 160, 186, 15, 137, 155, 154, 317, 317, 15, - 277, 90, 175, 219, 271, 274, 220, 155, 220, 15, - 15, 210, 223, 245, 246, 226, 140, 99, 51, 234, - 235, 288, 15, 137, 292, 299, 292, 292, 124, 124, - 55, 89, 280, 284, 140, 227, 228, 296, 299, 292, - 295, 299, 292, 137, 15, 154, 55, 89, 138, 313, - 155, 155, 155, 292, 292, 140, 289, 140, 316, 286, - 140, 286, 286, 286, 51, 55, 302, 140, 228, 140, - 228, 140, 228, 140, 228, 228, 15, 51, 55, 189, - 51, 55, 247, 222, 15, 140, 292, 140, 235, 292, - 292, 299, 292, 292, 139, 292, 286, 228, 140, 228, - 228, 228, 292, 228 + 159, 160, 162, 163, 164, 167, 168, 171, 172, 174, + 175, 176, 178, 179, 188, 202, 219, 240, 241, 251, + 252, 253, 257, 258, 259, 265, 266, 267, 269, 270, + 271, 272, 273, 274, 310, 323, 152, 21, 22, 30, + 31, 32, 39, 51, 55, 69, 87, 90, 93, 132, + 163, 164, 180, 181, 202, 219, 271, 274, 310, 181, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 45, 46, 47, 48, 49, 50, + 51, 52, 55, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 81, 82, 85, 86, 87, 88, 99, 100, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 133, 134, 141, 142, 182, 186, 187, 273, 304, 203, + 90, 162, 166, 179, 188, 219, 271, 272, 274, 166, + 209, 211, 69, 90, 172, 179, 219, 224, 271, 274, + 33, 34, 35, 36, 48, 49, 50, 51, 55, 104, + 182, 183, 184, 267, 113, 116, 117, 144, 146, 166, + 261, 262, 263, 316, 320, 321, 322, 51, 99, 100, + 101, 133, 171, 188, 194, 197, 200, 253, 307, 309, + 194, 194, 142, 191, 192, 195, 196, 323, 191, 195, + 142, 317, 321, 183, 153, 136, 188, 219, 188, 55, + 1, 93, 155, 156, 157, 173, 174, 323, 204, 206, + 189, 200, 307, 323, 188, 306, 307, 323, 90, 140, + 178, 219, 271, 274, 207, 53, 54, 56, 63, 108, + 182, 268, 62, 64, 65, 114, 115, 254, 255, 63, + 254, 63, 254, 63, 254, 61, 254, 58, 59, 167, + 188, 188, 316, 322, 40, 41, 42, 43, 44, 92, + 37, 38, 51, 53, 54, 55, 56, 69, 72, 93, + 99, 100, 101, 126, 129, 142, 277, 278, 279, 280, + 283, 284, 285, 286, 288, 289, 290, 291, 293, 294, + 295, 298, 299, 300, 301, 302, 277, 278, 28, 238, + 119, 140, 93, 99, 175, 119, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 87, + 88, 92, 120, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 89, 103, 138, 145, 314, 89, 314, + 315, 26, 136, 242, 253, 91, 91, 191, 195, 242, + 162, 51, 55, 180, 58, 59, 277, 123, 275, 89, + 138, 314, 218, 305, 89, 145, 313, 154, 155, 55, + 16, 220, 320, 119, 89, 138, 314, 91, 91, 220, + 166, 166, 55, 89, 138, 314, 25, 108, 140, 264, + 316, 113, 263, 20, 245, 320, 57, 308, 188, 188, + 188, 92, 140, 198, 199, 323, 308, 198, 199, 84, + 193, 194, 200, 307, 323, 194, 162, 316, 318, 162, + 158, 136, 155, 89, 314, 91, 157, 173, 143, 316, + 322, 318, 157, 318, 139, 199, 319, 322, 199, 319, + 137, 319, 55, 175, 176, 177, 140, 89, 138, 314, + 142, 236, 288, 63, 254, 256, 260, 261, 62, 255, + 63, 63, 63, 61, 72, 72, 152, 166, 166, 166, + 166, 157, 172, 179, 162, 162, 57, 119, 292, 84, + 288, 119, 154, 188, 140, 303, 323, 51, 140, 303, + 320, 140, 287, 188, 140, 287, 51, 140, 287, 51, + 119, 154, 239, 99, 167, 188, 200, 201, 173, 140, + 178, 140, 160, 161, 167, 179, 188, 190, 201, 219, + 274, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 172, 179, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 51, + 52, 55, 186, 191, 311, 312, 193, 51, 52, 55, + 186, 191, 311, 51, 55, 311, 244, 243, 161, 188, + 190, 161, 190, 98, 169, 216, 276, 215, 51, 55, + 180, 311, 193, 311, 154, 162, 165, 15, 13, 247, + 323, 155, 16, 51, 55, 193, 51, 55, 155, 27, + 221, 320, 221, 51, 55, 193, 51, 55, 213, 185, + 155, 245, 188, 200, 15, 260, 188, 188, 317, 99, + 188, 197, 307, 188, 309, 318, 143, 316, 199, 199, + 318, 143, 183, 150, 137, 190, 318, 157, 205, 307, + 175, 177, 51, 55, 193, 51, 55, 288, 208, 63, + 155, 261, 188, 188, 51, 99, 225, 293, 318, 318, + 188, 15, 51, 280, 285, 302, 286, 291, 298, 300, + 293, 295, 300, 51, 293, 188, 15, 80, 124, 230, + 231, 323, 188, 199, 318, 177, 140, 44, 119, 44, + 89, 138, 314, 317, 91, 91, 191, 195, 139, 91, + 91, 192, 195, 192, 195, 230, 230, 170, 320, 166, + 154, 139, 15, 318, 182, 188, 201, 248, 323, 18, + 223, 323, 17, 222, 223, 91, 91, 139, 91, 91, + 223, 210, 212, 139, 166, 183, 137, 15, 199, 220, + 260, 188, 198, 307, 137, 318, 319, 139, 233, 317, + 29, 111, 237, 137, 140, 290, 318, 140, 44, 303, + 140, 287, 140, 287, 140, 287, 140, 287, 287, 44, + 227, 229, 232, 279, 281, 282, 285, 293, 294, 296, + 297, 300, 302, 154, 99, 188, 177, 157, 188, 51, + 55, 193, 51, 55, 57, 121, 161, 190, 167, 190, + 169, 91, 161, 190, 161, 190, 169, 242, 238, 154, + 155, 230, 217, 320, 15, 92, 249, 323, 155, 14, + 250, 323, 166, 15, 91, 15, 155, 155, 221, 188, + 155, 199, 143, 144, 154, 155, 226, 140, 99, 188, + 293, 300, 293, 293, 188, 233, 233, 90, 219, 140, + 303, 303, 140, 228, 219, 140, 228, 140, 228, 15, + 188, 139, 188, 188, 161, 190, 15, 137, 155, 154, + 90, 179, 219, 271, 274, 220, 155, 220, 15, 15, + 214, 223, 245, 246, 51, 234, 235, 289, 15, 137, + 293, 293, 140, 290, 287, 140, 287, 287, 287, 124, + 124, 55, 89, 281, 285, 140, 227, 228, 297, 300, + 293, 296, 300, 293, 137, 15, 55, 89, 138, 314, + 155, 155, 155, 140, 317, 140, 293, 140, 293, 51, + 55, 303, 140, 228, 140, 228, 140, 228, 140, 228, + 228, 51, 55, 193, 51, 55, 247, 222, 15, 235, + 293, 287, 293, 300, 293, 293, 139, 228, 140, 228, + 228, 228, 293, 228 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -4843,63 +4948,64 @@ static const yytype_int16 yyr1[] = 0, 147, 149, 148, 150, 151, 151, 151, 151, 152, 153, 152, 154, 155, 156, 156, 156, 156, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 159, 159, 159, 159, 159, 159, 159, - 159, 160, 160, 160, 161, 161, 161, 161, 161, 161, - 162, 163, 163, 164, 164, 166, 165, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, - 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 171, 171, 172, 172, 173, 173, 174, 174, - 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 176, 176, 177, 177, 177, - 178, 178, 178, 178, 178, 179, 179, 180, 181, 180, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 185, 185, 185, 185, 186, 186, 187, - 187, 188, 188, 189, 189, 189, 189, 189, 190, 190, - 190, 190, 190, 192, 191, 193, 194, 194, 195, 195, - 196, 196, 196, 196, 197, 197, 197, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 199, 198, 200, 201, - 198, 202, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 203, 204, 198, 198, 198, - 205, 206, 198, 207, 208, 198, 198, 198, 209, 210, - 198, 211, 198, 212, 213, 198, 214, 198, 215, 216, - 198, 217, 218, 198, 198, 198, 198, 198, 219, 220, - 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, - 225, 225, 225, 225, 225, 225, 225, 225, 226, 225, - 227, 227, 227, 227, 228, 228, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 230, 230, 232, 231, 231, 231, 233, 233, 234, - 234, 235, 235, 236, 236, 237, 237, 239, 238, 240, - 240, 240, 240, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 243, 242, 244, 242, 245, 246, 246, 247, - 247, 248, 248, 248, 249, 249, 250, 250, 251, 251, - 251, 251, 252, 252, 253, 253, 253, 253, 254, 254, - 255, 256, 255, 255, 255, 257, 257, 258, 258, 259, - 260, 260, 261, 261, 262, 262, 263, 264, 263, 265, - 265, 266, 266, 267, 268, 268, 268, 268, 268, 268, - 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, - 271, 272, 272, 273, 273, 273, 273, 273, 273, 273, - 273, 274, 274, 275, 276, 275, 277, 277, 277, 278, - 279, 279, 280, 280, 281, 281, 282, 282, 283, 283, - 284, 284, 285, 285, 285, 285, 286, 286, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 288, 288, 288, 288, 288, 289, 289, - 290, 291, 290, 292, 292, 293, 294, 295, 296, 296, - 297, 297, 298, 298, 299, 299, 300, 300, 301, 302, - 302, 303, 304, 303, 305, 305, 306, 306, 307, 307, - 308, 308, 308, 308, 309, 309, 309, 310, 310, 310, - 310, 311, 311, 311, 312, 312, 313, 313, 314, 314, - 315, 315, 316, 316, 317, 318, 318, 318, 319, 319, - 319, 320, 321, 321, 322 + 157, 157, 157, 157, 159, 159, 159, 159, 160, 160, + 160, 160, 160, 160, 160, 160, 161, 161, 161, 162, + 162, 162, 162, 162, 162, 163, 165, 164, 166, 167, + 167, 168, 168, 170, 169, 171, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 172, 172, 173, 173, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 175, 175, 176, 176, 177, 177, 178, 178, 178, 178, + 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, + 179, 179, 179, 180, 180, 181, 181, 181, 182, 182, + 182, 182, 182, 183, 183, 184, 185, 184, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 189, 189, 189, 189, 190, + 190, 191, 191, 192, 192, 193, 193, 193, 193, 193, + 194, 194, 194, 194, 194, 196, 195, 197, 198, 198, + 199, 199, 200, 200, 200, 200, 201, 201, 201, 202, + 202, 202, 202, 202, 202, 202, 202, 202, 203, 202, + 204, 205, 202, 206, 202, 202, 202, 202, 202, 202, + 202, 202, 202, 202, 202, 202, 202, 207, 208, 202, + 202, 202, 209, 210, 202, 211, 212, 202, 202, 202, + 213, 214, 202, 215, 202, 216, 217, 202, 218, 202, + 202, 202, 202, 202, 202, 202, 219, 220, 220, 220, + 221, 221, 222, 222, 223, 223, 224, 224, 225, 225, + 225, 225, 225, 225, 225, 225, 226, 225, 227, 227, + 227, 227, 228, 228, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 230, + 230, 232, 231, 231, 231, 233, 233, 234, 234, 235, + 235, 236, 236, 237, 237, 239, 238, 240, 240, 240, + 240, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 243, 242, 244, 242, 245, 246, 246, 247, 247, 248, + 248, 248, 249, 249, 250, 250, 251, 251, 251, 251, + 252, 252, 253, 253, 253, 253, 254, 254, 255, 256, + 255, 255, 255, 257, 257, 258, 258, 259, 260, 260, + 261, 261, 262, 262, 263, 264, 263, 265, 265, 266, + 266, 267, 268, 268, 268, 268, 268, 268, 269, 269, + 270, 270, 270, 270, 271, 271, 271, 271, 271, 272, + 272, 273, 273, 273, 273, 273, 273, 273, 273, 274, + 274, 275, 276, 275, 277, 277, 278, 278, 279, 280, + 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, + 285, 286, 286, 286, 286, 287, 287, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 288, 288, 289, 289, 289, 289, 289, 290, 290, 291, + 292, 291, 293, 293, 294, 295, 296, 297, 297, 298, + 298, 299, 299, 300, 300, 301, 301, 302, 303, 303, + 304, 305, 304, 306, 306, 307, 307, 308, 308, 309, + 309, 309, 309, 310, 310, 310, 311, 311, 311, 311, + 312, 312, 312, 313, 313, 314, 314, 315, 315, 316, + 316, 317, 317, 318, 319, 319, 319, 320, 320, 320, + 321, 322, 322, 323 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -4908,63 +5014,64 @@ static const yytype_int8 yyr2[] = 0, 2, 0, 2, 2, 1, 1, 3, 2, 1, 0, 5, 4, 2, 1, 1, 3, 2, 0, 4, 2, 3, 3, 3, 3, 3, 4, 1, 3, 3, - 3, 3, 1, 3, 3, 6, 5, 5, 5, 5, - 3, 1, 3, 1, 1, 3, 3, 3, 2, 1, - 1, 1, 1, 1, 4, 0, 5, 2, 3, 4, - 5, 4, 5, 2, 2, 2, 2, 2, 1, 3, - 1, 3, 1, 2, 3, 5, 2, 4, 2, 4, - 1, 3, 1, 3, 2, 3, 1, 2, 1, 4, - 3, 3, 3, 3, 2, 1, 1, 4, 3, 3, - 3, 3, 2, 1, 1, 1, 1, 2, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, + 6, 5, 5, 5, 5, 3, 1, 3, 1, 1, + 3, 3, 3, 2, 1, 2, 0, 5, 1, 1, + 1, 1, 4, 0, 5, 2, 3, 4, 5, 4, + 5, 2, 2, 2, 2, 2, 1, 3, 1, 3, + 1, 2, 3, 5, 2, 4, 2, 4, 1, 3, + 1, 3, 2, 3, 1, 2, 1, 4, 3, 3, + 3, 3, 2, 1, 1, 4, 3, 3, 3, 3, + 2, 1, 1, 1, 1, 2, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, + 6, 5, 5, 5, 5, 4, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 4, 4, 2, 2, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 2, 2, 3, 3, 3, 3, 6, 6, + 4, 6, 4, 6, 1, 1, 2, 4, 2, 1, + 3, 3, 3, 1, 1, 1, 2, 2, 4, 2, + 1, 2, 2, 4, 1, 0, 2, 2, 2, 1, + 1, 3, 1, 2, 3, 4, 3, 4, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 0, 0, 5, 0, 3, 3, 3, 2, 3, 3, + 1, 2, 4, 3, 2, 1, 2, 0, 0, 5, + 6, 6, 0, 0, 7, 0, 0, 7, 5, 4, + 0, 0, 9, 0, 6, 0, 0, 8, 0, 5, + 4, 4, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 5, 1, 2, 1, 1, 1, 4, + 6, 3, 5, 2, 4, 1, 0, 4, 4, 2, + 2, 1, 2, 0, 6, 8, 4, 6, 4, 3, + 6, 2, 4, 6, 2, 4, 2, 4, 1, 1, + 1, 0, 4, 1, 4, 1, 4, 1, 3, 1, + 1, 4, 1, 3, 3, 0, 5, 2, 4, 5, + 5, 2, 4, 4, 3, 3, 3, 2, 1, 4, + 0, 5, 0, 5, 5, 1, 1, 6, 1, 1, + 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 2, 3, 1, 2, 1, 0, + 4, 1, 2, 2, 3, 2, 3, 1, 1, 2, + 1, 2, 1, 2, 1, 0, 4, 2, 3, 1, + 4, 2, 1, 1, 1, 1, 1, 2, 2, 3, + 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 3, 6, 5, 5, 5, 5, 4, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, - 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, - 6, 6, 1, 1, 2, 4, 2, 1, 3, 3, - 3, 1, 1, 1, 2, 2, 4, 2, 1, 2, - 2, 4, 1, 0, 2, 2, 2, 1, 1, 3, - 1, 2, 3, 4, 3, 4, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, - 5, 0, 3, 3, 3, 2, 3, 3, 1, 2, - 4, 3, 2, 1, 2, 0, 0, 5, 6, 6, - 0, 0, 7, 0, 0, 7, 5, 4, 0, 0, - 9, 0, 6, 0, 0, 8, 0, 5, 0, 0, - 7, 0, 0, 9, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 5, 1, 2, 1, 1, - 1, 4, 6, 3, 5, 2, 4, 1, 0, 4, - 4, 2, 2, 1, 2, 0, 6, 8, 4, 6, - 4, 3, 6, 2, 4, 6, 2, 4, 2, 4, - 1, 1, 1, 0, 4, 1, 4, 1, 4, 1, - 3, 1, 1, 4, 1, 3, 3, 0, 5, 2, - 4, 5, 5, 2, 4, 4, 3, 3, 3, 2, - 1, 4, 0, 5, 0, 5, 5, 1, 1, 6, - 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 2, 3, 1, 2, - 1, 0, 4, 1, 2, 2, 3, 2, 3, 1, - 1, 2, 1, 2, 1, 2, 1, 0, 4, 2, - 3, 1, 4, 2, 1, 1, 1, 1, 1, 2, - 2, 3, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 4, 3, 3, 2, 2, - 2, 1, 2, 1, 1, 3, 1, 3, 1, 1, - 2, 1, 4, 2, 2, 1, 2, 0, 6, 8, - 4, 6, 4, 6, 2, 4, 6, 2, 4, 2, - 4, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 1, 3, 2, 2, 2, 1, 3, - 1, 3, 1, 1, 2, 1, 1, 1, 2, 2, - 1, 1, 0, 4, 1, 2, 1, 3, 1, 2, - 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 0, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 2, 0 + 1, 0, 0, 4, 3, 3, 1, 2, 2, 2, + 1, 2, 1, 1, 3, 1, 3, 1, 1, 2, + 1, 4, 2, 2, 1, 2, 0, 6, 8, 4, + 6, 4, 6, 2, 4, 6, 2, 4, 2, 4, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 1, 3, 2, 2, 2, 1, 3, 1, + 3, 1, 1, 2, 1, 1, 1, 2, 2, 1, + 1, 0, 4, 1, 2, 1, 3, 1, 2, 3, + 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 0, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 2, 0 }; @@ -5666,86 +5773,86 @@ yyreduce: switch (yyn) { case 2: -#line 1508 "mrbgems/mruby-compiler/core/parse.y" +#line 1534 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_BEG; if (!p->locals) p->locals = cons(0,0); } -#line 5675 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5782 "mrbgems/mruby-compiler/core/y.tab.c" break; case 3: -#line 1513 "mrbgems/mruby-compiler/core/parse.y" +#line 1539 "mrbgems/mruby-compiler/core/parse.y" { p->tree = new_scope(p, (yyvsp[0].nd)); NODE_LINENO(p->tree, (yyvsp[0].nd)); } -#line 5684 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5791 "mrbgems/mruby-compiler/core/y.tab.c" break; case 4: -#line 1520 "mrbgems/mruby-compiler/core/parse.y" +#line 1546 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 5692 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5799 "mrbgems/mruby-compiler/core/y.tab.c" break; case 5: -#line 1526 "mrbgems/mruby-compiler/core/parse.y" +#line 1552 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, 0); } -#line 5700 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5807 "mrbgems/mruby-compiler/core/y.tab.c" break; case 6: -#line 1530 "mrbgems/mruby-compiler/core/parse.y" +#line 1556 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 5709 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5816 "mrbgems/mruby-compiler/core/y.tab.c" break; case 7: -#line 1535 "mrbgems/mruby-compiler/core/parse.y" +#line 1561 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 5717 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5824 "mrbgems/mruby-compiler/core/y.tab.c" break; case 8: -#line 1539 "mrbgems/mruby-compiler/core/parse.y" +#line 1565 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, 0); } -#line 5725 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5832 "mrbgems/mruby-compiler/core/y.tab.c" break; case 10: -#line 1546 "mrbgems/mruby-compiler/core/parse.y" +#line 1572 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = local_switch(p); nvars_block(p); } -#line 5734 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5841 "mrbgems/mruby-compiler/core/y.tab.c" break; case 11: -#line 1551 "mrbgems/mruby-compiler/core/parse.y" +#line 1577 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "BEGIN not supported"); local_resume(p, (yyvsp[-3].nd)); nvars_unnest(p); (yyval.nd) = 0; } -#line 5745 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5852 "mrbgems/mruby-compiler/core/y.tab.c" break; case 12: -#line 1563 "mrbgems/mruby-compiler/core/parse.y" +#line 1589 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-2].nd)) { (yyval.nd) = new_rescue(p, (yyvsp[-3].nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); @@ -5767,1332 +5874,1450 @@ yyreduce: } } } -#line 5771 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5878 "mrbgems/mruby-compiler/core/y.tab.c" break; case 13: -#line 1587 "mrbgems/mruby-compiler/core/parse.y" +#line 1613 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 5779 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5886 "mrbgems/mruby-compiler/core/y.tab.c" break; case 14: -#line 1593 "mrbgems/mruby-compiler/core/parse.y" +#line 1619 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, 0); } -#line 5787 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5894 "mrbgems/mruby-compiler/core/y.tab.c" break; case 15: -#line 1597 "mrbgems/mruby-compiler/core/parse.y" +#line 1623 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 5796 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5903 "mrbgems/mruby-compiler/core/y.tab.c" break; case 16: -#line 1602 "mrbgems/mruby-compiler/core/parse.y" +#line 1628 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 5804 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5911 "mrbgems/mruby-compiler/core/y.tab.c" break; case 17: -#line 1606 "mrbgems/mruby-compiler/core/parse.y" +#line 1632 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); } -#line 5812 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5919 "mrbgems/mruby-compiler/core/y.tab.c" break; case 18: -#line 1611 "mrbgems/mruby-compiler/core/parse.y" +#line 1637 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 5818 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5925 "mrbgems/mruby-compiler/core/y.tab.c" break; case 19: -#line 1612 "mrbgems/mruby-compiler/core/parse.y" +#line 1638 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_alias(p, (yyvsp[-2].id), (yyvsp[0].id)); } -#line 5826 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5933 "mrbgems/mruby-compiler/core/y.tab.c" break; case 20: -#line 1616 "mrbgems/mruby-compiler/core/parse.y" +#line 1642 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 5834 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5941 "mrbgems/mruby-compiler/core/y.tab.c" break; case 21: -#line 1620 "mrbgems/mruby-compiler/core/parse.y" +#line 1646 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 5842 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5949 "mrbgems/mruby-compiler/core/y.tab.c" break; case 22: -#line 1624 "mrbgems/mruby-compiler/core/parse.y" +#line 1650 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_unless(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 5850 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5957 "mrbgems/mruby-compiler/core/y.tab.c" break; case 23: -#line 1628 "mrbgems/mruby-compiler/core/parse.y" +#line 1654 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_while(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } -#line 5858 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5965 "mrbgems/mruby-compiler/core/y.tab.c" break; case 24: -#line 1632 "mrbgems/mruby-compiler/core/parse.y" +#line 1658 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_until(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } -#line 5866 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5973 "mrbgems/mruby-compiler/core/y.tab.c" break; case 25: -#line 1636 "mrbgems/mruby-compiler/core/parse.y" +#line 1662 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 5874 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5981 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 26: +#line 1666 "mrbgems/mruby-compiler/core/parse.y" + { + yyerror(p, "END not supported"); + (yyval.nd) = new_postexe(p, (yyvsp[-1].nd)); + } +#line 5990 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 28: +#line 1672 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); + } +#line 5998 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 29: +#line 1676 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); + } +#line 6006 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 30: +#line 1680 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); + } +#line 6014 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 26: -#line 1640 "mrbgems/mruby-compiler/core/parse.y" + case 31: +#line 1684 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(p, "END not supported"); - (yyval.nd) = new_postexe(p, (yyvsp[-1].nd)); + (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 5883 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6022 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 28: -#line 1646 "mrbgems/mruby-compiler/core/parse.y" + case 34: +#line 1692 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); + void_expr_error(p, (yyvsp[-2].nd)); + (yyval.nd) = new_asgn(p, (yyvsp[0].nd), (yyvsp[-2].nd)); } -#line 5891 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6031 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 29: -#line 1650 "mrbgems/mruby-compiler/core/parse.y" + case 35: +#line 1697 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); + void_expr_error(p, (yyvsp[-2].nd)); + (yyval.nd) = new_masgn(p, (yyvsp[0].nd), (yyvsp[-2].nd)); } -#line 5899 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6040 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 30: -#line 1654 "mrbgems/mruby-compiler/core/parse.y" + case 36: +#line 1702 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); + (yyval.nd) = new_asgn(p, (yyvsp[0].nd), (yyvsp[-2].nd)); } -#line 5907 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6048 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 31: -#line 1658 "mrbgems/mruby-compiler/core/parse.y" + case 37: +#line 1706 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); + (yyval.nd) = new_masgn(p, (yyvsp[0].nd), (yyvsp[-2].nd)); } -#line 5915 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6056 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 33: -#line 1665 "mrbgems/mruby-compiler/core/parse.y" + case 38: +#line 1712 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 5923 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6064 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 34: -#line 1669 "mrbgems/mruby-compiler/core/parse.y" + case 39: +#line 1716 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 5931 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6072 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 35: -#line 1673 "mrbgems/mruby-compiler/core/parse.y" + case 40: +#line 1720 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), MRB_QSYM(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 5939 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6080 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 36: -#line 1677 "mrbgems/mruby-compiler/core/parse.y" + case 41: +#line 1724 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 5947 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6088 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 37: -#line 1681 "mrbgems/mruby-compiler/core/parse.y" + case 42: +#line 1728 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 5955 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6096 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 38: -#line 1685 "mrbgems/mruby-compiler/core/parse.y" + case 43: +#line 1732 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "constant re-assignment"); (yyval.nd) = 0; } -#line 5964 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6105 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 39: -#line 1690 "mrbgems/mruby-compiler/core/parse.y" + case 44: +#line 1737 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 5972 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6113 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 40: -#line 1694 "mrbgems/mruby-compiler/core/parse.y" + case 45: +#line 1741 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_begin(p, 0); } -#line 5981 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6122 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 42: -#line 1702 "mrbgems/mruby-compiler/core/parse.y" + case 47: +#line 1749 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 5989 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6130 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 45: -#line 1711 "mrbgems/mruby-compiler/core/parse.y" + case 50: +#line 1758 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 5997 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6138 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 46: -#line 1715 "mrbgems/mruby-compiler/core/parse.y" + case 51: +#line 1762 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6005 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6146 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 47: -#line 1719 "mrbgems/mruby-compiler/core/parse.y" + case 52: +#line 1766 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 6013 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6154 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 48: -#line 1723 "mrbgems/mruby-compiler/core/parse.y" + case 53: +#line 1770 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 6021 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6162 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 50: -#line 1730 "mrbgems/mruby-compiler/core/parse.y" + case 55: +#line 1778 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_def(p, (yyvsp[0].id), nint(p->cmdarg_stack), local_switch(p)); + p->cmdarg_stack = 0; + p->in_def++; + nvars_block(p); + } +#line 6173 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 56: +#line 1787 "mrbgems/mruby-compiler/core/parse.y" + { + p->lstate = EXPR_FNAME; + } +#line 6181 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 57: +#line 1791 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_sdef(p, (yyvsp[-3].nd), (yyvsp[0].id), nint(p->cmdarg_stack), local_switch(p)); + p->cmdarg_stack = 0; + p->in_def++; + p->in_single++; + nvars_block(p); + p->lstate = EXPR_ENDFN; /* force for args */ + } +#line 6194 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 58: +#line 1802 "mrbgems/mruby-compiler/core/parse.y" { if (!(yyvsp[0].nd)) (yyval.nd) = new_nil(p); else { (yyval.nd) = (yyvsp[0].nd); } } -#line 6032 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6205 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 54: -#line 1744 "mrbgems/mruby-compiler/core/parse.y" + case 62: +#line 1816 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 6040 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6213 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 55: -#line 1750 "mrbgems/mruby-compiler/core/parse.y" + case 63: +#line 1822 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); } -#line 6049 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6222 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 56: -#line 1757 "mrbgems/mruby-compiler/core/parse.y" + case 64: +#line 1829 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p, (yyvsp[-2].nd), (yyvsp[-1].nd)); local_unnest(p); nvars_unnest(p); } -#line 6059 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6232 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 57: -#line 1765 "mrbgems/mruby-compiler/core/parse.y" + case 65: +#line 1837 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6067 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6240 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 58: -#line 1769 "mrbgems/mruby-compiler/core/parse.y" + case 66: +#line 1841 "mrbgems/mruby-compiler/core/parse.y" { args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_fcall(p, (yyvsp[-2].id), (yyvsp[-1].nd)); } -#line 6076 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6249 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 59: -#line 1774 "mrbgems/mruby-compiler/core/parse.y" + case 67: +#line 1846 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 6084 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6257 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 60: -#line 1778 "mrbgems/mruby-compiler/core/parse.y" + case 68: +#line 1850 "mrbgems/mruby-compiler/core/parse.y" { args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); } -#line 6093 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6266 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 61: -#line 1783 "mrbgems/mruby-compiler/core/parse.y" + case 69: +#line 1855 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 6101 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6274 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 62: -#line 1787 "mrbgems/mruby-compiler/core/parse.y" + case 70: +#line 1859 "mrbgems/mruby-compiler/core/parse.y" { args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), tCOLON2); } -#line 6110 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6283 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 63: -#line 1792 "mrbgems/mruby-compiler/core/parse.y" + case 71: +#line 1864 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 6118 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6291 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 64: -#line 1796 "mrbgems/mruby-compiler/core/parse.y" + case 72: +#line 1868 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 6126 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6299 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 65: -#line 1800 "mrbgems/mruby-compiler/core/parse.y" + case 73: +#line 1872 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_return(p, ret_args(p, (yyvsp[0].nd))); } -#line 6134 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6307 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 66: -#line 1804 "mrbgems/mruby-compiler/core/parse.y" + case 74: +#line 1876 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_break(p, ret_args(p, (yyvsp[0].nd))); } -#line 6142 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6315 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 67: -#line 1808 "mrbgems/mruby-compiler/core/parse.y" + case 75: +#line 1880 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_next(p, ret_args(p, (yyvsp[0].nd))); } -#line 6150 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6323 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 68: -#line 1814 "mrbgems/mruby-compiler/core/parse.y" + case 76: +#line 1886 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 6158 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6331 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 69: -#line 1818 "mrbgems/mruby-compiler/core/parse.y" + case 77: +#line 1890 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 6166 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6339 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 71: -#line 1825 "mrbgems/mruby-compiler/core/parse.y" + case 79: +#line 1897 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 6174 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6347 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 72: -#line 1831 "mrbgems/mruby-compiler/core/parse.y" + case 80: +#line 1903 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 6182 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6355 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 73: -#line 1835 "mrbgems/mruby-compiler/core/parse.y" + case 81: +#line 1907 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(push((yyvsp[-1].nd),(yyvsp[0].nd))); } -#line 6190 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6363 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 74: -#line 1839 "mrbgems/mruby-compiler/core/parse.y" + case 82: +#line 1911 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6198 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6371 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 75: -#line 1843 "mrbgems/mruby-compiler/core/parse.y" + case 83: +#line 1915 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-4].nd), (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6206 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6379 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 76: -#line 1847 "mrbgems/mruby-compiler/core/parse.y" + case 84: +#line 1919 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2((yyvsp[-1].nd), new_nil(p)); } -#line 6214 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6387 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 77: -#line 1851 "mrbgems/mruby-compiler/core/parse.y" + case 85: +#line 1923 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-3].nd), new_nil(p), (yyvsp[0].nd)); } -#line 6222 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6395 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 78: -#line 1855 "mrbgems/mruby-compiler/core/parse.y" + case 86: +#line 1927 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2(0, (yyvsp[0].nd)); } -#line 6230 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6403 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 79: -#line 1859 "mrbgems/mruby-compiler/core/parse.y" + case 87: +#line 1931 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6238 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6411 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 80: -#line 1863 "mrbgems/mruby-compiler/core/parse.y" + case 88: +#line 1935 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2(0, new_nil(p)); } -#line 6246 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6419 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 81: -#line 1867 "mrbgems/mruby-compiler/core/parse.y" + case 89: +#line 1939 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_nil(p), (yyvsp[0].nd)); } -#line 6254 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6427 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 83: -#line 1874 "mrbgems/mruby-compiler/core/parse.y" + case 91: +#line 1946 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-1].nd), NULL); } -#line 6262 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6435 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 84: -#line 1880 "mrbgems/mruby-compiler/core/parse.y" + case 92: +#line 1952 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[-1].nd)); } -#line 6270 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6443 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 85: -#line 1884 "mrbgems/mruby-compiler/core/parse.y" + case 93: +#line 1956 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[-1].nd)); } -#line 6278 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6451 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 86: -#line 1890 "mrbgems/mruby-compiler/core/parse.y" + case 94: +#line 1962 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 6286 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6459 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 87: -#line 1894 "mrbgems/mruby-compiler/core/parse.y" + case 95: +#line 1966 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 6294 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6467 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 88: -#line 1900 "mrbgems/mruby-compiler/core/parse.y" + case 96: +#line 1972 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 6302 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6475 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 89: -#line 1904 "mrbgems/mruby-compiler/core/parse.y" + case 97: +#line 1976 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_QSYM(aref), (yyvsp[-1].nd), '.'); } -#line 6310 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6483 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 90: -#line 1908 "mrbgems/mruby-compiler/core/parse.y" + case 98: +#line 1980 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6318 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6491 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 91: -#line 1912 "mrbgems/mruby-compiler/core/parse.y" + case 99: +#line 1984 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 6326 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6499 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 92: -#line 1916 "mrbgems/mruby-compiler/core/parse.y" + case 100: +#line 1988 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6334 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6507 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 93: -#line 1920 "mrbgems/mruby-compiler/core/parse.y" + case 101: +#line 1992 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 6344 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6517 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 94: -#line 1926 "mrbgems/mruby-compiler/core/parse.y" + case 102: +#line 1998 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 6354 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6527 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 95: -#line 1932 "mrbgems/mruby-compiler/core/parse.y" + case 103: +#line 2004 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 6363 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6536 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 96: -#line 1939 "mrbgems/mruby-compiler/core/parse.y" + case 104: +#line 2011 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 6371 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6544 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 97: -#line 1943 "mrbgems/mruby-compiler/core/parse.y" + case 105: +#line 2015 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_QSYM(aref), (yyvsp[-1].nd), '.'); } -#line 6379 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6552 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 98: -#line 1947 "mrbgems/mruby-compiler/core/parse.y" + case 106: +#line 2019 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6387 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6560 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 99: -#line 1951 "mrbgems/mruby-compiler/core/parse.y" + case 107: +#line 2023 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 6395 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6568 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 100: -#line 1955 "mrbgems/mruby-compiler/core/parse.y" + case 108: +#line 2027 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6403 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6576 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 101: -#line 1959 "mrbgems/mruby-compiler/core/parse.y" + case 109: +#line 2031 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 6413 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6586 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 102: -#line 1965 "mrbgems/mruby-compiler/core/parse.y" + case 110: +#line 2037 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 6423 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6596 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 103: -#line 1971 "mrbgems/mruby-compiler/core/parse.y" + case 111: +#line 2043 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 6432 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6605 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 104: -#line 1976 "mrbgems/mruby-compiler/core/parse.y" + case 112: +#line 2048 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "can't assign to numbered parameter"); } -#line 6440 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6613 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 105: -#line 1982 "mrbgems/mruby-compiler/core/parse.y" + case 113: +#line 2054 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "class/module name must be CONSTANT"); } -#line 6448 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6621 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 107: -#line 1989 "mrbgems/mruby-compiler/core/parse.y" + case 115: +#line 2061 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((node*)1, nsym((yyvsp[0].id))); } -#line 6456 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6629 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 108: -#line 1993 "mrbgems/mruby-compiler/core/parse.y" + case 116: +#line 2065 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((node*)0, nsym((yyvsp[0].id))); } -#line 6464 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6637 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 109: -#line 1997 "mrbgems/mruby-compiler/core/parse.y" + case 117: +#line 2069 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[-2].nd)); (yyval.nd) = cons((yyvsp[-2].nd), nsym((yyvsp[0].id))); } -#line 6473 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6646 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 113: -#line 2007 "mrbgems/mruby-compiler/core/parse.y" + case 121: +#line 2079 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); } -#line 6482 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6655 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 114: -#line 2012 "mrbgems/mruby-compiler/core/parse.y" + case 122: +#line 2084 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); } -#line 6491 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6664 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 117: -#line 2023 "mrbgems/mruby-compiler/core/parse.y" + case 125: +#line 2095 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_undef(p, (yyvsp[0].id)); } -#line 6499 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6672 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 118: -#line 2026 "mrbgems/mruby-compiler/core/parse.y" + case 126: +#line 2098 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 6505 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6678 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 119: -#line 2027 "mrbgems/mruby-compiler/core/parse.y" + case 127: +#line 2099 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), nsym((yyvsp[0].id))); } -#line 6513 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6686 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 120: -#line 2032 "mrbgems/mruby-compiler/core/parse.y" + case 128: +#line 2104 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(or); } -#line 6519 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6692 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 121: -#line 2033 "mrbgems/mruby-compiler/core/parse.y" + case 129: +#line 2105 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(xor); } -#line 6525 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6698 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 122: -#line 2034 "mrbgems/mruby-compiler/core/parse.y" + case 130: +#line 2106 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(and); } -#line 6531 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6704 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 123: -#line 2035 "mrbgems/mruby-compiler/core/parse.y" + case 131: +#line 2107 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(cmp); } -#line 6537 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6710 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 124: -#line 2036 "mrbgems/mruby-compiler/core/parse.y" + case 132: +#line 2108 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(eq); } -#line 6543 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6716 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 125: -#line 2037 "mrbgems/mruby-compiler/core/parse.y" + case 133: +#line 2109 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(eqq); } -#line 6549 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6722 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 126: -#line 2038 "mrbgems/mruby-compiler/core/parse.y" + case 134: +#line 2110 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(match); } -#line 6555 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6728 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 127: -#line 2039 "mrbgems/mruby-compiler/core/parse.y" + case 135: +#line 2111 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(nmatch); } -#line 6561 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6734 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 128: -#line 2040 "mrbgems/mruby-compiler/core/parse.y" + case 136: +#line 2112 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(gt); } -#line 6567 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6740 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 129: -#line 2041 "mrbgems/mruby-compiler/core/parse.y" + case 137: +#line 2113 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(ge); } -#line 6573 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6746 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 130: -#line 2042 "mrbgems/mruby-compiler/core/parse.y" + case 138: +#line 2114 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(lt); } -#line 6579 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6752 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 131: -#line 2043 "mrbgems/mruby-compiler/core/parse.y" + case 139: +#line 2115 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(le); } -#line 6585 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6758 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 132: -#line 2044 "mrbgems/mruby-compiler/core/parse.y" + case 140: +#line 2116 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(neq); } -#line 6591 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6764 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 133: -#line 2045 "mrbgems/mruby-compiler/core/parse.y" + case 141: +#line 2117 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(lshift); } -#line 6597 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6770 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 134: -#line 2046 "mrbgems/mruby-compiler/core/parse.y" + case 142: +#line 2118 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(rshift); } -#line 6603 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6776 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 135: -#line 2047 "mrbgems/mruby-compiler/core/parse.y" + case 143: +#line 2119 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(add); } -#line 6609 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6782 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 136: -#line 2048 "mrbgems/mruby-compiler/core/parse.y" + case 144: +#line 2120 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(sub); } -#line 6615 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6788 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 137: -#line 2049 "mrbgems/mruby-compiler/core/parse.y" + case 145: +#line 2121 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(mul); } -#line 6621 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6794 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 138: -#line 2050 "mrbgems/mruby-compiler/core/parse.y" + case 146: +#line 2122 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(mul); } -#line 6627 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6800 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 139: -#line 2051 "mrbgems/mruby-compiler/core/parse.y" + case 147: +#line 2123 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(div); } -#line 6633 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6806 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 140: -#line 2052 "mrbgems/mruby-compiler/core/parse.y" + case 148: +#line 2124 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(mod); } -#line 6639 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6812 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 141: -#line 2053 "mrbgems/mruby-compiler/core/parse.y" + case 149: +#line 2125 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(pow); } -#line 6645 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6818 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 142: -#line 2054 "mrbgems/mruby-compiler/core/parse.y" + case 150: +#line 2126 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(pow); } -#line 6651 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6824 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 143: -#line 2055 "mrbgems/mruby-compiler/core/parse.y" + case 151: +#line 2127 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(not); } -#line 6657 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6830 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 144: -#line 2056 "mrbgems/mruby-compiler/core/parse.y" + case 152: +#line 2128 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(neg); } -#line 6663 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6836 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 145: -#line 2057 "mrbgems/mruby-compiler/core/parse.y" + case 153: +#line 2129 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(plus); } -#line 6669 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6842 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 146: -#line 2058 "mrbgems/mruby-compiler/core/parse.y" + case 154: +#line 2130 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(minus); } -#line 6675 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6848 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 147: -#line 2059 "mrbgems/mruby-compiler/core/parse.y" + case 155: +#line 2131 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(aref); } -#line 6681 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6854 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 148: -#line 2060 "mrbgems/mruby-compiler/core/parse.y" + case 156: +#line 2132 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(aset); } -#line 6687 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6860 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 149: -#line 2061 "mrbgems/mruby-compiler/core/parse.y" + case 157: +#line 2133 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = MRB_QSYM(tick); } -#line 6693 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6866 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 190: -#line 2079 "mrbgems/mruby-compiler/core/parse.y" + case 198: +#line 2151 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6701 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6874 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 191: -#line 2083 "mrbgems/mruby-compiler/core/parse.y" + case 199: +#line 2155 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6709 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6882 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 192: -#line 2087 "mrbgems/mruby-compiler/core/parse.y" + case 200: +#line 2159 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), MRB_QSYM(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6717 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6890 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 193: -#line 2091 "mrbgems/mruby-compiler/core/parse.y" + case 201: +#line 2163 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6725 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6898 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 194: -#line 2095 "mrbgems/mruby-compiler/core/parse.y" + case 202: +#line 2167 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6733 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6906 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 195: -#line 2099 "mrbgems/mruby-compiler/core/parse.y" + case 203: +#line 2171 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6741 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6914 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 196: -#line 2103 "mrbgems/mruby-compiler/core/parse.y" + case 204: +#line 2175 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "constant re-assignment"); (yyval.nd) = new_begin(p, 0); } -#line 6750 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6923 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 197: -#line 2108 "mrbgems/mruby-compiler/core/parse.y" + case 205: +#line 2180 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "constant re-assignment"); (yyval.nd) = new_begin(p, 0); } -#line 6759 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6932 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 198: -#line 2113 "mrbgems/mruby-compiler/core/parse.y" + case 206: +#line 2185 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_begin(p, 0); } -#line 6768 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6941 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 199: -#line 2118 "mrbgems/mruby-compiler/core/parse.y" + case 207: +#line 2190 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6776 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6949 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 200: -#line 2122 "mrbgems/mruby-compiler/core/parse.y" + case 208: +#line 2194 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6784 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6957 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 201: -#line 2126 "mrbgems/mruby-compiler/core/parse.y" + case 209: +#line 2198 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "+", (yyvsp[0].nd)); } -#line 6792 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6965 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 202: -#line 2130 "mrbgems/mruby-compiler/core/parse.y" + case 210: +#line 2202 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "-", (yyvsp[0].nd)); } -#line 6800 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6973 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 203: -#line 2134 "mrbgems/mruby-compiler/core/parse.y" + case 211: +#line 2206 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "*", (yyvsp[0].nd)); } -#line 6808 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6981 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 204: -#line 2138 "mrbgems/mruby-compiler/core/parse.y" + case 212: +#line 2210 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "/", (yyvsp[0].nd)); } -#line 6816 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6989 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 205: -#line 2142 "mrbgems/mruby-compiler/core/parse.y" + case 213: +#line 2214 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "%", (yyvsp[0].nd)); } -#line 6824 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6997 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 206: -#line 2146 "mrbgems/mruby-compiler/core/parse.y" + case 214: +#line 2218 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)); } -#line 6832 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7005 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 207: -#line 2150 "mrbgems/mruby-compiler/core/parse.y" + case 215: +#line 2222 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)), "-@"); } -#line 6840 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7013 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 208: -#line 2154 "mrbgems/mruby-compiler/core/parse.y" + case 216: +#line 2226 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)), "-@"); } -#line 6848 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7021 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 209: -#line 2158 "mrbgems/mruby-compiler/core/parse.y" + case 217: +#line 2230 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "+@"); } -#line 6856 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7029 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 210: -#line 2162 "mrbgems/mruby-compiler/core/parse.y" + case 218: +#line 2234 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "-@"); } -#line 6864 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7037 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 211: -#line 2166 "mrbgems/mruby-compiler/core/parse.y" + case 219: +#line 2238 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "|", (yyvsp[0].nd)); } -#line 6872 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7045 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 212: -#line 2170 "mrbgems/mruby-compiler/core/parse.y" + case 220: +#line 2242 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "^", (yyvsp[0].nd)); } -#line 6880 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7053 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 213: -#line 2174 "mrbgems/mruby-compiler/core/parse.y" + case 221: +#line 2246 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "&", (yyvsp[0].nd)); } -#line 6888 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7061 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 214: -#line 2178 "mrbgems/mruby-compiler/core/parse.y" + case 222: +#line 2250 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=>", (yyvsp[0].nd)); } -#line 6896 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7069 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 215: -#line 2182 "mrbgems/mruby-compiler/core/parse.y" + case 223: +#line 2254 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">", (yyvsp[0].nd)); } -#line 6904 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7077 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 216: -#line 2186 "mrbgems/mruby-compiler/core/parse.y" + case 224: +#line 2258 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">=", (yyvsp[0].nd)); } -#line 6912 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7085 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 217: -#line 2190 "mrbgems/mruby-compiler/core/parse.y" + case 225: +#line 2262 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<", (yyvsp[0].nd)); } -#line 6920 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7093 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 218: -#line 2194 "mrbgems/mruby-compiler/core/parse.y" + case 226: +#line 2266 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=", (yyvsp[0].nd)); } -#line 6928 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7101 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 219: -#line 2198 "mrbgems/mruby-compiler/core/parse.y" + case 227: +#line 2270 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "==", (yyvsp[0].nd)); } -#line 6936 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7109 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 220: -#line 2202 "mrbgems/mruby-compiler/core/parse.y" + case 228: +#line 2274 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "===", (yyvsp[0].nd)); } -#line 6944 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7117 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 221: -#line 2206 "mrbgems/mruby-compiler/core/parse.y" + case 229: +#line 2278 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!=", (yyvsp[0].nd)); } -#line 6952 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7125 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 222: -#line 2210 "mrbgems/mruby-compiler/core/parse.y" + case 230: +#line 2282 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "=~", (yyvsp[0].nd)); } -#line 6960 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7133 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 223: -#line 2214 "mrbgems/mruby-compiler/core/parse.y" + case 231: +#line 2286 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!~", (yyvsp[0].nd)); } -#line 6968 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7141 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 224: -#line 2218 "mrbgems/mruby-compiler/core/parse.y" + case 232: +#line 2290 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 6976 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7149 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 225: -#line 2222 "mrbgems/mruby-compiler/core/parse.y" + case 233: +#line 2294 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "~"); } -#line 6984 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7157 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 226: -#line 2226 "mrbgems/mruby-compiler/core/parse.y" + case 234: +#line 2298 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<<", (yyvsp[0].nd)); } -#line 6992 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7165 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 227: -#line 2230 "mrbgems/mruby-compiler/core/parse.y" + case 235: +#line 2302 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">>", (yyvsp[0].nd)); } -#line 7000 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7173 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 228: -#line 2234 "mrbgems/mruby-compiler/core/parse.y" + case 236: +#line 2306 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7008 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7181 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 229: -#line 2238 "mrbgems/mruby-compiler/core/parse.y" + case 237: +#line 2310 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7016 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7189 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 230: -#line 2242 "mrbgems/mruby-compiler/core/parse.y" + case 238: +#line 2314 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 7024 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7197 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 231: -#line 2246 "mrbgems/mruby-compiler/core/parse.y" + case 239: +#line 2318 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 7032 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7205 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 232: -#line 2250 "mrbgems/mruby-compiler/core/parse.y" + case 240: +#line 2322 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = (yyvsp[-3].nd); + void_expr_error(p, (yyvsp[0].nd)); + defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[0].nd)); + nvars_unnest(p); + p->in_def--; + } +#line 7217 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 241: +#line 2330 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = (yyvsp[-5].nd); + void_expr_error(p, (yyvsp[-2].nd)); + void_expr_error(p, (yyvsp[0].nd)); + defn_setup(p, (yyval.nd), (yyvsp[-4].nd), new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd))); + nvars_unnest(p); + p->in_def--; + } +#line 7230 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 242: +#line 2339 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = (yyvsp[-3].nd); + void_expr_error(p, (yyvsp[0].nd)); + defs_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[0].nd)); + nvars_unnest(p); + p->in_def--; + p->in_single--; + } +#line 7243 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 243: +#line 2348 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = (yyvsp[-5].nd); + void_expr_error(p, (yyvsp[-2].nd)); + void_expr_error(p, (yyvsp[0].nd)); + defs_setup(p, (yyval.nd), (yyvsp[-4].nd), new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd))); + nvars_unnest(p); + p->in_def--; + p->in_single--; + } +#line 7257 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 244: +#line 2358 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7040 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7265 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 234: -#line 2257 "mrbgems/mruby-compiler/core/parse.y" + case 246: +#line 2365 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7049 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7274 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 235: -#line 2262 "mrbgems/mruby-compiler/core/parse.y" + case 247: +#line 2370 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))); } -#line 7057 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7282 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 236: -#line 2266 "mrbgems/mruby-compiler/core/parse.y" + case 248: +#line 2374 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(new_kw_hash(p, (yyvsp[-1].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7066 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7291 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 237: -#line 2273 "mrbgems/mruby-compiler/core/parse.y" + case 249: +#line 2381 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7074 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7299 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 238: -#line 2277 "mrbgems/mruby-compiler/core/parse.y" + case 250: +#line 2385 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[-2].nd)); void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7084 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7309 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 239: -#line 2285 "mrbgems/mruby-compiler/core/parse.y" + case 251: +#line 2393 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7092 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7317 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 240: -#line 2289 "mrbgems/mruby-compiler/core/parse.y" + case 252: +#line 2397 "mrbgems/mruby-compiler/core/parse.y" { #if 1 mrb_sym r = MRB_QSYM(mul); @@ -7116,373 +7341,373 @@ yyreduce: (yyval.nd) = 0; } } -#line 7120 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7345 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 245: -#line 2321 "mrbgems/mruby-compiler/core/parse.y" + case 257: +#line 2429 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((yyvsp[-1].nd),0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7129 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7354 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 246: -#line 2326 "mrbgems/mruby-compiler/core/parse.y" + case 258: +#line 2434 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))), 0); NODE_LINENO((yyval.nd), (yyvsp[-3].nd)); } -#line 7138 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7363 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 247: -#line 2331 "mrbgems/mruby-compiler/core/parse.y" + case 259: +#line 2439 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(list1(new_kw_hash(p, (yyvsp[-1].nd))), 0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7147 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7372 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 248: -#line 2338 "mrbgems/mruby-compiler/core/parse.y" + case 260: +#line 2446 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(list1((yyvsp[0].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7157 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7382 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 249: -#line 2344 "mrbgems/mruby-compiler/core/parse.y" + case 261: +#line 2452 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((yyvsp[-1].nd), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7166 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7391 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 250: -#line 2349 "mrbgems/mruby-compiler/core/parse.y" + case 262: +#line 2457 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(list1(new_kw_hash(p, (yyvsp[-1].nd))), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7175 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7400 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 251: -#line 2354 "mrbgems/mruby-compiler/core/parse.y" + case 263: +#line 2462 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-3].nd)); } -#line 7184 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7409 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 252: -#line 2359 "mrbgems/mruby-compiler/core/parse.y" + case 264: +#line 2467 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(0, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7193 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7418 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 253: -#line 2365 "mrbgems/mruby-compiler/core/parse.y" + case 265: +#line 2473 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; CMDARG_PUSH(1); } -#line 7202 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7427 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 254: -#line 2370 "mrbgems/mruby-compiler/core/parse.y" + case 266: +#line 2478 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-1].stack); (yyval.nd) = (yyvsp[0].nd); } -#line 7211 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7436 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 255: -#line 2377 "mrbgems/mruby-compiler/core/parse.y" + case 267: +#line 2485 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block_arg(p, (yyvsp[0].nd)); } -#line 7219 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7444 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 256: -#line 2383 "mrbgems/mruby-compiler/core/parse.y" + case 268: +#line 2491 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7227 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7452 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 257: -#line 2387 "mrbgems/mruby-compiler/core/parse.y" + case 269: +#line 2495 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 7235 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7460 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 260: -#line 2397 "mrbgems/mruby-compiler/core/parse.y" + case 272: +#line 2505 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons((yyvsp[0].nd), 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7245 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7470 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 261: -#line 2403 "mrbgems/mruby-compiler/core/parse.y" + case 273: +#line 2511 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_splat(p, (yyvsp[0].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7255 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7480 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 262: -#line 2409 "mrbgems/mruby-compiler/core/parse.y" + case 274: +#line 2517 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7264 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7489 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 263: -#line 2414 "mrbgems/mruby-compiler/core/parse.y" + case 275: +#line 2522 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 7273 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7498 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 264: -#line 2421 "mrbgems/mruby-compiler/core/parse.y" + case 276: +#line 2529 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7282 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7507 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 265: -#line 2426 "mrbgems/mruby-compiler/core/parse.y" + case 277: +#line 2534 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 7291 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7516 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 266: -#line 2431 "mrbgems/mruby-compiler/core/parse.y" + case 278: +#line 2539 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = list1(new_splat(p, (yyvsp[0].nd))); } -#line 7300 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7525 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 274: -#line 2445 "mrbgems/mruby-compiler/core/parse.y" + case 286: +#line 2553 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nvar(p, (yyvsp[0].num)); } -#line 7308 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7533 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 275: -#line 2449 "mrbgems/mruby-compiler/core/parse.y" + case 287: +#line 2557 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[0].id), 0); } -#line 7316 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7541 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 276: -#line 2453 "mrbgems/mruby-compiler/core/parse.y" + case 288: +#line 2561 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 7325 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7550 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 277: -#line 2459 "mrbgems/mruby-compiler/core/parse.y" + case 289: +#line 2567 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-2].stack); (yyval.nd) = (yyvsp[-1].nd); } -#line 7334 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7559 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 278: -#line 2464 "mrbgems/mruby-compiler/core/parse.y" + case 290: +#line 2572 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 7343 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7568 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 279: -#line 2468 "mrbgems/mruby-compiler/core/parse.y" + case 291: +#line 2576 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 7349 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7574 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 280: -#line 2469 "mrbgems/mruby-compiler/core/parse.y" + case 292: +#line 2577 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-3].stack); (yyval.nd) = (yyvsp[-2].nd); } -#line 7358 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7583 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 281: -#line 2473 "mrbgems/mruby-compiler/core/parse.y" + case 293: +#line 2581 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 7364 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7589 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 282: -#line 2474 "mrbgems/mruby-compiler/core/parse.y" + case 294: +#line 2582 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nil(p); } -#line 7372 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7597 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 283: -#line 2478 "mrbgems/mruby-compiler/core/parse.y" + case 295: +#line 2586 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7380 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7605 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 284: -#line 2482 "mrbgems/mruby-compiler/core/parse.y" + case 296: +#line 2590 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 7388 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7613 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 285: -#line 2486 "mrbgems/mruby-compiler/core/parse.y" + case 297: +#line 2594 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 7396 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7621 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 286: -#line 2490 "mrbgems/mruby-compiler/core/parse.y" + case 298: +#line 2598 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_array(p, (yyvsp[-1].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7405 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7630 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 287: -#line 2495 "mrbgems/mruby-compiler/core/parse.y" + case 299: +#line 2603 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_hash(p, (yyvsp[-1].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7414 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7639 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 288: -#line 2500 "mrbgems/mruby-compiler/core/parse.y" + case 300: +#line 2608 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_return(p, 0); } -#line 7422 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7647 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 289: -#line 2504 "mrbgems/mruby-compiler/core/parse.y" + case 301: +#line 2612 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 7430 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7655 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 290: -#line 2508 "mrbgems/mruby-compiler/core/parse.y" + case 302: +#line 2616 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[-1].nd)), "!"); } -#line 7438 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7663 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 291: -#line 2512 "mrbgems/mruby-compiler/core/parse.y" + case 303: +#line 2620 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, new_nil(p), "!"); } -#line 7446 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7671 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 292: -#line 2516 "mrbgems/mruby-compiler/core/parse.y" + case 304: +#line 2624 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), cons(0, (yyvsp[0].nd))); } -#line 7454 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7679 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 294: -#line 2521 "mrbgems/mruby-compiler/core/parse.y" + case 306: +#line 2629 "mrbgems/mruby-compiler/core/parse.y" { call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = (yyvsp[-1].nd); } -#line 7463 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7688 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 295: -#line 2526 "mrbgems/mruby-compiler/core/parse.y" + case 307: +#line 2634 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); (yyval.num) = p->lpar_beg; p->lpar_beg = ++p->paren_nest; } -#line 7473 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7698 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 296: -#line 2532 "mrbgems/mruby-compiler/core/parse.y" + case 308: +#line 2640 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 7482 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7707 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 297: -#line 2537 "mrbgems/mruby-compiler/core/parse.y" + case 309: +#line 2645 "mrbgems/mruby-compiler/core/parse.y" { p->lpar_beg = (yyvsp[-3].num); (yyval.nd) = new_lambda(p, (yyvsp[-2].nd), (yyvsp[0].nd)); @@ -7490,149 +7715,149 @@ yyreduce: p->cmdarg_stack = (yyvsp[-1].stack); CMDARG_LEXPOP(); } -#line 7494 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7719 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 298: -#line 2548 "mrbgems/mruby-compiler/core/parse.y" + case 310: +#line 2656 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } -#line 7503 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7728 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 299: -#line 2556 "mrbgems/mruby-compiler/core/parse.y" + case 311: +#line 2664 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_unless(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } -#line 7512 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7737 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 300: -#line 2560 "mrbgems/mruby-compiler/core/parse.y" + case 312: +#line 2668 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 7518 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7743 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 301: -#line 2560 "mrbgems/mruby-compiler/core/parse.y" + case 313: +#line 2668 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 7524 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7749 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 302: -#line 2563 "mrbgems/mruby-compiler/core/parse.y" + case 314: +#line 2671 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_while(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-6].num)); } -#line 7533 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7758 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 303: -#line 2567 "mrbgems/mruby-compiler/core/parse.y" + case 315: +#line 2675 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 7539 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7764 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 304: -#line 2567 "mrbgems/mruby-compiler/core/parse.y" + case 316: +#line 2675 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 7545 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7770 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 305: -#line 2570 "mrbgems/mruby-compiler/core/parse.y" + case 317: +#line 2678 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_until(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-6].num)); } -#line 7554 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7779 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 306: -#line 2577 "mrbgems/mruby-compiler/core/parse.y" + case 318: +#line 2685 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_case(p, (yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 7562 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7787 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 307: -#line 2581 "mrbgems/mruby-compiler/core/parse.y" + case 319: +#line 2689 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_case(p, 0, (yyvsp[-1].nd)); } -#line 7570 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7795 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 308: -#line 2585 "mrbgems/mruby-compiler/core/parse.y" + case 320: +#line 2693 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 7576 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7801 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 309: -#line 2587 "mrbgems/mruby-compiler/core/parse.y" + case 321: +#line 2695 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 7582 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7807 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 310: -#line 2590 "mrbgems/mruby-compiler/core/parse.y" + case 322: +#line 2698 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_for(p, (yyvsp[-7].nd), (yyvsp[-4].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-8].num)); } -#line 7591 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7816 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 311: -#line 2596 "mrbgems/mruby-compiler/core/parse.y" + case 323: +#line 2704 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "class definition in method body"); (yyval.nd) = local_switch(p); nvars_block(p); } -#line 7602 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7827 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 312: -#line 2604 "mrbgems/mruby-compiler/core/parse.y" + case 324: +#line 2712 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_class(p, (yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); local_resume(p, (yyvsp[-2].nd)); nvars_unnest(p); } -#line 7613 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7838 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 313: -#line 2612 "mrbgems/mruby-compiler/core/parse.y" + case 325: +#line 2720 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = p->in_def; p->in_def = 0; } -#line 7622 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7847 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 314: -#line 2617 "mrbgems/mruby-compiler/core/parse.y" + case 326: +#line 2725 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(local_switch(p), nint(p->in_single)); nvars_block(p); p->in_single = 0; } -#line 7632 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7857 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 315: -#line 2624 "mrbgems/mruby-compiler/core/parse.y" + case 327: +#line 2732 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_sclass(p, (yyvsp[-5].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-7].num)); @@ -7641,539 +7866,496 @@ yyreduce: p->in_def = (yyvsp[-4].num); p->in_single = intn((yyvsp[-2].nd)->cdr); } -#line 7645 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7870 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 316: -#line 2634 "mrbgems/mruby-compiler/core/parse.y" + case 328: +#line 2742 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "module definition in method body"); (yyval.nd) = local_switch(p); nvars_block(p); } -#line 7656 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7881 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 317: -#line 2642 "mrbgems/mruby-compiler/core/parse.y" + case 329: +#line 2750 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_module(p, (yyvsp[-3].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-4].num)); local_resume(p, (yyvsp[-2].nd)); nvars_unnest(p); } -#line 7667 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 318: -#line 2649 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.stack) = p->cmdarg_stack; - p->cmdarg_stack = 0; - } -#line 7676 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 319: -#line 2653 "mrbgems/mruby-compiler/core/parse.y" - { - p->in_def++; - (yyval.nd) = local_switch(p); - nvars_block(p); - } -#line 7686 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7892 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 320: -#line 2661 "mrbgems/mruby-compiler/core/parse.y" + case 330: +#line 2760 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_def(p, (yyvsp[-5].id), (yyvsp[-2].nd), (yyvsp[-1].nd)); - SET_LINENO((yyval.nd), (yyvsp[-6].num)); - local_resume(p, (yyvsp[-3].nd)); + (yyval.nd) = (yyvsp[-3].nd); + defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); nvars_unnest(p); p->in_def--; - p->cmdarg_stack = (yyvsp[-4].stack); - } -#line 7699 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 321: -#line 2670 "mrbgems/mruby-compiler/core/parse.y" - { - p->lstate = EXPR_FNAME; - (yyval.stack) = p->cmdarg_stack; - p->cmdarg_stack = 0; - } -#line 7709 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 322: -#line 2676 "mrbgems/mruby-compiler/core/parse.y" - { - p->in_single++; - p->lstate = EXPR_ENDFN; /* force for args */ - (yyval.nd) = local_switch(p); - nvars_block(p); } -#line 7720 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7903 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 323: -#line 2685 "mrbgems/mruby-compiler/core/parse.y" + case 331: +#line 2770 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_sdef(p, (yyvsp[-7].nd), (yyvsp[-4].id), (yyvsp[-2].nd), (yyvsp[-1].nd)); - SET_LINENO((yyval.nd), (yyvsp[-8].num)); - local_resume(p, (yyvsp[-3].nd)); + (yyval.nd) = (yyvsp[-3].nd); + defs_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); nvars_unnest(p); + p->in_def--; p->in_single--; - p->cmdarg_stack = (yyvsp[-5].stack); } -#line 7733 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7915 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 324: -#line 2694 "mrbgems/mruby-compiler/core/parse.y" + case 332: +#line 2778 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_break(p, 0); } -#line 7741 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7923 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 325: -#line 2698 "mrbgems/mruby-compiler/core/parse.y" + case 333: +#line 2782 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_next(p, 0); } -#line 7749 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7931 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 326: -#line 2702 "mrbgems/mruby-compiler/core/parse.y" + case 334: +#line 2786 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_redo(p); } -#line 7757 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7939 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 327: -#line 2706 "mrbgems/mruby-compiler/core/parse.y" + case 335: +#line 2790 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_retry(p); } -#line 7765 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7947 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 328: -#line 2712 "mrbgems/mruby-compiler/core/parse.y" + case 336: +#line 2796 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 7774 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7956 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 335: -#line 2731 "mrbgems/mruby-compiler/core/parse.y" + case 343: +#line 2815 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-3].nd)), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 7782 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7964 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 337: -#line 2738 "mrbgems/mruby-compiler/core/parse.y" + case 345: +#line 2822 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7790 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7972 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 338: -#line 2744 "mrbgems/mruby-compiler/core/parse.y" + case 346: +#line 2828 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(list1((yyvsp[0].nd))); } -#line 7798 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7980 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 340: -#line 2751 "mrbgems/mruby-compiler/core/parse.y" + case 348: +#line 2835 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[0].nd),0,0); } -#line 7806 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7988 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 341: -#line 2755 "mrbgems/mruby-compiler/core/parse.y" + case 349: +#line 2839 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-3].nd), new_arg(p, (yyvsp[0].id)), 0); } -#line 7814 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7996 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 342: -#line 2759 "mrbgems/mruby-compiler/core/parse.y" + case 350: +#line 2843 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-5].nd), new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 7822 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8004 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 343: -#line 2763 "mrbgems/mruby-compiler/core/parse.y" + case 351: +#line 2847 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, 0); (yyval.nd) = list3((yyvsp[-2].nd), (node*)-1, 0); } -#line 7831 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8013 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 344: -#line 2768 "mrbgems/mruby-compiler/core/parse.y" + case 352: +#line 2852 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-4].nd), (node*)-1, (yyvsp[0].nd)); } -#line 7839 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8021 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 345: -#line 2772 "mrbgems/mruby-compiler/core/parse.y" + case 353: +#line 2856 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_arg(p, (yyvsp[0].id)), 0); } -#line 7847 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8029 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 346: -#line 2776 "mrbgems/mruby-compiler/core/parse.y" + case 354: +#line 2860 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 7855 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8037 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 347: -#line 2780 "mrbgems/mruby-compiler/core/parse.y" + case 355: +#line 2864 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, 0); (yyval.nd) = list3(0, (node*)-1, 0); } -#line 7864 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8046 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 348: -#line 2785 "mrbgems/mruby-compiler/core/parse.y" + case 356: +#line 2869 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, 0); } -#line 7872 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8054 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 349: -#line 2789 "mrbgems/mruby-compiler/core/parse.y" + case 357: +#line 2873 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, (node*)-1, (yyvsp[0].nd)); } -#line 7880 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8062 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 350: -#line 2795 "mrbgems/mruby-compiler/core/parse.y" + case 358: +#line 2879 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 7888 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8070 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 351: -#line 2799 "mrbgems/mruby-compiler/core/parse.y" + case 359: +#line 2883 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 7896 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8078 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 352: -#line 2803 "mrbgems/mruby-compiler/core/parse.y" + case 360: +#line 2887 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 7904 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8086 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 353: -#line 2807 "mrbgems/mruby-compiler/core/parse.y" + case 361: +#line 2891 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 7912 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8094 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 354: -#line 2813 "mrbgems/mruby-compiler/core/parse.y" + case 362: +#line 2897 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7920 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8102 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 355: -#line 2817 "mrbgems/mruby-compiler/core/parse.y" + case 363: +#line 2901 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 7928 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8110 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 356: -#line 2823 "mrbgems/mruby-compiler/core/parse.y" + case 364: +#line 2907 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 7936 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8118 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 357: -#line 2827 "mrbgems/mruby-compiler/core/parse.y" + case 365: +#line 2911 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 7944 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8126 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 358: -#line 2831 "mrbgems/mruby-compiler/core/parse.y" + case 366: +#line 2915 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 7952 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8134 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 359: -#line 2835 "mrbgems/mruby-compiler/core/parse.y" + case 367: +#line 2919 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 7960 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8142 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 360: -#line 2839 "mrbgems/mruby-compiler/core/parse.y" + case 368: +#line 2923 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 7968 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8150 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 361: -#line 2843 "mrbgems/mruby-compiler/core/parse.y" + case 369: +#line 2927 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-2].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 7976 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8158 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 362: -#line 2847 "mrbgems/mruby-compiler/core/parse.y" + case 370: +#line 2931 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 7984 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8166 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 363: -#line 2851 "mrbgems/mruby-compiler/core/parse.y" + case 371: +#line 2935 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 7992 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8174 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 364: -#line 2855 "mrbgems/mruby-compiler/core/parse.y" + case 372: +#line 2939 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8000 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8182 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 365: -#line 2859 "mrbgems/mruby-compiler/core/parse.y" + case 373: +#line 2943 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8008 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8190 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 366: -#line 2863 "mrbgems/mruby-compiler/core/parse.y" + case 374: +#line 2947 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 8016 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8198 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 367: -#line 2867 "mrbgems/mruby-compiler/core/parse.y" + case 375: +#line 2951 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8024 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8206 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 368: -#line 2871 "mrbgems/mruby-compiler/core/parse.y" + case 376: +#line 2955 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8032 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8214 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 369: -#line 2875 "mrbgems/mruby-compiler/core/parse.y" + case 377: +#line 2959 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8040 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8222 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 370: -#line 2879 "mrbgems/mruby-compiler/core/parse.y" + case 378: +#line 2963 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 8048 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8230 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 371: -#line 2885 "mrbgems/mruby-compiler/core/parse.y" + case 379: +#line 2969 "mrbgems/mruby-compiler/core/parse.y" { local_add_blk(p, 0); (yyval.nd) = 0; } -#line 8057 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8239 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 372: -#line 2890 "mrbgems/mruby-compiler/core/parse.y" + case 380: +#line 2974 "mrbgems/mruby-compiler/core/parse.y" { p->cmd_start = TRUE; (yyval.nd) = (yyvsp[0].nd); } -#line 8066 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8248 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 373: -#line 2896 "mrbgems/mruby-compiler/core/parse.y" + case 381: +#line 2980 "mrbgems/mruby-compiler/core/parse.y" {local_add_blk(p, 0);} -#line 8072 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8254 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 374: -#line 2897 "mrbgems/mruby-compiler/core/parse.y" + case 382: +#line 2981 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8080 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8262 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 375: -#line 2901 "mrbgems/mruby-compiler/core/parse.y" + case 383: +#line 2985 "mrbgems/mruby-compiler/core/parse.y" { local_add_blk(p, 0); (yyval.nd) = 0; } -#line 8089 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8271 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 376: -#line 2906 "mrbgems/mruby-compiler/core/parse.y" + case 384: +#line 2990 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-2].nd); } -#line 8097 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8279 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 377: -#line 2913 "mrbgems/mruby-compiler/core/parse.y" + case 385: +#line 2997 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8105 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8287 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 378: -#line 2917 "mrbgems/mruby-compiler/core/parse.y" + case 386: +#line 3001 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8113 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8295 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 381: -#line 2927 "mrbgems/mruby-compiler/core/parse.y" + case 389: +#line 3011 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[0].id)); new_bv(p, (yyvsp[0].id)); } -#line 8122 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8304 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 383: -#line 2935 "mrbgems/mruby-compiler/core/parse.y" + case 391: +#line 3019 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-2].nd); } -#line 8130 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8312 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 384: -#line 2939 "mrbgems/mruby-compiler/core/parse.y" + case 392: +#line 3023 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8138 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8320 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 385: -#line 2945 "mrbgems/mruby-compiler/core/parse.y" + case 393: +#line 3029 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8146 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8328 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 386: -#line 2949 "mrbgems/mruby-compiler/core/parse.y" + case 394: +#line 3033 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8154 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8336 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 387: -#line 2955 "mrbgems/mruby-compiler/core/parse.y" + case 395: +#line 3039 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); } -#line 8163 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8345 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 388: -#line 2962 "mrbgems/mruby-compiler/core/parse.y" + case 396: +#line 3046 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd)); local_unnest(p); nvars_unnest(p); } -#line 8173 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8355 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 389: -#line 2970 "mrbgems/mruby-compiler/core/parse.y" + case 397: +#line 3054 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-1].nd)->car == (node*)NODE_YIELD) { yyerror(p, "block given to yield"); @@ -8183,159 +8365,159 @@ yyreduce: } (yyval.nd) = (yyvsp[-1].nd); } -#line 8187 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8369 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 390: -#line 2980 "mrbgems/mruby-compiler/core/parse.y" + case 398: +#line 3064 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 8195 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8377 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 391: -#line 2984 "mrbgems/mruby-compiler/core/parse.y" + case 399: +#line 3068 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); call_with_block(p, (yyval.nd), (yyvsp[0].nd)); } -#line 8204 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8386 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 392: -#line 2989 "mrbgems/mruby-compiler/core/parse.y" + case 400: +#line 3073 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); call_with_block(p, (yyval.nd), (yyvsp[0].nd)); } -#line 8213 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8395 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 393: -#line 2996 "mrbgems/mruby-compiler/core/parse.y" + case 401: +#line 3080 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 8221 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8403 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 394: -#line 3000 "mrbgems/mruby-compiler/core/parse.y" + case 402: +#line 3084 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 8229 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8411 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 395: -#line 3004 "mrbgems/mruby-compiler/core/parse.y" + case 403: +#line 3088 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 8237 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8419 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 396: -#line 3008 "mrbgems/mruby-compiler/core/parse.y" + case 404: +#line 3092 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 8245 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8427 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 397: -#line 3012 "mrbgems/mruby-compiler/core/parse.y" + case 405: +#line 3096 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM(call), (yyvsp[0].nd), (yyvsp[-1].num)); } -#line 8253 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8435 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 398: -#line 3016 "mrbgems/mruby-compiler/core/parse.y" + case 406: +#line 3100 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM(call), (yyvsp[0].nd), tCOLON2); } -#line 8261 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8443 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 399: -#line 3020 "mrbgems/mruby-compiler/core/parse.y" + case 407: +#line 3104 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 8269 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8451 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 400: -#line 3024 "mrbgems/mruby-compiler/core/parse.y" + case 408: +#line 3108 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_zsuper(p); } -#line 8277 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8459 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 401: -#line 3028 "mrbgems/mruby-compiler/core/parse.y" + case 409: +#line 3112 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_QSYM(aref), (yyvsp[-1].nd), '.'); } -#line 8285 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8467 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 402: -#line 3034 "mrbgems/mruby-compiler/core/parse.y" + case 410: +#line 3118 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 8295 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8477 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 403: -#line 3041 "mrbgems/mruby-compiler/core/parse.y" + case 411: +#line 3125 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-3].num)); local_unnest(p); nvars_unnest(p); } -#line 8306 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8488 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 404: -#line 3048 "mrbgems/mruby-compiler/core/parse.y" + case 412: +#line 3132 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 8316 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8498 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 405: -#line 3055 "mrbgems/mruby-compiler/core/parse.y" + case 413: +#line 3139 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-3].num)); local_unnest(p); nvars_unnest(p); } -#line 8327 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8509 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 406: -#line 3066 "mrbgems/mruby-compiler/core/parse.y" + case 414: +#line 3150 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(cons((yyvsp[-3].nd), (yyvsp[-1].nd)), (yyvsp[0].nd)); } -#line 8335 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8517 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 407: -#line 3072 "mrbgems/mruby-compiler/core/parse.y" + case 415: +#line 3156 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[0].nd)) { (yyval.nd) = cons(cons(0, (yyvsp[0].nd)), 0); @@ -8344,383 +8526,383 @@ yyreduce: (yyval.nd) = 0; } } -#line 8348 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8530 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 409: -#line 3086 "mrbgems/mruby-compiler/core/parse.y" + case 417: +#line 3170 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(list3((yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd))); if ((yyvsp[0].nd)) (yyval.nd) = append((yyval.nd), (yyvsp[0].nd)); } -#line 8357 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8539 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 411: -#line 3094 "mrbgems/mruby-compiler/core/parse.y" + case 419: +#line 3178 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 8365 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8547 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 414: -#line 3102 "mrbgems/mruby-compiler/core/parse.y" + case 422: +#line 3186 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8373 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8555 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 416: -#line 3109 "mrbgems/mruby-compiler/core/parse.y" + case 424: +#line 3193 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8381 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8563 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 423: -#line 3123 "mrbgems/mruby-compiler/core/parse.y" + case 431: +#line 3207 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = concat_string(p, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8389 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8571 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 426: -#line 3131 "mrbgems/mruby-compiler/core/parse.y" + case 434: +#line 3215 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8397 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8579 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 427: -#line 3135 "mrbgems/mruby-compiler/core/parse.y" + case 435: +#line 3219 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8405 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8587 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 429: -#line 3142 "mrbgems/mruby-compiler/core/parse.y" + case 437: +#line 3226 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = append((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8413 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8595 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 430: -#line 3148 "mrbgems/mruby-compiler/core/parse.y" + case 438: +#line 3232 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 8421 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8603 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 431: -#line 3152 "mrbgems/mruby-compiler/core/parse.y" + case 439: +#line 3236 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = p->lex_strterm; p->lex_strterm = NULL; } -#line 8430 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8612 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 432: -#line 3158 "mrbgems/mruby-compiler/core/parse.y" + case 440: +#line 3242 "mrbgems/mruby-compiler/core/parse.y" { p->lex_strterm = (yyvsp[-2].nd); (yyval.nd) = list2((yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 8439 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8621 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 433: -#line 3163 "mrbgems/mruby-compiler/core/parse.y" + case 441: +#line 3247 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_literal_delim(p)); } -#line 8447 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8629 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 434: -#line 3167 "mrbgems/mruby-compiler/core/parse.y" + case 442: +#line 3251 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_literal_delim(p)); } -#line 8455 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8637 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 435: -#line 3173 "mrbgems/mruby-compiler/core/parse.y" + case 443: +#line 3257 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8463 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8645 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 436: -#line 3177 "mrbgems/mruby-compiler/core/parse.y" + case 444: +#line 3261 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dxstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8471 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8653 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 437: -#line 3183 "mrbgems/mruby-compiler/core/parse.y" + case 445: +#line 3267 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8479 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8661 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 438: -#line 3187 "mrbgems/mruby-compiler/core/parse.y" + case 446: +#line 3271 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dregx(p, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8487 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8669 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 442: -#line 3200 "mrbgems/mruby-compiler/core/parse.y" + case 450: +#line 3284 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info * inf = parsing_heredoc_inf(p); inf->doc = push(inf->doc, new_str(p, "", 0)); heredoc_end(p); } -#line 8497 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8679 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 443: -#line 3206 "mrbgems/mruby-compiler/core/parse.y" + case 451: +#line 3290 "mrbgems/mruby-compiler/core/parse.y" { heredoc_end(p); } -#line 8505 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8687 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 446: -#line 3216 "mrbgems/mruby-compiler/core/parse.y" + case 454: +#line 3300 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info * inf = parsing_heredoc_inf(p); inf->doc = push(inf->doc, (yyvsp[0].nd)); heredoc_treat_nextline(p); } -#line 8515 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8697 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 447: -#line 3222 "mrbgems/mruby-compiler/core/parse.y" + case 455: +#line 3306 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = p->lex_strterm; p->lex_strterm = NULL; } -#line 8524 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8706 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 448: -#line 3228 "mrbgems/mruby-compiler/core/parse.y" + case 456: +#line 3312 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info * inf = parsing_heredoc_inf(p); p->lex_strterm = (yyvsp[-2].nd); inf->doc = push(push(inf->doc, (yyvsp[-3].nd)), (yyvsp[-1].nd)); } -#line 8534 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8716 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 449: -#line 3236 "mrbgems/mruby-compiler/core/parse.y" + case 457: +#line 3320 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_words(p, list1((yyvsp[0].nd))); } -#line 8542 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8724 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 450: -#line 3240 "mrbgems/mruby-compiler/core/parse.y" + case 458: +#line 3324 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_words(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8550 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8732 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 451: -#line 3247 "mrbgems/mruby-compiler/core/parse.y" + case 459: +#line 3331 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDARG; (yyval.nd) = new_sym(p, (yyvsp[0].id)); } -#line 8559 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8741 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 452: -#line 3252 "mrbgems/mruby-compiler/core/parse.y" + case 460: +#line 3336 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDARG; (yyval.nd) = new_dsym(p, new_dstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd)))); } -#line 8568 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8750 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 453: -#line 3259 "mrbgems/mruby-compiler/core/parse.y" + case 461: +#line 3343 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 8576 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8758 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 458: -#line 3269 "mrbgems/mruby-compiler/core/parse.y" + case 466: +#line 3353 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 8584 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8766 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 459: -#line 3273 "mrbgems/mruby-compiler/core/parse.y" + case 467: +#line 3357 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 8592 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8774 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 460: -#line 3279 "mrbgems/mruby-compiler/core/parse.y" + case 468: +#line 3363 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_symbols(p, list1((yyvsp[0].nd))); } -#line 8600 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8782 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 461: -#line 3283 "mrbgems/mruby-compiler/core/parse.y" + case 469: +#line 3367 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_symbols(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8608 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8790 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 464: -#line 3291 "mrbgems/mruby-compiler/core/parse.y" + case 472: +#line 3375 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = negate_lit(p, (yyvsp[0].nd)); } -#line 8616 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8798 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 465: -#line 3295 "mrbgems/mruby-compiler/core/parse.y" + case 473: +#line 3379 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = negate_lit(p, (yyvsp[0].nd)); } -#line 8624 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8806 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 466: -#line 3301 "mrbgems/mruby-compiler/core/parse.y" + case 474: +#line 3385 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_lvar(p, (yyvsp[0].id)); } -#line 8632 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8814 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 467: -#line 3305 "mrbgems/mruby-compiler/core/parse.y" + case 475: +#line 3389 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_ivar(p, (yyvsp[0].id)); } -#line 8640 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8822 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 468: -#line 3309 "mrbgems/mruby-compiler/core/parse.y" + case 476: +#line 3393 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_gvar(p, (yyvsp[0].id)); } -#line 8648 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8830 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 469: -#line 3313 "mrbgems/mruby-compiler/core/parse.y" + case 477: +#line 3397 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_cvar(p, (yyvsp[0].id)); } -#line 8656 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8838 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 470: -#line 3317 "mrbgems/mruby-compiler/core/parse.y" + case 478: +#line 3401 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_const(p, (yyvsp[0].id)); } -#line 8664 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8846 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 471: -#line 3323 "mrbgems/mruby-compiler/core/parse.y" + case 479: +#line 3407 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 8672 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8854 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 472: -#line 3327 "mrbgems/mruby-compiler/core/parse.y" + case 480: +#line 3411 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "can't assign to numbered parameter"); } -#line 8680 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8862 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 473: -#line 3333 "mrbgems/mruby-compiler/core/parse.y" + case 481: +#line 3417 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = var_reference(p, (yyvsp[0].nd)); } -#line 8688 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8870 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 474: -#line 3337 "mrbgems/mruby-compiler/core/parse.y" + case 482: +#line 3421 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nil(p); } -#line 8696 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8878 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 475: -#line 3341 "mrbgems/mruby-compiler/core/parse.y" + case 483: +#line 3425 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_self(p); } -#line 8704 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8886 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 476: -#line 3345 "mrbgems/mruby-compiler/core/parse.y" + case 484: +#line 3429 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_true(p); } -#line 8712 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8894 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 477: -#line 3349 "mrbgems/mruby-compiler/core/parse.y" + case 485: +#line 3433 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_false(p); } -#line 8720 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8902 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 478: -#line 3353 "mrbgems/mruby-compiler/core/parse.y" + case 486: +#line 3437 "mrbgems/mruby-compiler/core/parse.y" { const char *fn = mrb_sym_name_len(p->mrb, p->filename_sym, NULL); if (!fn) { @@ -8728,22 +8910,22 @@ yyreduce: } (yyval.nd) = new_str(p, fn, strlen(fn)); } -#line 8732 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8914 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 479: -#line 3361 "mrbgems/mruby-compiler/core/parse.y" + case 487: +#line 3445 "mrbgems/mruby-compiler/core/parse.y" { char buf[16]; dump_int(p->lineno, buf); (yyval.nd) = new_int(p, buf, 10, 0); } -#line 8743 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8925 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 480: -#line 3368 "mrbgems/mruby-compiler/core/parse.y" + case 488: +#line 3452 "mrbgems/mruby-compiler/core/parse.y" { #ifdef MRB_UTF8_STRING const char *enc = "UTF-8"; @@ -8752,46 +8934,46 @@ yyreduce: #endif (yyval.nd) = new_str(p, enc, strlen(enc)); } -#line 8756 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8938 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 483: -#line 3383 "mrbgems/mruby-compiler/core/parse.y" + case 491: +#line 3467 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8764 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8946 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 484: -#line 3387 "mrbgems/mruby-compiler/core/parse.y" + case 492: +#line 3471 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 8773 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8955 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 485: -#line 3392 "mrbgems/mruby-compiler/core/parse.y" + case 493: +#line 3476 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8781 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8963 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 486: -#line 3403 "mrbgems/mruby-compiler/core/parse.y" + case 494: +#line 3487 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 8791 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8973 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 487: -#line 3409 "mrbgems/mruby-compiler/core/parse.y" + case 495: +#line 3493 "mrbgems/mruby-compiler/core/parse.y" { #if 1 /* til real keyword args implemented */ @@ -8809,504 +8991,504 @@ yyreduce: new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); #endif } -#line 8813 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8995 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 488: -#line 3427 "mrbgems/mruby-compiler/core/parse.y" + case 497: +#line 3514 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8821 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9003 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 489: -#line 3433 "mrbgems/mruby-compiler/core/parse.y" + case 498: +#line 3520 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); } -#line 8829 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9011 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 490: -#line 3439 "mrbgems/mruby-compiler/core/parse.y" + case 499: +#line 3526 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 8839 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9021 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 491: -#line 3445 "mrbgems/mruby-compiler/core/parse.y" + case 500: +#line 3532 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 8848 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9030 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 492: -#line 3452 "mrbgems/mruby-compiler/core/parse.y" + case 501: +#line 3539 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 8857 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9039 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 493: -#line 3457 "mrbgems/mruby-compiler/core/parse.y" + case 502: +#line 3544 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 8866 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9048 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 494: -#line 3464 "mrbgems/mruby-compiler/core/parse.y" + case 503: +#line 3551 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 8874 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9056 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 495: -#line 3468 "mrbgems/mruby-compiler/core/parse.y" + case 504: +#line 3555 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8882 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9064 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 496: -#line 3474 "mrbgems/mruby-compiler/core/parse.y" + case 505: +#line 3561 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 8890 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9072 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 497: -#line 3478 "mrbgems/mruby-compiler/core/parse.y" + case 506: +#line 3565 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8898 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9080 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 500: -#line 3488 "mrbgems/mruby-compiler/core/parse.y" + case 509: +#line 3575 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_rest_args(p, nsym((yyvsp[0].id))); } -#line 8906 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9088 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 501: -#line 3492 "mrbgems/mruby-compiler/core/parse.y" + case 510: +#line 3579 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_rest_args(p, 0); } -#line 8914 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9096 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 502: -#line 3498 "mrbgems/mruby-compiler/core/parse.y" + case 511: +#line 3585 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 8922 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9104 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 503: -#line 3502 "mrbgems/mruby-compiler/core/parse.y" + case 512: +#line 3589 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 8930 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9112 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 504: -#line 3506 "mrbgems/mruby-compiler/core/parse.y" + case 513: +#line 3593 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 8938 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9120 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 505: -#line 3510 "mrbgems/mruby-compiler/core/parse.y" + case 514: +#line 3597 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 8946 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9128 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 506: -#line 3516 "mrbgems/mruby-compiler/core/parse.y" + case 515: +#line 3603 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8954 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9136 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 507: -#line 3520 "mrbgems/mruby-compiler/core/parse.y" + case 516: +#line 3607 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 8962 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9144 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 508: -#line 3526 "mrbgems/mruby-compiler/core/parse.y" + case 517: +#line 3613 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8970 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9152 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 509: -#line 3530 "mrbgems/mruby-compiler/core/parse.y" + case 518: +#line 3617 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8978 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9160 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 510: -#line 3534 "mrbgems/mruby-compiler/core/parse.y" + case 519: +#line 3621 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 8986 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9168 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 511: -#line 3538 "mrbgems/mruby-compiler/core/parse.y" + case 520: +#line 3625 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8994 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9176 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 512: -#line 3542 "mrbgems/mruby-compiler/core/parse.y" + case 521: +#line 3629 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9002 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9184 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 513: -#line 3546 "mrbgems/mruby-compiler/core/parse.y" + case 522: +#line 3633 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9010 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9192 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 514: -#line 3550 "mrbgems/mruby-compiler/core/parse.y" + case 523: +#line 3637 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 9018 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9200 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 515: -#line 3554 "mrbgems/mruby-compiler/core/parse.y" + case 524: +#line 3641 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9026 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9208 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 516: -#line 3558 "mrbgems/mruby-compiler/core/parse.y" + case 525: +#line 3645 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9034 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9216 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 517: -#line 3562 "mrbgems/mruby-compiler/core/parse.y" + case 526: +#line 3649 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9042 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9224 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 518: -#line 3566 "mrbgems/mruby-compiler/core/parse.y" + case 527: +#line 3653 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9050 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9232 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 519: -#line 3570 "mrbgems/mruby-compiler/core/parse.y" + case 528: +#line 3657 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9058 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9240 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 520: -#line 3574 "mrbgems/mruby-compiler/core/parse.y" + case 529: +#line 3661 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9066 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9248 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 521: -#line 3578 "mrbgems/mruby-compiler/core/parse.y" + case 530: +#line 3665 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 9074 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9256 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 522: -#line 3582 "mrbgems/mruby-compiler/core/parse.y" + case 531: +#line 3669 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, MRB_QSYM(and)); (yyval.nd) = new_args(p, 0, 0, 0, 0, 0); } -#line 9083 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9265 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 523: -#line 3589 "mrbgems/mruby-compiler/core/parse.y" + case 532: +#line 3676 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a constant"); (yyval.nd) = 0; } -#line 9092 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9274 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 524: -#line 3594 "mrbgems/mruby-compiler/core/parse.y" + case 533: +#line 3681 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be an instance variable"); (yyval.nd) = 0; } -#line 9101 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9283 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 525: -#line 3599 "mrbgems/mruby-compiler/core/parse.y" + case 534: +#line 3686 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a global variable"); (yyval.nd) = 0; } -#line 9110 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9292 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 526: -#line 3604 "mrbgems/mruby-compiler/core/parse.y" + case 535: +#line 3691 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a class variable"); (yyval.nd) = 0; } -#line 9119 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9301 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 527: -#line 3609 "mrbgems/mruby-compiler/core/parse.y" + case 536: +#line 3696 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a numbered parameter"); (yyval.nd) = 0; } -#line 9128 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9310 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 528: -#line 3616 "mrbgems/mruby-compiler/core/parse.y" + case 537: +#line 3703 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = 0; } -#line 9136 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9318 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 529: -#line 3620 "mrbgems/mruby-compiler/core/parse.y" + case 538: +#line 3707 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[0].id)); (yyval.id) = (yyvsp[0].id); } -#line 9145 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9327 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 530: -#line 3627 "mrbgems/mruby-compiler/core/parse.y" + case 539: +#line 3714 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_arg(p, (yyvsp[0].id)); } -#line 9153 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9335 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 531: -#line 3631 "mrbgems/mruby-compiler/core/parse.y" + case 540: +#line 3718 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = local_switch(p); } -#line 9161 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9343 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 532: -#line 3635 "mrbgems/mruby-compiler/core/parse.y" + case 541: +#line 3722 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn_param(p, (yyvsp[-1].nd), p->locals->car); local_resume(p, (yyvsp[-2].nd)); local_add_f(p, 0); } -#line 9171 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9353 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 533: -#line 3643 "mrbgems/mruby-compiler/core/parse.y" + case 542: +#line 3730 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9179 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9361 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 534: -#line 3647 "mrbgems/mruby-compiler/core/parse.y" + case 543: +#line 3734 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9187 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9369 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 535: -#line 3653 "mrbgems/mruby-compiler/core/parse.y" + case 544: +#line 3740 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[-1].id)); local_nest(p); (yyval.id) = (yyvsp[-1].id); } -#line 9197 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9379 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 536: -#line 3661 "mrbgems/mruby-compiler/core/parse.y" + case 545: +#line 3748 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9207 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9389 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 537: -#line 3669 "mrbgems/mruby-compiler/core/parse.y" + case 546: +#line 3756 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9217 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9399 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 538: -#line 3677 "mrbgems/mruby-compiler/core/parse.y" + case 547: +#line 3764 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9225 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9407 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 539: -#line 3681 "mrbgems/mruby-compiler/core/parse.y" + case 548: +#line 3768 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9233 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9415 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 540: -#line 3687 "mrbgems/mruby-compiler/core/parse.y" + case 549: +#line 3774 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9241 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9423 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 541: -#line 3691 "mrbgems/mruby-compiler/core/parse.y" + case 550: +#line 3778 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9249 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9431 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 544: -#line 3701 "mrbgems/mruby-compiler/core/parse.y" + case 553: +#line 3788 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[0].id)); (yyval.id) = (yyvsp[0].id); } -#line 9258 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9440 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 545: -#line 3706 "mrbgems/mruby-compiler/core/parse.y" + case 554: +#line 3793 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, MRB_QSYM(and)); (yyval.id) = -1; } -#line 9267 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9449 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 548: -#line 3717 "mrbgems/mruby-compiler/core/parse.y" + case 557: +#line 3804 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 9275 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9457 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 549: -#line 3723 "mrbgems/mruby-compiler/core/parse.y" + case 558: +#line 3810 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 9283 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9465 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 550: -#line 3727 "mrbgems/mruby-compiler/core/parse.y" + case 559: +#line 3814 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = 0; } -#line 9291 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9473 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 551: -#line 3733 "mrbgems/mruby-compiler/core/parse.y" + case 560: +#line 3820 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 9300 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9482 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 552: -#line 3737 "mrbgems/mruby-compiler/core/parse.y" + case 561: +#line 3824 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_BEG;} -#line 9306 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9488 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 553: -#line 3738 "mrbgems/mruby-compiler/core/parse.y" + case 562: +#line 3825 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-1].nd) == 0) { yyerror(p, "can't define singleton method for ()."); @@ -9329,55 +9511,55 @@ yyreduce: } (yyval.nd) = (yyvsp[-1].nd); } -#line 9333 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9515 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 555: -#line 3764 "mrbgems/mruby-compiler/core/parse.y" + case 564: +#line 3851 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9341 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9523 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 556: -#line 3770 "mrbgems/mruby-compiler/core/parse.y" + case 565: +#line 3857 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 9350 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9532 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 557: -#line 3775 "mrbgems/mruby-compiler/core/parse.y" + case 566: +#line 3862 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9358 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9540 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 560: -#line 3785 "mrbgems/mruby-compiler/core/parse.y" + case 569: +#line 3872 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[-2].nd)); void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9368 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9550 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 561: -#line 3791 "mrbgems/mruby-compiler/core/parse.y" + case 570: +#line 3878 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_sym(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 9377 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9559 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 562: -#line 3796 "mrbgems/mruby-compiler/core/parse.y" + case 571: +#line 3883 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); if ((yyvsp[-2].nd)->car == (node*)NODE_DSTR) { @@ -9387,67 +9569,67 @@ yyreduce: (yyval.nd) = cons(new_sym(p, new_strsym(p, (yyvsp[-2].nd))), (yyvsp[0].nd)); } } -#line 9391 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9573 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 563: -#line 3806 "mrbgems/mruby-compiler/core/parse.y" + case 572: +#line 3893 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_kw_rest_args(p, 0), (yyvsp[0].nd)); } -#line 9400 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9582 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 576: -#line 3833 "mrbgems/mruby-compiler/core/parse.y" + case 585: +#line 3920 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = '.'; } -#line 9408 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9590 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 577: -#line 3837 "mrbgems/mruby-compiler/core/parse.y" + case 586: +#line 3924 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = 0; } -#line 9416 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9598 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 579: -#line 3844 "mrbgems/mruby-compiler/core/parse.y" + case 588: +#line 3931 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = tCOLON2; } -#line 9424 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9606 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 588: -#line 3865 "mrbgems/mruby-compiler/core/parse.y" + case 597: +#line 3952 "mrbgems/mruby-compiler/core/parse.y" {yyerrok;} -#line 9430 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9612 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 591: -#line 3871 "mrbgems/mruby-compiler/core/parse.y" + case 600: +#line 3958 "mrbgems/mruby-compiler/core/parse.y" { p->lineno += (yyvsp[0].num); p->column = 0; } -#line 9439 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9621 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 594: -#line 3882 "mrbgems/mruby-compiler/core/parse.y" + case 603: +#line 3969 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 9447 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9629 "mrbgems/mruby-compiler/core/y.tab.c" break; -#line 9451 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9633 "mrbgems/mruby-compiler/core/y.tab.c" default: break; } @@ -9679,7 +9861,7 @@ yyreturn: #endif return yyresult; } -#line 3886 "mrbgems/mruby-compiler/core/parse.y" +#line 3973 "mrbgems/mruby-compiler/core/parse.y" #define pylval (*((YYSTYPE*)(p->ylval))) diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index 7a7639410..20fcc29cb 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -148,8 +148,8 @@ mrb_local_variables(mrb_state *mrb, mrb_value self) irep = proc->body.irep; if (irep->lv) { for (i = 0; i + 1 < irep->nlocals; ++i) { - if (irep->lv[i].name) { - mrb_sym sym = irep->lv[i].name; + if (irep->lv[i]) { + mrb_sym sym = irep->lv[i]; const char *name = mrb_sym_name(mrb, sym); switch (name[0]) { case '*': case '&': diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index a2f3ad101..bb4efe3fd 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -148,8 +148,8 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self) a = mrb_ary_new(mrb); mrb_ary_push(mrb, a, sname); - if (i < max && irep->lv[i].name) { - mrb_sym sym = irep->lv[i].name; + if (i < max && irep->lv[i]) { + mrb_sym sym = irep->lv[i]; const char *name = mrb_sym_name(mrb, sym); switch (name[0]) { case '*': case '&': diff --git a/src/codedump.c b/src/codedump.c index 67bd8754d..24fc94ef7 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -9,17 +9,9 @@ static void print_r(mrb_state *mrb, const mrb_irep *irep, size_t n) { - size_t i; - if (n == 0) return; - - for (i=0; i+1nlocals; i++) { - if (irep->lv[i].r == n) { - mrb_sym sym = irep->lv[i].name; - printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, sym)); - break; - } - } + if (n > irep->nlocals) return; + printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, irep->lv[n-1])); } static void @@ -82,9 +74,8 @@ codedump(mrb_state *mrb, const mrb_irep *irep) printf("local variable names:\n"); for (i = 1; i < irep->nlocals; ++i) { - char const *s = mrb_sym_dump(mrb, irep->lv[i - 1].name); - int n = irep->lv[i - 1].r ? irep->lv[i - 1].r : i; - printf(" R%d:%s\n", n, s ? s : ""); + char const *s = mrb_sym_dump(mrb, irep->lv[i - 1]); + printf(" R%d:%s\n", i, s ? s : ""); } } diff --git a/src/dump.c b/src/dump.c index 8cd69cd29..aeb23d033 100644 --- a/src/dump.c +++ b/src/dump.c @@ -585,7 +585,7 @@ create_lv_sym_table(mrb_state *mrb, const mrb_irep *irep, mrb_sym **syms, uint32 } for (i = 0; i + 1 < irep->nlocals; ++i) { - mrb_sym const name = irep->lv[i].name; + mrb_sym const name = irep->lv[i]; if (name == 0) continue; if (find_filename_index(*syms, *syms_len, name) != -1) continue; @@ -628,16 +628,14 @@ write_lv_record(mrb_state *mrb, const mrb_irep *irep, uint8_t **start, mrb_sym c int i; for (i = 0; i + 1 < irep->nlocals; ++i) { - if (irep->lv[i].name == 0) { + if (irep->lv[i] == 0) { cur += uint16_to_bin(RITE_LV_NULL_MARK, cur); - cur += uint16_to_bin(0, cur); } else { - int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i].name); + int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i]); mrb_assert(sym_idx != -1); /* local variable name must be in syms */ cur += uint16_to_bin(sym_idx, cur); - cur += uint16_to_bin(irep->lv[i].r, cur); } } @@ -656,7 +654,7 @@ get_lv_record_size(mrb_state *mrb, const mrb_irep *irep) size_t ret = 0; int i; - ret += (sizeof(uint16_t) + sizeof(uint16_t)) * (irep->nlocals - 1); + ret += sizeof(uint16_t) * (irep->nlocals - 1); for (i = 0; i < irep->rlen; ++i) { ret += get_lv_record_size(mrb, irep->reps[i]); @@ -1033,9 +1031,9 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, /* dump lv */ if (irep->lv) { len=irep->nlocals; - fprintf(fp, "static const struct mrb_lvinfo %s_lv_%d[%d] = {", name, n, len); + fprintf(fp, "static const mrb_sym %s_lv_%d[%d] = {", name, n, len); for (i=0; i+1lv[i].name, irep->lv[i].r); + fprintf(fp, "%u, ", irep->lv[i]); } fputs("};\n", fp); } diff --git a/src/load.c b/src/load.c index 2002af3ab..1118fc2ad 100644 --- a/src/load.c +++ b/src/load.c @@ -426,28 +426,24 @@ static int read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *record_len, mrb_sym const *syms, uint32_t syms_len) { const uint8_t *bin = start; - struct mrb_lvinfo *lv; + mrb_sym *lv; ptrdiff_t diff; int i; - irep->lv = lv = (struct mrb_lvinfo*)mrb_malloc(mrb, sizeof(struct mrb_lvinfo) * (irep->nlocals - 1)); + irep->lv = lv = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (irep->nlocals - 1)); for (i = 0; i + 1< irep->nlocals; ++i) { uint16_t const sym_idx = bin_to_uint16(bin); bin += sizeof(uint16_t); if (sym_idx == RITE_LV_NULL_MARK) { - lv[i].name = 0; - lv[i].r = 0; + lv[i] = 0; } else { if (sym_idx >= syms_len) { return MRB_DUMP_GENERAL_FAILURE; } - lv[i].name = syms[sym_idx]; - - lv[i].r = bin_to_uint16(bin); + lv[i] = syms[sym_idx]; } - bin += sizeof(uint16_t); } for (i = 0; i < irep->rlen; ++i) { -- cgit v1.2.3 From a54a3df32c379a6953664f1d9241c731066915ec Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 24 May 2020 00:19:04 +0900 Subject: Extended mruby binary format The catch handler table is combined with iseq block. This is to prevent the structure from growing by adding a field for the catch handler table to the `mrb_irep` structure. "iseq block" and "catch handler table": [number of catch handler table (2 bytes)] [number of byte code (4 bytes)] [iseq (any bytes)] [catch handlers (multiple of 7 bytes)] catch handler: [catch type (1 byte)] [begin offset (2 bytes)] [end offset (2 bytes)] [target offset (2 bytes)] catch type: enum mrb_catch_type (0 = rescue, 1 = ensure) begin offset: Includes the specified instruction address end offset: Does not include the specified instruction address target offset: replaces pc with the specified instruction address This table is not expanded by `read_irep_record_1()`. The necessary elements are expanded one by one when used. --- include/mruby/irep.h | 29 +++++++++++++++++++++ mrbgems/mruby-compiler/core/codegen.c | 47 ++++++++++++++++++++++++++++++++++- src/codedump.c | 29 +++++++++++++++++++++ src/dump.c | 32 ++++++++++++++++++++++++ src/load.c | 11 +++++--- 5 files changed, 143 insertions(+), 5 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 0a5b3f1a3..430602279 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -39,13 +39,31 @@ typedef struct mrb_pool_value { } u; } mrb_pool_value; +enum mrb_catch_type { + MRB_CATCH_RESCUE = 0, + MRB_CATCH_ENSURE = 1, +}; + +struct mrb_irep_catch_hander { + uint8_t type; /* enum mrb_catch_type */ + uint8_t begin[2]; /* The starting address to match the hander. Includes this. */ + uint8_t end[2]; /* The endpoint address that matches the hander. Not Includes this. */ + uint8_t target[2]; /* The address to jump to if a match is made. */ +}; + /* Program data array struct */ typedef struct mrb_irep { uint16_t nlocals; /* Number of local variables */ uint16_t nregs; /* Number of register variables */ + uint16_t clen; /* Number of catch handlers */ uint8_t flags; const mrb_code *iseq; + /* + * A catch handler table is placed after the iseq entity. + * The reason it doesn't add fields to the structure is to keep the mrb_irep structure from bloating. + * The catch handler table can be obtained with `mrb_irep_catch_handler_table(irep)`. + */ const mrb_pool_value *pool; const mrb_sym *syms; const struct mrb_irep * const *reps; @@ -107,6 +125,17 @@ struct mrb_insn_data { struct mrb_insn_data mrb_decode_insn(const mrb_code *pc); +static inline const struct mrb_irep_catch_hander * +mrb_irep_catch_handler_table(const struct mrb_irep *irep) +{ + if (irep->clen > 0) { + return (const struct mrb_irep_catch_hander *)(irep->iseq + irep->ilen); + } + else { + return (const struct mrb_irep_catch_hander *)NULL; + } +} + MRB_END_DECL #endif /* MRUBY_IREP_H */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 191895668..e55b6791d 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +73,7 @@ typedef struct scope { mrb_pool_value *pool; mrb_sym *syms; mrb_irep **reps; + struct mrb_irep_catch_hander *catch_table; uint32_t pcapa, scapa, rcapa; uint16_t nlocals; @@ -91,6 +93,15 @@ static struct loopinfo *loop_push(codegen_scope *s, enum looptype t); static void loop_break(codegen_scope *s, node *tree); static void loop_pop(codegen_scope *s, int val); +/* + * The search for catch handlers starts at the end of the table in mrb_vm_run(). + * Therefore, the next handler to be added must meet one of the following conditions. + * - Larger start position + * - Same start position but smaller end position + */ +static int catch_hander_new(codegen_scope *s); +static void catch_hander_set(codegen_scope *s, int ent, enum mrb_catch_type type, uint32_t begin, uint32_t end, uint32_t target); + static void gen_assignment(codegen_scope *s, node *tree, int sp, int val); static void gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val); @@ -3082,9 +3093,18 @@ scope_finish(codegen_scope *s) } irep->flags = 0; if (s->iseq) { - irep->iseq = (const mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc); + size_t catchsize = sizeof(struct mrb_irep_catch_hander) * irep->clen; + irep->iseq = (const mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc + catchsize); irep->ilen = s->pc; + if (irep->clen > 0) { + memcpy((void *)(irep->iseq + irep->ilen), s->catch_table, catchsize); + } } + else { + irep->clen = 0; + } + mrb_free(s->mrb, s->catch_table); + s->catch_table = NULL; irep->pool = (const mrb_pool_value*)codegen_realloc(s, s->pool, sizeof(mrb_pool_value)*irep->plen); irep->syms = (const mrb_sym*)codegen_realloc(s, s->syms, sizeof(mrb_sym)*irep->slen); irep->reps = (const mrb_irep**)codegen_realloc(s, s->reps, sizeof(mrb_irep*)*irep->rlen); @@ -3187,6 +3207,31 @@ loop_pop(codegen_scope *s, int val) if (val) push(); } +static int +catch_hander_new(codegen_scope *s) +{ + size_t newsize = sizeof(struct mrb_irep_catch_hander) * (s->irep->clen + 1); + s->catch_table = (struct mrb_irep_catch_hander *)codegen_realloc(s, (void *)s->catch_table, newsize); + return s->irep->clen ++; +} + +static void +catch_hander_set(codegen_scope *s, int ent, enum mrb_catch_type type, uint32_t begin, uint32_t end, uint32_t target) +{ + struct mrb_irep_catch_hander *e; + + mrb_assert(ent >= 0 && ent < s->irep->clen); + mrb_assert(begin < MAXARG_S); + mrb_assert(end < MAXARG_S); + mrb_assert(target < MAXARG_S); + + e = &s->catch_table[ent]; + uint8_to_bin(type, &e->type); + uint16_to_bin(begin, e->begin); + uint16_to_bin(end, e->end); + uint16_to_bin(target, e->target); +} + static struct RProc* generate_code(mrb_state *mrb, parser_state *p, int val) { diff --git a/src/codedump.c b/src/codedump.c index 106312f67..a19d60708 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -4,6 +4,7 @@ #include #include #include +#include #ifndef MRB_DISABLE_STDIO static void @@ -80,6 +81,34 @@ codedump(mrb_state *mrb, const mrb_irep *irep) } } + if (irep->clen > 0) { + int i = irep->clen; + const struct mrb_irep_catch_hander *e = mrb_irep_catch_handler_table(irep); + + for (; i > 0; i --, e ++) { + int begin = bin_to_uint16(e->begin); + int end = bin_to_uint16(e->end); + int target = bin_to_uint16(e->target); + char buf[20]; + const char *type; + + switch (e->type) { + case MRB_CATCH_RESCUE: + type = "rescue"; + break; + case MRB_CATCH_ENSURE: + type = "ensure"; + break; + default: + buf[0] = '\0'; + snprintf(buf, sizeof(buf), "0x%02x ", (int)e->type); + type = buf; + break; + } + printf("catch type: %-8s begin: %04d end: %04d target: %04d\n", type, begin, end, target); + } + } + pc = irep->iseq; pcend = pc + irep->ilen; while (pc < pcend) { diff --git a/src/dump.c b/src/dump.c index 6acba12c2..884c44dc6 100644 --- a/src/dump.c +++ b/src/dump.c @@ -273,6 +273,31 @@ write_syms_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) return cur - buf; } +static size_t +get_catch_table_block_size(mrb_state *mrb, const mrb_irep *irep) +{ + size_t size = 0; + + size += sizeof(uint16_t); /* number of catch handler */ + size += (sizeof(struct mrb_irep_catch_hander)) * irep->clen; + + return size; +} + +static ptrdiff_t +write_catch_table_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) +{ + uint8_t *cur = buf; + const struct mrb_irep_catch_hander *e = mrb_irep_catch_handler_table(irep); + mrb_static_assert1(sizeof(*e) == 7); + + /* irep->clen has already been written before iseq block */ + memcpy(cur, (const void *)e, sizeof(*e) * irep->clen); + cur += sizeof(*e) * irep->clen; + + return cur - buf; +} + static size_t get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep) { @@ -280,6 +305,7 @@ get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep) size += get_irep_header_size(mrb); size += get_iseq_block_size(mrb, irep); + size += get_catch_table_block_size(mrb, irep); size += get_pool_block_size(mrb, irep); size += get_syms_block_size(mrb, irep); return size; @@ -314,7 +340,13 @@ write_irep_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *ir } bin += write_irep_header(mrb, irep, bin); + /* + * The catch handler table is after iseq block, but the number of + * elements is placed before iseq block. + */ + bin += uint16_to_bin(irep->clen, bin); bin += write_iseq_block(mrb, irep, bin, flags); + bin += write_catch_table_block(mrb, irep, bin); bin += write_pool_block(mrb, irep, bin); bin += write_syms_block(mrb, irep, bin); diff --git a/src/load.c b/src/load.c index 1118fc2ad..59790bc17 100644 --- a/src/load.c +++ b/src/load.c @@ -96,27 +96,30 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += sizeof(uint16_t); /* Binary Data Section */ - /* ISEQ BLOCK */ + /* ISEQ BLOCK (and CATCH HANDLER TABLE BLOCK) */ + irep->clen = bin_to_uint16(src); /* number of catch handler */ + src += sizeof(uint16_t); irep->ilen = (uint16_t)bin_to_uint32(src); src += sizeof(uint32_t); src += skip_padding(src); if (irep->ilen > 0) { + size_t data_len = sizeof(mrb_code) * irep->ilen + + sizeof(struct mrb_irep_catch_hander) * irep->clen; + mrb_static_assert1(sizeof(struct mrb_irep_catch_hander) == 7); if (SIZE_ERROR_MUL(irep->ilen, sizeof(mrb_code))) { return NULL; } if ((flags & FLAG_SRC_MALLOC) == 0) { irep->iseq = (mrb_code*)src; - src += sizeof(mrb_code) * irep->ilen; irep->flags |= MRB_ISEQ_NO_FREE; } else { - size_t data_len = sizeof(mrb_code) * irep->ilen; void *buf = mrb_malloc(mrb, data_len); irep->iseq = (mrb_code *)buf; memcpy(buf, src, data_len); - src += data_len; } + src += data_len; } /* POOL BLOCK */ -- cgit v1.2.3 From f467b02d4598ab64d98727348e8a9c4f04fc9b83 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 24 May 2020 11:44:31 +0900 Subject: Extended `OP_EXCEPT` and `OP_RAISE` (`OP_RAISEIF`) instructions - `OP_EXCEPT` checks if `mrb->exc` is `NULL`, `MRB_TT_EXCEPTION` or `MRB_TT_BREAK`. If `mrb->exc` is `NULL`, it will be replaced with `nil`. - If `OP_RAISE` is `nil`, it does nothing and the immediately following instruction is executed (like `OP_NOP`). Also, in case of `RBreak` object, it moves to the processing for `break`. With this change, the instruction name is changed from `OP_RAISE` to `OP_RAISEIF`. --- doc/opcode.md | 2 +- include/mruby/ops.h | 2 +- mrbgems/mruby-compiler/core/codegen.c | 2 +- src/codedump.c | 4 ++-- src/vm.c | 34 +++++++++++++++++++++++++++++----- 5 files changed, 34 insertions(+), 10 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/doc/opcode.md b/doc/opcode.md index 98d29cdc0..d7e620350 100644 --- a/doc/opcode.md +++ b/doc/opcode.md @@ -66,7 +66,7 @@ sign) of operands. | OP_EXCEPT | B | R(a) = exc | | OP_RESCUE | BB | R(b) = R(a).isa?(R(b)) | | OP_POPERR | B | a.times{rescue_pop()} | -| OP_RAISE | B | raise(R(a)) | +| OP_RAISEIF | B | raise(R(a)) if R(a) | | OP_EPUSH | B | ensure_push(SEQ[a]) | | OP_EPOP | B | A.times{ensure_pop().call} | | OP_SENDV | BB | R(a) = call(R(a),Syms(b),*R(a+1)) | diff --git a/include/mruby/ops.h b/include/mruby/ops.h index 7d20ac0ad..45397e2ed 100644 --- a/include/mruby/ops.h +++ b/include/mruby/ops.h @@ -53,7 +53,7 @@ OPCODE(ONERR, S) /* rescue_push(a) */ OPCODE(EXCEPT, B) /* R(a) = exc */ OPCODE(RESCUE, BB) /* R(b) = R(a).isa?(R(b)) */ OPCODE(POPERR, B) /* a.times{rescue_pop()} */ -OPCODE(RAISE, B) /* raise(R(a)) */ +OPCODE(RAISEIF, B) /* raise(R(a)) if R(a) */ OPCODE(EPUSH, B) /* ensure_push(SEQ[a]) */ OPCODE(EPOP, B) /* A.times{ensure_pop().call} */ OPCODE(SENDV, BB) /* R(a) = call(R(a),Syms(b),*R(a+1)) */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index e55b6791d..7911ecb36 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1533,7 +1533,7 @@ codegen(codegen_scope *s, node *tree, int val) } if (pos1) { dispatch(s, pos1); - genop_1(s, OP_RAISE, exc); + genop_1(s, OP_RAISEIF, exc); } } pop(); diff --git a/src/codedump.c b/src/codedump.c index a19d60708..2225da4ce 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -507,8 +507,8 @@ codedump(mrb_state *mrb, const mrb_irep *irep) printf("OP_RESCUE\tR%d\tR%d", a, b); print_lv_ab(mrb, irep, a, b); break; - CASE(OP_RAISE, B); - printf("OP_RAISE\tR%d\t\t", a); + CASE(OP_RAISEIF, B); + printf("OP_RAISEIF\tR%d\t\t", a); print_lv_a(mrb, irep, a); break; CASE(OP_POPERR, B); diff --git a/src/vm.c b/src/vm.c index 3faecfaf2..2dbbe85f8 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1255,8 +1255,24 @@ RETRY_TRY_BLOCK: } CASE(OP_EXCEPT, B) { - mrb_value exc = mrb_obj_value(mrb->exc); - mrb->exc = 0; + mrb_value exc; + + if (mrb->exc == NULL) { + exc = mrb_nil_value(); + } + else { + switch (mrb->exc->tt) { + case MRB_TT_BREAK: + case MRB_TT_EXCEPTION: + exc = mrb_obj_value(mrb->exc); + break; + default: + mrb_assert(!"bad mrb_type"); + exc = mrb_nil_value(); + break; + } + mrb->exc = NULL; + } regs[a] = exc; NEXT; } @@ -1289,9 +1305,17 @@ RETRY_TRY_BLOCK: NEXT; } - CASE(OP_RAISE, B) { - mrb_exc_set(mrb, regs[a]); - goto L_RAISE; + CASE(OP_RAISEIF, B) { + mrb_value exc = regs[a]; + if (mrb_break_p(exc)) { + mrb->exc = mrb_obj_ptr(exc); + goto L_BREAK; + } + mrb_exc_set(mrb, exc); + if (mrb->exc) { + goto L_RAISE; + } + NEXT; } CASE(OP_EPUSH, B) { -- cgit v1.2.3 From c1f112c49a597da8478516261f0812bc073f6cd8 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 18 Jul 2020 19:05:12 +0900 Subject: Replace global jump with catch handler implementation When a global jump occurs, look at the catch handler table to determine where to jump. In that case, `pc` already shows the following instruction, but since the table shows `begin_offset ... end_offset`, the comparison is done with `begin_offset < pc && pc <= end_offset`. If there is a corresponding handler, move `pc` to `handler.target_offset` and continue running the VM. When a global jump across `ensure` is made by `return`, `break`, `next`, `redo` and `retry`, the extended `RBreak` object saves and restores the C-level execution position. This extended `RBreak` can have tag information, which makes it a pseudo coroutine (the "tag" mimics CRuby). The implementation of pseudo coroutines by `RBreak` is summarized by `CHECKPOINT_RESTORE ... CHECKPOINT_MAIN ... CHECKPOINT_END` and `throw_tagged_break` / `unwind_ensure` macros. The restart of processing is branched by `RBREAK_TAG_FOREACH(DISPATCH_CHECKPOINTS)`. - Not only `rescue` blocks but also `ensure` blocks are now sandwiched between `OP_EXCEPT` and `OP_RAISEIF`. - Remove the function `ecall()`. It is no longer necessary to re-enter the VM to perform an "ensure block". This will resolves #1888. - Added instruction `OP_JUW` (Jump while UnWind). It jumps unconditionally like `OP_JMP`, but searches the catch handler table and executes the ensure block. Since it searches the catch handler table, it is much heavier than `OP_JMP`. --- doc/opcode.md | 1 + include/mruby.h | 8 - include/mruby/error.h | 33 ++++ include/mruby/ops.h | 1 + mrbgems/mruby-compiler/core/codegen.c | 91 ++++----- mrbgems/mruby-os-memsize/src/memsize.c | 2 - src/codedump.c | 3 + src/gc.c | 8 - src/state.c | 2 - src/vm.c | 339 +++++++++++++++++++++++---------- 10 files changed, 311 insertions(+), 177 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/doc/opcode.md b/doc/opcode.md index 385bf9468..abdee704f 100644 --- a/doc/opcode.md +++ b/doc/opcode.md @@ -62,6 +62,7 @@ sign) of operands. | OP_JMPIF | BS | if R(a) pc=b | | OP_JMPNOT | BS | if !R(a) pc=b | | OP_JMPNIL | BS | if R(a)==nil pc=b | +| OP_JUW | S | unwind_and_jump_to(a) | | OP_EXCEPT | B | R(a) = exc | | OP_RESCUE | BB | R(b) = R(a).isa?(R(b)) | | OP_RAISEIF | B | raise(R(a)) if R(a) | diff --git a/include/mruby.h b/include/mruby.h index c9425e8a7..9f1d1aa30 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -149,8 +149,6 @@ typedef struct { mrb_sym mid; const struct RProc *proc; mrb_value *stackent; - uint16_t ridx; - uint16_t epos; struct REnv *env; const mrb_code *pc; /* return address */ const mrb_code *err; /* error position */ @@ -177,11 +175,6 @@ struct mrb_context { mrb_callinfo *ci; mrb_callinfo *cibase, *ciend; - uint16_t *rescue; /* exception handler stack */ - uint16_t rsize; - struct RProc **ensure; /* ensure handler stack */ - uint16_t esize, eidx; - enum mrb_fiber_state status : 4; mrb_bool vmexec : 1; struct RFiber *fib; @@ -301,7 +294,6 @@ typedef struct mrb_state { mrb_atexit_func *atexit_stack; #endif uint16_t atexit_stack_len; - uint16_t ecall_nest; /* prevent infinite recursive ecall() */ } mrb_state; /** diff --git a/include/mruby/error.h b/include/mruby/error.h index 72f6c5f3d..67a0a539e 100644 --- a/include/mruby/error.h +++ b/include/mruby/error.h @@ -66,6 +66,39 @@ mrb_break_value_set(struct RBreak *brk, mrb_value val) #define mrb_break_proc_get(brk) ((brk)->proc) #define mrb_break_proc_set(brk, p) ((brk)->proc = p) +#define RBREAK_TAG_FOREACH(f) \ + f(RBREAK_TAG_BREAK, 0) \ + f(RBREAK_TAG_BREAK_UPPER, 1) \ + f(RBREAK_TAG_BREAK_INTARGET, 2) \ + f(RBREAK_TAG_RETURN_BLOCK, 3) \ + f(RBREAK_TAG_RETURN, 4) \ + f(RBREAK_TAG_RETURN_TOPLEVEL, 5) \ + f(RBREAK_TAG_JUMP, 6) \ + f(RBREAK_TAG_STOP, 7) + +#define RBREAK_TAG_DEFINE(tag, i) tag = i, +enum { + RBREAK_TAG_FOREACH(RBREAK_TAG_DEFINE) +}; +#undef RBREAK_TAG_DEFINE + +#define RBREAK_TAG_BIT 3 +#define RBREAK_TAG_BIT_OFF 8 +#define RBREAK_TAG_MASK (~(~UINT32_C(0) << RBREAK_TAG_BIT)) + +static inline uint32_t +mrb_break_tag_get(struct RBreak *brk) +{ + return (brk->flags >> RBREAK_TAG_BIT_OFF) & RBREAK_TAG_MASK; +} + +static inline void +mrb_break_tag_set(struct RBreak *brk, uint32_t tag) +{ + brk->flags &= ~(RBREAK_TAG_MASK << RBREAK_TAG_BIT_OFF); + brk->flags |= (tag & RBREAK_TAG_MASK) << RBREAK_TAG_BIT_OFF; +} + /** * Protect * diff --git a/include/mruby/ops.h b/include/mruby/ops.h index 8ff44088e..770e54f3d 100644 --- a/include/mruby/ops.h +++ b/include/mruby/ops.h @@ -49,6 +49,7 @@ OPCODE(JMP, S) /* pc=a */ OPCODE(JMPIF, BS) /* if R(a) pc=b */ OPCODE(JMPNOT, BS) /* if !R(a) pc=b */ OPCODE(JMPNIL, BS) /* if R(a)==nil pc=b */ +OPCODE(JUW, S) /* unwind_and_jump_to(a) */ OPCODE(EXCEPT, B) /* R(a) = exc */ OPCODE(RESCUE, BB) /* R(b) = R(a).isa?(R(b)) */ OPCODE(RAISEIF, B) /* raise(R(a)) if R(a) */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 7911ecb36..b3ce388a9 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -40,7 +40,6 @@ enum looptype { struct loopinfo { enum looptype type; int pc0, pc1, pc2, pc3, acc; - int ensure_level; struct loopinfo *prev; }; @@ -61,7 +60,6 @@ typedef struct scope { mrb_bool mscope:1; struct loopinfo *loop; - int ensure_level; mrb_sym filename_sym; uint16_t lineno; @@ -1465,16 +1463,19 @@ codegen(codegen_scope *s, node *tree, int val) { int noexc, exend, pos1, pos2, tmp; struct loopinfo *lp; + int catch_entry, begin, end; if (tree->car == NULL) goto exit; lp = loop_push(s, LOOP_BEGIN); lp->pc0 = new_label(s); - lp->pc1 = genjmp(s, OP_ONERR, 0); + catch_entry = catch_hander_new(s); + begin = s->pc; codegen(s, tree->car, VAL); pop(); lp->type = LOOP_RESCUE; + end = s->pc; noexc = genjmp(s, OP_JMP, 0); - dispatch(s, lp->pc1); + catch_hander_set(s, catch_entry, MRB_CATCH_RESCUE, begin, end, s->pc); tree = tree->cdr; exend = 0; pos1 = 0; @@ -1539,7 +1540,6 @@ codegen(codegen_scope *s, node *tree, int val) pop(); tree = tree->cdr; dispatch(s, noexc); - genop_1(s, OP_POPERR, 1); if (tree->car) { codegen(s, tree->car, val); } @@ -1555,14 +1555,22 @@ codegen(codegen_scope *s, node *tree, int val) if (!tree->cdr || !tree->cdr->cdr || (nint(tree->cdr->cdr->car) == NODE_BEGIN && tree->cdr->cdr->cdr)) { + int catch_entry, begin, end, target; int idx; - s->ensure_level++; - idx = scope_body(s, tree->cdr, NOVAL); - genop_1(s, OP_EPUSH, idx); + catch_entry = catch_hander_new(s); + begin = s->pc; codegen(s, tree->car, val); - s->ensure_level--; - genop_1(s, OP_EPOP, 1); + end = target = s->pc; + push(); + idx = cursp(); + genop_1(s, OP_EXCEPT, idx); + push(); + codegen(s, tree->cdr->cdr, NOVAL); + pop(); + genop_1(s, OP_RAISEIF, idx); + pop(); + catch_hander_set(s, catch_entry, MRB_CATCH_ENSURE, begin, end, target); } else { /* empty ensure ignored */ codegen(s, tree->car, val); @@ -2024,18 +2032,20 @@ codegen(codegen_scope *s, node *tree, int val) if ((len == 2 && name[0] == '|' && name[1] == '|') && (nint(tree->car->car) == NODE_CONST || nint(tree->car->car) == NODE_CVAR)) { - int onerr, noexc, exc; + int catch_entry, begin, end; + int noexc, exc; struct loopinfo *lp; - onerr = genjmp(s, OP_ONERR, 0); lp = loop_push(s, LOOP_BEGIN); - lp->pc1 = onerr; + lp->pc0 = new_label(s); + catch_entry = catch_hander_new(s); + begin = s->pc; exc = cursp(); codegen(s, tree->car, VAL); - lp->type = LOOP_RESCUE; - genop_1(s, OP_POPERR, 1); + end = s->pc; noexc = genjmp(s, OP_JMP, 0); - dispatch(s, onerr); + lp->type = LOOP_RESCUE; + catch_hander_set(s, catch_entry, MRB_CATCH_RESCUE, begin, end, s->pc); genop_1(s, OP_EXCEPT, exc); genop_1(s, OP_LOADF, exc); dispatch(s, noexc); @@ -2288,11 +2298,8 @@ codegen(codegen_scope *s, node *tree, int val) raise_error(s, "unexpected next"); } else if (s->loop->type == LOOP_NORMAL) { - if (s->ensure_level > s->loop->ensure_level) { - genop_1(s, OP_EPOP, s->ensure_level - s->loop->ensure_level); - } codegen(s, tree, NOVAL); - genjmp(s, OP_JMP, s->loop->pc0); + genjmp(s, OP_JUW, s->loop->pc0); } else { if (tree) { @@ -2312,10 +2319,7 @@ codegen(codegen_scope *s, node *tree, int val) raise_error(s, "unexpected redo"); } else { - if (s->ensure_level > s->loop->ensure_level) { - genop_1(s, OP_EPOP, s->ensure_level - s->loop->ensure_level); - } - genjmp(s, OP_JMP, s->loop->pc2); + genjmp(s, OP_JUW, s->loop->pc2); } if (val) push(); break; @@ -2323,32 +2327,16 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_RETRY: { const char *msg = "unexpected retry"; + const struct loopinfo *lp = s->loop; - if (!s->loop) { + while (lp && lp->type != LOOP_RESCUE) { + lp = lp->prev; + } + if (!lp) { raise_error(s, msg); } else { - struct loopinfo *lp = s->loop; - int n = 0; - - while (lp && lp->type != LOOP_RESCUE) { - if (lp->type == LOOP_BEGIN) { - n++; - } - lp = lp->prev; - } - if (!lp) { - raise_error(s, msg); - } - else { - if (n > 0) { - genop_1(s, OP_POPERR, n); - } - if (s->ensure_level > lp->ensure_level) { - genop_1(s, OP_EPOP, s->ensure_level - lp->ensure_level); - } - genjmp(s, OP_JMP, lp->pc0); - } + genjmp(s, OP_JUW, lp->pc0); } if (val) push(); } @@ -3132,7 +3120,6 @@ loop_push(codegen_scope *s, enum looptype t) p->type = t; p->pc0 = p->pc1 = p->pc2 = p->pc3 = 0; p->prev = s->loop; - p->ensure_level = s->ensure_level; p->acc = cursp(); s->loop = p; @@ -3148,7 +3135,6 @@ loop_break(codegen_scope *s, node *tree) } else { struct loopinfo *loop; - int n = 0; if (tree) { gen_retval(s, tree); @@ -3157,7 +3143,6 @@ loop_break(codegen_scope *s, node *tree) loop = s->loop; while (loop) { if (loop->type == LOOP_BEGIN) { - n++; loop = loop->prev; } else if (loop->type == LOOP_RESCUE) { @@ -3171,20 +3156,14 @@ loop_break(codegen_scope *s, node *tree) raise_error(s, "unexpected break"); return; } - if (n > 0) { - genop_1(s, OP_POPERR, n); - } if (loop->type == LOOP_NORMAL) { int tmp; - if (s->ensure_level > s->loop->ensure_level) { - genop_1(s, OP_EPOP, s->ensure_level - s->loop->ensure_level); - } if (tree) { gen_move(s, loop->acc, cursp(), 0); } - tmp = genjmp(s, OP_JMP, loop->pc3); + tmp = genjmp(s, OP_JUW, loop->pc3); loop->pc3 = tmp; } else { diff --git a/mrbgems/mruby-os-memsize/src/memsize.c b/mrbgems/mruby-os-memsize/src/memsize.c index 191ab062d..7030299f4 100644 --- a/mrbgems/mruby-os-memsize/src/memsize.c +++ b/mrbgems/mruby-os-memsize/src/memsize.c @@ -133,8 +133,6 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj) size += mrb_objspace_page_slot_size() + sizeof(struct RFiber) + sizeof(struct mrb_context) + - sizeof(struct RProc *) * f->cxt->esize + - sizeof(uint16_t *) * f->cxt->rsize + sizeof(mrb_value) * stack_size + sizeof(mrb_callinfo) * ci_size; break; diff --git a/src/codedump.c b/src/codedump.c index 81212921d..095028a39 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -261,6 +261,9 @@ codedump(mrb_state *mrb, const mrb_irep *irep) CASE(OP_JMP, S); printf("OP_JMP\t\t%03d\n", a); break; + CASE(OP_JUW, S); + printf("OP_JUW\t\t%03d\n", a); + break; CASE(OP_JMPIF, BS); printf("OP_JMPIF\tR%d\t%03d\t", a, b); print_lv_a(mrb, irep, a); diff --git a/src/gc.c b/src/gc.c index ab9779e1b..17f7e81e4 100644 --- a/src/gc.c +++ b/src/gc.c @@ -640,7 +640,6 @@ mark_context_stack(mrb_state *mrb, struct mrb_context *c) static void mark_context(mrb_state *mrb, struct mrb_context *c) { - int i; mrb_callinfo *ci; start: @@ -657,10 +656,6 @@ mark_context(mrb_state *mrb, struct mrb_context *c) mrb_gc_mark(mrb, (struct RBasic*)ci->target_class); } } - /* mark ensure stack */ - for (i=0; ieidx; i++) { - mrb_gc_mark(mrb, (struct RBasic*)c->ensure[i]); - } /* mark fibers */ mrb_gc_mark(mrb, (struct RBasic*)c->fib); if (c->prev) { @@ -1014,9 +1009,6 @@ gc_gray_counts(mrb_state *mrb, mrb_gc *gc, struct RBasic *obj) if (c->stbase + i > c->stend) i = c->stend - c->stbase; children += i; - /* mark ensure stack */ - children += c->eidx; - /* mark closure */ if (c->cibase) { for (i=0, ci = c->cibase; ci <= c->ci; i++, ci++) diff --git a/src/state.c b/src/state.c index 7a1283fa6..1f85448a1 100644 --- a/src/state.c +++ b/src/state.c @@ -171,8 +171,6 @@ mrb_free_context(mrb_state *mrb, struct mrb_context *c) if (!c) return; mrb_free(mrb, c->stbase); mrb_free(mrb, c->cibase); - mrb_free(mrb, c->rescue); - mrb_free(mrb, c->ensure); mrb_free(mrb, c); } diff --git a/src/vm.c b/src/vm.c index d11caa5c7..cc6f087f9 100644 --- a/src/vm.c +++ b/src/vm.c @@ -23,6 +23,7 @@ #include #include "value_array.h" #include +#include #ifdef MRB_DISABLE_STDIO #if defined(__cplusplus) @@ -280,8 +281,6 @@ cipush(mrb_state *mrb, const mrb_code *pc, int push_stacks, int acc, ci->mid = mid; ci->proc = proc; ci->stackent = c->stack; - ci->epos = c->eidx; - ci->ridx = ci[-1].ridx; ci->pc = pc; ci->argc = argc; ci->acc = acc; @@ -329,54 +328,6 @@ cipop(mrb_state *mrb) void mrb_exc_set(mrb_state *mrb, mrb_value exc); static mrb_value mrb_run(mrb_state *mrb, const struct RProc* proc, mrb_value self); -static void -ecall(mrb_state *mrb) -{ - struct RProc *p; - struct mrb_context *c = mrb->c; - mrb_callinfo *ci = c->ci; - struct RObject *exc; - struct REnv *env; - ptrdiff_t cioff; - int ai = mrb_gc_arena_save(mrb); - uint16_t i; - int nregs; - - if (c->eidx == 0) return; - i = --c->eidx; - - /* restrict total call depth of ecall() */ - if (++mrb->ecall_nest > MRB_ECALL_DEPTH_MAX) { - mrb_exc_raise(mrb, mrb_obj_value(mrb->stack_err)); - } - p = c->ensure[i]; - if (!p) return; - mrb_assert(!MRB_PROC_CFUNC_P(p)); - c->ensure[i] = NULL; - nregs = p->upper->body.irep->nregs; - if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc) && - ci->proc->body.irep->nregs > nregs) { - nregs = ci->proc->body.irep->nregs; - } - cioff = ci - c->cibase; - ci = cipush(mrb, NULL, nregs, CI_ACC_SKIP, MRB_PROC_TARGET_CLASS(p), p, ci->mid, 0); - env = MRB_PROC_ENV(p); - mrb_assert(env); - exc = mrb->exc; mrb->exc = 0; - if (exc) { - mrb_gc_protect(mrb, mrb_obj_value(exc)); - } - if (mrb->c->fib) { - mrb_gc_protect(mrb, mrb_obj_value(mrb->c->fib)); - } - mrb_run(mrb, p, env->stack[0]); - mrb->c = c; - c->ci = c->cibase + cioff; - if (!mrb->exc) mrb->exc = exc; - mrb_gc_arena_restore(mrb, ai); - mrb->ecall_nest--; -} - #ifndef MRB_FUNCALL_ARGC_MAX #define MRB_FUNCALL_ARGC_MAX 16 #endif @@ -821,17 +772,56 @@ mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const } static struct RBreak* -break_new(mrb_state *mrb, const struct RProc *p, mrb_value val) +break_new(mrb_state *mrb, uint32_t tag, const struct RProc *p, mrb_value val) { struct RBreak *brk; brk = (struct RBreak*)mrb_obj_alloc(mrb, MRB_TT_BREAK, NULL); mrb_break_proc_set(brk, p); mrb_break_value_set(brk, val); + mrb_break_tag_set(brk, tag); return brk; } +#define MRB_CATCH_FILTER_RESCUE (UINT32_C(1) << MRB_CATCH_RESCUE) +#define MRB_CATCH_FILTER_ENSURE (UINT32_C(1) << MRB_CATCH_ENSURE) +#define MRB_CATCH_FILTER_ALL (MRB_CATCH_FILTER_RESCUE | MRB_CATCH_FILTER_ENSURE) + +static const struct mrb_irep_catch_hander * +catch_handler_find(mrb_state *mrb, mrb_callinfo *ci, const mrb_code *pc, uint32_t filter) +{ + mrb_irep *irep; + ptrdiff_t xpc; + size_t cnt; + const struct mrb_irep_catch_hander *e; + +/* The comparison operators use `>` and `<=` because pc already points to the next instruction */ +#define catch_cover_p(pc, beg, end) ((pc) > (beg) && (pc) <= (end)) + + if (ci->proc == NULL || MRB_PROC_CFUNC_P(ci->proc)) return NULL; + irep = ci->proc->body.irep; + if (irep->clen < 1) return NULL; + xpc = pc - irep->iseq; + /* If it retry at the top level, pc will be 0, so check with -1 as the start position */ + mrb_assert(catch_cover_p(xpc, -1, irep->ilen)); + if (!catch_cover_p(xpc, -1, irep->ilen)) return NULL; + + /* Currently uses a simple linear search to avoid processing complexity. */ + cnt = irep->clen; + e = mrb_irep_catch_handler_table(irep) + cnt - 1; + for (; cnt > 0; cnt --, e --) { + if (((UINT32_C(1) << e->type) & filter) && + catch_cover_p(xpc, bin_to_uint16(e->begin), bin_to_uint16(e->end))) { + return e; + } + } + +#undef catch_cover_p + + return NULL; +} + typedef enum { LOCALJUMP_ERROR_RETURN = 0, LOCALJUMP_ERROR_BREAK = 1, @@ -878,6 +868,81 @@ argnum_error(mrb_state *mrb, mrb_int num) mrb_exc_set(mrb, exc); } +static mrb_bool +break_tag_p(struct RBreak *brk, uint32_t tag) +{ + return (brk != NULL && brk->tt == MRB_TT_BREAK) ? TRUE : FALSE; +} + +static void +prepare_tagged_break(mrb_state *mrb, uint32_t tag, struct RProc *proc, mrb_value val) +{ + if (break_tag_p((struct RBreak*)mrb->exc, tag)) { + mrb_break_tag_set((struct RBreak*)mrb->exc, tag); + } + else { + mrb->exc = (struct RObject*)break_new(mrb, tag, proc, val); + } +} + +#define THROW_TAGGED_BREAK(mrb, tag, proc, val) \ + do { \ + prepare_tagged_break(mrb, tag, proc, val); \ + goto L_CATCH_TAGGED_BREAK; \ + } while (0) + +#define UNWIND_ENSURE(mrb, ci, pc, tag, proc, val) \ + do { \ + ch = catch_handler_find(mrb, ci, pc, MRB_CATCH_FILTER_ENSURE); \ + if (ch) { \ + THROW_TAGGED_BREAK(mrb, tag, proc, val); \ + } \ + } while (0) + +/* + * CHECKPOINT_RESTORE(tag) { + * This part is executed when jumping by the same "tag" of RBreak (it is not executed the first time). + * Write the code required (initialization of variables, etc.) for the subsequent processing. + * } + * CHECKPOINT_MAIN(tag) { + * This part is always executed. + * } + * CHECKPOINT_END(tag); + * + * ... + * + * // Jump to CHECKPOINT_RESTORE with the same "tag". + * goto CHECKPOINT_LABEL_MAKE(tag); + */ + +#define CHECKPOINT_LABEL_MAKE(tag) L_CHECKPOINT_ ## tag + +#define CHECKPOINT_RESTORE(tag) \ + do { \ + DEBUG_ONLY_EXPR(int current_checkpoint_tag); \ + DEBUG_ONLY_EXPR(current_checkpoint_tag = (tag)); \ + if (FALSE) { \ + CHECKPOINT_LABEL_MAKE(tag): \ + DEBUG_ONLY_EXPR(current_checkpoint_tag = (tag)); \ + do { + +#define CHECKPOINT_MAIN(tag) \ + } while (0); \ + } \ + mrb_assert((tag) == current_checkpoint_tag); \ + do { + +#define CHECKPOINT_END(tag) \ + } while (0); \ + mrb_assert((tag) == current_checkpoint_tag); \ + } while (0) + +#ifdef MRB_DEBUG +#define DEBUG_ONLY_EXPR(e) e +#else +#define DEBUG_ONLY_EXPR(e) ((void)0) +#endif + #define ERR_PC_SET(mrb) mrb->c->ci->err = pc0; #define ERR_PC_CLR(mrb) mrb->c->ci->err = 0; #ifdef MRB_ENABLE_DEBUG_HOOK @@ -976,6 +1041,7 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc) uint16_t b; uint8_t c; mrb_sym mid; + const struct mrb_irep_catch_hander *ch; #ifdef DIRECT_THREADED static void *optable[] = { @@ -1231,6 +1297,30 @@ RETRY_TRY_BLOCK: NEXT; } + CASE(OP_JUW, S) { + CHECKPOINT_RESTORE(RBREAK_TAG_JUMP) { + struct RBreak *brk = (struct RBreak*)mrb->exc; + mrb_value target = mrb_break_value_get(brk); + mrb_assert(mrb_fixnum_p(target)); + a = mrb_fixnum(target); + mrb_assert(a >= 0 && a < irep->ilen); + } + CHECKPOINT_MAIN(RBREAK_TAG_JUMP) { + ch = catch_handler_find(mrb, mrb->c->ci, pc, MRB_CATCH_FILTER_ENSURE); + if (ch) { + /* avoiding a jump from a catch handler into the same handler */ + if (a < bin_to_uint16(ch->begin) || a >= bin_to_uint16(ch->end)) { + THROW_TAGGED_BREAK(mrb, RBREAK_TAG_JUMP, proc, mrb_fixnum_value(a)); + } + } + } + CHECKPOINT_END(RBREAK_TAG_JUMP); + + mrb->exc = NULL; /* clear break object */ + pc = irep->iseq + a; + JUMP; + } + CASE(OP_EXCEPT, B) { mrb_value exc; @@ -1563,6 +1653,7 @@ RETRY_TRY_BLOCK: mrb_gc_arena_restore(mrb, ai); if (mrb->exc) goto L_RAISE; ci = mrb->c->ci; + mrb_assert(!mrb_break_p(v)); if (!ci->target_class) { /* return from context modifying method (resume/yield) */ if (ci->acc == CI_ACC_RESUMED) { mrb->jmp = prev_jmp; @@ -1839,13 +1930,7 @@ RETRY_TRY_BLOCK: c = OP_R_NORMAL; L_RETURN: { - mrb_callinfo *ci; - -#define ecall_adjust() do {\ - ptrdiff_t cioff = ci - mrb->c->cibase;\ - ecall(mrb);\ - ci = mrb->c->cibase + cioff;\ -} while (0) + mrb_callinfo *ci; ci = mrb->c->ci; if (ci->mid) { @@ -1873,17 +1958,20 @@ RETRY_TRY_BLOCK: L_RAISE: ci0 = ci = mrb->c->ci; if (ci == mrb->c->cibase) { - if (ci->ridx == 0) goto L_FTOP; - goto L_RESCUE; + ch = catch_handler_find(mrb, ci, pc, MRB_CATCH_FILTER_ALL); + if (ch == NULL) goto L_FTOP; + goto L_CATCH; } - while (ci[0].ridx == ci[-1].ridx) { + while ((ch = catch_handler_find(mrb, ci, pc, MRB_CATCH_FILTER_ALL)) == NULL) { ci = cipop(mrb); if (ci[1].acc == CI_ACC_SKIP && prev_jmp) { mrb->jmp = prev_jmp; MRB_THROW(prev_jmp); } + pc = ci[1].pc; if (ci == mrb->c->cibase) { - if (ci->ridx == 0) { + ch = catch_handler_find(mrb, ci, pc, MRB_CATCH_FILTER_ALL); + if (ch == NULL) { L_FTOP: /* fiber top */ if (mrb->c == mrb->root_c) { mrb->c->stack = mrb->c->stbase; @@ -1892,9 +1980,6 @@ RETRY_TRY_BLOCK: else { struct mrb_context *c = mrb->c; - while (c->eidx > ci->epos) { - ecall_adjust(); - } c->status = MRB_FIBER_TERMINATED; mrb->c = c->prev; c->prev = NULL; @@ -1903,15 +1988,13 @@ RETRY_TRY_BLOCK: } break; } - /* call ensure only when we skip this callinfo */ - if (ci[0].ridx == ci[-1].ridx) { - while (mrb->c->eidx > ci->epos) { - ecall_adjust(); - } - } } - L_RESCUE: - if (ci->ridx == 0) goto L_STOP; + L_CATCH: + if (ch == NULL) goto L_STOP; + if (FALSE) { + L_CATCH_TAGGED_BREAK: /* from THROW_TAGGED_BREAK() or UNWIND_ENSURE() */ + ci = ci0 = mrb->c->ci; + } proc = ci->proc; irep = proc->body.irep; pool = irep->pool; @@ -1920,7 +2003,7 @@ RETRY_TRY_BLOCK: mrb->c->stack = ci[1].stackent; } mrb_stack_extend(mrb, irep->nregs); - pc = irep->iseq+mrb->c->rescue[--ci->ridx]; + pc = irep->iseq + bin_to_uint16(ch->target); } else { int acc; @@ -1950,8 +2033,19 @@ RETRY_TRY_BLOCK: localjump_error(mrb, LOCALJUMP_ERROR_RETURN); goto L_RAISE; } - ci--; + CHECKPOINT_RESTORE(RBREAK_TAG_RETURN_BLOCK) { + cibase = mrb->c->cibase; + dst = top_proc(mrb, proc); + } + CHECKPOINT_MAIN(RBREAK_TAG_RETURN_BLOCK) { + UNWIND_ENSURE(mrb, ci, pc, RBREAK_TAG_RETURN_BLOCK, proc, v); + } + CHECKPOINT_END(RBREAK_TAG_RETURN_BLOCK); + pc = ci->pc; + ci = cipop(mrb); } + mrb->exc = NULL; /* clear break object */ + proc = ci->proc; if (ci <= cibase) { localjump_error(mrb, LOCALJUMP_ERROR_RETURN); goto L_RAISE; @@ -1966,16 +2060,20 @@ RETRY_TRY_BLOCK: if (!c->prev) { /* toplevel return */ regs[irep->nlocals] = v; - goto L_STOP; + goto CHECKPOINT_LABEL_MAKE(RBREAK_TAG_STOP); } if (c->prev->ci == c->prev->cibase) { mrb_value exc = mrb_exc_new_str_lit(mrb, E_FIBER_ERROR, "double resume"); mrb_exc_set(mrb, exc); goto L_RAISE; } - while (c->eidx > 0) { - ecall(mrb); + CHECKPOINT_RESTORE(RBREAK_TAG_RETURN_TOPLEVEL) { + c = mrb->c; } + CHECKPOINT_MAIN(RBREAK_TAG_RETURN_TOPLEVEL) { + UNWIND_ENSURE(mrb, ci, pc, RBREAK_TAG_RETURN_TOPLEVEL, proc, v); + } + CHECKPOINT_END(RBREAK_TAG_RETURN_TOPLEVEL); /* automatic yield at the end */ c->status = MRB_FIBER_TERMINATED; mrb->c = c->prev; @@ -1983,6 +2081,14 @@ RETRY_TRY_BLOCK: mrb->c->status = MRB_FIBER_RUNNING; ci = mrb->c->ci; } + CHECKPOINT_RESTORE(RBREAK_TAG_RETURN) { + /* do nothing */ + } + CHECKPOINT_MAIN(RBREAK_TAG_RETURN) { + UNWIND_ENSURE(mrb, ci, pc, RBREAK_TAG_RETURN, proc, v); + } + CHECKPOINT_END(RBREAK_TAG_RETURN); + mrb->exc = NULL; /* clear break object */ break; case OP_R_BREAK: if (MRB_PROC_STRICT_P(proc)) goto NORMAL_RETURN; @@ -2005,9 +2111,13 @@ RETRY_TRY_BLOCK: goto L_BREAK_ERROR; } } - while (mrb->c->eidx > mrb->c->ci->epos) { - ecall_adjust(); + CHECKPOINT_RESTORE(RBREAK_TAG_BREAK) { + /* do nothing */ } + CHECKPOINT_MAIN(RBREAK_TAG_BREAK) { + UNWIND_ENSURE(mrb, ci, pc, RBREAK_TAG_BREAK, proc, v); + } + CHECKPOINT_END(RBREAK_TAG_BREAK); /* break from fiber block */ if (ci == mrb->c->cibase && ci->pc) { struct mrb_context *c = mrb->c; @@ -2017,45 +2127,64 @@ RETRY_TRY_BLOCK: ci = mrb->c->ci; } if (ci->acc < 0) { + ci = cipop(mrb); mrb_gc_arena_restore(mrb, ai); mrb->c->vmexec = FALSE; - mrb->exc = (struct RObject*)break_new(mrb, proc, v); + mrb->exc = (struct RObject*)break_new(mrb, RBREAK_TAG_BREAK, proc, v); mrb->jmp = prev_jmp; MRB_THROW(prev_jmp); } if (FALSE) { + struct RBreak *brk; + L_BREAK: - v = mrb_break_value_get((struct RBreak*)mrb->exc); - proc = mrb_break_proc_get((struct RBreak*)mrb->exc); - mrb->exc = NULL; + brk = (struct RBreak*)mrb->exc; + proc = mrb_break_proc_get(brk); + v = mrb_break_value_get(brk); ci = mrb->c->ci; + + switch (mrb_break_tag_get(brk)) { +#define DISPATCH_CHECKPOINTS(n, i) case n: goto CHECKPOINT_LABEL_MAKE(n); + RBREAK_TAG_FOREACH(DISPATCH_CHECKPOINTS) +#undef DISPATCH_CHECKPOINTS + default: + mrb_assert(!"wrong break tag"); + } } mrb->c->stack = ci->stackent; - proc = proc->upper; - while (mrb->c->cibase < ci && ci[-1].proc != proc) { + while (mrb->c->cibase < ci && ci[-1].proc != proc->upper) { if (ci[-1].acc == CI_ACC_SKIP) { - while (ci < mrb->c->ci) { - cipop(mrb); - } goto L_BREAK_ERROR; } - ci--; + CHECKPOINT_RESTORE(RBREAK_TAG_BREAK_UPPER) { + /* do nothing */ + } + CHECKPOINT_MAIN(RBREAK_TAG_BREAK_UPPER) { + UNWIND_ENSURE(mrb, ci, pc, RBREAK_TAG_BREAK_UPPER, proc, v); + } + CHECKPOINT_END(RBREAK_TAG_BREAK_UPPER); + pc = ci->pc; + ci = cipop(mrb); } + CHECKPOINT_RESTORE(RBREAK_TAG_BREAK_INTARGET) { + /* do nothing */ + } + CHECKPOINT_MAIN(RBREAK_TAG_BREAK_INTARGET) { + UNWIND_ENSURE(mrb, ci, pc, RBREAK_TAG_BREAK_INTARGET, proc, v); + } + CHECKPOINT_END(RBREAK_TAG_BREAK_INTARGET); if (ci == mrb->c->cibase) { goto L_BREAK_ERROR; } + mrb->exc = NULL; /* clear break object */ break; default: /* cannot happen */ break; } - while (ci < mrb->c->ci) { - cipop(mrb); - } - ci[0].ridx = ci[-1].ridx; - while (mrb->c->eidx > ci->epos) { - ecall_adjust(); - } + mrb_assert(ci == mrb->c->ci); + mrb_assert(mrb->exc == NULL); + if (mrb->c->vmexec && !ci->target_class) { mrb_gc_arena_restore(mrb, ai); mrb->c->vmexec = FALSE; @@ -2679,14 +2808,18 @@ RETRY_TRY_BLOCK: CASE(OP_STOP, Z) { /* stop VM */ - L_STOP: - while (mrb->c->eidx > 0) { - ecall(mrb); + CHECKPOINT_RESTORE(RBREAK_TAG_STOP) { + /* do nothing */ + } + CHECKPOINT_MAIN(RBREAK_TAG_STOP) { + UNWIND_ENSURE(mrb, mrb->c->ci, pc, RBREAK_TAG_STOP, proc, mrb_nil_value()); } - mrb->c->cibase->ridx = 0; + CHECKPOINT_END(RBREAK_TAG_STOP); + L_STOP: ERR_PC_CLR(mrb); mrb->jmp = prev_jmp; if (mrb->exc) { + mrb_assert(mrb->exc->tt == MRB_TT_EXCEPTION); return mrb_obj_value(mrb->exc); } return regs[irep->nlocals]; @@ -2696,6 +2829,10 @@ RETRY_TRY_BLOCK: #undef regs } MRB_CATCH(&c_jmp) { + mrb_callinfo *ci = mrb->c->ci; + while (ci > mrb->c->cibase && ci->acc == CI_ACC_DIRECT) { + ci = cipop(mrb); + } exc_catched = TRUE; goto RETRY_TRY_BLOCK; } -- cgit v1.2.3 From 500f721f7080e79c2e41e306cc1d94471c10f173 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 8 Aug 2020 15:12:42 +0900 Subject: Fix typo `_hander` -> `_handler`. --- include/mruby/irep.h | 8 ++++---- mrbgems/mruby-compiler/core/codegen.c | 30 +++++++++++++++--------------- src/codedump.c | 2 +- src/dump.c | 4 ++-- src/load.c | 4 ++-- src/vm.c | 8 ++++---- 6 files changed, 28 insertions(+), 28 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 430602279..b800403ce 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -44,7 +44,7 @@ enum mrb_catch_type { MRB_CATCH_ENSURE = 1, }; -struct mrb_irep_catch_hander { +struct mrb_irep_catch_handler { uint8_t type; /* enum mrb_catch_type */ uint8_t begin[2]; /* The starting address to match the hander. Includes this. */ uint8_t end[2]; /* The endpoint address that matches the hander. Not Includes this. */ @@ -125,14 +125,14 @@ struct mrb_insn_data { struct mrb_insn_data mrb_decode_insn(const mrb_code *pc); -static inline const struct mrb_irep_catch_hander * +static inline const struct mrb_irep_catch_handler * mrb_irep_catch_handler_table(const struct mrb_irep *irep) { if (irep->clen > 0) { - return (const struct mrb_irep_catch_hander *)(irep->iseq + irep->ilen); + return (const struct mrb_irep_catch_handler*)(irep->iseq + irep->ilen); } else { - return (const struct mrb_irep_catch_hander *)NULL; + return (const struct mrb_irep_catch_handler*)NULL; } } diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index b3ce388a9..2ede5b81e 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -71,7 +71,7 @@ typedef struct scope { mrb_pool_value *pool; mrb_sym *syms; mrb_irep **reps; - struct mrb_irep_catch_hander *catch_table; + struct mrb_irep_catch_handler *catch_table; uint32_t pcapa, scapa, rcapa; uint16_t nlocals; @@ -97,8 +97,8 @@ static void loop_pop(codegen_scope *s, int val); * - Larger start position * - Same start position but smaller end position */ -static int catch_hander_new(codegen_scope *s); -static void catch_hander_set(codegen_scope *s, int ent, enum mrb_catch_type type, uint32_t begin, uint32_t end, uint32_t target); +static int catch_handler_new(codegen_scope *s); +static void catch_handler_set(codegen_scope *s, int ent, enum mrb_catch_type type, uint32_t begin, uint32_t end, uint32_t target); static void gen_assignment(codegen_scope *s, node *tree, int sp, int val); static void gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val); @@ -1468,14 +1468,14 @@ codegen(codegen_scope *s, node *tree, int val) if (tree->car == NULL) goto exit; lp = loop_push(s, LOOP_BEGIN); lp->pc0 = new_label(s); - catch_entry = catch_hander_new(s); + catch_entry = catch_handler_new(s); begin = s->pc; codegen(s, tree->car, VAL); pop(); lp->type = LOOP_RESCUE; end = s->pc; noexc = genjmp(s, OP_JMP, 0); - catch_hander_set(s, catch_entry, MRB_CATCH_RESCUE, begin, end, s->pc); + catch_handler_set(s, catch_entry, MRB_CATCH_RESCUE, begin, end, s->pc); tree = tree->cdr; exend = 0; pos1 = 0; @@ -1558,7 +1558,7 @@ codegen(codegen_scope *s, node *tree, int val) int catch_entry, begin, end, target; int idx; - catch_entry = catch_hander_new(s); + catch_entry = catch_handler_new(s); begin = s->pc; codegen(s, tree->car, val); end = target = s->pc; @@ -1570,7 +1570,7 @@ codegen(codegen_scope *s, node *tree, int val) pop(); genop_1(s, OP_RAISEIF, idx); pop(); - catch_hander_set(s, catch_entry, MRB_CATCH_ENSURE, begin, end, target); + catch_handler_set(s, catch_entry, MRB_CATCH_ENSURE, begin, end, target); } else { /* empty ensure ignored */ codegen(s, tree->car, val); @@ -2038,14 +2038,14 @@ codegen(codegen_scope *s, node *tree, int val) lp = loop_push(s, LOOP_BEGIN); lp->pc0 = new_label(s); - catch_entry = catch_hander_new(s); + catch_entry = catch_handler_new(s); begin = s->pc; exc = cursp(); codegen(s, tree->car, VAL); end = s->pc; noexc = genjmp(s, OP_JMP, 0); lp->type = LOOP_RESCUE; - catch_hander_set(s, catch_entry, MRB_CATCH_RESCUE, begin, end, s->pc); + catch_handler_set(s, catch_entry, MRB_CATCH_RESCUE, begin, end, s->pc); genop_1(s, OP_EXCEPT, exc); genop_1(s, OP_LOADF, exc); dispatch(s, noexc); @@ -3081,7 +3081,7 @@ scope_finish(codegen_scope *s) } irep->flags = 0; if (s->iseq) { - size_t catchsize = sizeof(struct mrb_irep_catch_hander) * irep->clen; + size_t catchsize = sizeof(struct mrb_irep_catch_handler) * irep->clen; irep->iseq = (const mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc + catchsize); irep->ilen = s->pc; if (irep->clen > 0) { @@ -3187,17 +3187,17 @@ loop_pop(codegen_scope *s, int val) } static int -catch_hander_new(codegen_scope *s) +catch_handler_new(codegen_scope *s) { - size_t newsize = sizeof(struct mrb_irep_catch_hander) * (s->irep->clen + 1); - s->catch_table = (struct mrb_irep_catch_hander *)codegen_realloc(s, (void *)s->catch_table, newsize); + size_t newsize = sizeof(struct mrb_irep_catch_handler) * (s->irep->clen + 1); + s->catch_table = (struct mrb_irep_catch_handler *)codegen_realloc(s, (void *)s->catch_table, newsize); return s->irep->clen ++; } static void -catch_hander_set(codegen_scope *s, int ent, enum mrb_catch_type type, uint32_t begin, uint32_t end, uint32_t target) +catch_handler_set(codegen_scope *s, int ent, enum mrb_catch_type type, uint32_t begin, uint32_t end, uint32_t target) { - struct mrb_irep_catch_hander *e; + struct mrb_irep_catch_handler *e; mrb_assert(ent >= 0 && ent < s->irep->clen); mrb_assert(begin < MAXARG_S); diff --git a/src/codedump.c b/src/codedump.c index 095028a39..389ed3c8f 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -83,7 +83,7 @@ codedump(mrb_state *mrb, const mrb_irep *irep) if (irep->clen > 0) { int i = irep->clen; - const struct mrb_irep_catch_hander *e = mrb_irep_catch_handler_table(irep); + const struct mrb_irep_catch_handler *e = mrb_irep_catch_handler_table(irep); for (; i > 0; i --, e ++) { int begin = bin_to_uint16(e->begin); diff --git a/src/dump.c b/src/dump.c index b14fc4a1f..3bc95f629 100644 --- a/src/dump.c +++ b/src/dump.c @@ -279,7 +279,7 @@ get_catch_table_block_size(mrb_state *mrb, const mrb_irep *irep) size_t size = 0; size += sizeof(uint16_t); /* number of catch handler */ - size += (sizeof(struct mrb_irep_catch_hander)) * irep->clen; + size += (sizeof(struct mrb_irep_catch_handler)) * irep->clen; return size; } @@ -288,7 +288,7 @@ static ptrdiff_t write_catch_table_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) { uint8_t *cur = buf; - const struct mrb_irep_catch_hander *e = mrb_irep_catch_handler_table(irep); + const struct mrb_irep_catch_handler *e = mrb_irep_catch_handler_table(irep); mrb_static_assert1(sizeof(*e) == 7); if (e == NULL) return 0; diff --git a/src/load.c b/src/load.c index 59790bc17..67217b128 100644 --- a/src/load.c +++ b/src/load.c @@ -105,8 +105,8 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag if (irep->ilen > 0) { size_t data_len = sizeof(mrb_code) * irep->ilen + - sizeof(struct mrb_irep_catch_hander) * irep->clen; - mrb_static_assert1(sizeof(struct mrb_irep_catch_hander) == 7); + sizeof(struct mrb_irep_catch_handler) * irep->clen; + mrb_static_assert1(sizeof(struct mrb_irep_catch_handler) == 7); if (SIZE_ERROR_MUL(irep->ilen, sizeof(mrb_code))) { return NULL; } diff --git a/src/vm.c b/src/vm.c index 4d3ab720a..727c37d53 100644 --- a/src/vm.c +++ b/src/vm.c @@ -788,13 +788,13 @@ break_new(mrb_state *mrb, uint32_t tag, const struct RProc *p, mrb_value val) #define MRB_CATCH_FILTER_ENSURE (UINT32_C(1) << MRB_CATCH_ENSURE) #define MRB_CATCH_FILTER_ALL (MRB_CATCH_FILTER_RESCUE | MRB_CATCH_FILTER_ENSURE) -static const struct mrb_irep_catch_hander * +static const struct mrb_irep_catch_handler * catch_handler_find(mrb_state *mrb, mrb_callinfo *ci, const mrb_code *pc, uint32_t filter) { - mrb_irep *irep; + const mrb_irep *irep; ptrdiff_t xpc; size_t cnt; - const struct mrb_irep_catch_hander *e; + const struct mrb_irep_catch_handler *e; /* The comparison operators use `>` and `<=` because pc already points to the next instruction */ #define catch_cover_p(pc, beg, end) ((pc) > (beg) && (pc) <= (end)) @@ -1042,7 +1042,7 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc) uint16_t b; uint8_t c; mrb_sym mid; - const struct mrb_irep_catch_hander *ch; + const struct mrb_irep_catch_handler *ch; #ifdef DIRECT_THREADED static void *optable[] = { -- cgit v1.2.3 From 107c777341c4768f0208e590a9ec6c8b9a241060 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 8 Aug 2020 15:57:42 +0900 Subject: Rename `OP_JUW` instruction to `OP_JMPUW`. --- doc/opcode.md | 2 +- include/mruby/ops.h | 2 +- mrbgems/mruby-compiler/core/codegen.c | 8 ++++---- src/codedump.c | 4 ++-- src/vm.c | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/doc/opcode.md b/doc/opcode.md index abdee704f..513b28302 100644 --- a/doc/opcode.md +++ b/doc/opcode.md @@ -62,7 +62,7 @@ sign) of operands. | OP_JMPIF | BS | if R(a) pc=b | | OP_JMPNOT | BS | if !R(a) pc=b | | OP_JMPNIL | BS | if R(a)==nil pc=b | -| OP_JUW | S | unwind_and_jump_to(a) | +| OP_JMPUW | S | unwind_and_jump_to(a) | | OP_EXCEPT | B | R(a) = exc | | OP_RESCUE | BB | R(b) = R(a).isa?(R(b)) | | OP_RAISEIF | B | raise(R(a)) if R(a) | diff --git a/include/mruby/ops.h b/include/mruby/ops.h index 770e54f3d..75936a791 100644 --- a/include/mruby/ops.h +++ b/include/mruby/ops.h @@ -49,7 +49,7 @@ OPCODE(JMP, S) /* pc=a */ OPCODE(JMPIF, BS) /* if R(a) pc=b */ OPCODE(JMPNOT, BS) /* if !R(a) pc=b */ OPCODE(JMPNIL, BS) /* if R(a)==nil pc=b */ -OPCODE(JUW, S) /* unwind_and_jump_to(a) */ +OPCODE(JMPUW, S) /* unwind_and_jump_to(a) */ OPCODE(EXCEPT, B) /* R(a) = exc */ OPCODE(RESCUE, BB) /* R(b) = R(a).isa?(R(b)) */ OPCODE(RAISEIF, B) /* raise(R(a)) if R(a) */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 2ede5b81e..f60f1f077 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2299,7 +2299,7 @@ codegen(codegen_scope *s, node *tree, int val) } else if (s->loop->type == LOOP_NORMAL) { codegen(s, tree, NOVAL); - genjmp(s, OP_JUW, s->loop->pc0); + genjmp(s, OP_JMPUW, s->loop->pc0); } else { if (tree) { @@ -2319,7 +2319,7 @@ codegen(codegen_scope *s, node *tree, int val) raise_error(s, "unexpected redo"); } else { - genjmp(s, OP_JUW, s->loop->pc2); + genjmp(s, OP_JMPUW, s->loop->pc2); } if (val) push(); break; @@ -2336,7 +2336,7 @@ codegen(codegen_scope *s, node *tree, int val) raise_error(s, msg); } else { - genjmp(s, OP_JUW, lp->pc0); + genjmp(s, OP_JMPUW, lp->pc0); } if (val) push(); } @@ -3163,7 +3163,7 @@ loop_break(codegen_scope *s, node *tree) if (tree) { gen_move(s, loop->acc, cursp(), 0); } - tmp = genjmp(s, OP_JUW, loop->pc3); + tmp = genjmp(s, OP_JMPUW, loop->pc3); loop->pc3 = tmp; } else { diff --git a/src/codedump.c b/src/codedump.c index 389ed3c8f..3f0801929 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -261,8 +261,8 @@ codedump(mrb_state *mrb, const mrb_irep *irep) CASE(OP_JMP, S); printf("OP_JMP\t\t%03d\n", a); break; - CASE(OP_JUW, S); - printf("OP_JUW\t\t%03d\n", a); + CASE(OP_JMPUW, S); + printf("OP_JMPUW\t\t%03d\n", a); break; CASE(OP_JMPIF, BS); printf("OP_JMPIF\tR%d\t%03d\t", a, b); diff --git a/src/vm.c b/src/vm.c index 727c37d53..82301aaf4 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1298,7 +1298,7 @@ RETRY_TRY_BLOCK: NEXT; } - CASE(OP_JUW, S) { + CASE(OP_JMPUW, S) { CHECKPOINT_RESTORE(RBREAK_TAG_JUMP) { struct RBreak *brk = (struct RBreak*)mrb->exc; mrb_value target = mrb_break_value_get(brk); -- cgit v1.2.3 From 8a87549315d0c7fd984a8ad239ebe3dbab4d2855 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 14 Aug 2020 14:34:53 +0900 Subject: Rename float configuration option names. - `MRB_WITHOUT_FLOAT` => `MRB_NO_FLOAT` - `MRB_USE_FLOAT` => `MRB_USE_FLOAT32` The former is to use `USE_XXX` naming convention. The latter is to make sure `float` is 32bit float and not floating point number in general. --- doc/guides/mrbconf.md | 8 +-- doc/mruby3.md | 11 ++++ include/mrbconf.h | 22 ++++++-- include/mruby.h | 10 ++-- include/mruby/boxing_nan.h | 8 +-- include/mruby/boxing_no.h | 6 +- include/mruby/boxing_word.h | 12 ++-- include/mruby/class.h | 2 +- include/mruby/error.h | 4 +- include/mruby/numeric.h | 16 +++--- include/mruby/value.h | 10 ++-- mrbgems/mruby-compiler/core/codegen.c | 16 +++--- mrbgems/mruby-compiler/core/parse.y | 4 +- mrbgems/mruby-compiler/core/y.tab.c | 4 +- mrbgems/mruby-complex/src/complex.c | 8 +-- mrbgems/mruby-complex/test/complex.rb | 4 +- mrbgems/mruby-inline-struct/test/inline.c | 2 +- mrbgems/mruby-io/src/file.c | 4 +- mrbgems/mruby-io/src/io.c | 6 +- mrbgems/mruby-kernel-ext/src/kernel.c | 4 +- mrbgems/mruby-math/src/math.c | 4 +- mrbgems/mruby-numeric-ext/src/numeric_ext.c | 4 +- mrbgems/mruby-object-ext/src/object.c | 4 +- mrbgems/mruby-os-memsize/src/memsize.c | 2 +- mrbgems/mruby-pack/src/pack.c | 8 +-- mrbgems/mruby-random/src/random.c | 4 +- mrbgems/mruby-range-ext/src/range.c | 4 +- mrbgems/mruby-rational/src/rational.c | 6 +- mrbgems/mruby-sleep/src/mrb_sleep.c | 2 +- mrbgems/mruby-sprintf/src/sprintf.c | 10 ++-- mrbgems/mruby-string-ext/src/string.c | 2 +- mrbgems/mruby-test/driver.c | 4 +- mrbgems/mruby-test/vformat.c | 4 +- mrbgems/mruby-time/src/time.c | 20 +++---- src/array.c | 2 +- src/class.c | 4 +- src/dump.c | 10 ++-- src/error.c | 2 +- src/etc.c | 10 ++-- src/fmt_fp.c | 2 +- src/gc.c | 6 +- src/hash.c | 8 +-- src/load.c | 6 +- src/numeric.c | 88 ++++++++++++++--------------- src/object.c | 12 ++-- src/range.c | 2 +- src/string.c | 10 ++-- src/vm.c | 16 +++--- target/RX630.rb | 2 +- tasks/gitlab.rake | 4 +- test/t/float.rb | 2 +- 51 files changed, 223 insertions(+), 202 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/doc/guides/mrbconf.md b/doc/guides/mrbconf.md index d662e05bf..c95634604 100644 --- a/doc/guides/mrbconf.md +++ b/doc/guides/mrbconf.md @@ -46,11 +46,11 @@ You can use mrbconfs with following ways: ## Primitive type configuration. -`MRB_USE_FLOAT` +`MRB_USE_FLOAT32` * When defined single precision floating point type(C type `float`) is used as `mrb_float`. -* Else double precision floating point type(C type `double`) is used as `mrb_float`. +* Otherwise double precision floating point type(C type `double`) is used as `mrb_float`. -`MRB_WITHOUT_FLOAT` +`MRB_NO_FLOAT` * When defined removes floating point numbers from mruby. * It makes mruby easier to handle in "Microcontroller without FPU" and "Kernel Space". @@ -117,7 +117,7 @@ largest value of required alignment. `MRB_NAN_BOXING` * If defined represent `mrb_value` in boxed `double`. -* Conflicts with `MRB_USE_FLOAT` and `MRB_WITHOUT_FLOAT`. +* Conflicts with `MRB_USE_FLOAT32` and `MRB_NO_FLOAT`. `MRB_WORD_BOXING` * If defined represent `mrb_value` as a word. diff --git a/doc/mruby3.md b/doc/mruby3.md index 29da25cbc..02884f51b 100644 --- a/doc/mruby3.md +++ b/doc/mruby3.md @@ -57,6 +57,17 @@ pull-request. Some configuration macro names are changed for consistency +== `MRB_NO_FLOAT` + +Changed from `MRB_WITHOUT_FLOAT` to conform `USE_XXX` naming +convention. + +== `MRB_USE_FLOAT32` + +Changed from `MRB_USE_FLOAT` to make sure `float` here means +using single precision float, and not the opposite of +`MRB_NO_FLOAT`. + == `MRB_USE_METHOD_T_STRUCT` Changed from `MRB_METHOD_T_STRUCT`. diff --git a/include/mrbconf.h b/include/mrbconf.h index 734ec98e7..159aee48f 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -25,14 +25,24 @@ #endif /* configuration options: */ -/* add -DMRB_USE_FLOAT to use float instead of double for floating point numbers */ -//#define MRB_USE_FLOAT +/* add -DMRB_USE_FLOAT32 to use float instead of double for floating point numbers */ +//#define MRB_USE_FLOAT32 /* exclude floating point numbers */ -//#define MRB_WITHOUT_FLOAT +//#define MRB_NO_FLOAT -#if defined(MRB_USE_FLOAT) && defined(MRB_WITHOUT_FLOAT) -#error Cannot define MRB_USE_FLOAT and MRB_WITHOUT_FLOAT at the same time +/* obsolete configuration */ +#if defined(MRB_USE_FLOAT) +# define MRB_USE_FLOAT32 +#endif + +/* obsolete configuration */ +#if defined(MRB_WITHOUT_FLOAT) +# define MRB_NO_FLOAT +#endif + +#if defined(MRB_USE_FLOAT32) && defined(MRB_NO_FLOAT) +#error Cannot define MRB_USE_FLOAT32 and MRB_NO_FLOAT at the same time #endif /* stop inlining floating point numbers in mrb_value (effective only with MRB_WORD_BOXING)*/ @@ -65,7 +75,7 @@ # endif #endif -/* represent mrb_value in boxed double; conflict with MRB_USE_FLOAT and MRB_WITHOUT_FLOAT */ +/* represent mrb_value in boxed double; conflict with MRB_USE_FLOAT32 and MRB_NO_FLOAT */ //#define MRB_NAN_BOXING /* represent mrb_value as a word (natural unit of data for the processor) */ diff --git a/include/mruby.h b/include/mruby.h index dea0a9c88..485a94d70 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -92,7 +92,7 @@ #include #include -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #include #ifndef FLT_EPSILON #define FLT_EPSILON (1.19209290e-07f) @@ -104,7 +104,7 @@ #define LDBL_EPSILON (1.08420217248550443401e-19L) #endif -#ifdef MRB_USE_FLOAT +#ifdef MRB_USE_FLOAT32 #define MRB_FLOAT_EPSILON FLT_EPSILON #else #define MRB_FLOAT_EPSILON DBL_EPSILON @@ -245,7 +245,7 @@ typedef struct mrb_state { struct RClass *hash_class; struct RClass *range_class; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT struct RClass *float_class; #endif struct RClass *fixnum_class; @@ -1211,7 +1211,7 @@ MRB_API mrb_bool mrb_obj_equal(mrb_state *mrb, mrb_value a, mrb_value b); MRB_API mrb_bool mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2); MRB_API mrb_value mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base); MRB_API mrb_value mrb_Integer(mrb_state *mrb, mrb_value val); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_Float(mrb_state *mrb, mrb_value val); #endif MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj); @@ -1304,7 +1304,7 @@ MRB_API mrb_value mrb_vformat(mrb_state *mrb, const char *format, va_list ap); #define E_FROZEN_ERROR (mrb_exc_get_id(mrb, MRB_SYM(FrozenError))) #define E_NOTIMP_ERROR (mrb_exc_get_id(mrb, MRB_SYM(NotImplementedError))) -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #define E_FLOATDOMAIN_ERROR (mrb_exc_get_id(mrb, MRB_SYM(FloatDomainError))) #endif diff --git a/include/mruby/boxing_nan.h b/include/mruby/boxing_nan.h index a8655ca19..eb89ac1f9 100644 --- a/include/mruby/boxing_nan.h +++ b/include/mruby/boxing_nan.h @@ -7,12 +7,12 @@ #ifndef MRUBY_BOXING_NAN_H #define MRUBY_BOXING_NAN_H -#ifdef MRB_USE_FLOAT -# error ---->> MRB_NAN_BOXING and MRB_USE_FLOAT conflict <<---- +#ifdef MRB_USE_FLOAT32 +# error ---->> MRB_NAN_BOXING and MRB_USE_FLOAT32 conflict <<---- #endif -#ifdef MRB_WITHOUT_FLOAT -# error ---->> MRB_NAN_BOXING and MRB_WITHOUT_FLOAT conflict <<---- +#ifdef MRB_NO_FLOAT +# error ---->> MRB_NAN_BOXING and MRB_NO_FLOAT conflict <<---- #endif #ifdef MRB_INT64 diff --git a/include/mruby/boxing_no.h b/include/mruby/boxing_no.h index 23b48c6f8..345f6b35b 100644 --- a/include/mruby/boxing_no.h +++ b/include/mruby/boxing_no.h @@ -11,7 +11,7 @@ #define MRB_SYMBOL_SHIFT 0 union mrb_value_union { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_float f; #endif void *p; @@ -26,7 +26,7 @@ typedef struct mrb_value { #define mrb_ptr(o) (o).value.p #define mrb_cptr(o) mrb_ptr(o) -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #define mrb_float(o) (o).value.f #endif #define mrb_fixnum(o) (o).value.i @@ -43,7 +43,7 @@ typedef struct mrb_value { #define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1) #define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1) #define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n)) -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v)) #endif #define SET_SYM_VALUE(r,v) BOXNIX_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v)) diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index a91d10421..b9b6a3fe9 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -11,7 +11,7 @@ #error MRB_INT64 cannot be used with MRB_WORD_BOXING in 32-bit mode. #endif -#if !defined(MRB_WITHOUT_FLOAT) || defined(MRB_NO_FLOAT_INLINE) +#if !defined(MRB_NO_FLOAT) || defined(MRB_NO_FLOAT_INLINE) struct RFloat { MRB_OBJECT_HEADER; mrb_float f; @@ -80,7 +80,7 @@ union mrb_value_ { }; #endif struct RBasic *bp; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT struct RFloat *fp; #endif struct RCptr *vp; @@ -96,13 +96,13 @@ mrb_val_union(mrb_value v) } MRB_API mrb_value mrb_word_boxing_cptr_value(struct mrb_state*, void*); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #endif #define mrb_ptr(o) mrb_val_union(o).p #define mrb_cptr(o) mrb_val_union(o).vp->p -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #define mrb_float(o) mrb_val_union(o).fp->f #endif #define mrb_fixnum(o) BOXWORD_SHIFT_VALUE(o, FIXNUM, mrb_int) @@ -124,7 +124,7 @@ MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #define mrb_nil_p(o) ((o) == MRB_Qnil) #define mrb_false_p(o) ((o) == MRB_Qfalse) #define mrb_true_p(o) ((o) == MRB_Qtrue) -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #define mrb_float_p(o) BOXWORD_OBJ_TYPE_P(o, FLOAT) #endif #define mrb_array_p(o) BOXWORD_OBJ_TYPE_P(o, ARRAY) @@ -146,7 +146,7 @@ MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #define mrb_istruct_p(o) BOXWORD_OBJ_TYPE_P(o, ISTRUCT) #define mrb_break_p(o) BOXWORD_OBJ_TYPE_P(o, BREAK) -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #define SET_FLOAT_VALUE(mrb,r,v) ((r) = mrb_word_boxing_float_value(mrb, v)) #endif #define SET_CPTR_VALUE(mrb,r,v) ((r) = mrb_word_boxing_cptr_value(mrb, v)) diff --git a/include/mruby/class.h b/include/mruby/class.h index 88e5915e5..a02c4ef17 100644 --- a/include/mruby/class.h +++ b/include/mruby/class.h @@ -37,7 +37,7 @@ mrb_class(mrb_state *mrb, mrb_value v) return mrb->symbol_class; case MRB_TT_FIXNUM: return mrb->fixnum_class; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: return mrb->float_class; #endif diff --git a/include/mruby/error.h b/include/mruby/error.h index 67a0a539e..b607dd957 100644 --- a/include/mruby/error.h +++ b/include/mruby/error.h @@ -32,7 +32,7 @@ MRB_API mrb_noreturn void mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_va /* declaration for `fail` method */ MRB_API mrb_value mrb_f_raise(mrb_state*, mrb_value); -#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT) || defined(MRB_NAN_BOXING) || defined(MRB_WORD_BOXING) +#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT32) || defined(MRB_NAN_BOXING) || defined(MRB_WORD_BOXING) struct RBreak { MRB_OBJECT_HEADER; const struct RProc *proc; @@ -62,7 +62,7 @@ mrb_break_value_set(struct RBreak *brk, mrb_value val) brk->flags &= ~RBREAK_VALUE_TT_MASK; brk->flags |= val.tt; } -#endif /* MRB_64BIT || MRB_USE_FLOAT || MRB_NAN_BOXING || MRB_WORD_BOXING */ +#endif /* MRB_64BIT || MRB_USE_FLOAT32 || MRB_NAN_BOXING || MRB_WORD_BOXING */ #define mrb_break_proc_get(brk) ((brk)->proc) #define mrb_break_proc_set(brk, p) ((brk)->proc = p) diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index 06a33cc6f..10b242688 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -22,7 +22,7 @@ MRB_BEGIN_DECL #define POSFIXABLE(f) TYPED_POSFIXABLE(f,mrb_int) #define NEGFIXABLE(f) TYPED_NEGFIXABLE(f,mrb_int) #define FIXABLE(f) TYPED_FIXABLE(f,mrb_int) -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #ifdef MRB_INT64 #define FIXABLE_FLOAT(f) ((f)>=-9223372036854775808.0 && (f)<9223372036854775808.0) #else @@ -30,12 +30,12 @@ MRB_BEGIN_DECL #endif #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val); #endif MRB_API mrb_value mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base); /* ArgumentError if format string doesn't match /%(\.[0-9]+)?[aAeEfFgG]/ */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_float_to_str(mrb_state *mrb, mrb_value x, const char *fmt); MRB_API int mrb_float_to_cstr(mrb_state *mrb, char *buf, size_t len, const char *fmt, mrb_float f); MRB_API mrb_float mrb_to_flo(mrb_state *mrb, mrb_value x); @@ -161,13 +161,13 @@ mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product) #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT # include # include # define MRB_FLT_RADIX FLT_RADIX -# ifdef MRB_USE_FLOAT +# ifdef MRB_USE_FLOAT32 # define MRB_FLT_MANT_DIG FLT_MANT_DIG # define MRB_FLT_EPSILON FLT_EPSILON # define MRB_FLT_DIG FLT_DIG @@ -178,7 +178,7 @@ mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product) # define MRB_FLT_MAX FLT_MAX # define MRB_FLT_MAX_10_EXP FLT_MAX_10_EXP -# else /* not MRB_USE_FLOAT */ +# else /* not MRB_USE_FLOAT32 */ # define MRB_FLT_MANT_DIG DBL_MANT_DIG # define MRB_FLT_EPSILON DBL_EPSILON # define MRB_FLT_DIG DBL_DIG @@ -188,8 +188,8 @@ mrb_int_mul_overflow(mrb_int multiplier, mrb_int multiplicand, mrb_int *product) # define MRB_FLT_MAX_EXP DBL_MAX_EXP # define MRB_FLT_MAX DBL_MAX # define MRB_FLT_MAX_10_EXP DBL_MAX_10_EXP -# endif /* MRB_USE_FLOAT */ -#endif /* MRB_WITHOUT_FLOAT */ +# endif /* MRB_USE_FLOAT32 */ +#endif /* MRB_NO_FLOAT */ MRB_END_DECL diff --git a/include/mruby/value.h b/include/mruby/value.h index 473774b00..88c8d4dba 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -75,9 +75,9 @@ struct mrb_state; # define MRB_ENDIAN_LOHI(a,b) b a #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API double mrb_float_read(const char*, char**); -#ifdef MRB_USE_FLOAT +#ifdef MRB_USE_FLOAT32 typedef float mrb_float; #else typedef double mrb_float; @@ -90,7 +90,7 @@ MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list ar MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...); # define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg) # define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__) -# if _MSC_VER < 1800 && !defined MRB_WITHOUT_FLOAT +# if _MSC_VER < 1800 && !defined MRB_NO_FLOAT # include # define isfinite(n) _finite(n) # define isnan _isnan @@ -195,7 +195,7 @@ struct RCptr { #ifndef mrb_true_p #define mrb_true_p(o) (mrb_type(o) == MRB_TT_TRUE) #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #ifndef mrb_float_p #define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT) #endif @@ -264,7 +264,7 @@ struct RCptr { * * Takes a float and boxes it into an mrb_value */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_INLINE mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f) { mrb_value v; diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index f60f1f077..372a2c5f7 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -530,7 +530,7 @@ new_lit(codegen_scope *s, mrb_value val) return i; } break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: for (i=0; iirep->plen; i++) { mrb_float f1, f2; @@ -588,7 +588,7 @@ new_lit(codegen_scope *s, mrb_value val) } break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: pv->tt = IREP_TT_FLOAT; pv->u.f = mrb_float(val); @@ -1330,7 +1330,7 @@ raise_error(codegen_scope *s, const char *msg) genop_1(s, OP_ERR, idx); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static double readint_float(codegen_scope *s, const char *p, int base) { @@ -2442,7 +2442,7 @@ codegen(codegen_scope *s, node *tree, int val) mrb_bool overflow; i = readint_mrb_int(s, p, base, FALSE, &overflow); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (overflow) { double f = readint_float(s, p, base); int off = new_lit(s, mrb_float_value(s->mrb, f)); @@ -2473,7 +2473,7 @@ codegen(codegen_scope *s, node *tree, int val) } break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case NODE_FLOAT: if (val) { char *p = (char*)tree; @@ -2490,7 +2490,7 @@ codegen(codegen_scope *s, node *tree, int val) { nt = nint(tree->car); switch (nt) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case NODE_FLOAT: if (val) { char *p = (char*)tree->cdr; @@ -2511,7 +2511,7 @@ codegen(codegen_scope *s, node *tree, int val) mrb_bool overflow; i = readint_mrb_int(s, p, base, TRUE, &overflow); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (overflow) { double f = readint_float(s, p, base); int off = new_lit(s, mrb_float_value(s->mrb, -f)); @@ -2531,7 +2531,7 @@ codegen(codegen_scope *s, node *tree, int val) int off = new_lit(s, mrb_fixnum_value(i)); genop_2(s, OP_LOADL, cursp(), off); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT } #endif push(); diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index c67c694fe..8e3087a2a 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -981,7 +981,7 @@ new_int(parser_state *p, const char *s, int base, int suffix) return result; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* (:float . i) */ static node* new_float(parser_state *p, const char *s, int suffix) @@ -5661,7 +5661,7 @@ parser_yylex(parser_state *p) } tokfix(p); if (is_float) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT yywarning_s(p, "floating point numbers are not supported", tok(p)); pylval.nd = new_int(p, "0", 10, 0); return tINTEGER; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 096543349..48173933f 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -1044,7 +1044,7 @@ new_int(parser_state *p, const char *s, int base, int suffix) return result; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* (:float . i) */ static node* new_float(parser_state *p, const char *s, int suffix) @@ -11553,7 +11553,7 @@ parser_yylex(parser_state *p) } tokfix(p); if (is_float) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT yywarning_s(p, "floating point numbers are not supported", tok(p)); pylval.nd = new_int(p, "0", 10, 0); return tINTEGER; diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c index 24dad4235..85735b704 100644 --- a/mrbgems/mruby-complex/src/complex.c +++ b/mrbgems/mruby-complex/src/complex.c @@ -3,8 +3,8 @@ #include #include -#ifdef MRB_WITHOUT_FLOAT -# error Complex conflicts 'MRB_WITHOUT_FLOAT' configuration in your 'build_config.rb' +#ifdef MRB_NO_FLOAT +# error Complex conflicts with 'MRB_NO_FLOAT' configuration #endif struct mrb_complex { @@ -12,13 +12,13 @@ struct mrb_complex { mrb_float imaginary; }; -#ifdef MRB_USE_FLOAT +#ifdef MRB_USE_FLOAT32 #define F(x) x##f #else #define F(x) x #endif -#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT) +#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT32) #define COMPLEX_USE_ISTRUCT /* use TT_ISTRUCT */ diff --git a/mrbgems/mruby-complex/test/complex.rb b/mrbgems/mruby-complex/test/complex.rb index d996e8277..14711ad73 100644 --- a/mrbgems/mruby-complex/test/complex.rb +++ b/mrbgems/mruby-complex/test/complex.rb @@ -60,7 +60,7 @@ assert 'Complex#/' do assert_complex Complex(9, 8) / 4 , ((9 / 4) + 2i) assert_complex Complex(20, 9) / 9.8 , (2.0408163265306123 + 0.9183673469387754i) if 1e39.infinite? then - # MRB_USE_FLOAT in effect + # MRB_USE_FLOAT32 in effect ten = 1e21 one = 1e20 else @@ -80,7 +80,7 @@ assert 'Complex#abs' do assert_float Complex(-1).abs, 1 assert_float Complex(3.0, -4.0).abs, 5.0 if 1e39.infinite? then - # MRB_USE_FLOAT in effect + # MRB_USE_FLOAT32 in effect exp = 125 else exp = 1021 diff --git a/mrbgems/mruby-inline-struct/test/inline.c b/mrbgems/mruby-inline-struct/test/inline.c index 5d307dcab..b4d9b1f1e 100644 --- a/mrbgems/mruby-inline-struct/test/inline.c +++ b/mrbgems/mruby-inline-struct/test/inline.c @@ -13,7 +13,7 @@ istruct_test_initialize(mrb_state *mrb, mrb_value self) if (mrb_fixnum_p(object)) { strncpy(string, "fixnum", size-1); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT else if (mrb_float_p(object)) { strncpy(string, "float", size-1); } diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index 04dece910..a28360d81 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -448,8 +448,8 @@ mrb_file_size(mrb_state *mrb, mrb_value self) } if (st.st_size > MRB_INT_MAX) { -#ifdef MRB_WITHOUT_FLOAT - mrb_raise(mrb, E_RUNTIME_ERROR, "File#size too large for MRB_WITHOUT_FLOAT"); +#ifdef MRB_NO_FLOAT + mrb_raise(mrb, E_RUNTIME_ERROR, "File#size too large for MRB_NO_FLOAT"); #else return mrb_float_value(mrb, (mrb_float)st.st_size); #endif diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 988d19b02..587e195d9 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -973,10 +973,10 @@ mrb_io_sysseek(mrb_state *mrb, mrb_value io) mrb_sys_fail(mrb, "sysseek"); } if (pos > MRB_INT_MAX) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)pos); #else - mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_WITHOUT_FLOAT"); + mrb_raise(mrb, E_IO_ERROR, "sysseek reached too far for MRB_NO_FLOAT"); #endif } else { return mrb_fixnum_value(pos); @@ -1081,7 +1081,7 @@ time2timeval(mrb_state *mrb, mrb_value time) t.tv_usec = 0; break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: t.tv_sec = (ftime_t)mrb_float(time); t.tv_usec = (fsuseconds_t)((mrb_float(time) - t.tv_sec) * 1000000.0); diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c index 70991c704..eaf8c6eb0 100644 --- a/mrbgems/mruby-kernel-ext/src/kernel.c +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -112,7 +112,7 @@ mrb_f_integer(mrb_state *mrb, mrb_value self) return mrb_convert_to_integer(mrb, arg, base); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* * call-seq: * Float(arg) -> float @@ -212,7 +212,7 @@ mrb_mruby_kernel_ext_gem_init(mrb_state *mrb) mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2)); mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ARG(1,1)); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1)); #endif mrb_define_module_function(mrb, krn, "String", mrb_f_string, MRB_ARGS_REQ(1)); diff --git a/mrbgems/mruby-math/src/math.c b/mrbgems/mruby-math/src/math.c index ff1e84684..fcde7e700 100644 --- a/mrbgems/mruby-math/src/math.c +++ b/mrbgems/mruby-math/src/math.c @@ -4,8 +4,8 @@ ** See Copyright Notice in mruby.h */ -#ifdef MRB_WITHOUT_FLOAT -# error Math conflicts 'MRB_WITHOUT_FLOAT' configuration in your 'build_config.rb' +#ifdef MRB_NO_FLOAT +# error Math conflicts with 'MRB_NO_FLOAT' configuration #endif #include diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index fd7072ccd..d00be4b5d 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -59,7 +59,7 @@ mrb_mruby_numeric_ext_gem_init(mrb_state* mrb) mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1)); mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1)); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(RADIX), mrb_fixnum_value(MRB_FLT_RADIX)); mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MANT_DIG), mrb_fixnum_value(MRB_FLT_MANT_DIG)); mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(EPSILON), mrb_float_value(mrb, MRB_FLT_EPSILON)); @@ -70,7 +70,7 @@ mrb_mruby_numeric_ext_gem_init(mrb_state* mrb) mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MAX_EXP), mrb_fixnum_value(MRB_FLT_MAX_EXP)); mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MAX), mrb_float_value(mrb, MRB_FLT_MAX)); mrb_define_const_id(mrb, mrb->float_class, MRB_SYM(MAX_10_EXP), mrb_fixnum_value(MRB_FLT_MAX_10_EXP)); -#endif /* MRB_WITHOUT_FLOAT */ +#endif /* MRB_NO_FLOAT */ } void diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index 57361e8e2..2d99ce8c2 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -17,7 +17,7 @@ nil_to_a(mrb_state *mrb, mrb_value obj) return mrb_ary_new(mrb); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* * call-seq: * nil.to_f -> 0.0 @@ -115,7 +115,7 @@ mrb_mruby_object_ext_gem_init(mrb_state* mrb) struct RClass * n = mrb->nil_class; mrb_define_method(mrb, n, "to_a", nil_to_a, MRB_ARGS_NONE()); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_method(mrb, n, "to_f", nil_to_f, MRB_ARGS_NONE()); #endif mrb_define_method(mrb, n, "to_h", nil_to_h, MRB_ARGS_NONE()); diff --git a/mrbgems/mruby-os-memsize/src/memsize.c b/mrbgems/mruby-os-memsize/src/memsize.c index 7030299f4..78ef1e4df 100644 --- a/mrbgems/mruby-os-memsize/src/memsize.c +++ b/mrbgems/mruby-os-memsize/src/memsize.c @@ -111,7 +111,7 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj) case MRB_TT_DATA: size += mrb_objspace_page_slot_size(); break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: #ifdef MRB_WORD_BOXING size += mrb_objspace_page_slot_size() + diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c index e222cd946..45427afa0 100644 --- a/mrbgems/mruby-pack/src/pack.c +++ b/mrbgems/mruby-pack/src/pack.c @@ -425,7 +425,7 @@ unpack_q(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, un return 8; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static int pack_double(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags) { @@ -1248,7 +1248,7 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary) if (type == PACK_TYPE_INTEGER) { o = mrb_to_int(mrb, o); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT else if (type == PACK_TYPE_FLOAT) { if (!mrb_float_p(o)) { mrb_float f = mrb_to_flo(mrb, o); @@ -1284,7 +1284,7 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary) case PACK_DIR_STR: ridx += pack_a(mrb, o, result, ridx, count, flags); break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case PACK_DIR_DOUBLE: ridx += pack_double(mrb, o, result, ridx, flags); break; @@ -1381,7 +1381,7 @@ pack_unpack(mrb_state *mrb, mrb_value str, int single) case PACK_DIR_QUAD: srcidx += unpack_q(mrb, sptr, srclen - srcidx, result, flags); break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case PACK_DIR_FLOAT: srcidx += unpack_float(mrb, sptr, srclen - srcidx, result, flags); break; diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index fdb28e012..3010b3db7 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -85,7 +85,7 @@ rand_uint32(rand_state *state) } #endif /* XORSHIFT96 */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static double rand_real(rand_state *t) { @@ -100,7 +100,7 @@ random_rand(mrb_state *mrb, rand_state *t, mrb_value max) mrb_value value; if (mrb_fixnum(max) == 0) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT value = mrb_float_value(mrb, rand_real(t)); #else mrb_raise(mrb, E_ARGUMENT_ERROR, "Float not supported"); diff --git a/mrbgems/mruby-range-ext/src/range.c b/mrbgems/mruby-range-ext/src/range.c index 633894070..421e7d33a 100644 --- a/mrbgems/mruby-range-ext/src/range.c +++ b/mrbgems/mruby-range-ext/src/range.c @@ -96,7 +96,7 @@ range_last(mrb_state *mrb, mrb_value range) * ('a'..'z').size #=> nil */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value range_size(mrb_state *mrb, mrb_value range) { @@ -170,7 +170,7 @@ range_size(mrb_state *mrb, mrb_value range) } return mrb_nil_value(); } -#endif /* MRB_WITHOUT_FLOAT */ +#endif /* MRB_NO_FLOAT */ void mrb_mruby_range_ext_gem_init(mrb_state* mrb) diff --git a/mrbgems/mruby-rational/src/rational.c b/mrbgems/mruby-rational/src/rational.c index 4a72a42f2..f9470de86 100644 --- a/mrbgems/mruby-rational/src/rational.c +++ b/mrbgems/mruby-rational/src/rational.c @@ -87,7 +87,7 @@ rational_s_new(mrb_state *mrb, mrb_value self) { mrb_int numerator, denominator; -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_get_args(mrb, "ii", &numerator, &denominator); #else @@ -136,7 +136,7 @@ rational_s_new(mrb_state *mrb, mrb_value self) return rational_new(mrb, numerator, denominator); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value rational_to_f(mrb_state *mrb, mrb_value self) { @@ -194,7 +194,7 @@ void mrb_mruby_rational_gem_init(mrb_state *mrb) mrb_define_class_method(mrb, rat, "_new", rational_s_new, MRB_ARGS_REQ(2)); mrb_define_method(mrb, rat, "numerator", rational_numerator, MRB_ARGS_NONE()); mrb_define_method(mrb, rat, "denominator", rational_denominator, MRB_ARGS_NONE()); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_method(mrb, rat, "to_f", rational_to_f, MRB_ARGS_NONE()); #endif mrb_define_method(mrb, rat, "to_i", rational_to_i, MRB_ARGS_NONE()); diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index a653242d1..7771db56b 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -44,7 +44,7 @@ mrb_f_sleep(mrb_state *mrb, mrb_value self) { time_t beg = time(0); time_t end; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_float sec; mrb_get_args(mrb, "f", &sec); diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 0cf462ef7..7f36616ec 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -10,7 +10,7 @@ #include #include #include -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #include #endif #include @@ -20,7 +20,7 @@ #define EXTENDSIGN(n, l) (((~0U << (n)) >> (((n)*(l)) % BITSPERDIG)) & ~(~0U << (n))) mrb_value mrb_str_format(mrb_state *, mrb_int, const mrb_value *, mrb_value); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static void fmt_setup(char*,size_t,int,int,mrb_int,mrb_int); #endif @@ -863,7 +863,7 @@ retry: bin_retry: switch (mrb_type(val)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: val = mrb_flo_to_fixnum(mrb, val); if (mrb_fixnum_p(val)) goto bin_retry; @@ -1030,7 +1030,7 @@ retry: } break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case 'f': case 'g': case 'G': @@ -1131,7 +1131,7 @@ retry: return result; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static void fmt_setup(char *buf, size_t size, int c, int flags, mrb_int width, mrb_int prec) { diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index ded34a89e..71fb5bb65 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -12,7 +12,7 @@ #define ENC_COMP_P(enc, enc_lit) \ str_casecmp_p(RSTRING_PTR(enc), RSTRING_LEN(enc), enc_lit, sizeof(enc_lit"")-1) -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT # define mrb_float_p(o) FALSE #endif diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index fe1a475d5..4b82a9abc 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -224,8 +224,8 @@ mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose) mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN)); mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT)); -#ifndef MRB_WITHOUT_FLOAT -#ifdef MRB_USE_FLOAT +#ifndef MRB_NO_FLOAT +#ifdef MRB_USE_FLOAT32 mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-6)); #else mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-12)); diff --git a/mrbgems/mruby-test/vformat.c b/mrbgems/mruby-test/vformat.c index e7ada02da..d73e52311 100644 --- a/mrbgems/mruby-test/vformat.c +++ b/mrbgems/mruby-test/vformat.c @@ -48,7 +48,7 @@ vf_s_format_d(mrb_state *mrb, mrb_value klass) return mrb_format(mrb, fmt, d); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* f float */ static mrb_value vf_s_format_f(mrb_state *mrb, mrb_value klass) @@ -167,7 +167,7 @@ mrb_init_test_vformat(mrb_state *mrb) VF_DEFINE_FORMAT_METHOD(c); VF_DEFINE_FORMAT_METHOD(d); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT VF_DEFINE_FORMAT_METHOD(f); #endif VF_DEFINE_FORMAT_METHOD(i); diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 3655695cf..3d5cdca2e 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -4,7 +4,7 @@ ** See Copyright Notice in mruby.h */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #include #endif @@ -30,7 +30,7 @@ double round(double x) { } #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT # if !defined(__MINGW64__) && defined(_WIN32) # define llround(x) round(x) # endif @@ -199,7 +199,7 @@ struct mrb_time { static const struct mrb_data_type mrb_time_type = { "Time", mrb_free }; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT void mrb_check_num_exact(mrb_state *mrb, mrb_float num); typedef mrb_float mrb_sec; #define mrb_sec_value(mrb, sec) mrb_float_value(mrb, sec) @@ -231,7 +231,7 @@ mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec) time_t t; switch (mrb_type(obj)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: { mrb_float f = mrb_float(obj); @@ -250,7 +250,7 @@ mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec) } } break; -#endif /* MRB_WITHOUT_FLOAT */ +#endif /* MRB_NO_FLOAT */ default: case MRB_TT_FIXNUM: { @@ -572,7 +572,7 @@ mrb_time_minus(mrb_state *mrb, mrb_value self) tm = time_get_ptr(mrb, self); tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time); if (tm2) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_float f; f = (mrb_sec)(tm->sec - tm2->sec) + (mrb_sec)(tm->usec - tm2->usec) / 1.0e6; @@ -843,7 +843,7 @@ mrb_time_sec(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(tm->datetime.tm_sec); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* 15.2.19.7.24 */ /* Returns a Float with the time since the epoch in seconds. */ static mrb_value @@ -864,7 +864,7 @@ mrb_time_to_i(mrb_state *mrb, mrb_value self) struct mrb_time *tm; tm = time_get_ptr(mrb, self); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (!fixable_time_t_p(tm->sec)) { return mrb_float_value(mrb, (mrb_float)tm->sec); } @@ -880,7 +880,7 @@ mrb_time_usec(mrb_state *mrb, mrb_value self) struct mrb_time *tm; tm = time_get_ptr(mrb, self); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (!fixable_time_t_p(tm->usec)) { return mrb_float_value(mrb, (mrb_float)tm->usec); } @@ -995,7 +995,7 @@ mrb_mruby_time_gem_init(mrb_state* mrb) mrb_define_method(mrb, tc, "sec" , mrb_time_sec, MRB_ARGS_NONE()); /* 15.2.19.7.23 */ mrb_define_method(mrb, tc, "to_i", mrb_time_to_i, MRB_ARGS_NONE()); /* 15.2.19.7.25 */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_method(mrb, tc, "to_f", mrb_time_to_f, MRB_ARGS_NONE()); /* 15.2.19.7.24 */ #endif mrb_define_method(mrb, tc, "usec", mrb_time_usec, MRB_ARGS_NONE()); /* 15.2.19.7.26 */ diff --git a/src/array.c b/src/array.c index 285600969..432599bf7 100644 --- a/src/array.c +++ b/src/array.c @@ -825,7 +825,7 @@ aget_index(mrb_state *mrb, mrb_value index) if (mrb_fixnum_p(index)) { return mrb_fixnum(index); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT else if (mrb_float_p(index)) { return (mrb_int)mrb_float(index); } diff --git a/src/class.c b/src/class.c index 455a1b4e1..845246e97 100644 --- a/src/class.c +++ b/src/class.c @@ -899,7 +899,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) } } break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case 'f': { mrb_float *p; @@ -1343,7 +1343,7 @@ mrb_singleton_class_ptr(mrb_state *mrb, mrb_value v) return mrb->object_class; case MRB_TT_SYMBOL: case MRB_TT_FIXNUM: -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: #endif return NULL; diff --git a/src/dump.c b/src/dump.c index 3bc95f629..489e70f8a 100644 --- a/src/dump.c +++ b/src/dump.c @@ -13,8 +13,8 @@ #include #include -#ifndef MRB_WITHOUT_FLOAT -#ifdef MRB_USE_FLOAT +#ifndef MRB_NO_FLOAT +#ifdef MRB_USE_FLOAT32 #define MRB_FLOAT_FMT "%.9g" #else #define MRB_FLOAT_FMT "%.17g" @@ -88,7 +88,7 @@ write_iseq_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf, uint8_t fla return cur - buf; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value float_to_str(mrb_state *mrb, mrb_float f) { @@ -131,7 +131,7 @@ get_pool_block_size(mrb_state *mrb, const mrb_irep *irep) break; case IREP_TT_FLOAT: -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT { mrb_value str = float_to_str(mrb, irep->pool[pool_no].u.f); mrb_int len = RSTRING_LEN(str); @@ -192,7 +192,7 @@ write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf) case IREP_TT_FLOAT: cur += uint8_to_bin(IREP_TT_FLOAT, cur); /* data type */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT { mrb_value str = float_to_str(mrb, irep->pool[pool_no].u.f); ptr = RSTRING_PTR(str); diff --git a/src/error.c b/src/error.c index 742049ace..b6a82f867 100644 --- a/src/error.c +++ b/src/error.c @@ -288,7 +288,7 @@ mrb_vformat(mrb_state *mrb, const char *format, va_list ap) #endif obj = mrb_fixnum_value(i); goto L_cat_obj; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case 'f': obj = mrb_float_value(mrb, (mrb_float)va_arg(ap, double)); goto L_cat_obj; diff --git a/src/etc.c b/src/etc.c index a1e384717..b0019e6de 100644 --- a/src/etc.c +++ b/src/etc.c @@ -70,7 +70,7 @@ mrb_obj_to_sym(mrb_state *mrb, mrb_value name) } MRB_API mrb_int -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_fixnum_id(mrb_int f) #else mrb_float_id(mrb_float f) @@ -80,7 +80,7 @@ mrb_float_id(mrb_float f) int len = sizeof(f); uint32_t id = 0; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* normalize -0.0 to 0.0 */ if (f == 0) f = 0.0; #endif @@ -115,7 +115,7 @@ mrb_obj_id(mrb_value obj) case MRB_TT_SYMBOL: return MakeID(mrb_symbol(obj)); case MRB_TT_FIXNUM: -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT return MakeID(mrb_fixnum_id(mrb_fixnum(obj))); #else return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT); @@ -147,7 +147,7 @@ mrb_obj_id(mrb_value obj) #ifdef MRB_WORD_BOXING #define mrb_xxx_boxing_cptr_value mrb_word_boxing_cptr_value -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) { @@ -158,7 +158,7 @@ mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) MRB_SET_FROZEN_FLAG(v.bp); return v.w; } -#endif /* MRB_WITHOUT_FLOAT */ +#endif /* MRB_NO_FLOAT */ #endif /* MRB_WORD_BOXING */ #if defined(MRB_WORD_BOXING) || (defined(MRB_NAN_BOXING) && defined(MRB_64BIT)) diff --git a/src/fmt_fp.c b/src/fmt_fp.c index 81ace6ec8..2c1e13c36 100644 --- a/src/fmt_fp.c +++ b/src/fmt_fp.c @@ -1,4 +1,4 @@ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #if defined(MRB_DISABLE_STDIO) || defined(_WIN32) || defined(_WIN64) /* diff --git a/src/gc.c b/src/gc.c index 17f7e81e4..50269f95c 100644 --- a/src/gc.c +++ b/src/gc.c @@ -122,7 +122,7 @@ typedef struct { struct RException exc; struct RBreak brk; #ifdef MRB_WORD_BOXING -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT struct RFloat floatv; #endif struct RCptr cptr; @@ -784,7 +784,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) /* cannot happen */ return; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: #ifdef MRB_WORD_BOXING break; @@ -929,7 +929,7 @@ root_scan_phase(mrb_state *mrb, mrb_gc *gc) mrb_gc_mark(mrb, (struct RBasic*)mrb->hash_class); mrb_gc_mark(mrb, (struct RBasic*)mrb->range_class); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_gc_mark(mrb, (struct RBasic*)mrb->float_class); #endif mrb_gc_mark(mrb, (struct RBasic*)mrb->fixnum_class); diff --git a/src/hash.c b/src/hash.c index 72ed3c731..2eef4afaf 100644 --- a/src/hash.c +++ b/src/hash.c @@ -11,7 +11,7 @@ #include #include -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* a function to get hash value of a float number */ mrb_int mrb_float_id(mrb_float f); #endif @@ -65,7 +65,7 @@ ht_hash_func(mrb_state *mrb, htable *t, mrb_value key) case MRB_TT_FALSE: case MRB_TT_SYMBOL: case MRB_TT_FIXNUM: -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: #endif h = (size_t)mrb_obj_id(key); @@ -99,7 +99,7 @@ ht_hash_equal(mrb_state *mrb, htable *t, mrb_value a, mrb_value b) switch (mrb_type(b)) { case MRB_TT_FIXNUM: return mrb_fixnum(a) == mrb_fixnum(b); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: return (mrb_float)mrb_fixnum(a) == mrb_float(b); #endif @@ -107,7 +107,7 @@ ht_hash_equal(mrb_state *mrb, htable *t, mrb_value a, mrb_value b) return FALSE; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: switch (mrb_type(b)) { case MRB_TT_FIXNUM: diff --git a/src/load.c b/src/load.c index 67217b128..b06b9ff37 100644 --- a/src/load.c +++ b/src/load.c @@ -39,7 +39,7 @@ offset_crc_body(void) return ((uint8_t *)header.binary_crc - (uint8_t *)&header) + sizeof(header.binary_crc); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT double mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck); static double @@ -165,7 +165,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag #endif case IREP_TT_FLOAT: -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT pool[i].tt = tt; pool_data_len = bin_to_uint16(src); /* pool data length */ src += sizeof(uint16_t); @@ -173,7 +173,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag src += pool_data_len; break; #else - return NULL; /* MRB_WITHOUT_FLOAT */ + return NULL; /* MRB_NO_FLOAT */ #endif case IREP_TT_STR: diff --git a/src/numeric.c b/src/numeric.c index 195bd40cf..f4ad116a4 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -4,7 +4,7 @@ ** See Copyright Notice in mruby.h */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #include #include #endif @@ -18,8 +18,8 @@ #include #include -#ifndef MRB_WITHOUT_FLOAT -#ifdef MRB_USE_FLOAT +#ifndef MRB_NO_FLOAT +#ifdef MRB_USE_FLOAT32 #define trunc(f) truncf(f) #define floor(f) floorf(f) #define ceil(f) ceilf(f) @@ -30,7 +30,7 @@ #endif #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_float mrb_to_flo(mrb_state *mrb, mrb_value val) { @@ -68,7 +68,7 @@ static mrb_value integral_pow(mrb_state *mrb, mrb_value x) { mrb_value y = mrb_get_arg1(mrb); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_float d; #endif @@ -79,7 +79,7 @@ integral_pow(mrb_state *mrb, mrb_value x) mrb_int result = 1; if (exp < 0) -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT return mrb_fixnum_value(0); #else goto float_pow; @@ -87,7 +87,7 @@ integral_pow(mrb_state *mrb, mrb_value x) for (;;) { if (exp & 1) { if (mrb_int_mul_overflow(result, base, &result)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT goto float_pow; #endif } @@ -95,14 +95,14 @@ integral_pow(mrb_state *mrb, mrb_value x) exp >>= 1; if (exp == 0) break; if (mrb_int_mul_overflow(base, base, &base)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT goto float_pow; #endif } } return mrb_fixnum_value(result); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); #else float_pow: @@ -114,7 +114,7 @@ integral_pow(mrb_state *mrb, mrb_value x) static mrb_value integral_idiv(mrb_state *mrb, mrb_value x) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_value y = mrb_get_arg1(mrb); if (!mrb_fixnum_p(y)) { @@ -151,7 +151,7 @@ integral_idiv(mrb_state *mrb, mrb_value x) static mrb_value integral_div(mrb_state *mrb, mrb_value xv) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_int y; mrb_get_args(mrb, "i", &y); @@ -184,7 +184,7 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "oo", &num, &step); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (mrb_float_p(self) || mrb_float_p(num) || mrb_float_p(step)) { return mrb_Float(mrb, self); } @@ -193,7 +193,7 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self) return self; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /******************************************************************** * * Document-class: Float @@ -386,7 +386,7 @@ fix_eql(mrb_state *mrb, mrb_value x) return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y)); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value flo_eql(mrb_state *mrb, mrb_value x) { @@ -803,13 +803,13 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y) if (a == 0) return x; b = mrb_fixnum(y); if (mrb_int_mul_overflow(a, b, &c)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)a * (mrb_float)b); #endif } return mrb_fixnum_value(c); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); #else return mrb_float_value(mrb, (mrb_float)a * mrb_to_flo(mrb, y)); @@ -822,7 +822,7 @@ mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y) if (mrb_fixnum_p(x)) { return fixnum_mul(mrb, x, y); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (mrb_float_p(x)) { return mrb_float_value(mrb, mrb_float(x) * mrb_to_flo(mrb, y)); } @@ -898,7 +898,7 @@ fix_mod(mrb_state *mrb, mrb_value x) mrb_int mod; if (b == 0) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT /* ZeroDivisionError */ return mrb_fixnum_value(0); #else @@ -910,7 +910,7 @@ fix_mod(mrb_state *mrb, mrb_value x) fixdivmod(mrb, a, b, NULL, &mod); return mrb_fixnum_value(mod); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); #else else { @@ -937,7 +937,7 @@ fix_divmod(mrb_state *mrb, mrb_value x) mrb_int div, mod; if (mrb_fixnum(y) == 0) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT return mrb_assoc_new(mrb, mrb_fixnum_value(0), mrb_fixnum_value(0)); #else return mrb_assoc_new(mrb, ((mrb_fixnum(x) == 0) ? @@ -949,7 +949,7 @@ fix_divmod(mrb_state *mrb, mrb_value x) fixdivmod(mrb, mrb_fixnum(x), mrb_fixnum(y), &div, &mod); return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod)); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); #else else { @@ -964,7 +964,7 @@ fix_divmod(mrb_state *mrb, mrb_value x) #endif } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value flo_divmod(mrb_state *mrb, mrb_value x) { @@ -999,7 +999,7 @@ fix_equal(mrb_state *mrb, mrb_value x) switch (mrb_type(y)) { case MRB_TT_FIXNUM: return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y)); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: return mrb_bool_value((mrb_float)mrb_fixnum(x) == mrb_float(y)); #endif @@ -1027,7 +1027,7 @@ fix_rev(mrb_state *mrb, mrb_value num) return mrb_fixnum_value(~val); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT #define bit_op(x,y,op1,op2) do {\ return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\ } while(0) @@ -1095,7 +1095,7 @@ static mrb_value lshift(mrb_state *mrb, mrb_int val, mrb_int width) { if (width < 0) { /* mrb_int overflow */ -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT return mrb_fixnum_value(0); #else return mrb_float_value(mrb, INFINITY); @@ -1104,7 +1104,7 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width) if (val > 0) { if ((width > NUMERIC_SHIFT_WIDTH_MAX) || (val > (MRB_INT_MAX >> width))) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT return mrb_fixnum_value(-1); #else goto bit_overflow; @@ -1115,7 +1115,7 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width) else { if ((width > NUMERIC_SHIFT_WIDTH_MAX) || (val <= (MRB_INT_MIN >> width))) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT return mrb_fixnum_value(0); #else goto bit_overflow; @@ -1124,7 +1124,7 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width) return mrb_fixnum_value(val * ((mrb_int)1 << width)); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT bit_overflow: { mrb_float f = (mrb_float)val; @@ -1210,7 +1210,7 @@ fix_rshift(mrb_state *mrb, mrb_value x) * */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value fix_to_f(mrb_state *mrb, mrb_value num) { @@ -1267,13 +1267,13 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y) if (a == 0) return y; b = mrb_fixnum(y); if (mrb_int_add_overflow(a, b, &c)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b); #endif } return mrb_fixnum_value(c); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); #else return mrb_float_value(mrb, (mrb_float)a + mrb_to_flo(mrb, y)); @@ -1286,7 +1286,7 @@ mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y) if (mrb_fixnum_p(x)) { return fixnum_plus(mrb, x, y); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (mrb_float_p(x)) { return mrb_float_value(mrb, mrb_float(x) + mrb_to_flo(mrb, y)); } @@ -1323,13 +1323,13 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y) b = mrb_fixnum(y); if (mrb_int_sub_overflow(a, b, &c)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b); #endif } return mrb_fixnum_value(c); } -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); #else return mrb_float_value(mrb, (mrb_float)a - mrb_to_flo(mrb, y)); @@ -1342,7 +1342,7 @@ mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y) if (mrb_fixnum_p(x)) { return fixnum_minus(mrb, x, y); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (mrb_float_p(x)) { return mrb_float_value(mrb, mrb_float(x) - mrb_to_flo(mrb, y)); } @@ -1431,26 +1431,26 @@ fix_to_s(mrb_state *mrb, mrb_value self) static mrb_int cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2) { -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT mrb_int x, y; #else mrb_float x, y; #endif -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT x = mrb_fixnum(v1); #else x = mrb_to_flo(mrb, v1); #endif switch (mrb_type(v2)) { case MRB_TT_FIXNUM: -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT y = mrb_fixnum(v2); #else y = (mrb_float)mrb_fixnum(v2); #endif break; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: y = mrb_float(v2); break; @@ -1585,7 +1585,7 @@ num_infinite_p(mrb_state *mrb, mrb_value self) * Returns a new float which is the sum of float * and other. */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT static mrb_value flo_plus(mrb_state *mrb, mrb_value x) { @@ -1600,7 +1600,7 @@ void mrb_init_numeric(mrb_state *mrb) { struct RClass *numeric, *integer, *fixnum, *integral; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT struct RClass *fl; #endif @@ -1627,7 +1627,7 @@ mrb_init_numeric(mrb_state *mrb) mrb_undef_class_method(mrb, integer, "new"); mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */ mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE()); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.8 (x) */ mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.10 (x) */ mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.12 (x) */ @@ -1648,14 +1648,14 @@ mrb_init_numeric(mrb_state *mrb) mrb_define_method(mrb, fixnum, "<<", fix_lshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.12 */ mrb_define_method(mrb, fixnum, ">>", fix_rshift, MRB_ARGS_REQ(1)); /* 15.2.8.3.13 */ mrb_define_method(mrb, fixnum, "eql?", fix_eql, MRB_ARGS_REQ(1)); /* 15.2.8.3.16 */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_method(mrb, fixnum, "to_f", fix_to_f, MRB_ARGS_NONE()); /* 15.2.8.3.23 */ #endif mrb_define_method(mrb, fixnum, "to_s", fix_to_s, MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */ mrb_define_method(mrb, fixnum, "inspect", fix_to_s, MRB_ARGS_OPT(1)); mrb_define_method(mrb, fixnum, "divmod", fix_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* Float Class */ mrb->float_class = fl = mrb_define_class(mrb, "Float", numeric); /* 15.2.9 */ MRB_SET_INSTANCE_TT(fl, MRB_TT_FLOAT); diff --git a/src/object.c b/src/object.c index fd1f9e215..634f70830 100644 --- a/src/object.c +++ b/src/object.c @@ -24,7 +24,7 @@ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2) case MRB_TT_SYMBOL: return (mrb_symbol(v1) == mrb_symbol(v2)); -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: return (mrb_float(v1) == mrb_float(v2)); #endif @@ -47,7 +47,7 @@ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2) mrb_value result; if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE; -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* value mixing with integer and float */ if (mrb_fixnum_p(obj1)) { if (mrb_float_p(obj2) && (mrb_float)mrb_fixnum(obj1) == mrb_float(obj2)) @@ -330,7 +330,7 @@ static const struct types { {MRB_TT_ICLASS, "iClass"}, /* internal use: mixed-in module holder */ {MRB_TT_SCLASS, "SClass"}, {MRB_TT_PROC, "Proc"}, -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT {MRB_TT_FLOAT, "Float"}, #endif {MRB_TT_ARRAY, "Array"}, @@ -510,7 +510,7 @@ mrb_to_int(mrb_state *mrb, mrb_value val) { if (!mrb_fixnum_p(val)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (mrb_float_p(val)) { return mrb_flo_to_fixnum(mrb, val); } @@ -530,7 +530,7 @@ mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base) mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Integer"); } switch (mrb_type(val)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: if (base != 0) goto arg_error; return mrb_flo_to_fixnum(mrb, val); @@ -566,7 +566,7 @@ mrb_Integer(mrb_state *mrb, mrb_value val) return mrb_convert_to_integer(mrb, val, 0); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_Float(mrb_state *mrb, mrb_value val) { diff --git a/src/range.c b/src/range.c index 868d3d397..8f09eda24 100644 --- a/src/range.c +++ b/src/range.c @@ -23,7 +23,7 @@ r_check(mrb_state *mrb, mrb_value a, mrb_value b) ta = mrb_type(a); tb = mrb_type(b); -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT if (ta == MRB_TT_FIXNUM && tb == MRB_TT_FIXNUM ) { #else if ((ta == MRB_TT_FIXNUM || ta == MRB_TT_FLOAT) && diff --git a/src/string.c b/src/string.c index 73e514f41..f15770403 100644 --- a/src/string.c +++ b/src/string.c @@ -8,7 +8,7 @@ # define _CRT_NONSTDC_NO_DEPRECATE #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #include #include #endif @@ -2365,7 +2365,7 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, mrb_int base, i n *= base; n += c; if (n > (uint64_t)MRB_INT_MAX + (sign ? 0 : 1)) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (base == 10) { return mrb_float_value(mrb, mrb_str_to_dbl(mrb, mrb_str_new(mrb, str, len), badcheck)); } @@ -2476,7 +2476,7 @@ mrb_str_to_i(mrb_state *mrb, mrb_value self) return mrb_str_to_inum(mrb, self, base, FALSE); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT double mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck) { @@ -2937,7 +2937,7 @@ mrb_init_string(mrb_state *mrb) mrb_define_method(mrb, s, "slice", mrb_str_aref_m, MRB_ARGS_ANY()); /* 15.2.10.5.34 */ mrb_define_method(mrb, s, "split", mrb_str_split_m, MRB_ARGS_ANY()); /* 15.2.10.5.35 */ -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT mrb_define_method(mrb, s, "to_f", mrb_str_to_f, MRB_ARGS_NONE()); /* 15.2.10.5.38 */ #endif mrb_define_method(mrb, s, "to_i", mrb_str_to_i, MRB_ARGS_ANY()); /* 15.2.10.5.39 */ @@ -2954,7 +2954,7 @@ mrb_init_string(mrb_state *mrb) mrb_define_method(mrb, s, "byteslice", mrb_str_byteslice, MRB_ARGS_ARG(1,1)); } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT /* * Source code for the "strtod" library procedure. * diff --git a/src/vm.c b/src/vm.c index 87606c1b4..48dea94fb 100644 --- a/src/vm.c +++ b/src/vm.c @@ -6,7 +6,7 @@ #include #include -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT #include #endif #include @@ -1101,7 +1101,7 @@ RETRY_TRY_BLOCK: } goto L_RAISE; #endif -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT case IREP_TT_FLOAT: regs[a] = mrb_float_value(mrb, pool[b].u.f); break; @@ -2265,7 +2265,7 @@ RETRY_TRY_BLOCK: SET_INT_VALUE(regs[a], z); \ } \ break -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT #define OP_MATH_CASE_FLOAT(op_name, t1, t2) (void)0 #define OP_MATH_OVERFLOW_INT(op_name, x, y, z) SET_INT_VALUE(regs[a], z) #else @@ -2305,14 +2305,14 @@ RETRY_TRY_BLOCK: } CASE(OP_DIV, B) { -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT double x, y, f; #endif /* need to check if op is overridden */ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT { mrb_int x = mrb_fixnum(regs[a]); mrb_int y = mrb_fixnum(regs[a+1]); @@ -2342,7 +2342,7 @@ RETRY_TRY_BLOCK: goto L_SEND_SYM; } -#ifndef MRB_WITHOUT_FLOAT +#ifndef MRB_NO_FLOAT if (y == 0) { if (x > 0) f = INFINITY; else if (x < 0) f = -INFINITY; @@ -2378,7 +2378,7 @@ RETRY_TRY_BLOCK: SET_INT_VALUE(regs[a], z); \ } \ break -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT #define OP_MATHI_CASE_FLOAT(op_name) (void)0 #else #define OP_MATHI_CASE_FLOAT(op_name) \ @@ -2400,7 +2400,7 @@ RETRY_TRY_BLOCK: #define OP_CMP_BODY(op,v1,v2) (v1(regs[a]) op v2(regs[a+1])) -#ifdef MRB_WITHOUT_FLOAT +#ifdef MRB_NO_FLOAT #define OP_CMP(op,sym) do {\ int result;\ /* need to check if - is overridden */\ diff --git a/target/RX630.rb b/target/RX630.rb index 8b1bbb42f..1b1f425c1 100644 --- a/target/RX630.rb +++ b/target/RX630.rb @@ -30,7 +30,7 @@ MRuby::CrossBuild.new("RX630") do |conf| cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] #configuration for low memory environment - cc.defines << %w(MRB_USE_FLOAT) + cc.defines << %w(MRB_USE_FLOAT32) cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) cc.defines << %w(KHASH_DEFAULT_SIZE=8) cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) diff --git a/tasks/gitlab.rake b/tasks/gitlab.rake index 377b1cc9d..5c7b3d8c5 100644 --- a/tasks/gitlab.rake +++ b/tasks/gitlab.rake @@ -62,10 +62,10 @@ task :gitlab_config do configs = [] [true, false].each do |mode_32| - ['', 'MRB_USE_FLOAT'].each do |float_conf| + ['', 'MRB_USE_FLOAT32'].each do |float_conf| ['', 'MRB_NAN_BOXING', 'MRB_WORD_BOXING'].each do |boxing_conf| ['', 'MRB_UTF8_STRING'].each do |utf8_conf| - next if (float_conf == 'MRB_USE_FLOAT') && (boxing_conf == 'MRB_NAN_BOXING') + next if (float_conf == 'MRB_USE_FLOAT32') && (boxing_conf == 'MRB_NAN_BOXING') next if (int_conf == 'MRB_INT64') && (boxing_conf == 'MRB_NAN_BOXING') next if (int_conf == 'MRB_INT64') && (boxing_conf == 'MRB_WORD_BOXING') && mode_32 env = [float_conf, int_conf, boxing_conf, utf8_conf].map do |conf| diff --git a/test/t/float.rb b/test/t/float.rb index dc989636f..1cbc90532 100644 --- a/test/t/float.rb +++ b/test/t/float.rb @@ -207,7 +207,7 @@ assert('Float#>>') do end assert('Float#to_s') do - uses_float = 4e38.infinite? # enable MRB_USE_FLOAT? + uses_float = 4e38.infinite? # enable MRB_USE_FLOAT32? assert_equal("Infinity", Float::INFINITY.to_s) assert_equal("-Infinity", (-Float::INFINITY).to_s) -- cgit v1.2.3 From 424afa4446b78e918c11b644451d3f25217084c5 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 17 Aug 2020 17:21:56 +0900 Subject: Make `Proc#parameters` to support keyword arguments; fix #5066 TODO: Unlike CRuby, mruby's `Proc#parameters` does not distinguish required keyword arguments and optional keyword arguments currently. --- include/mruby/proc.h | 2 +- mrbgems/mruby-compiler/core/parse.y | 2 +- mrbgems/mruby-compiler/core/y.tab.c | 2 +- mrbgems/mruby-proc-ext/src/proc.c | 39 ++++++++++++++++++++++++------------- 4 files changed, 28 insertions(+), 17 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/proc.h b/include/mruby/proc.h index c14c1ff9c..981e1111d 100644 --- a/include/mruby/proc.h +++ b/include/mruby/proc.h @@ -57,7 +57,7 @@ struct RProc { #define MRB_ASPEC_REST(a) (((a) >> 12) & 0x1) #define MRB_ASPEC_POST(a) (((a) >> 7) & 0x1f) #define MRB_ASPEC_KEY(a) (((a) >> 2) & 0x1f) -#define MRB_ASPEC_KDICT(a) ((a) & (1<<1)) +#define MRB_ASPEC_KDICT(a) (((a) >> 1) & 0x1) #define MRB_ASPEC_BLOCK(a) ((a) & 1) #define MRB_PROC_CFUNC_FL 128 diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 8e3087a2a..b2bf8263f 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -3791,7 +3791,7 @@ f_rest_arg : restarg_mark tIDENTIFIER } | restarg_mark { - local_add_f(p, MRB_QSYM(and)); + local_add_f(p, MRB_QSYM(mul)); $$ = -1; } ; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 48173933f..28a06472f 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -9442,7 +9442,7 @@ yyreduce: case 554: #line 3793 "mrbgems/mruby-compiler/core/parse.y" { - local_add_f(p, MRB_QSYM(and)); + local_add_f(p, MRB_QSYM(mul)); (yyval.id) = -1; } #line 9449 "mrbgems/mruby-compiler/core/y.tab.c" diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index bb4efe3fd..2f4f77de7 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -91,21 +91,24 @@ static mrb_value mrb_proc_parameters(mrb_state *mrb, mrb_value self) { struct parameters_type { - size_t len; - const char *name; + mrb_sym name; int size; } *p, parameters_list [] = { - {sizeof("req") - 1, "req", 0}, - {sizeof("opt") - 1, "opt", 0}, - {sizeof("rest") - 1, "rest", 0}, - {sizeof("req") - 1, "req", 0}, - {sizeof("block") - 1, "block", 0}, - {0, NULL, 0} + {MRB_SYM(req), 0}, + {MRB_SYM(opt), 0}, + {MRB_SYM(rest), 0}, + {MRB_SYM(req), 0}, + {MRB_SYM(keyrest), 0}, + {MRB_SYM(block), 0}, + {MRB_SYM(key), 0}, + {0, 0} }; const struct RProc *proc = mrb_proc_ptr(self); const struct mrb_irep *irep = proc->body.irep; mrb_aspec aspec; mrb_value parameters; + mrb_value krest = mrb_nil_value(); + mrb_value block = mrb_nil_value(); int i, j; int max = -1; @@ -124,10 +127,8 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self) } if (!MRB_PROC_STRICT_P(proc)) { - parameters_list[0].len = sizeof("opt") - 1; - parameters_list[0].name = "opt"; - parameters_list[3].len = sizeof("opt") - 1; - parameters_list[3].name = "opt"; + parameters_list[0].name = MRB_SYM(opt); + parameters_list[3].name = MRB_SYM(opt); } aspec = PEEK_W(irep->iseq+1); @@ -135,13 +136,15 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self) parameters_list[1].size = MRB_ASPEC_OPT(aspec); parameters_list[2].size = MRB_ASPEC_REST(aspec); parameters_list[3].size = MRB_ASPEC_POST(aspec); - parameters_list[4].size = MRB_ASPEC_BLOCK(aspec); + parameters_list[4].size = MRB_ASPEC_KDICT(aspec); + parameters_list[5].size = MRB_ASPEC_BLOCK(aspec); + parameters_list[6].size = MRB_ASPEC_KEY(aspec); parameters = mrb_ary_new_capa(mrb, irep->nlocals-1); max = irep->nlocals-1; for (i = 0, p = parameters_list; p->name; p++) { - mrb_value sname = mrb_symbol_value(mrb_intern_static(mrb, p->name, p->len)); + mrb_value sname = mrb_symbol_value(p->name); for (j = 0; j < p->size; i++, j++) { mrb_value a; @@ -159,9 +162,17 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self) break; } } + if (p->name == MRB_SYM(block)) { + block = a; continue; + } + if (p->name == MRB_SYM(keyrest)) { + krest = a; continue; + } mrb_ary_push(mrb, parameters, a); } } + if (!mrb_nil_p(krest)) mrb_ary_push(mrb, parameters, krest); + if (!mrb_nil_p(block)) mrb_ary_push(mrb, parameters, block); return parameters; } -- cgit v1.2.3 From 55163a8a0a5737e9113f16d0f03b7ab4258706ba Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 18 Aug 2020 21:32:36 +0900 Subject: Rename `MRB_TT_FIXNUM` to `MRB_TT_INTEGER`. We still have `#define MRB_TT_FIXNUM MRB_TT_INTEGER` for compatibility. --- include/mruby/boxing_nan.h | 2 +- include/mruby/boxing_no.h | 2 +- include/mruby/boxing_word.h | 2 +- include/mruby/class.h | 2 +- include/mruby/value.h | 7 +++++-- mrbgems/mruby-array-ext/src/array.c | 2 +- mrbgems/mruby-compiler/core/codegen.c | 4 ++-- mrbgems/mruby-io/src/io.c | 4 ++-- mrbgems/mruby-objectspace/src/mruby_objectspace.c | 2 +- mrbgems/mruby-os-memsize/src/memsize.c | 2 +- mrbgems/mruby-sprintf/src/sprintf.c | 2 +- mrbgems/mruby-time/src/time.c | 2 +- src/array.c | 2 +- src/class.c | 2 +- src/etc.c | 2 +- src/gc.c | 2 +- src/hash.c | 4 ++-- src/numeric.c | 14 +++++++------- src/object.c | 8 ++++---- src/range.c | 6 +++--- src/string.c | 4 ++-- src/vm.c | 20 ++++++++++---------- 22 files changed, 50 insertions(+), 47 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/boxing_nan.h b/include/mruby/boxing_nan.h index eb89ac1f9..f013ed7fa 100644 --- a/include/mruby/boxing_nan.h +++ b/include/mruby/boxing_nan.h @@ -104,7 +104,7 @@ mrb_val_union(mrb_value v) #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 1) #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, i, 1) #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, i, 1) -#define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, i, (uint32_t)(n)) +#define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n)) #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, i, (uint32_t)(v)) #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v)) #ifdef MRB_64BIT diff --git a/include/mruby/boxing_no.h b/include/mruby/boxing_no.h index 345f6b35b..ff3d9f787 100644 --- a/include/mruby/boxing_no.h +++ b/include/mruby/boxing_no.h @@ -42,7 +42,7 @@ typedef struct mrb_value { #define SET_FALSE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 1) #define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1) #define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1) -#define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n)) +#define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n)) #ifndef MRB_NO_FLOAT #define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v)) #endif diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index b9b6a3fe9..e68d8148b 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -173,7 +173,7 @@ mrb_type(mrb_value o) { return !mrb_bool(o) ? MRB_TT_FALSE : mrb_true_p(o) ? MRB_TT_TRUE : - mrb_fixnum_p(o) ? MRB_TT_FIXNUM : + mrb_fixnum_p(o) ? MRB_TT_INTEGER : mrb_symbol_p(o) ? MRB_TT_SYMBOL : mrb_undef_p(o) ? MRB_TT_UNDEF : mrb_val_union(o).bp->tt; diff --git a/include/mruby/class.h b/include/mruby/class.h index b4b5454d5..19c2e1b7b 100644 --- a/include/mruby/class.h +++ b/include/mruby/class.h @@ -35,7 +35,7 @@ mrb_class(mrb_state *mrb, mrb_value v) return mrb->true_class; case MRB_TT_SYMBOL: return mrb->symbol_class; - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return mrb->integer_class; #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: diff --git a/include/mruby/value.h b/include/mruby/value.h index 88c8d4dba..933e5a3ec 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -106,7 +106,7 @@ enum mrb_vtype { MRB_TT_FALSE = 0, MRB_TT_TRUE, MRB_TT_FLOAT, - MRB_TT_FIXNUM, + MRB_TT_INTEGER, MRB_TT_SYMBOL, MRB_TT_UNDEF, MRB_TT_CPTR, @@ -130,6 +130,9 @@ enum mrb_vtype { MRB_TT_MAXDEFINE }; +/* for compatibility */ +#define MRB_TT_FIXNUM MRB_TT_INTEGER + #include #ifdef MRB_DOCUMENTATION_BLOCK @@ -178,7 +181,7 @@ struct RCptr { #define mrb_immediate_p(o) (mrb_type(o) < MRB_TT_FREE) #endif #ifndef mrb_fixnum_p -#define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM) +#define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_INTEGER) #endif #ifndef mrb_symbol_p #define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL) diff --git a/mrbgems/mruby-array-ext/src/array.c b/mrbgems/mruby-array-ext/src/array.c index 996679b6e..9d7f1b28a 100644 --- a/mrbgems/mruby-array-ext/src/array.c +++ b/mrbgems/mruby-array-ext/src/array.c @@ -148,7 +148,7 @@ mrb_ary_slice_bang(mrb_state *mrb, mrb_value self) else { return mrb_nil_value(); } - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: val = mrb_funcall_id(mrb, self, MRB_SYM(delete_at), 1, index); return val; default: diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 372a2c5f7..72ae0a3a9 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -543,7 +543,7 @@ new_lit(codegen_scope *s, mrb_value val) } break; #endif - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: for (i=0; iirep->plen; i++) { mrb_int v = mrb_fixnum(val); pv = &s->pool[i]; @@ -594,7 +594,7 @@ new_lit(codegen_scope *s, mrb_value val) pv->u.f = mrb_float(val); break; #endif - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: #ifdef MRB_INT64 pv->tt = IREP_TT_INT64; pv->u.i64 = mrb_fixnum(val); diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 587e195d9..712fea79c 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -338,7 +338,7 @@ option_to_fd(mrb_state *mrb, mrb_value hash, const char *key) switch (mrb_type(opt)) { case MRB_TT_DATA: /* IO */ return mrb_io_fileno(mrb, opt); - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return (int)mrb_fixnum(opt); default: mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong exec redirect action"); @@ -1076,7 +1076,7 @@ time2timeval(mrb_state *mrb, mrb_value time) struct timeval t = { 0, 0 }; switch (mrb_type(time)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: t.tv_sec = (ftime_t)mrb_fixnum(time); t.tv_usec = 0; break; diff --git a/mrbgems/mruby-objectspace/src/mruby_objectspace.c b/mrbgems/mruby-objectspace/src/mruby_objectspace.c index 16edafced..d8013c20f 100644 --- a/mrbgems/mruby-objectspace/src/mruby_objectspace.c +++ b/mrbgems/mruby-objectspace/src/mruby_objectspace.c @@ -81,7 +81,7 @@ os_count_objects(mrb_state *mrb, mrb_value self) COUNT_TYPE(T_FALSE); COUNT_TYPE(T_FREE); COUNT_TYPE(T_TRUE); - COUNT_TYPE(T_FIXNUM); + COUNT_TYPE(T_INTEGER); COUNT_TYPE(T_SYMBOL); COUNT_TYPE(T_UNDEF); COUNT_TYPE(T_FLOAT); diff --git a/mrbgems/mruby-os-memsize/src/memsize.c b/mrbgems/mruby-os-memsize/src/memsize.c index 78ef1e4df..625ffb258 100644 --- a/mrbgems/mruby-os-memsize/src/memsize.c +++ b/mrbgems/mruby-os-memsize/src/memsize.c @@ -144,7 +144,7 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj) * immediate VM stack values, contained within mrb_state, or on C stack */ case MRB_TT_TRUE: case MRB_TT_FALSE: - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: case MRB_TT_BREAK: case MRB_TT_CPTR: case MRB_TT_SYMBOL: diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 1f3ffc09a..362d16d1b 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -872,7 +872,7 @@ retry: case MRB_TT_STRING: val = mrb_str_to_inum(mrb, val, 0, TRUE); goto bin_retry; - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: v = mrb_fixnum(val); break; default: diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 3d5cdca2e..8a4f1d233 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -252,7 +252,7 @@ mrb_to_time_t(mrb_state *mrb, mrb_value obj, time_t *usec) break; #endif /* MRB_NO_FLOAT */ default: - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: { mrb_int i = mrb_int(mrb, obj); diff --git a/src/array.c b/src/array.c index 432599bf7..cd0b59ac2 100644 --- a/src/array.c +++ b/src/array.c @@ -885,7 +885,7 @@ mrb_ary_aget(mrb_state *mrb, mrb_value self) else { return mrb_nil_value(); } - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return mrb_ary_ref(mrb, self, mrb_fixnum(index)); default: return mrb_ary_ref(mrb, self, aget_index(mrb, index)); diff --git a/src/class.c b/src/class.c index df33feffb..dd713ed7e 100644 --- a/src/class.c +++ b/src/class.c @@ -1342,7 +1342,7 @@ mrb_singleton_class_ptr(mrb_state *mrb, mrb_value v) case MRB_TT_CPTR: return mrb->object_class; case MRB_TT_SYMBOL: - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: #endif diff --git a/src/etc.c b/src/etc.c index b0019e6de..e9990bec5 100644 --- a/src/etc.c +++ b/src/etc.c @@ -114,7 +114,7 @@ mrb_obj_id(mrb_value obj) return MakeID(2); case MRB_TT_SYMBOL: return MakeID(mrb_symbol(obj)); - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: #ifdef MRB_NO_FLOAT return MakeID(mrb_fixnum_id(mrb_fixnum(obj))); #else diff --git a/src/gc.c b/src/gc.c index fd472217e..393f7f62c 100644 --- a/src/gc.c +++ b/src/gc.c @@ -779,7 +779,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj, int end) switch (obj->tt) { /* immediate - no mark */ case MRB_TT_TRUE: - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: case MRB_TT_SYMBOL: /* cannot happen */ return; diff --git a/src/hash.c b/src/hash.c index 84ed00001..79cec4b71 100644 --- a/src/hash.c +++ b/src/hash.c @@ -64,7 +64,7 @@ ht_hash_func(mrb_state *mrb, htable *t, mrb_value key) case MRB_TT_TRUE: case MRB_TT_FALSE: case MRB_TT_SYMBOL: - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: #endif @@ -95,7 +95,7 @@ ht_hash_equal(mrb_state *mrb, htable *t, mrb_value a, mrb_value b) if (!mrb_symbol_p(b)) return FALSE; return mrb_symbol(a) == mrb_symbol(b); - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: if (!mrb_fixnum_p(b)) return FALSE; return mrb_fixnum(a) == mrb_fixnum(b); diff --git a/src/numeric.c b/src/numeric.c index 617348254..99d32f919 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -35,7 +35,7 @@ MRB_API mrb_float mrb_to_flo(mrb_state *mrb, mrb_value val) { switch (mrb_type(val)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return (mrb_float)mrb_fixnum(val); case MRB_TT_FLOAT: break; @@ -450,7 +450,7 @@ flo_eq(mrb_state *mrb, mrb_value x) mrb_value y = mrb_get_arg1(mrb); switch (mrb_type(y)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_fixnum(y)); case MRB_TT_FLOAT: return mrb_bool_value(mrb_float(x) == mrb_float(y)); @@ -463,7 +463,7 @@ static int64_t value_int64(mrb_state *mrb, mrb_value x) { switch (mrb_type(x)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return (int64_t)mrb_fixnum(x); case MRB_TT_FLOAT: return (int64_t)mrb_float(x); @@ -1031,7 +1031,7 @@ int_equal(mrb_state *mrb, mrb_value x) mrb_value y = mrb_get_arg1(mrb); switch (mrb_type(y)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y)); #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: @@ -1477,7 +1477,7 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2) x = mrb_to_flo(mrb, v1); #endif switch (mrb_type(v2)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: #ifdef MRB_NO_FLOAT y = mrb_fixnum(v2); #else @@ -1584,7 +1584,7 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2) mrb_value v; switch (mrb_type(obj1)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: case MRB_TT_FLOAT: return cmpnum(mrb, obj1, obj2); case MRB_TT_STRING: @@ -1657,7 +1657,7 @@ mrb_init_numeric(mrb_state *mrb) /* Integer Class */ mrb->integer_class = integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */ - MRB_SET_INSTANCE_TT(integer, MRB_TT_FIXNUM); + MRB_SET_INSTANCE_TT(integer, MRB_TT_INTEGER); mrb_undef_class_method(mrb, integer, "new"); mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */ mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE()); diff --git a/src/object.c b/src/object.c index 634f70830..a6357a6a8 100644 --- a/src/object.c +++ b/src/object.c @@ -19,7 +19,7 @@ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2) return TRUE; case MRB_TT_FALSE: - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return (mrb_fixnum(v1) == mrb_fixnum(v2)); case MRB_TT_SYMBOL: return (mrb_symbol(v1) == mrb_symbol(v2)); @@ -322,7 +322,7 @@ static const struct types { /* {MRB_TT_NIL, "nil"}, */ {MRB_TT_FALSE, "false"}, {MRB_TT_TRUE, "true"}, - {MRB_TT_FIXNUM, "Fixnum"}, + {MRB_TT_INTEGER,"Integer"}, {MRB_TT_SYMBOL, "Symbol"}, /* :symbol */ {MRB_TT_MODULE, "Module"}, {MRB_TT_OBJECT, "Object"}, @@ -536,7 +536,7 @@ mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base) return mrb_flo_to_fixnum(mrb, val); #endif - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: if (base != 0) goto arg_error; return val; @@ -574,7 +574,7 @@ mrb_Float(mrb_state *mrb, mrb_value val) mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Float"); } switch (mrb_type(val)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return mrb_float_value(mrb, (mrb_float)mrb_fixnum(val)); case MRB_TT_FLOAT: diff --git a/src/range.c b/src/range.c index 8f09eda24..0a76c9939 100644 --- a/src/range.c +++ b/src/range.c @@ -24,10 +24,10 @@ r_check(mrb_state *mrb, mrb_value a, mrb_value b) ta = mrb_type(a); tb = mrb_type(b); #ifdef MRB_NO_FLOAT - if (ta == MRB_TT_FIXNUM && tb == MRB_TT_FIXNUM ) { + if (ta == MRB_TT_INTEGER && tb == MRB_TT_INTEGER ) { #else - if ((ta == MRB_TT_FIXNUM || ta == MRB_TT_FLOAT) && - (tb == MRB_TT_FIXNUM || tb == MRB_TT_FLOAT)) { + if ((ta == MRB_TT_INTEGER || ta == MRB_TT_FLOAT) && + (tb == MRB_TT_INTEGER || tb == MRB_TT_FLOAT)) { #endif return; } diff --git a/src/string.c b/src/string.c index a8dfb5503..e88ba2be5 100644 --- a/src/string.c +++ b/src/string.c @@ -1093,7 +1093,7 @@ mrb_str_to_str(mrb_state *mrb, mrb_value str) return str; case MRB_TT_SYMBOL: return mrb_sym_str(mrb, mrb_symbol(str)); - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: return mrb_fixnum_to_str(mrb, str, 10); case MRB_TT_SCLASS: case MRB_TT_CLASS: @@ -1154,7 +1154,7 @@ str_convert_range(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen, } else { switch (mrb_type(indx)) { - case MRB_TT_FIXNUM: + case MRB_TT_INTEGER: *beg = mrb_fixnum(indx); *len = 1; return STR_CHAR_RANGE; diff --git a/src/vm.c b/src/vm.c index 401d52414..979c67424 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2256,7 +2256,7 @@ RETRY_TRY_BLOCK: } \ NEXT; #define OP_MATH_CASE_FIXNUM(op_name) \ - case TYPES2(MRB_TT_FIXNUM, MRB_TT_FIXNUM): \ + case TYPES2(MRB_TT_INTEGER, MRB_TT_INTEGER): \ { \ mrb_int x = mrb_fixnum(regs[a]), y = mrb_fixnum(regs[a+1]), z; \ if (mrb_int_##op_name##_overflow(x, y, &z)) \ @@ -2289,7 +2289,7 @@ RETRY_TRY_BLOCK: #define OP_MATH_OP_add + #define OP_MATH_OP_sub - #define OP_MATH_OP_mul * -#define OP_MATH_TT_fixnum MRB_TT_FIXNUM +#define OP_MATH_TT_fixnum MRB_TT_INTEGER #define OP_MATH_TT_float MRB_TT_FLOAT CASE(OP_ADD, B) { @@ -2311,7 +2311,7 @@ RETRY_TRY_BLOCK: /* need to check if op is overridden */ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { - case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM): + case TYPES2(MRB_TT_INTEGER,MRB_TT_INTEGER): { mrb_int x = mrb_fixnum(regs[a]); mrb_int y = mrb_fixnum(regs[a+1]); @@ -2345,11 +2345,11 @@ RETRY_TRY_BLOCK: } NEXT; #ifndef MRB_NO_FLOAT - case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT): + case TYPES2(MRB_TT_INTEGER,MRB_TT_FLOAT): x = (mrb_float)mrb_fixnum(regs[a]); y = mrb_float(regs[a+1]); break; - case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM): + case TYPES2(MRB_TT_FLOAT,MRB_TT_INTEGER): x = mrb_float(regs[a]); y = (mrb_float)mrb_fixnum(regs[a+1]); break; @@ -2391,7 +2391,7 @@ RETRY_TRY_BLOCK: } \ NEXT; #define OP_MATHI_CASE_FIXNUM(op_name) \ - case MRB_TT_FIXNUM: \ + case MRB_TT_INTEGER: \ { \ mrb_int x = mrb_fixnum(regs[a]), y = (mrb_int)b, z; \ if (mrb_int_##op_name##_overflow(x, y, &z)) \ @@ -2427,7 +2427,7 @@ RETRY_TRY_BLOCK: int result;\ /* need to check if - is overridden */\ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\ - case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM):\ + case TYPES2(MRB_TT_INTEGER,MRB_TT_INTEGER):\ result = OP_CMP_BODY(op,mrb_fixnum,mrb_fixnum);\ break;\ default:\ @@ -2447,13 +2447,13 @@ RETRY_TRY_BLOCK: int result;\ /* need to check if - is overridden */\ switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) {\ - case TYPES2(MRB_TT_FIXNUM,MRB_TT_FIXNUM):\ + case TYPES2(MRB_TT_INTEGER,MRB_TT_INTEGER):\ result = OP_CMP_BODY(op,mrb_fixnum,mrb_fixnum);\ break;\ - case TYPES2(MRB_TT_FIXNUM,MRB_TT_FLOAT):\ + case TYPES2(MRB_TT_INTEGER,MRB_TT_FLOAT):\ result = OP_CMP_BODY(op,mrb_fixnum,mrb_float);\ break;\ - case TYPES2(MRB_TT_FLOAT,MRB_TT_FIXNUM):\ + case TYPES2(MRB_TT_FLOAT,MRB_TT_INTEGER):\ result = OP_CMP_BODY(op,mrb_float,mrb_fixnum);\ break;\ case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT):\ -- cgit v1.2.3 From 2b188ed8a191257f23ddf6f8a27bf1d3964587ed Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 26 Aug 2020 17:53:04 +0900 Subject: Reorganize `Integer` system. - Integrate `Fixnum` and `Integer` - Remove `Integral` - `int / int -> int` - Replace `mrb_fixnum()` to `mrb_int()` - Replace `mrb_fixnum_value()` to `mrb_int_value()`. - Use `mrb_integer_p()` instead of `mrb_fixnum_p()` --- include/mruby.h | 2 +- include/mruby/boxing_nan.h | 3 +- include/mruby/boxing_no.h | 4 +- include/mruby/boxing_word.h | 20 +- include/mruby/numeric.h | 5 +- include/mruby/value.h | 30 ++- mrbgems/mruby-compiler/core/codegen.c | 6 +- mrbgems/mruby-enumerator/test/enumerator.rb | 2 +- mrbgems/mruby-inline-struct/test/inline.c | 2 +- mrbgems/mruby-io/src/io.c | 4 +- mrbgems/mruby-numeric-ext/src/numeric_ext.c | 2 +- mrbgems/mruby-pack/src/pack.c | 10 +- mrbgems/mruby-random/src/random.c | 16 +- mrbgems/mruby-range-ext/src/range.c | 14 +- mrbgems/mruby-rational/mrblib/rational.rb | 17 +- mrbgems/mruby-rational/src/rational.c | 14 +- mrbgems/mruby-socket/src/socket.c | 30 +-- mrbgems/mruby-sprintf/src/sprintf.c | 10 +- mrbgems/mruby-string-ext/src/string.c | 4 +- mrbgems/mruby-struct/src/struct.c | 4 +- mrbgems/mruby-test/driver.c | 4 +- mrbgems/mruby-time/src/time.c | 11 +- mrblib/numeric.rb | 47 +++- src/array.c | 6 +- src/class.c | 2 +- src/etc.c | 49 +++-- src/hash.c | 6 +- src/numeric.c | 329 +++++++++++++++------------- src/object.c | 14 +- src/range.c | 4 +- src/string.c | 12 +- src/vm.c | 38 ++-- target/boxing.rb | 24 +- test/t/array.rb | 3 +- test/t/integer.rb | 38 +--- 35 files changed, 425 insertions(+), 361 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby.h b/include/mruby.h index 4ac26bfe9..dda0fad68 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1329,7 +1329,7 @@ MRB_API void mrb_gc_register(mrb_state *mrb, mrb_value obj); MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value obj); MRB_API mrb_value mrb_to_int(mrb_state *mrb, mrb_value val); -#define mrb_int(mrb, val) mrb_fixnum(mrb_to_int(mrb, val)) +#define mrb_int(mrb, val) mrb_integer(mrb_to_int(mrb, val)) /* string type checking (contrary to the name, it doesn't convert) */ MRB_API mrb_value mrb_to_str(mrb_state *mrb, mrb_value val); MRB_API void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t); diff --git a/include/mruby/boxing_nan.h b/include/mruby/boxing_nan.h index f013ed7fa..adbfb0f55 100644 --- a/include/mruby/boxing_nan.h +++ b/include/mruby/boxing_nan.h @@ -104,7 +104,8 @@ mrb_val_union(mrb_value v) #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 1) #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, i, 1) #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, i, 1) -#define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n)) +#define SET_INT_VALUE(mrb, r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n)) +#define SET_FIXNUM_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n)) #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, i, (uint32_t)(v)) #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v)) #ifdef MRB_64BIT diff --git a/include/mruby/boxing_no.h b/include/mruby/boxing_no.h index ff3d9f787..0b14590d9 100644 --- a/include/mruby/boxing_no.h +++ b/include/mruby/boxing_no.h @@ -30,6 +30,7 @@ typedef struct mrb_value { #define mrb_float(o) (o).value.f #endif #define mrb_fixnum(o) (o).value.i +#define mrb_integer(o) mrb_fixnum(o) #define mrb_symbol(o) (o).value.sym #define mrb_type(o) (o).tt @@ -42,7 +43,8 @@ typedef struct mrb_value { #define SET_FALSE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_FALSE, value.i, 1) #define SET_TRUE_VALUE(r) BOXNIX_SET_VALUE(r, MRB_TT_TRUE, value.i, 1) #define SET_BOOL_VALUE(r,b) BOXNIX_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1) -#define SET_INT_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n)) +#define SET_INT_VALUE(mrb,r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n)) +#define SET_FIXNUM_VALUE(r,n) BOXNIX_SET_VALUE(r, MRB_TT_INTEGER, value.i, (n)) #ifndef MRB_NO_FLOAT #define SET_FLOAT_VALUE(mrb,r,v) BOXNIX_SET_VALUE(r, MRB_TT_FLOAT, value.f, (v)) #endif diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index e43665e94..433fbd094 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -18,6 +18,11 @@ struct RFloat { }; #endif +struct RInteger { + MRB_OBJECT_HEADER; + mrb_int i; +}; + enum mrb_special_consts { MRB_Qnil = 0, MRB_Qfalse = 4, @@ -82,6 +87,7 @@ union mrb_value_ { #ifndef MRB_NO_FLOAT struct RFloat *fp; #endif + struct RInteger *ip; struct RCptr *vp; uintptr_t w; }; @@ -98,6 +104,9 @@ MRB_API mrb_value mrb_word_boxing_cptr_value(struct mrb_state*, void*); #ifndef MRB_NO_FLOAT MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #endif +MRB_API mrb_value mrb_word_boxing_int_value(struct mrb_state*, mrb_int); + +#define mrb_immediate_p(o) ((o) & BOXWORD_IMMEDIATE_MASK || (o) == MRB_Qnil) #define mrb_ptr(o) mrb_val_union(o).p #define mrb_cptr(o) mrb_val_union(o).vp->p @@ -105,6 +114,12 @@ MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #define mrb_float(o) mrb_val_union(o).fp->f #endif #define mrb_fixnum(o) BOXWORD_SHIFT_VALUE(o, FIXNUM, mrb_int) +MRB_INLINE mrb_int +mrb_integer_func(mrb_value o) { + if (mrb_immediate_p(o)) return mrb_fixnum(o); + return mrb_val_union(o).ip->i; +} +#define mrb_integer(o) mrb_integer_func(o) #ifdef MRB_64BIT #define mrb_symbol(o) mrb_val_union(o).sym #else @@ -112,8 +127,8 @@ MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #endif #define mrb_bool(o) (((o) & ~(unsigned long)MRB_Qfalse) != 0) -#define mrb_immediate_p(o) ((o) & BOXWORD_IMMEDIATE_MASK || (o) == MRB_Qnil) #define mrb_fixnum_p(o) BOXWORD_SHIFT_VALUE_P(o, FIXNUM) +#define mrb_integer_p(o) (BOXWORD_SHIFT_VALUE_P(o, FIXNUM)||BOXWORD_OBJ_TYPE_P(o, INTEGER)) #ifdef MRB_64BIT #define mrb_symbol_p(o) (mrb_val_union(o).sym_flag == BOXWORD_SYMBOL_FLAG) #else @@ -154,7 +169,8 @@ MRB_API mrb_value mrb_word_boxing_float_value(struct mrb_state*, mrb_float); #define SET_FALSE_VALUE(r) ((r) = MRB_Qfalse) #define SET_TRUE_VALUE(r) ((r) = MRB_Qtrue) #define SET_BOOL_VALUE(r,b) ((b) ? SET_TRUE_VALUE(r) : SET_FALSE_VALUE(r)) -#define SET_INT_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, FIXNUM, n) +#define SET_INT_VALUE(mrb,r,n) ((r) = mrb_word_boxing_int_value(mrb, n)) +#define SET_FIXNUM_VALUE(r,n) BOXWORD_SET_SHIFT_VALUE(r, FIXNUM, n) #ifdef MRB_64BIT #define SET_SYM_VALUE(r,v) do {\ union mrb_value_ mrb_value_union_variable;\ diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index b8cc5b50f..f88868796 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -16,8 +16,8 @@ */ MRB_BEGIN_DECL -#define TYPED_POSFIXABLE(f,t) ((f) <= (t)MRB_INT_MAX) -#define TYPED_NEGFIXABLE(f,t) ((f) >= (t)MRB_INT_MIN) +#define TYPED_POSFIXABLE(f,t) ((f) <= (t)MRB_FIXNUM_MAX) +#define TYPED_NEGFIXABLE(f,t) ((f) >= (t)MRB_FIXNUM_MIN) #define TYPED_FIXABLE(f,t) (TYPED_POSFIXABLE(f,t) && TYPED_NEGFIXABLE(f,t)) #define POSFIXABLE(f) TYPED_POSFIXABLE(f,mrb_int) #define NEGFIXABLE(f) TYPED_NEGFIXABLE(f,mrb_int) @@ -39,7 +39,6 @@ MRB_API mrb_value mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base); MRB_API mrb_value mrb_float_to_str(mrb_state *mrb, mrb_value x, const char *fmt); MRB_API int mrb_float_to_cstr(mrb_state *mrb, char *buf, size_t len, const char *fmt, mrb_float f); MRB_API mrb_float mrb_to_flo(mrb_state *mrb, mrb_value x); -MRB_API mrb_value mrb_int_value(mrb_state *mrb, mrb_float f); #endif MRB_API mrb_value mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y); diff --git a/include/mruby/value.h b/include/mruby/value.h index 933e5a3ec..698c83300 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -54,16 +54,20 @@ struct mrb_state; #if defined(MRB_INT64) typedef int64_t mrb_int; # define MRB_INT_BIT 64 -# define MRB_INT_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT) -# define MRB_INT_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT) +# define MRB_INT_MIN INT64_MIN +# define MRB_INT_MAX INT64_MAX +# define MRB_FIXNUM_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT) +# define MRB_FIXNUM_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT) # define MRB_PRIo PRIo64 # define MRB_PRId PRId64 # define MRB_PRIx PRIx64 #else typedef int32_t mrb_int; # define MRB_INT_BIT 32 -# define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT) -# define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT) +# define MRB_INT_MIN INT32_MIN +# define MRB_INT_MAX INT32_MAX +# define MRB_FIXNUM_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT) +# define MRB_FIXNUM_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT) # define MRB_PRIo PRIo32 # define MRB_PRId PRId32 # define MRB_PRIx PRIx32 @@ -180,8 +184,11 @@ struct RCptr { #ifndef mrb_immediate_p #define mrb_immediate_p(o) (mrb_type(o) < MRB_TT_FREE) #endif +#ifndef mrb_integer_p +#define mrb_integer_p(o) (mrb_type(o) == MRB_TT_INTEGER) +#endif #ifndef mrb_fixnum_p -#define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_INTEGER) +#define mrb_fixnum_p(o) mrb_integer_p(o) #endif #ifndef mrb_symbol_p #define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL) @@ -287,14 +294,19 @@ mrb_cptr_value(struct mrb_state *mrb, void *p) } /** - * Returns a fixnum in Ruby. - * - * Takes an integer and boxes it into an mrb_value + * Returns an integer in Ruby. */ +MRB_INLINE mrb_value mrb_int_value(struct mrb_state *mrb, mrb_int i) +{ + mrb_value v; + SET_INT_VALUE(mrb, v, i); + return v; +} + MRB_INLINE mrb_value mrb_fixnum_value(mrb_int i) { mrb_value v; - SET_INT_VALUE(v, i); + SET_FIXNUM_VALUE(v, i); return v; } diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 72ae0a3a9..2e39817ec 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -545,7 +545,7 @@ new_lit(codegen_scope *s, mrb_value val) #endif case MRB_TT_INTEGER: for (i=0; iirep->plen; i++) { - mrb_int v = mrb_fixnum(val); + mrb_int v = mrb_integer(val); pv = &s->pool[i]; if (pv->tt == IREP_TT_INT32) { if (v == pv->u.i32) return i; @@ -597,10 +597,10 @@ new_lit(codegen_scope *s, mrb_value val) case MRB_TT_INTEGER: #ifdef MRB_INT64 pv->tt = IREP_TT_INT64; - pv->u.i64 = mrb_fixnum(val); + pv->u.i64 = mrb_integer(val); #else pv->tt = IREP_TT_INT32; - pv->u.i32 = mrb_fixnum(val); + pv->u.i32 = mrb_integer(val); #endif break; diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index ecd6c4d65..26d5766fc 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -445,7 +445,7 @@ assert 'modifying existing methods' do } end -assert 'Integral#times' do +assert 'Integer#times' do a = 3 b = a.times c = [] diff --git a/mrbgems/mruby-inline-struct/test/inline.c b/mrbgems/mruby-inline-struct/test/inline.c index b4d9b1f1e..6764b1af4 100644 --- a/mrbgems/mruby-inline-struct/test/inline.c +++ b/mrbgems/mruby-inline-struct/test/inline.c @@ -10,7 +10,7 @@ istruct_test_initialize(mrb_state *mrb, mrb_value self) mrb_int size = mrb_istruct_size(); mrb_value object = mrb_get_arg1(mrb); - if (mrb_fixnum_p(object)) { + if (mrb_integer_p(object)) { strncpy(string, "fixnum", size-1); } #ifndef MRB_NO_FLOAT diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 712fea79c..97bff31b4 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -339,7 +339,7 @@ option_to_fd(mrb_state *mrb, mrb_value hash, const char *key) case MRB_TT_DATA: /* IO */ return mrb_io_fileno(mrb, opt); case MRB_TT_INTEGER: - return (int)mrb_fixnum(opt); + return (int)mrb_integer(opt); default: mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong exec redirect action"); break; @@ -1077,7 +1077,7 @@ time2timeval(mrb_state *mrb, mrb_value time) switch (mrb_type(time)) { case MRB_TT_INTEGER: - t.tv_sec = (ftime_t)mrb_fixnum(time); + t.tv_sec = (ftime_t)mrb_integer(time); t.tv_usec = 0; break; diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index d00be4b5d..e5ec90866 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -53,7 +53,7 @@ mrb_int_nobits(mrb_state *mrb, mrb_value self) void mrb_mruby_numeric_ext_gem_init(mrb_state* mrb) { - struct RClass *i = mrb_module_get(mrb, "Integral"); + struct RClass *i = mrb_class_get(mrb, "Integer"); mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1)); mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1)); diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c index f797b599b..35e79d25d 100644 --- a/mrbgems/mruby-pack/src/pack.c +++ b/mrbgems/mruby-pack/src/pack.c @@ -143,7 +143,7 @@ static int pack_c(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags) { str = str_len_ensure(mrb, str, sidx + 1); - RSTRING_PTR(str)[sidx] = (char)mrb_fixnum(o); + RSTRING_PTR(str)[sidx] = (char)mrb_integer(o); return 1; } @@ -163,7 +163,7 @@ pack_s(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl uint16_t n; str = str_len_ensure(mrb, str, sidx + 2); - n = (uint16_t)mrb_fixnum(o); + n = (uint16_t)mrb_integer(o); if (flags & PACK_FLAG_LITTLEENDIAN) { RSTRING_PTR(str)[sidx+0] = n % 256; RSTRING_PTR(str)[sidx+1] = n / 256; @@ -197,7 +197,7 @@ pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl uint32_t n; str = str_len_ensure(mrb, str, sidx + 4); - n = (uint32_t)mrb_fixnum(o); + n = (uint32_t)mrb_integer(o); if (flags & PACK_FLAG_LITTLEENDIAN) { RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff); RSTRING_PTR(str)[sidx+1] = (char)(n >> 8); @@ -313,7 +313,7 @@ pack_q(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl uint64_t n; str = str_len_ensure(mrb, str, sidx + 8); - n = (uint64_t)mrb_fixnum(o); + n = (uint64_t)mrb_integer(o); if (flags & PACK_FLAG_LITTLEENDIAN) { RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff); RSTRING_PTR(str)[sidx+1] = (char)(n >> 8); @@ -560,7 +560,7 @@ pack_utf8(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, long count, int len = 0; uint32_t c = 0; - c = (uint32_t)mrb_fixnum(o); + c = (uint32_t)mrb_integer(o); /* Unicode character */ /* from mruby-compiler gem */ diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 39c72ac9e..5fa15c508 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -93,7 +93,7 @@ random_rand(mrb_state *mrb, rand_state *t, mrb_value max) { mrb_value value; - if (mrb_fixnum(max) == 0) { + if (mrb_integer(max) == 0) { #ifndef MRB_NO_FLOAT value = mrb_float_value(mrb, rand_real(t)); #else @@ -101,7 +101,7 @@ random_rand(mrb_state *mrb, rand_state *t, mrb_value max) #endif } else { - value = mrb_fixnum_value(rand_uint32(t) % mrb_fixnum(max)); + value = mrb_fixnum_value(rand_uint32(t) % mrb_integer(max)); } return value; @@ -119,7 +119,7 @@ get_opt(mrb_state* mrb) mrb_int i; arg = mrb_to_int(mrb, arg); - i = mrb_fixnum(arg); + i = mrb_integer(arg); if (i < 0) { arg = mrb_fixnum_value(0 - i); } @@ -161,7 +161,7 @@ random_m_init(mrb_state *mrb, mrb_value self) rand_init(t); } else { - rand_seed(t, (uint32_t)mrb_fixnum(seed)); + rand_seed(t, (uint32_t)mrb_integer(seed)); } return self; @@ -190,7 +190,7 @@ random_m_srand(mrb_state *mrb, mrb_value self) seed = (uint32_t)time(NULL) + rand_uint32(t); } else { - seed = (uint32_t)mrb_fixnum(sv); + seed = (uint32_t)mrb_integer(sv); } old_seed = rand_seed(t, seed); @@ -257,7 +257,7 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) mrb_value *ptr = RARRAY_PTR(ary); mrb_value tmp; - j = mrb_fixnum(random_rand(mrb, random, max)); + j = mrb_integer(random_rand(mrb, random, max)); tmp = ptr[i]; ptr[i] = ptr[j]; @@ -342,7 +342,7 @@ mrb_ary_sample(mrb_state *mrb, mrb_value ary) r = (mrb_int)(rand_uint32(random) % len); for (j=0; j(rhs) - if rhs.is_a?(Integral) + case rhs + when Integer, Float return numerator <=> rhs if denominator == 1 rhs = Rational(rhs) end - case rhs when Rational (numerator * rhs.denominator - denominator * rhs.numerator) <=> 0 @@ -65,14 +65,13 @@ class Rational < Numeric def ==(rhs) return true if self.equal?(rhs) - if rhs.is_a?(Integral) && denominator == 1 - return numerator == rhs - end - if rhs.is_a?(Rational) - numerator * rhs.denominator == denominator * rhs.numerator - else - rhs == self + case rhs + when Integer, Float + return numerator == rhs if denominator == 1 + when Rational + return numerator * rhs.denominator == denominator * rhs.numerator end + rhs == self end end diff --git a/mrbgems/mruby-rational/src/rational.c b/mrbgems/mruby-rational/src/rational.c index fcaba3df5..5b1bec9e2 100644 --- a/mrbgems/mruby-rational/src/rational.c +++ b/mrbgems/mruby-rational/src/rational.c @@ -102,11 +102,11 @@ rational_s_new(mrb_state *mrb, mrb_value self) mrb_value numv, denomv; mrb_get_args(mrb, "oo", &numv, &denomv); - if (mrb_fixnum_p(numv)) { - numerator = mrb_fixnum(numv); + if (mrb_integer_p(numv)) { + numerator = mrb_integer(numv); - if (mrb_fixnum_p(denomv)) { - denominator = mrb_fixnum(denomv); + if (mrb_integer_p(denomv)) { + denominator = mrb_integer(denomv); } else { mrb_float denomf = mrb_to_flo(mrb, denomv); @@ -118,8 +118,8 @@ rational_s_new(mrb_state *mrb, mrb_value self) else { mrb_float numf = mrb_to_flo(mrb, numv); - if (mrb_fixnum_p(denomv)) { - denominator = mrb_fixnum(denomv); + if (mrb_integer_p(denomv)) { + denominator = mrb_integer(denomv); } else { mrb_float denomf = mrb_to_flo(mrb, denomv); @@ -176,7 +176,7 @@ rational_negative_p(mrb_state *mrb, mrb_value self) static mrb_value fix_to_r(mrb_state *mrb, mrb_value self) { - return rational_new(mrb, mrb_fixnum(self), 1); + return rational_new(mrb, mrb_integer(self), 1); } void mrb_mruby_rational_gem_init(mrb_state *mrb) diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index 6542c1603..d94573c96 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -140,7 +140,7 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass) if (mrb_string_p(service)) { servname = RSTRING_CSTR(mrb, service); - } else if (mrb_fixnum_p(service)) { + } else if (mrb_integer_p(service)) { servname = RSTRING_PTR(mrb_fixnum_to_str(mrb, service, 10)); } else if (mrb_nil_p(service)) { servname = NULL; @@ -151,16 +151,16 @@ mrb_addrinfo_getaddrinfo(mrb_state *mrb, mrb_value klass) memset(&hints, 0, sizeof(hints)); hints.ai_flags = (int)flags; - if (mrb_fixnum_p(family)) { - hints.ai_family = (int)mrb_fixnum(family); + if (mrb_integer_p(family)) { + hints.ai_family = (int)mrb_integer(family); } - if (mrb_fixnum_p(socktype)) { - hints.ai_socktype = (int)mrb_fixnum(socktype); + if (mrb_integer_p(socktype)) { + hints.ai_socktype = (int)mrb_integer(socktype); } - if (mrb_fixnum_p(protocol)) { - hints.ai_protocol = (int)mrb_fixnum(protocol); + if (mrb_integer_p(protocol)) { + hints.ai_protocol = (int)mrb_integer(protocol); } lastai = mrb_cv_get(mrb, klass, MRB_SYM(_lastai)); @@ -269,7 +269,7 @@ sa2addrlist(mrb_state *mrb, const struct sockaddr *sa, socklen_t salen) static int socket_fd(mrb_state *mrb, mrb_value sock) { - return (int)mrb_fixnum(mrb_funcall_id(mrb, sock, MRB_SYM(fileno), 0)); + return (int)mrb_integer(mrb_funcall_id(mrb, sock, MRB_SYM(fileno), 0)); } static int @@ -449,21 +449,21 @@ mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self) argc = mrb_get_args(mrb, "o|io", &so, &optname, &optval); if (argc == 3) { - if (!mrb_fixnum_p(so)) { + if (!mrb_integer_p(so)) { mrb_raise(mrb, E_ARGUMENT_ERROR, "level is not an integer"); } - level = mrb_fixnum(so); + level = mrb_integer(so); if (mrb_string_p(optval)) { /* that's good */ } else if (mrb_true_p(optval) || mrb_false_p(optval)) { mrb_int i = mrb_test(optval) ? 1 : 0; optval = mrb_str_new(mrb, (char*)&i, sizeof(i)); - } else if (mrb_fixnum_p(optval)) { + } else if (mrb_integer_p(optval)) { if (optname == IP_MULTICAST_TTL || optname == IP_MULTICAST_LOOP) { - char uc = (char)mrb_fixnum(optval); + char uc = (char)mrb_integer(optval); optval = mrb_str_new(mrb, &uc, sizeof(uc)); } else { - mrb_int i = mrb_fixnum(optval); + mrb_int i = mrb_integer(optval); optval = mrb_str_new(mrb, (char*)&i, sizeof(i)); } } else { @@ -472,8 +472,8 @@ mrb_basicsocket_setsockopt(mrb_state *mrb, mrb_value self) } else if (argc == 1) { if (strcmp(mrb_obj_classname(mrb, so), "Socket::Option") != 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "not an instance of Socket::Option"); - level = mrb_fixnum(mrb_funcall_id(mrb, so, MRB_SYM(level), 0)); - optname = mrb_fixnum(mrb_funcall_id(mrb, so, MRB_SYM(optname), 0)); + level = mrb_integer(mrb_funcall_id(mrb, so, MRB_SYM(level), 0)); + optname = mrb_integer(mrb_funcall_id(mrb, so, MRB_SYM(optname), 0)); optval = mrb_funcall_id(mrb, so, MRB_SYM(data), 0); } else { mrb_argnum_error(mrb, argc, 3, 3); diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 4df3e3a17..9ac8a512d 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -74,7 +74,7 @@ static mrb_value mrb_fix2binstr(mrb_state *mrb, mrb_value x, int base) { char buf[66], *b = buf + sizeof buf; - mrb_int num = mrb_fixnum(x); + mrb_int num = mrb_integer(x); uint64_t val = (uint64_t)num; char d; @@ -764,8 +764,8 @@ retry: mrb_raise(mrb, E_ARGUMENT_ERROR, "%c requires a character"); } } - else if (mrb_fixnum_p(val)) { - mrb_int n = mrb_fixnum(val); + else if (mrb_integer_p(val)) { + mrb_int n = mrb_integer(val); #ifndef MRB_UTF8_STRING char buf[1]; @@ -882,14 +882,14 @@ retry: #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: val = mrb_flo_to_fixnum(mrb, val); - if (mrb_fixnum_p(val)) goto bin_retry; + if (mrb_integer_p(val)) goto bin_retry; break; #endif case MRB_TT_STRING: val = mrb_str_to_inum(mrb, val, 0, TRUE); goto bin_retry; case MRB_TT_INTEGER: - v = mrb_fixnum(val); + v = mrb_integer(val); break; default: val = mrb_Integer(mrb, val); diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 71fb5bb65..4b8f99597 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -166,7 +166,7 @@ mrb_str_concat_m(mrb_state *mrb, mrb_value self) { mrb_value str = mrb_get_arg1(mrb); - if (mrb_fixnum_p(str) || mrb_float_p(str)) + if (mrb_integer_p(str) || mrb_float_p(str)) #ifdef MRB_UTF8_STRING str = int_chr_utf8(mrb, str); #else @@ -1231,7 +1231,7 @@ mrb_mruby_string_ext_gem_init(mrb_state* mrb) mrb_define_method(mrb, s, "__lines", mrb_str_lines, MRB_ARGS_NONE()); - mrb_define_method(mrb, mrb_module_get(mrb, "Integral"), "chr", mrb_int_chr, MRB_ARGS_OPT(1)); + mrb_define_method(mrb, mrb_class_get(mrb, "Integer"), "chr", mrb_int_chr, MRB_ARGS_OPT(1)); } void diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c index 1189381cb..7c6f50090 100644 --- a/mrbgems/mruby-struct/src/struct.c +++ b/mrbgems/mruby-struct/src/struct.c @@ -113,7 +113,7 @@ mrb_struct_members(mrb_state *mrb, mrb_value obj) static mrb_value mrb_struct_ref(mrb_state *mrb, mrb_value obj) { - mrb_int i = mrb_fixnum(mrb_proc_cfunc_env_get(mrb, 0)); + mrb_int i = mrb_integer(mrb_proc_cfunc_env_get(mrb, 0)); mrb_value *ptr = RSTRUCT_PTR(obj); if (!ptr) return mrb_nil_value(); @@ -152,7 +152,7 @@ mrb_id_attrset(mrb_state *mrb, mrb_sym id) static mrb_value mrb_struct_set_m(mrb_state *mrb, mrb_value obj) { - mrb_int i = mrb_fixnum(mrb_proc_cfunc_env_get(mrb, 0)); + mrb_int i = mrb_integer(mrb_proc_cfunc_env_get(mrb, 0)); mrb_value *ptr; mrb_value val = mrb_get_arg1(mrb); diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index 4b82a9abc..b22888ec5 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -252,9 +252,9 @@ mrb_t_pass_result(mrb_state *mrb_dst, mrb_state *mrb_src) #define TEST_COUNT_PASS(name) \ do { \ res_src = mrb_gv_get(mrb_src, mrb_intern_lit(mrb_src, "$" #name)); \ - if (mrb_fixnum_p(res_src)) { \ + if (mrb_integer_p(res_src)) { \ mrb_value res_dst = mrb_gv_get(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name)); \ - mrb_gv_set(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name), mrb_fixnum_value(mrb_fixnum(res_dst) + mrb_fixnum(res_src))); \ + mrb_gv_set(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name), mrb_fixnum_value(mrb_integer(res_dst) + mrb_integer(res_src))); \ } \ } while (FALSE) \ diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 8a4f1d233..2af86b14e 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -218,11 +218,15 @@ typedef mrb_int mrb_sec; (sizeof(time_t) <= 4 ? INT32_MAX : INT64_MAX) \ ) +/* return true if time_t is fit in mrb_int */ static mrb_bool fixable_time_t_p(time_t v) { if (MRB_INT_MIN <= MRB_TIME_MIN && MRB_TIME_MAX <= MRB_INT_MAX) return TRUE; - return FIXABLE(v); + if (v > (time_t)MRB_INT_MAX) return FALSE; + if (MRB_TIME_T_UINT) return TRUE; + if (MRB_INT_MIN > (mrb_int)v) return FALSE; + return TRUE; } static time_t @@ -880,11 +884,6 @@ mrb_time_usec(mrb_state *mrb, mrb_value self) struct mrb_time *tm; tm = time_get_ptr(mrb, self); -#ifndef MRB_NO_FLOAT - if (!fixable_time_t_p(tm->usec)) { - return mrb_float_value(mrb, (mrb_float)tm->usec); - } -#endif return mrb_fixnum_value((mrb_int)tm->usec); } diff --git a/mrblib/numeric.rb b/mrblib/numeric.rb index 5926518d5..e28d63324 100644 --- a/mrblib/numeric.rb +++ b/mrblib/numeric.rb @@ -34,11 +34,11 @@ class Numeric end ## -# Integral +# Integer # -# mruby special - module to share methods between Floats and Integers -# to make them compatible -module Integral +# ISO 15.2.8 +## +class Integer ## # Calls the given block once for each Integer # from +self+ downto +num+. @@ -125,14 +125,7 @@ module Integral end self end -end -## -# Integer -# -# ISO 15.2.8 -class Integer - include Integral ## # Returns the receiver simply. # @@ -161,3 +154,35 @@ class Integer # ISO 15.2.8.3.26 alias truncate floor end + +class Float + ## + # Calls the given block from +self+ to +num+ + # incremented by +step+ (default 1). + # + def step(num=nil, step=1, &block) + raise ArgumentError, "step can't be 0" if step == 0 + return to_enum(:step, num, step) unless block + + i = self + if num == self || step.infinite? + block.call(i) if step > 0 && i <= (num||i) || step < 0 && i >= (num||-i) + elsif num == nil + while true + block.call(i) + i += step + end + elsif step > 0 + while i <= num + block.call(i) + i += step + end + else + while i >= num + block.call(i) + i += step + end + end + self + end +end diff --git a/src/array.c b/src/array.c index cd0b59ac2..c4bc554ef 100644 --- a/src/array.c +++ b/src/array.c @@ -822,8 +822,8 @@ mrb_ary_subseq(mrb_state *mrb, mrb_value ary, mrb_int beg, mrb_int len) static mrb_int aget_index(mrb_state *mrb, mrb_value index) { - if (mrb_fixnum_p(index)) { - return mrb_fixnum(index); + if (mrb_integer_p(index)) { + return mrb_integer(index); } #ifndef MRB_NO_FLOAT else if (mrb_float_p(index)) { @@ -886,7 +886,7 @@ mrb_ary_aget(mrb_state *mrb, mrb_value self) return mrb_nil_value(); } case MRB_TT_INTEGER: - return mrb_ary_ref(mrb, self, mrb_fixnum(index)); + return mrb_ary_ref(mrb, self, mrb_integer(index)); default: return mrb_ary_ref(mrb, self, aget_index(mrb, index)); } diff --git a/src/class.c b/src/class.c index 500e7f953..779a02da9 100644 --- a/src/class.c +++ b/src/class.c @@ -913,7 +913,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) p = va_arg(ap, mrb_int*); if (i < argc) { - *p = mrb_fixnum(mrb_to_int(mrb, argv[i++])); + *p = mrb_integer(mrb_to_int(mrb, argv[i++])); } } break; diff --git a/src/etc.c b/src/etc.c index e9990bec5..96f95ad5f 100644 --- a/src/etc.c +++ b/src/etc.c @@ -8,6 +8,7 @@ #include #include #include +#include MRB_API struct RData* mrb_data_object_alloc(mrb_state *mrb, struct RClass *klass, void *ptr, const mrb_data_type *type) @@ -69,21 +70,11 @@ mrb_obj_to_sym(mrb_state *mrb, mrb_value name) return 0; /* not reached */ } -MRB_API mrb_int -#ifdef MRB_NO_FLOAT -mrb_fixnum_id(mrb_int f) -#else -mrb_float_id(mrb_float f) -#endif +static mrb_int +make_num_id(const char *p, size_t len) { - const char *p = (const char*)&f; - int len = sizeof(f); uint32_t id = 0; -#ifndef MRB_NO_FLOAT - /* normalize -0.0 to 0.0 */ - if (f == 0) f = 0.0; -#endif while (len--) { id = id*65599 + *p; p++; @@ -93,6 +84,22 @@ mrb_float_id(mrb_float f) return (mrb_int)id; } +MRB_API mrb_int +mrb_int_id(mrb_int n) +{ + return make_num_id((const char*)&n, sizeof(n)); +} + +#ifndef MRB_NO_FLOAT +MRB_API mrb_int +mrb_float_id(mrb_float f) +{ + /* normalize -0.0 to 0.0 */ + if (f == 0) f = 0.0; + return make_num_id((const char*)&f, sizeof(f)); +} +#endif + MRB_API mrb_int mrb_obj_id(mrb_value obj) { @@ -115,10 +122,8 @@ mrb_obj_id(mrb_value obj) case MRB_TT_SYMBOL: return MakeID(mrb_symbol(obj)); case MRB_TT_INTEGER: + return MakeID(mrb_int_id(mrb_integer(obj))); #ifdef MRB_NO_FLOAT - return MakeID(mrb_fixnum_id(mrb_fixnum(obj))); -#else - return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT); case MRB_TT_FLOAT: return MakeID(mrb_float_id(mrb_float(obj))); #endif @@ -159,6 +164,20 @@ mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) return v.w; } #endif /* MRB_NO_FLOAT */ + +MRB_API mrb_value +mrb_word_boxing_int_value(mrb_state *mrb, mrb_int n) +{ + if (FIXABLE(n)) return mrb_fixnum_value(n); + else { + union mrb_value_ v; + + v.p = mrb_obj_alloc(mrb, MRB_TT_INTEGER, mrb->integer_class); + v.ip->i = n; + MRB_SET_FROZEN_FLAG(v.ip); + return v.w; + } +} #endif /* MRB_WORD_BOXING */ #if defined(MRB_WORD_BOXING) || (defined(MRB_NAN_BOXING) && defined(MRB_64BIT)) diff --git a/src/hash.c b/src/hash.c index 79cec4b71..d67fa6254 100644 --- a/src/hash.c +++ b/src/hash.c @@ -73,7 +73,7 @@ ht_hash_func(mrb_state *mrb, htable *t, mrb_value key) default: hv = mrb_funcall_id(mrb, key, MRB_SYM(hash), 0); - h = (size_t)tt ^ (size_t)mrb_fixnum(hv); + h = (size_t)tt ^ (size_t)mrb_integer(hv); break; } if (index && (index != t->index || capa != index->capa)) { @@ -96,8 +96,8 @@ ht_hash_equal(mrb_state *mrb, htable *t, mrb_value a, mrb_value b) return mrb_symbol(a) == mrb_symbol(b); case MRB_TT_INTEGER: - if (!mrb_fixnum_p(b)) return FALSE; - return mrb_fixnum(a) == mrb_fixnum(b); + if (!mrb_integer_p(b)) return FALSE; + return mrb_integer(a) == mrb_integer(b); #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: diff --git a/src/numeric.c b/src/numeric.c index 0cc7958e6..8fb144fae 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -36,7 +36,7 @@ mrb_to_flo(mrb_state *mrb, mrb_value val) { switch (mrb_type(val)) { case MRB_TT_INTEGER: - return (mrb_float)mrb_fixnum(val); + return (mrb_float)mrb_integer(val); case MRB_TT_FLOAT: break; default: @@ -44,15 +44,6 @@ mrb_to_flo(mrb_state *mrb, mrb_value val) } return mrb_float(val); } - -MRB_API mrb_value -mrb_int_value(mrb_state *mrb, mrb_float f) -{ - if (FIXABLE_FLOAT(f)) { - return mrb_fixnum_value((mrb_int)f); - } - return mrb_float_value(mrb, f); -} #endif /* @@ -65,67 +56,48 @@ mrb_int_value(mrb_state *mrb, mrb_float f) * 2.0**3 #=> 8.0 */ static mrb_value -integral_pow(mrb_state *mrb, mrb_value x) +int_pow(mrb_state *mrb, mrb_value x) { - mrb_value y = mrb_get_arg1(mrb); + mrb_int base = mrb_int(mrb, x); + mrb_int exp; #ifndef MRB_NO_FLOAT - mrb_float d; -#endif - - if (mrb_fixnum_p(x) && mrb_fixnum_p(y)) { - /* try ipow() */ - mrb_int base = mrb_fixnum(x); - mrb_int exp = mrb_fixnum(y); - mrb_int result = 1; + mrb_value y; + mrb_float z; - if (exp < 0) -#ifdef MRB_NO_FLOAT - return mrb_fixnum_value(0); -#else - goto float_pow; -#endif - for (;;) { - if (exp & 1) { - if (mrb_int_mul_overflow(result, base, &result)) { -#ifndef MRB_NO_FLOAT - goto float_pow; -#endif - } - } - exp >>= 1; - if (exp == 0) break; - if (mrb_int_mul_overflow(base, base, &base)) { -#ifndef MRB_NO_FLOAT - goto float_pow; -#endif - } + mrb_get_args(mrb, "o", &y); + if (!mrb_integer_p(y)) { + mrb_get_args(mrb, "f", &z); + z = pow((mrb_float)base, z); + return mrb_float_value(mrb, z); + } + else { + mrb_get_args(mrb, "i", &exp); + z = pow((double)base, (double)exp); + if (exp < 0 || z < (mrb_float)MRB_INT_MIN || (mrb_float)MRB_INT_MAX < z) { + return mrb_float_value(mrb, z); } - return mrb_fixnum_value(result); } -#ifdef MRB_NO_FLOAT - mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); + return mrb_int_value(mrb, (mrb_int)z); #else - float_pow: - d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y)); - return mrb_float_value(mrb, d); -#endif -} - -static mrb_value -integral_idiv(mrb_state *mrb, mrb_value x) -{ -#ifdef MRB_NO_FLOAT - mrb_value y = mrb_get_arg1(mrb); + mrb_int result = 1; - if (!mrb_fixnum_p(y)) { - mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); + mrb_get_args(mrb, "i", &exp); + if (exp < 0) { + return mrb_fixnum_value(0); } - return mrb_fixnum_value(mrb_fixnum(x) / mrb_fixnum(y)); -#else - mrb_float y; - - mrb_get_args(mrb, "f", &y); - return mrb_int_value(mrb, mrb_to_flo(mrb, x) / y); + for (;;) { + if (exp & 1) { + if (mrb_int_mul_overflow(result, base, &result)) { + mrb_raise(mrb, E_RANGE_ERROR, "integer overflow in division"); + } + } + exp >>= 1; + if (exp == 0) break; + if (mrb_int_mul_overflow(base, base, &base)) { + mrb_raise(mrb, E_RANGE_ERROR, "integer overflow in division"); + } + } + return mrb_int_value(mrb, result); #endif } @@ -133,13 +105,36 @@ integral_idiv(mrb_state *mrb, mrb_value x) /* 15.2.9.3.4 */ /* * call-seq: - * num / other -> num + * int / other -> int * * Performs division: the class of the resulting object depends on * the class of num and on the magnitude of the * result. */ +static mrb_value +int_div(mrb_state *mrb, mrb_value xv) +{ +#ifndef MRB_NO_FLOAT + mrb_value yv; + + mrb_get_args(mrb, "o", &yv); + if (mrb_float_p(yv)) { + return mrb_fixnum_value((mrb_int)((mrb_float)mrb_integer(xv)/mrb_float(yv))); + } + else +#endif + { + mrb_int y; + + mrb_get_args(mrb, "i", &y); + if (y == 0) { + mrb_raise(mrb, E_ZERODIV_ERROR, "devided by zero"); + } + return mrb_fixnum_value(mrb_integer(xv) / y); + } +} + /* 15.2.9.3.19(x) */ /* * call-seq: @@ -149,7 +144,7 @@ integral_idiv(mrb_state *mrb, mrb_value x) */ static mrb_value -integral_div(mrb_state *mrb, mrb_value xv) +int_quo(mrb_state *mrb, mrb_value xv) { #ifdef MRB_NO_FLOAT mrb_int y; @@ -160,25 +155,15 @@ integral_div(mrb_state *mrb, mrb_value xv) } return mrb_fixnum_value(mrb_fixnum(xv) / y); #else - mrb_float x, y; + mrb_float y; mrb_get_args(mrb, "f", &y); - x = mrb_to_flo(mrb, xv); - if (y == 0) { - if (x < 0) - y = -INFINITY; - else if (x > 0) - y = INFINITY; - else /* if (x == 0) */ - y = NAN; - return mrb_float_value(mrb, y); - } - return mrb_float_value(mrb, x / y); + return mrb_float_value(mrb, (mrb_float)mrb_integer(xv) / y); #endif } static mrb_value -integral_coerce_step_counter(mrb_state *mrb, mrb_value self) +coerce_step_counter(mrb_state *mrb, mrb_value self) { mrb_value num, step; @@ -203,6 +188,42 @@ integral_coerce_step_counter(mrb_state *mrb, mrb_value self) * representation. */ +static mrb_value +flo_pow(mrb_state *mrb, mrb_value x) +{ + mrb_value y = mrb_get_arg1(mrb); + mrb_float d = pow(mrb_to_flo(mrb, x), mrb_to_flo(mrb, y)); + return mrb_float_value(mrb, d); +} + +static mrb_value +flo_idiv(mrb_state *mrb, mrb_value x) +{ + mrb_float y; + + mrb_get_args(mrb, "f", &y); + return mrb_int_value(mrb, (mrb_int)(mrb_to_flo(mrb, x) / y)); +} + +static mrb_value +flo_div(mrb_state *mrb, mrb_value xv) +{ + mrb_float x, y; + + mrb_get_args(mrb, "f", &y); + x = mrb_float(xv); + if (y == 0) { + if (x < 0) + y = -INFINITY; + else if (x > 0) + y = INFINITY; + else /* if (x == 0) */ + y = NAN; + return mrb_float_value(mrb, y); + } + return mrb_float_value(mrb, x / y); +} + static mrb_value flo_to_str(mrb_state *mrb, mrb_value flt, mrb_bool add_dot_zero) { @@ -417,8 +438,8 @@ int_eql(mrb_state *mrb, mrb_value x) { mrb_value y = mrb_get_arg1(mrb); - if (!mrb_fixnum_p(y)) return mrb_false_value(); - return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y)); + if (!mrb_integer_p(y)) return mrb_false_value(); + return mrb_bool_value(mrb_integer(x) == mrb_integer(y)); } #ifndef MRB_NO_FLOAT @@ -451,7 +472,7 @@ flo_eq(mrb_state *mrb, mrb_value x) switch (mrb_type(y)) { case MRB_TT_INTEGER: - return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_fixnum(y)); + return mrb_bool_value(mrb_float(x) == (mrb_float)mrb_integer(y)); case MRB_TT_FLOAT: return mrb_bool_value(mrb_float(x) == mrb_float(y)); default: @@ -464,7 +485,7 @@ value_int64(mrb_state *mrb, mrb_value x) { switch (mrb_type(x)) { case MRB_TT_INTEGER: - return (int64_t)mrb_fixnum(x); + return (int64_t)mrb_integer(x); case MRB_TT_FLOAT: return (int64_t)mrb_float(x); default: @@ -560,7 +581,7 @@ flo_shift(mrb_state *mrb, mrb_value x, mrb_int width) val *= 2; } } - return mrb_int_value(mrb, val); + return mrb_int_value(mrb, (mrb_int)val); } static mrb_value @@ -666,7 +687,7 @@ flo_floor(mrb_state *mrb, mrb_value num) mrb_float f = floor(mrb_float(num)); mrb_check_num_exact(mrb, f); - return mrb_int_value(mrb, f); + return mrb_int_value(mrb, (mrb_int)f); } /* 15.2.9.3.8 */ @@ -689,7 +710,7 @@ flo_ceil(mrb_state *mrb, mrb_value num) mrb_float f = ceil(mrb_float(num)); mrb_check_num_exact(mrb, f); - return mrb_int_value(mrb, f); + return mrb_int_value(mrb, (mrb_int)f); } /* 15.2.9.3.12 */ @@ -771,7 +792,7 @@ flo_round(mrb_state *mrb, mrb_value num) if (!isfinite(number)) return num; return mrb_float_value(mrb, number); } - return mrb_int_value(mrb, number); + return mrb_int_value(mrb, (mrb_int)number); } /* 15.2.9.3.14 */ @@ -793,7 +814,7 @@ flo_truncate(mrb_state *mrb, mrb_value num) if (f < 0.0) f = ceil(f); mrb_check_num_exact(mrb, f); - return mrb_int_value(mrb, f); + return mrb_int_value(mrb, (mrb_int)f); } static mrb_value @@ -830,12 +851,12 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y) { mrb_int a; - a = mrb_fixnum(x); - if (mrb_fixnum_p(y)) { + a = mrb_integer(x); + if (mrb_integer_p(y)) { mrb_int b, c; if (a == 0) return x; - b = mrb_fixnum(y); + b = mrb_integer(y); if (mrb_int_mul_overflow(a, b, &c)) { #ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)a * (mrb_float)b); @@ -853,7 +874,7 @@ fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y) MRB_API mrb_value mrb_num_mul(mrb_state *mrb, mrb_value x, mrb_value y) { - if (mrb_fixnum_p(x)) { + if (mrb_integer_p(x)) { return fixnum_mul(mrb, x, y); } #ifndef MRB_NO_FLOAT @@ -927,8 +948,8 @@ int_mod(mrb_state *mrb, mrb_value x) mrb_value y = mrb_get_arg1(mrb); mrb_int a, b; - a = mrb_fixnum(x); - if (mrb_fixnum_p(y) && a != MRB_INT_MIN && (b=mrb_fixnum(y)) != MRB_INT_MIN) { + a = mrb_integer(x); + if (mrb_integer_p(y) && a != MRB_INT_MIN && (b=mrb_integer(y)) != MRB_INT_MIN) { mrb_int mod; if (b == 0) { @@ -960,13 +981,13 @@ int_divmod(mrb_state *mrb, mrb_value x) { mrb_value y = mrb_get_arg1(mrb); - if (mrb_fixnum_p(y)) { + if (mrb_integer_p(y)) { mrb_int div, mod; - if (mrb_fixnum(y) == 0) { + if (mrb_integer(y) == 0) { mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0"); } - fixdivmod(mrb, mrb_fixnum(x), mrb_fixnum(y), &div, &mod); + fixdivmod(mrb, mrb_integer(x), mrb_integer(y), &div, &mod); return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod)); } #ifdef MRB_NO_FLOAT @@ -976,8 +997,8 @@ int_divmod(mrb_state *mrb, mrb_value x) mrb_float div, mod; mrb_value a, b; - flodivmod(mrb, (mrb_float)mrb_fixnum(x), mrb_to_flo(mrb, y), &div, &mod); - a = mrb_int_value(mrb, div); + flodivmod(mrb, (mrb_float)mrb_integer(x), mrb_to_flo(mrb, y), &div, &mod); + a = mrb_int_value(mrb, (mrb_int)div); b = mrb_float_value(mrb, mod); return mrb_assoc_new(mrb, a, b); } @@ -993,7 +1014,7 @@ flo_divmod(mrb_state *mrb, mrb_value x) mrb_value a, b; flodivmod(mrb, mrb_float(x), mrb_to_flo(mrb, y), &div, &mod); - a = mrb_int_value(mrb, div); + a = mrb_int_value(mrb, (mrb_int)div); b = mrb_float_value(mrb, mod); return mrb_assoc_new(mrb, a, b); } @@ -1018,10 +1039,10 @@ int_equal(mrb_state *mrb, mrb_value x) switch (mrb_type(y)) { case MRB_TT_INTEGER: - return mrb_bool_value(mrb_fixnum(x) == mrb_fixnum(y)); + return mrb_bool_value(mrb_integer(x) == mrb_integer(y)); #ifndef MRB_NO_FLOAT case MRB_TT_FLOAT: - return mrb_bool_value((mrb_float)mrb_fixnum(x) == mrb_float(y)); + return mrb_bool_value((mrb_float)mrb_integer(x) == mrb_float(y)); #endif default: return mrb_false_value(); @@ -1042,22 +1063,22 @@ int_equal(mrb_state *mrb, mrb_value x) static mrb_value int_rev(mrb_state *mrb, mrb_value num) { - mrb_int val = mrb_fixnum(num); + mrb_int val = mrb_integer(num); return mrb_fixnum_value(~val); } #ifdef MRB_NO_FLOAT #define bit_op(x,y,op1,op2) do {\ - return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\ + return mrb_fixnum_value(mrb_integer(x) op2 mrb_integer(y));\ } while(0) #else static mrb_value flo_and(mrb_state *mrb, mrb_value x); static mrb_value flo_or(mrb_state *mrb, mrb_value x); static mrb_value flo_xor(mrb_state *mrb, mrb_value x); #define bit_op(x,y,op1,op2) do {\ - if (mrb_fixnum_p(y)) return mrb_fixnum_value(mrb_fixnum(x) op2 mrb_fixnum(y));\ - return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_fixnum(x)));\ + if (mrb_integer_p(y)) return mrb_int_value(mrb, (mrb_integer(x) op2 mrb_integer(y))); \ + return flo_ ## op1(mrb, mrb_float_value(mrb, (mrb_float)mrb_integer(x)));\ } while(0) #endif @@ -1188,7 +1209,7 @@ int_lshift(mrb_state *mrb, mrb_value x) if (width == 0) { return x; } - val = mrb_fixnum(x); + val = mrb_integer(x); if (val == 0) return x; if (width < 0) { return rshift(val, -width); @@ -1213,7 +1234,7 @@ int_rshift(mrb_state *mrb, mrb_value x) if (width == 0) { return x; } - val = mrb_fixnum(x); + val = mrb_integer(x); if (val == 0) return x; if (width < 0) { return lshift(mrb, val, -width); @@ -1234,7 +1255,7 @@ int_rshift(mrb_state *mrb, mrb_value x) static mrb_value int_to_f(mrb_state *mrb, mrb_value num) { - return mrb_float_value(mrb, (mrb_float)mrb_fixnum(num)); + return mrb_float_value(mrb, (mrb_float)mrb_integer(num)); } /* @@ -1280,12 +1301,12 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y) { mrb_int a; - a = mrb_fixnum(x); - if (mrb_fixnum_p(y)) { + a = mrb_integer(x); + if (mrb_integer_p(y)) { mrb_int b, c; if (a == 0) return y; - b = mrb_fixnum(y); + b = mrb_integer(y); if (mrb_int_add_overflow(a, b, &c)) { #ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b); @@ -1303,7 +1324,7 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y) MRB_API mrb_value mrb_num_plus(mrb_state *mrb, mrb_value x, mrb_value y) { - if (mrb_fixnum_p(x)) { + if (mrb_integer_p(x)) { return fixnum_plus(mrb, x, y); } #ifndef MRB_NO_FLOAT @@ -1337,11 +1358,11 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y) { mrb_int a; - a = mrb_fixnum(x); - if (mrb_fixnum_p(y)) { + a = mrb_integer(x); + if (mrb_integer_p(y)) { mrb_int b, c; - b = mrb_fixnum(y); + b = mrb_integer(y); if (mrb_int_sub_overflow(a, b, &c)) { #ifndef MRB_NO_FLOAT return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b); @@ -1359,7 +1380,7 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y) MRB_API mrb_value mrb_num_minus(mrb_state *mrb, mrb_value x, mrb_value y) { - if (mrb_fixnum_p(x)) { + if (mrb_integer_p(x)) { return fixnum_minus(mrb, x, y); } #ifndef MRB_NO_FLOAT @@ -1395,7 +1416,7 @@ mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, mrb_int base) { char buf[MRB_INT_BIT+1]; char *b = buf + sizeof buf; - mrb_int val = mrb_fixnum(x); + mrb_int val = mrb_integer(x); mrb_value str; if (base < 2 || 36 < base) { @@ -1458,16 +1479,16 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2) #endif #ifdef MRB_NO_FLOAT - x = mrb_fixnum(v1); + x = mrb_integer(v1); #else x = mrb_to_flo(mrb, v1); #endif switch (mrb_type(v2)) { case MRB_TT_INTEGER: #ifdef MRB_NO_FLOAT - y = mrb_fixnum(v2); + y = mrb_integer(v2); #else - y = (mrb_float)mrb_fixnum(v2); + y = (mrb_float)mrb_integer(v2); #endif break; #ifndef MRB_NO_FLOAT @@ -1500,7 +1521,7 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2) * not comparable, it returns nil instead of raising an exception. */ static mrb_value -integral_cmp(mrb_state *mrb, mrb_value self) +num_cmp(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); mrb_int n; @@ -1517,7 +1538,7 @@ cmperr(mrb_state *mrb, mrb_value v1, mrb_value v2) } static mrb_value -integral_lt(mrb_state *mrb, mrb_value self) +num_lt(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); mrb_int n; @@ -1529,7 +1550,7 @@ integral_lt(mrb_state *mrb, mrb_value self) } static mrb_value -integral_le(mrb_state *mrb, mrb_value self) +num_le(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); mrb_int n; @@ -1541,7 +1562,7 @@ integral_le(mrb_state *mrb, mrb_value self) } static mrb_value -integral_gt(mrb_state *mrb, mrb_value self) +num_gt(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); mrb_int n; @@ -1553,7 +1574,7 @@ integral_gt(mrb_state *mrb, mrb_value self) } static mrb_value -integral_ge(mrb_state *mrb, mrb_value self) +num_ge(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); mrb_int n; @@ -1579,9 +1600,9 @@ mrb_cmp(mrb_state *mrb, mrb_value obj1, mrb_value obj2) return mrb_str_cmp(mrb, obj1, obj2); default: v = mrb_funcall_id(mrb, obj1, MRB_SYM(cmp), 1, obj2); - if (mrb_nil_p(v) || !mrb_fixnum_p(v)) + if (mrb_nil_p(v) || !mrb_integer_p(v)) return -2; - return mrb_fixnum(v); + return mrb_integer(v); } } @@ -1619,23 +1640,11 @@ flo_plus(mrb_state *mrb, mrb_value x) void mrb_init_numeric(mrb_state *mrb) { - struct RClass *numeric, *integer, *integral; + struct RClass *numeric, *integer; #ifndef MRB_NO_FLOAT struct RClass *fl; #endif - integral = mrb_define_module(mrb, "Integral"); - mrb_define_method(mrb, integral,"**", integral_pow, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, integral,"/", integral_div, MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.6 */ - mrb_define_method(mrb, integral,"quo", integral_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */ - mrb_define_method(mrb, integral,"div", integral_idiv, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, integral,"<=>", integral_cmp, MRB_ARGS_REQ(1)); /* 15.2.{8,9}.3.1 */ - mrb_define_method(mrb, integral,"<", integral_lt, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, integral,"<=", integral_le, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, integral,">", integral_gt, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, integral,">=", integral_ge, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, integral,"__coerce_step_counter", integral_coerce_step_counter, MRB_ARGS_REQ(2)); - /* Numeric Class */ numeric = mrb_define_class(mrb, "Numeric", mrb->object_class); /* 15.2.7 */ mrb_define_method(mrb, numeric, "finite?", num_finite_p, MRB_ARGS_NONE()); @@ -1645,13 +1654,23 @@ mrb_init_numeric(mrb_state *mrb) mrb->integer_class = integer = mrb_define_class(mrb, "Integer", numeric); /* 15.2.8 */ MRB_SET_INSTANCE_TT(integer, MRB_TT_INTEGER); mrb_undef_class_method(mrb, integer, "new"); + mrb_define_method(mrb, integer, "**", int_pow, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, integer, "/", int_div, MRB_ARGS_REQ(1)); /* 15.2.8.3.6 */ + mrb_define_method(mrb, integer, "quo", int_quo, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */ + mrb_define_method(mrb, integer, "div", int_div, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, integer, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */ + mrb_define_method(mrb, integer, "<", num_lt, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, integer, "<=", num_le, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, integer, ">", num_gt, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, integer, ">=", num_ge, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, integer, "to_i", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.24 */ mrb_define_method(mrb, integer, "to_int", int_to_i, MRB_ARGS_NONE()); #ifndef MRB_NO_FLOAT - mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.8 (x) */ - mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.10 (x) */ - mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.12 (x) */ - mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.15 (x) */ + mrb_define_method(mrb, integer, "ceil", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.14 */ + mrb_define_method(mrb, integer, "floor", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.17 */ + mrb_define_method(mrb, integer, "round", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.20 */ + mrb_define_method(mrb, integer, "truncate", int_to_i, MRB_ARGS_NONE()); /* 15.2.8.3.26 */ #endif mrb_define_method(mrb, integer, "+", int_plus, MRB_ARGS_REQ(1)); /* 15.2.8.3.1 */ @@ -1672,6 +1691,7 @@ mrb_init_numeric(mrb_state *mrb) mrb_define_method(mrb, integer, "to_s", int_to_s, MRB_ARGS_OPT(1)); /* 15.2.8.3.25 */ mrb_define_method(mrb, integer, "inspect", int_to_s, MRB_ARGS_OPT(1)); mrb_define_method(mrb, integer, "divmod", int_divmod, MRB_ARGS_REQ(1)); /* 15.2.8.3.30 (x) */ + mrb_define_method(mrb, integer, "__coerce_step_counter", coerce_step_counter, MRB_ARGS_REQ(2)); /* Fixnum Class for compatibility */ mrb_define_const(mrb, mrb->object_class, "Fixnum", mrb_obj_value(integer)); @@ -1681,11 +1701,20 @@ mrb_init_numeric(mrb_state *mrb) mrb->float_class = fl = mrb_define_class(mrb, "Float", numeric); /* 15.2.9 */ MRB_SET_INSTANCE_TT(fl, MRB_TT_FLOAT); mrb_undef_class_method(mrb, fl, "new"); - mrb_define_method(mrb, fl, "+", flo_plus, MRB_ARGS_REQ(1)); /* 15.2.9.3.1 */ - mrb_define_method(mrb, fl, "-", flo_minus, MRB_ARGS_REQ(1)); /* 15.2.9.3.2 */ - mrb_define_method(mrb, fl, "*", flo_mul, MRB_ARGS_REQ(1)); /* 15.2.9.3.3 */ - mrb_define_method(mrb, fl, "%", flo_mod, MRB_ARGS_REQ(1)); /* 15.2.9.3.5 */ - mrb_define_method(mrb, fl, "==", flo_eq, MRB_ARGS_REQ(1)); /* 15.2.9.3.7 */ + mrb_define_method(mrb, fl, "**", flo_pow, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, fl, "/", flo_div, MRB_ARGS_REQ(1)); /* 15.2.9.3.6 */ + mrb_define_method(mrb, fl, "quo", flo_div, MRB_ARGS_REQ(1)); /* 15.2.7.4.5 (x) */ + mrb_define_method(mrb, fl, "div", flo_idiv, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, fl, "+", flo_plus, MRB_ARGS_REQ(1)); /* 15.2.9.3.3 */ + mrb_define_method(mrb, fl, "-", flo_minus, MRB_ARGS_REQ(1)); /* 15.2.9.3.4 */ + mrb_define_method(mrb, fl, "*", flo_mul, MRB_ARGS_REQ(1)); /* 15.2.9.3.5 */ + mrb_define_method(mrb, fl, "%", flo_mod, MRB_ARGS_REQ(1)); /* 15.2.9.3.7 */ + mrb_define_method(mrb, fl, "<=>", num_cmp, MRB_ARGS_REQ(1)); /* 15.2.9.3.1 */ + mrb_define_method(mrb, fl, "<", num_lt, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, fl, "<=", num_le, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, fl, ">", num_gt, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, fl, ">=", num_ge, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, fl, "==", flo_eq, MRB_ARGS_REQ(1)); /* 15.2.9.3.2 */ mrb_define_method(mrb, fl, "~", flo_rev, MRB_ARGS_NONE()); mrb_define_method(mrb, fl, "&", flo_and, MRB_ARGS_REQ(1)); mrb_define_method(mrb, fl, "|", flo_or, MRB_ARGS_REQ(1)); @@ -1714,7 +1743,5 @@ mrb_init_numeric(mrb_state *mrb) #ifdef NAN mrb_define_const_id(mrb, fl, MRB_SYM(NAN), mrb_float_value(mrb, NAN)); #endif - - mrb_include_module(mrb, fl, integral); #endif } diff --git a/src/object.c b/src/object.c index a6357a6a8..95bd1c737 100644 --- a/src/object.c +++ b/src/object.c @@ -20,7 +20,7 @@ mrb_obj_eq(mrb_state *mrb, mrb_value v1, mrb_value v2) case MRB_TT_FALSE: case MRB_TT_INTEGER: - return (mrb_fixnum(v1) == mrb_fixnum(v2)); + return (mrb_integer(v1) == mrb_integer(v2)); case MRB_TT_SYMBOL: return (mrb_symbol(v1) == mrb_symbol(v2)); @@ -49,12 +49,12 @@ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2) if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE; #ifndef MRB_NO_FLOAT /* value mixing with integer and float */ - if (mrb_fixnum_p(obj1)) { - if (mrb_float_p(obj2) && (mrb_float)mrb_fixnum(obj1) == mrb_float(obj2)) + if (mrb_integer_p(obj1)) { + if (mrb_float_p(obj2) && (mrb_float)mrb_integer(obj1) == mrb_float(obj2)) return TRUE; } else if (mrb_float_p(obj1)) { - if (mrb_fixnum_p(obj2) && mrb_float(obj1) == (mrb_float)mrb_fixnum(obj2)) + if (mrb_integer_p(obj2) && mrb_float(obj1) == (mrb_float)mrb_integer(obj2)) return TRUE; } #endif @@ -407,7 +407,7 @@ mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t) if (mrb_nil_p(x)) { ename = "nil"; } - else if (mrb_fixnum_p(x)) { + else if (mrb_integer_p(x)) { ename = "Fixnum"; } else if (mrb_symbol_p(x)) { @@ -509,7 +509,7 @@ MRB_API mrb_value mrb_to_int(mrb_state *mrb, mrb_value val) { - if (!mrb_fixnum_p(val)) { + if (!mrb_integer_p(val)) { #ifndef MRB_NO_FLOAT if (mrb_float_p(val)) { return mrb_flo_to_fixnum(mrb, val); @@ -575,7 +575,7 @@ mrb_Float(mrb_state *mrb, mrb_value val) } switch (mrb_type(val)) { case MRB_TT_INTEGER: - return mrb_float_value(mrb, (mrb_float)mrb_fixnum(val)); + return mrb_float_value(mrb, (mrb_float)mrb_integer(val)); case MRB_TT_FLOAT: return val; diff --git a/src/range.c b/src/range.c index 0a76c9939..c06a8a00b 100644 --- a/src/range.c +++ b/src/range.c @@ -328,8 +328,8 @@ mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, con result = mrb_ary_new(mrb); for (i = 0; i < argc; ++i) { - if (mrb_fixnum_p(argv[i])) { - mrb_ary_push(mrb, result, func(mrb, obj, mrb_fixnum(argv[i]))); + if (mrb_integer_p(argv[i])) { + mrb_ary_push(mrb, result, func(mrb, obj, mrb_integer(argv[i]))); } else if (mrb_range_beg_len(mrb, argv[i], &beg, &len, olen, FALSE) == MRB_RANGE_OK) { mrb_int const end = olen < beg + len ? olen : beg + len; diff --git a/src/string.c b/src/string.c index e88ba2be5..a8072f7a7 100644 --- a/src/string.c +++ b/src/string.c @@ -1155,7 +1155,7 @@ str_convert_range(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen, else { switch (mrb_type(indx)) { case MRB_TT_INTEGER: - *beg = mrb_fixnum(indx); + *beg = mrb_integer(indx); *len = 1; return STR_CHAR_RANGE; @@ -1170,8 +1170,8 @@ str_convert_range(mrb_state *mrb, mrb_value str, mrb_value indx, mrb_value alen, default: indx = mrb_to_int(mrb, indx); - if (mrb_fixnum_p(indx)) { - *beg = mrb_fixnum(indx); + if (mrb_integer_p(indx)) { + *beg = mrb_integer(indx); *len = 1; return STR_CHAR_RANGE; } @@ -2498,8 +2498,8 @@ mrb_str_len_to_dbl(mrb_state *mrb, const char *s, size_t len, mrb_bool badcheck) if (!badcheck) return 0.0; x = mrb_str_len_to_inum(mrb, p, pend-p, 0, badcheck); - if (mrb_fixnum_p(x)) - d = (double)mrb_fixnum(x); + if (mrb_integer_p(x)) + d = (double)mrb_integer(x); else /* if (mrb_float_p(x)) */ d = mrb_float(x); return d; @@ -2874,7 +2874,7 @@ mrb_str_byteslice(mrb_state *mrb, mrb_value str) } } else { - beg = mrb_fixnum(mrb_to_int(mrb, a1)); + beg = mrb_integer(mrb_to_int(mrb, a1)); len = 1; empty = FALSE; } diff --git a/src/vm.c b/src/vm.c index 15a38c0e4..540ba7681 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1115,12 +1115,12 @@ RETRY_TRY_BLOCK: } CASE(OP_LOADI, BB) { - SET_INT_VALUE(regs[a], b); + SET_FIXNUM_VALUE(regs[a], b); NEXT; } CASE(OP_LOADINEG, BB) { - SET_INT_VALUE(regs[a], -b); + SET_FIXNUM_VALUE(regs[a], -b); NEXT; } @@ -1134,12 +1134,12 @@ RETRY_TRY_BLOCK: CASE(OP_LOADI_6,B) goto L_LOADI; CASE(OP_LOADI_7, B) { L_LOADI: - SET_INT_VALUE(regs[a], (mrb_int)insn - (mrb_int)OP_LOADI_0); + SET_FIXNUM_VALUE(regs[a], (mrb_int)insn - (mrb_int)OP_LOADI_0); NEXT; } CASE(OP_LOADI16, BS) { - SET_INT_VALUE(regs[a], (mrb_int)(int16_t)b); + SET_FIXNUM_VALUE(regs[a], (mrb_int)(int16_t)b); NEXT; } @@ -1302,8 +1302,8 @@ RETRY_TRY_BLOCK: CHECKPOINT_RESTORE(RBREAK_TAG_JUMP) { struct RBreak *brk = (struct RBreak*)mrb->exc; mrb_value target = mrb_break_value_get(brk); - mrb_assert(mrb_fixnum_p(target)); - a = mrb_fixnum(target); + mrb_assert(mrb_integer_p(target)); + a = mrb_integer(target); mrb_assert(a >= 0 && a < irep->ilen); } CHECKPOINT_MAIN(RBREAK_TAG_JUMP) { @@ -2251,23 +2251,23 @@ RETRY_TRY_BLOCK: OP_MATH_CASE_STRING_##op_name(); \ default: \ c = 1; \ - mid = MRB_QSYM(op_name); \ + mid = MRB_QSYM(op_name); \ goto L_SEND_SYM; \ } \ NEXT; #define OP_MATH_CASE_FIXNUM(op_name) \ - case TYPES2(MRB_TT_INTEGER, MRB_TT_INTEGER): \ + case TYPES2(MRB_TT_INTEGER, MRB_TT_INTEGER): \ { \ - mrb_int x = mrb_fixnum(regs[a]), y = mrb_fixnum(regs[a+1]), z; \ + mrb_int x = mrb_integer(regs[a]), y = mrb_integer(regs[a+1]), z; \ if (mrb_int_##op_name##_overflow(x, y, &z)) \ OP_MATH_OVERFLOW_INT(op_name, x, y, z); \ else \ - SET_INT_VALUE(regs[a], z); \ + SET_INT_VALUE(mrb,regs[a], z); \ } \ break #ifdef MRB_NO_FLOAT #define OP_MATH_CASE_FLOAT(op_name, t1, t2) (void)0 -#define OP_MATH_OVERFLOW_INT(op_name, x, y, z) SET_INT_VALUE(regs[a], z) +#define OP_MATH_OVERFLOW_INT(op_name, x, y, z) SET_INT_VALUE(mrb,regs[a], z) #else #define OP_MATH_CASE_FLOAT(op_name, t1, t2) \ case TYPES2(OP_MATH_TT_##t1, OP_MATH_TT_##t2): \ @@ -2313,8 +2313,8 @@ RETRY_TRY_BLOCK: switch (TYPES2(mrb_type(regs[a]),mrb_type(regs[a+1]))) { case TYPES2(MRB_TT_INTEGER,MRB_TT_INTEGER): { - mrb_int x = mrb_fixnum(regs[a]); - mrb_int y = mrb_fixnum(regs[a+1]); + mrb_int x = mrb_integer(regs[a]); + mrb_int y = mrb_integer(regs[a+1]); if (y == 0) { @@ -2341,18 +2341,18 @@ RETRY_TRY_BLOCK: if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) { div -= 1; } - SET_INT_VALUE(regs[a], div); + SET_INT_VALUE(mrb, regs[a], div); } } NEXT; #ifndef MRB_NO_FLOAT case TYPES2(MRB_TT_INTEGER,MRB_TT_FLOAT): - x = (mrb_float)mrb_fixnum(regs[a]); + x = (mrb_float)mrb_integer(regs[a]); y = mrb_float(regs[a+1]); break; case TYPES2(MRB_TT_FLOAT,MRB_TT_INTEGER): x = mrb_float(regs[a]); - y = (mrb_float)mrb_fixnum(regs[a+1]); + y = (mrb_float)mrb_integer(regs[a+1]); break; case TYPES2(MRB_TT_FLOAT,MRB_TT_FLOAT): x = mrb_float(regs[a]); @@ -2385,7 +2385,7 @@ RETRY_TRY_BLOCK: OP_MATHI_CASE_FIXNUM(op_name); \ OP_MATHI_CASE_FLOAT(op_name); \ default: \ - SET_INT_VALUE(regs[a+1], b); \ + SET_INT_VALUE(mrb,regs[a+1], b); \ c = 1; \ mid = MRB_QSYM(op_name); \ goto L_SEND_SYM; \ @@ -2394,11 +2394,11 @@ RETRY_TRY_BLOCK: #define OP_MATHI_CASE_FIXNUM(op_name) \ case MRB_TT_INTEGER: \ { \ - mrb_int x = mrb_fixnum(regs[a]), y = (mrb_int)b, z; \ + mrb_int x = mrb_integer(regs[a]), y = (mrb_int)b, z; \ if (mrb_int_##op_name##_overflow(x, y, &z)) \ OP_MATH_OVERFLOW_INT(op_name, x, y, z); \ else \ - SET_INT_VALUE(regs[a], z); \ + SET_INT_VALUE(mrb,regs[a], z); \ } \ break #ifdef MRB_NO_FLOAT diff --git a/target/boxing.rb b/target/boxing.rb index 509c0d4b6..e3bf3425b 100644 --- a/target/boxing.rb +++ b/target/boxing.rb @@ -1,14 +1,10 @@ -MRuby::Build.new do |conf| - toolchain :gcc -end - -MRuby::Build.new('no_boxing') do |conf| +MRuby::Build.new('no-boxing') do |conf| toolchain :gcc + conf.gembox 'default' conf.compilers.each do |c| c.defines += %w(MRB_NO_BOXING) end - conf.gembox 'default' conf.enable_test end @@ -22,13 +18,13 @@ MRuby::Build.new('word_boxing') do |conf| conf.enable_test end -MRuby::Build.new('nan_boxing') do |conf| - toolchain :gcc +# MRuby::Build.new('nan_boxing') do |conf| +# toolchain :gcc - conf.gembox 'default' - conf.compilers.each do |c| - c.defines += %w(MRB_NAN_BOXING) - end - conf.enable_test -end +# conf.gembox 'default' +# conf.compilers.each do |c| +# c.defines += %w(MRB_NAN_BOXING) +# end +# conf.enable_test +# end diff --git a/test/t/array.rb b/test/t/array.rb index eec31d751..2982cab01 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -372,8 +372,7 @@ end assert('Array#hash', '15.2.12.5.35') do a = [ 1, 2, 3 ] - #assert_true(a.hash.is_a? Integer) - assert_true(a.hash.is_a? Integral) # mruby special + assert_true(a.hash.is_a? Integer) assert_equal([1,2].hash, [1,2].hash) end diff --git a/test/t/integer.rb b/test/t/integer.rb index 620ec94d3..5204eb91b 100644 --- a/test/t/integer.rb +++ b/test/t/integer.rb @@ -14,16 +14,6 @@ assert('Integer#+', '15.2.8.3.1') do assert_raise(TypeError){ 0+nil } assert_raise(TypeError){ 1+nil } - - c = Mrbtest::FIXNUM_MAX + 1 - d = Mrbtest::FIXNUM_MAX.__send__(:+, 1) - - skip unless Object.const_defined?(:Float) - e = Mrbtest::FIXNUM_MAX + 1.0 - assert_equal Float, c.class - assert_equal Float, d.class - assert_float e, c - assert_float e, d end assert('Integer#-', '15.2.8.3.2') do @@ -32,37 +22,17 @@ assert('Integer#-', '15.2.8.3.2') do assert_equal 1, a assert_equal 1.0, b if Object.const_defined?(:Float) - - c = Mrbtest::FIXNUM_MIN - 1 - d = Mrbtest::FIXNUM_MIN.__send__(:-, 1) - - skip unless Object.const_defined?(:Float) - e = Mrbtest::FIXNUM_MIN - 1.0 - assert_equal Float, c.class - assert_equal Float, d.class - assert_float e, c - assert_float e, d end assert('Integer#*', '15.2.8.3.3') do a = 1*1 - b = 1*1.0 if Object.const_defined?(:Float) - assert_equal 1, a - assert_equal 1.0, b if Object.const_defined?(:Float) - + if Object.const_defined?(:Float) + b = 1*1.0 + assert_equal 1.0, b + end assert_raise(TypeError){ 0*nil } assert_raise(TypeError){ 1*nil } - - c = Mrbtest::FIXNUM_MAX * 2 - d = Mrbtest::FIXNUM_MAX.__send__(:*, 2) - - skip unless Object.const_defined?(:Float) - e = Mrbtest::FIXNUM_MAX * 2.0 - assert_equal Float, c.class - assert_equal Float, d.class - assert_float e, c - assert_float e, d end assert('Integer#/', '15.2.8.3.4') do -- cgit v1.2.3 From 5134031e189e1cdde198e1c09f7b1d22bf2a1ce0 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 27 Aug 2020 09:42:26 +0900 Subject: Use `mrb_int_value()` instead of `mrb_fixnum_value()`. Where fixnum overflow can happen. --- mrbgems/mruby-compiler/core/codegen.c | 4 ++-- mrbgems/mruby-io/src/file.c | 2 +- mrbgems/mruby-io/src/file_test.c | 4 ++-- mrbgems/mruby-random/src/random.c | 6 +++--- mrbgems/mruby-rational/src/rational.c | 6 +++--- mrbgems/mruby-socket/src/socket.c | 4 ++-- mrbgems/mruby-sprintf/src/sprintf.c | 4 ++-- mrbgems/mruby-test/driver.c | 2 +- mrbgems/mruby-time/src/time.c | 6 +++--- src/enum.c | 2 +- src/kernel.c | 4 ++-- src/numeric.c | 26 +++++++++++++------------- src/proc.c | 2 +- src/vm.c | 6 +++--- 14 files changed, 39 insertions(+), 39 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 2e39817ec..eb37cd701 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2465,7 +2465,7 @@ codegen(codegen_scope *s, node *tree, int val) int off; lit_int: - off = new_lit(s, mrb_fixnum_value(i)); + off = new_lit(s, mrb_int_value(s->mrb, i)); genop_2(s, OP_LOADL, cursp(), off); } } @@ -2528,7 +2528,7 @@ codegen(codegen_scope *s, node *tree, int val) genop_2S(s, OP_LOADI16, cursp(), (uint16_t)i); } else { - int off = new_lit(s, mrb_fixnum_value(i)); + int off = new_lit(s, mrb_int_value(s->mrb, i)); genop_2(s, OP_LOADL, cursp(), off); } #ifndef MRB_NO_FLOAT diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index a28360d81..d272cab7d 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -399,7 +399,7 @@ mrb_file_mtime(mrb_state *mrb, mrb_value self) if (mrb_fstat(fd, &st) == -1) return mrb_false_value(); - return mrb_fixnum_value((mrb_int)st.st_mtime); + return mrb_int_value(mrb, (mrb_int)st.st_mtime); } static mrb_value diff --git a/mrbgems/mruby-io/src/file_test.c b/mrbgems/mruby-io/src/file_test.c index 50402a681..f1762369a 100644 --- a/mrbgems/mruby-io/src/file_test.c +++ b/mrbgems/mruby-io/src/file_test.c @@ -304,7 +304,7 @@ mrb_filetest_s_size(mrb_state *mrb, mrb_value klass) if (mrb_stat(mrb, obj, &st) < 0) mrb_sys_fail(mrb, "mrb_stat"); - return mrb_fixnum_value(st.st_size); + return mrb_int_value(mrb, st.st_size); } /* @@ -326,7 +326,7 @@ mrb_filetest_s_size_p(mrb_state *mrb, mrb_value klass) if (st.st_size == 0) return mrb_nil_value(); - return mrb_fixnum_value(st.st_size); + return mrb_int_value(mrb, st.st_size); } void diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 37b100084..0a5df6bd0 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -131,7 +131,7 @@ random_rand(mrb_state *mrb, rand_state *t, mrb_value max) #endif } else { - value = mrb_fixnum_value(rand_uint32(t) % mrb_integer(max)); + value = mrb_int_value(mrb, rand_uint32(t) % mrb_integer(max)); } return value; @@ -224,7 +224,7 @@ random_m_srand(mrb_state *mrb, mrb_value self) } old_seed = rand_seed(t, seed); - return mrb_fixnum_value((mrb_int)old_seed); + return mrb_int_value(mrb, (mrb_int)old_seed); } /* @@ -378,7 +378,7 @@ mrb_ary_sample(mrb_state *mrb, mrb_value ary) } break; } - mrb_ary_push(mrb, result, mrb_fixnum_value(r)); + mrb_ary_push(mrb, result, mrb_int_value(mrb, r)); } for (i=0; inumerator); + return mrb_int_value(mrb, p->numerator); } static mrb_value rational_denominator(mrb_state *mrb, mrb_value self) { struct mrb_rational *p = rational_ptr(mrb, self); - return mrb_fixnum_value(p->denominator); + return mrb_int_value(mrb, p->denominator); } static mrb_value @@ -154,7 +154,7 @@ rational_to_i(mrb_state *mrb, mrb_value self) if (p->denominator == 0) { mrb_raise(mrb, mrb->eStandardError_class, "divided by 0"); } - return mrb_fixnum_value(p->numerator / p->denominator); + return mrb_int_value(mrb, p->numerator / p->denominator); } static mrb_value diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c index d94573c96..0afbca521 100644 --- a/mrbgems/mruby-socket/src/socket.c +++ b/mrbgems/mruby-socket/src/socket.c @@ -842,7 +842,7 @@ mrb_win32_basicsocket_syswrite(mrb_state *mrb, mrb_value self) n = send(sd, RSTRING_PTR(str), (int)RSTRING_LEN(str), 0); if (n == SOCKET_ERROR) mrb_sys_fail(mrb, "send"); - return mrb_fixnum_value(n); + return mrb_int_value(mrb, n); } #endif @@ -938,7 +938,7 @@ mrb_mruby_socket_gem_init(mrb_state* mrb) #define define_const(SYM) \ do { \ - mrb_define_const(mrb, constants, #SYM, mrb_fixnum_value(SYM)); \ + mrb_define_const(mrb, constants, #SYM, mrb_int_value(mrb, SYM)); \ } while (0) #include "const.cstub" diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 9ac8a512d..189b54b5c 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -938,10 +938,10 @@ retry: s = nbuf; if (v < 0) { dots = 1; - val = mrb_fix2binstr(mrb, mrb_fixnum_value(v), base); + val = mrb_fix2binstr(mrb, mrb_int_value(mrb, v), base); } else { - val = mrb_fixnum_to_str(mrb, mrb_fixnum_value(v), base); + val = mrb_fixnum_to_str(mrb, mrb_int_value(mrb, v), base); } strncpy(++s, RSTRING_PTR(val), sizeof(nbuf)-2); if (v < 0) { diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index b22888ec5..3bd52e175 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -254,7 +254,7 @@ mrb_t_pass_result(mrb_state *mrb_dst, mrb_state *mrb_src) res_src = mrb_gv_get(mrb_src, mrb_intern_lit(mrb_src, "$" #name)); \ if (mrb_integer_p(res_src)) { \ mrb_value res_dst = mrb_gv_get(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name)); \ - mrb_gv_set(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name), mrb_fixnum_value(mrb_integer(res_dst) + mrb_integer(res_src))); \ + mrb_gv_set(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name), mrb_int_value(mrb_dst, mrb_integer(res_dst) + mrb_integer(res_src))); \ } \ } while (FALSE) \ diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 2af86b14e..f0347f54f 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -205,7 +205,7 @@ typedef mrb_float mrb_sec; #define mrb_sec_value(mrb, sec) mrb_float_value(mrb, sec) #else typedef mrb_int mrb_sec; -#define mrb_sec_value(mrb, sec) mrb_fixnum_value(sec) +#define mrb_sec_value(mrb, sec) mrb_int_value(mrb, sec) #endif #define MRB_TIME_T_UINT (~(time_t)0 > 0) @@ -585,7 +585,7 @@ mrb_time_minus(mrb_state *mrb, mrb_value self) mrb_int f; f = tm->sec - tm2->sec; if (tm->usec < tm2->usec) f--; - return mrb_fixnum_value(f); + return mrb_int_value(mrb, f); #endif } else { @@ -873,7 +873,7 @@ mrb_time_to_i(mrb_state *mrb, mrb_value self) return mrb_float_value(mrb, (mrb_float)tm->sec); } #endif - return mrb_fixnum_value((mrb_int)tm->sec); + return mrb_int_value(mrb, (mrb_int)tm->sec); } /* 15.2.19.7.26 */ diff --git a/src/enum.c b/src/enum.c index d31370188..b95956715 100644 --- a/src/enum.c +++ b/src/enum.c @@ -18,7 +18,7 @@ enum_update_hash(mrb_state *mrb, mrb_value self) mrb_get_args(mrb, "iii", &hash, &index, &hv); hash ^= ((uint32_t)hv << (index % 16)); - return mrb_fixnum_value(hash); + return mrb_int_value(mrb, hash); } void diff --git a/src/kernel.c b/src/kernel.c index 699c681d7..a23eeea4e 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -96,7 +96,7 @@ mrb_equal_m(mrb_state *mrb, mrb_value self) mrb_value mrb_obj_id_m(mrb_state *mrb, mrb_value self) { - return mrb_fixnum_value(mrb_obj_id(self)); + return mrb_int_value(mrb, mrb_obj_id(self)); } static int @@ -489,7 +489,7 @@ mrb_obj_frozen(mrb_state *mrb, mrb_value self) static mrb_value mrb_obj_hash(mrb_state *mrb, mrb_value self) { - return mrb_fixnum_value(mrb_obj_id(self)); + return mrb_int_value(mrb, mrb_obj_id(self)); } /* 15.3.1.3.16 */ diff --git a/src/numeric.c b/src/numeric.c index 8fb144fae..a5fb87940 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -131,7 +131,7 @@ int_div(mrb_state *mrb, mrb_value xv) if (y == 0) { mrb_raise(mrb, E_ZERODIV_ERROR, "devided by zero"); } - return mrb_fixnum_value(mrb_integer(xv) / y); + return mrb_int_value(mrb, mrb_integer(xv) / y); } } @@ -988,7 +988,7 @@ int_divmod(mrb_state *mrb, mrb_value x) mrb_raise(mrb, E_ZERODIV_ERROR, "divided by 0"); } fixdivmod(mrb, mrb_integer(x), mrb_integer(y), &div, &mod); - return mrb_assoc_new(mrb, mrb_fixnum_value(div), mrb_fixnum_value(mod)); + return mrb_assoc_new(mrb, mrb_int_value(mrb, div), mrb_int_value(mrb, mod)); } #ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); @@ -1065,12 +1065,12 @@ int_rev(mrb_state *mrb, mrb_value num) { mrb_int val = mrb_integer(num); - return mrb_fixnum_value(~val); + return mrb_int_value(mrb, ~val); } #ifdef MRB_NO_FLOAT #define bit_op(x,y,op1,op2) do {\ - return mrb_fixnum_value(mrb_integer(x) op2 mrb_integer(y));\ + return mrb_int_value(mrb, (mrb_integer(x) op2 mrb_integer(y)));\ } while(0) #else static mrb_value flo_and(mrb_state *mrb, mrb_value x); @@ -1151,7 +1151,7 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width) goto bit_overflow; #endif } - return mrb_fixnum_value(val << width); + return mrb_int_value(mrb, val << width); } else { if ((width > NUMERIC_SHIFT_WIDTH_MAX) || @@ -1162,7 +1162,7 @@ lshift(mrb_state *mrb, mrb_int val, mrb_int width) goto bit_overflow; #endif } - return mrb_fixnum_value(val * ((mrb_int)1 << width)); + return mrb_int_value(mrb, (val * ((mrb_int)1 << width))); } #ifndef MRB_NO_FLOAT @@ -1178,7 +1178,7 @@ bit_overflow: } static mrb_value -rshift(mrb_int val, mrb_int width) +rshift(mrb_state *mrb, mrb_int val, mrb_int width) { if (width < 0) { /* mrb_int overflow */ return mrb_fixnum_value(0); @@ -1189,7 +1189,7 @@ rshift(mrb_int val, mrb_int width) } return mrb_fixnum_value(0); } - return mrb_fixnum_value(val >> width); + return mrb_int_value(mrb, val >> width); } /* 15.2.8.3.12 */ @@ -1212,7 +1212,7 @@ int_lshift(mrb_state *mrb, mrb_value x) val = mrb_integer(x); if (val == 0) return x; if (width < 0) { - return rshift(val, -width); + return rshift(mrb, val, -width); } return lshift(mrb, val, width); } @@ -1239,7 +1239,7 @@ int_rshift(mrb_state *mrb, mrb_value x) if (width < 0) { return lshift(mrb, val, -width); } - return rshift(val, width); + return rshift(mrb, val, width); } /* 15.2.8.3.23 */ @@ -1292,7 +1292,7 @@ mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x) mrb_raisef(mrb, E_RANGE_ERROR, "number (%v) too big for integer", x); } } - return mrb_fixnum_value(z); + return mrb_int_value(mrb, z); } #endif @@ -1312,7 +1312,7 @@ fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y) return mrb_float_value(mrb, (mrb_float)a + (mrb_float)b); #endif } - return mrb_fixnum_value(c); + return mrb_int_value(mrb, c); } #ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); @@ -1368,7 +1368,7 @@ fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y) return mrb_float_value(mrb, (mrb_float)a - (mrb_float)b); #endif } - return mrb_fixnum_value(c); + return mrb_int_value(mrb, c); } #ifdef MRB_NO_FLOAT mrb_raise(mrb, E_TYPE_ERROR, "non fixnum value"); diff --git a/src/proc.c b/src/proc.c index de463df3e..d94044f72 100644 --- a/src/proc.c +++ b/src/proc.c @@ -242,7 +242,7 @@ mrb_proc_init_copy(mrb_state *mrb, mrb_value self) static mrb_value proc_arity(mrb_state *mrb, mrb_value self) { - return mrb_fixnum_value(mrb_proc_arity(mrb_proc_ptr(self))); + return mrb_int_value(mrb, mrb_proc_arity(mrb_proc_ptr(self))); } /* 15.3.1.2.6 */ diff --git a/src/vm.c b/src/vm.c index 540ba7681..52895bd28 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1082,16 +1082,16 @@ RETRY_TRY_BLOCK: CASE(OP_LOADL, BB) { switch (pool[b].tt) { /* number */ case IREP_TT_INT32: - regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i32); + regs[a] = mrb_int_value(mrb, (mrb_int)pool[b].u.i32); break; case IREP_TT_INT64: #if defined(MRB_INT64) - regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i64); + regs[a] = mrb_int_value(mrb, (mrb_int)pool[b].u.i64); break; #else #if defined(MRB_64BIT) if (INT32_MIN <= pool[b].u.i64 && pool[b].u.i64 <= INT32_MAX) { - regs[a] = mrb_fixnum_value((mrb_int)pool[b].u.i64); + regs[a] = mrb_int_value(mrb, (mrb_int)pool[b].u.i64); break; } #endif -- cgit v1.2.3 From 7e3d22f09569b920c8e3dd31d7a0d03e925a06cc Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 27 Aug 2020 10:23:50 +0900 Subject: Raname `mrb_exc_new_str_lit()` to `mrb_exc_new_lit()`. It uses `mrb_str_new_lit()` internally, but it doesn't need to express it in the name of the function (macro). --- include/mruby/error.h | 3 ++- mrbgems/mruby-compiler/core/parse.y | 4 ++-- mrbgems/mruby-compiler/core/y.tab.c | 4 ++-- src/error.c | 6 +++--- src/load.c | 2 +- src/vm.c | 18 +++++++++--------- 6 files changed, 19 insertions(+), 18 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby/error.h b/include/mruby/error.h index b607dd957..9ad115f4b 100644 --- a/include/mruby/error.h +++ b/include/mruby/error.h @@ -23,7 +23,8 @@ struct RException { MRB_API void mrb_sys_fail(mrb_state *mrb, const char *mesg); MRB_API mrb_value mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str); -#define mrb_exc_new_str_lit(mrb, c, lit) mrb_exc_new_str(mrb, c, mrb_str_new_lit(mrb, lit)) +#define mrb_exc_new_lit(mrb, c, lit) mrb_exc_new_str(mrb, c, mrb_str_new_lit(mrb, lit)) +#define mrb_exc_new_str_lit(mrb, c, lit) mrb_exc_new_str_lit(mrb, c, lit) MRB_API mrb_value mrb_make_exception(mrb_state *mrb, mrb_int argc, const mrb_value *argv); MRB_API mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value exc); MRB_API mrb_value mrb_get_backtrace(mrb_state *mrb); diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index b2bf8263f..fe54afbbe 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -6575,7 +6575,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) } else { if (mrb->exc == NULL) { - mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SYNTAX_ERROR, "syntax error")); + mrb->exc = mrb_obj_ptr(mrb_exc_new_lit(mrb, E_SYNTAX_ERROR, "syntax error")); } mrb_parser_free(p); return mrb_undef_value(); @@ -6585,7 +6585,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) mrb_parser_free(p); if (proc == NULL) { if (mrb->exc == NULL) { - mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "codegen error")); + mrb->exc = mrb_obj_ptr(mrb_exc_new_lit(mrb, E_SCRIPT_ERROR, "codegen error")); } return mrb_undef_value(); } diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 28a06472f..18b102018 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -12467,7 +12467,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) } else { if (mrb->exc == NULL) { - mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SYNTAX_ERROR, "syntax error")); + mrb->exc = mrb_obj_ptr(mrb_exc_new_lit(mrb, E_SYNTAX_ERROR, "syntax error")); } mrb_parser_free(p); return mrb_undef_value(); @@ -12477,7 +12477,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) mrb_parser_free(p); if (proc == NULL) { if (mrb->exc == NULL) { - mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "codegen error")); + mrb->exc = mrb_obj_ptr(mrb_exc_new_lit(mrb, E_SCRIPT_ERROR, "codegen error")); } return mrb_undef_value(); } diff --git a/src/error.c b/src/error.c index b6a82f867..b19f0ea43 100644 --- a/src/error.c +++ b/src/error.c @@ -622,11 +622,11 @@ mrb_init_exception(mrb_state *mrb) script_error = mrb_define_class(mrb, "ScriptError", mrb->eException_class); /* 15.2.37 */ mrb_define_class(mrb, "SyntaxError", script_error); /* 15.2.38 */ stack_error = mrb_define_class(mrb, "SystemStackError", exception); - mrb->stack_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, stack_error, "stack level too deep")); + mrb->stack_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, stack_error, "stack level too deep")); nomem_error = mrb_define_class(mrb, "NoMemoryError", exception); - mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, nomem_error, "Out of memory")); + mrb->nomem_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "Out of memory")); #ifdef MRB_GC_FIXED_ARENA - mrb->arena_err = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, nomem_error, "arena overflow error")); + mrb->arena_err = mrb_obj_ptr(mrb_exc_new_lit(mrb, nomem_error, "arena overflow error")); #endif } diff --git a/src/load.c b/src/load.c index b06b9ff37..2cc0f7557 100644 --- a/src/load.c +++ b/src/load.c @@ -625,7 +625,7 @@ void mrb_exc_set(mrb_state *mrb, mrb_value exc); static void irep_error(mrb_state *mrb) { - mrb_exc_set(mrb, mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "irep load error")); + mrb_exc_set(mrb, mrb_exc_new_lit(mrb, E_SCRIPT_ERROR, "irep load error")); } void mrb_codedump_all(mrb_state*, struct RProc*); diff --git a/src/vm.c b/src/vm.c index 52895bd28..7c14b40dd 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1016,7 +1016,7 @@ static mrb_bool check_target_class(mrb_state *mrb) { if (!mrb->c->ci->target_class) { - mrb_value exc = mrb_exc_new_str_lit(mrb, E_TYPE_ERROR, "no target class or module"); + mrb_value exc = mrb_exc_new_lit(mrb, E_TYPE_ERROR, "no target class or module"); mrb_exc_set(mrb, exc); return FALSE; } @@ -1096,7 +1096,7 @@ RETRY_TRY_BLOCK: } #endif { - mrb_value exc = mrb_exc_new_str_lit(mrb, E_RUNTIME_ERROR, "integer overflow"); + mrb_value exc = mrb_exc_new_lit(mrb, E_RUNTIME_ERROR, "integer overflow"); mrb_exc_set(mrb, exc); } goto L_RAISE; @@ -1357,7 +1357,7 @@ RETRY_TRY_BLOCK: { mrb_value exc; - exc = mrb_exc_new_str_lit(mrb, E_TYPE_ERROR, + exc = mrb_exc_new_lit(mrb, E_TYPE_ERROR, "class or module required for rescue clause"); mrb_exc_set(mrb, exc); goto L_RAISE; @@ -1585,21 +1585,21 @@ RETRY_TRY_BLOCK: mrb_assert(bidx < irep->nregs); if (mid == 0 || !target_class) { - mrb_value exc = mrb_exc_new_str_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method"); + mrb_value exc = mrb_exc_new_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method"); mrb_exc_set(mrb, exc); goto L_RAISE; } if (target_class->tt == MRB_TT_MODULE) { target_class = ci->target_class; if (target_class->tt != MRB_TT_ICLASS) { - mrb_value exc = mrb_exc_new_str_lit(mrb, E_RUNTIME_ERROR, "superclass info lost [mruby limitations]"); + mrb_value exc = mrb_exc_new_lit(mrb, E_RUNTIME_ERROR, "superclass info lost [mruby limitations]"); mrb_exc_set(mrb, exc); goto L_RAISE; } } recv = regs[0]; if (!mrb_obj_is_kind_of(mrb, recv, target_class)) { - mrb_value exc = mrb_exc_new_str_lit(mrb, E_TYPE_ERROR, + mrb_value exc = mrb_exc_new_lit(mrb, E_TYPE_ERROR, "self has wrong type to call super in this context"); mrb_exc_set(mrb, exc); goto L_RAISE; @@ -1700,7 +1700,7 @@ RETRY_TRY_BLOCK: mrb_value exc; L_NOSUPER: - exc = mrb_exc_new_str_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method"); + exc = mrb_exc_new_lit(mrb, E_NOMETHOD_ERROR, "super called outside of method"); mrb_exc_set(mrb, exc); goto L_RAISE; } @@ -2066,7 +2066,7 @@ RETRY_TRY_BLOCK: goto CHECKPOINT_LABEL_MAKE(RBREAK_TAG_STOP); } if (c->prev->ci == c->prev->cibase) { - mrb_value exc = mrb_exc_new_str_lit(mrb, E_FIBER_ERROR, "double resume"); + mrb_value exc = mrb_exc_new_lit(mrb, E_FIBER_ERROR, "double resume"); mrb_exc_set(mrb, exc); goto L_RAISE; } @@ -2099,7 +2099,7 @@ RETRY_TRY_BLOCK: mrb_value exc; L_BREAK_ERROR: - exc = mrb_exc_new_str_lit(mrb, E_LOCALJUMP_ERROR, + exc = mrb_exc_new_lit(mrb, E_LOCALJUMP_ERROR, "break from proc-closure"); mrb_exc_set(mrb, exc); goto L_RAISE; -- cgit v1.2.3 From f9e781d83a5f50c70a238cbb2f06878c30490146 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 3 Sep 2020 22:51:11 +0900 Subject: Avoid `unsigned int`; Use `mrb_int` instead. --- include/mruby.h | 4 ++-- mrbgems/mruby-compiler/core/parse.y | 2 +- mrbgems/mruby-compiler/core/y.tab.c | 2 +- src/vm.c | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) (limited to 'mrbgems/mruby-compiler/core') diff --git a/include/mruby.h b/include/mruby.h index 45f91b640..5d862f37f 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1195,8 +1195,8 @@ MRB_API void mrb_close(mrb_state *mrb); MRB_API void* mrb_default_allocf(mrb_state*, void*, size_t, void*); MRB_API mrb_value mrb_top_self(mrb_state *mrb); -MRB_API mrb_value mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep); -MRB_API mrb_value mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep); +MRB_API mrb_value mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep); +MRB_API mrb_value mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep); MRB_API mrb_value mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *iseq); /* compatibility macros */ #define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k)) diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index fe54afbbe..3cd74971f 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -6555,7 +6555,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) struct RClass *target = mrb->object_class; struct RProc *proc; mrb_value v; - unsigned int keep = 0; + mrb_int keep = 0; if (!p) { return mrb_undef_value(); diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 18b102018..b28509d81 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -12447,7 +12447,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) struct RClass *target = mrb->object_class; struct RProc *proc; mrb_value v; - unsigned int keep = 0; + mrb_int keep = 0; if (!p) { return mrb_undef_value(); diff --git a/src/vm.c b/src/vm.c index c627fd5dc..331627caa 100644 --- a/src/vm.c +++ b/src/vm.c @@ -982,13 +982,13 @@ prepare_tagged_break(mrb_state *mrb, uint32_t tag, const struct RProc *proc, mrb #endif MRB_API mrb_value -mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned mrb_int stack_keep) +mrb_vm_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep) { const mrb_irep *irep = proc->body.irep; mrb_value result; struct mrb_context *c = mrb->c; ptrdiff_t cioff = c->ci - c->cibase; - unsigned mrb_int nregs = irep->nregs; + mrb_int nregs = irep->nregs; if (!c->stack) { stack_init(mrb); @@ -2851,7 +2851,7 @@ mrb_run(mrb_state *mrb, const struct RProc *proc, mrb_value self) } MRB_API mrb_value -mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, unsigned int stack_keep) +mrb_top_run(mrb_state *mrb, const struct RProc *proc, mrb_value self, mrb_int stack_keep) { mrb_value v; -- cgit v1.2.3