summaryrefslogtreecommitdiffhomepage
path: root/src/variable.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-04-01 19:49:30 +0900
committerKOBAYASHI Shuji <[email protected]>2019-04-01 20:12:43 +0900
commit55cb625808ab9b498d42d13442f5ce5115d606a5 (patch)
tree0307cf00f4191c5ae1c410eac0fa4e00f196a30f /src/variable.c
parent6ec855a38e8116e4f0d04f188e948046b47af74f (diff)
downloadmruby-55cb625808ab9b498d42d13442f5ce5115d606a5.tar.gz
mruby-55cb625808ab9b498d42d13442f5ce5115d606a5.zip
Fix modifiable class name
Fix the following example: Object.const_set :A, Module.new{const_set :B, Class.new} ab = A::B.to_s p ab #=> "A::B" # Good ab[0] = "x" p A::B.to_s #=> "x::B" # Bad
Diffstat (limited to 'src/variable.c')
-rw-r--r--src/variable.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/variable.c b/src/variable.c
index 724b153fe..9edfb32bd 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -1106,6 +1106,7 @@ mrb_class_find_path(mrb_state *mrb, struct RClass *c)
iv_del(mrb, c->iv, mrb_intern_lit(mrb, "__outer__"), NULL);
iv_put(mrb, c->iv, mrb_intern_lit(mrb, "__classname__"), path);
mrb_field_write_barrier_value(mrb, (struct RBasic*)c, path);
+ path = mrb_str_dup(mrb, path);
}
return path;
}