Feature #5221 » loaderror.patch
error.c | ||
---|---|---|
rb_eScriptError = rb_define_class("ScriptError", rb_eException);
|
||
rb_eSyntaxError = rb_define_class("SyntaxError", rb_eScriptError);
|
||
rb_eLoadError = rb_define_class("LoadError", rb_eScriptError);
|
||
rb_attr(rb_eLoadError, rb_intern("path"), 1, 0, Qfalse);
|
||
rb_eNotImpError = rb_define_class("NotImplementedError", rb_eScriptError);
|
||
rb_eNameError = rb_define_class("NameError", rb_eStandardError);
|
||
... | ... | |
{
|
||
va_list args;
|
||
VALUE mesg;
|
||
VALUE err;
|
||
va_start(args, fmt);
|
||
mesg = rb_enc_vsprintf(rb_locale_encoding(), fmt, args);
|
||
va_end(args);
|
||
err = rb_exc_new3(rb_eLoadError, mesg);
|
||
rb_ivar_set(err, rb_intern("@path"), Qnil);
|
||
rb_exc_raise(err);
|
||
}
|
||
void
|
||
rb_loaderror_with_path(VALUE path, const char *fmt, ...)
|
||
{
|
||
va_list args;
|
||
VALUE mesg;
|
||
VALUE err;
|
||
va_start(args, fmt);
|
||
mesg = rb_enc_vsprintf(rb_locale_encoding(), fmt, args);
|
||
va_end(args);
|
||
rb_exc_raise(rb_exc_new3(rb_eLoadError, mesg));
|
||
err = rb_exc_new3(rb_eLoadError, mesg);
|
||
rb_ivar_set(err, rb_intern("@path"), path);
|
||
rb_exc_raise(err);
|
||
}
|
||
void
|
||
... | ... | |
void
|
||
rb_load_fail(const char *path)
|
||
{
|
||
rb_loaderror("%s -- %s", strerror(errno), path);
|
||
rb_loaderror_with_path(rb_str_new2(path), "%s -- %s", strerror(errno), path);
|
||
}
|
||
void
|
include/ruby/intern.h | ||
---|---|---|
VALUE rb_exc_new2(VALUE, const char*);
|
||
VALUE rb_exc_new3(VALUE, VALUE);
|
||
PRINTF_ARGS(NORETURN(void rb_loaderror(const char*, ...)), 1, 2);
|
||
PRINTF_ARGS(NORETURN(void rb_loaderror_with_path(VALUE path, const char*, ...)), 2, 3);
|
||
PRINTF_ARGS(NORETURN(void rb_name_error(ID, const char*, ...)), 2, 3);
|
||
PRINTF_ARGS(NORETURN(void rb_name_error_str(VALUE, const char*, ...)), 2, 3);
|
||
NORETURN(void rb_invalid_str(const char*, const char*));
|
load.c | ||
---|---|---|
{
|
||
VALUE base = rb_current_realfilepath();
|
||
if (NIL_P(base)) {
|
||
rb_raise(rb_eLoadError, "cannot infer basepath");
|
||
rb_loaderror("cannot infer basepath");
|
||
}
|
||
base = rb_file_dirname(base);
|
||
return rb_require_safe(rb_file_absolute_path(fname, base), rb_safe_level());
|
||
... | ... | |
return type ? 's' : 'r';
|
||
}
|
||
void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
|
||
static void
|
||
load_failed(VALUE fname)
|
||
{
|
||
VALUE mesg = rb_str_buf_new_cstr("cannot load such file -- ");
|
||
rb_str_append(mesg, fname); /* should be ASCII compatible */
|
||
rb_exc_raise(rb_exc_new3(rb_eLoadError, mesg));
|
||
rb_loaderror_with_path(fname, "cannot load such file -- %s", RSTRING_PTR(fname));
|
||
RB_GC_GUARD(fname);
|
||
}
|
||
static VALUE
|
ruby.c | ||
---|---|---|
}
|
||
}
|
||
}
|
||
rb_raise(rb_eLoadError, "no Ruby script found in input");
|
||
rb_loaderror("no Ruby script found in input");
|
||
}
|
||
c = rb_io_getbyte(f);
|
test/ruby/test_require.rb | ||
---|---|---|
require 'tmpdir'
|
||
class TestRequire < Test::Unit::TestCase
|
||
def test_load_error_path
|
||
filename = "should_not_exist"
|
||
error = assert_raises(LoadError) do
|
||
require filename
|
||
end
|
||
assert_equal filename, error.path
|
||
end
|
||
def test_require_invalid_shared_object
|
||
t = Tempfile.new(["test_ruby_test_require", ".so"])
|
||
t.puts "dummy"
|
- « Previous
- 1
- 2
- Next »