Ruby: include/ruby/ruby.h Source File

Ruby 3.3.7p123 (2025-01-15 revision be31f993d7fa0219d85f7b3c694d454da4ecc10b)

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"
27#include "ruby/internal/anyargs.h"
28#include "ruby/internal/arithmetic.h"
29#include "ruby/internal/core.h"
30#include "ruby/internal/ctype.h"
31#include "ruby/internal/dllexport.h"
32#include "ruby/internal/error.h"
33#include "ruby/internal/eval.h"
34#include "ruby/internal/event.h"
35#include "ruby/internal/fl_type.h"
36#include "ruby/internal/gc.h"
37#include "ruby/internal/glob.h"
38#include "ruby/internal/globals.h"
39#include "ruby/internal/has/warning.h"
40#include "ruby/internal/interpreter.h"
41#include "ruby/internal/iterator.h"
42#include "ruby/internal/memory.h"
43#include "ruby/internal/method.h"
44#include "ruby/internal/module.h"
45#include "ruby/internal/newobj.h"
46#include "ruby/internal/scan_args.h"
47#include "ruby/internal/special_consts.h"
48#include "ruby/internal/symbol.h"
49#include "ruby/internal/value.h"
50#include "ruby/internal/value_type.h"
51#include "ruby/internal/variable.h"
52#include "ruby/assert.h"
53#include "ruby/backward/2/assume.h"
54#include "ruby/backward/2/inttypes.h"
55#include "ruby/backward/2/limits.h"
56
57 RBIMPL_SYMBOL_EXPORT_BEGIN()
58
59/* Module#methods, #singleton_methods and so on return Symbols */
67#define USE_SYMBOL_AS_METHOD_NAME 1
68
79 VALUE rb_get_path(VALUE obj);
80
90#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
91
97 VALUE rb_get_path_no_checksafe(VALUE);
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
134
142const char *rb_class2name(VALUE klass);
143
151const char *rb_obj_classname(VALUE obj);
152
163void rb_p(VALUE obj);
164
179 VALUE rb_equal(VALUE lhs, VALUE rhs);
180
192 VALUE 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
233 RBIMPL_ATTR_NONNULL((3))
234 RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
252int ruby_snprintf(char *str, size_t n, char const *fmt, ...);
253
254 RBIMPL_ATTR_NONNULL((3))
255 RBIMPL_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
351
357int rb_errno(void);
358
365void rb_errno_set(int err);
366
372int *rb_errno_ptr(void);
373
380static inline int *
381rb_orig_errno_ptr(void)
382{
383 return &errno;
384}
385
386#define rb_orig_errno errno
387#undef errno
388#define errno (*rb_errno_ptr())
389
391
392
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(HAVE_VA_ARGS_MACRO) && 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
420
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 RBIMPL_SYMBOL_EXPORT_END()
430
431#endif /* RUBY_RUBY_H */
anyargs.h
Function overloads to issue warnings around ANYARGS.
arithmetic.h
Conversion between C's arithmetic types and Ruby's numeric types.
assert.h
assume.h
Defines ASSUME / RB_LIKELY / UNREACHABLE.
core.h
Core data structures, definitions and manipulations.
ctype.h
Our own, locale independent, character handling routines.
dllexport.h
Tweaking visibility of C variables/functions.
RBIMPL_SYMBOL_EXPORT_END
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition dllexport.h:74
RBIMPL_SYMBOL_EXPORT_BEGIN
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition dllexport.h:65
event.h
Debugging and tracing APIs.
fl_type.h
Defines enum ruby_fl_type.
RBIMPL_ATTR_FORMAT
#define RBIMPL_ATTR_FORMAT(x, y, z)
Wraps (or simulates) __attribute__((format))
Definition format.h:29
glob.h
Declares rb_glob().
globals.h
Ruby-level global variables / constants, visible from C.
rb_equal
VALUE rb_equal(VALUE lhs, VALUE rhs)
This function is an optimised version of calling #==.
Definition object.c:147
warning.h
Defines RBIMPL_HAS_WARNING.
defines.h
error.h
Declares rb_raise().
eval.h
Declares rb_eval_string().
gc.h
Registering values to the GC.
method.h
Creation and modification of Ruby methods.
symbol.h
Defines rb_intern.
variable.h
Declares rb_define_variable().
intern.h
interpreter.h
Interpreter embedding APIs.
iterator.h
Block related APIs.
memory.h
Memory management stuff.
module.h
Creation and modification of Ruby modules.
newobj.h
Defines NEWOBJ.
RBIMPL_ATTR_NONNULL
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
Definition nonnull.h:30
rb_get_path
VALUE rb_get_path(VALUE obj)
Converts an object to a path.
Definition file.c:246
rb_class2name
const char * rb_class2name(VALUE klass)
Queries the name of the passed class.
Definition variable.c:408
rb_require
VALUE rb_require(const char *feature)
Identical to rb_require_string(), except it takes C's string instead of Ruby's.
Definition load.c:1394
rb_obj_classname
const char * rb_obj_classname(VALUE obj)
Queries the name of the class of the passed object.
Definition variable.c:417
rb_p
void rb_p(VALUE obj)
Inspects an object.
Definition io.c:9017
rb_errno_ptr
int * rb_errno_ptr(void)
The location of errno
Definition eval.c:2140
ruby_vsnprintf
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:1017
rb_orig_errno_ptr
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
rb_errno
int rb_errno(void)
Identical to system errno.
Definition eval.c:2128
rb_errno_set
void rb_errno_set(int err)
Set the errno.
Definition eval.c:2134
errno
#define errno
Ractor-aware version of errno.
Definition ruby.h:388
rb_get_path_no_checksafe
VALUE rb_get_path_no_checksafe(VALUE)
Definition file.c:240
ruby_native_thread_p
int ruby_native_thread_p(void)
Queries if the thread which calls this function is a ruby's thread.
Definition thread.c:5478
scan_args.h
Compile-time static implementation of rb_scan_args().
special_consts.h
Defines enum ruby_special_consts.
stdarg.h
Defines old _.
value.h
Defines VALUE and ID.
VALUE
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40
value_type.h
Defines enum ruby_value_type.