diff options
author | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-12-09 12:06:38 +0000 |
---|---|---|
committer | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-12-09 12:06:38 +0000 |
commit | 15eba4ed0ebb4e019a037b0af10b34fdbc85e03a (patch) | |
tree | fef75b1601d2a103614b603d7dd97d4ad84aaf4a /object.c | |
parent | 3c7e764d495ec1ab2498853174f81e975b5be8c8 (diff) |
merge revision(s) e1b592b508c72a56ae012869d97fe1580ff87246,d10451f3fd51f577e704db770de48d05044eb45c: [Backport #15758]
test_module.rb: fix a typo
* test/ruby/test_module.rb (TestModule#test_nested_get): fix a
typo. nested module's name is a qualified path.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
object.c: fix searching nested const paths
* object.c (rb_mod_const_get, rb_mod_const_defined): nested const
paths should not search from toplevel constants.
[ruby-core:92202] [Bug #15758]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@67830 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 37 |
1 files changed, 30 insertions, 7 deletions
@@ -2530,7 +2530,19 @@ rb_mod_const_get(int argc, VALUE *argv, VALUE mod) name = ID2SYM(id); goto wrong_name; } - mod = RTEST(recur) ? rb_const_get(mod, id) : rb_const_get_at(mod, id); +#if 0 + mod = rb_const_get_0(mod, id, beglen > 0 || !RTEST(recur), RTEST(recur), FALSE); +#else + if (!RTEST(recur)) { + mod = rb_const_get_at(mod, id); + } + else if (beglen == 0) { + mod = rb_const_get(mod, id); + } + else { + mod = rb_const_get_from(mod, id); + } +#endif } return mod; @@ -2678,16 +2690,27 @@ rb_mod_const_defined(int argc, VALUE *argv, VALUE mod) name = ID2SYM(id); goto wrong_name; } - if (RTEST(recur)) { - if (!rb_const_defined(mod, id)) - return Qfalse; - mod = rb_const_get(mod, id); - } - else { + +#if 0 + mod = rb_const_search(mod, id, beglen > 0 || !RTEST(recur), RTEST(recur), FALSE); + if (mod == Qundef) return Qfalse; +#else + if (!RTEST(recur)) { if (!rb_const_defined_at(mod, id)) return Qfalse; mod = rb_const_get_at(mod, id); } + else if (beglen == 0) { + if (!rb_const_defined(mod, id)) + return Qfalse; + mod = rb_const_get(mod, id); + } + else { + if (!rb_const_defined_from(mod, id)) + return Qfalse; + mod = rb_const_get_from(mod, id); + } +#endif if (p < pend && !RB_TYPE_P(mod, T_MODULE) && !RB_TYPE_P(mod, T_CLASS)) { rb_raise(rb_eTypeError, "%"PRIsVALUE" does not refer to class/module", |