Ruby 4.1.0dev (2026-08-15 revision d1c079751b80352d347452c8d134ffb177838adb)
ruby.h
Go to the documentation of this file.
1#ifndef RUBY_RUBY_H /*-*-C++-*-vi:se ft=cpp:*/
2#define RUBY_RUBY_H 1
15#include "ruby/internal/config.h"
16
17/* @shyouhei doesn't understand why we need <intrinsics.h> at this very
18 * beginning of the entire <ruby.h> circus. */
19#ifdef HAVE_INTRINSICS_H
20# include <intrinsics.h>
21#endif
22
23#include <stdarg.h>
24
25#include "defines.h"
26#include "ruby/internal/abi.h"
29#include "ruby/internal/core.h"
30#include "ruby/internal/ctype.h"
32#include "ruby/internal/error.h"
33#include "ruby/internal/eval.h"
34#include "ruby/internal/event.h"
36#include "ruby/internal/gc.h"
37#include "ruby/internal/glob.h"
49#include "ruby/internal/value.h"
52#include "ruby/assert.h"
54#include "ruby/backward/2/inttypes.h"
55#include "ruby/backward/2/limits.h"
56
58
59/* Module#methods, #singleton_methods and so on return Symbols */
67#define USE_SYMBOL_AS_METHOD_NAME 1
68
80
90#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
91
98
105#define FilePathStringValue(v) ((v) = rb_get_path(v))
106
108#if defined(HAVE_BUILTIN___BUILTIN_CONSTANT_P) && defined(HAVE_STMT_AND_DECL_IN_EXPR)
109# define rb_varargs_argc_check_runtime(argc, vargc) \
110 (((argc) <= (vargc)) ? (argc) : \
111 (rb_fatal("argc(%d) exceeds actual arguments(%d)", \
112 argc, vargc), 0))
113# define rb_varargs_argc_valid_p(argc, vargc) \
114 ((argc) == 0 ? (vargc) <= 1 : /* [ruby-core:85266] [Bug #14425] */ \
115 (argc) == (vargc))
116# if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
117# ifdef HAVE_ATTRIBUTE_ERRORFUNC
118ERRORFUNC((" argument length doesn't match"), int rb_varargs_bad_length(int,int));
119# else
120# define rb_varargs_bad_length(argc, vargc) \
121 ((argc)/rb_varargs_argc_valid_p(argc, vargc))
122# endif
123# define rb_varargs_argc_check(argc, vargc) \
124 __builtin_choose_expr(__builtin_constant_p(argc), \
125 (rb_varargs_argc_valid_p(argc, vargc) ? (argc) : \
126 rb_varargs_bad_length(argc, vargc)), \
127 rb_varargs_argc_check_runtime(argc, vargc))
128# else
129# define rb_varargs_argc_check(argc, vargc) \
130 rb_varargs_argc_check_runtime(argc, vargc)
131# endif
132#endif
142const char *rb_class2name(VALUE klass);
143
151const char *rb_obj_classname(VALUE obj);
152
163void rb_p(VALUE obj);
164
179VALUE rb_equal(VALUE lhs, VALUE rhs);
180
192VALUE rb_require(const char *feature);
193
194#include "ruby/intern.h"
195
203#define RUBY_VM 1 /* YARV */
204
212#define HAVE_NATIVETHREAD
213
224int ruby_native_thread_p(void);
225
231#define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();}
232
234RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
252int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
253
255RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 0)
273int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
274
275#include <errno.h>
276
357int rb_errno(void);
358
365void rb_errno_set(int err);
366
372int *rb_errno_ptr(void);
373
380static inline int *
382{
383 return &errno;
384}
385
386#define rb_orig_errno errno
387#undef errno
388#define errno (*rb_errno_ptr())
394#if RBIMPL_HAS_WARNING("-Wgnu-zero-variadic-macro-arguments")
395# /* Skip it; clang -pedantic doesn't like the following */
396#elif defined(__GNUC__) && defined(__OPTIMIZE__)
397# define rb_yield_values(argc, ...) \
398__extension__({ \
399 const int rb_yield_values_argc = (argc); \
400 const VALUE rb_yield_values_args[] = {__VA_ARGS__}; \
401 const int rb_yield_values_nargs = \
402 (int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); \
403 rb_yield_values2( \
404 rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), \
405 rb_yield_values_nargs ? rb_yield_values_args : NULL); \
406 })
407
408# define rb_funcall(recv, mid, argc, ...) \
409__extension__({ \
410 const int rb_funcall_argc = (argc); \
411 const VALUE rb_funcall_args[] = {__VA_ARGS__}; \
412 const int rb_funcall_nargs = \
413 (int)(sizeof(rb_funcall_args) / sizeof(VALUE)); \
414 rb_funcallv(recv, mid, \
415 rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), \
416 rb_funcall_nargs ? rb_funcall_args : NULL); \
417 })
418#endif
421#ifndef RUBY_DONT_SUBST
422#include "ruby/subst.h"
423#endif
424
425#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
426# include "ruby/backward.h"
427#endif
428
429#ifndef RUBY__ASAN_DEFAULT_OPTIONS
430# define RUBY__ASAN_DEFAULT_OPTIONS
431#endif
432
433#define RUBY_GLOBAL_SETUP \
434 RUBY__ASAN_DEFAULT_OPTIONS \
435 /* RUBY_GLOBAL_SETUP end */
436
437#if defined(__wasm__) && !defined(__EMSCRIPTEN__)
438int rb_wasm_rt_start(int (*)(int, char **), int, char **);
439# define ruby_start_main rb_wasm_rt_start
440#else
441# define ruby_start_main(main, argc, argv) main(argc, argv)
442#endif
443
445
446#endif /* RUBY_RUBY_H */
Function overloads to issue warnings around ANYARGS.
Conversion between C's arithmetic types and Ruby's numeric types.
Core data structures, definitions and manipulations.
Our own, locale independent, character handling routines.
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
Debugging and tracing APIs.
Defines enum ruby_fl_type.
Declares rb_glob().
Ruby-level global variables / constants, visible from C.
VALUE rb_equal(VALUE lhs, VALUE rhs)
This function is an optimised version of calling #==.
Definition object.c:138
Defines RBIMPL_HAS_WARNING.
Defines ASSUME / RB_LIKELY / UNREACHABLE.
#define RBIMPL_ATTR_FORMAT(x, y, z)
Wraps (or simulates) __attribute__((format))
Definition format.h:33
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
Definition nonnull.h:30
Declares rb_raise().
Declares rb_eval_string().
Registering values to the GC.
Creation and modification of Ruby methods.
Defines rb_intern.
Declares rb_define_variable().
Interpreter embedding APIs.
Block related APIs.
Memory management stuff.
Creation and modification of Ruby modules.
Defines #NEWOBJ.
VALUE rb_get_path(VALUE obj)
Converts an object to a path.
Definition file.c:271
const char * rb_class2name(VALUE klass)
Queries the name of the passed class.
Definition variable.c:520
VALUE rb_require(const char *feature)
Identical to rb_require_string(), except it takes C's string instead of Ruby's.
Definition load.c:1489
const char * rb_obj_classname(VALUE obj)
Queries the name of the class of the passed object.
Definition variable.c:529
void rb_p(VALUE obj)
Inspects an object.
Definition io.c:9083
int * rb_errno_ptr(void)
The location of errno
Definition eval.c:2330
int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap)
Identical to ruby_snprintf(), except it takes a va_list.
Definition sprintf.c:1021
static int * rb_orig_errno_ptr(void)
Not sure if it is necessary for extension libraries but this is where the "bare" errno is located.
Definition ruby.h:381
int rb_errno(void)
Identical to system errno.
Definition eval.c:2318
void rb_errno_set(int err)
Set the errno.
Definition eval.c:2324
#define errno
Ractor-aware version of errno.
Definition ruby.h:388
VALUE rb_get_path_no_checksafe(VALUE)
Definition file.c:265
int ruby_native_thread_p(void)
Queries if the thread which calls this function is a ruby's thread.
Definition thread.c:6050
int ruby_snprintf(char *str, size_t n, char const *fmt,...)
Our own locale-insensitive version of snprintf(3).
Definition sprintf.c:1048
Compile-time static implementation of rb_scan_args().
Defines enum ruby_special_consts.
Defines old _.
Defines VALUE and ID.
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40
Defines enum ruby_value_type.