[前][次][番号順一覧][スレッド一覧]

ruby-changes:50354

From: naruse <ko1@a...>
Date: Sun, 18 Feb 2018 20:53:21 +0900 (JST)
Subject: [ruby-changes:50354] naruse:r62470 (ruby_2_5): Revert r62426

naruse	2018-02-18 20:53:14 +0900 (Sun, 18 Feb 2018)

  New Revision: 62470

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62470

  Log:
    Revert r62426
    
    it cause test failure

  Modified directories:
    branches/ruby_2_5/
  Modified files:
    branches/ruby_2_5/compile.c
    branches/ruby_2_5/test/ruby/test_syntax.rb
    branches/ruby_2_5/version.h
Index: ruby_2_5/version.h
===================================================================
--- ruby_2_5/version.h	(revision 62469)
+++ ruby_2_5/version.h	(revision 62470)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_5/version.h#L1
 #define RUBY_VERSION "2.5.0"
 #define RUBY_RELEASE_DATE "2018-02-16"
-#define RUBY_PATCHLEVEL 19
+#define RUBY_PATCHLEVEL 20
 
 #define RUBY_RELEASE_YEAR 2018
 #define RUBY_RELEASE_MONTH 2
Index: ruby_2_5/compile.c
===================================================================
--- ruby_2_5/compile.c	(revision 62469)
+++ ruby_2_5/compile.c	(revision 62470)
@@ -2295,55 +2295,33 @@ replace_destination(INSN *dobj, INSN *no https://github.com/ruby/ruby/blob/trunk/ruby_2_5/compile.c#L2295
     if (!dl->refcnt) ELEM_REMOVE(&dl->link);
 }
 
-static LABEL*
-find_destination(INSN *i)
-{
-    int pos, len = insn_len(i->insn_id);
-    for (pos = 0; pos < len; ++pos) {
-	if (insn_op_types(i->insn_id)[pos] == TS_OFFSET) {
-	    return (LABEL *)OPERAND_AT(i, pos);
-	}
-    }
-    return 0;
-}
-
 static int
 remove_unreachable_chunk(rb_iseq_t *iseq, LINK_ELEMENT *i)
 {
     LINK_ELEMENT *first = i, *end;
-    int *unref_counts = 0, nlabels = ISEQ_COMPILE_DATA(iseq)->label_no;
 
     if (!i) return 0;
-    unref_counts = ALLOCA_N(int, nlabels);
-    MEMZERO(unref_counts, int, nlabels);
-    end = i;
-    do {
-	LABEL *lab;
+    while (i) {
 	if (IS_INSN(i)) {
-	    if (IS_INSN_ID(i, leave)) {
-		end = i;
+	    if (IS_INSN_ID(i, jump) || IS_INSN_ID(i, leave)) {
 		break;
 	    }
-	    else if ((lab = find_destination((INSN *)i)) != 0) {
-		if (lab->unremovable) break;
-		unref_counts[lab->label_no]++;
-	    }
 	}
 	else if (IS_LABEL(i)) {
-	    lab = (LABEL *)i;
-	    if (lab->unremovable) return 0;
-	    if (lab->refcnt > unref_counts[lab->label_no]) {
+	    if (((LABEL *)i)->unremovable) return 0;
+	    if (((LABEL *)i)->refcnt > 0) {
 		if (i == first) return 0;
+		i = i->prev;
 		break;
 	    }
-	    continue;
 	}
 	else if (IS_TRACE(i)) {
 	    /* do nothing */
 	}
 	else return 0;
-	end = i;
-    } while ((i = i->next) != 0);
+	i = i->next;
+    }
+    end = i;
     i = first;
     do {
 	if (IS_INSN(i)) {
@@ -2438,7 +2416,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/ruby_2_5/compile.c#L2416
 	    goto again;
 	}
 	else if (IS_INSN_ID(diobj, leave)) {
-	    INSN *pop;
 	    /*
 	     *  jump LABEL
 	     *  ...
@@ -2446,7 +2423,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/ruby_2_5/compile.c#L2423
 	     *  leave
 	     * =>
 	     *  leave
-	     *  pop
 	     *  ...
 	     * LABEL:
 	     *  leave
@@ -2456,9 +2432,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, https://github.com/ruby/ruby/blob/trunk/ruby_2_5/compile.c#L2432
 	    iobj->insn_id = BIN(leave);
 	    iobj->operand_size = 0;
 	    iobj->insn_info = diobj->insn_info;
-	    /* adjust stack depth */
-	    pop = new_insn_body(iseq, diobj->insn_info.line_no, BIN(pop), 0);
-	    ELEM_INSERT_NEXT(&iobj->link, &pop->link);
 	    goto again;
 	}
 	else if ((piobj = (INSN *)get_prev_insn(iobj)) != 0 &&
Index: ruby_2_5/test/ruby/test_syntax.rb
===================================================================
--- ruby_2_5/test/ruby/test_syntax.rb	(revision 62469)
+++ ruby_2_5/test/ruby/test_syntax.rb	(revision 62470)
@@ -1128,15 +1128,6 @@ eom https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/ruby/test_syntax.rb#L1128
     assert_equal(:begin, result)
   end
 
-  def test_return_in_loop
-    obj = Object.new
-    def obj.test
-      x = nil
-      return until x unless x
-    end
-    assert_nil obj.test
-  end
-
   private
 
   def not_label(x) @result = x; @not_label ||= nil end
Index: ruby_2_5
===================================================================
--- ruby_2_5	(revision 62469)
+++ ruby_2_5	(revision 62470)

Property changes on: ruby_2_5
___________________________________________________________________
Modified: svn:mergeinfo
## -0,1 +0,0 ##
   Reverse-merged /trunk:r61617-61618

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]