* error.c (rb_enc_raise): new function to raise an exception with
the message in the given encoding. patched by now (Nikolai Weibull) at [ruby-core:41160]. [Feature #5650] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a59dd4b489
commit
f45fc7daa0
@ -1,3 +1,9 @@
|
|||||||
|
Tue Apr 10 19:07:04 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* error.c (rb_enc_raise): new function to raise an exception with
|
||||||
|
the message in the given encoding. patched by now (Nikolai
|
||||||
|
Weibull) at [ruby-core:41160]. [Feature #5650]
|
||||||
|
|
||||||
Tue Apr 10 18:19:32 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
Tue Apr 10 18:19:32 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* lib/net/http.rb (Net::HTTP#send_request_with_body_stream):
|
* lib/net/http.rb (Net::HTTP#send_request_with_body_stream):
|
||||||
|
13
error.c
13
error.c
@ -1728,6 +1728,19 @@ Init_Exception(void)
|
|||||||
rb_define_global_function("warn", rb_warn_m, -1);
|
rb_define_global_function("warn", rb_warn_m, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
VALUE mesg;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
mesg = rb_enc_vsprintf(enc, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
rb_exc_raise(rb_exc_new3(exc, mesg));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_raise(VALUE exc, const char *fmt, ...)
|
rb_raise(VALUE exc, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
|
14
ext/-test-/exception/enc_raise.c
Normal file
14
ext/-test-/exception/enc_raise.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <ruby.h>
|
||||||
|
#include <ruby/encoding.h>
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
enc_raise(VALUE exc, VALUE encoding, VALUE mesg)
|
||||||
|
{
|
||||||
|
rb_enc_raise(rb_to_encoding(encoding), exc, "%s", StringValueCStr(mesg));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Init_enc_raise(VALUE klass)
|
||||||
|
{
|
||||||
|
rb_define_module_function(klass, "enc_raise", enc_raise, 2);
|
||||||
|
}
|
6
ext/-test-/exception/extconf.rb
Normal file
6
ext/-test-/exception/extconf.rb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
$srcs = Dir[File.join($srcdir, "*.{#{SRC_EXT.join(%q{,})}}")]
|
||||||
|
inits = $srcs.map {|s| File.basename(s, ".*")}
|
||||||
|
inits.delete("init")
|
||||||
|
inits.map! {|s|"X(#{s})"}
|
||||||
|
$defs << "-DTEST_INIT_FUNCS(X)=\"#{inits.join(' ')}\""
|
||||||
|
create_makefile("-test-/exception")
|
11
ext/-test-/exception/init.c
Normal file
11
ext/-test-/exception/init.c
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "ruby.h"
|
||||||
|
|
||||||
|
#define init(n) {void Init_##n(VALUE klass); Init_##n(klass);}
|
||||||
|
|
||||||
|
void
|
||||||
|
Init_exception(void)
|
||||||
|
{
|
||||||
|
VALUE mBug = rb_define_module("Bug");
|
||||||
|
VALUE klass = rb_define_class_under(mBug, "Exception", rb_eStandardError);
|
||||||
|
TEST_INIT_FUNCS(init);
|
||||||
|
}
|
@ -112,6 +112,8 @@ VALUE rb_str_export_to_enc(VALUE, rb_encoding *);
|
|||||||
VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
|
VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
|
||||||
VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
|
VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts);
|
||||||
|
|
||||||
|
PRINTF_ARGS(NORETURN(void rb_enc_raise(rb_encoding *, VALUE, const char*, ...)), 3, 4);
|
||||||
|
|
||||||
/* index -> rb_encoding */
|
/* index -> rb_encoding */
|
||||||
rb_encoding* rb_enc_from_index(int idx);
|
rb_encoding* rb_enc_from_index(int idx);
|
||||||
|
|
||||||
|
15
test/-ext-/exception/test_enc_raise.rb
Normal file
15
test/-ext-/exception/test_enc_raise.rb
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
require 'test/unit'
|
||||||
|
require '-test-/exception'
|
||||||
|
|
||||||
|
module Bug
|
||||||
|
class TestException < Test::Unit::TestCase
|
||||||
|
def test_enc_raise
|
||||||
|
feature5650 = '[ruby-core:41160]'
|
||||||
|
Encoding.list.each do |enc|
|
||||||
|
next unless enc.ascii_compatible?
|
||||||
|
e = assert_raise(Bug::Exception) {Bug::Exception.enc_raise(enc, "[Feature #5650]")}
|
||||||
|
assert_equal(enc, e.message.encoding, feature5650)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user