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

ruby-changes:59922

From: Nobuyoshi <ko1@a...>
Date: Tue, 4 Feb 2020 17:09:52 +0900 (JST)
Subject: [ruby-changes:59922] 7d6903dc47 (master): Add the loaded feature after no exception raised

https://git.ruby-lang.org/ruby.git/commit/?id=7d6903dc47

From 7d6903dc476f982e7b432adbeef3a3d9372a309f Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Tue, 4 Feb 2020 15:21:49 +0900
Subject: Add the loaded feature after no exception raised

Retrying after rescued `require` should try to load the same
library again.  [Bug #16607]

diff --git a/load.c b/load.c
index 70a0475..0cb0dd3 100644
--- a/load.c
+++ b/load.c
@@ -1014,7 +1014,6 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception) https://github.com/ruby/ruby/blob/trunk/load.c#L1014
 		result = 0;
 	    }
 	    else if (!*ftptr) {
-		rb_provide_feature(path);
 		result = TAG_RETURN;
 	    }
 	    else {
@@ -1029,7 +1028,6 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception) https://github.com/ruby/ruby/blob/trunk/load.c#L1028
 		    rb_ary_push(ruby_dln_librefs, LONG2NUM(handle));
 		    break;
 		}
-                rb_provide_feature(path);
                 result = TAG_RETURN;
 	    }
 	}
@@ -1063,6 +1061,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception) https://github.com/ruby/ruby/blob/trunk/load.c#L1061
         rb_exc_raise(ec->errinfo);
     }
 
+    if (result == TAG_RETURN) rb_provide_feature(path);
     ec->errinfo = errinfo;
 
     RUBY_DTRACE_HOOK(REQUIRE_RETURN, RSTRING_PTR(fname));
diff --git a/test/ruby/test_require.rb b/test/ruby/test_require.rb
index 7e53a02..000ae99 100644
--- a/test/ruby/test_require.rb
+++ b/test/ruby/test_require.rb
@@ -216,6 +216,13 @@ class TestRequire < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_require.rb#L216
     assert_syntax_error_backtrace {|req| require req}
   end
 
+  def test_require_syntax_error_rescued
+    assert_syntax_error_backtrace do |req|
+      assert_raise_with_message(SyntaxError, /unexpected/) {require req}
+      require req
+    end
+  end
+
   def test_load_syntax_error
     assert_syntax_error_backtrace {|req| load req}
   end
-- 
cgit v0.10.2


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

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