diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 08b7675ed..6151b65ba 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -4700,7 +4700,7 @@ static void gen_super_var(codegen_scope *s, node *varnode, int val) { struct mrb_ast_super_node *super_n = super_node(varnode); - node *tree = SUPER_NODE_ARGS(super_n); + node *tree = super_n->args; codegen_scope *s2 = s; int lv = 0; diff --git a/mrbgems/mruby-compiler/core/node.h b/mrbgems/mruby-compiler/core/node.h index 9b51d92b4..d36e68393 100644 --- a/mrbgems/mruby-compiler/core/node.h +++ b/mrbgems/mruby-compiler/core/node.h @@ -433,7 +433,12 @@ struct mrb_ast_super_node { #define DEF_NODE_NAME(n) (def_node(n)->name) #define DEF_NODE_ARGS(n) (def_node(n)->args) #define DEF_NODE_BODY(n) (def_node(n)->body) - +#define DEF_NODE_LOCALS(n) (def_node(n)->locals) +#define SDEF_NODE_NAME(n) (sdef_node(n)->name) +#define SDEF_NODE_ARGS(n) (sdef_node(n)->args) +#define SDEF_NODE_BODY(n) (sdef_node(n)->body) +#define SDEF_NODE_LOCALS(n) (sdef_node(n)->locals) +#define SDEF_NODE_OBJ(n) (sdef_node(n)->body) #define CLASS_NODE_NAME(n) (class_node(n)->name) #define CLASS_NODE_SUPERCLASS(n) (class_node(n)->superclass) #define CLASS_NODE_BODY(n) (class_node(n)->body) @@ -463,9 +468,7 @@ struct mrb_ast_super_node { #define OR_NODE_RIGHT(n) (or_node(n)->right) #define RETURN_NODE_ARGS(n) (return_node(n)->args) - #define YIELD_NODE_ARGS(n) (yield_node(n)->args) - #define SUPER_NODE_ARGS(n) (super_node(n)->args) /* Variable-sized literal node structures */ diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 4e3c579f3..6d8355824 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -359,9 +359,18 @@ get_node_type(node *n) { if (!n) return (enum node_type)0; - /* Try to interpret as variable-sized node first */ + /* Try to interpret as variable-sized node */ struct mrb_ast_var_header *header = (struct mrb_ast_var_header*)n; - return (enum node_type)header->node_type; + enum node_type type = (enum node_type)header->node_type; + + /* Validate that the node type is within valid range for variable-sized nodes */ + if (type >= NODE_SCOPE && type < NODE_LAST) { + return type; + } + + /* If node type is invalid, this is likely a cons-list node */ + /* Return a special sentinel value to indicate cons-list fallback */ + return NODE_LAST; /* Use NODE_LAST as sentinel for cons-list nodes */ } static void @@ -4723,7 +4732,7 @@ void_expr_error(parser_state *p, node *n) /* Check if this is a variable-sized node first */ struct mrb_ast_var_header *header = (struct mrb_ast_var_header*)n; - if (header && header->node_type >= NODE_SCOPE && header->node_type <= NODE_NEGATE) { + if (header) { /* Handle variable-sized nodes */ switch ((enum node_type)header->node_type) { case NODE_BREAK: @@ -7496,48 +7505,179 @@ dump_recur(mrb_state *mrb, node *tree, int offset) } static void -dump_args(mrb_state *mrb, node *n, int offset) +dump_locals(mrb_state *mrb, node *tree, int offset) { - if (n->car) { - dump_prefix(n, offset+1); - printf("mandatory args:\n"); - dump_recur(mrb, n->car, offset+2); + if (!tree || (!tree->car && !tree->cdr)) return; + + dump_prefix(tree, offset); + printf("locals:\n"); + dump_prefix(tree, offset+1); + while (tree) { + if (tree->car) { + mrb_sym sym = node_to_sym(tree->car); + if (sym != 0) { + const char *name = mrb_sym_name(mrb, sym); + if (name && strlen(name) > 0 && name[0] != '!' && name[0] != '@' && name[0] != '$') { + printf(" %s", mrb_sym_dump(mrb, sym)); + } + else { + printf(" (invalid symbol: %s)", name ? name : "(null)"); + } + } + else { + printf(" (anonymous)"); + } + } + tree = tree->cdr; } - n = n->cdr; - if (n->car) { - dump_prefix(n, offset+1); + printf("\n"); +} + +static void +dump_cpath(mrb_state *mrb, node *tree, int offset) +{ + dump_prefix(tree, offset); + printf("cpath: "); + if (!tree) { + printf("(null)\n"); + } + else if (node_to_int(tree->car) == 0) { + printf("(null)\n"); + } + else if (node_to_int(tree->car) == 1) { + printf("Object\n"); + } + else { + printf("\n"); + mrb_parser_dump(mrb, tree->car, offset+1); + } + dump_prefix(tree, offset); + printf("name: %s\n", mrb_sym_dump(mrb, node_to_sym(tree->cdr))); +} + +static void +dump_str(mrb_state *mrb, node *n, int offset) +{ + while (n) { + dump_prefix(n, offset); + int len = node_to_int(n->car->car); + if (len >= 0) { + printf("str: \"%.*s\"\n", len, (char*)n->car->cdr); + } + else { + printf("interpolation:\n"); + mrb_parser_dump(mrb, n->car->cdr, offset+1); + } + n = n->cdr; + } +} + +static void +dump_args(mrb_state *mrb, struct mrb_ast_args *args, int offset) +{ + if (args->mandatory_args) { + dump_prefix(args->mandatory_args, offset+1); + printf("mandatory args:\n"); + dump_recur(mrb, args->mandatory_args, offset+2); + } + if (args->optional_args) { + dump_prefix(args->optional_args, offset+1); printf("optional args:\n"); { - node *n2 = n->car; - - while (n2) { - dump_prefix(n2, offset+2); - printf("%s=\n", mrb_sym_name(mrb, node_to_sym(n2->car->car))); - mrb_parser_dump(mrb, n2->car->cdr, offset+3); - n2 = n2->cdr; + node *n = args->optional_args; + while (n) { + dump_prefix(n, offset+2); + printf("%s=\n", mrb_sym_name(mrb, node_to_sym(n->car->car))); + mrb_parser_dump(mrb, n->car->cdr, offset+3); + n = n->cdr; } } } - n = n->cdr; - if (n->car) { - mrb_sym rest = node_to_sym(n->car); + if (args->rest_arg) { + mrb_sym rest = args->rest_arg; - dump_prefix(n, offset+1); + dump_prefix((node*)args, offset+1); if (rest == MRB_OPSYM(mul)) printf("rest=*\n"); else printf("rest=*%s\n", mrb_sym_name(mrb, rest)); } - n = n->cdr; - if (n->car) { - dump_prefix(n, offset+1); + if (args->post_mandatory_args) { + dump_prefix(args->post_mandatory_args, offset+1); printf("post mandatory args:\n"); - dump_recur(mrb, n->car, offset+2); + dump_recur(mrb, args->post_mandatory_args, offset+2); } + if (args->keyword_args) { + dump_prefix(args->keyword_args, offset+1); + printf("keyword args:\n"); + { + node *n = args->keyword_args; + while (n) { + dump_prefix(n, offset+2); + printf("%s:\n", mrb_sym_name(mrb, node_to_sym(n->car->car))); + mrb_parser_dump(mrb, n->car->cdr, offset+3); + n = n->cdr; + } + } + dump_prefix(args->post_mandatory_args, offset+1); + printf("post mandatory args:\n"); + dump_recur(mrb, args->post_mandatory_args, offset+2); + } + if (args->kwrest_arg) { + mrb_sym rest = args->kwrest_arg; - n = n->cdr; - if (n) { - mrb_parser_dump(mrb, n, offset); + dump_prefix((node*)args, offset+1); + if (rest == MRB_OPSYM(pow)) + printf("kwrest=**\n"); + else + printf("kwrest=**%s\n", mrb_sym_name(mrb, rest)); + } + if (args->block_arg) { + mrb_sym blk = args->block_arg; + + dump_prefix((node*)args, offset+1); + if (blk == MRB_OPSYM(and)) + printf("blk=&\n"); + else + printf("blk=&%s\n", mrb_sym_name(mrb, blk)); + } +} + +static void +dump_callargs(mrb_state *mrb, node *n, int offset) +{ + if (!n) return; + + struct mrb_ast_callargs *args = (struct mrb_ast_callargs*)n; + if (args->regular_args) { + dump_prefix(n, offset+1); + printf("args:\n"); + dump_recur(mrb, args->regular_args, offset+2); + } + if (args->keyword_args) { + dump_prefix(n, offset+1); + printf("kw_args:\n"); + node *kw = args->keyword_args; + while (kw) { + dump_prefix(n, offset+2); + printf("key:\n"); + if (node_to_sym(kw->car->car) == MRB_OPSYM(pow)) { + dump_prefix(n, offset+3); + printf("**:\n"); + } + else { + mrb_parser_dump(mrb, kw->car->car, offset+3); + } + dump_prefix(n, offset+2); + printf("value:\n"); + mrb_parser_dump(mrb, kw->car->cdr, offset+3); + kw = kw->cdr; + } + } + if (args->block_arg) { + dump_prefix(n, offset+1); + printf("block:\n"); + mrb_parser_dump(mrb, args->block_arg, offset+2); } } @@ -7572,36 +7712,263 @@ void mrb_parser_dump(mrb_state *mrb, node *tree, int offset) { #ifndef MRB_NO_STDIO - int nodetype; + enum node_type nodetype; if (!tree) return; - again: dump_prefix(tree, offset); - nodetype = node_to_int(tree->car); - tree = tree->cdr; + + /* All nodes are now variable-sized nodes with headers */ + nodetype = get_node_type(tree); + switch (nodetype) { + /* Variable-sized node cases */ + case NODE_SCOPE: + printf("NODE_SCOPE:\n"); + { + struct mrb_ast_scope_node *scope = (struct mrb_ast_scope_node*)tree; + if (scope->locals) { + dump_locals(mrb, scope->locals, offset+1); + } + if (scope->body) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, scope->body, offset+2); + } + } + break; + + case NODE_INT: + printf("NODE_INT: %d\n", INT_NODE_VALUE(tree)); + break; + + case NODE_BIGINT: + printf("NODE_BIGINT: %s (base %d)\n", BIGINT_NODE_STRING(tree), BIGINT_NODE_BASE(tree)); + break; + + case NODE_FLOAT: + printf("NODE_FLOAT: %s\n", FLOAT_NODE_VALUE(tree)); + break; + + case NODE_STR: + printf("NODE_STR:\n"); + dump_str(mrb, STR_NODE_LIST(tree), offset+1); + break; + + case NODE_XSTR: + printf("NODE_XSTR:\n"); + dump_str(mrb, XSTR_NODE_LIST(tree), offset+1); + break; + + case NODE_SYM: + printf("NODE_SYM: %s\n", mrb_sym_dump(mrb, SYM_NODE_VALUE(tree))); + break; + + case NODE_DSYM: + printf("NODE_DSYM:\n"); + dump_str(mrb, dsym_node(tree)->list, offset+1); + break; + + case NODE_LVAR: + printf("NODE_LVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_GVAR: + printf("NODE_GVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_IVAR: + printf("NODE_IVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_CVAR: + printf("NODE_CVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_CONST: + printf("NODE_CONST: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_CALL: + printf("NODE_CALL: %s\n", mrb_sym_dump(mrb, CALL_NODE_METHOD(tree))); + if (CALL_NODE_RECEIVER(tree)) { + dump_prefix(tree, offset+1); + printf("receiver:\n"); + mrb_parser_dump(mrb, CALL_NODE_RECEIVER(tree), offset+2); + } + if (CALL_NODE_ARGS(tree)) { + dump_callargs(mrb, CALL_NODE_ARGS(tree), offset); + } + break; + + case NODE_ARRAY: + printf("NODE_ARRAY:\n"); + if (ARRAY_NODE_ELEMENTS(tree)) { + dump_recur(mrb, ARRAY_NODE_ELEMENTS(tree), offset+1); + } + break; + + case NODE_CALLARGS: + printf("NODE_CALLARGS:\n"); + if (CALLARGS_NODE_REGULAR(tree)) { + dump_prefix(tree, offset+1); + printf("regular_args:\n"); + dump_recur(mrb, CALLARGS_NODE_REGULAR(tree), offset+2); + } + if (CALLARGS_NODE_KEYWORDS(tree)) { + dump_prefix(tree, offset+1); + printf("keyword_args:\n"); + mrb_parser_dump(mrb, CALLARGS_NODE_KEYWORDS(tree), offset+2); + } + if (CALLARGS_NODE_BLOCK(tree)) { + dump_prefix(tree, offset+1); + printf("block_arg:\n"); + mrb_parser_dump(mrb, CALLARGS_NODE_BLOCK(tree), offset+2); + } + break; + + case NODE_TRUE: + printf("NODE_TRUE\n"); + break; + + case NODE_FALSE: + printf("NODE_FALSE\n"); + break; + + case NODE_NIL: + printf("NODE_NIL\n"); + break; + + case NODE_SELF: + printf("NODE_SELF\n"); + break; + + case NODE_IF: + printf("NODE_IF:\n"); + if (IF_NODE_CONDITION(tree)) { + dump_prefix(tree, offset+1); + printf("cond:\n"); + mrb_parser_dump(mrb, IF_NODE_CONDITION(tree), offset+2); + } + if (IF_NODE_THEN(tree)) { + dump_prefix(tree, offset+1); + printf("then:\n"); + mrb_parser_dump(mrb, IF_NODE_THEN(tree), offset+2); + } + if (IF_NODE_ELSE(tree)) { + dump_prefix(tree, offset+1); + printf("else:\n"); + mrb_parser_dump(mrb, IF_NODE_ELSE(tree), offset+2); + } + break; + + case NODE_DEF: + printf("NODE_DEF: %s\n", mrb_sym_dump(mrb, DEF_NODE_NAME(tree))); + if (DEF_NODE_ARGS(tree)) { + dump_args(mrb, SDEF_NODE_ARGS(tree), offset+1); + } + if (DEF_NODE_LOCALS(tree)) { + dump_locals(mrb, DEF_NODE_LOCALS(tree), offset+1); + } + if (DEF_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, DEF_NODE_BODY(tree), offset+2); + } + break; + + case NODE_ASGN: + printf("NODE_ASGN:\n"); + if (ASGN_NODE_LHS(tree)) { + dump_prefix(tree, offset+1); + printf("lhs:\n"); + mrb_parser_dump(mrb, ASGN_NODE_LHS(tree), offset+2); + } + if (ASGN_NODE_RHS(tree)) { + dump_prefix(tree, offset+1); + printf("rhs:\n"); + mrb_parser_dump(mrb, ASGN_NODE_RHS(tree), offset+2); + } + break; + + case NODE_MASGN: + printf("NODE_MASGN:\n"); + if (MASGN_NODE_LHS(tree)) { + dump_prefix(tree, offset+1); + node *lhs = MASGN_NODE_LHS(tree); + if (lhs) { + printf("lhs:\n"); + dump_recur(mrb, lhs->car, offset+2); + if (lhs->cdr) { + dump_recur(mrb, lhs->cdr->car, offset+2); + if (lhs->cdr->cdr) dump_recur(mrb, lhs->cdr->cdr->car, offset+2); + } + } + } + if (MASGN_NODE_RHS(tree)) { + dump_prefix(tree, offset+1); + printf("rhs:\n"); + mrb_parser_dump(mrb, MASGN_NODE_RHS(tree), offset+2); + } + break; + + case NODE_RETURN: + printf("NODE_RETURN:\n"); + if (RETURN_NODE_ARGS(tree)) { + mrb_parser_dump(mrb, RETURN_NODE_ARGS(tree), offset); + } + break; + + case NODE_BREAK: + printf("NODE_BREAK:\n"); + if (BREAK_NODE_VALUE(tree)) { + dump_prefix(tree, offset+1); + printf("value:\n"); + mrb_parser_dump(mrb, BREAK_NODE_VALUE(tree), offset+2); + } + break; + + case NODE_NEXT: + printf("NODE_NEXT:\n"); + if (NEXT_NODE_VALUE(tree)) { + dump_prefix(tree, offset+1); + printf("value:\n"); + mrb_parser_dump(mrb, NEXT_NODE_VALUE(tree), offset+2); + } + break; + + case NODE_NEGATE: + printf("NODE_NEGATE:\n"); + if (NEGATE_NODE_OPERAND(tree)) { + dump_prefix(tree, offset+1); + printf("operand:\n"); + mrb_parser_dump(mrb, NEGATE_NODE_OPERAND(tree), offset+2); + } + break; + case NODE_STMTS: printf("NODE_STMTS:\n"); - dump_recur(mrb, tree, offset+1); + if (STMTS_NODE_STMTS(tree)) { + dump_recur(mrb, STMTS_NODE_STMTS(tree), offset+1); + } break; case NODE_BEGIN: printf("NODE_BEGIN:\n"); - mrb_parser_dump(mrb, tree, offset+1); + if (BEGIN_NODE_BODY(tree)) { + mrb_parser_dump(mrb, BEGIN_NODE_BODY(tree), offset+1); + } break; case NODE_RESCUE: printf("NODE_RESCUE:\n"); - if (tree->car) { + if (RESCUE_NODE_BODY(tree)) { dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, RESCUE_NODE_BODY(tree), offset+2); } - tree = tree->cdr; - if (tree->car) { - node *n2 = tree->car; - - dump_prefix(n2, offset+1); + if (RESCUE_NODE_RESCUE_CLAUSES(tree)) { + node *n2 = RESCUE_NODE_RESCUE_CLAUSES(tree); + dump_prefix(tree, offset+1); printf("rescue:\n"); while (n2) { node *n3 = n2->car; @@ -7623,11 +7990,10 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) n2 = n2->cdr; } } - tree = tree->cdr; - if (tree->car) { + if (RESCUE_NODE_ELSE_CLAUSE(tree)) { dump_prefix(tree, offset+1); printf("else:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, RESCUE_NODE_ELSE_CLAUSE(tree), offset+2); } break; @@ -7643,46 +8009,32 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_LAMBDA: printf("NODE_LAMBDA:\n"); - dump_prefix(tree, offset+1); goto block; case NODE_BLOCK: - block: printf("NODE_BLOCK:\n"); - tree = tree->cdr; - if (tree->car) { - dump_args(mrb, tree->car, offset+1); + block: + if (BLOCK_NODE_LOCALS(tree)) { + dump_locals(mrb, BLOCK_NODE_LOCALS(tree), offset+1); + } + if (BLOCK_NODE_ARGS(tree)) { + dump_args(mrb, BLOCK_NODE_ARGS(tree), offset+1); } dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - break; - - case NODE_IF: - printf("NODE_IF:\n"); - dump_prefix(tree, offset+1); - printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - dump_prefix(tree, offset+1); - printf("then:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - if (tree->cdr->cdr->car) { - dump_prefix(tree, offset+1); - printf("else:\n"); - mrb_parser_dump(mrb, tree->cdr->cdr->car, offset+2); - } + mrb_parser_dump(mrb, BLOCK_NODE_BODY(tree), offset+2); break; case NODE_AND: printf("NODE_AND:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + mrb_parser_dump(mrb, AND_NODE_LEFT(tree), offset+1); + mrb_parser_dump(mrb, AND_NODE_RIGHT(tree), offset+1); break; case NODE_OR: printf("NODE_OR:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + mrb_parser_dump(mrb, OR_NODE_LEFT(tree), offset+1); + mrb_parser_dump(mrb, OR_NODE_RIGHT(tree), offset+1); break; case NODE_CASE: @@ -7706,285 +8058,158 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) printf("NODE_WHILE:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_BODY(tree), offset+2); break; case NODE_UNTIL: printf("NODE_UNTIL:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_BODY(tree), offset+2); break; case NODE_WHILE_MOD: printf("NODE_WHILE_MOD:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_BODY(tree), offset+2); break; case NODE_UNTIL_MOD: printf("NODE_UNTIL_MOD:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_BODY(tree), offset+2); break; case NODE_FOR: printf("NODE_FOR:\n"); - dump_prefix(tree, offset+1); - printf("var:\n"); { - node *n2 = tree->car; - - if (n2->car) { - dump_prefix(n2, offset+2); - printf("pre:\n"); - dump_recur(mrb, n2->car, offset+3); + if (FOR_NODE_VAR(tree)) { + dump_prefix(tree, offset+1); + printf("var:\n"); + mrb_parser_dump(mrb, FOR_NODE_VAR(tree), offset+2); } - n2 = n2->cdr; - if (n2) { - if (n2->car) { - dump_prefix(n2, offset+2); - printf("rest:\n"); - mrb_parser_dump(mrb, n2->car, offset+3); - } - n2 = n2->cdr; - if (n2) { - if (n2->car) { - dump_prefix(n2, offset+2); - printf("post:\n"); - dump_recur(mrb, n2->car, offset+3); - } - } + if (FOR_NODE_ITERABLE(tree)) { + dump_prefix(tree, offset+1); + printf("iterable:\n"); + mrb_parser_dump(mrb, FOR_NODE_ITERABLE(tree), offset+2); } - } - tree = tree->cdr; - dump_prefix(tree, offset+1); - printf("in:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - tree = tree->cdr; - dump_prefix(tree, offset+1); - printf("do:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - break; - - case NODE_SCOPE: - printf("NODE_SCOPE:\n"); - { - node *n2 = tree->car; - mrb_bool first_lval = TRUE; - - if (n2 && (n2->car || n2->cdr)) { - dump_prefix(n2, offset+1); - printf("local variables:\n"); - dump_prefix(n2, offset+2); - while (n2) { - if (n2->car) { - if (!first_lval) printf(", "); - printf("%s", mrb_sym_name(mrb, node_to_sym(n2->car))); - first_lval = FALSE; - } - n2 = n2->cdr; - } - printf("\n"); - } - } - tree = tree->cdr; - offset++; - goto again; - - case NODE_CALL: - printf("NODE_CALL(.):\n"); break; - mrb_parser_dump(mrb, tree->car, offset+1); - dump_prefix(tree, offset+1); - printf("method='%s' (%d)\n", - mrb_sym_dump(mrb, node_to_sym(tree->cdr->car)), - node_to_int(tree->cdr->car)); - tree = tree->cdr->cdr->car; - if (tree) { - dump_prefix(tree, offset+1); - printf("args:\n"); - dump_recur(mrb, tree->car, offset+2); - if (tree->cdr) { - if (tree->cdr->car) { - dump_prefix(tree, offset+1); - printf("kwargs:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - } - if (tree->cdr->cdr) { - dump_prefix(tree, offset+1); - printf("block:\n"); - mrb_parser_dump(mrb, tree->cdr->cdr, offset+2); - } + if (FOR_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, FOR_NODE_BODY(tree), offset+2); } } break; case NODE_DOT2: printf("NODE_DOT2:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + { + if (DOT2_NODE_LEFT(tree)) { + dump_prefix(tree, offset+1); + printf("left:\n"); + mrb_parser_dump(mrb, DOT2_NODE_LEFT(tree), offset+2); + } + if (DOT2_NODE_RIGHT(tree)) { + dump_prefix(tree, offset+1); + printf("right:\n"); + mrb_parser_dump(mrb, DOT2_NODE_RIGHT(tree), offset+2); + } + } break; case NODE_DOT3: printf("NODE_DOT3:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + { + if (DOT3_NODE_LEFT(tree)) { + dump_prefix(tree, offset+1); + printf("left:\n"); + mrb_parser_dump(mrb, DOT3_NODE_LEFT(tree), offset+2); + } + if (DOT3_NODE_RIGHT(tree)) { + dump_prefix(tree, offset+1); + printf("right:\n"); + mrb_parser_dump(mrb, DOT3_NODE_RIGHT(tree), offset+2); + } + } break; case NODE_COLON2: printf("NODE_COLON2:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); + if (COLON2_NODE_BASE(tree)) { + dump_prefix(tree, offset+1); + printf("base:\n"); + mrb_parser_dump(mrb, COLON2_NODE_BASE(tree), offset+2); + } dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->cdr))); + printf("name: %s\n", mrb_sym_name(mrb, COLON2_NODE_NAME(tree))); break; case NODE_COLON3: - printf("NODE_COLON3: ::%s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_ARRAY: - printf("NODE_ARRAY:\n"); - dump_recur(mrb, tree, offset+1); + printf("NODE_COLON3: ::%s\n", mrb_sym_name(mrb, COLON3_NODE_NAME(tree))); break; case NODE_HASH: - printf("NODE_HASH:\n"); - while (tree) { - dump_prefix(tree, offset+1); - printf("key:\n"); - mrb_parser_dump(mrb, tree->car->car, offset+2); - dump_prefix(tree, offset+1); - printf("value:\n"); - mrb_parser_dump(mrb, tree->car->cdr, offset+2); - tree = tree->cdr; + { + printf("NODE_HASH:\n"); + node *pairs = HASH_NODE_PAIRS(tree); + while (pairs) { + dump_prefix(tree, offset+1); + printf("key:\n"); + mrb_parser_dump(mrb, pairs->car->car, offset+2); + dump_prefix(tree, offset+1); + printf("value:\n"); + mrb_parser_dump(mrb, pairs->car->cdr, offset+2); + pairs = pairs->cdr; + } } break; case NODE_SPLAT: printf("NODE_SPLAT:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_ASGN: - printf("NODE_ASGN:\n"); - dump_prefix(tree, offset+1); - printf("lhs:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - dump_prefix(tree, offset+1); - printf("rhs:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); - break; - - case NODE_MASGN: - printf("NODE_MASGN:\n"); - dump_prefix(tree, offset+1); - printf("mlhs:\n"); - { - node *n2 = tree->car; - - if (n2->car) { - dump_prefix(tree, offset+2); - printf("pre:\n"); - dump_recur(mrb, n2->car, offset+3); - } - n2 = n2->cdr; - if (n2) { - if (n2->car) { - dump_prefix(n2, offset+2); - printf("rest:\n"); - if (n2->car == int_to_node(-1)) { - dump_prefix(n2, offset+2); - printf("(empty)\n"); - } - else { - mrb_parser_dump(mrb, n2->car, offset+3); - } - } - n2 = n2->cdr; - if (n2 && n2->car) { - dump_prefix(n2, offset+2); - printf("post:\n"); - dump_recur(mrb, n2->car, offset+3); - } - } - } - dump_prefix(tree, offset+1); - printf("rhs:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, SPLAT_NODE_VALUE(tree), offset+1); break; case NODE_OP_ASGN: printf("NODE_OP_ASGN:\n"); dump_prefix(tree, offset+1); printf("lhs:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - tree = tree->cdr; + mrb_parser_dump(mrb, OP_ASGN_NODE_LHS(tree), offset+2); dump_prefix(tree, offset+1); - printf("op='%s' (%d)\n", mrb_sym_name(mrb, node_to_sym(tree->car)), node_to_int(tree->car)); - tree = tree->cdr; - mrb_parser_dump(mrb, tree->car, offset+1); + printf("op='%s' (%d)\n", mrb_sym_name(mrb, OP_ASGN_NODE_OP(tree)), (int)OP_ASGN_NODE_OP(tree)); + mrb_parser_dump(mrb, OP_ASGN_NODE_RHS(tree), offset+1); break; case NODE_SUPER: printf("NODE_SUPER:\n"); - if (tree) { - dump_prefix(tree, offset+1); - printf("args:\n"); - dump_recur(mrb, tree->car, offset+2); - if (tree->cdr) { - dump_prefix(tree, offset+1); - printf("block:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); - } + if (SUPER_NODE_ARGS(tree)) { + dump_callargs(mrb, CALL_NODE_ARGS(tree), offset); } break; case NODE_ZSUPER: printf("NODE_ZSUPER:\n"); - if (tree) { - dump_prefix(tree, offset+1); - printf("args:\n"); - dump_recur(mrb, tree->car, offset+2); - if (tree->cdr) { - dump_prefix(tree, offset+1); - printf("block:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); - } + if (SUPER_NODE_ARGS(tree)) { + dump_callargs(mrb, CALL_NODE_ARGS(tree), offset); } break; - case NODE_RETURN: - printf("NODE_RETURN:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - case NODE_YIELD: printf("NODE_YIELD:\n"); - dump_recur(mrb, tree, offset+1); - break; - - case NODE_BREAK: - printf("NODE_BREAK:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_NEXT: - printf("NODE_NEXT:\n"); - mrb_parser_dump(mrb, tree, offset+1); + dump_recur(mrb, YIELD_NODE_ARGS(tree), offset+1); break; case NODE_REDO: @@ -7995,30 +8220,6 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) printf("NODE_RETRY\n"); break; - case NODE_LVAR: - printf("NODE_LVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_GVAR: - printf("NODE_GVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_IVAR: - printf("NODE_IVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_CVAR: - printf("NODE_CVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_NVAR: - printf("NODE_NVAR %d\n", node_to_int(tree)); - break; - - case NODE_CONST: - printf("NODE_CONST %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - case NODE_MATCH: printf("NODE_MATCH:\n"); dump_prefix(tree, offset + 1); @@ -8039,30 +8240,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_BLOCK_ARG: printf("NODE_BLOCK_ARG:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_INT: - printf("NODE_INT %s base %d\n", (char*)tree->car, node_to_int(tree->cdr->car)); - break; - - case NODE_FLOAT: - printf("NODE_FLOAT %s\n", (char*)tree); - break; - - case NODE_NEGATE: - printf("NODE_NEGATE:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_STR: - printf("NODE_STR:\n"); - dump_recur(mrb, tree, offset+1); - break; - - case NODE_XSTR: - printf("NODE_XSTR:\n"); - dump_recur(mrb, tree, offset+1); + mrb_parser_dump(mrb, block_arg_node(tree)->value, offset+1); break; case NODE_REGX: @@ -8092,16 +8270,6 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) } break; - case NODE_SYM: - printf("NODE_SYM :%s (%d)\n", mrb_sym_dump(mrb, node_to_sym(tree)), - node_to_int(tree)); - break; - - case NODE_DSYM: - printf("NODE_DSYM:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - case NODE_WORDS: printf("NODE_WORDS:\n"); dump_recur(mrb, tree, offset+1); @@ -8112,26 +8280,10 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) dump_recur(mrb, tree, offset+1); break; - case NODE_SELF: - printf("NODE_SELF\n"); - break; - - case NODE_NIL: - printf("NODE_NIL\n"); - break; - - case NODE_TRUE: - printf("NODE_TRUE\n"); - break; - - case NODE_FALSE: - printf("NODE_FALSE\n"); - break; - case NODE_ALIAS: printf("NODE_ALIAS %s %s:\n", - mrb_sym_dump(mrb, node_to_sym(tree->car)), - mrb_sym_dump(mrb, node_to_sym(tree->cdr))); + mrb_sym_dump(mrb, node_to_sym(tree->car)), + mrb_sym_dump(mrb, node_to_sym(tree->cdr))); break; case NODE_UNDEF: @@ -8148,100 +8300,71 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_CLASS: printf("NODE_CLASS:\n"); - if (tree->car->car == int_to_node(0)) { - dump_prefix(tree, offset+1); - printf(":%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); + { + if (CLASS_NODE_NAME(tree)) { + dump_cpath(mrb, MODULE_NODE_NAME(tree), offset+1); + } + if (CLASS_NODE_SUPERCLASS(tree)) { + dump_prefix(tree, offset+1); + printf("super:\n"); + mrb_parser_dump(mrb, CLASS_NODE_SUPERCLASS(tree), offset+2); + } + if (CLASS_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, CLASS_NODE_BODY(tree)->cdr, offset+2); + } } - else if (tree->car->car == int_to_node(1)) { - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - else { - mrb_parser_dump(mrb, tree->car->car, offset+1); - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - if (tree->cdr->car) { - dump_prefix(tree, offset+1); - printf("super:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - } - dump_prefix(tree, offset+1); - printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->cdr->car->cdr, offset+2); break; case NODE_MODULE: printf("NODE_MODULE:\n"); - if (tree->car->car == int_to_node(0)) { - dump_prefix(tree, offset+1); - printf(":%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); + { + if (MODULE_NODE_NAME(tree)) { + dump_cpath(mrb, MODULE_NODE_NAME(tree), offset+1); + } + if (MODULE_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, MODULE_NODE_BODY(tree)->cdr, offset+2); + } } - else if (tree->car->car == int_to_node(1)) { - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - else { - mrb_parser_dump(mrb, tree->car->car, offset+1); - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - dump_prefix(tree, offset+1); - printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->car->cdr, offset+2); break; case NODE_SCLASS: printf("NODE_SCLASS:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - dump_prefix(tree, offset+1); - printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->car->cdr, offset+2); - break; - - case NODE_DEF: - printf("NODE_DEF:\n"); - dump_prefix(tree, offset+1); - printf("%s\n", mrb_sym_dump(mrb, node_to_sym(tree->car))); - tree = tree->cdr; { - node *n2 = tree->car; - mrb_bool first_lval = TRUE; - - if (n2 && (n2->car || n2->cdr)) { - dump_prefix(n2, offset+1); - printf("local variables:\n"); - dump_prefix(n2, offset+2); - while (n2) { - if (n2->car) { - if (!first_lval) printf(", "); - printf("%s", mrb_sym_name(mrb, node_to_sym(n2->car))); - first_lval = FALSE; - } - n2 = n2->cdr; - } - printf("\n"); + if (SCLASS_NODE_OBJ(tree)) { + dump_prefix(tree, offset+1); + printf("obj:\n"); + mrb_parser_dump(mrb, SCLASS_NODE_OBJ(tree), offset+2); + } + if (SCLASS_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, SCLASS_NODE_BODY(tree)->cdr, offset+2); } } - tree = tree->cdr; - if (tree->car) { - dump_args(mrb, tree->car, offset); - } - mrb_parser_dump(mrb, tree->cdr->car, offset+1); break; case NODE_SDEF: - printf("NODE_SDEF:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - tree = tree->cdr; - dump_prefix(tree, offset+1); - printf(":%s\n", mrb_sym_dump(mrb, node_to_sym(tree->car))); - tree = tree->cdr->cdr; - if (tree->car) { - dump_args(mrb, tree->car, offset+1); + printf("NODE_SDEF: %s\n", mrb_sym_dump(mrb, DEF_NODE_NAME(tree))); + if (SDEF_NODE_OBJ(tree)) { + dump_prefix(tree, offset+1); + printf("recv:\n"); + mrb_parser_dump(mrb, SDEF_NODE_OBJ(tree), offset+2); + } + if (SDEF_NODE_ARGS(tree)) { + dump_args(mrb, SDEF_NODE_ARGS(tree), offset+1); + } + if (SDEF_NODE_LOCALS(tree)) { + dump_locals(mrb, SDEF_NODE_LOCALS(tree), offset+1); + } + if (SDEF_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, SDEF_NODE_BODY(tree), offset+2); } - tree = tree->cdr; - mrb_parser_dump(mrb, tree->car, offset+1); break; case NODE_POSTEXE: @@ -8254,9 +8377,10 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1); break; - default: - printf("node type: %d (0x%x)\n", nodetype, (unsigned)nodetype); + /* Fallback: treat as a traditional cons-list and recursively dump */ + printf("unknown node type %d (0x%x), dumping as list:\n", nodetype, (unsigned)nodetype); + dump_recur(mrb, tree, offset+1); break; } #endif diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index a1d0c73c2..265ad36a7 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -421,9 +421,18 @@ get_node_type(node *n) { if (!n) return (enum node_type)0; - /* Try to interpret as variable-sized node first */ + /* Try to interpret as variable-sized node */ struct mrb_ast_var_header *header = (struct mrb_ast_var_header*)n; - return (enum node_type)header->node_type; + enum node_type type = (enum node_type)header->node_type; + + /* Validate that the node type is within valid range for variable-sized nodes */ + if (type >= NODE_SCOPE && type < NODE_LAST) { + return type; + } + + /* If node type is invalid, this is likely a cons-list node */ + /* Return a special sentinel value to indicate cons-list fallback */ + return NODE_LAST; /* Use NODE_LAST as sentinel for cons-list nodes */ } static void @@ -1977,7 +1986,7 @@ prohibit_literals(parser_state *p, node *n) /* xxx ----------------------------- */ -#line 1981 "mrbgems/mruby-compiler/core/y.tab.c" +#line 1990 "mrbgems/mruby-compiler/core/y.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -2148,7 +2157,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 1924 "mrbgems/mruby-compiler/core/parse.y" +#line 1933 "mrbgems/mruby-compiler/core/parse.y" node *nd; mrb_sym id; @@ -2156,7 +2165,7 @@ union YYSTYPE stack_type stack; const struct vtable *vars; -#line 2160 "mrbgems/mruby-compiler/core/y.tab.c" +#line 2169 "mrbgems/mruby-compiler/core/y.tab.c" }; typedef union YYSTYPE YYSTYPE; @@ -2915,69 +2924,69 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 2095, 2095, 2095, 2105, 2111, 2115, 2119, 2123, 2129, - 2131, 2130, 2144, 2170, 2176, 2180, 2184, 2190, 2196, 2196, - 2200, 2204, 2208, 2212, 2221, 2230, 2234, 2239, 2240, 2244, - 2248, 2252, 2256, 2262, 2265, 2269, 2273, 2277, 2281, 2285, - 2290, 2294, 2303, 2312, 2321, 2330, 2337, 2338, 2342, 2345, - 2346, 2350, 2354, 2358, 2362, 2365, 2375, 2374, 2389, 2398, - 2399, 2402, 2403, 2410, 2409, 2424, 2428, 2433, 2437, 2442, - 2446, 2451, 2455, 2459, 2463, 2467, 2473, 2477, 2483, 2484, - 2490, 2494, 2498, 2502, 2506, 2510, 2514, 2518, 2522, 2526, - 2532, 2533, 2539, 2543, 2549, 2553, 2559, 2563, 2567, 2571, - 2575, 2579, 2585, 2591, 2598, 2602, 2606, 2610, 2614, 2618, - 2624, 2630, 2635, 2641, 2645, 2648, 2652, 2656, 2663, 2664, - 2665, 2666, 2671, 2678, 2679, 2682, 2686, 2686, 2692, 2693, - 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, - 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, - 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2724, 2724, - 2724, 2725, 2725, 2726, 2726, 2726, 2727, 2727, 2727, 2727, - 2728, 2728, 2728, 2729, 2729, 2729, 2730, 2730, 2730, 2730, - 2731, 2731, 2731, 2731, 2732, 2732, 2732, 2732, 2733, 2733, - 2733, 2733, 2734, 2734, 2734, 2734, 2735, 2735, 2738, 2742, - 2746, 2750, 2754, 2758, 2762, 2767, 2772, 2777, 2781, 2785, - 2789, 2793, 2797, 2801, 2805, 2809, 2813, 2817, 2821, 2825, - 2829, 2833, 2837, 2841, 2845, 2849, 2853, 2857, 2861, 2865, - 2869, 2873, 2877, 2881, 2885, 2889, 2893, 2897, 2901, 2905, - 2909, 2913, 2917, 2921, 2925, 2934, 2943, 2952, 2961, 2967, - 2968, 2972, 2976, 2982, 2986, 2993, 2997, 3006, 3023, 3024, - 3027, 3028, 3029, 3033, 3037, 3043, 3048, 3052, 3056, 3060, - 3066, 3066, 3077, 3081, 3087, 3091, 3097, 3100, 3105, 3109, - 3113, 3118, 3122, 3128, 3133, 3137, 3143, 3144, 3148, 3152, - 3153, 3154, 3155, 3156, 3161, 3160, 3172, 3176, 3171, 3181, - 3181, 3185, 3189, 3193, 3197, 3201, 3205, 3209, 3213, 3217, - 3221, 3225, 3226, 3232, 3239, 3231, 3252, 3260, 3268, 3268, - 3268, 3275, 3275, 3275, 3282, 3288, 3293, 3295, 3292, 3304, - 3302, 3320, 3325, 3318, 3342, 3340, 3356, 3366, 3377, 3381, - 3385, 3389, 3395, 3402, 3403, 3404, 3407, 3408, 3411, 3412, - 3420, 3421, 3427, 3431, 3434, 3438, 3442, 3446, 3451, 3455, - 3459, 3463, 3469, 3468, 3478, 3482, 3486, 3490, 3496, 3501, - 3506, 3510, 3514, 3518, 3522, 3526, 3530, 3534, 3538, 3542, - 3546, 3550, 3554, 3558, 3562, 3568, 3573, 3580, 3580, 3584, - 3589, 3595, 3599, 3605, 3606, 3609, 3614, 3617, 3621, 3627, - 3631, 3638, 3637, 3654, 3659, 3663, 3668, 3675, 3679, 3683, - 3687, 3691, 3695, 3699, 3703, 3707, 3714, 3713, 3728, 3727, - 3743, 3751, 3760, 3763, 3770, 3773, 3777, 3778, 3781, 3785, - 3788, 3792, 3795, 3796, 3797, 3798, 3801, 3802, 3808, 3813, - 3818, 3823, 3829, 3830, 3836, 3842, 3841, 3853, 3857, 3863, - 3867, 3873, 3882, 3893, 3896, 3897, 3900, 3906, 3912, 3913, - 3916, 3923, 3922, 3937, 3941, 3949, 3953, 3965, 3972, 3979, - 3980, 3981, 3982, 3983, 3987, 3993, 3997, 4005, 4006, 4007, - 4011, 4017, 4021, 4025, 4029, 4033, 4039, 4043, 4049, 4053, - 4057, 4061, 4065, 4069, 4073, 4081, 4088, 4094, 4095, 4099, - 4103, 4102, 4119, 4120, 4123, 4129, 4133, 4139, 4140, 4144, - 4148, 4154, 4158, 4164, 4170, 4177, 4183, 4190, 4194, 4200, - 4204, 4210, 4211, 4214, 4218, 4224, 4228, 4232, 4236, 4242, - 4247, 4252, 4256, 4260, 4264, 4268, 4272, 4276, 4280, 4284, - 4288, 4292, 4296, 4300, 4304, 4309, 4315, 4320, 4325, 4330, - 4335, 4342, 4346, 4353, 4358, 4357, 4369, 4373, 4379, 4387, - 4395, 4403, 4407, 4413, 4417, 4423, 4424, 4427, 4432, 4439, - 4440, 4443, 4447, 4453, 4457, 4463, 4469, 4469, 4476, 4477, - 4483, 4487, 4493, 4499, 4504, 4508, 4513, 4518, 4534, 4539, - 4545, 4546, 4547, 4550, 4551, 4552, 4553, 4556, 4557, 4558, - 4561, 4562, 4565, 4569, 4575, 4576, 4582, 4583, 4586, 4587, - 4590, 4593, 4594, 4595, 4598, 4599, 4602, 4607, 4610, 4611, - 4615 + 0, 2104, 2104, 2104, 2114, 2120, 2124, 2128, 2132, 2138, + 2140, 2139, 2153, 2179, 2185, 2189, 2193, 2199, 2205, 2205, + 2209, 2213, 2217, 2221, 2230, 2239, 2243, 2248, 2249, 2253, + 2257, 2261, 2265, 2271, 2274, 2278, 2282, 2286, 2290, 2294, + 2299, 2303, 2312, 2321, 2330, 2339, 2346, 2347, 2351, 2354, + 2355, 2359, 2363, 2367, 2371, 2374, 2384, 2383, 2398, 2407, + 2408, 2411, 2412, 2419, 2418, 2433, 2437, 2442, 2446, 2451, + 2455, 2460, 2464, 2468, 2472, 2476, 2482, 2486, 2492, 2493, + 2499, 2503, 2507, 2511, 2515, 2519, 2523, 2527, 2531, 2535, + 2541, 2542, 2548, 2552, 2558, 2562, 2568, 2572, 2576, 2580, + 2584, 2588, 2594, 2600, 2607, 2611, 2615, 2619, 2623, 2627, + 2633, 2639, 2644, 2650, 2654, 2657, 2661, 2665, 2672, 2673, + 2674, 2675, 2680, 2687, 2688, 2691, 2695, 2695, 2701, 2702, + 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, + 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, + 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2733, 2733, + 2733, 2734, 2734, 2735, 2735, 2735, 2736, 2736, 2736, 2736, + 2737, 2737, 2737, 2738, 2738, 2738, 2739, 2739, 2739, 2739, + 2740, 2740, 2740, 2740, 2741, 2741, 2741, 2741, 2742, 2742, + 2742, 2742, 2743, 2743, 2743, 2743, 2744, 2744, 2747, 2751, + 2755, 2759, 2763, 2767, 2771, 2776, 2781, 2786, 2790, 2794, + 2798, 2802, 2806, 2810, 2814, 2818, 2822, 2826, 2830, 2834, + 2838, 2842, 2846, 2850, 2854, 2858, 2862, 2866, 2870, 2874, + 2878, 2882, 2886, 2890, 2894, 2898, 2902, 2906, 2910, 2914, + 2918, 2922, 2926, 2930, 2934, 2943, 2952, 2961, 2970, 2976, + 2977, 2981, 2985, 2991, 2995, 3002, 3006, 3015, 3032, 3033, + 3036, 3037, 3038, 3042, 3046, 3052, 3057, 3061, 3065, 3069, + 3075, 3075, 3086, 3090, 3096, 3100, 3106, 3109, 3114, 3118, + 3122, 3127, 3131, 3137, 3142, 3146, 3152, 3153, 3157, 3161, + 3162, 3163, 3164, 3165, 3170, 3169, 3181, 3185, 3180, 3190, + 3190, 3194, 3198, 3202, 3206, 3210, 3214, 3218, 3222, 3226, + 3230, 3234, 3235, 3241, 3248, 3240, 3261, 3269, 3277, 3277, + 3277, 3284, 3284, 3284, 3291, 3297, 3302, 3304, 3301, 3313, + 3311, 3329, 3334, 3327, 3351, 3349, 3365, 3375, 3386, 3390, + 3394, 3398, 3404, 3411, 3412, 3413, 3416, 3417, 3420, 3421, + 3429, 3430, 3436, 3440, 3443, 3447, 3451, 3455, 3460, 3464, + 3468, 3472, 3478, 3477, 3487, 3491, 3495, 3499, 3505, 3510, + 3515, 3519, 3523, 3527, 3531, 3535, 3539, 3543, 3547, 3551, + 3555, 3559, 3563, 3567, 3571, 3577, 3582, 3589, 3589, 3593, + 3598, 3604, 3608, 3614, 3615, 3618, 3623, 3626, 3630, 3636, + 3640, 3647, 3646, 3663, 3668, 3672, 3677, 3684, 3688, 3692, + 3696, 3700, 3704, 3708, 3712, 3716, 3723, 3722, 3737, 3736, + 3752, 3760, 3769, 3772, 3779, 3782, 3786, 3787, 3790, 3794, + 3797, 3801, 3804, 3805, 3806, 3807, 3810, 3811, 3817, 3822, + 3827, 3832, 3838, 3839, 3845, 3851, 3850, 3862, 3866, 3872, + 3876, 3882, 3891, 3902, 3905, 3906, 3909, 3915, 3921, 3922, + 3925, 3932, 3931, 3946, 3950, 3958, 3962, 3974, 3981, 3988, + 3989, 3990, 3991, 3992, 3996, 4002, 4006, 4014, 4015, 4016, + 4020, 4026, 4030, 4034, 4038, 4042, 4048, 4052, 4058, 4062, + 4066, 4070, 4074, 4078, 4082, 4090, 4097, 4103, 4104, 4108, + 4112, 4111, 4128, 4129, 4132, 4138, 4142, 4148, 4149, 4153, + 4157, 4163, 4167, 4173, 4179, 4186, 4192, 4199, 4203, 4209, + 4213, 4219, 4220, 4223, 4227, 4233, 4237, 4241, 4245, 4251, + 4256, 4261, 4265, 4269, 4273, 4277, 4281, 4285, 4289, 4293, + 4297, 4301, 4305, 4309, 4313, 4318, 4324, 4329, 4334, 4339, + 4344, 4351, 4355, 4362, 4367, 4366, 4378, 4382, 4388, 4396, + 4404, 4412, 4416, 4422, 4426, 4432, 4433, 4436, 4441, 4448, + 4449, 4452, 4456, 4462, 4466, 4472, 4478, 4478, 4485, 4486, + 4492, 4496, 4502, 4508, 4513, 4517, 4522, 4527, 4543, 4548, + 4554, 4555, 4556, 4559, 4560, 4561, 4562, 4565, 4566, 4567, + 4570, 4571, 4574, 4578, 4584, 4585, 4591, 4592, 4595, 4596, + 4599, 4602, 4603, 4604, 4607, 4608, 4611, 4616, 4619, 4620, + 4624 }; #endif @@ -6954,7 +6963,7 @@ YYLTYPE yylloc = yyloc_default; -#line 6958 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6967 "mrbgems/mruby-compiler/core/y.tab.c" yylsp[0] = yylloc; goto yysetstate; @@ -7167,84 +7176,84 @@ yyreduce: switch (yyn) { case 2: /* $@1: %empty */ -#line 2095 "mrbgems/mruby-compiler/core/parse.y" +#line 2104 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_BEG; if (!p->locals) p->locals = cons(0,0); } -#line 7176 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7185 "mrbgems/mruby-compiler/core/y.tab.c" break; case 3: /* program: $@1 top_compstmt */ -#line 2100 "mrbgems/mruby-compiler/core/parse.y" +#line 2109 "mrbgems/mruby-compiler/core/parse.y" { p->tree = new_scope(p, (yyvsp[0].nd)); } -#line 7184 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7193 "mrbgems/mruby-compiler/core/y.tab.c" break; case 4: /* top_compstmt: top_stmts opt_terms */ -#line 2106 "mrbgems/mruby-compiler/core/parse.y" +#line 2115 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7192 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7201 "mrbgems/mruby-compiler/core/y.tab.c" break; case 5: /* top_stmts: none */ -#line 2112 "mrbgems/mruby-compiler/core/parse.y" +#line 2121 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_stmts(p, 0); } -#line 7200 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7209 "mrbgems/mruby-compiler/core/y.tab.c" break; case 6: /* top_stmts: top_stmt */ -#line 2116 "mrbgems/mruby-compiler/core/parse.y" +#line 2125 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_stmts(p, (yyvsp[0].nd)); } -#line 7208 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7217 "mrbgems/mruby-compiler/core/y.tab.c" break; case 7: /* top_stmts: top_stmts terms top_stmt */ -#line 2120 "mrbgems/mruby-compiler/core/parse.y" +#line 2129 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 7216 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7225 "mrbgems/mruby-compiler/core/y.tab.c" break; case 8: /* top_stmts: error top_stmt */ -#line 2124 "mrbgems/mruby-compiler/core/parse.y" +#line 2133 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_stmts(p, 0); } -#line 7224 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 10: /* @2: %empty */ -#line 2131 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.nd) = local_switch(p); - nvars_block(p); - } #line 7233 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 10: /* @2: %empty */ +#line 2140 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = local_switch(p); + nvars_block(p); + } +#line 7242 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 11: /* top_stmt: "'BEGIN'" @2 '{' top_compstmt '}' */ -#line 2136 "mrbgems/mruby-compiler/core/parse.y" +#line 2145 "mrbgems/mruby-compiler/core/parse.y" { yyerror(&(yylsp[-4]), p, "BEGIN not supported"); local_resume(p, (yyvsp[-3].nd)); nvars_unnest(p); (yyval.nd) = 0; } -#line 7244 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7253 "mrbgems/mruby-compiler/core/y.tab.c" break; case 12: /* bodystmt: compstmt opt_rescue opt_else opt_ensure */ -#line 2148 "mrbgems/mruby-compiler/core/parse.y" +#line 2157 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-2].nd)) { (yyval.nd) = new_rescue(p, (yyvsp[-3].nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); @@ -7265,91 +7274,91 @@ yyreduce: } } } -#line 7269 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7278 "mrbgems/mruby-compiler/core/y.tab.c" break; case 13: /* compstmt: stmts opt_terms */ -#line 2171 "mrbgems/mruby-compiler/core/parse.y" +#line 2180 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7277 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7286 "mrbgems/mruby-compiler/core/y.tab.c" break; case 14: /* stmts: none */ -#line 2177 "mrbgems/mruby-compiler/core/parse.y" +#line 2186 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_stmts(p, 0); } -#line 7285 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7294 "mrbgems/mruby-compiler/core/y.tab.c" break; case 15: /* stmts: stmt */ -#line 2181 "mrbgems/mruby-compiler/core/parse.y" +#line 2190 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_stmts(p, (yyvsp[0].nd)); } -#line 7293 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7302 "mrbgems/mruby-compiler/core/y.tab.c" break; case 16: /* stmts: stmts terms stmt */ -#line 2185 "mrbgems/mruby-compiler/core/parse.y" +#line 2194 "mrbgems/mruby-compiler/core/parse.y" { /* Update the cons-list inside the existing variable-sized node */ STMTS_NODE_STMTS((yyvsp[-2].nd)) = push(STMTS_NODE_STMTS((yyvsp[-2].nd)), newline_node((yyvsp[0].nd))); (yyval.nd) = (yyvsp[-2].nd); } -#line 7303 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7312 "mrbgems/mruby-compiler/core/y.tab.c" break; case 17: /* stmts: error stmt */ -#line 2191 "mrbgems/mruby-compiler/core/parse.y" +#line 2200 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_stmts(p, (yyvsp[0].nd)); } -#line 7311 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7320 "mrbgems/mruby-compiler/core/y.tab.c" break; case 18: /* $@3: %empty */ -#line 2196 "mrbgems/mruby-compiler/core/parse.y" +#line 2205 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 7317 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7326 "mrbgems/mruby-compiler/core/y.tab.c" break; case 19: /* stmt: "'alias'" fsym $@3 fsym */ -#line 2197 "mrbgems/mruby-compiler/core/parse.y" +#line 2206 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_alias(p, (yyvsp[-2].id), (yyvsp[0].id)); } -#line 7325 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7334 "mrbgems/mruby-compiler/core/y.tab.c" break; case 20: /* stmt: "'undef'" undef_list */ -#line 2201 "mrbgems/mruby-compiler/core/parse.y" +#line 2210 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_undef(p, (yyvsp[0].nd)); } -#line 7333 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7342 "mrbgems/mruby-compiler/core/y.tab.c" break; case 21: /* stmt: stmt "'if' modifier" expr_value */ -#line 2205 "mrbgems/mruby-compiler/core/parse.y" +#line 2214 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 7341 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7350 "mrbgems/mruby-compiler/core/y.tab.c" break; case 22: /* stmt: stmt "'unless' modifier" expr_value */ -#line 2209 "mrbgems/mruby-compiler/core/parse.y" +#line 2218 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[0].nd)), 0, (yyvsp[-2].nd)); } -#line 7349 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7358 "mrbgems/mruby-compiler/core/y.tab.c" break; case 23: /* stmt: stmt "'while' modifier" expr_value */ -#line 2213 "mrbgems/mruby-compiler/core/parse.y" +#line 2222 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-2].nd) && node_type_p((yyvsp[-2].nd), NODE_BEGIN)) { (yyval.nd) = new_while_mod(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); @@ -7358,11 +7367,11 @@ yyreduce: (yyval.nd) = new_while(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } } -#line 7362 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7371 "mrbgems/mruby-compiler/core/y.tab.c" break; case 24: /* stmt: stmt "'until' modifier" expr_value */ -#line 2222 "mrbgems/mruby-compiler/core/parse.y" +#line 2231 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-2].nd) && node_type_p((yyvsp[-2].nd), NODE_BEGIN)) { (yyval.nd) = new_until_mod(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); @@ -7371,127 +7380,127 @@ yyreduce: (yyval.nd) = new_until(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } } -#line 7375 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7384 "mrbgems/mruby-compiler/core/y.tab.c" break; case 25: /* stmt: stmt "'rescue' modifier" stmt */ -#line 2231 "mrbgems/mruby-compiler/core/parse.y" +#line 2240 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7383 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 26: /* stmt: "'END'" '{' compstmt '}' */ -#line 2235 "mrbgems/mruby-compiler/core/parse.y" - { - yyerror(&(yylsp[-3]), p, "END not supported"); - (yyval.nd) = new_postexe(p, (yyvsp[-1].nd)); - } #line 7392 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 26: /* stmt: "'END'" '{' compstmt '}' */ +#line 2244 "mrbgems/mruby-compiler/core/parse.y" + { + yyerror(&(yylsp[-3]), p, "END not supported"); + (yyval.nd) = new_postexe(p, (yyvsp[-1].nd)); + } +#line 7401 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 28: /* stmt: mlhs '=' command_call */ -#line 2241 "mrbgems/mruby-compiler/core/parse.y" +#line 2250 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7400 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7409 "mrbgems/mruby-compiler/core/y.tab.c" break; case 29: /* stmt: lhs '=' mrhs */ -#line 2245 "mrbgems/mruby-compiler/core/parse.y" +#line 2254 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 7408 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7417 "mrbgems/mruby-compiler/core/y.tab.c" break; case 30: /* stmt: mlhs '=' arg */ -#line 2249 "mrbgems/mruby-compiler/core/parse.y" +#line 2258 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7416 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7425 "mrbgems/mruby-compiler/core/y.tab.c" break; case 31: /* stmt: mlhs '=' mrhs */ -#line 2253 "mrbgems/mruby-compiler/core/parse.y" +#line 2262 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 7424 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7433 "mrbgems/mruby-compiler/core/y.tab.c" break; case 32: /* stmt: arg "=>" "local variable or method" */ -#line 2257 "mrbgems/mruby-compiler/core/parse.y" +#line 2266 "mrbgems/mruby-compiler/core/parse.y" { node *lhs = new_lvar(p, (yyvsp[0].id)); assignable(p, lhs); (yyval.nd) = new_asgn(p, lhs, (yyvsp[-2].nd)); } -#line 7434 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7443 "mrbgems/mruby-compiler/core/y.tab.c" break; case 34: /* command_asgn: lhs '=' command_rhs */ -#line 2266 "mrbgems/mruby-compiler/core/parse.y" +#line 2275 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7442 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7451 "mrbgems/mruby-compiler/core/y.tab.c" break; case 35: /* command_asgn: var_lhs tOP_ASGN command_rhs */ -#line 2270 "mrbgems/mruby-compiler/core/parse.y" +#line 2279 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7450 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7459 "mrbgems/mruby-compiler/core/y.tab.c" break; case 36: /* command_asgn: primary_value '[' opt_call_args ']' tOP_ASGN command_rhs */ -#line 2274 "mrbgems/mruby-compiler/core/parse.y" +#line 2283 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7458 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7467 "mrbgems/mruby-compiler/core/y.tab.c" break; case 37: /* command_asgn: primary_value call_op "local variable or method" tOP_ASGN command_rhs */ -#line 2278 "mrbgems/mruby-compiler/core/parse.y" +#line 2287 "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 7466 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7475 "mrbgems/mruby-compiler/core/y.tab.c" break; case 38: /* command_asgn: primary_value call_op "constant" tOP_ASGN command_rhs */ -#line 2282 "mrbgems/mruby-compiler/core/parse.y" +#line 2291 "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 7474 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 39: /* command_asgn: primary_value "::" "constant" tOP_ASGN command_call */ -#line 2286 "mrbgems/mruby-compiler/core/parse.y" - { - yyerror(&(yylsp[-4]), p, "constant re-assignment"); - (yyval.nd) = 0; - } #line 7483 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 39: /* command_asgn: primary_value "::" "constant" tOP_ASGN command_call */ +#line 2295 "mrbgems/mruby-compiler/core/parse.y" + { + yyerror(&(yylsp[-4]), p, "constant re-assignment"); + (yyval.nd) = 0; + } +#line 7492 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 40: /* command_asgn: primary_value "::" "local variable or method" tOP_ASGN command_rhs */ -#line 2291 "mrbgems/mruby-compiler/core/parse.y" +#line 2300 "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 7491 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7500 "mrbgems/mruby-compiler/core/y.tab.c" break; case 41: /* command_asgn: defn_head f_opt_arglist_paren '=' command */ -#line 2295 "mrbgems/mruby-compiler/core/parse.y" +#line 2304 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); endless_method_name(p, (yyvsp[-3].nd)); @@ -7500,11 +7509,11 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 7504 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7513 "mrbgems/mruby-compiler/core/y.tab.c" break; case 42: /* command_asgn: defn_head f_opt_arglist_paren '=' command "'rescue' modifier" arg */ -#line 2304 "mrbgems/mruby-compiler/core/parse.y" +#line 2313 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-5].nd); endless_method_name(p, (yyvsp[-5].nd)); @@ -7513,11 +7522,11 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 7517 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7526 "mrbgems/mruby-compiler/core/y.tab.c" break; case 43: /* command_asgn: defs_head f_opt_arglist_paren '=' command */ -#line 2313 "mrbgems/mruby-compiler/core/parse.y" +#line 2322 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); void_expr_error(p, (yyvsp[0].nd)); @@ -7526,11 +7535,11 @@ yyreduce: p->in_def--; p->in_single--; } -#line 7530 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7539 "mrbgems/mruby-compiler/core/y.tab.c" break; case 44: /* command_asgn: defs_head f_opt_arglist_paren '=' command "'rescue' modifier" arg */ -#line 2322 "mrbgems/mruby-compiler/core/parse.y" +#line 2331 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-5].nd); void_expr_error(p, (yyvsp[-2].nd)); @@ -7539,79 +7548,79 @@ yyreduce: p->in_def--; p->in_single--; } -#line 7543 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7552 "mrbgems/mruby-compiler/core/y.tab.c" break; case 45: /* command_asgn: backref tOP_ASGN command_rhs */ -#line 2331 "mrbgems/mruby-compiler/core/parse.y" +#line 2340 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_stmts(p, 0); } -#line 7552 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7561 "mrbgems/mruby-compiler/core/y.tab.c" break; case 47: /* command_rhs: command_call "'rescue' modifier" stmt */ -#line 2339 "mrbgems/mruby-compiler/core/parse.y" +#line 2348 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7560 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7569 "mrbgems/mruby-compiler/core/y.tab.c" break; case 50: /* expr: expr "'and'" expr */ -#line 2347 "mrbgems/mruby-compiler/core/parse.y" +#line 2356 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7568 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7577 "mrbgems/mruby-compiler/core/y.tab.c" break; case 51: /* expr: expr "'or'" expr */ -#line 2351 "mrbgems/mruby-compiler/core/parse.y" +#line 2360 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7576 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7585 "mrbgems/mruby-compiler/core/y.tab.c" break; case 52: /* expr: "'not'" opt_nl expr */ -#line 2355 "mrbgems/mruby-compiler/core/parse.y" +#line 2364 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 7584 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7593 "mrbgems/mruby-compiler/core/y.tab.c" break; case 53: /* expr: '!' command_call */ -#line 2359 "mrbgems/mruby-compiler/core/parse.y" +#line 2368 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 7592 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7601 "mrbgems/mruby-compiler/core/y.tab.c" break; case 55: /* defn_head: "'def'" fname */ -#line 2366 "mrbgems/mruby-compiler/core/parse.y" +#line 2375 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_def(p, (yyvsp[0].id)); p->cmdarg_stack = 0; p->in_def++; nvars_block(p); } -#line 7603 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7612 "mrbgems/mruby-compiler/core/y.tab.c" break; case 56: /* $@4: %empty */ -#line 2375 "mrbgems/mruby-compiler/core/parse.y" +#line 2384 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_FNAME; } -#line 7611 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7620 "mrbgems/mruby-compiler/core/y.tab.c" break; case 57: /* defs_head: "'def'" singleton dot_or_colon $@4 fname */ -#line 2379 "mrbgems/mruby-compiler/core/parse.y" +#line 2388 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_sdef(p, (yyvsp[-3].nd), (yyvsp[0].id)); p->cmdarg_stack = 0; @@ -7620,472 +7629,463 @@ yyreduce: nvars_block(p); p->lstate = EXPR_ENDFN; /* force for args */ } -#line 7624 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7633 "mrbgems/mruby-compiler/core/y.tab.c" break; case 58: /* expr_value: expr */ -#line 2390 "mrbgems/mruby-compiler/core/parse.y" +#line 2399 "mrbgems/mruby-compiler/core/parse.y" { if (!(yyvsp[0].nd)) (yyval.nd) = new_nil(p); else { (yyval.nd) = (yyvsp[0].nd); } } -#line 7635 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7644 "mrbgems/mruby-compiler/core/y.tab.c" break; case 62: /* block_command: block_call call_op2 operation2 command_args */ -#line 2404 "mrbgems/mruby-compiler/core/parse.y" +#line 2413 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 7643 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 63: /* $@5: %empty */ -#line 2410 "mrbgems/mruby-compiler/core/parse.y" - { - local_nest(p); - nvars_nest(p); - } #line 7652 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 63: /* $@5: %empty */ +#line 2419 "mrbgems/mruby-compiler/core/parse.y" + { + local_nest(p); + nvars_nest(p); + } +#line 7661 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 64: /* cmd_brace_block: "{" $@5 opt_block_param compstmt '}' */ -#line 2417 "mrbgems/mruby-compiler/core/parse.y" +#line 2426 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p, (yyvsp[-2].nd), (yyvsp[-1].nd)); local_unnest(p); nvars_unnest(p); } -#line 7662 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7671 "mrbgems/mruby-compiler/core/y.tab.c" break; case 65: /* command: operation command_args */ -#line 2425 "mrbgems/mruby-compiler/core/parse.y" +#line 2434 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7670 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 66: /* command: operation command_args cmd_brace_block */ -#line 2429 "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 7679 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 66: /* command: operation command_args cmd_brace_block */ +#line 2438 "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 7688 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 67: /* command: primary_value call_op operation2 command_args */ -#line 2434 "mrbgems/mruby-compiler/core/parse.y" +#line 2443 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 7687 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7696 "mrbgems/mruby-compiler/core/y.tab.c" break; case 68: /* command: primary_value call_op operation2 command_args cmd_brace_block */ -#line 2438 "mrbgems/mruby-compiler/core/parse.y" +#line 2447 "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 7696 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7705 "mrbgems/mruby-compiler/core/y.tab.c" break; case 69: /* command: primary_value "::" operation2 command_args */ -#line 2443 "mrbgems/mruby-compiler/core/parse.y" +#line 2452 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 7704 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 70: /* command: primary_value "::" operation2 command_args cmd_brace_block */ -#line 2447 "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 7713 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 70: /* command: primary_value "::" operation2 command_args cmd_brace_block */ +#line 2456 "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 7722 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 71: /* command: "'super'" command_args */ -#line 2452 "mrbgems/mruby-compiler/core/parse.y" +#line 2461 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 7721 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7730 "mrbgems/mruby-compiler/core/y.tab.c" break; case 72: /* command: "'yield'" command_args */ -#line 2456 "mrbgems/mruby-compiler/core/parse.y" +#line 2465 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 7729 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7738 "mrbgems/mruby-compiler/core/y.tab.c" break; case 73: /* command: "'return'" call_args */ -#line 2460 "mrbgems/mruby-compiler/core/parse.y" +#line 2469 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_return(p, ret_args(p, (yyvsp[0].nd))); } -#line 7737 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7746 "mrbgems/mruby-compiler/core/y.tab.c" break; case 74: /* command: "'break'" call_args */ -#line 2464 "mrbgems/mruby-compiler/core/parse.y" +#line 2473 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_break(p, ret_args(p, (yyvsp[0].nd))); } -#line 7745 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7754 "mrbgems/mruby-compiler/core/y.tab.c" break; case 75: /* command: "'next'" call_args */ -#line 2468 "mrbgems/mruby-compiler/core/parse.y" +#line 2477 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_next(p, ret_args(p, (yyvsp[0].nd))); } -#line 7753 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7762 "mrbgems/mruby-compiler/core/y.tab.c" break; case 76: /* mlhs: mlhs_basic */ -#line 2474 "mrbgems/mruby-compiler/core/parse.y" +#line 2483 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7761 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7770 "mrbgems/mruby-compiler/core/y.tab.c" break; case 77: /* mlhs: tLPAREN mlhs_inner rparen */ -#line 2478 "mrbgems/mruby-compiler/core/parse.y" +#line 2487 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7769 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7778 "mrbgems/mruby-compiler/core/y.tab.c" break; case 79: /* mlhs_inner: tLPAREN mlhs_inner rparen */ -#line 2485 "mrbgems/mruby-compiler/core/parse.y" +#line 2494 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7777 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7786 "mrbgems/mruby-compiler/core/y.tab.c" break; case 80: /* mlhs_basic: mlhs_list */ -#line 2491 "mrbgems/mruby-compiler/core/parse.y" +#line 2500 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 7785 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7794 "mrbgems/mruby-compiler/core/y.tab.c" break; case 81: /* mlhs_basic: mlhs_list mlhs_item */ -#line 2495 "mrbgems/mruby-compiler/core/parse.y" +#line 2504 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(push((yyvsp[-1].nd),(yyvsp[0].nd))); } -#line 7793 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7802 "mrbgems/mruby-compiler/core/y.tab.c" break; case 82: /* mlhs_basic: mlhs_list "*" mlhs_node */ -#line 2499 "mrbgems/mruby-compiler/core/parse.y" +#line 2508 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7801 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7810 "mrbgems/mruby-compiler/core/y.tab.c" break; case 83: /* mlhs_basic: mlhs_list "*" mlhs_node ',' mlhs_post */ -#line 2503 "mrbgems/mruby-compiler/core/parse.y" +#line 2512 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-4].nd), (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7809 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7818 "mrbgems/mruby-compiler/core/y.tab.c" break; case 84: /* mlhs_basic: mlhs_list "*" */ -#line 2507 "mrbgems/mruby-compiler/core/parse.y" +#line 2516 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2((yyvsp[-1].nd), new_nil(p)); } -#line 7817 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7826 "mrbgems/mruby-compiler/core/y.tab.c" break; case 85: /* mlhs_basic: mlhs_list "*" ',' mlhs_post */ -#line 2511 "mrbgems/mruby-compiler/core/parse.y" +#line 2520 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-3].nd), new_nil(p), (yyvsp[0].nd)); } -#line 7825 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7834 "mrbgems/mruby-compiler/core/y.tab.c" break; case 86: /* mlhs_basic: "*" mlhs_node */ -#line 2515 "mrbgems/mruby-compiler/core/parse.y" +#line 2524 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2(0, (yyvsp[0].nd)); } -#line 7833 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7842 "mrbgems/mruby-compiler/core/y.tab.c" break; case 87: /* mlhs_basic: "*" mlhs_node ',' mlhs_post */ -#line 2519 "mrbgems/mruby-compiler/core/parse.y" +#line 2528 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7841 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7850 "mrbgems/mruby-compiler/core/y.tab.c" break; case 88: /* mlhs_basic: "*" */ -#line 2523 "mrbgems/mruby-compiler/core/parse.y" +#line 2532 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2(0, new_nil(p)); } -#line 7849 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7858 "mrbgems/mruby-compiler/core/y.tab.c" break; case 89: /* mlhs_basic: "*" ',' mlhs_post */ -#line 2527 "mrbgems/mruby-compiler/core/parse.y" +#line 2536 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_nil(p), (yyvsp[0].nd)); } -#line 7857 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7866 "mrbgems/mruby-compiler/core/y.tab.c" break; case 91: /* mlhs_item: tLPAREN mlhs_inner rparen */ -#line 2534 "mrbgems/mruby-compiler/core/parse.y" +#line 2543 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-1].nd), NULL); } -#line 7865 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7874 "mrbgems/mruby-compiler/core/y.tab.c" break; case 92: /* mlhs_list: mlhs_item ',' */ -#line 2540 "mrbgems/mruby-compiler/core/parse.y" +#line 2549 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[-1].nd)); } -#line 7873 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7882 "mrbgems/mruby-compiler/core/y.tab.c" break; case 93: /* mlhs_list: mlhs_list mlhs_item ',' */ -#line 2544 "mrbgems/mruby-compiler/core/parse.y" +#line 2553 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[-1].nd)); } -#line 7881 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7890 "mrbgems/mruby-compiler/core/y.tab.c" break; case 94: /* mlhs_post: mlhs_item */ -#line 2550 "mrbgems/mruby-compiler/core/parse.y" +#line 2559 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 7889 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7898 "mrbgems/mruby-compiler/core/y.tab.c" break; case 95: /* mlhs_post: mlhs_list mlhs_item */ -#line 2554 "mrbgems/mruby-compiler/core/parse.y" +#line 2563 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 7897 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7906 "mrbgems/mruby-compiler/core/y.tab.c" break; case 96: /* mlhs_node: variable */ -#line 2560 "mrbgems/mruby-compiler/core/parse.y" +#line 2569 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 7905 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7914 "mrbgems/mruby-compiler/core/y.tab.c" break; case 97: /* mlhs_node: primary_value '[' opt_call_args ']' */ -#line 2564 "mrbgems/mruby-compiler/core/parse.y" +#line 2573 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 7913 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7922 "mrbgems/mruby-compiler/core/y.tab.c" break; case 98: /* mlhs_node: primary_value call_op "local variable or method" */ -#line 2568 "mrbgems/mruby-compiler/core/parse.y" +#line 2577 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7930 "mrbgems/mruby-compiler/core/y.tab.c" break; case 99: /* mlhs_node: primary_value "::" "local variable or method" */ -#line 2572 "mrbgems/mruby-compiler/core/parse.y" +#line 2581 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 7929 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7938 "mrbgems/mruby-compiler/core/y.tab.c" break; case 100: /* mlhs_node: primary_value call_op "constant" */ -#line 2576 "mrbgems/mruby-compiler/core/parse.y" +#line 2585 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7937 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7946 "mrbgems/mruby-compiler/core/y.tab.c" break; case 101: /* mlhs_node: primary_value "::" "constant" */ -#line 2580 "mrbgems/mruby-compiler/core/parse.y" +#line 2589 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(&(yylsp[-2]), p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 7947 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7956 "mrbgems/mruby-compiler/core/y.tab.c" break; case 102: /* mlhs_node: tCOLON3 "constant" */ -#line 2586 "mrbgems/mruby-compiler/core/parse.y" +#line 2595 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(&(yylsp[-1]), p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 7957 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 103: /* mlhs_node: backref */ -#line 2592 "mrbgems/mruby-compiler/core/parse.y" - { - backref_error(p, (yyvsp[0].nd)); - (yyval.nd) = 0; - } #line 7966 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 103: /* mlhs_node: backref */ +#line 2601 "mrbgems/mruby-compiler/core/parse.y" + { + backref_error(p, (yyvsp[0].nd)); + (yyval.nd) = 0; + } +#line 7975 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 104: /* lhs: variable */ -#line 2599 "mrbgems/mruby-compiler/core/parse.y" +#line 2608 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 7974 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7983 "mrbgems/mruby-compiler/core/y.tab.c" break; case 105: /* lhs: primary_value '[' opt_call_args ']' */ -#line 2603 "mrbgems/mruby-compiler/core/parse.y" +#line 2612 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 7982 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7991 "mrbgems/mruby-compiler/core/y.tab.c" break; case 106: /* lhs: primary_value call_op "local variable or method" */ -#line 2607 "mrbgems/mruby-compiler/core/parse.y" +#line 2616 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 7990 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7999 "mrbgems/mruby-compiler/core/y.tab.c" break; case 107: /* lhs: primary_value "::" "local variable or method" */ -#line 2611 "mrbgems/mruby-compiler/core/parse.y" +#line 2620 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 7998 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8007 "mrbgems/mruby-compiler/core/y.tab.c" break; case 108: /* lhs: primary_value call_op "constant" */ -#line 2615 "mrbgems/mruby-compiler/core/parse.y" +#line 2624 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 8006 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8015 "mrbgems/mruby-compiler/core/y.tab.c" break; case 109: /* lhs: primary_value "::" "constant" */ -#line 2619 "mrbgems/mruby-compiler/core/parse.y" +#line 2628 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(&(yylsp[-2]), p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 8016 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8025 "mrbgems/mruby-compiler/core/y.tab.c" break; case 110: /* lhs: tCOLON3 "constant" */ -#line 2625 "mrbgems/mruby-compiler/core/parse.y" +#line 2634 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(&(yylsp[-1]), p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 8026 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8035 "mrbgems/mruby-compiler/core/y.tab.c" break; case 111: /* lhs: backref */ -#line 2631 "mrbgems/mruby-compiler/core/parse.y" +#line 2640 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 8035 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8044 "mrbgems/mruby-compiler/core/y.tab.c" break; case 112: /* lhs: "numbered parameter" */ -#line 2636 "mrbgems/mruby-compiler/core/parse.y" +#line 2645 "mrbgems/mruby-compiler/core/parse.y" { yyerror(&(yylsp[0]), p, "can't assign to numbered parameter"); } -#line 8043 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8052 "mrbgems/mruby-compiler/core/y.tab.c" break; case 113: /* cname: "local variable or method" */ -#line 2642 "mrbgems/mruby-compiler/core/parse.y" +#line 2651 "mrbgems/mruby-compiler/core/parse.y" { yyerror(&(yylsp[0]), p, "class/module name must be CONSTANT"); } -#line 8051 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8060 "mrbgems/mruby-compiler/core/y.tab.c" break; case 115: /* cpath: tCOLON3 cname */ -#line 2649 "mrbgems/mruby-compiler/core/parse.y" +#line 2658 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(int_to_node(1), sym_to_node((yyvsp[0].id))); } -#line 8059 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8068 "mrbgems/mruby-compiler/core/y.tab.c" break; case 116: /* cpath: cname */ -#line 2653 "mrbgems/mruby-compiler/core/parse.y" +#line 2662 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(int_to_node(0), sym_to_node((yyvsp[0].id))); } -#line 8067 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 117: /* cpath: primary_value "::" cname */ -#line 2657 "mrbgems/mruby-compiler/core/parse.y" - { - void_expr_error(p, (yyvsp[-2].nd)); - (yyval.nd) = cons((yyvsp[-2].nd), sym_to_node((yyvsp[0].id))); - } #line 8076 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 121: /* fname: op */ -#line 2667 "mrbgems/mruby-compiler/core/parse.y" + case 117: /* cpath: primary_value "::" cname */ +#line 2666 "mrbgems/mruby-compiler/core/parse.y" { - p->lstate = EXPR_ENDFN; - (yyval.id) = (yyvsp[0].id); + void_expr_error(p, (yyvsp[-2].nd)); + (yyval.nd) = cons((yyvsp[-2].nd), sym_to_node((yyvsp[0].id))); } #line 8085 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 122: /* fname: reswords */ -#line 2672 "mrbgems/mruby-compiler/core/parse.y" + case 121: /* fname: op */ +#line 2676 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); @@ -8093,581 +8093,590 @@ yyreduce: #line 8094 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 122: /* fname: reswords */ +#line 2681 "mrbgems/mruby-compiler/core/parse.y" + { + p->lstate = EXPR_ENDFN; + (yyval.id) = (yyvsp[0].id); + } +#line 8103 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 125: /* undef_list: fsym */ -#line 2683 "mrbgems/mruby-compiler/core/parse.y" +#line 2692 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(sym_to_node((yyvsp[0].id)), 0); } -#line 8102 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8111 "mrbgems/mruby-compiler/core/y.tab.c" break; case 126: /* $@6: %empty */ -#line 2686 "mrbgems/mruby-compiler/core/parse.y" +#line 2695 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 8108 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8117 "mrbgems/mruby-compiler/core/y.tab.c" break; case 127: /* undef_list: undef_list ',' $@6 fsym */ -#line 2687 "mrbgems/mruby-compiler/core/parse.y" +#line 2696 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), sym_to_node((yyvsp[0].id))); } -#line 8116 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8125 "mrbgems/mruby-compiler/core/y.tab.c" break; case 128: /* op: '|' */ -#line 2692 "mrbgems/mruby-compiler/core/parse.y" +#line 2701 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(or); } -#line 8122 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8131 "mrbgems/mruby-compiler/core/y.tab.c" break; case 129: /* op: '^' */ -#line 2693 "mrbgems/mruby-compiler/core/parse.y" +#line 2702 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(xor); } -#line 8128 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8137 "mrbgems/mruby-compiler/core/y.tab.c" break; case 130: /* op: '&' */ -#line 2694 "mrbgems/mruby-compiler/core/parse.y" +#line 2703 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(and); } -#line 8134 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8143 "mrbgems/mruby-compiler/core/y.tab.c" break; case 131: /* op: "<=>" */ -#line 2695 "mrbgems/mruby-compiler/core/parse.y" +#line 2704 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(cmp); } -#line 8140 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8149 "mrbgems/mruby-compiler/core/y.tab.c" break; case 132: /* op: "==" */ -#line 2696 "mrbgems/mruby-compiler/core/parse.y" +#line 2705 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(eq); } -#line 8146 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8155 "mrbgems/mruby-compiler/core/y.tab.c" break; case 133: /* op: "===" */ -#line 2697 "mrbgems/mruby-compiler/core/parse.y" +#line 2706 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(eqq); } -#line 8152 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8161 "mrbgems/mruby-compiler/core/y.tab.c" break; case 134: /* op: "=~" */ -#line 2698 "mrbgems/mruby-compiler/core/parse.y" +#line 2707 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(match); } -#line 8158 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8167 "mrbgems/mruby-compiler/core/y.tab.c" break; case 135: /* op: "!~" */ -#line 2699 "mrbgems/mruby-compiler/core/parse.y" +#line 2708 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(nmatch); } -#line 8164 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8173 "mrbgems/mruby-compiler/core/y.tab.c" break; case 136: /* op: '>' */ -#line 2700 "mrbgems/mruby-compiler/core/parse.y" +#line 2709 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(gt); } -#line 8170 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8179 "mrbgems/mruby-compiler/core/y.tab.c" break; case 137: /* op: ">=" */ -#line 2701 "mrbgems/mruby-compiler/core/parse.y" +#line 2710 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(ge); } -#line 8176 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8185 "mrbgems/mruby-compiler/core/y.tab.c" break; case 138: /* op: '<' */ -#line 2702 "mrbgems/mruby-compiler/core/parse.y" +#line 2711 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(lt); } -#line 8182 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8191 "mrbgems/mruby-compiler/core/y.tab.c" break; case 139: /* op: "<=" */ -#line 2703 "mrbgems/mruby-compiler/core/parse.y" +#line 2712 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(le); } -#line 8188 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8197 "mrbgems/mruby-compiler/core/y.tab.c" break; case 140: /* op: "!=" */ -#line 2704 "mrbgems/mruby-compiler/core/parse.y" +#line 2713 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(neq); } -#line 8194 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8203 "mrbgems/mruby-compiler/core/y.tab.c" break; case 141: /* op: "<<" */ -#line 2705 "mrbgems/mruby-compiler/core/parse.y" +#line 2714 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(lshift); } -#line 8200 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8209 "mrbgems/mruby-compiler/core/y.tab.c" break; case 142: /* op: ">>" */ -#line 2706 "mrbgems/mruby-compiler/core/parse.y" +#line 2715 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(rshift); } -#line 8206 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8215 "mrbgems/mruby-compiler/core/y.tab.c" break; case 143: /* op: '+' */ -#line 2707 "mrbgems/mruby-compiler/core/parse.y" +#line 2716 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(add); } -#line 8212 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8221 "mrbgems/mruby-compiler/core/y.tab.c" break; case 144: /* op: '-' */ -#line 2708 "mrbgems/mruby-compiler/core/parse.y" +#line 2717 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(sub); } -#line 8218 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8227 "mrbgems/mruby-compiler/core/y.tab.c" break; case 145: /* op: '*' */ -#line 2709 "mrbgems/mruby-compiler/core/parse.y" +#line 2718 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mul); } -#line 8224 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8233 "mrbgems/mruby-compiler/core/y.tab.c" break; case 146: /* op: "*" */ -#line 2710 "mrbgems/mruby-compiler/core/parse.y" +#line 2719 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mul); } -#line 8230 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8239 "mrbgems/mruby-compiler/core/y.tab.c" break; case 147: /* op: '/' */ -#line 2711 "mrbgems/mruby-compiler/core/parse.y" +#line 2720 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(div); } -#line 8236 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8245 "mrbgems/mruby-compiler/core/y.tab.c" break; case 148: /* op: '%' */ -#line 2712 "mrbgems/mruby-compiler/core/parse.y" +#line 2721 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mod); } -#line 8242 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8251 "mrbgems/mruby-compiler/core/y.tab.c" break; case 149: /* op: tPOW */ -#line 2713 "mrbgems/mruby-compiler/core/parse.y" +#line 2722 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 8248 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8257 "mrbgems/mruby-compiler/core/y.tab.c" break; case 150: /* op: "**" */ -#line 2714 "mrbgems/mruby-compiler/core/parse.y" +#line 2723 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 8254 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8263 "mrbgems/mruby-compiler/core/y.tab.c" break; case 151: /* op: '!' */ -#line 2715 "mrbgems/mruby-compiler/core/parse.y" +#line 2724 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(not); } -#line 8260 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8269 "mrbgems/mruby-compiler/core/y.tab.c" break; case 152: /* op: '~' */ -#line 2716 "mrbgems/mruby-compiler/core/parse.y" +#line 2725 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(neg); } -#line 8266 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8275 "mrbgems/mruby-compiler/core/y.tab.c" break; case 153: /* op: "unary plus" */ -#line 2717 "mrbgems/mruby-compiler/core/parse.y" +#line 2726 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(plus); } -#line 8272 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8281 "mrbgems/mruby-compiler/core/y.tab.c" break; case 154: /* op: "unary minus" */ -#line 2718 "mrbgems/mruby-compiler/core/parse.y" +#line 2727 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(minus); } -#line 8278 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8287 "mrbgems/mruby-compiler/core/y.tab.c" break; case 155: /* op: tAREF */ -#line 2719 "mrbgems/mruby-compiler/core/parse.y" +#line 2728 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(aref); } -#line 8284 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8293 "mrbgems/mruby-compiler/core/y.tab.c" break; case 156: /* op: tASET */ -#line 2720 "mrbgems/mruby-compiler/core/parse.y" +#line 2729 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(aset); } -#line 8290 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8299 "mrbgems/mruby-compiler/core/y.tab.c" break; case 157: /* op: '`' */ -#line 2721 "mrbgems/mruby-compiler/core/parse.y" +#line 2730 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(tick); } -#line 8296 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8305 "mrbgems/mruby-compiler/core/y.tab.c" break; case 198: /* arg: lhs '=' arg_rhs */ -#line 2739 "mrbgems/mruby-compiler/core/parse.y" +#line 2748 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8304 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8313 "mrbgems/mruby-compiler/core/y.tab.c" break; case 199: /* arg: var_lhs tOP_ASGN arg_rhs */ -#line 2743 "mrbgems/mruby-compiler/core/parse.y" +#line 2752 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 8312 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8321 "mrbgems/mruby-compiler/core/y.tab.c" break; case 200: /* arg: primary_value '[' opt_call_args ']' tOP_ASGN arg_rhs */ -#line 2747 "mrbgems/mruby-compiler/core/parse.y" +#line 2756 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 8320 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8329 "mrbgems/mruby-compiler/core/y.tab.c" break; case 201: /* arg: primary_value call_op "local variable or method" tOP_ASGN arg_rhs */ -#line 2751 "mrbgems/mruby-compiler/core/parse.y" +#line 2760 "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 8328 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8337 "mrbgems/mruby-compiler/core/y.tab.c" break; case 202: /* arg: primary_value call_op "constant" tOP_ASGN arg_rhs */ -#line 2755 "mrbgems/mruby-compiler/core/parse.y" +#line 2764 "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 8336 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8345 "mrbgems/mruby-compiler/core/y.tab.c" break; case 203: /* arg: primary_value "::" "local variable or method" tOP_ASGN arg_rhs */ -#line 2759 "mrbgems/mruby-compiler/core/parse.y" +#line 2768 "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 8344 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 204: /* arg: primary_value "::" "constant" tOP_ASGN arg_rhs */ -#line 2763 "mrbgems/mruby-compiler/core/parse.y" - { - yyerror(&(yylsp[-4]), p, "constant re-assignment"); - (yyval.nd) = new_stmts(p, 0); - } #line 8353 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 205: /* arg: tCOLON3 "constant" tOP_ASGN arg_rhs */ -#line 2768 "mrbgems/mruby-compiler/core/parse.y" + case 204: /* arg: primary_value "::" "constant" tOP_ASGN arg_rhs */ +#line 2772 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(&(yylsp[-3]), p, "constant re-assignment"); + yyerror(&(yylsp[-4]), p, "constant re-assignment"); (yyval.nd) = new_stmts(p, 0); } #line 8362 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 206: /* arg: backref tOP_ASGN arg_rhs */ -#line 2773 "mrbgems/mruby-compiler/core/parse.y" + case 205: /* arg: tCOLON3 "constant" tOP_ASGN arg_rhs */ +#line 2777 "mrbgems/mruby-compiler/core/parse.y" { - backref_error(p, (yyvsp[-2].nd)); + yyerror(&(yylsp[-3]), p, "constant re-assignment"); (yyval.nd) = new_stmts(p, 0); } #line 8371 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 206: /* arg: backref tOP_ASGN arg_rhs */ +#line 2782 "mrbgems/mruby-compiler/core/parse.y" + { + backref_error(p, (yyvsp[-2].nd)); + (yyval.nd) = new_stmts(p, 0); + } +#line 8380 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 207: /* arg: arg ".." arg */ -#line 2778 "mrbgems/mruby-compiler/core/parse.y" +#line 2787 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8379 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8388 "mrbgems/mruby-compiler/core/y.tab.c" break; case 208: /* arg: arg ".." */ -#line 2782 "mrbgems/mruby-compiler/core/parse.y" +#line 2791 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, (yyvsp[-1].nd), new_nil(p)); } -#line 8387 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8396 "mrbgems/mruby-compiler/core/y.tab.c" break; case 209: /* arg: tBDOT2 arg */ -#line 2786 "mrbgems/mruby-compiler/core/parse.y" +#line 2795 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, new_nil(p), (yyvsp[0].nd)); } -#line 8395 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8404 "mrbgems/mruby-compiler/core/y.tab.c" break; case 210: /* arg: arg "..." arg */ -#line 2790 "mrbgems/mruby-compiler/core/parse.y" +#line 2799 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8403 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8412 "mrbgems/mruby-compiler/core/y.tab.c" break; case 211: /* arg: arg "..." */ -#line 2794 "mrbgems/mruby-compiler/core/parse.y" +#line 2803 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, (yyvsp[-1].nd), new_nil(p)); } -#line 8411 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8420 "mrbgems/mruby-compiler/core/y.tab.c" break; case 212: /* arg: tBDOT3 arg */ -#line 2798 "mrbgems/mruby-compiler/core/parse.y" +#line 2807 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, new_nil(p), (yyvsp[0].nd)); } -#line 8419 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8428 "mrbgems/mruby-compiler/core/y.tab.c" break; case 213: /* arg: arg '+' arg */ -#line 2802 "mrbgems/mruby-compiler/core/parse.y" +#line 2811 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "+", (yyvsp[0].nd)); } -#line 8427 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8436 "mrbgems/mruby-compiler/core/y.tab.c" break; case 214: /* arg: arg '-' arg */ -#line 2806 "mrbgems/mruby-compiler/core/parse.y" +#line 2815 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "-", (yyvsp[0].nd)); } -#line 8435 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8444 "mrbgems/mruby-compiler/core/y.tab.c" break; case 215: /* arg: arg '*' arg */ -#line 2810 "mrbgems/mruby-compiler/core/parse.y" +#line 2819 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "*", (yyvsp[0].nd)); } -#line 8443 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8452 "mrbgems/mruby-compiler/core/y.tab.c" break; case 216: /* arg: arg '/' arg */ -#line 2814 "mrbgems/mruby-compiler/core/parse.y" +#line 2823 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "/", (yyvsp[0].nd)); } -#line 8451 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8460 "mrbgems/mruby-compiler/core/y.tab.c" break; case 217: /* arg: arg '%' arg */ -#line 2818 "mrbgems/mruby-compiler/core/parse.y" +#line 2827 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "%", (yyvsp[0].nd)); } -#line 8459 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8468 "mrbgems/mruby-compiler/core/y.tab.c" break; case 218: /* arg: arg tPOW arg */ -#line 2822 "mrbgems/mruby-compiler/core/parse.y" +#line 2831 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)); } -#line 8467 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8476 "mrbgems/mruby-compiler/core/y.tab.c" break; case 219: /* arg: tUMINUS_NUM "integer literal" tPOW arg */ -#line 2826 "mrbgems/mruby-compiler/core/parse.y" +#line 2835 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_negate(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd))); } -#line 8475 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8484 "mrbgems/mruby-compiler/core/y.tab.c" break; case 220: /* arg: tUMINUS_NUM "float literal" tPOW arg */ -#line 2830 "mrbgems/mruby-compiler/core/parse.y" +#line 2839 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_negate(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd))); } -#line 8483 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8492 "mrbgems/mruby-compiler/core/y.tab.c" break; case 221: /* arg: "unary plus" arg */ -#line 2834 "mrbgems/mruby-compiler/core/parse.y" +#line 2843 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "+@"); } -#line 8491 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8500 "mrbgems/mruby-compiler/core/y.tab.c" break; case 222: /* arg: "unary minus" arg */ -#line 2838 "mrbgems/mruby-compiler/core/parse.y" +#line 2847 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_negate(p, (yyvsp[0].nd)); } -#line 8499 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8508 "mrbgems/mruby-compiler/core/y.tab.c" break; case 223: /* arg: arg '|' arg */ -#line 2842 "mrbgems/mruby-compiler/core/parse.y" +#line 2851 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "|", (yyvsp[0].nd)); } -#line 8507 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8516 "mrbgems/mruby-compiler/core/y.tab.c" break; case 224: /* arg: arg '^' arg */ -#line 2846 "mrbgems/mruby-compiler/core/parse.y" +#line 2855 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "^", (yyvsp[0].nd)); } -#line 8515 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8524 "mrbgems/mruby-compiler/core/y.tab.c" break; case 225: /* arg: arg '&' arg */ -#line 2850 "mrbgems/mruby-compiler/core/parse.y" +#line 2859 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "&", (yyvsp[0].nd)); } -#line 8523 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8532 "mrbgems/mruby-compiler/core/y.tab.c" break; case 226: /* arg: arg "<=>" arg */ -#line 2854 "mrbgems/mruby-compiler/core/parse.y" +#line 2863 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=>", (yyvsp[0].nd)); } -#line 8531 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8540 "mrbgems/mruby-compiler/core/y.tab.c" break; case 227: /* arg: arg '>' arg */ -#line 2858 "mrbgems/mruby-compiler/core/parse.y" +#line 2867 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">", (yyvsp[0].nd)); } -#line 8539 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8548 "mrbgems/mruby-compiler/core/y.tab.c" break; case 228: /* arg: arg ">=" arg */ -#line 2862 "mrbgems/mruby-compiler/core/parse.y" +#line 2871 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">=", (yyvsp[0].nd)); } -#line 8547 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8556 "mrbgems/mruby-compiler/core/y.tab.c" break; case 229: /* arg: arg '<' arg */ -#line 2866 "mrbgems/mruby-compiler/core/parse.y" +#line 2875 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<", (yyvsp[0].nd)); } -#line 8555 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8564 "mrbgems/mruby-compiler/core/y.tab.c" break; case 230: /* arg: arg "<=" arg */ -#line 2870 "mrbgems/mruby-compiler/core/parse.y" +#line 2879 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=", (yyvsp[0].nd)); } -#line 8563 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8572 "mrbgems/mruby-compiler/core/y.tab.c" break; case 231: /* arg: arg "==" arg */ -#line 2874 "mrbgems/mruby-compiler/core/parse.y" +#line 2883 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "==", (yyvsp[0].nd)); } -#line 8571 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8580 "mrbgems/mruby-compiler/core/y.tab.c" break; case 232: /* arg: arg "===" arg */ -#line 2878 "mrbgems/mruby-compiler/core/parse.y" +#line 2887 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "===", (yyvsp[0].nd)); } -#line 8579 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8588 "mrbgems/mruby-compiler/core/y.tab.c" break; case 233: /* arg: arg "!=" arg */ -#line 2882 "mrbgems/mruby-compiler/core/parse.y" +#line 2891 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!=", (yyvsp[0].nd)); } -#line 8587 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8596 "mrbgems/mruby-compiler/core/y.tab.c" break; case 234: /* arg: arg "=~" arg */ -#line 2886 "mrbgems/mruby-compiler/core/parse.y" +#line 2895 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "=~", (yyvsp[0].nd)); } -#line 8595 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8604 "mrbgems/mruby-compiler/core/y.tab.c" break; case 235: /* arg: arg "!~" arg */ -#line 2890 "mrbgems/mruby-compiler/core/parse.y" +#line 2899 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!~", (yyvsp[0].nd)); } -#line 8603 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8612 "mrbgems/mruby-compiler/core/y.tab.c" break; case 236: /* arg: '!' arg */ -#line 2894 "mrbgems/mruby-compiler/core/parse.y" +#line 2903 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 8611 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8620 "mrbgems/mruby-compiler/core/y.tab.c" break; case 237: /* arg: '~' arg */ -#line 2898 "mrbgems/mruby-compiler/core/parse.y" +#line 2907 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "~"); } -#line 8619 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8628 "mrbgems/mruby-compiler/core/y.tab.c" break; case 238: /* arg: arg "<<" arg */ -#line 2902 "mrbgems/mruby-compiler/core/parse.y" +#line 2911 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<<", (yyvsp[0].nd)); } -#line 8627 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8636 "mrbgems/mruby-compiler/core/y.tab.c" break; case 239: /* arg: arg ">>" arg */ -#line 2906 "mrbgems/mruby-compiler/core/parse.y" +#line 2915 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">>", (yyvsp[0].nd)); } -#line 8635 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8644 "mrbgems/mruby-compiler/core/y.tab.c" break; case 240: /* arg: arg "&&" arg */ -#line 2910 "mrbgems/mruby-compiler/core/parse.y" +#line 2919 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8643 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8652 "mrbgems/mruby-compiler/core/y.tab.c" break; case 241: /* arg: arg "||" arg */ -#line 2914 "mrbgems/mruby-compiler/core/parse.y" +#line 2923 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8651 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8660 "mrbgems/mruby-compiler/core/y.tab.c" break; case 242: /* arg: arg '?' arg opt_nl ':' arg */ -#line 2918 "mrbgems/mruby-compiler/core/parse.y" +#line 2927 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 8659 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8668 "mrbgems/mruby-compiler/core/y.tab.c" break; case 243: /* arg: arg '?' arg opt_nl "label" arg */ -#line 2922 "mrbgems/mruby-compiler/core/parse.y" +#line 2931 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 8667 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8676 "mrbgems/mruby-compiler/core/y.tab.c" break; case 244: /* arg: defn_head f_opt_arglist_paren '=' arg */ -#line 2926 "mrbgems/mruby-compiler/core/parse.y" +#line 2935 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); endless_method_name(p, (yyvsp[-3].nd)); @@ -8676,11 +8685,11 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 8680 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8689 "mrbgems/mruby-compiler/core/y.tab.c" break; case 245: /* arg: defn_head f_opt_arglist_paren '=' arg "'rescue' modifier" arg */ -#line 2935 "mrbgems/mruby-compiler/core/parse.y" +#line 2944 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-5].nd); endless_method_name(p, (yyvsp[-5].nd)); @@ -8689,11 +8698,11 @@ yyreduce: nvars_unnest(p); p->in_def--; } -#line 8693 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8702 "mrbgems/mruby-compiler/core/y.tab.c" break; case 246: /* arg: defs_head f_opt_arglist_paren '=' arg */ -#line 2944 "mrbgems/mruby-compiler/core/parse.y" +#line 2953 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); void_expr_error(p, (yyvsp[0].nd)); @@ -8702,11 +8711,11 @@ yyreduce: p->in_def--; p->in_single--; } -#line 8706 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8715 "mrbgems/mruby-compiler/core/y.tab.c" break; case 247: /* arg: defs_head f_opt_arglist_paren '=' arg "'rescue' modifier" arg */ -#line 2953 "mrbgems/mruby-compiler/core/parse.y" +#line 2962 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-5].nd); void_expr_error(p, (yyvsp[-2].nd)); @@ -8715,68 +8724,68 @@ yyreduce: p->in_def--; p->in_single--; } -#line 8719 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8728 "mrbgems/mruby-compiler/core/y.tab.c" break; case 248: /* arg: primary */ -#line 2962 "mrbgems/mruby-compiler/core/parse.y" +#line 2971 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8727 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8736 "mrbgems/mruby-compiler/core/y.tab.c" break; case 250: /* aref_args: args trailer */ -#line 2969 "mrbgems/mruby-compiler/core/parse.y" +#line 2978 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8735 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8744 "mrbgems/mruby-compiler/core/y.tab.c" break; case 251: /* aref_args: args comma assocs trailer */ -#line 2973 "mrbgems/mruby-compiler/core/parse.y" +#line 2982 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), new_hash(p, (yyvsp[-1].nd))); } -#line 8743 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8752 "mrbgems/mruby-compiler/core/y.tab.c" break; case 252: /* aref_args: assocs trailer */ -#line 2977 "mrbgems/mruby-compiler/core/parse.y" +#line 2986 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(new_hash(p, (yyvsp[-1].nd)), 0); } -#line 8751 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8760 "mrbgems/mruby-compiler/core/y.tab.c" break; case 253: /* arg_rhs: arg */ -#line 2983 "mrbgems/mruby-compiler/core/parse.y" +#line 2992 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8759 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 254: /* arg_rhs: arg "'rescue' modifier" arg */ -#line 2987 "mrbgems/mruby-compiler/core/parse.y" - { - void_expr_error(p, (yyvsp[-2].nd)); - (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); - } #line 8768 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 254: /* arg_rhs: arg "'rescue' modifier" arg */ +#line 2996 "mrbgems/mruby-compiler/core/parse.y" + { + void_expr_error(p, (yyvsp[-2].nd)); + (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); + } +#line 8777 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 255: /* paren_args: '(' opt_call_args ')' */ -#line 2994 "mrbgems/mruby-compiler/core/parse.y" +#line 3003 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8776 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8785 "mrbgems/mruby-compiler/core/y.tab.c" break; case 256: /* paren_args: '(' args comma tBDOT3 rparen */ -#line 2998 "mrbgems/mruby-compiler/core/parse.y" +#line 3007 "mrbgems/mruby-compiler/core/parse.y" { mrb_sym r = intern_op(mul); mrb_sym k = intern_op(pow); @@ -8785,11 +8794,11 @@ yyreduce: list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))), new_block_arg(p, new_lvar(p, b))); } -#line 8789 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8798 "mrbgems/mruby-compiler/core/y.tab.c" break; case 257: /* paren_args: '(' tBDOT3 rparen */ -#line 3007 "mrbgems/mruby-compiler/core/parse.y" +#line 3016 "mrbgems/mruby-compiler/core/parse.y" { mrb_sym r = intern_op(mul); mrb_sym k = intern_op(pow); @@ -8804,390 +8813,390 @@ yyreduce: (yyval.nd) = 0; } } -#line 8808 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8817 "mrbgems/mruby-compiler/core/y.tab.c" break; case 262: /* opt_call_args: args comma */ -#line 3030 "mrbgems/mruby-compiler/core/parse.y" +#line 3039 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p,(yyvsp[-1].nd),0,0); } -#line 8816 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8825 "mrbgems/mruby-compiler/core/y.tab.c" break; case 263: /* opt_call_args: args comma assocs comma */ -#line 3034 "mrbgems/mruby-compiler/core/parse.y" +#line 3043 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p,(yyvsp[-3].nd),(yyvsp[-1].nd),0); } -#line 8824 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8833 "mrbgems/mruby-compiler/core/y.tab.c" break; case 264: /* opt_call_args: assocs comma */ -#line 3038 "mrbgems/mruby-compiler/core/parse.y" +#line 3047 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p,0,(yyvsp[-1].nd),0); } -#line 8832 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 265: /* call_args: command */ -#line 3044 "mrbgems/mruby-compiler/core/parse.y" - { - void_expr_error(p, (yyvsp[0].nd)); - (yyval.nd) = new_callargs(p, list1((yyvsp[0].nd)), 0, 0); - } #line 8841 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 265: /* call_args: command */ +#line 3053 "mrbgems/mruby-compiler/core/parse.y" + { + void_expr_error(p, (yyvsp[0].nd)); + (yyval.nd) = new_callargs(p, list1((yyvsp[0].nd)), 0, 0); + } +#line 8850 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 266: /* call_args: args opt_block_arg */ -#line 3049 "mrbgems/mruby-compiler/core/parse.y" +#line 3058 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p, (yyvsp[-1].nd), 0, (yyvsp[0].nd)); } -#line 8849 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8858 "mrbgems/mruby-compiler/core/y.tab.c" break; case 267: /* call_args: assocs opt_block_arg */ -#line 3053 "mrbgems/mruby-compiler/core/parse.y" +#line 3062 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p, 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8857 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8866 "mrbgems/mruby-compiler/core/y.tab.c" break; case 268: /* call_args: args comma assocs opt_block_arg */ -#line 3057 "mrbgems/mruby-compiler/core/parse.y" +#line 3066 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8865 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8874 "mrbgems/mruby-compiler/core/y.tab.c" break; case 269: /* call_args: block_arg */ -#line 3061 "mrbgems/mruby-compiler/core/parse.y" +#line 3070 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_callargs(p, 0, 0, (yyvsp[0].nd)); } -#line 8873 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 270: /* @7: %empty */ -#line 3066 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.stack) = p->cmdarg_stack; - CMDARG_PUSH(1); - } #line 8882 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 271: /* command_args: @7 call_args */ -#line 3071 "mrbgems/mruby-compiler/core/parse.y" - { - p->cmdarg_stack = (yyvsp[-1].stack); - (yyval.nd) = (yyvsp[0].nd); + case 270: /* @7: %empty */ +#line 3075 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.stack) = p->cmdarg_stack; + CMDARG_PUSH(1); } #line 8891 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 271: /* command_args: @7 call_args */ +#line 3080 "mrbgems/mruby-compiler/core/parse.y" + { + p->cmdarg_stack = (yyvsp[-1].stack); + (yyval.nd) = (yyvsp[0].nd); + } +#line 8900 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 272: /* block_arg: "&" arg */ -#line 3078 "mrbgems/mruby-compiler/core/parse.y" +#line 3087 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block_arg(p, (yyvsp[0].nd)); } -#line 8899 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8908 "mrbgems/mruby-compiler/core/y.tab.c" break; case 273: /* block_arg: "&" */ -#line 3082 "mrbgems/mruby-compiler/core/parse.y" +#line 3091 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block_arg(p, 0); } -#line 8907 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8916 "mrbgems/mruby-compiler/core/y.tab.c" break; case 274: /* opt_block_arg: comma block_arg */ -#line 3088 "mrbgems/mruby-compiler/core/parse.y" +#line 3097 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8915 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8924 "mrbgems/mruby-compiler/core/y.tab.c" break; case 275: /* opt_block_arg: none */ -#line 3092 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.nd) = 0; - } -#line 8923 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 277: /* args: arg */ #line 3101 "mrbgems/mruby-compiler/core/parse.y" { - void_expr_error(p, (yyvsp[0].nd)); - (yyval.nd) = list1((yyvsp[0].nd)); + (yyval.nd) = 0; } #line 8932 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 277: /* args: arg */ +#line 3110 "mrbgems/mruby-compiler/core/parse.y" + { + void_expr_error(p, (yyvsp[0].nd)); + (yyval.nd) = list1((yyvsp[0].nd)); + } +#line 8941 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 278: /* args: "*" */ -#line 3106 "mrbgems/mruby-compiler/core/parse.y" +#line 3115 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_splat(p, new_lvar(p, intern_op(mul)))); } -#line 8940 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8949 "mrbgems/mruby-compiler/core/y.tab.c" break; case 279: /* args: "*" arg */ -#line 3110 "mrbgems/mruby-compiler/core/parse.y" +#line 3119 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_splat(p, (yyvsp[0].nd))); } -#line 8948 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 280: /* args: args comma arg */ -#line 3114 "mrbgems/mruby-compiler/core/parse.y" - { - void_expr_error(p, (yyvsp[0].nd)); - (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); - } #line 8957 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 281: /* args: args comma "*" */ -#line 3119 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.nd) = push((yyvsp[-2].nd), new_splat(p, new_lvar(p, intern_op(mul)))); - } -#line 8965 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 282: /* args: args comma "*" arg */ + case 280: /* args: args comma arg */ #line 3123 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); - } -#line 8973 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 283: /* mrhs: args comma arg */ -#line 3129 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 8982 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8966 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 284: /* mrhs: args comma "*" arg */ -#line 3134 "mrbgems/mruby-compiler/core/parse.y" + case 281: /* args: args comma "*" */ +#line 3128 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = push((yyvsp[-2].nd), new_splat(p, new_lvar(p, intern_op(mul)))); + } +#line 8974 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 282: /* args: args comma "*" arg */ +#line 3132 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 8990 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8982 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 283: /* mrhs: args comma arg */ +#line 3138 "mrbgems/mruby-compiler/core/parse.y" + { + void_expr_error(p, (yyvsp[0].nd)); + (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); + } +#line 8991 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 284: /* mrhs: args comma "*" arg */ +#line 3143 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); + } +#line 8999 "mrbgems/mruby-compiler/core/y.tab.c" break; case 285: /* mrhs: "*" arg */ -#line 3138 "mrbgems/mruby-compiler/core/parse.y" +#line 3147 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_splat(p, (yyvsp[0].nd))); } -#line 8998 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9007 "mrbgems/mruby-compiler/core/y.tab.c" break; case 287: /* primary: string */ -#line 3145 "mrbgems/mruby-compiler/core/parse.y" +#line 3154 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_str(p, (yyvsp[0].nd)); } -#line 9006 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9015 "mrbgems/mruby-compiler/core/y.tab.c" break; case 288: /* primary: xstring */ -#line 3149 "mrbgems/mruby-compiler/core/parse.y" +#line 3158 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_xstr(p, (yyvsp[0].nd)); } -#line 9014 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9023 "mrbgems/mruby-compiler/core/y.tab.c" break; case 293: /* primary: "method" */ -#line 3157 "mrbgems/mruby-compiler/core/parse.y" +#line 3166 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[0].id), 0); } -#line 9022 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 294: /* @8: %empty */ -#line 3161 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.stack) = p->cmdarg_stack; - p->cmdarg_stack = 0; - } #line 9031 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 295: /* primary: "'begin'" @8 bodystmt "'end'" */ -#line 3167 "mrbgems/mruby-compiler/core/parse.y" - { - p->cmdarg_stack = (yyvsp[-2].stack); - (yyval.nd) = new_begin(p, (yyvsp[-1].nd)); - } -#line 9040 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 296: /* @9: %empty */ -#line 3172 "mrbgems/mruby-compiler/core/parse.y" + case 294: /* @8: %empty */ +#line 3170 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } +#line 9040 "mrbgems/mruby-compiler/core/y.tab.c" + break; + + case 295: /* primary: "'begin'" @8 bodystmt "'end'" */ +#line 3176 "mrbgems/mruby-compiler/core/parse.y" + { + p->cmdarg_stack = (yyvsp[-2].stack); + (yyval.nd) = new_begin(p, (yyvsp[-1].nd)); + } #line 9049 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 296: /* @9: %empty */ +#line 3181 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.stack) = p->cmdarg_stack; + p->cmdarg_stack = 0; + } +#line 9058 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 297: /* $@10: %empty */ -#line 3176 "mrbgems/mruby-compiler/core/parse.y" +#line 3185 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 9055 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9064 "mrbgems/mruby-compiler/core/y.tab.c" break; case 298: /* primary: "(" @9 stmt $@10 rparen */ -#line 3177 "mrbgems/mruby-compiler/core/parse.y" +#line 3186 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-3].stack); (yyval.nd) = (yyvsp[-2].nd); } -#line 9064 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9073 "mrbgems/mruby-compiler/core/y.tab.c" break; case 299: /* $@11: %empty */ -#line 3181 "mrbgems/mruby-compiler/core/parse.y" +#line 3190 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 9070 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9079 "mrbgems/mruby-compiler/core/y.tab.c" break; case 300: /* primary: "(" $@11 rparen */ -#line 3182 "mrbgems/mruby-compiler/core/parse.y" +#line 3191 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nil(p); } -#line 9078 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9087 "mrbgems/mruby-compiler/core/y.tab.c" break; case 301: /* primary: tLPAREN compstmt ')' */ -#line 3186 "mrbgems/mruby-compiler/core/parse.y" +#line 3195 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9086 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9095 "mrbgems/mruby-compiler/core/y.tab.c" break; case 302: /* primary: primary_value "::" "constant" */ -#line 3190 "mrbgems/mruby-compiler/core/parse.y" +#line 3199 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 9094 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9103 "mrbgems/mruby-compiler/core/y.tab.c" break; case 303: /* primary: tCOLON3 "constant" */ -#line 3194 "mrbgems/mruby-compiler/core/parse.y" +#line 3203 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 9102 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9111 "mrbgems/mruby-compiler/core/y.tab.c" break; case 304: /* primary: "[" aref_args ']' */ -#line 3198 "mrbgems/mruby-compiler/core/parse.y" +#line 3207 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_array(p, (yyvsp[-1].nd)); } -#line 9110 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9119 "mrbgems/mruby-compiler/core/y.tab.c" break; case 305: /* primary: tLBRACE assoc_list '}' */ -#line 3202 "mrbgems/mruby-compiler/core/parse.y" +#line 3211 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_hash(p, (yyvsp[-1].nd)); } -#line 9118 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9127 "mrbgems/mruby-compiler/core/y.tab.c" break; case 306: /* primary: "'return'" */ -#line 3206 "mrbgems/mruby-compiler/core/parse.y" +#line 3215 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_return(p, 0); } -#line 9126 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9135 "mrbgems/mruby-compiler/core/y.tab.c" break; case 307: /* primary: "'yield'" opt_paren_args */ -#line 3210 "mrbgems/mruby-compiler/core/parse.y" +#line 3219 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 9134 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9143 "mrbgems/mruby-compiler/core/y.tab.c" break; case 308: /* primary: "'not'" '(' expr rparen */ -#line 3214 "mrbgems/mruby-compiler/core/parse.y" +#line 3223 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[-1].nd)), "!"); } -#line 9142 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9151 "mrbgems/mruby-compiler/core/y.tab.c" break; case 309: /* primary: "'not'" '(' rparen */ -#line 3218 "mrbgems/mruby-compiler/core/parse.y" +#line 3227 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, new_nil(p), "!"); } -#line 9150 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9159 "mrbgems/mruby-compiler/core/y.tab.c" break; case 310: /* primary: operation brace_block */ -#line 3222 "mrbgems/mruby-compiler/core/parse.y" +#line 3231 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), new_callargs(p, 0, 0, (yyvsp[0].nd))); } -#line 9158 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 312: /* primary: method_call brace_block */ -#line 3227 "mrbgems/mruby-compiler/core/parse.y" - { - call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); - (yyval.nd) = (yyvsp[-1].nd); - } #line 9167 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 312: /* primary: method_call brace_block */ +#line 3236 "mrbgems/mruby-compiler/core/parse.y" + { + call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); + (yyval.nd) = (yyvsp[-1].nd); + } +#line 9176 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 313: /* @12: %empty */ -#line 3232 "mrbgems/mruby-compiler/core/parse.y" +#line 3241 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lpar_beg; p->lpar_beg = ++p->paren_nest; } -#line 9178 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9187 "mrbgems/mruby-compiler/core/y.tab.c" break; case 314: /* @13: %empty */ -#line 3239 "mrbgems/mruby-compiler/core/parse.y" +#line 3248 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 9187 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9196 "mrbgems/mruby-compiler/core/y.tab.c" break; case 315: /* primary: "->" @12 f_larglist @13 lambda_body */ -#line 3244 "mrbgems/mruby-compiler/core/parse.y" +#line 3253 "mrbgems/mruby-compiler/core/parse.y" { p->lpar_beg = (yyvsp[-3].num); (yyval.nd) = new_lambda(p, (yyvsp[-2].nd), (yyvsp[0].nd)); @@ -9196,149 +9205,149 @@ yyreduce: p->cmdarg_stack = (yyvsp[-1].stack); CMDARG_LEXPOP(); } -#line 9200 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 316: /* primary: "'if'" expr_value then compstmt if_tail "'end'" */ -#line 3256 "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 9209 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 317: /* primary: "'unless'" expr_value then compstmt opt_else "'end'" */ -#line 3264 "mrbgems/mruby-compiler/core/parse.y" + case 316: /* primary: "'if'" expr_value then compstmt if_tail "'end'" */ +#line 3265 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd), (yyvsp[-2].nd)); + (yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } #line 9218 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 317: /* primary: "'unless'" expr_value then compstmt opt_else "'end'" */ +#line 3273 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd), (yyvsp[-2].nd)); + SET_LINENO((yyval.nd), (yyvsp[-5].num)); + } +#line 9227 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 318: /* $@14: %empty */ -#line 3268 "mrbgems/mruby-compiler/core/parse.y" +#line 3277 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 9224 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9233 "mrbgems/mruby-compiler/core/y.tab.c" break; case 319: /* $@15: %empty */ -#line 3268 "mrbgems/mruby-compiler/core/parse.y" +#line 3277 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 9230 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9239 "mrbgems/mruby-compiler/core/y.tab.c" break; case 320: /* primary: "'while'" $@14 expr_value do $@15 compstmt "'end'" */ -#line 3271 "mrbgems/mruby-compiler/core/parse.y" +#line 3280 "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 9239 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9248 "mrbgems/mruby-compiler/core/y.tab.c" break; case 321: /* $@16: %empty */ -#line 3275 "mrbgems/mruby-compiler/core/parse.y" +#line 3284 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 9245 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9254 "mrbgems/mruby-compiler/core/y.tab.c" break; case 322: /* $@17: %empty */ -#line 3275 "mrbgems/mruby-compiler/core/parse.y" +#line 3284 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 9251 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9260 "mrbgems/mruby-compiler/core/y.tab.c" break; case 323: /* primary: "'until'" $@16 expr_value do $@17 compstmt "'end'" */ -#line 3278 "mrbgems/mruby-compiler/core/parse.y" +#line 3287 "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 9260 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9269 "mrbgems/mruby-compiler/core/y.tab.c" break; case 324: /* primary: "'case'" expr_value opt_terms case_body "'end'" */ -#line 3285 "mrbgems/mruby-compiler/core/parse.y" +#line 3294 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_case(p, (yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 9268 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9277 "mrbgems/mruby-compiler/core/y.tab.c" break; case 325: /* primary: "'case'" opt_terms case_body "'end'" */ -#line 3289 "mrbgems/mruby-compiler/core/parse.y" +#line 3298 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_case(p, 0, (yyvsp[-1].nd)); } -#line 9276 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9285 "mrbgems/mruby-compiler/core/y.tab.c" break; case 326: /* $@18: %empty */ -#line 3293 "mrbgems/mruby-compiler/core/parse.y" +#line 3302 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 9282 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9291 "mrbgems/mruby-compiler/core/y.tab.c" break; case 327: /* $@19: %empty */ -#line 3295 "mrbgems/mruby-compiler/core/parse.y" +#line 3304 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 9288 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9297 "mrbgems/mruby-compiler/core/y.tab.c" break; case 328: /* primary: "'for'" for_var "'in'" $@18 expr_value do $@19 compstmt "'end'" */ -#line 3298 "mrbgems/mruby-compiler/core/parse.y" +#line 3307 "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 9297 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9306 "mrbgems/mruby-compiler/core/y.tab.c" break; case 329: /* @20: %empty */ -#line 3304 "mrbgems/mruby-compiler/core/parse.y" +#line 3313 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(&(yylsp[-2]), p, "class definition in method body"); (yyval.nd) = local_switch(p); nvars_block(p); } -#line 9308 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9317 "mrbgems/mruby-compiler/core/y.tab.c" break; case 330: /* primary: "'class'" cpath superclass @20 bodystmt "'end'" */ -#line 3312 "mrbgems/mruby-compiler/core/parse.y" +#line 3321 "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 9319 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9328 "mrbgems/mruby-compiler/core/y.tab.c" break; case 331: /* @21: %empty */ -#line 3320 "mrbgems/mruby-compiler/core/parse.y" +#line 3329 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = p->in_def; p->in_def = 0; } -#line 9328 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9337 "mrbgems/mruby-compiler/core/y.tab.c" break; case 332: /* @22: %empty */ -#line 3325 "mrbgems/mruby-compiler/core/parse.y" +#line 3334 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(local_switch(p), int_to_node(p->in_single)); nvars_block(p); p->in_single = 0; } -#line 9338 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9347 "mrbgems/mruby-compiler/core/y.tab.c" break; case 333: /* primary: "'class'" "<<" expr @21 term @22 bodystmt "'end'" */ -#line 3332 "mrbgems/mruby-compiler/core/parse.y" +#line 3341 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_sclass(p, (yyvsp[-5].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-7].num)); @@ -9347,44 +9356,44 @@ yyreduce: p->in_def = (yyvsp[-4].num); p->in_single = node_to_int((yyvsp[-2].nd)->cdr); } -#line 9351 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9360 "mrbgems/mruby-compiler/core/y.tab.c" break; case 334: /* @23: %empty */ -#line 3342 "mrbgems/mruby-compiler/core/parse.y" +#line 3351 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(&(yylsp[-1]), p, "module definition in method body"); (yyval.nd) = local_switch(p); nvars_block(p); } -#line 9362 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9371 "mrbgems/mruby-compiler/core/y.tab.c" break; case 335: /* primary: "'module'" cpath @23 bodystmt "'end'" */ -#line 3350 "mrbgems/mruby-compiler/core/parse.y" +#line 3359 "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 9373 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9382 "mrbgems/mruby-compiler/core/y.tab.c" break; case 336: /* primary: defn_head f_arglist bodystmt "'end'" */ -#line 3360 "mrbgems/mruby-compiler/core/parse.y" +#line 3369 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); nvars_unnest(p); p->in_def--; } -#line 9384 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9393 "mrbgems/mruby-compiler/core/y.tab.c" break; case 337: /* primary: defs_head f_arglist bodystmt "'end'" */ -#line 3370 "mrbgems/mruby-compiler/core/parse.y" +#line 3379 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); @@ -9392,479 +9401,470 @@ yyreduce: p->in_def--; p->in_single--; } -#line 9396 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9405 "mrbgems/mruby-compiler/core/y.tab.c" break; case 338: /* primary: "'break'" */ -#line 3378 "mrbgems/mruby-compiler/core/parse.y" +#line 3387 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_break(p, 0); } -#line 9404 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9413 "mrbgems/mruby-compiler/core/y.tab.c" break; case 339: /* primary: "'next'" */ -#line 3382 "mrbgems/mruby-compiler/core/parse.y" +#line 3391 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_next(p, 0); } -#line 9412 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9421 "mrbgems/mruby-compiler/core/y.tab.c" break; case 340: /* primary: "'redo'" */ -#line 3386 "mrbgems/mruby-compiler/core/parse.y" +#line 3395 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_redo(p); } -#line 9420 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9429 "mrbgems/mruby-compiler/core/y.tab.c" break; case 341: /* primary: "'retry'" */ -#line 3390 "mrbgems/mruby-compiler/core/parse.y" +#line 3399 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_retry(p); } -#line 9428 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 342: /* primary_value: primary */ -#line 3396 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.nd) = (yyvsp[0].nd); - if (!(yyval.nd)) (yyval.nd) = new_nil(p); - } #line 9437 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 342: /* primary_value: primary */ +#line 3405 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = (yyvsp[0].nd); + if (!(yyval.nd)) (yyval.nd) = new_nil(p); + } +#line 9446 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 349: /* if_tail: "'elsif'" expr_value then compstmt if_tail */ -#line 3415 "mrbgems/mruby-compiler/core/parse.y" +#line 3424 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-3].nd)), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9445 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9454 "mrbgems/mruby-compiler/core/y.tab.c" break; case 351: /* opt_else: "'else'" compstmt */ -#line 3422 "mrbgems/mruby-compiler/core/parse.y" +#line 3431 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 9453 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9462 "mrbgems/mruby-compiler/core/y.tab.c" break; case 352: /* for_var: lhs */ -#line 3428 "mrbgems/mruby-compiler/core/parse.y" +#line 3437 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(list1((yyvsp[0].nd))); } -#line 9461 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9470 "mrbgems/mruby-compiler/core/y.tab.c" break; case 354: /* f_margs: f_arg */ -#line 3435 "mrbgems/mruby-compiler/core/parse.y" +#line 3444 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[0].nd),0,0); } -#line 9469 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9478 "mrbgems/mruby-compiler/core/y.tab.c" break; case 355: /* f_margs: f_arg ',' "*" f_norm_arg */ -#line 3439 "mrbgems/mruby-compiler/core/parse.y" +#line 3448 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-3].nd), new_lvar(p, (yyvsp[0].id)), 0); } -#line 9477 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9486 "mrbgems/mruby-compiler/core/y.tab.c" break; case 356: /* f_margs: f_arg ',' "*" f_norm_arg ',' f_arg */ -#line 3443 "mrbgems/mruby-compiler/core/parse.y" +#line 3452 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-5].nd), new_lvar(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 9485 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 357: /* f_margs: f_arg ',' "*" */ -#line 3447 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_f(p, intern_op(mul)); - (yyval.nd) = list3((yyvsp[-2].nd), int_to_node(-1), 0); - } #line 9494 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 357: /* f_margs: f_arg ',' "*" */ +#line 3456 "mrbgems/mruby-compiler/core/parse.y" + { + local_add_f(p, intern_op(mul)); + (yyval.nd) = list3((yyvsp[-2].nd), int_to_node(-1), 0); + } +#line 9503 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 358: /* f_margs: f_arg ',' "*" ',' f_arg */ -#line 3452 "mrbgems/mruby-compiler/core/parse.y" +#line 3461 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-4].nd), int_to_node(-1), (yyvsp[0].nd)); } -#line 9502 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9511 "mrbgems/mruby-compiler/core/y.tab.c" break; case 359: /* f_margs: "*" f_norm_arg */ -#line 3456 "mrbgems/mruby-compiler/core/parse.y" +#line 3465 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_lvar(p, (yyvsp[0].id)), 0); } -#line 9510 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9519 "mrbgems/mruby-compiler/core/y.tab.c" break; case 360: /* f_margs: "*" f_norm_arg ',' f_arg */ -#line 3460 "mrbgems/mruby-compiler/core/parse.y" +#line 3469 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_lvar(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 9518 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 361: /* f_margs: "*" */ -#line 3464 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_f(p, intern_op(mul)); - (yyval.nd) = list3(0, int_to_node(-1), 0); - } #line 9527 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 361: /* f_margs: "*" */ +#line 3473 "mrbgems/mruby-compiler/core/parse.y" + { + local_add_f(p, intern_op(mul)); + (yyval.nd) = list3(0, int_to_node(-1), 0); + } +#line 9536 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 362: /* $@24: %empty */ -#line 3469 "mrbgems/mruby-compiler/core/parse.y" +#line 3478 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, intern_op(mul)); } -#line 9535 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9544 "mrbgems/mruby-compiler/core/y.tab.c" break; case 363: /* f_margs: "*" ',' $@24 f_arg */ -#line 3473 "mrbgems/mruby-compiler/core/parse.y" +#line 3482 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, int_to_node(-1), (yyvsp[0].nd)); } -#line 9543 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9552 "mrbgems/mruby-compiler/core/y.tab.c" break; case 364: /* block_args_tail: f_block_kwarg ',' f_kwrest opt_f_block_arg */ -#line 3479 "mrbgems/mruby-compiler/core/parse.y" +#line 3488 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].id)); } -#line 9551 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9560 "mrbgems/mruby-compiler/core/y.tab.c" break; case 365: /* block_args_tail: f_block_kwarg opt_f_block_arg */ -#line 3483 "mrbgems/mruby-compiler/core/parse.y" +#line 3492 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 9559 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9568 "mrbgems/mruby-compiler/core/y.tab.c" break; case 366: /* block_args_tail: f_kwrest opt_f_block_arg */ -#line 3487 "mrbgems/mruby-compiler/core/parse.y" +#line 3496 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].id), (yyvsp[0].id)); } -#line 9567 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9576 "mrbgems/mruby-compiler/core/y.tab.c" break; case 367: /* block_args_tail: f_block_arg */ -#line 3491 "mrbgems/mruby-compiler/core/parse.y" +#line 3500 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 9575 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9584 "mrbgems/mruby-compiler/core/y.tab.c" break; case 368: /* opt_block_args_tail: ',' block_args_tail */ -#line 3497 "mrbgems/mruby-compiler/core/parse.y" +#line 3506 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 9583 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9592 "mrbgems/mruby-compiler/core/y.tab.c" break; case 369: /* opt_block_args_tail: %empty */ -#line 3501 "mrbgems/mruby-compiler/core/parse.y" +#line 3510 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 9591 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9600 "mrbgems/mruby-compiler/core/y.tab.c" break; case 370: /* block_param: f_arg ',' f_block_optarg ',' f_rest_arg opt_block_args_tail */ -#line 3507 "mrbgems/mruby-compiler/core/parse.y" +#line 3516 "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 9599 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9608 "mrbgems/mruby-compiler/core/y.tab.c" break; case 371: /* block_param: f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail */ -#line 3511 "mrbgems/mruby-compiler/core/parse.y" +#line 3520 "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 9607 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9616 "mrbgems/mruby-compiler/core/y.tab.c" break; case 372: /* block_param: f_arg ',' f_block_optarg opt_block_args_tail */ -#line 3515 "mrbgems/mruby-compiler/core/parse.y" +#line 3524 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9615 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9624 "mrbgems/mruby-compiler/core/y.tab.c" break; case 373: /* block_param: f_arg ',' f_block_optarg ',' f_arg opt_block_args_tail */ -#line 3519 "mrbgems/mruby-compiler/core/parse.y" +#line 3528 "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 9623 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9632 "mrbgems/mruby-compiler/core/y.tab.c" break; case 374: /* block_param: f_arg ',' f_rest_arg opt_block_args_tail */ -#line 3523 "mrbgems/mruby-compiler/core/parse.y" +#line 3532 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9631 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9640 "mrbgems/mruby-compiler/core/y.tab.c" break; case 375: /* block_param: f_arg ',' opt_block_args_tail */ -#line 3527 "mrbgems/mruby-compiler/core/parse.y" +#line 3536 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-2].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 9639 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9648 "mrbgems/mruby-compiler/core/y.tab.c" break; case 376: /* block_param: f_arg ',' f_rest_arg ',' f_arg opt_block_args_tail */ -#line 3531 "mrbgems/mruby-compiler/core/parse.y" +#line 3540 "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 9647 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9656 "mrbgems/mruby-compiler/core/y.tab.c" break; case 377: /* block_param: f_arg opt_block_args_tail */ -#line 3535 "mrbgems/mruby-compiler/core/parse.y" +#line 3544 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 9655 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9664 "mrbgems/mruby-compiler/core/y.tab.c" break; case 378: /* block_param: f_block_optarg ',' f_rest_arg opt_block_args_tail */ -#line 3539 "mrbgems/mruby-compiler/core/parse.y" +#line 3548 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9663 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9672 "mrbgems/mruby-compiler/core/y.tab.c" break; case 379: /* block_param: f_block_optarg ',' f_rest_arg ',' f_arg opt_block_args_tail */ -#line 3543 "mrbgems/mruby-compiler/core/parse.y" +#line 3552 "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 9671 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9680 "mrbgems/mruby-compiler/core/y.tab.c" break; case 380: /* block_param: f_block_optarg opt_block_args_tail */ -#line 3547 "mrbgems/mruby-compiler/core/parse.y" +#line 3556 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9679 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9688 "mrbgems/mruby-compiler/core/y.tab.c" break; case 381: /* block_param: f_block_optarg ',' f_arg opt_block_args_tail */ -#line 3551 "mrbgems/mruby-compiler/core/parse.y" +#line 3560 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9687 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9696 "mrbgems/mruby-compiler/core/y.tab.c" break; case 382: /* block_param: f_rest_arg opt_block_args_tail */ -#line 3555 "mrbgems/mruby-compiler/core/parse.y" +#line 3564 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9695 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9704 "mrbgems/mruby-compiler/core/y.tab.c" break; case 383: /* block_param: f_rest_arg ',' f_arg opt_block_args_tail */ -#line 3559 "mrbgems/mruby-compiler/core/parse.y" +#line 3568 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9703 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9712 "mrbgems/mruby-compiler/core/y.tab.c" break; case 384: /* block_param: block_args_tail */ -#line 3563 "mrbgems/mruby-compiler/core/parse.y" +#line 3572 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 9711 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 385: /* opt_block_param: none */ -#line 3569 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_blk(p); - (yyval.nd) = 0; - } #line 9720 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 386: /* opt_block_param: block_param_def */ -#line 3574 "mrbgems/mruby-compiler/core/parse.y" - { - p->cmd_start = TRUE; - (yyval.nd) = (yyvsp[0].nd); + case 385: /* opt_block_param: none */ +#line 3578 "mrbgems/mruby-compiler/core/parse.y" + { + local_add_blk(p); + (yyval.nd) = 0; } #line 9729 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 386: /* opt_block_param: block_param_def */ +#line 3583 "mrbgems/mruby-compiler/core/parse.y" + { + p->cmd_start = TRUE; + (yyval.nd) = (yyvsp[0].nd); + } +#line 9738 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 387: /* $@25: %empty */ -#line 3580 "mrbgems/mruby-compiler/core/parse.y" +#line 3589 "mrbgems/mruby-compiler/core/parse.y" {local_add_blk(p);} -#line 9735 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9744 "mrbgems/mruby-compiler/core/y.tab.c" break; case 388: /* block_param_def: '|' $@25 opt_bv_decl '|' */ -#line 3581 "mrbgems/mruby-compiler/core/parse.y" +#line 3590 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 9743 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 389: /* block_param_def: "||" */ -#line 3585 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_blk(p); - (yyval.nd) = 0; - } #line 9752 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 389: /* block_param_def: "||" */ +#line 3594 "mrbgems/mruby-compiler/core/parse.y" + { + local_add_blk(p); + (yyval.nd) = 0; + } +#line 9761 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 390: /* block_param_def: '|' block_param opt_bv_decl '|' */ -#line 3590 "mrbgems/mruby-compiler/core/parse.y" +#line 3599 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-2].nd); } -#line 9760 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9769 "mrbgems/mruby-compiler/core/y.tab.c" break; case 391: /* opt_bv_decl: opt_nl */ -#line 3596 "mrbgems/mruby-compiler/core/parse.y" +#line 3605 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 9768 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9777 "mrbgems/mruby-compiler/core/y.tab.c" break; case 392: /* opt_bv_decl: opt_nl ';' bv_decls opt_nl */ -#line 3600 "mrbgems/mruby-compiler/core/parse.y" +#line 3609 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 9776 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 395: /* bvar: "local variable or method" */ -#line 3610 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_f(p, (yyvsp[0].id)); - new_bv(p, (yyvsp[0].id)); - } #line 9785 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 395: /* bvar: "local variable or method" */ +#line 3619 "mrbgems/mruby-compiler/core/parse.y" + { + local_add_f(p, (yyvsp[0].id)); + new_bv(p, (yyvsp[0].id)); + } +#line 9794 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 397: /* f_larglist: '(' f_args opt_bv_decl ')' */ -#line 3618 "mrbgems/mruby-compiler/core/parse.y" +#line 3627 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-2].nd); } -#line 9793 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9802 "mrbgems/mruby-compiler/core/y.tab.c" break; case 398: /* f_larglist: f_args */ -#line 3622 "mrbgems/mruby-compiler/core/parse.y" +#line 3631 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 9801 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9810 "mrbgems/mruby-compiler/core/y.tab.c" break; case 399: /* lambda_body: tLAMBEG compstmt '}' */ -#line 3628 "mrbgems/mruby-compiler/core/parse.y" +#line 3637 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9809 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9818 "mrbgems/mruby-compiler/core/y.tab.c" break; case 400: /* lambda_body: "'do' for lambda" bodystmt "'end'" */ -#line 3632 "mrbgems/mruby-compiler/core/parse.y" +#line 3641 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9817 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9826 "mrbgems/mruby-compiler/core/y.tab.c" break; case 401: /* @26: %empty */ -#line 3638 "mrbgems/mruby-compiler/core/parse.y" +#line 3647 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 9827 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9836 "mrbgems/mruby-compiler/core/y.tab.c" break; case 402: /* do_block: "'do' for block" @26 opt_block_param bodystmt "'end'" */ -#line 3646 "mrbgems/mruby-compiler/core/parse.y" +#line 3655 "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 9838 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9847 "mrbgems/mruby-compiler/core/y.tab.c" break; case 403: /* block_call: command do_block */ -#line 3655 "mrbgems/mruby-compiler/core/parse.y" +#line 3664 "mrbgems/mruby-compiler/core/parse.y" { call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = (yyvsp[-1].nd); } -#line 9847 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9856 "mrbgems/mruby-compiler/core/y.tab.c" break; case 404: /* block_call: block_call call_op2 operation2 opt_paren_args */ -#line 3660 "mrbgems/mruby-compiler/core/parse.y" +#line 3669 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 9855 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 405: /* block_call: block_call call_op2 operation2 opt_paren_args brace_block */ -#line 3664 "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 9864 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 406: /* block_call: block_call call_op2 operation2 command_args do_block */ -#line 3669 "mrbgems/mruby-compiler/core/parse.y" + case 405: /* block_call: block_call call_op2 operation2 opt_paren_args brace_block */ +#line 3673 "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)); @@ -9872,130 +9872,139 @@ yyreduce: #line 9873 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 406: /* block_call: block_call call_op2 operation2 command_args do_block */ +#line 3678 "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 9882 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 407: /* method_call: operation paren_args */ -#line 3676 "mrbgems/mruby-compiler/core/parse.y" +#line 3685 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 9881 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9890 "mrbgems/mruby-compiler/core/y.tab.c" break; case 408: /* method_call: primary_value call_op operation2 opt_paren_args */ -#line 3680 "mrbgems/mruby-compiler/core/parse.y" +#line 3689 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 9889 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9898 "mrbgems/mruby-compiler/core/y.tab.c" break; case 409: /* method_call: primary_value "::" operation2 paren_args */ -#line 3684 "mrbgems/mruby-compiler/core/parse.y" +#line 3693 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 9897 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9906 "mrbgems/mruby-compiler/core/y.tab.c" break; case 410: /* method_call: primary_value "::" operation3 */ -#line 3688 "mrbgems/mruby-compiler/core/parse.y" +#line 3697 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 9905 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9914 "mrbgems/mruby-compiler/core/y.tab.c" break; case 411: /* method_call: primary_value call_op paren_args */ -#line 3692 "mrbgems/mruby-compiler/core/parse.y" +#line 3701 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), (yyvsp[-1].num)); } -#line 9913 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9922 "mrbgems/mruby-compiler/core/y.tab.c" break; case 412: /* method_call: primary_value "::" paren_args */ -#line 3696 "mrbgems/mruby-compiler/core/parse.y" +#line 3705 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), tCOLON2); } -#line 9921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9930 "mrbgems/mruby-compiler/core/y.tab.c" break; case 413: /* method_call: "'super'" paren_args */ -#line 3700 "mrbgems/mruby-compiler/core/parse.y" +#line 3709 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 9929 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9938 "mrbgems/mruby-compiler/core/y.tab.c" break; case 414: /* method_call: "'super'" */ -#line 3704 "mrbgems/mruby-compiler/core/parse.y" +#line 3713 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_zsuper(p); } -#line 9937 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9946 "mrbgems/mruby-compiler/core/y.tab.c" break; case 415: /* method_call: primary_value '[' opt_call_args ']' */ -#line 3708 "mrbgems/mruby-compiler/core/parse.y" +#line 3717 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 9945 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9954 "mrbgems/mruby-compiler/core/y.tab.c" break; case 416: /* @27: %empty */ -#line 3714 "mrbgems/mruby-compiler/core/parse.y" +#line 3723 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 9955 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9964 "mrbgems/mruby-compiler/core/y.tab.c" break; case 417: /* brace_block: '{' @27 opt_block_param compstmt '}' */ -#line 3721 "mrbgems/mruby-compiler/core/parse.y" +#line 3730 "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 9966 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9975 "mrbgems/mruby-compiler/core/y.tab.c" break; case 418: /* @28: %empty */ -#line 3728 "mrbgems/mruby-compiler/core/parse.y" +#line 3737 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 9976 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9985 "mrbgems/mruby-compiler/core/y.tab.c" break; case 419: /* brace_block: "'do'" @28 opt_block_param bodystmt "'end'" */ -#line 3735 "mrbgems/mruby-compiler/core/parse.y" +#line 3744 "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 9987 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9996 "mrbgems/mruby-compiler/core/y.tab.c" break; case 420: /* case_body: "'when'" args then compstmt cases */ -#line 3746 "mrbgems/mruby-compiler/core/parse.y" +#line 3755 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(cons((yyvsp[-3].nd), (yyvsp[-1].nd)), (yyvsp[0].nd)); } -#line 9995 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10004 "mrbgems/mruby-compiler/core/y.tab.c" break; case 421: /* cases: opt_else */ -#line 3752 "mrbgems/mruby-compiler/core/parse.y" +#line 3761 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[0].nd)) { (yyval.nd) = cons(cons(0, (yyvsp[0].nd)), 0); @@ -10004,155 +10013,155 @@ yyreduce: (yyval.nd) = 0; } } -#line 10008 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10017 "mrbgems/mruby-compiler/core/y.tab.c" break; case 423: /* opt_rescue: "'rescue'" exc_list exc_var then compstmt opt_rescue */ -#line 3766 "mrbgems/mruby-compiler/core/parse.y" +#line 3775 "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 10017 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10026 "mrbgems/mruby-compiler/core/y.tab.c" break; case 425: /* exc_list: arg */ -#line 3774 "mrbgems/mruby-compiler/core/parse.y" +#line 3783 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10025 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10034 "mrbgems/mruby-compiler/core/y.tab.c" break; case 428: /* exc_var: "=>" lhs */ -#line 3782 "mrbgems/mruby-compiler/core/parse.y" +#line 3791 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 10033 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10042 "mrbgems/mruby-compiler/core/y.tab.c" break; case 430: /* opt_ensure: "'ensure'" compstmt */ -#line 3789 "mrbgems/mruby-compiler/core/parse.y" +#line 3798 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 10041 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10050 "mrbgems/mruby-compiler/core/y.tab.c" break; case 437: /* string: string string_fragment */ -#line 3803 "mrbgems/mruby-compiler/core/parse.y" +#line 3812 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = append((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10049 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 438: /* string_fragment: "character literal" */ -#line 3809 "mrbgems/mruby-compiler/core/parse.y" - { - /* tCHAR is (len . str), wrap as cons list */ - (yyval.nd) = list1((yyvsp[0].nd)); - } #line 10058 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 439: /* string_fragment: tSTRING */ -#line 3814 "mrbgems/mruby-compiler/core/parse.y" + case 438: /* string_fragment: "character literal" */ +#line 3818 "mrbgems/mruby-compiler/core/parse.y" { - /* tSTRING is (len . str), wrap as cons list */ + /* tCHAR is (len . str), wrap as cons list */ (yyval.nd) = list1((yyvsp[0].nd)); } #line 10067 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 440: /* string_fragment: "string literal" tSTRING */ -#line 3819 "mrbgems/mruby-compiler/core/parse.y" + case 439: /* string_fragment: tSTRING */ +#line 3823 "mrbgems/mruby-compiler/core/parse.y" { - /* $2 is (len . str), wrap as cons list */ + /* tSTRING is (len . str), wrap as cons list */ (yyval.nd) = list1((yyvsp[0].nd)); } #line 10076 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 440: /* string_fragment: "string literal" tSTRING */ +#line 3828 "mrbgems/mruby-compiler/core/parse.y" + { + /* $2 is (len . str), wrap as cons list */ + (yyval.nd) = list1((yyvsp[0].nd)); + } +#line 10085 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 441: /* string_fragment: "string literal" string_rep tSTRING */ -#line 3824 "mrbgems/mruby-compiler/core/parse.y" +#line 3833 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10084 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10093 "mrbgems/mruby-compiler/core/y.tab.c" break; case 443: /* string_rep: string_rep string_interp */ -#line 3831 "mrbgems/mruby-compiler/core/parse.y" +#line 3840 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = append((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10092 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 444: /* string_interp: tSTRING_MID */ -#line 3837 "mrbgems/mruby-compiler/core/parse.y" - { - /* $1 is already in (len . str) format */ - (yyval.nd) = list1((yyvsp[0].nd)); - } #line 10101 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 444: /* string_interp: tSTRING_MID */ +#line 3846 "mrbgems/mruby-compiler/core/parse.y" + { + /* $1 is already in (len . str) format */ + (yyval.nd) = list1((yyvsp[0].nd)); + } +#line 10110 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 445: /* @29: %empty */ -#line 3842 "mrbgems/mruby-compiler/core/parse.y" +#line 3851 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push_strterm(p); } -#line 10109 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10118 "mrbgems/mruby-compiler/core/y.tab.c" break; case 446: /* string_interp: tSTRING_PART @29 compstmt '}' */ -#line 3847 "mrbgems/mruby-compiler/core/parse.y" +#line 3856 "mrbgems/mruby-compiler/core/parse.y" { pop_strterm(p,(yyvsp[-2].nd)); /* $1 is already in (len . str) format, create (-1 . node) for expression */ node *expr_elem = cons(int_to_node(-1), (yyvsp[-1].nd)); (yyval.nd) = list2((yyvsp[-3].nd), expr_elem); } -#line 10120 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10129 "mrbgems/mruby-compiler/core/y.tab.c" break; case 447: /* string_interp: tLITERAL_DELIM */ -#line 3854 "mrbgems/mruby-compiler/core/parse.y" +#line 3863 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_literal_delim(p)); } -#line 10128 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10137 "mrbgems/mruby-compiler/core/y.tab.c" break; case 448: /* string_interp: tHD_LITERAL_DELIM heredoc_bodies */ -#line 3858 "mrbgems/mruby-compiler/core/parse.y" +#line 3867 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_literal_delim(p)); } -#line 10136 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10145 "mrbgems/mruby-compiler/core/y.tab.c" break; case 449: /* xstring: tXSTRING_BEG tXSTRING */ -#line 3864 "mrbgems/mruby-compiler/core/parse.y" +#line 3873 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((yyvsp[0].nd), (node*)NULL); } -#line 10144 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10153 "mrbgems/mruby-compiler/core/y.tab.c" break; case 450: /* xstring: tXSTRING_BEG string_rep tXSTRING */ -#line 3868 "mrbgems/mruby-compiler/core/parse.y" +#line 3877 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10152 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10161 "mrbgems/mruby-compiler/core/y.tab.c" break; case 451: /* regexp: tREGEXP_BEG tREGEXP */ -#line 3874 "mrbgems/mruby-compiler/core/parse.y" +#line 3883 "mrbgems/mruby-compiler/core/parse.y" { node *data = (yyvsp[0].nd); /* ((len . pattern) . (flags . encoding)) */ const char *flags = (const char*)data->cdr->car; @@ -10161,11 +10170,11 @@ yyreduce: node *pattern_list = cons(data->car, (node*)NULL); (yyval.nd) = new_dregx(p, pattern_list, flags, encoding); } -#line 10165 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10174 "mrbgems/mruby-compiler/core/y.tab.c" break; case 452: /* regexp: tREGEXP_BEG string_rep tREGEXP */ -#line 3883 "mrbgems/mruby-compiler/core/parse.y" +#line 3892 "mrbgems/mruby-compiler/core/parse.y" { node *data = (yyvsp[0].nd); /* ((len . pattern) . (flags . encoding)) */ const char *flags = (const char*)data->cdr->car; @@ -10174,47 +10183,47 @@ yyreduce: node *complete_list = push((yyvsp[-1].nd), data->car); (yyval.nd) = new_dregx(p, complete_list, flags, encoding); } -#line 10178 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10187 "mrbgems/mruby-compiler/core/y.tab.c" break; case 456: /* heredoc_body: tHEREDOC_END */ -#line 3901 "mrbgems/mruby-compiler/core/parse.y" +#line 3910 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info *info = parsing_heredoc_info(p); info->doc = push(info->doc, new_str_empty(p)); heredoc_end(p); } -#line 10188 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10197 "mrbgems/mruby-compiler/core/y.tab.c" break; case 457: /* heredoc_body: heredoc_string_rep tHEREDOC_END */ -#line 3907 "mrbgems/mruby-compiler/core/parse.y" +#line 3916 "mrbgems/mruby-compiler/core/parse.y" { heredoc_end(p); } -#line 10196 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10205 "mrbgems/mruby-compiler/core/y.tab.c" break; case 460: /* heredoc_string_interp: tHD_STRING_MID */ -#line 3917 "mrbgems/mruby-compiler/core/parse.y" +#line 3926 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info *info = parsing_heredoc_info(p); info->doc = push(info->doc, (yyvsp[0].nd)); heredoc_treat_nextline(p); } -#line 10206 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10215 "mrbgems/mruby-compiler/core/y.tab.c" break; case 461: /* @30: %empty */ -#line 3923 "mrbgems/mruby-compiler/core/parse.y" +#line 3932 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push_strterm(p); } -#line 10214 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10223 "mrbgems/mruby-compiler/core/y.tab.c" break; case 462: /* heredoc_string_interp: tHD_STRING_PART @30 compstmt '}' */ -#line 3928 "mrbgems/mruby-compiler/core/parse.y" +#line 3937 "mrbgems/mruby-compiler/core/parse.y" { pop_strterm(p, (yyvsp[-2].nd)); parser_heredoc_info *info = parsing_heredoc_info(p); @@ -10222,37 +10231,37 @@ yyreduce: node *expr_elem = cons(int_to_node(-1), (yyvsp[-1].nd)); info->doc = push(push(info->doc, (yyvsp[-3].nd)), expr_elem); } -#line 10226 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10235 "mrbgems/mruby-compiler/core/y.tab.c" break; case 463: /* words: tWORDS_BEG tSTRING */ -#line 3938 "mrbgems/mruby-compiler/core/parse.y" +#line 3947 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_words(p, list1((yyvsp[0].nd))); } -#line 10234 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10243 "mrbgems/mruby-compiler/core/y.tab.c" break; case 464: /* words: tWORDS_BEG string_rep tSTRING */ -#line 3942 "mrbgems/mruby-compiler/core/parse.y" +#line 3951 "mrbgems/mruby-compiler/core/parse.y" { node *n = (yyvsp[-1].nd); n = push(n, (yyvsp[0].nd)); (yyval.nd) = new_words(p, n); } -#line 10244 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10253 "mrbgems/mruby-compiler/core/y.tab.c" break; case 465: /* symbol: basic_symbol */ -#line 3950 "mrbgems/mruby-compiler/core/parse.y" +#line 3959 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_sym(p, (yyvsp[0].id)); } -#line 10252 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10261 "mrbgems/mruby-compiler/core/y.tab.c" break; case 466: /* symbol: "symbol" "string literal" string_rep tSTRING */ -#line 3954 "mrbgems/mruby-compiler/core/parse.y" +#line 3963 "mrbgems/mruby-compiler/core/parse.y" { node *n = (yyvsp[-1].nd); p->lstate = EXPR_ENDARG; @@ -10264,183 +10273,183 @@ yyreduce: } (yyval.nd) = new_dsym(p, new_str(p, n)); } -#line 10268 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10277 "mrbgems/mruby-compiler/core/y.tab.c" break; case 467: /* symbol: "symbol" "numbered parameter" */ -#line 3966 "mrbgems/mruby-compiler/core/parse.y" +#line 3975 "mrbgems/mruby-compiler/core/parse.y" { mrb_sym sym = intern_numparam((yyvsp[0].num)); (yyval.nd) = new_sym(p, sym); } -#line 10277 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10286 "mrbgems/mruby-compiler/core/y.tab.c" break; case 468: /* basic_symbol: "symbol" sym */ -#line 3973 "mrbgems/mruby-compiler/core/parse.y" +#line 3982 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_END; (yyval.id) = (yyvsp[0].id); } -#line 10286 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10295 "mrbgems/mruby-compiler/core/y.tab.c" break; case 473: /* sym: tSTRING */ -#line 3984 "mrbgems/mruby-compiler/core/parse.y" +#line 3993 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 10294 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10303 "mrbgems/mruby-compiler/core/y.tab.c" break; case 474: /* sym: "string literal" tSTRING */ -#line 3988 "mrbgems/mruby-compiler/core/parse.y" +#line 3997 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 10302 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10311 "mrbgems/mruby-compiler/core/y.tab.c" break; case 475: /* symbols: tSYMBOLS_BEG tSTRING */ -#line 3994 "mrbgems/mruby-compiler/core/parse.y" +#line 4003 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_symbols(p, list1((yyvsp[0].nd))); } -#line 10310 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10319 "mrbgems/mruby-compiler/core/y.tab.c" break; case 476: /* symbols: tSYMBOLS_BEG string_rep tSTRING */ -#line 3998 "mrbgems/mruby-compiler/core/parse.y" +#line 4007 "mrbgems/mruby-compiler/core/parse.y" { node *n = (yyvsp[-1].nd); n = push(n, (yyvsp[0].nd)); (yyval.nd) = new_symbols(p, n); } -#line 10320 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10329 "mrbgems/mruby-compiler/core/y.tab.c" break; case 479: /* numeric: tUMINUS_NUM "integer literal" */ -#line 4008 "mrbgems/mruby-compiler/core/parse.y" +#line 4017 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_negate(p, (yyvsp[0].nd)); } -#line 10328 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10337 "mrbgems/mruby-compiler/core/y.tab.c" break; case 480: /* numeric: tUMINUS_NUM "float literal" */ -#line 4012 "mrbgems/mruby-compiler/core/parse.y" +#line 4021 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_negate(p, (yyvsp[0].nd)); } -#line 10336 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10345 "mrbgems/mruby-compiler/core/y.tab.c" break; case 481: /* variable: "local variable or method" */ -#line 4018 "mrbgems/mruby-compiler/core/parse.y" +#line 4027 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_lvar(p, (yyvsp[0].id)); } -#line 10344 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10353 "mrbgems/mruby-compiler/core/y.tab.c" break; case 482: /* variable: "instance variable" */ -#line 4022 "mrbgems/mruby-compiler/core/parse.y" +#line 4031 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_ivar(p, (yyvsp[0].id)); } -#line 10352 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10361 "mrbgems/mruby-compiler/core/y.tab.c" break; case 483: /* variable: "global variable" */ -#line 4026 "mrbgems/mruby-compiler/core/parse.y" +#line 4035 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_gvar(p, (yyvsp[0].id)); } -#line 10360 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10369 "mrbgems/mruby-compiler/core/y.tab.c" break; case 484: /* variable: "class variable" */ -#line 4030 "mrbgems/mruby-compiler/core/parse.y" +#line 4039 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_cvar(p, (yyvsp[0].id)); } -#line 10368 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10377 "mrbgems/mruby-compiler/core/y.tab.c" break; case 485: /* variable: "constant" */ -#line 4034 "mrbgems/mruby-compiler/core/parse.y" +#line 4043 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_const(p, (yyvsp[0].id)); } -#line 10376 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10385 "mrbgems/mruby-compiler/core/y.tab.c" break; case 486: /* var_lhs: variable */ -#line 4040 "mrbgems/mruby-compiler/core/parse.y" +#line 4049 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 10384 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10393 "mrbgems/mruby-compiler/core/y.tab.c" break; case 487: /* var_lhs: "numbered parameter" */ -#line 4044 "mrbgems/mruby-compiler/core/parse.y" +#line 4053 "mrbgems/mruby-compiler/core/parse.y" { yyerror(&(yylsp[0]), p, "can't assign to numbered parameter"); } -#line 10392 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10401 "mrbgems/mruby-compiler/core/y.tab.c" break; case 488: /* var_ref: variable */ -#line 4050 "mrbgems/mruby-compiler/core/parse.y" +#line 4059 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = var_reference(p, (yyvsp[0].nd)); } -#line 10400 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10409 "mrbgems/mruby-compiler/core/y.tab.c" break; case 489: /* var_ref: "numbered parameter" */ -#line 4054 "mrbgems/mruby-compiler/core/parse.y" +#line 4063 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nvar(p, (yyvsp[0].num)); } -#line 10408 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10417 "mrbgems/mruby-compiler/core/y.tab.c" break; case 490: /* var_ref: "'nil'" */ -#line 4058 "mrbgems/mruby-compiler/core/parse.y" +#line 4067 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nil(p); } -#line 10416 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10425 "mrbgems/mruby-compiler/core/y.tab.c" break; case 491: /* var_ref: "'self'" */ -#line 4062 "mrbgems/mruby-compiler/core/parse.y" +#line 4071 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_self(p); } -#line 10424 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10433 "mrbgems/mruby-compiler/core/y.tab.c" break; case 492: /* var_ref: "'true'" */ -#line 4066 "mrbgems/mruby-compiler/core/parse.y" +#line 4075 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_true(p); } -#line 10432 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10441 "mrbgems/mruby-compiler/core/y.tab.c" break; case 493: /* var_ref: "'false'" */ -#line 4070 "mrbgems/mruby-compiler/core/parse.y" +#line 4079 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_false(p); } -#line 10440 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10449 "mrbgems/mruby-compiler/core/y.tab.c" break; case 494: /* var_ref: "'__FILE__'" */ -#line 4074 "mrbgems/mruby-compiler/core/parse.y" +#line 4083 "mrbgems/mruby-compiler/core/parse.y" { const char *fn = mrb_sym_name_len(p->mrb, p->filename_sym, NULL); if (!fn) { @@ -10448,686 +10457,686 @@ yyreduce: } (yyval.nd) = new_str(p, cons(cons(int_to_node(strlen(fn)), (node*)fn), (node*)NULL)); } -#line 10452 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10461 "mrbgems/mruby-compiler/core/y.tab.c" break; case 495: /* var_ref: "'__LINE__'" */ -#line 4082 "mrbgems/mruby-compiler/core/parse.y" +#line 4091 "mrbgems/mruby-compiler/core/parse.y" { char buf[16]; dump_int(p->lineno, buf); (yyval.nd) = new_int(p, buf, 10, 0); } -#line 10463 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10472 "mrbgems/mruby-compiler/core/y.tab.c" break; case 496: /* var_ref: "'__ENCODING__'" */ -#line 4089 "mrbgems/mruby-compiler/core/parse.y" +#line 4098 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, MRB_SYM_2(p->mrb, __ENCODING__), 0); } -#line 10471 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10480 "mrbgems/mruby-compiler/core/y.tab.c" break; case 499: /* superclass: %empty */ -#line 4099 "mrbgems/mruby-compiler/core/parse.y" +#line 4108 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 10479 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 500: /* $@31: %empty */ -#line 4103 "mrbgems/mruby-compiler/core/parse.y" - { - p->lstate = EXPR_BEG; - p->cmd_start = TRUE; - } #line 10488 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 500: /* $@31: %empty */ +#line 4112 "mrbgems/mruby-compiler/core/parse.y" + { + p->lstate = EXPR_BEG; + p->cmd_start = TRUE; + } +#line 10497 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 501: /* superclass: '<' $@31 expr_value term */ -#line 4108 "mrbgems/mruby-compiler/core/parse.y" +#line 4117 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 10496 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10505 "mrbgems/mruby-compiler/core/y.tab.c" break; case 504: /* f_arglist_paren: '(' f_args rparen */ -#line 4124 "mrbgems/mruby-compiler/core/parse.y" +#line 4133 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 10506 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10515 "mrbgems/mruby-compiler/core/y.tab.c" break; case 505: /* f_arglist_paren: '(' f_arg ',' tBDOT3 rparen */ -#line 4130 "mrbgems/mruby-compiler/core/parse.y" +#line 4139 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_dots(p, (yyvsp[-3].nd)); } -#line 10514 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10523 "mrbgems/mruby-compiler/core/y.tab.c" break; case 506: /* f_arglist_paren: '(' tBDOT3 rparen */ -#line 4134 "mrbgems/mruby-compiler/core/parse.y" +#line 4143 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_dots(p, 0); } -#line 10522 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10531 "mrbgems/mruby-compiler/core/y.tab.c" break; case 508: /* f_arglist: f_args term */ -#line 4141 "mrbgems/mruby-compiler/core/parse.y" +#line 4150 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 10530 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10539 "mrbgems/mruby-compiler/core/y.tab.c" break; case 509: /* f_arglist: f_arg ',' tBDOT3 term */ -#line 4145 "mrbgems/mruby-compiler/core/parse.y" +#line 4154 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_dots(p, (yyvsp[-3].nd)); } -#line 10538 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10547 "mrbgems/mruby-compiler/core/y.tab.c" break; case 510: /* f_arglist: "..." term */ -#line 4149 "mrbgems/mruby-compiler/core/parse.y" +#line 4158 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_dots(p, 0); } -#line 10546 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10555 "mrbgems/mruby-compiler/core/y.tab.c" break; case 511: /* f_label: "local variable or method" "label" */ -#line 4155 "mrbgems/mruby-compiler/core/parse.y" +#line 4164 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); } -#line 10554 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10563 "mrbgems/mruby-compiler/core/y.tab.c" break; case 512: /* f_label: "numbered parameter" "label" */ -#line 4159 "mrbgems/mruby-compiler/core/parse.y" +#line 4168 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); } -#line 10562 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10571 "mrbgems/mruby-compiler/core/y.tab.c" break; case 513: /* f_kw: f_label arg */ -#line 4165 "mrbgems/mruby-compiler/core/parse.y" +#line 4174 "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 10572 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 514: /* f_kw: f_label */ -#line 4171 "mrbgems/mruby-compiler/core/parse.y" - { - (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); - local_unnest(p); - } #line 10581 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 514: /* f_kw: f_label */ +#line 4180 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); + local_unnest(p); + } +#line 10590 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 515: /* f_block_kw: f_label primary_value */ -#line 4178 "mrbgems/mruby-compiler/core/parse.y" +#line 4187 "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 10591 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10600 "mrbgems/mruby-compiler/core/y.tab.c" break; case 516: /* f_block_kw: f_label */ -#line 4184 "mrbgems/mruby-compiler/core/parse.y" +#line 4193 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 10600 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10609 "mrbgems/mruby-compiler/core/y.tab.c" break; case 517: /* f_block_kwarg: f_block_kw */ -#line 4191 "mrbgems/mruby-compiler/core/parse.y" +#line 4200 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10608 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10617 "mrbgems/mruby-compiler/core/y.tab.c" break; case 518: /* f_block_kwarg: f_block_kwarg ',' f_block_kw */ -#line 4195 "mrbgems/mruby-compiler/core/parse.y" +#line 4204 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10616 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10625 "mrbgems/mruby-compiler/core/y.tab.c" break; case 519: /* f_kwarg: f_kw */ -#line 4201 "mrbgems/mruby-compiler/core/parse.y" +#line 4210 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10624 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10633 "mrbgems/mruby-compiler/core/y.tab.c" break; case 520: /* f_kwarg: f_kwarg ',' f_kw */ -#line 4205 "mrbgems/mruby-compiler/core/parse.y" +#line 4214 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10632 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10641 "mrbgems/mruby-compiler/core/y.tab.c" break; case 523: /* f_kwrest: kwrest_mark "local variable or method" */ -#line 4215 "mrbgems/mruby-compiler/core/parse.y" +#line 4224 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 10640 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10649 "mrbgems/mruby-compiler/core/y.tab.c" break; case 524: /* f_kwrest: kwrest_mark */ -#line 4219 "mrbgems/mruby-compiler/core/parse.y" +#line 4228 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 10648 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10657 "mrbgems/mruby-compiler/core/y.tab.c" break; case 525: /* args_tail: f_kwarg ',' f_kwrest opt_f_block_arg */ -#line 4225 "mrbgems/mruby-compiler/core/parse.y" +#line 4234 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].id)); } -#line 10656 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10665 "mrbgems/mruby-compiler/core/y.tab.c" break; case 526: /* args_tail: f_kwarg opt_f_block_arg */ -#line 4229 "mrbgems/mruby-compiler/core/parse.y" +#line 4238 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 10664 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10673 "mrbgems/mruby-compiler/core/y.tab.c" break; case 527: /* args_tail: f_kwrest opt_f_block_arg */ -#line 4233 "mrbgems/mruby-compiler/core/parse.y" +#line 4242 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].id), (yyvsp[0].id)); } -#line 10672 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10681 "mrbgems/mruby-compiler/core/y.tab.c" break; case 528: /* args_tail: f_block_arg */ -#line 4237 "mrbgems/mruby-compiler/core/parse.y" +#line 4246 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 10680 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10689 "mrbgems/mruby-compiler/core/y.tab.c" break; case 529: /* opt_args_tail: ',' args_tail */ -#line 4243 "mrbgems/mruby-compiler/core/parse.y" +#line 4252 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 10688 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10697 "mrbgems/mruby-compiler/core/y.tab.c" break; case 530: /* opt_args_tail: %empty */ -#line 4247 "mrbgems/mruby-compiler/core/parse.y" +#line 4256 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 10696 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10705 "mrbgems/mruby-compiler/core/y.tab.c" break; case 531: /* f_args: f_arg ',' f_optarg ',' f_rest_arg opt_args_tail */ -#line 4253 "mrbgems/mruby-compiler/core/parse.y" +#line 4262 "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 10704 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10713 "mrbgems/mruby-compiler/core/y.tab.c" break; case 532: /* f_args: f_arg ',' f_optarg ',' f_rest_arg ',' f_arg opt_args_tail */ -#line 4257 "mrbgems/mruby-compiler/core/parse.y" +#line 4266 "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 10712 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10721 "mrbgems/mruby-compiler/core/y.tab.c" break; case 533: /* f_args: f_arg ',' f_optarg opt_args_tail */ -#line 4261 "mrbgems/mruby-compiler/core/parse.y" +#line 4270 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 10720 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10729 "mrbgems/mruby-compiler/core/y.tab.c" break; case 534: /* f_args: f_arg ',' f_optarg ',' f_arg opt_args_tail */ -#line 4265 "mrbgems/mruby-compiler/core/parse.y" +#line 4274 "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 10728 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10737 "mrbgems/mruby-compiler/core/y.tab.c" break; case 535: /* f_args: f_arg ',' f_rest_arg opt_args_tail */ -#line 4269 "mrbgems/mruby-compiler/core/parse.y" +#line 4278 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10736 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10745 "mrbgems/mruby-compiler/core/y.tab.c" break; case 536: /* f_args: f_arg ',' f_rest_arg ',' f_arg opt_args_tail */ -#line 4273 "mrbgems/mruby-compiler/core/parse.y" +#line 4282 "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 10744 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10753 "mrbgems/mruby-compiler/core/y.tab.c" break; case 537: /* f_args: f_arg opt_args_tail */ -#line 4277 "mrbgems/mruby-compiler/core/parse.y" +#line 4286 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 10752 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10761 "mrbgems/mruby-compiler/core/y.tab.c" break; case 538: /* f_args: f_optarg ',' f_rest_arg opt_args_tail */ -#line 4281 "mrbgems/mruby-compiler/core/parse.y" +#line 4290 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10760 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10769 "mrbgems/mruby-compiler/core/y.tab.c" break; case 539: /* f_args: f_optarg ',' f_rest_arg ',' f_arg opt_args_tail */ -#line 4285 "mrbgems/mruby-compiler/core/parse.y" +#line 4294 "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 10768 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10777 "mrbgems/mruby-compiler/core/y.tab.c" break; case 540: /* f_args: f_optarg opt_args_tail */ -#line 4289 "mrbgems/mruby-compiler/core/parse.y" +#line 4298 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 10776 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10785 "mrbgems/mruby-compiler/core/y.tab.c" break; case 541: /* f_args: f_optarg ',' f_arg opt_args_tail */ -#line 4293 "mrbgems/mruby-compiler/core/parse.y" +#line 4302 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10784 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10793 "mrbgems/mruby-compiler/core/y.tab.c" break; case 542: /* f_args: f_rest_arg opt_args_tail */ -#line 4297 "mrbgems/mruby-compiler/core/parse.y" +#line 4306 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 10792 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10801 "mrbgems/mruby-compiler/core/y.tab.c" break; case 543: /* f_args: f_rest_arg ',' f_arg opt_args_tail */ -#line 4301 "mrbgems/mruby-compiler/core/parse.y" +#line 4310 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 10800 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10809 "mrbgems/mruby-compiler/core/y.tab.c" break; case 544: /* f_args: args_tail */ -#line 4305 "mrbgems/mruby-compiler/core/parse.y" +#line 4314 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 10808 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 545: /* f_args: %empty */ -#line 4309 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_f(p, 0); - (yyval.nd) = new_args(p, 0, 0, 0, 0, 0); - } #line 10817 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 546: /* f_bad_arg: "constant" */ -#line 4316 "mrbgems/mruby-compiler/core/parse.y" + case 545: /* f_args: %empty */ +#line 4318 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(&(yylsp[0]), p, "formal argument cannot be a constant"); - (yyval.nd) = 0; + local_add_f(p, 0); + (yyval.nd) = new_args(p, 0, 0, 0, 0, 0); } #line 10826 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 547: /* f_bad_arg: "instance variable" */ -#line 4321 "mrbgems/mruby-compiler/core/parse.y" + case 546: /* f_bad_arg: "constant" */ +#line 4325 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(&(yylsp[0]), p, "formal argument cannot be an instance variable"); + yyerror(&(yylsp[0]), p, "formal argument cannot be a constant"); (yyval.nd) = 0; } #line 10835 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 548: /* f_bad_arg: "global variable" */ -#line 4326 "mrbgems/mruby-compiler/core/parse.y" + case 547: /* f_bad_arg: "instance variable" */ +#line 4330 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(&(yylsp[0]), p, "formal argument cannot be a global variable"); + yyerror(&(yylsp[0]), p, "formal argument cannot be an instance variable"); (yyval.nd) = 0; } #line 10844 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 549: /* f_bad_arg: "class variable" */ -#line 4331 "mrbgems/mruby-compiler/core/parse.y" + case 548: /* f_bad_arg: "global variable" */ +#line 4335 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(&(yylsp[0]), p, "formal argument cannot be a class variable"); + yyerror(&(yylsp[0]), p, "formal argument cannot be a global variable"); (yyval.nd) = 0; } #line 10853 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 550: /* f_bad_arg: "numbered parameter" */ -#line 4336 "mrbgems/mruby-compiler/core/parse.y" + case 549: /* f_bad_arg: "class variable" */ +#line 4340 "mrbgems/mruby-compiler/core/parse.y" { - yyerror(&(yylsp[0]), p, "formal argument cannot be a numbered parameter"); + yyerror(&(yylsp[0]), p, "formal argument cannot be a class variable"); (yyval.nd) = 0; } #line 10862 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 551: /* f_norm_arg: f_bad_arg */ -#line 4343 "mrbgems/mruby-compiler/core/parse.y" + case 550: /* f_bad_arg: "numbered parameter" */ +#line 4345 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.id) = 0; + yyerror(&(yylsp[0]), p, "formal argument cannot be a numbered parameter"); + (yyval.nd) = 0; } -#line 10870 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10871 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 552: /* f_norm_arg: "local variable or method" */ -#line 4347 "mrbgems/mruby-compiler/core/parse.y" + case 551: /* f_norm_arg: f_bad_arg */ +#line 4352 "mrbgems/mruby-compiler/core/parse.y" { - local_add_f(p, (yyvsp[0].id)); - (yyval.id) = (yyvsp[0].id); + (yyval.id) = 0; } #line 10879 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 552: /* f_norm_arg: "local variable or method" */ +#line 4356 "mrbgems/mruby-compiler/core/parse.y" + { + local_add_f(p, (yyvsp[0].id)); + (yyval.id) = (yyvsp[0].id); + } +#line 10888 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 553: /* f_arg_item: f_norm_arg */ -#line 4354 "mrbgems/mruby-compiler/core/parse.y" +#line 4363 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_lvar(p, (yyvsp[0].id)); } -#line 10887 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10896 "mrbgems/mruby-compiler/core/y.tab.c" break; case 554: /* @32: %empty */ -#line 4358 "mrbgems/mruby-compiler/core/parse.y" +#line 4367 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = local_switch(p); } -#line 10895 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10904 "mrbgems/mruby-compiler/core/y.tab.c" break; case 555: /* f_arg_item: tLPAREN @32 f_margs rparen */ -#line 4362 "mrbgems/mruby-compiler/core/parse.y" +#line 4371 "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 10905 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10914 "mrbgems/mruby-compiler/core/y.tab.c" break; case 556: /* f_arg: f_arg_item */ -#line 4370 "mrbgems/mruby-compiler/core/parse.y" +#line 4379 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10913 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10922 "mrbgems/mruby-compiler/core/y.tab.c" break; case 557: /* f_arg: f_arg ',' f_arg_item */ -#line 4374 "mrbgems/mruby-compiler/core/parse.y" +#line 4383 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10930 "mrbgems/mruby-compiler/core/y.tab.c" break; case 558: /* f_opt_asgn: "local variable or method" '=' */ -#line 4380 "mrbgems/mruby-compiler/core/parse.y" +#line 4389 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[-1].id)); local_nest(p); (yyval.id) = (yyvsp[-1].id); } -#line 10931 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10940 "mrbgems/mruby-compiler/core/y.tab.c" break; case 559: /* f_opt: f_opt_asgn arg */ -#line 4388 "mrbgems/mruby-compiler/core/parse.y" +#line 4397 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(sym_to_node((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 10941 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10950 "mrbgems/mruby-compiler/core/y.tab.c" break; case 560: /* f_block_opt: f_opt_asgn primary_value */ -#line 4396 "mrbgems/mruby-compiler/core/parse.y" +#line 4405 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(sym_to_node((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 10951 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10960 "mrbgems/mruby-compiler/core/y.tab.c" break; case 561: /* f_block_optarg: f_block_opt */ -#line 4404 "mrbgems/mruby-compiler/core/parse.y" +#line 4413 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10959 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10968 "mrbgems/mruby-compiler/core/y.tab.c" break; case 562: /* f_block_optarg: f_block_optarg ',' f_block_opt */ -#line 4408 "mrbgems/mruby-compiler/core/parse.y" +#line 4417 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10967 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10976 "mrbgems/mruby-compiler/core/y.tab.c" break; case 563: /* f_optarg: f_opt */ -#line 4414 "mrbgems/mruby-compiler/core/parse.y" +#line 4423 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 10975 "mrbgems/mruby-compiler/core/y.tab.c" +#line 10984 "mrbgems/mruby-compiler/core/y.tab.c" break; case 564: /* f_optarg: f_optarg ',' f_opt */ -#line 4418 "mrbgems/mruby-compiler/core/parse.y" +#line 4427 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 10983 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 567: /* f_rest_arg: restarg_mark "local variable or method" */ -#line 4428 "mrbgems/mruby-compiler/core/parse.y" - { - local_add_f(p, (yyvsp[0].id)); - (yyval.id) = (yyvsp[0].id); - } #line 10992 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 568: /* f_rest_arg: restarg_mark */ -#line 4433 "mrbgems/mruby-compiler/core/parse.y" + case 567: /* f_rest_arg: restarg_mark "local variable or method" */ +#line 4437 "mrbgems/mruby-compiler/core/parse.y" { - (yyval.id) = intern_op(mul); - local_add_f(p, (yyval.id)); + local_add_f(p, (yyvsp[0].id)); + (yyval.id) = (yyvsp[0].id); } #line 11001 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 568: /* f_rest_arg: restarg_mark */ +#line 4442 "mrbgems/mruby-compiler/core/parse.y" + { + (yyval.id) = intern_op(mul); + local_add_f(p, (yyval.id)); + } +#line 11010 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 571: /* f_block_arg: blkarg_mark "local variable or method" */ -#line 4444 "mrbgems/mruby-compiler/core/parse.y" +#line 4453 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 11009 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11018 "mrbgems/mruby-compiler/core/y.tab.c" break; case 572: /* f_block_arg: blkarg_mark */ -#line 4448 "mrbgems/mruby-compiler/core/parse.y" +#line 4457 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(and); } -#line 11017 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11026 "mrbgems/mruby-compiler/core/y.tab.c" break; case 573: /* opt_f_block_arg: ',' f_block_arg */ -#line 4454 "mrbgems/mruby-compiler/core/parse.y" +#line 4463 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 11025 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11034 "mrbgems/mruby-compiler/core/y.tab.c" break; case 574: /* opt_f_block_arg: none */ -#line 4458 "mrbgems/mruby-compiler/core/parse.y" +#line 4467 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = 0; } -#line 11033 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11042 "mrbgems/mruby-compiler/core/y.tab.c" break; case 575: /* singleton: var_ref */ -#line 4464 "mrbgems/mruby-compiler/core/parse.y" +#line 4473 "mrbgems/mruby-compiler/core/parse.y" { prohibit_literals(p, (yyvsp[0].nd)); (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 11043 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11052 "mrbgems/mruby-compiler/core/y.tab.c" break; case 576: /* $@33: %empty */ -#line 4469 "mrbgems/mruby-compiler/core/parse.y" +#line 4478 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_BEG;} -#line 11049 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11058 "mrbgems/mruby-compiler/core/y.tab.c" break; case 577: /* singleton: '(' $@33 expr rparen */ -#line 4470 "mrbgems/mruby-compiler/core/parse.y" +#line 4479 "mrbgems/mruby-compiler/core/parse.y" { prohibit_literals(p, (yyvsp[-1].nd)); (yyval.nd) = (yyvsp[-1].nd); } -#line 11058 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11067 "mrbgems/mruby-compiler/core/y.tab.c" break; case 579: /* assoc_list: assocs trailer */ -#line 4478 "mrbgems/mruby-compiler/core/parse.y" +#line 4487 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 11066 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11075 "mrbgems/mruby-compiler/core/y.tab.c" break; case 580: /* assocs: assoc */ -#line 4484 "mrbgems/mruby-compiler/core/parse.y" +#line 4493 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 11074 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11083 "mrbgems/mruby-compiler/core/y.tab.c" break; case 581: /* assocs: assocs comma assoc */ -#line 4488 "mrbgems/mruby-compiler/core/parse.y" +#line 4497 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 11082 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11091 "mrbgems/mruby-compiler/core/y.tab.c" break; case 582: /* assoc: arg "=>" arg */ -#line 4494 "mrbgems/mruby-compiler/core/parse.y" +#line 4503 "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 11092 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11101 "mrbgems/mruby-compiler/core/y.tab.c" break; case 583: /* assoc: "local variable or method" "label" arg */ -#line 4500 "mrbgems/mruby-compiler/core/parse.y" +#line 4509 "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 11101 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11110 "mrbgems/mruby-compiler/core/y.tab.c" break; case 584: /* assoc: "local variable or method" "label" */ -#line 4505 "mrbgems/mruby-compiler/core/parse.y" +#line 4514 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(new_sym(p, (yyvsp[-1].id)), label_reference(p, (yyvsp[-1].id))); } -#line 11109 "mrbgems/mruby-compiler/core/y.tab.c" - break; - - case 585: /* assoc: "numbered parameter" "label" */ -#line 4509 "mrbgems/mruby-compiler/core/parse.y" - { - mrb_sym sym = intern_numparam((yyvsp[-1].num)); - (yyval.nd) = cons(new_sym(p, sym), label_reference(p, sym)); - } #line 11118 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 586: /* assoc: "numbered parameter" "label" arg */ -#line 4514 "mrbgems/mruby-compiler/core/parse.y" + case 585: /* assoc: "numbered parameter" "label" */ +#line 4518 "mrbgems/mruby-compiler/core/parse.y" { - void_expr_error(p, (yyvsp[0].nd)); - (yyval.nd) = cons(new_sym(p, intern_numparam((yyvsp[-2].num))), (yyvsp[0].nd)); + mrb_sym sym = intern_numparam((yyvsp[-1].num)); + (yyval.nd) = cons(new_sym(p, sym), label_reference(p, sym)); } #line 11127 "mrbgems/mruby-compiler/core/y.tab.c" break; + case 586: /* assoc: "numbered parameter" "label" arg */ +#line 4523 "mrbgems/mruby-compiler/core/parse.y" + { + void_expr_error(p, (yyvsp[0].nd)); + (yyval.nd) = cons(new_sym(p, intern_numparam((yyvsp[-2].num))), (yyvsp[0].nd)); + } +#line 11136 "mrbgems/mruby-compiler/core/y.tab.c" + break; + case 587: /* assoc: string_fragment "label" arg */ -#line 4519 "mrbgems/mruby-compiler/core/parse.y" +#line 4528 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); if ((yyvsp[-2].nd)->cdr) { @@ -11143,75 +11152,75 @@ yyreduce: (yyval.nd) = cons(new_sym(p, new_strsym(p, (yyvsp[-2].nd)->car)), (yyvsp[0].nd)); } } -#line 11147 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11156 "mrbgems/mruby-compiler/core/y.tab.c" break; case 588: /* assoc: "**" arg */ -#line 4535 "mrbgems/mruby-compiler/core/parse.y" +#line 4544 "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 11156 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11165 "mrbgems/mruby-compiler/core/y.tab.c" break; case 589: /* assoc: "**" */ -#line 4540 "mrbgems/mruby-compiler/core/parse.y" +#line 4549 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(new_kw_rest_args(p, 0), new_lvar(p, intern_op(pow))); } -#line 11164 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11173 "mrbgems/mruby-compiler/core/y.tab.c" break; case 602: /* call_op: '.' */ -#line 4566 "mrbgems/mruby-compiler/core/parse.y" +#line 4575 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = '.'; } -#line 11172 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11181 "mrbgems/mruby-compiler/core/y.tab.c" break; case 603: /* call_op: "&." */ -#line 4570 "mrbgems/mruby-compiler/core/parse.y" +#line 4579 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = 0; } -#line 11180 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11189 "mrbgems/mruby-compiler/core/y.tab.c" break; case 605: /* call_op2: "::" */ -#line 4577 "mrbgems/mruby-compiler/core/parse.y" +#line 4586 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = tCOLON2; } -#line 11188 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11197 "mrbgems/mruby-compiler/core/y.tab.c" break; case 614: /* term: ';' */ -#line 4598 "mrbgems/mruby-compiler/core/parse.y" +#line 4607 "mrbgems/mruby-compiler/core/parse.y" {yyerrok;} -#line 11194 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11203 "mrbgems/mruby-compiler/core/y.tab.c" break; case 616: /* nl: '\n' */ -#line 4603 "mrbgems/mruby-compiler/core/parse.y" +#line 4612 "mrbgems/mruby-compiler/core/parse.y" { p->lineno += (yyvsp[0].num); p->column = 0; } -#line 11203 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11212 "mrbgems/mruby-compiler/core/y.tab.c" break; case 620: /* none: %empty */ -#line 4615 "mrbgems/mruby-compiler/core/parse.y" +#line 4624 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 11211 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11220 "mrbgems/mruby-compiler/core/y.tab.c" break; -#line 11215 "mrbgems/mruby-compiler/core/y.tab.c" +#line 11224 "mrbgems/mruby-compiler/core/y.tab.c" default: break; } @@ -11444,7 +11453,7 @@ yyreturnlab: return yyresult; } -#line 4619 "mrbgems/mruby-compiler/core/parse.y" +#line 4628 "mrbgems/mruby-compiler/core/parse.y" #define pylval (*((YYSTYPE*)(p->ylval))) @@ -11552,7 +11561,7 @@ void_expr_error(parser_state *p, node *n) /* Check if this is a variable-sized node first */ struct mrb_ast_var_header *header = (struct mrb_ast_var_header*)n; - if (header && header->node_type >= NODE_SCOPE && header->node_type <= NODE_NEGATE) { + if (header) { /* Handle variable-sized nodes */ switch ((enum node_type)header->node_type) { case NODE_BREAK: @@ -14325,48 +14334,179 @@ dump_recur(mrb_state *mrb, node *tree, int offset) } static void -dump_args(mrb_state *mrb, node *n, int offset) +dump_locals(mrb_state *mrb, node *tree, int offset) { - if (n->car) { - dump_prefix(n, offset+1); - printf("mandatory args:\n"); - dump_recur(mrb, n->car, offset+2); + if (!tree || (!tree->car && !tree->cdr)) return; + + dump_prefix(tree, offset); + printf("locals:\n"); + dump_prefix(tree, offset+1); + while (tree) { + if (tree->car) { + mrb_sym sym = node_to_sym(tree->car); + if (sym != 0) { + const char *name = mrb_sym_name(mrb, sym); + if (name && strlen(name) > 0 && name[0] != '!' && name[0] != '@' && name[0] != '$') { + printf(" %s", mrb_sym_dump(mrb, sym)); + } + else { + printf(" (invalid symbol: %s)", name ? name : "(null)"); + } + } + else { + printf(" (anonymous)"); + } + } + tree = tree->cdr; } - n = n->cdr; - if (n->car) { - dump_prefix(n, offset+1); + printf("\n"); +} + +static void +dump_cpath(mrb_state *mrb, node *tree, int offset) +{ + dump_prefix(tree, offset); + printf("cpath: "); + if (!tree) { + printf("(null)\n"); + } + else if (node_to_int(tree->car) == 0) { + printf("(null)\n"); + } + else if (node_to_int(tree->car) == 1) { + printf("Object\n"); + } + else { + printf("\n"); + mrb_parser_dump(mrb, tree->car, offset+1); + } + dump_prefix(tree, offset); + printf("name: %s\n", mrb_sym_dump(mrb, node_to_sym(tree->cdr))); +} + +static void +dump_str(mrb_state *mrb, node *n, int offset) +{ + while (n) { + dump_prefix(n, offset); + int len = node_to_int(n->car->car); + if (len >= 0) { + printf("str: \"%.*s\"\n", len, (char*)n->car->cdr); + } + else { + printf("interpolation:\n"); + mrb_parser_dump(mrb, n->car->cdr, offset+1); + } + n = n->cdr; + } +} + +static void +dump_args(mrb_state *mrb, struct mrb_ast_args *args, int offset) +{ + if (args->mandatory_args) { + dump_prefix(args->mandatory_args, offset+1); + printf("mandatory args:\n"); + dump_recur(mrb, args->mandatory_args, offset+2); + } + if (args->optional_args) { + dump_prefix(args->optional_args, offset+1); printf("optional args:\n"); { - node *n2 = n->car; - - while (n2) { - dump_prefix(n2, offset+2); - printf("%s=\n", mrb_sym_name(mrb, node_to_sym(n2->car->car))); - mrb_parser_dump(mrb, n2->car->cdr, offset+3); - n2 = n2->cdr; + node *n = args->optional_args; + while (n) { + dump_prefix(n, offset+2); + printf("%s=\n", mrb_sym_name(mrb, node_to_sym(n->car->car))); + mrb_parser_dump(mrb, n->car->cdr, offset+3); + n = n->cdr; } } } - n = n->cdr; - if (n->car) { - mrb_sym rest = node_to_sym(n->car); + if (args->rest_arg) { + mrb_sym rest = args->rest_arg; - dump_prefix(n, offset+1); + dump_prefix((node*)args, offset+1); if (rest == MRB_OPSYM(mul)) printf("rest=*\n"); else printf("rest=*%s\n", mrb_sym_name(mrb, rest)); } - n = n->cdr; - if (n->car) { - dump_prefix(n, offset+1); + if (args->post_mandatory_args) { + dump_prefix(args->post_mandatory_args, offset+1); printf("post mandatory args:\n"); - dump_recur(mrb, n->car, offset+2); + dump_recur(mrb, args->post_mandatory_args, offset+2); } + if (args->keyword_args) { + dump_prefix(args->keyword_args, offset+1); + printf("keyword args:\n"); + { + node *n = args->keyword_args; + while (n) { + dump_prefix(n, offset+2); + printf("%s:\n", mrb_sym_name(mrb, node_to_sym(n->car->car))); + mrb_parser_dump(mrb, n->car->cdr, offset+3); + n = n->cdr; + } + } + dump_prefix(args->post_mandatory_args, offset+1); + printf("post mandatory args:\n"); + dump_recur(mrb, args->post_mandatory_args, offset+2); + } + if (args->kwrest_arg) { + mrb_sym rest = args->kwrest_arg; - n = n->cdr; - if (n) { - mrb_parser_dump(mrb, n, offset); + dump_prefix((node*)args, offset+1); + if (rest == MRB_OPSYM(pow)) + printf("kwrest=**\n"); + else + printf("kwrest=**%s\n", mrb_sym_name(mrb, rest)); + } + if (args->block_arg) { + mrb_sym blk = args->block_arg; + + dump_prefix((node*)args, offset+1); + if (blk == MRB_OPSYM(and)) + printf("blk=&\n"); + else + printf("blk=&%s\n", mrb_sym_name(mrb, blk)); + } +} + +static void +dump_callargs(mrb_state *mrb, node *n, int offset) +{ + if (!n) return; + + struct mrb_ast_callargs *args = (struct mrb_ast_callargs*)n; + if (args->regular_args) { + dump_prefix(n, offset+1); + printf("args:\n"); + dump_recur(mrb, args->regular_args, offset+2); + } + if (args->keyword_args) { + dump_prefix(n, offset+1); + printf("kw_args:\n"); + node *kw = args->keyword_args; + while (kw) { + dump_prefix(n, offset+2); + printf("key:\n"); + if (node_to_sym(kw->car->car) == MRB_OPSYM(pow)) { + dump_prefix(n, offset+3); + printf("**:\n"); + } + else { + mrb_parser_dump(mrb, kw->car->car, offset+3); + } + dump_prefix(n, offset+2); + printf("value:\n"); + mrb_parser_dump(mrb, kw->car->cdr, offset+3); + kw = kw->cdr; + } + } + if (args->block_arg) { + dump_prefix(n, offset+1); + printf("block:\n"); + mrb_parser_dump(mrb, args->block_arg, offset+2); } } @@ -14401,36 +14541,263 @@ void mrb_parser_dump(mrb_state *mrb, node *tree, int offset) { #ifndef MRB_NO_STDIO - int nodetype; + enum node_type nodetype; if (!tree) return; - again: dump_prefix(tree, offset); - nodetype = node_to_int(tree->car); - tree = tree->cdr; + + /* All nodes are now variable-sized nodes with headers */ + nodetype = get_node_type(tree); + switch (nodetype) { + /* Variable-sized node cases */ + case NODE_SCOPE: + printf("NODE_SCOPE:\n"); + { + struct mrb_ast_scope_node *scope = (struct mrb_ast_scope_node*)tree; + if (scope->locals) { + dump_locals(mrb, scope->locals, offset+1); + } + if (scope->body) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, scope->body, offset+2); + } + } + break; + + case NODE_INT: + printf("NODE_INT: %d\n", INT_NODE_VALUE(tree)); + break; + + case NODE_BIGINT: + printf("NODE_BIGINT: %s (base %d)\n", BIGINT_NODE_STRING(tree), BIGINT_NODE_BASE(tree)); + break; + + case NODE_FLOAT: + printf("NODE_FLOAT: %s\n", FLOAT_NODE_VALUE(tree)); + break; + + case NODE_STR: + printf("NODE_STR:\n"); + dump_str(mrb, STR_NODE_LIST(tree), offset+1); + break; + + case NODE_XSTR: + printf("NODE_XSTR:\n"); + dump_str(mrb, XSTR_NODE_LIST(tree), offset+1); + break; + + case NODE_SYM: + printf("NODE_SYM: %s\n", mrb_sym_dump(mrb, SYM_NODE_VALUE(tree))); + break; + + case NODE_DSYM: + printf("NODE_DSYM:\n"); + dump_str(mrb, dsym_node(tree)->list, offset+1); + break; + + case NODE_LVAR: + printf("NODE_LVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_GVAR: + printf("NODE_GVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_IVAR: + printf("NODE_IVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_CVAR: + printf("NODE_CVAR: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_CONST: + printf("NODE_CONST: %s\n", mrb_sym_dump(mrb, VAR_NODE_SYMBOL(tree))); + break; + + case NODE_CALL: + printf("NODE_CALL: %s\n", mrb_sym_dump(mrb, CALL_NODE_METHOD(tree))); + if (CALL_NODE_RECEIVER(tree)) { + dump_prefix(tree, offset+1); + printf("receiver:\n"); + mrb_parser_dump(mrb, CALL_NODE_RECEIVER(tree), offset+2); + } + if (CALL_NODE_ARGS(tree)) { + dump_callargs(mrb, CALL_NODE_ARGS(tree), offset); + } + break; + + case NODE_ARRAY: + printf("NODE_ARRAY:\n"); + if (ARRAY_NODE_ELEMENTS(tree)) { + dump_recur(mrb, ARRAY_NODE_ELEMENTS(tree), offset+1); + } + break; + + case NODE_CALLARGS: + printf("NODE_CALLARGS:\n"); + if (CALLARGS_NODE_REGULAR(tree)) { + dump_prefix(tree, offset+1); + printf("regular_args:\n"); + dump_recur(mrb, CALLARGS_NODE_REGULAR(tree), offset+2); + } + if (CALLARGS_NODE_KEYWORDS(tree)) { + dump_prefix(tree, offset+1); + printf("keyword_args:\n"); + mrb_parser_dump(mrb, CALLARGS_NODE_KEYWORDS(tree), offset+2); + } + if (CALLARGS_NODE_BLOCK(tree)) { + dump_prefix(tree, offset+1); + printf("block_arg:\n"); + mrb_parser_dump(mrb, CALLARGS_NODE_BLOCK(tree), offset+2); + } + break; + + case NODE_TRUE: + printf("NODE_TRUE\n"); + break; + + case NODE_FALSE: + printf("NODE_FALSE\n"); + break; + + case NODE_NIL: + printf("NODE_NIL\n"); + break; + + case NODE_SELF: + printf("NODE_SELF\n"); + break; + + case NODE_IF: + printf("NODE_IF:\n"); + if (IF_NODE_CONDITION(tree)) { + dump_prefix(tree, offset+1); + printf("cond:\n"); + mrb_parser_dump(mrb, IF_NODE_CONDITION(tree), offset+2); + } + if (IF_NODE_THEN(tree)) { + dump_prefix(tree, offset+1); + printf("then:\n"); + mrb_parser_dump(mrb, IF_NODE_THEN(tree), offset+2); + } + if (IF_NODE_ELSE(tree)) { + dump_prefix(tree, offset+1); + printf("else:\n"); + mrb_parser_dump(mrb, IF_NODE_ELSE(tree), offset+2); + } + break; + + case NODE_DEF: + printf("NODE_DEF: %s\n", mrb_sym_dump(mrb, DEF_NODE_NAME(tree))); + if (DEF_NODE_ARGS(tree)) { + dump_args(mrb, SDEF_NODE_ARGS(tree), offset+1); + } + if (DEF_NODE_LOCALS(tree)) { + dump_locals(mrb, DEF_NODE_LOCALS(tree), offset+1); + } + if (DEF_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, DEF_NODE_BODY(tree), offset+2); + } + break; + + case NODE_ASGN: + printf("NODE_ASGN:\n"); + if (ASGN_NODE_LHS(tree)) { + dump_prefix(tree, offset+1); + printf("lhs:\n"); + mrb_parser_dump(mrb, ASGN_NODE_LHS(tree), offset+2); + } + if (ASGN_NODE_RHS(tree)) { + dump_prefix(tree, offset+1); + printf("rhs:\n"); + mrb_parser_dump(mrb, ASGN_NODE_RHS(tree), offset+2); + } + break; + + case NODE_MASGN: + printf("NODE_MASGN:\n"); + if (MASGN_NODE_LHS(tree)) { + dump_prefix(tree, offset+1); + node *lhs = MASGN_NODE_LHS(tree); + if (lhs) { + printf("lhs:\n"); + dump_recur(mrb, lhs->car, offset+2); + if (lhs->cdr) { + dump_recur(mrb, lhs->cdr->car, offset+2); + if (lhs->cdr->cdr) dump_recur(mrb, lhs->cdr->cdr->car, offset+2); + } + } + } + if (MASGN_NODE_RHS(tree)) { + dump_prefix(tree, offset+1); + printf("rhs:\n"); + mrb_parser_dump(mrb, MASGN_NODE_RHS(tree), offset+2); + } + break; + + case NODE_RETURN: + printf("NODE_RETURN:\n"); + if (RETURN_NODE_ARGS(tree)) { + mrb_parser_dump(mrb, RETURN_NODE_ARGS(tree), offset); + } + break; + + case NODE_BREAK: + printf("NODE_BREAK:\n"); + if (BREAK_NODE_VALUE(tree)) { + dump_prefix(tree, offset+1); + printf("value:\n"); + mrb_parser_dump(mrb, BREAK_NODE_VALUE(tree), offset+2); + } + break; + + case NODE_NEXT: + printf("NODE_NEXT:\n"); + if (NEXT_NODE_VALUE(tree)) { + dump_prefix(tree, offset+1); + printf("value:\n"); + mrb_parser_dump(mrb, NEXT_NODE_VALUE(tree), offset+2); + } + break; + + case NODE_NEGATE: + printf("NODE_NEGATE:\n"); + if (NEGATE_NODE_OPERAND(tree)) { + dump_prefix(tree, offset+1); + printf("operand:\n"); + mrb_parser_dump(mrb, NEGATE_NODE_OPERAND(tree), offset+2); + } + break; + case NODE_STMTS: printf("NODE_STMTS:\n"); - dump_recur(mrb, tree, offset+1); + if (STMTS_NODE_STMTS(tree)) { + dump_recur(mrb, STMTS_NODE_STMTS(tree), offset+1); + } break; case NODE_BEGIN: printf("NODE_BEGIN:\n"); - mrb_parser_dump(mrb, tree, offset+1); + if (BEGIN_NODE_BODY(tree)) { + mrb_parser_dump(mrb, BEGIN_NODE_BODY(tree), offset+1); + } break; case NODE_RESCUE: printf("NODE_RESCUE:\n"); - if (tree->car) { + if (RESCUE_NODE_BODY(tree)) { dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, RESCUE_NODE_BODY(tree), offset+2); } - tree = tree->cdr; - if (tree->car) { - node *n2 = tree->car; - - dump_prefix(n2, offset+1); + if (RESCUE_NODE_RESCUE_CLAUSES(tree)) { + node *n2 = RESCUE_NODE_RESCUE_CLAUSES(tree); + dump_prefix(tree, offset+1); printf("rescue:\n"); while (n2) { node *n3 = n2->car; @@ -14452,11 +14819,10 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) n2 = n2->cdr; } } - tree = tree->cdr; - if (tree->car) { + if (RESCUE_NODE_ELSE_CLAUSE(tree)) { dump_prefix(tree, offset+1); printf("else:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, RESCUE_NODE_ELSE_CLAUSE(tree), offset+2); } break; @@ -14472,46 +14838,32 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_LAMBDA: printf("NODE_LAMBDA:\n"); - dump_prefix(tree, offset+1); goto block; case NODE_BLOCK: - block: printf("NODE_BLOCK:\n"); - tree = tree->cdr; - if (tree->car) { - dump_args(mrb, tree->car, offset+1); + block: + if (BLOCK_NODE_LOCALS(tree)) { + dump_locals(mrb, BLOCK_NODE_LOCALS(tree), offset+1); + } + if (BLOCK_NODE_ARGS(tree)) { + dump_args(mrb, BLOCK_NODE_ARGS(tree), offset+1); } dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - break; - - case NODE_IF: - printf("NODE_IF:\n"); - dump_prefix(tree, offset+1); - printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - dump_prefix(tree, offset+1); - printf("then:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - if (tree->cdr->cdr->car) { - dump_prefix(tree, offset+1); - printf("else:\n"); - mrb_parser_dump(mrb, tree->cdr->cdr->car, offset+2); - } + mrb_parser_dump(mrb, BLOCK_NODE_BODY(tree), offset+2); break; case NODE_AND: printf("NODE_AND:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + mrb_parser_dump(mrb, AND_NODE_LEFT(tree), offset+1); + mrb_parser_dump(mrb, AND_NODE_RIGHT(tree), offset+1); break; case NODE_OR: printf("NODE_OR:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + mrb_parser_dump(mrb, OR_NODE_LEFT(tree), offset+1); + mrb_parser_dump(mrb, OR_NODE_RIGHT(tree), offset+1); break; case NODE_CASE: @@ -14535,285 +14887,158 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) printf("NODE_WHILE:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_BODY(tree), offset+2); break; case NODE_UNTIL: printf("NODE_UNTIL:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_BODY(tree), offset+2); break; case NODE_WHILE_MOD: printf("NODE_WHILE_MOD:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, WHILE_NODE_BODY(tree), offset+2); break; case NODE_UNTIL_MOD: printf("NODE_UNTIL_MOD:\n"); dump_prefix(tree, offset+1); printf("cond:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_CONDITION(tree), offset+2); dump_prefix(tree, offset+1); printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, UNTIL_NODE_BODY(tree), offset+2); break; case NODE_FOR: printf("NODE_FOR:\n"); - dump_prefix(tree, offset+1); - printf("var:\n"); { - node *n2 = tree->car; - - if (n2->car) { - dump_prefix(n2, offset+2); - printf("pre:\n"); - dump_recur(mrb, n2->car, offset+3); + if (FOR_NODE_VAR(tree)) { + dump_prefix(tree, offset+1); + printf("var:\n"); + mrb_parser_dump(mrb, FOR_NODE_VAR(tree), offset+2); } - n2 = n2->cdr; - if (n2) { - if (n2->car) { - dump_prefix(n2, offset+2); - printf("rest:\n"); - mrb_parser_dump(mrb, n2->car, offset+3); - } - n2 = n2->cdr; - if (n2) { - if (n2->car) { - dump_prefix(n2, offset+2); - printf("post:\n"); - dump_recur(mrb, n2->car, offset+3); - } - } + if (FOR_NODE_ITERABLE(tree)) { + dump_prefix(tree, offset+1); + printf("iterable:\n"); + mrb_parser_dump(mrb, FOR_NODE_ITERABLE(tree), offset+2); } - } - tree = tree->cdr; - dump_prefix(tree, offset+1); - printf("in:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - tree = tree->cdr; - dump_prefix(tree, offset+1); - printf("do:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - break; - - case NODE_SCOPE: - printf("NODE_SCOPE:\n"); - { - node *n2 = tree->car; - mrb_bool first_lval = TRUE; - - if (n2 && (n2->car || n2->cdr)) { - dump_prefix(n2, offset+1); - printf("local variables:\n"); - dump_prefix(n2, offset+2); - while (n2) { - if (n2->car) { - if (!first_lval) printf(", "); - printf("%s", mrb_sym_name(mrb, node_to_sym(n2->car))); - first_lval = FALSE; - } - n2 = n2->cdr; - } - printf("\n"); - } - } - tree = tree->cdr; - offset++; - goto again; - - case NODE_CALL: - printf("NODE_CALL(.):\n"); break; - mrb_parser_dump(mrb, tree->car, offset+1); - dump_prefix(tree, offset+1); - printf("method='%s' (%d)\n", - mrb_sym_dump(mrb, node_to_sym(tree->cdr->car)), - node_to_int(tree->cdr->car)); - tree = tree->cdr->cdr->car; - if (tree) { - dump_prefix(tree, offset+1); - printf("args:\n"); - dump_recur(mrb, tree->car, offset+2); - if (tree->cdr) { - if (tree->cdr->car) { - dump_prefix(tree, offset+1); - printf("kwargs:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - } - if (tree->cdr->cdr) { - dump_prefix(tree, offset+1); - printf("block:\n"); - mrb_parser_dump(mrb, tree->cdr->cdr, offset+2); - } + if (FOR_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, FOR_NODE_BODY(tree), offset+2); } } break; case NODE_DOT2: printf("NODE_DOT2:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + { + if (DOT2_NODE_LEFT(tree)) { + dump_prefix(tree, offset+1); + printf("left:\n"); + mrb_parser_dump(mrb, DOT2_NODE_LEFT(tree), offset+2); + } + if (DOT2_NODE_RIGHT(tree)) { + dump_prefix(tree, offset+1); + printf("right:\n"); + mrb_parser_dump(mrb, DOT2_NODE_RIGHT(tree), offset+2); + } + } break; case NODE_DOT3: printf("NODE_DOT3:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - mrb_parser_dump(mrb, tree->cdr, offset+1); + { + if (DOT3_NODE_LEFT(tree)) { + dump_prefix(tree, offset+1); + printf("left:\n"); + mrb_parser_dump(mrb, DOT3_NODE_LEFT(tree), offset+2); + } + if (DOT3_NODE_RIGHT(tree)) { + dump_prefix(tree, offset+1); + printf("right:\n"); + mrb_parser_dump(mrb, DOT3_NODE_RIGHT(tree), offset+2); + } + } break; case NODE_COLON2: printf("NODE_COLON2:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); + if (COLON2_NODE_BASE(tree)) { + dump_prefix(tree, offset+1); + printf("base:\n"); + mrb_parser_dump(mrb, COLON2_NODE_BASE(tree), offset+2); + } dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->cdr))); + printf("name: %s\n", mrb_sym_name(mrb, COLON2_NODE_NAME(tree))); break; case NODE_COLON3: - printf("NODE_COLON3: ::%s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_ARRAY: - printf("NODE_ARRAY:\n"); - dump_recur(mrb, tree, offset+1); + printf("NODE_COLON3: ::%s\n", mrb_sym_name(mrb, COLON3_NODE_NAME(tree))); break; case NODE_HASH: - printf("NODE_HASH:\n"); - while (tree) { - dump_prefix(tree, offset+1); - printf("key:\n"); - mrb_parser_dump(mrb, tree->car->car, offset+2); - dump_prefix(tree, offset+1); - printf("value:\n"); - mrb_parser_dump(mrb, tree->car->cdr, offset+2); - tree = tree->cdr; + { + printf("NODE_HASH:\n"); + node *pairs = HASH_NODE_PAIRS(tree); + while (pairs) { + dump_prefix(tree, offset+1); + printf("key:\n"); + mrb_parser_dump(mrb, pairs->car->car, offset+2); + dump_prefix(tree, offset+1); + printf("value:\n"); + mrb_parser_dump(mrb, pairs->car->cdr, offset+2); + pairs = pairs->cdr; + } } break; case NODE_SPLAT: printf("NODE_SPLAT:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_ASGN: - printf("NODE_ASGN:\n"); - dump_prefix(tree, offset+1); - printf("lhs:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - dump_prefix(tree, offset+1); - printf("rhs:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); - break; - - case NODE_MASGN: - printf("NODE_MASGN:\n"); - dump_prefix(tree, offset+1); - printf("mlhs:\n"); - { - node *n2 = tree->car; - - if (n2->car) { - dump_prefix(tree, offset+2); - printf("pre:\n"); - dump_recur(mrb, n2->car, offset+3); - } - n2 = n2->cdr; - if (n2) { - if (n2->car) { - dump_prefix(n2, offset+2); - printf("rest:\n"); - if (n2->car == int_to_node(-1)) { - dump_prefix(n2, offset+2); - printf("(empty)\n"); - } - else { - mrb_parser_dump(mrb, n2->car, offset+3); - } - } - n2 = n2->cdr; - if (n2 && n2->car) { - dump_prefix(n2, offset+2); - printf("post:\n"); - dump_recur(mrb, n2->car, offset+3); - } - } - } - dump_prefix(tree, offset+1); - printf("rhs:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); + mrb_parser_dump(mrb, SPLAT_NODE_VALUE(tree), offset+1); break; case NODE_OP_ASGN: printf("NODE_OP_ASGN:\n"); dump_prefix(tree, offset+1); printf("lhs:\n"); - mrb_parser_dump(mrb, tree->car, offset+2); - tree = tree->cdr; + mrb_parser_dump(mrb, OP_ASGN_NODE_LHS(tree), offset+2); dump_prefix(tree, offset+1); - printf("op='%s' (%d)\n", mrb_sym_name(mrb, node_to_sym(tree->car)), node_to_int(tree->car)); - tree = tree->cdr; - mrb_parser_dump(mrb, tree->car, offset+1); + printf("op='%s' (%d)\n", mrb_sym_name(mrb, OP_ASGN_NODE_OP(tree)), (int)OP_ASGN_NODE_OP(tree)); + mrb_parser_dump(mrb, OP_ASGN_NODE_RHS(tree), offset+1); break; case NODE_SUPER: printf("NODE_SUPER:\n"); - if (tree) { - dump_prefix(tree, offset+1); - printf("args:\n"); - dump_recur(mrb, tree->car, offset+2); - if (tree->cdr) { - dump_prefix(tree, offset+1); - printf("block:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); - } + if (SUPER_NODE_ARGS(tree)) { + dump_callargs(mrb, CALL_NODE_ARGS(tree), offset); } break; case NODE_ZSUPER: printf("NODE_ZSUPER:\n"); - if (tree) { - dump_prefix(tree, offset+1); - printf("args:\n"); - dump_recur(mrb, tree->car, offset+2); - if (tree->cdr) { - dump_prefix(tree, offset+1); - printf("block:\n"); - mrb_parser_dump(mrb, tree->cdr, offset+2); - } + if (SUPER_NODE_ARGS(tree)) { + dump_callargs(mrb, CALL_NODE_ARGS(tree), offset); } break; - case NODE_RETURN: - printf("NODE_RETURN:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - case NODE_YIELD: printf("NODE_YIELD:\n"); - dump_recur(mrb, tree, offset+1); - break; - - case NODE_BREAK: - printf("NODE_BREAK:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_NEXT: - printf("NODE_NEXT:\n"); - mrb_parser_dump(mrb, tree, offset+1); + dump_recur(mrb, YIELD_NODE_ARGS(tree), offset+1); break; case NODE_REDO: @@ -14824,30 +15049,6 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) printf("NODE_RETRY\n"); break; - case NODE_LVAR: - printf("NODE_LVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_GVAR: - printf("NODE_GVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_IVAR: - printf("NODE_IVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_CVAR: - printf("NODE_CVAR %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - - case NODE_NVAR: - printf("NODE_NVAR %d\n", node_to_int(tree)); - break; - - case NODE_CONST: - printf("NODE_CONST %s\n", mrb_sym_name(mrb, node_to_sym(tree))); - break; - case NODE_MATCH: printf("NODE_MATCH:\n"); dump_prefix(tree, offset + 1); @@ -14868,30 +15069,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_BLOCK_ARG: printf("NODE_BLOCK_ARG:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_INT: - printf("NODE_INT %s base %d\n", (char*)tree->car, node_to_int(tree->cdr->car)); - break; - - case NODE_FLOAT: - printf("NODE_FLOAT %s\n", (char*)tree); - break; - - case NODE_NEGATE: - printf("NODE_NEGATE:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - - case NODE_STR: - printf("NODE_STR:\n"); - dump_recur(mrb, tree, offset+1); - break; - - case NODE_XSTR: - printf("NODE_XSTR:\n"); - dump_recur(mrb, tree, offset+1); + mrb_parser_dump(mrb, block_arg_node(tree)->value, offset+1); break; case NODE_REGX: @@ -14921,16 +15099,6 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) } break; - case NODE_SYM: - printf("NODE_SYM :%s (%d)\n", mrb_sym_dump(mrb, node_to_sym(tree)), - node_to_int(tree)); - break; - - case NODE_DSYM: - printf("NODE_DSYM:\n"); - mrb_parser_dump(mrb, tree, offset+1); - break; - case NODE_WORDS: printf("NODE_WORDS:\n"); dump_recur(mrb, tree, offset+1); @@ -14941,26 +15109,10 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) dump_recur(mrb, tree, offset+1); break; - case NODE_SELF: - printf("NODE_SELF\n"); - break; - - case NODE_NIL: - printf("NODE_NIL\n"); - break; - - case NODE_TRUE: - printf("NODE_TRUE\n"); - break; - - case NODE_FALSE: - printf("NODE_FALSE\n"); - break; - case NODE_ALIAS: printf("NODE_ALIAS %s %s:\n", - mrb_sym_dump(mrb, node_to_sym(tree->car)), - mrb_sym_dump(mrb, node_to_sym(tree->cdr))); + mrb_sym_dump(mrb, node_to_sym(tree->car)), + mrb_sym_dump(mrb, node_to_sym(tree->cdr))); break; case NODE_UNDEF: @@ -14977,100 +15129,71 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) case NODE_CLASS: printf("NODE_CLASS:\n"); - if (tree->car->car == int_to_node(0)) { - dump_prefix(tree, offset+1); - printf(":%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); + { + if (CLASS_NODE_NAME(tree)) { + dump_cpath(mrb, MODULE_NODE_NAME(tree), offset+1); + } + if (CLASS_NODE_SUPERCLASS(tree)) { + dump_prefix(tree, offset+1); + printf("super:\n"); + mrb_parser_dump(mrb, CLASS_NODE_SUPERCLASS(tree), offset+2); + } + if (CLASS_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, CLASS_NODE_BODY(tree)->cdr, offset+2); + } } - else if (tree->car->car == int_to_node(1)) { - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - else { - mrb_parser_dump(mrb, tree->car->car, offset+1); - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - if (tree->cdr->car) { - dump_prefix(tree, offset+1); - printf("super:\n"); - mrb_parser_dump(mrb, tree->cdr->car, offset+2); - } - dump_prefix(tree, offset+1); - printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->cdr->car->cdr, offset+2); break; case NODE_MODULE: printf("NODE_MODULE:\n"); - if (tree->car->car == int_to_node(0)) { - dump_prefix(tree, offset+1); - printf(":%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); + { + if (MODULE_NODE_NAME(tree)) { + dump_cpath(mrb, MODULE_NODE_NAME(tree), offset+1); + } + if (MODULE_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, MODULE_NODE_BODY(tree)->cdr, offset+2); + } } - else if (tree->car->car == int_to_node(1)) { - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - else { - mrb_parser_dump(mrb, tree->car->car, offset+1); - dump_prefix(tree, offset+1); - printf("::%s\n", mrb_sym_name(mrb, node_to_sym(tree->car->cdr))); - } - dump_prefix(tree, offset+1); - printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->car->cdr, offset+2); break; case NODE_SCLASS: printf("NODE_SCLASS:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - dump_prefix(tree, offset+1); - printf("body:\n"); - mrb_parser_dump(mrb, tree->cdr->car->cdr, offset+2); - break; - - case NODE_DEF: - printf("NODE_DEF:\n"); - dump_prefix(tree, offset+1); - printf("%s\n", mrb_sym_dump(mrb, node_to_sym(tree->car))); - tree = tree->cdr; { - node *n2 = tree->car; - mrb_bool first_lval = TRUE; - - if (n2 && (n2->car || n2->cdr)) { - dump_prefix(n2, offset+1); - printf("local variables:\n"); - dump_prefix(n2, offset+2); - while (n2) { - if (n2->car) { - if (!first_lval) printf(", "); - printf("%s", mrb_sym_name(mrb, node_to_sym(n2->car))); - first_lval = FALSE; - } - n2 = n2->cdr; - } - printf("\n"); + if (SCLASS_NODE_OBJ(tree)) { + dump_prefix(tree, offset+1); + printf("obj:\n"); + mrb_parser_dump(mrb, SCLASS_NODE_OBJ(tree), offset+2); + } + if (SCLASS_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, SCLASS_NODE_BODY(tree)->cdr, offset+2); } } - tree = tree->cdr; - if (tree->car) { - dump_args(mrb, tree->car, offset); - } - mrb_parser_dump(mrb, tree->cdr->car, offset+1); break; case NODE_SDEF: - printf("NODE_SDEF:\n"); - mrb_parser_dump(mrb, tree->car, offset+1); - tree = tree->cdr; - dump_prefix(tree, offset+1); - printf(":%s\n", mrb_sym_dump(mrb, node_to_sym(tree->car))); - tree = tree->cdr->cdr; - if (tree->car) { - dump_args(mrb, tree->car, offset+1); + printf("NODE_SDEF: %s\n", mrb_sym_dump(mrb, DEF_NODE_NAME(tree))); + if (SDEF_NODE_OBJ(tree)) { + dump_prefix(tree, offset+1); + printf("recv:\n"); + mrb_parser_dump(mrb, SDEF_NODE_OBJ(tree), offset+2); + } + if (SDEF_NODE_ARGS(tree)) { + dump_args(mrb, SDEF_NODE_ARGS(tree), offset+1); + } + if (SDEF_NODE_LOCALS(tree)) { + dump_locals(mrb, SDEF_NODE_LOCALS(tree), offset+1); + } + if (SDEF_NODE_BODY(tree)) { + dump_prefix(tree, offset+1); + printf("body:\n"); + mrb_parser_dump(mrb, SDEF_NODE_BODY(tree), offset+2); } - tree = tree->cdr; - mrb_parser_dump(mrb, tree->car, offset+1); break; case NODE_POSTEXE: @@ -15083,9 +15206,10 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset) dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1); break; - default: - printf("node type: %d (0x%x)\n", nodetype, (unsigned)nodetype); + /* Fallback: treat as a traditional cons-list and recursively dump */ + printf("unknown node type %d (0x%x), dumping as list:\n", nodetype, (unsigned)nodetype); + dump_recur(mrb, tree, offset+1); break; } #endif