diff --git a/parse.y b/parse.y index 909a4ec3b1..c6e517f74b 100644 --- a/parse.y +++ b/parse.y @@ -1181,7 +1181,7 @@ static int looking_at_eol_p(struct parser_params *p); %type args call_args opt_call_args %type paren_args opt_paren_args args_tail opt_args_tail block_args_tail opt_block_args_tail %type command_args aref_args opt_block_arg block_arg var_ref var_lhs -%type command_rhs arg_rhs +%type command_rhs arg_rhs multiplier %type command_asgn mrhs mrhs_arg superclass block_call block_command %type f_block_optarg f_block_opt %type f_arglist f_opt_paren_args f_paren_args f_args f_arg f_arg_item @@ -2833,6 +2833,10 @@ mrhs : args ',' arg_value } ; +multiplier : var_ref + | '(' expr_value ')' { $$ = $2; } + ; + primary : literal | strings | xstring @@ -2843,6 +2847,10 @@ primary : literal | qsymbols | var_ref | backref + | numeric multiplier + { + $$ = call_bin_op(p, $1, '*', $2, &@2, &@$); + } | tFID { /*%%%*/