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

ruby-changes:47437

From: usa <ko1@a...>
Date: Wed, 9 Aug 2017 22:29:49 +0900 (JST)
Subject: [ruby-changes:47437] usa:r59553 (ruby_2_3): merge revision(s) 59202: [Backport #13690]

usa	2017-08-09 22:29:42 +0900 (Wed, 09 Aug 2017)

  New Revision: 59553

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

  Log:
    merge revision(s) 59202: [Backport #13690]
    
    compile.c: disallow next in once
    
    * compile.c (iseq_compile_each0): turned dregx context in "once"
      into "guarded" type from "block" type, to disallow `next`,
      `break`, `redo` as well as outside "once".
      [ruby-core:81805] [Bug #13690]

  Modified directories:
    branches/ruby_2_3/
  Modified files:
    branches/ruby_2_3/ChangeLog
    branches/ruby_2_3/compile.c
    branches/ruby_2_3/test/ruby/test_exception.rb
    branches/ruby_2_3/test/ruby/test_syntax.rb
    branches/ruby_2_3/version.h
Index: ruby_2_3/version.h
===================================================================
--- ruby_2_3/version.h	(revision 59552)
+++ ruby_2_3/version.h	(revision 59553)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/version.h#L1
 #define RUBY_VERSION "2.3.5"
 #define RUBY_RELEASE_DATE "2017-08-09"
-#define RUBY_PATCHLEVEL 362
+#define RUBY_PATCHLEVEL 363
 
 #define RUBY_RELEASE_YEAR 2017
 #define RUBY_RELEASE_MONTH 8
Index: ruby_2_3/ChangeLog
===================================================================
--- ruby_2_3/ChangeLog	(revision 59552)
+++ ruby_2_3/ChangeLog	(revision 59553)
@@ -1,3 +1,16 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/ChangeLog#L1
+Wed Aug  9 22:27:23 2017  NAKAMURA Usaku  <usa@r...>
+
+	* test/ruby/test_syntax.rb (test_invalid_{break,next}): use
+	  assert_in_out_err instead of assert_syntax_error because on ruby_2_3
+	  assert_syntax_error uses eval.
+
+Wed Aug  9 22:27:23 2017  Nobuyoshi Nakada  <nobu@r...>
+
+	* compile.c (iseq_compile_each0): turned dregx context in "once"
+	  into "guarded" type from "block" type, to disallow `next`,
+	  `break`, `redo` as well as outside "once".
+	  [Bug #13690]
+
 Wed Aug  9 21:28:34 2017  NAKAMURA Usaku  <usa@r...>
 
 	* test/ruby/test_process.rb (test_rlimit_{name,value}): test in UTF-8
Index: ruby_2_3/compile.c
===================================================================
--- ruby_2_3/compile.c	(revision 59552)
+++ ruby_2_3/compile.c	(revision 59553)
@@ -28,6 +28,8 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/compile.c#L28
 #undef RUBY_UNTYPED_DATA_WARNING
 #define RUBY_UNTYPED_DATA_WARNING 0
 
+#define ISEQ_TYPE_ONCE_GUARD ISEQ_TYPE_DEFINED_GUARD
+
 #define FIXNUM_INC(n, i) ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
 #define FIXNUM_OR(n, i) ((n)|INT2FIX(i))
 
@@ -5489,7 +5491,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/ruby_2_3/compile.c#L5491
 	int ic_index = iseq->body->is_size++;
 	NODE *dregx_node = NEW_NODE(NODE_DREGX, node->u1.value, node->u2.value, node->u3.value);
 	NODE *block_node = NEW_NODE(NODE_SCOPE, 0, dregx_node, 0);
-	const rb_iseq_t * block_iseq = NEW_CHILD_ISEQ(block_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
+	const rb_iseq_t *block_iseq = NEW_CHILD_ISEQ(block_node, make_name_for_block(iseq),
+						     ISEQ_TYPE_ONCE_GUARD, line);
 
 	ADD_INSN2(ret, line, once, block_iseq, INT2FIX(ic_index));
 
Index: ruby_2_3/test/ruby/test_syntax.rb
===================================================================
--- ruby_2_3/test/ruby/test_syntax.rb	(revision 59552)
+++ ruby_2_3/test/ruby/test_syntax.rb	(revision 59553)
@@ -453,8 +453,16 @@ WARN https://github.com/ruby/ruby/blob/trunk/ruby_2_3/test/ruby/test_syntax.rb#L453
     }
   end
 
+  def test_invalid_break
+    assert_syntax_error("def m; break; end", /Invalid break/)
+    assert_in_out_err([], '/#{break}/', [],  /Invalid break \(SyntaxError\)$/)
+    assert_in_out_err([], '/#{break}/o', [],  /Invalid break \(SyntaxError\)$/)
+  end
+
   def test_invalid_next
     assert_syntax_error("def m; next; end", /Invalid next/)
+    assert_in_out_err([], '/#{next}/', [],  /Invalid next \(SyntaxError\)$/)
+    assert_in_out_err([], '/#{next}/o', [],  /Invalid next \(SyntaxError\)$/)
   end
 
   def test_lambda_with_space
Index: ruby_2_3/test/ruby/test_exception.rb
===================================================================
--- ruby_2_3/test/ruby/test_exception.rb	(revision 59552)
+++ ruby_2_3/test/ruby/test_exception.rb	(revision 59553)
@@ -905,15 +905,4 @@ $stderr = $stdout; raise "\x82\xa0"') do https://github.com/ruby/ruby/blob/trunk/ruby_2_3/test/ruby/test_exception.rb#L905
       }
     end;
   end
-
-  def test_break_in_once
-    assert_separately([], "#{<<-"begin;"}\n#{<<~'end;'}")
-    begin;
-      obj = Object.new
-      def obj.try
-        /#{break}/o
-      end
-      assert_raise(LocalJumpError, /proc-closure/) {obj.try}
-    end;
-  end
 end
Index: ruby_2_3
===================================================================
--- ruby_2_3	(revision 59552)
+++ ruby_2_3	(revision 59553)

Property changes on: ruby_2_3
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
   Merged /trunk:r59202

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

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