diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-04-01 19:49:30 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-04-01 20:12:43 +0900 |
| commit | 55cb625808ab9b498d42d13442f5ce5115d606a5 (patch) | |
| tree | 0307cf00f4191c5ae1c410eac0fa4e00f196a30f /src/variable.c | |
| parent | 6ec855a38e8116e4f0d04f188e948046b47af74f (diff) | |
| download | mruby-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.c | 1 |
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; } |
