зеркало из https://github.com/github/ruby.git
node.h: Avoid a magic number to represent excessed comma
`(ID)1` was assigned to NODE_ARGS#rest_arg for `{|x,| }`. This change removes the magic number by introducing an explicit macro variable for it: NODE_SPECIAL_EXCESSED_COMMA.
This commit is contained in:
Родитель
39eae6bf89
Коммит
0872ea5330
|
@ -1632,7 +1632,7 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, const NODE *cons
|
|||
debugs(" - argc: %d\n", body->param.lead_num);
|
||||
|
||||
rest_id = args->rest_arg;
|
||||
if (rest_id == 1) {
|
||||
if (rest_id == NODE_SPECIAL_EXCESSED_COMMA) {
|
||||
last_comma = 1;
|
||||
rest_id = 0;
|
||||
}
|
||||
|
|
9
node.c
9
node.c
|
@ -1010,7 +1010,14 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node)
|
|||
F_INT(nd_ainfo->post_args_num, "count of mandatory post-arguments");
|
||||
F_NODE(nd_ainfo->post_init, "initialization of post-arguments");
|
||||
F_ID(nd_ainfo->first_post_arg, "first post argument");
|
||||
F_ID(nd_ainfo->rest_arg, "rest argument");
|
||||
F_CUSTOM1(nd_ainfo->rest_arg, "rest argument") {
|
||||
if (node->nd_ainfo->rest_arg == NODE_SPECIAL_EXCESSED_COMMA) {
|
||||
A("1 (excessed comma)");
|
||||
}
|
||||
else {
|
||||
A_ID(node->nd_ainfo->rest_arg);
|
||||
}
|
||||
}
|
||||
F_ID(nd_ainfo->block_arg, "block argument");
|
||||
F_NODE(nd_ainfo->opt_args, "optional arguments");
|
||||
F_NODE(nd_ainfo->kw_args, "keyword arguments");
|
||||
|
|
1
node.h
1
node.h
|
@ -383,6 +383,7 @@ typedef struct RNode {
|
|||
#define NODE_REQUIRED_KEYWORD_P(node) ((node)->nd_value == NODE_SPECIAL_REQUIRED_KEYWORD)
|
||||
#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
|
||||
#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
|
||||
#define NODE_SPECIAL_EXCESSED_COMMA ((ID)1)
|
||||
|
||||
VALUE rb_node_case_when_optimizable_literal(const NODE *const node);
|
||||
|
||||
|
|
8
parse.y
8
parse.y
|
@ -325,10 +325,6 @@ static int parser_yyerror(struct parser_params*, const YYLTYPE *yylloc, const ch
|
|||
|
||||
#define lambda_beginning_p() (p->lex.lpar_beg == p->lex.paren_nest)
|
||||
|
||||
#ifndef RIPPER
|
||||
static const ID excessed_comma = 1;
|
||||
#endif
|
||||
|
||||
static enum yytokentype yylex(YYSTYPE*, YYLTYPE*, struct parser_params*);
|
||||
|
||||
#ifndef RIPPER
|
||||
|
@ -3261,7 +3257,7 @@ block_param : f_arg ',' f_block_optarg ',' f_rest_arg opt_block_args_tail
|
|||
{
|
||||
/*%%%*/
|
||||
/* magic number for rest_id in iseq_set_arguments() */
|
||||
$$ = new_args(p, $1, Qnone, excessed_comma, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, &@1), &@$);
|
||||
$$ = new_args(p, $1, Qnone, NODE_SPECIAL_EXCESSED_COMMA, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, &@1), &@$);
|
||||
/*% %*/
|
||||
/*% ripper: new_args(p, $1, Qnone, excessed_comma!, Qnone, new_args_tail(p, Qnone, Qnone, Qnone, NULL), NULL) %*/
|
||||
}
|
||||
|
@ -11134,7 +11130,7 @@ args_with_numbered(struct parser_params *p, NODE *args, int max_numparam)
|
|||
if (max_numparam > 0) {
|
||||
if (!args) args = new_args_tail(p, 0, 0, 0, 0);
|
||||
args->nd_ainfo->pre_args_num = max_numparam;
|
||||
args->nd_ainfo->rest_arg = excessed_comma;
|
||||
args->nd_ainfo->rest_arg = NODE_SPECIAL_EXCESSED_COMMA;
|
||||
}
|
||||
return args;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче