Sha256: bb9cb13a9367acd346a96abb069a30eb8948a72f3e22eccec68ddc7789e90138

Contents?: true

Size: 1.07 KB

Versions: 23

Compression:

Stored size: 1.07 KB

Contents

#include "Exception.hpp"
#include "protect.hpp"
#include "to_from_ruby.hpp"
#include "detail/ruby.hpp"

#ifdef HAVE_STDARG_PROTOTYPES
#include <stdarg.h>
#define va_init_list(a,b) va_start(a,b)
#else
#include <varargs.h>
#define va_init_list(a,b) va_start(a)
#endif

Rice::Exception::
Exception(VALUE e)
  : Exception_Base(e)
  , message_(Qnil)
  , message_guard_(&message_)
{
}

Rice::Exception::
Exception(Exception const & other)
  : Exception_Base(other)
  , message_(other.message_)
  , message_guard_(&message_)
{
}

Rice::Exception::
Exception(Object exc, char const * fmt, ...)
  : Exception_Base(Qnil)
  , message_(Qnil)
  , message_guard_(&message_)
{
  va_list args;
  char buf[BUFSIZ];
  
  va_init_list(args, fmt);
  vsnprintf(buf, BUFSIZ, fmt, args);
  buf[BUFSIZ - 1] = '\0';
  va_end(args);

  set_value(protect(rb_exc_new2, exc, buf));
}

Rice::String Rice::Exception::
message() const
{
  return protect(rb_funcall, value(), rb_intern("message"), 0);
}

char const * Rice::Exception::
what() const throw()
{
  message_ = message();
  return from_ruby<char const *>(message_);
}

Version data entries

23 entries across 23 versions & 5 rubygems

Version Path
jameskilton-rice-1.2.0 rice/Exception.cpp
rice-1.5.3 rice/Exception.cpp
rice-1.5.2 rice/Exception.cpp
keyme-rice-1.5.1.keyme1 rice/Exception.cpp
keyme-rice-1.5.1.keyme rice/Exception.cpp
rice-1.5.1 rice/Exception.cpp
rice-1.5.0 rice/Exception.cpp
rice-jdguyot-1.4.3p1 rice/Exception.cpp
rice-1.4.3 rice/Exception.cpp
wurlinc-rice-1.4.0.4 rice/Exception.cpp
wurlinc-rice-1.4.0.1 rice/Exception.cpp
rice-1.4.2 rice/Exception.cpp
rice-jdguyot-1.4.0.p1 rice/Exception.cpp
rice-jdguyot-1.4.0 rice/Exception.cpp
rice-1.4.0 rice/Exception.cpp
rice-1.3.2 rice/Exception.cpp
rice-1.3.1 rice/Exception.cpp
rice-1.3.0 rice/Exception.cpp
rice-1.2.0 rice/Exception.cpp
rice-1.0.2 rice/Exception.cpp