зеркало из https://github.com/github/ruby.git
symbol.c: preserve encoding
* symbol.c (rb_check_id, rb_check_symbol): preserve encoding of the given name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51175 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
135c75727d
Коммит
c53464c7e9
10
symbol.c
10
symbol.c
|
@ -963,9 +963,8 @@ rb_check_id(volatile VALUE *namep)
|
||||||
else if (!RB_TYPE_P(name, T_STRING)) {
|
else if (!RB_TYPE_P(name, T_STRING)) {
|
||||||
tmp = rb_check_string_type(name);
|
tmp = rb_check_string_type(name);
|
||||||
if (NIL_P(tmp)) {
|
if (NIL_P(tmp)) {
|
||||||
tmp = rb_inspect(name);
|
rb_raise(rb_eTypeError, "%+"PRIsVALUE" is not a symbol nor a string",
|
||||||
rb_raise(rb_eTypeError, "%s is not a symbol nor a string",
|
name);
|
||||||
RSTRING_PTR(tmp));
|
|
||||||
}
|
}
|
||||||
name = tmp;
|
name = tmp;
|
||||||
*namep = name;
|
*namep = name;
|
||||||
|
@ -996,9 +995,8 @@ rb_check_symbol(volatile VALUE *namep)
|
||||||
else if (!RB_TYPE_P(name, T_STRING)) {
|
else if (!RB_TYPE_P(name, T_STRING)) {
|
||||||
tmp = rb_check_string_type(name);
|
tmp = rb_check_string_type(name);
|
||||||
if (NIL_P(tmp)) {
|
if (NIL_P(tmp)) {
|
||||||
tmp = rb_inspect(name);
|
rb_raise(rb_eTypeError, "%+"PRIsVALUE" is not a symbol nor a string",
|
||||||
rb_raise(rb_eTypeError, "%s is not a symbol nor a string",
|
name);
|
||||||
RSTRING_PTR(tmp));
|
|
||||||
}
|
}
|
||||||
name = tmp;
|
name = tmp;
|
||||||
*namep = name;
|
*namep = name;
|
||||||
|
|
|
@ -120,5 +120,19 @@ module Test_Symbol
|
||||||
assert_symtype(Bug::Symbol.attrset("foo!="), :attrset?)
|
assert_symtype(Bug::Symbol.attrset("foo!="), :attrset?)
|
||||||
assert_equal(:"foo!=", Bug::Symbol.attrset(:foo!))
|
assert_equal(:"foo!=", Bug::Symbol.attrset(:foo!))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_check_id_invalid_type
|
||||||
|
cx = EnvUtil.labeled_class("X\u{1f431}")
|
||||||
|
assert_raise_with_message(TypeError, /X\u{1F431}/) {
|
||||||
|
Bug::Symbol.pinneddown?(cx)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_check_symbol_invalid_type
|
||||||
|
cx = EnvUtil.labeled_class("X\u{1f431}")
|
||||||
|
assert_raise_with_message(TypeError, /X\u{1F431}/) {
|
||||||
|
Bug::Symbol.find(cx)
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -251,6 +251,13 @@ class TestMethod < Test::Unit::TestCase
|
||||||
m = o.method(:bar).unbind
|
m = o.method(:bar).unbind
|
||||||
assert_raise(TypeError) { m.bind(Object.new) }
|
assert_raise(TypeError) { m.bind(Object.new) }
|
||||||
|
|
||||||
|
cx = EnvUtil.labeled_class("X\u{1f431}")
|
||||||
|
assert_raise_with_message(TypeError, /X\u{1f431}/) {
|
||||||
|
o.method(cx)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_bind_module_instance_method
|
||||||
feature4254 = '[ruby-core:34267]'
|
feature4254 = '[ruby-core:34267]'
|
||||||
m = M.instance_method(:meth)
|
m = M.instance_method(:meth)
|
||||||
assert_equal(:meth, m.bind(Object.new).call, feature4254)
|
assert_equal(:meth, m.bind(Object.new).call, feature4254)
|
||||||
|
@ -276,6 +283,10 @@ class TestMethod < Test::Unit::TestCase
|
||||||
assert_raise(TypeError) do
|
assert_raise(TypeError) do
|
||||||
Class.new.class_eval { define_method(:bar, o.method(:bar)) }
|
Class.new.class_eval { define_method(:bar, o.method(:bar)) }
|
||||||
end
|
end
|
||||||
|
cx = EnvUtil.labeled_class("X\u{1f431}")
|
||||||
|
assert_raise_with_message(TypeError, /X\u{1F431}/) {
|
||||||
|
Class.new {define_method(cx) {}}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_define_method_no_proc
|
def test_define_method_no_proc
|
||||||
|
|
Загрузка…
Ссылка в новой задаче