From b9432e7630f3a85944730b3ba1b1aa4a8a753612 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 29 Aug 2010 03:51:39 +0000 Subject: [PATCH] * load.c (rb_provide_feature): clarify error message for frozen $LOADED_FEATURES. based on a patch from Run Paint Run Run at [ruby-core:31913]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ load.c | 4 ++++ test/ruby/test_require.rb | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index d003db5365..262b21a068 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sun Aug 29 12:51:33 2010 Nobuyoshi Nakada + + * load.c (rb_provide_feature): clarify error message for frozen + $LOADED_FEATURES. based on a patch from Run Paint Run Run at + [ruby-core:31913]. + Sun Aug 29 12:19:58 2010 Nobuyoshi Nakada * load.c (load_failed): should honor encoding. [ruby-core:31915] diff --git a/load.c b/load.c index c956977527..11fcaa4023 100644 --- a/load.c +++ b/load.c @@ -250,6 +250,10 @@ rb_feature_provided(const char *feature, const char **loading) static void rb_provide_feature(VALUE feature) { + if (OBJ_FROZEN(get_loaded_features())) { + rb_raise(rb_eRuntimeError, + "$LOADED_FEATURES is frozen; cannot append feature"); + } rb_ary_push(get_loaded_features(), feature); } diff --git a/test/ruby/test_require.rb b/test/ruby/test_require.rb index 6de5659e54..f87de90ab9 100644 --- a/test/ruby/test_require.rb +++ b/test/ruby/test_require.rb @@ -310,4 +310,11 @@ class TestRequire < Test::Unit::TestCase } } end + + def test_frozen_loaded_features + bug3756 = '[ruby-core:31913]' + assert_in_out_err(['-e', '$LOADED_FEATURES.freeze; require "ostruct"'], "", + [], /\$LOADED_FEATURES is frozen; cannot append feature \(RuntimeError\)$/, + bug3756) + end end