diff options
| author | NARUSE, Yui <naruse@airemix.jp> | 2024-01-30 18:00:47 +0900 |
|---|---|---|
| committer | NARUSE, Yui <naruse@airemix.jp> | 2024-01-30 18:00:47 +0900 |
| commit | 9f18cbd7964f32f224e7d0efba79ee0476a442e0 (patch) | |
| tree | ff2509ad120d8a1ed3045d28b252c20626e40e72 | |
| parent | d4b780e84e9a6b858d0f6c6a44b22da0d2f5835e (diff) | |
Revert "merge revision(s) bc002971b6ad483dbf69b8a275c44412bb6ab954: [Backport #20094]"
This reverts commit d4b780e84e9a6b858d0f6c6a44b22da0d2f5835e.
| -rw-r--r-- | compile.c | 1 | ||||
| -rw-r--r-- | parse.y | 36 | ||||
| -rw-r--r-- | test/ruby/test_whileuntil.rb | 18 | ||||
| -rw-r--r-- | version.h | 2 |
4 files changed, 16 insertions, 41 deletions
@@ -7097,7 +7097,6 @@ iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *c case NODE_COLON2: case NODE_COLON3: case NODE_BEGIN: - case NODE_BLOCK: CHECK(COMPILE(ret, "case in literal", node)); // (1) if (in_single_pattern) { ADD_INSN1(ret, line_node, dupn, INT2FIX(2)); @@ -1186,6 +1186,7 @@ static void fixpos(NODE*,NODE*); static int value_expr_gen(struct parser_params*,NODE*); static void void_expr(struct parser_params*,NODE*); static NODE *remove_begin(NODE*); +static NODE *remove_begin_all(NODE*); #define value_expr(node) value_expr_gen(p, (node)) static NODE *void_stmts(struct parser_params*,NODE*); static void reduce_nodes(struct parser_params*,NODE**); @@ -3893,7 +3894,7 @@ primary : literal { /*%%%*/ if (nd_type_p($2, NODE_SELF)) RNODE_SELF($2)->nd_state = 0; - $$ = NEW_BLOCK($2, &@$); + $$ = NEW_BEGIN($2, &@$); /*% %*/ /*% ripper: paren!($2) %*/ } @@ -5544,7 +5545,7 @@ p_var_ref : '^' tIDENTIFIER p_expr_ref : '^' tLPAREN expr_value rparen { /*%%%*/ - $$ = NEW_BLOCK($3, &@$); + $$ = NEW_BEGIN($3, &@$); /*% %*/ /*% ripper: begin!($3) %*/ } @@ -12829,19 +12830,7 @@ kwd_append(rb_node_kw_arg_t *kwlist, rb_node_kw_arg_t *kw) static NODE * new_defined(struct parser_params *p, NODE *expr, const YYLTYPE *loc) { - NODE *n = expr; - while (n) { - if (nd_type_p(n, NODE_BEGIN)) { - n = RNODE_BEGIN(n)->nd_body; - } - else if (nd_type_p(n, NODE_BLOCK) && RNODE_BLOCK(n)->nd_end == n) { - n = RNODE_BLOCK(n)->nd_head; - } - else { - break; - } - } - return NEW_DEFINED(n, loc); + return NEW_DEFINED(remove_begin_all(expr), loc); } static NODE* @@ -13981,6 +13970,16 @@ remove_begin(NODE *node) return node; } +static NODE * +remove_begin_all(NODE *node) +{ + NODE **n = &node, *n1 = node; + while (n1 && nd_type_p(n1, NODE_BEGIN)) { + *n = n1 = RNODE_BEGIN(n1)->nd_body; + } + return node; +} + static void reduce_nodes(struct parser_params *p, NODE **body) { @@ -14150,12 +14149,7 @@ cond0(struct parser_params *p, NODE *node, enum cond_type type, const YYLTYPE *l return NEW_MATCH2(node, NEW_GVAR(idLASTLINE, loc), loc); case NODE_BLOCK: - { - NODE *end = RNODE_BLOCK(node)->nd_end; - NODE **expr = &RNODE_BLOCK(end)->nd_head; - if (top) top = node == end; - *expr = cond0(p, *expr, type, loc, top); - } + RNODE_BLOCK(RNODE_BLOCK(node)->nd_end)->nd_head = cond0(p, RNODE_BLOCK(RNODE_BLOCK(node)->nd_end)->nd_head, type, loc, false); break; case NODE_AND: diff --git a/test/ruby/test_whileuntil.rb b/test/ruby/test_whileuntil.rb index ff6d29ac4a..121c44817d 100644 --- a/test/ruby/test_whileuntil.rb +++ b/test/ruby/test_whileuntil.rb @@ -73,24 +73,6 @@ class TestWhileuntil < Test::Unit::TestCase } end - def test_begin_while - i = 0 - sum = 0 - begin - i += 1 - sum += i - end while i < 10 - assert_equal([10, 55], [i, sum]) - - i = 0 - sum = 0 - ( - i += 1 - sum += i - ) while false - assert_equal([0, 0], [i, sum]) - end - def test_until i = 0 until i>4 @@ -11,7 +11,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 3 +#define RUBY_PATCHLEVEL 2 #include "ruby/version.h" #include "ruby/internal/abi.h" |
