1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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:
nobu 2012-04-10 10:07:07 +00:00
parent a59dd4b489
commit f45fc7daa0
7 changed files with 67 additions and 0 deletions

View file

@ -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>
* lib/net/http.rb (Net::HTTP#send_request_with_body_stream):

13
error.c
View file

@ -1728,6 +1728,19 @@ Init_Exception(void)
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
rb_raise(VALUE exc, const char *fmt, ...)
{

View 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);
}

View 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")

View 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);
}

View file

@ -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_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 */
rb_encoding* rb_enc_from_index(int idx);

View 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