SHARE
TWEET

Untitled

a guest Aug 23rd, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff --git a/parse.y b/parse.y
  2. index a6a9a4160b..4470f226a8 100644
  3. --- a/parse.y
  4. +++ b/parse.y
  5. @@ -1004,7 +1004,7 @@ static void token_info_warn(struct parser_params *p, const char *token, token_in
  6.  %type <node> words symbols symbol_list qwords qsymbols word_list qword_list qsym_list word
  7.  %type <node> literal numeric simple_numeric ssym dsym symbol cpath
  8.  %type <node> top_compstmt top_stmts top_stmt begin_block
  9. -%type <node> bodystmt compstmt stmts stmt_or_begin stmt expr arg primary command command_call method_call
  10. +%type <node> bodystmt compstmt stmts stmt_or_begin stmt expr arg primary1 primary2 primary command command_call method_call
  11.  %type <node> expr_value expr_value_do arg_value primary_value fcall rel_expr pipeline
  12.  %type <node> if_tail opt_else case_body case_args cases opt_rescue exc_list exc_var opt_ensure
  13.  %type <node> args call_args opt_call_args
  14. @@ -1025,7 +1025,7 @@ static void token_info_warn(struct parser_params *p, const char *token, token_in
  15.  %type <node> p_expr p_as p_alt p_expr_basic
  16.  %type <node> p_args p_args_head p_args_tail p_args_post p_arg
  17.  %type <node> p_value p_primitive p_variable p_var_ref p_const
  18. -%type <node> p_kwargs p_kwarg p_kw
  19. +%type <node> p_kwargs p_kwarg p_kw fbody
  20.  %type <id>   keyword_variable user_variable sym operation operation2 operation3
  21.  %type <id>   cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_bad_arg
  22.  %type <id>   f_kwrest f_label f_arg_asgn call_op call_op2 reswords relop dot_or_colon
  23. @@ -2564,7 +2564,7 @@ mrhs      : args ',' arg_value
  24.             }
  25.         ;
  26.  
  27. -primary        : literal
  28. +primary1   : literal
  29.         | strings
  30.         | xstring
  31.         | regexp
  32. @@ -2574,6 +2574,11 @@ primary      : literal
  33.         | qsymbols
  34.         | var_ref
  35.         | backref
  36. +           {
  37. +           /*%%%*/
  38. +           $$ = $1;
  39. +           /*% %*/
  40. +           }
  41.         | tFID
  42.             {
  43.             /*%%%*/
  44. @@ -2910,32 +2915,6 @@ primary      : literal
  45.             local_pop(p);
  46.             p->in_class = $<num>1 & 1;
  47.             }
  48. -       | k_def fname
  49. -           {
  50. -           local_push(p, 0);
  51. -           $<id>$ = p->cur_arg;
  52. -           p->cur_arg = 0;
  53. -           }
  54. -           {
  55. -           $<num>$ = p->in_def;
  56. -           p->in_def = 1;
  57. -           }
  58. -         f_arglist
  59. -         bodystmt
  60. -         k_end
  61. -           {
  62. -           /*%%%*/
  63. -           NODE *body = remove_begin($6);
  64. -           reduce_nodes(p, &body);
  65. -           $$ = NEW_DEFN($2, $5, body, &@$);
  66. -           nd_set_line($$->nd_defn, @7.end_pos.lineno);
  67. -           set_line_body(body, @1.beg_pos.lineno);
  68. -           /*% %*/
  69. -           /*% ripper: def!($2, $5, $6) %*/
  70. -           local_pop(p);
  71. -           p->in_def = $<num>4 & 1;
  72. -           p->cur_arg = $<id>3;
  73. -           }
  74.         | k_def singleton dot_or_colon {SET_LEX_STATE(EXPR_FNAME);} fname
  75.             {
  76.             $<num>4 = p->in_def;
  77. @@ -2998,7 +2977,56 @@ primary      : literal
  78.             }
  79.         ;
  80.  
  81. -primary_value  : primary
  82. +primary2   : k_def fname
  83. +           {
  84. +           local_push(p, 0);
  85. +           $<id>$ = p->cur_arg;
  86. +           p->cur_arg = 0;
  87. +           }
  88. +           {
  89. +           $<num>$ = p->in_def;
  90. +           p->in_def = 1;
  91. +           }
  92. +         f_arglist
  93. +         fbody
  94. +           {
  95. +           /*%%%*/
  96. +           $$ = NEW_DEFN($2, $5, $6, &@$);
  97. +           nd_set_line($$->nd_defn, @6.end_pos.lineno);
  98. +           set_line_body($6, @1.beg_pos.lineno);
  99. +           /*% %*/
  100. +           /*% ripper: def!($2, $5, $6) %*/
  101. +           local_pop(p);
  102. +           p->in_def = $<num>4 & 1;
  103. +           p->cur_arg = $<id>3;
  104. +           }
  105. +       ;
  106. +
  107. +primary        : primary1
  108. +       | primary2
  109. +           {
  110. +           /*%%%*/
  111. +           $$ = $1;
  112. +           /*% %*/
  113. +           }
  114. +       ;
  115. +
  116. +fbody      : bodystmt
  117. +         k_end
  118. +           {
  119. +           /*%%%*/
  120. +           NODE *body = remove_begin($1);
  121. +           reduce_nodes(p, &body);
  122. +           $$ = body;
  123. +           /*% %*/
  124. +           }
  125. +       | '=' arg
  126. +           {
  127. +           $$ = $2;
  128. +           }
  129. +       ;
  130. +
  131. +primary_value  : primary1
  132.             {
  133.             value_expr($1);
  134.             $$ = $1;
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top