Ruby 3.3.7p123 (2025-01-15 revision be31f993d7fa0219d85f7b3c694d454da4ecc10b)
error.h
Go to the documentation of this file.
1#ifndef RBIMPL_INTERN_ERROR_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RBIMPL_INTERN_ERROR_H
26#include "ruby/internal/value.h"
29
35#define UNLIMITED_ARGUMENTS (-1)
36
37#define rb_exc_new2 rb_exc_new_cstr
38#define rb_exc_new3 rb_exc_new_str
39
41#define rb_check_arity rb_check_arity
43
45
46/* error.c */
47
48
66VALUE rb_exc_new(VALUE etype, const char *ptr, long len);
67
78VALUE rb_exc_new_cstr(VALUE etype, const char *str);
79
90
93RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2)
105void rb_loaderror(const char *fmt, ...);
106
109RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
120void rb_loaderror_with_path(VALUE path, const char *fmt, ...);
121
124RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
134void rb_name_error(ID name, const char *fmt, ...);
135
138RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
147void rb_name_error_str(VALUE name, const char *fmt, ...);
148
151RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3)
166void rb_frozen_error_raise(VALUE recv, const char *fmt, ...);
167
179void rb_invalid_str(const char *str, const char *type);
180
191void rb_error_frozen(const char *what);
192
203
211void rb_check_frozen(VALUE obj);
212
223void rb_check_copyable(VALUE obj, VALUE orig);
224
238void rb_error_arity(int argc, int min, int max);
239
241
247#define rb_check_frozen_internal(obj) do { \
248 VALUE frozen_obj = (obj); \
249 if (RB_UNLIKELY(RB_OBJ_FROZEN(frozen_obj))) { \
250 rb_error_frozen_object(frozen_obj); \
251 } \
252 } while (0)
253
255static inline void
257{
258 if (RB_UNLIKELY(RB_OBJ_FROZEN(obj))) {
260 }
261}
262
264#define rb_check_frozen rb_check_frozen_inline
265
279static inline int
280rb_check_arity(int argc, int min, int max)
281{
282 if ((argc < min) || (max != UNLIMITED_ARGUMENTS && argc > max))
283 rb_error_arity(argc, min, max);
284 return argc;
285}
286
287#endif /* RBIMPL_INTERN_ERROR_H */
Defines ASSUME / RB_LIKELY / UNREACHABLE.
Tweaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition dllexport.h:74
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition dllexport.h:65
Defines enum ruby_fl_type.
Defines RBIMPL_ATTR_FORMAT.
#define RBIMPL_ATTR_FORMAT(x, y, z)
Wraps (or simulates) __attribute__((format))
Definition format.h:29
void rb_name_error(ID id, const char *fmt,...)
Raises an instance of rb_eNameError.
Definition error.c:2037
void rb_check_copyable(VALUE obj, VALUE orig)
Ensures that the passed object can be initialize_copy relationship.
Definition error.c:3833
void rb_error_frozen(const char *what)
Identical to rb_frozen_error_raise(), except its raising exception has a message like "can't modify f...
Definition error.c:3773
void rb_name_error_str(VALUE str, const char *fmt,...)
Identical to rb_name_error(), except it takes a VALUE instead of ID.
Definition error.c:2052
void rb_frozen_error_raise(VALUE frozen_obj, const char *fmt,...)
Raises an instance of rb_eFrozenError.
Definition error.c:3779
void rb_invalid_str(const char *str, const char *type)
Honestly I don't understand the name, but it raises an instance of rb_eArgError.
Definition error.c:2476
VALUE rb_exc_new(VALUE etype, const char *ptr, long len)
Creates an instance of the passed exception class.
Definition error.c:1382
void rb_error_frozen_object(VALUE frozen_obj)
Identical to rb_error_frozen(), except it takes arbitrary Ruby object instead of C's string.
Definition error.c:3805
VALUE rb_exc_new_str(VALUE etype, VALUE str)
Identical to rb_exc_new_cstr(), except it takes a Ruby's string instead of C's.
Definition error.c:1395
void rb_loaderror(const char *fmt,...)
Raises an instance of rb_eLoadError.
Definition error.c:3474
void rb_loaderror_with_path(VALUE path, const char *fmt,...)
Identical to rb_loaderror(), except it additionally takes which file is unable to load.
Definition error.c:3486
#define UNLIMITED_ARGUMENTS
This macro is used in conjunction with rb_check_arity().
Definition error.h:35
static void rb_check_frozen_inline(VALUE obj)
Just another name of rb_check_frozen.
Definition error.h:256
#define rb_check_frozen
Just another name of rb_check_frozen.
Definition error.h:264
static int rb_check_arity(int argc, int min, int max)
Ensures that the passed integer is in the passed range.
Definition error.h:280
#define rb_exc_new_cstr(exc, str)
Identical to rb_exc_new(), except it assumes the passed pointer is a pointer to a C string.
Definition string.h:1670
int len
Length of the buffer.
Definition io.h:8
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
Definition nonnull.h:30
Defines RBIMPL_ATTR_NORETURN.
#define RBIMPL_ATTR_NORETURN()
Wraps (or simulates) [[noreturn]]
Definition noreturn.h:38
Defines VALUE and ID.
uintptr_t ID
Type that represents a Ruby identifier such as a variable name.
Definition value.h:52
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40