summaryrefslogtreecommitdiff
path: root/error.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-23 19:02:55 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-10-23 19:02:55 +0000
commit54716fe7ebbf20b5e91fdbe9b65e0bedb0c4836a (patch)
treec0e89d90d7ad34e7aa833a800227724f62c0930a /error.c
parent31f21aed2cee297a1fc316d60744697580446608 (diff)
* ruby.c: introduce --enable-frozen-string-literal-debug option.
If this option is enabled, the modify error will be: can't modify frozen String (RuntimeError) => can't modify frozen String, created at test.rb:3 (RuntimeError) * iseq.h: add compile option frozen_string_literal_debug. * compile.c: catch up this fix. * error.c (rb_error_frozen): ditto. * iseq.c (set_compile_option_from_hash): ditto. * test/ruby/test_rubyoptions.rb: add a test for this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'error.c')
-rw-r--r--error.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/error.c b/error.c
index a4006a14a5..9d3e191523 100644
--- a/error.c
+++ b/error.c
@@ -2226,8 +2226,16 @@ rb_error_frozen(const char *what)
void
rb_error_frozen_object(VALUE frozen_obj)
{
- rb_raise(rb_eRuntimeError, "can't modify frozen %"PRIsVALUE,
- CLASS_OF(frozen_obj));
+ VALUE path, line;
+ if ((path = rb_iv_get(frozen_obj, "__object_created_path__")) != Qnil &&
+ (line = rb_iv_get(frozen_obj, "__object_created_line__")) != Qnil) {
+ rb_raise(rb_eRuntimeError, "can't modify frozen %"PRIsVALUE", created at %"PRIsVALUE":%"PRIsVALUE,
+ CLASS_OF(frozen_obj), path, line);
+ }
+ else {
+ rb_raise(rb_eRuntimeError, "can't modify frozen %"PRIsVALUE,
+ CLASS_OF(frozen_obj));
+ }
}
#undef rb_check_frozen