summaryrefslogtreecommitdiff
path: root/include/ruby/backward
diff options
context:
space:
mode:
Diffstat (limited to 'include/ruby/backward')
-rw-r--r--include/ruby/backward/2/assume.h43
-rw-r--r--include/ruby/backward/2/attributes.h170
-rw-r--r--include/ruby/backward/2/bool.h37
-rw-r--r--include/ruby/backward/2/gcc_version_since.h38
-rw-r--r--include/ruby/backward/2/inttypes.h132
-rw-r--r--include/ruby/backward/2/limits.h100
-rw-r--r--include/ruby/backward/2/long_long.h65
-rw-r--r--include/ruby/backward/2/r_cast.h33
-rw-r--r--include/ruby/backward/2/rmodule.h37
-rw-r--r--include/ruby/backward/2/stdalign.h30
-rw-r--r--include/ruby/backward/2/stdarg.h47
-rw-r--r--include/ruby/backward/classext.h18
-rw-r--r--include/ruby/backward/cxxanyargs.hpp683
-rw-r--r--include/ruby/backward/rubyio.h6
-rw-r--r--include/ruby/backward/rubysig.h47
-rw-r--r--include/ruby/backward/st.h6
-rw-r--r--include/ruby/backward/util.h6
17 files changed, 83 insertions, 1415 deletions
diff --git a/include/ruby/backward/2/assume.h b/include/ruby/backward/2/assume.h
deleted file mode 100644
index 3fbb81439a..0000000000
--- a/include/ruby/backward/2/assume.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef RUBY_BACKWARD2_ASSUME_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_ASSUME_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines #ASSUME / #RB_LIKELY / #UNREACHABLE
- */
-#include "ruby/internal/config.h"
-#include "ruby/internal/assume.h"
-#include "ruby/internal/has/builtin.h"
-
-#undef ASSUME /* Kill config.h definition */
-#undef UNREACHABLE /* Kill config.h definition */
-#define ASSUME RBIMPL_ASSUME
-#define UNREACHABLE RBIMPL_UNREACHABLE()
-#define UNREACHABLE_RETURN RBIMPL_UNREACHABLE_RETURN
-
-/* likely */
-#if RBIMPL_HAS_BUILTIN(__builtin_expect)
-# define RB_LIKELY(x) (__builtin_expect(!!(x), 1))
-# define RB_UNLIKELY(x) (__builtin_expect(!!(x), 0))
-
-#else
-# define RB_LIKELY(x) (x)
-# define RB_UNLIKELY(x) (x)
-#endif
-
-#endif /* RUBY_BACKWARD2_ASSUME_H */
diff --git a/include/ruby/backward/2/attributes.h b/include/ruby/backward/2/attributes.h
deleted file mode 100644
index eaff9e3381..0000000000
--- a/include/ruby/backward/2/attributes.h
+++ /dev/null
@@ -1,170 +0,0 @@
-#ifndef RUBY_BACKWARD2_ATTRIBUTES_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_ATTRIBUTES_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Various attribute-related macros.
- *
- * ### Q&A ###
- *
- * - Q: Why are the macros defined in this header file so inconsistent in
- * style?
- *
- * - A: Don't know. Don't blame me. Backward compatibility is the key here.
- * I'm just preserving what they have been.
- */
-#include "ruby/internal/config.h"
-#include "ruby/internal/attr/alloc_size.h"
-#include "ruby/internal/attr/cold.h"
-#include "ruby/internal/attr/const.h"
-#include "ruby/internal/attr/deprecated.h"
-#include "ruby/internal/attr/error.h"
-#include "ruby/internal/attr/forceinline.h"
-#include "ruby/internal/attr/format.h"
-#include "ruby/internal/attr/maybe_unused.h"
-#include "ruby/internal/attr/noinline.h"
-#include "ruby/internal/attr/nonnull.h"
-#include "ruby/internal/attr/noreturn.h"
-#include "ruby/internal/attr/pure.h"
-#include "ruby/internal/attr/restrict.h"
-#include "ruby/internal/attr/returns_nonnull.h"
-#include "ruby/internal/attr/warning.h"
-#include "ruby/internal/has/attribute.h"
-
-/* function attributes */
-#undef CONSTFUNC
-#define CONSTFUNC(x) RBIMPL_ATTR_CONST() x
-
-#undef PUREFUNC
-#define PUREFUNC(x) RBIMPL_ATTR_PURE() x
-
-#undef DEPRECATED
-#define DEPRECATED(x) RBIMPL_ATTR_DEPRECATED(("")) x
-
-#undef DEPRECATED_BY
-#define DEPRECATED_BY(n,x) RBIMPL_ATTR_DEPRECATED(("by: " # n)) x
-
-#undef DEPRECATED_TYPE
-#if defined(__GNUC__)
-# define DEPRECATED_TYPE(mesg, decl) \
- _Pragma("message \"DEPRECATED_TYPE is deprecated\""); \
- decl RBIMPL_ATTR_DEPRECATED(mseg)
-#elif defined(_MSC_VER)
-# pragma deprecated(DEPRECATED_TYPE)
-# define DEPRECATED_TYPE(mesg, decl) \
- __pragma(message(__FILE__"("STRINGIZE(__LINE__)"): warning: " \
- "DEPRECATED_TYPE is deprecated")) \
- decl RBIMPL_ATTR_DEPRECATED(mseg)
-#else
-# define DEPRECATED_TYPE(mesg, decl) \
- <-<-"DEPRECATED_TYPE is deprecated"->->
-#endif
-
-#undef RUBY_CXX_DEPRECATED
-#define RUBY_CXX_DEPRECATED(mseg) RBIMPL_ATTR_DEPRECATED((mseg))
-
-#undef NOINLINE
-#define NOINLINE(x) RBIMPL_ATTR_NOINLINE() x
-
-#ifndef MJIT_HEADER
-# undef ALWAYS_INLINE
-# define ALWAYS_INLINE(x) RBIMPL_ATTR_FORCEINLINE() x
-#endif
-
-#undef ERRORFUNC
-#define ERRORFUNC(mesg, x) RBIMPL_ATTR_ERROR(mesg) x
-#if RBIMPL_HAS_ATTRIBUTE(error)
-# define HAVE_ATTRIBUTE_ERRORFUNC 1
-#else
-# define HAVE_ATTRIBUTE_ERRORFUNC 0
-#endif
-
-#undef WARNINGFUNC
-#define WARNINGFUNC(mesg, x) RBIMPL_ATTR_WARNING(mesg) x
-#if RBIMPL_HAS_ATTRIBUTE(warning)
-# define HAVE_ATTRIBUTE_WARNINGFUNC 1
-#else
-# define HAVE_ATTRIBUTE_WARNINGFUNC 0
-#endif
-
-/*
- cold attribute for code layout improvements
- RUBY_FUNC_ATTRIBUTE not used because MSVC does not like nested func macros
- */
-#undef COLDFUNC
-#define COLDFUNC RBIMPL_ATTR_COLD()
-
-#define PRINTF_ARGS(decl, string_index, first_to_check) \
- RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, (string_index), (first_to_check)) \
- decl
-
-#undef RUBY_ATTR_ALLOC_SIZE
-#define RUBY_ATTR_ALLOC_SIZE RBIMPL_ATTR_ALLOC_SIZE
-
-#undef RUBY_ATTR_MALLOC
-#define RUBY_ATTR_MALLOC RBIMPL_ATTR_RESTRICT()
-
-#undef RUBY_ATTR_RETURNS_NONNULL
-#define RUBY_ATTR_RETURNS_NONNULL RBIMPL_ATTR_RETURNS_NONNULL()
-
-#ifndef FUNC_MINIMIZED
-#define FUNC_MINIMIZED(x) x
-#endif
-
-#ifndef FUNC_UNOPTIMIZED
-#define FUNC_UNOPTIMIZED(x) x
-#endif
-
-#ifndef RUBY_ALIAS_FUNCTION_TYPE
-#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \
- FUNC_MINIMIZED(type prot) {return (type)name args;}
-#endif
-
-#ifndef RUBY_ALIAS_FUNCTION_VOID
-#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) \
- FUNC_MINIMIZED(void prot) {name args;}
-#endif
-
-#ifndef RUBY_ALIAS_FUNCTION
-#define RUBY_ALIAS_FUNCTION(prot, name, args) \
- RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args)
-#endif
-
-#undef RUBY_FUNC_NONNULL
-#define RUBY_FUNC_NONNULL(n, x) RBIMPL_ATTR_NONNULL(n) x
-
-#undef NORETURN
-#define NORETURN(x) RBIMPL_ATTR_NORETURN() x
-#define NORETURN_STYLE_NEW
-
-#ifndef PACKED_STRUCT
-# define PACKED_STRUCT(x) x
-#endif
-
-#ifndef PACKED_STRUCT_UNALIGNED
-# if UNALIGNED_WORD_ACCESS
-# define PACKED_STRUCT_UNALIGNED(x) PACKED_STRUCT(x)
-# else
-# define PACKED_STRUCT_UNALIGNED(x) x
-# endif
-#endif
-
-#undef RB_UNUSED_VAR
-#define RB_UNUSED_VAR(x) x RBIMPL_ATTR_MAYBE_UNUSED()
-
-#endif /* RUBY_BACKWARD2_ATTRIBUTES_H */
diff --git a/include/ruby/backward/2/bool.h b/include/ruby/backward/2/bool.h
deleted file mode 100644
index 53164eb3b8..0000000000
--- a/include/ruby/backward/2/bool.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef RUBY_BACKWARD2_BOOL_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_BOOL_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines old #TRUE / #FALSE
- */
-#include "ruby/internal/stdbool.h"
-
-#ifndef FALSE
-# define FALSE false
-#elif FALSE
-# error FALSE must be false
-#endif
-
-#ifndef TRUE
-# define TRUE true
-#elif ! TRUE
-# error TRUE must be true
-#endif
-
-#endif /* RUBY_BACKWARD2_BOOL_H */
diff --git a/include/ruby/backward/2/gcc_version_since.h b/include/ruby/backward/2/gcc_version_since.h
deleted file mode 100644
index 2a5b76c102..0000000000
--- a/include/ruby/backward/2/gcc_version_since.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef RUBY_BACKWARD2_GCC_VERSION_SINCE_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_GCC_VERSION_SINCE_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines old #GCC_VERSION_SINCE
- */
-#include "ruby/internal/compiler_since.h"
-
-#ifndef GCC_VERSION_SINCE
-#define GCC_VERSION_SINCE(x, y, z) RBIMPL_COMPILER_SINCE(GCC, (x), (y), (z))
-#endif
-
-#ifndef GCC_VERSION_BEFORE
-#define GCC_VERSION_BEFORE(x, y, z) \
- (RBIMPL_COMPILER_BEFORE(GCC, (x), (y), (z)) || \
- (RBIMPL_COMPILER_IS(GCC) && \
- ((RBIMPL_COMPILER_VERSION_MAJOR == (x)) && \
- ((RBIMPL_COMPILER_VERSION_MINOR == (y)) && \
- (RBIMPL_COMPILER_VERSION_PATCH == (z))))))
-#endif
-
-#endif /* RUBY_BACKWARD2_GCC_VERSION_SINCE_H */
diff --git a/include/ruby/backward/2/inttypes.h b/include/ruby/backward/2/inttypes.h
deleted file mode 100644
index c1e376a107..0000000000
--- a/include/ruby/backward/2/inttypes.h
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef RUBY_BACKWARD2_INTTYPES_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_INTTYPES_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief C99 shim for `<inttypes.h>`
- */
-#include "ruby/internal/config.h" /* PRI_LL_PREFIX etc. are here */
-
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-#include "ruby/internal/value.h" /* PRI_VALUE_PREFIX is here. */
-
-#ifndef PRI_INT_PREFIX
-# define PRI_INT_PREFIX ""
-#endif
-
-#ifndef PRI_LONG_PREFIX
-# define PRI_LONG_PREFIX "l"
-#endif
-
-#ifndef PRI_SHORT_PREFIX
-# define PRI_SHORT_PREFIX "h"
-#endif
-
-#ifdef PRI_64_PREFIX
-# /* Take that. */
-#elif SIZEOF_LONG == 8
-# define PRI_64_PREFIX PRI_LONG_PREFIX
-#elif SIZEOF_LONG_LONG == 8
-# define PRI_64_PREFIX PRI_LL_PREFIX
-#endif
-
-#ifndef PRIdPTR
-# define PRIdPTR PRI_PTR_PREFIX"d"
-# define PRIiPTR PRI_PTR_PREFIX"i"
-# define PRIoPTR PRI_PTR_PREFIX"o"
-# define PRIuPTR PRI_PTR_PREFIX"u"
-# define PRIxPTR PRI_PTR_PREFIX"x"
-# define PRIXPTR PRI_PTR_PREFIX"X"
-#endif
-
-#ifndef RUBY_PRI_VALUE_MARK
-# define RUBY_PRI_VALUE_MARK "\v"
-#endif
-
-#if defined PRIdPTR && !defined PRI_VALUE_PREFIX
-# define PRIdVALUE PRIdPTR
-# define PRIoVALUE PRIoPTR
-# define PRIuVALUE PRIuPTR
-# define PRIxVALUE PRIxPTR
-# define PRIXVALUE PRIXPTR
-# define PRIsVALUE PRIiPTR"" RUBY_PRI_VALUE_MARK
-#else
-# define PRIdVALUE PRI_VALUE_PREFIX"d"
-# define PRIoVALUE PRI_VALUE_PREFIX"o"
-# define PRIuVALUE PRI_VALUE_PREFIX"u"
-# define PRIxVALUE PRI_VALUE_PREFIX"x"
-# define PRIXVALUE PRI_VALUE_PREFIX"X"
-# define PRIsVALUE PRI_VALUE_PREFIX"i" RUBY_PRI_VALUE_MARK
-#endif
-
-#ifndef PRI_VALUE_PREFIX
-# define PRI_VALUE_PREFIX ""
-#endif
-
-#ifdef PRI_TIMET_PREFIX
-# /* Take that. */
-#elif SIZEOF_TIME_T == SIZEOF_INT
-# define PRI_TIMET_PREFIX
-#elif SIZEOF_TIME_T == SIZEOF_LONG
-# define PRI_TIMET_PREFIX "l"
-#elif SIZEOF_TIME_T == SIZEOF_LONG_LONG
-# define PRI_TIMET_PREFIX PRI_LL_PREFIX
-#endif
-
-#ifdef PRI_PTRDIFF_PREFIX
-# /* Take that. */
-#elif SIZEOF_PTRDIFF_T == SIZEOF_INT
-# define PRI_PTRDIFF_PREFIX ""
-#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG
-# define PRI_PTRDIFF_PREFIX "l"
-#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG
-# define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX
-#endif
-
-#ifndef PRIdPTRDIFF
-# define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d"
-# define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i"
-# define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o"
-# define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u"
-# define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x"
-# define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X"
-#endif
-
-#ifdef PRI_SIZE_PREFIX
-# /* Take that. */
-#elif SIZEOF_SIZE_T == SIZEOF_INT
-# define PRI_SIZE_PREFIX ""
-#elif SIZEOF_SIZE_T == SIZEOF_LONG
-# define PRI_SIZE_PREFIX "l"
-#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
-# define PRI_SIZE_PREFIX PRI_LL_PREFIX
-#endif
-
-#ifndef PRIdSIZE
-# define PRIdSIZE PRI_SIZE_PREFIX"d"
-# define PRIiSIZE PRI_SIZE_PREFIX"i"
-# define PRIoSIZE PRI_SIZE_PREFIX"o"
-# define PRIuSIZE PRI_SIZE_PREFIX"u"
-# define PRIxSIZE PRI_SIZE_PREFIX"x"
-# define PRIXSIZE PRI_SIZE_PREFIX"X"
-#endif
-
-#endif /* RUBY_BACKWARD2_INTTYPES_H */
diff --git a/include/ruby/backward/2/limits.h b/include/ruby/backward/2/limits.h
deleted file mode 100644
index e38009b01a..0000000000
--- a/include/ruby/backward/2/limits.h
+++ /dev/null
@@ -1,100 +0,0 @@
-#ifndef RUBY_BACKWARD2_LIMITS_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_LIMITS_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Historical shim for `<limits.h>`.
- *
- * The macros in this header file are obsolescent. Does anyone really need our
- * own definition of #CHAR_BIT today?
- */
-#include "ruby/internal/config.h"
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#include "ruby/backward/2/long_long.h"
-
-#ifndef LONG_MAX
-# /* assuming 32bit(2's complement) long */
-# define LONG_MAX 2147483647L
-#endif
-
-#ifndef LONG_MIN
-# define LONG_MIN (-LONG_MAX-1)
-#endif
-
-#ifndef CHAR_BIT
-# define CHAR_BIT 8
-#endif
-
-#ifdef LLONG_MAX
-# /* Take that. */
-#elif defined(LONG_LONG_MAX)
-# define LLONG_MAX LONG_LONG_MAX
-#elif defined(_I64_MAX)
-# define LLONG_MAX _I64_MAX
-#else
-# /* assuming 64bit(2's complement) long long */
-# define LLONG_MAX 9223372036854775807LL
-#endif
-
-#ifdef LLONG_MIN
-# /* Take that. */
-#elif defined(LONG_LONG_MIN)
-# define LLONG_MIN LONG_LONG_MIN
-#elif defined(_I64_MAX)
-# define LLONG_MIN _I64_MIN
-#else
-# define LLONG_MIN (-LLONG_MAX-1)
-#endif
-
-#ifdef SIZE_MAX
-# /* Take that. */
-#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
-# define SIZE_MAX ULLONG_MAX
-# define SIZE_MIN ULLONG_MIN
-#elif SIZEOF_SIZE_T == SIZEOF_LONG
-# define SIZE_MAX ULONG_MAX
-# define SIZE_MIN ULONG_MIN
-#elif SIZEOF_SIZE_T == SIZEOF_INT
-# define SIZE_MAX UINT_MAX
-# define SIZE_MIN UINT_MIN
-#else
-# define SIZE_MAX USHRT_MAX
-# define SIZE_MIN USHRT_MIN
-#endif
-
-#ifdef SSIZE_MAX
-# /* Take that. */
-#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
-# define SSIZE_MAX LLONG_MAX
-# define SSIZE_MIN LLONG_MIN
-#elif SIZEOF_SIZE_T == SIZEOF_LONG
-# define SSIZE_MAX LONG_MAX
-# define SSIZE_MIN LONG_MIN
-#elif SIZEOF_SIZE_T == SIZEOF_INT
-# define SSIZE_MAX INT_MAX
-# define SSIZE_MIN INT_MIN
-#else
-# define SSIZE_MAX SHRT_MAX
-# define SSIZE_MIN SHRT_MIN
-#endif
-
-#endif /* RUBY_BACKWARD2_LIMITS_H */
diff --git a/include/ruby/backward/2/long_long.h b/include/ruby/backward/2/long_long.h
deleted file mode 100644
index 83eabb459c..0000000000
--- a/include/ruby/backward/2/long_long.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef RUBY_BACKWARD2_LONG_LONG_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_LONG_LONG_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines old #LONG_LONG
- *
- * No known compiler that can compile today's ruby lacks long long.
- * Historically MSVC was one of such compiler, but it implemented long long a
- * while ago (some time back in 2013). The macros are for backwards
- * compatibility only.
- */
-#include "ruby/internal/config.h"
-#include "ruby/internal/has/warning.h"
-#include "ruby/internal/warning_push.h"
-
-#if RBIMPL_HAS_WARNING("-Wc++11-long-long")
-# define HAVE_TRUE_LONG_LONG 1
-# define LONG_LONG \
- RBIMPL_WARNING_PUSH() \
- RBIMPL_WARNING_IGNORED(-Wc++11-long-long) \
- long long \
- RBIMPL_WARNING_POP()
-
-#elif RBIMPL_HAS_WARNING("-Wlong-long")
-# define HAVE_TRUE_LONG_LONG 1
-# define LONG_LONG \
- RBIMPL_WARNING_PUSH() \
- RBIMPL_WARNING_IGNORED(-Wlong-long) \
- long long \
- RBIMPL_WARNING_POP()
-
-#elif defined(HAVE_LONG_LONG)
-# define HAVE_TRUE_LONG_LONG 1
-# define LONG_LONG long long
-
-#elif SIZEOF___INT64 > 0
-# define HAVE_LONG_LONG 1
-# define LONG_LONG __int64
-# undef SIZEOF_LONG_LONG
-# define SIZEOF_LONG_LONG SIZEOF___INT64
-
-#else
-# error Hello! Ruby developers believe this message must not happen.
-# error If you encounter this message, can you file a bug report?
-# error Remember to attach a detailed description of your environment.
-# error Thank you!
-#endif
-
-#endif /* RBIMPL_BACKWARD2_LONG_LONG_H */
diff --git a/include/ruby/backward/2/r_cast.h b/include/ruby/backward/2/r_cast.h
deleted file mode 100644
index 4600699a9e..0000000000
--- a/include/ruby/backward/2/r_cast.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef RUBY_BACKWARD2_R_CAST_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_R_CAST_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines old #R_CAST
- *
- * Nobody is actively using this macro.
- */
-#define R_CAST(st) (struct st*)
-#define RMOVED(obj) (R_CAST(RMoved)(obj))
-
-#if defined(__GNUC__)
-# warning R_CAST and RMOVED are deprecated
-#elif defined(_MSC_VER)
-# pragma message("warning: R_CAST and RMOVED are deprecated")
-#endif
-#endif /* RUBY_BACKWARD2_R_CAST_H */
diff --git a/include/ruby/backward/2/rmodule.h b/include/ruby/backward/2/rmodule.h
deleted file mode 100644
index a3e2d39f35..0000000000
--- a/include/ruby/backward/2/rmodule.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef RUBY_BACKWARD2_RMODULE_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_RMODULE_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Orphan macros.
- *
- * These macros seems broken since at least 2011. Nobody (except ruby itself
- * who is implementing the internals) could have used those macros for a while.
- * Kept public as-is here to keep some theoretical backwards compatibility.
- */
-#define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m)
-#define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m)
-#define RMODULE_M_TBL(m) RCLASS_M_TBL(m)
-#define RMODULE_SUPER(m) RCLASS_SUPER(m)
-
-#if defined(__GNUC__)
-# warning RMODULE_* macros are deprecated
-#elif defined(_MSC_VER)
-# pragma message("warning: RMODULE_* macros are deprecated")
-#endif
-#endif /* RUBY_BACKWARD2_RMODULE_H */
diff --git a/include/ruby/backward/2/stdalign.h b/include/ruby/backward/2/stdalign.h
deleted file mode 100644
index 2d3c333bde..0000000000
--- a/include/ruby/backward/2/stdalign.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef RUBY_BACKWARD2_STDALIGN_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_STDALIGN_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines #RUBY_ALIGNAS / #RUBY_ALIGNOF
- */
-#include "ruby/internal/stdalign.h"
-
-#undef RUBY_ALIGNAS
-#undef RUBY_ALIGNOF
-#define RUBY_ALIGNAS RBIMPL_ALIGNAS
-#define RUBY_ALIGNOF RBIMPL_ALIGNOF
-
-#endif /* RUBY_BACKWARD2_STDALIGN_H */
diff --git a/include/ruby/backward/2/stdarg.h b/include/ruby/backward/2/stdarg.h
deleted file mode 100644
index c2a9ca1e2f..0000000000
--- a/include/ruby/backward/2/stdarg.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef RUBY_BACKWARD2_STDARG_H /*-*-C++-*-vi:se ft=cpp:*/
-#define RUBY_BACKWARD2_STDARG_H
-/**
- * @file
- * @author Ruby developers <ruby-core@ruby-lang.org>
- * @copyright This file is a part of the programming language Ruby.
- * Permission is hereby granted, to either redistribute and/or
- * modify this file, provided that the conditions mentioned in the
- * file COPYING are met. Consult the file for details.
- * @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
- * implementation details. Don't take them as canon. They could
- * rapidly appear then vanish. The name (path) of this header file
- * is also an implementation detail. Do not expect it to persist
- * at the place it is now. Developers are free to move it anywhere
- * anytime at will.
- * @note To ruby-core: remember that this header can be possibly
- * recursively included from extension libraries written in C++.
- * Do not expect for instance `__VA_ARGS__` is always available.
- * We assume C99 for ruby itself but we don't assume languages of
- * extension libraries. They could be written in C++98.
- * @brief Defines old #_
- *
- * Nobody should ever use these macros any longer. No konwn compilers lack
- * prototypes today. It's 21st century. Just forget them.
- */
-
-#undef _
-#ifdef HAVE_PROTOTYPES
-# define _(args) args
-#else
-# define _(args) ()
-#endif
-
-#undef __
-#ifdef HAVE_STDARG_PROTOTYPES
-# define __(args) args
-#else
-# define __(args) ()
-#endif
-
-#ifdef __cplusplus
-#define ANYARGS ...
-#else
-#define ANYARGS
-#endif
-
-#endif /* RUBY_BACKWARD2_STDARG_H */
diff --git a/include/ruby/backward/classext.h b/include/ruby/backward/classext.h
new file mode 100644
index 0000000000..9d5747316a
--- /dev/null
+++ b/include/ruby/backward/classext.h
@@ -0,0 +1,18 @@
+#if defined __GNUC__
+#warning use of RClass internals is deprecated
+#elif defined _MSC_VER
+#pragma message("warning: use of RClass internals is deprecated")
+#endif
+
+#ifndef RUBY_BACKWARD_CLASSEXT_H
+#define RUBY_BACKWARD_CLASSEXT_H 1
+
+typedef struct rb_deprecated_classext_struct {
+ VALUE super;
+} rb_deprecated_classext_t;
+
+#undef RCLASS_SUPER(c)
+#define RCLASS_EXT(c) ((rb_deprecated_classext_t *)RCLASS(c)->ptr)
+#define RCLASS_SUPER(c) (RCLASS(c)->super)
+
+#endif /* RUBY_BACKWARD_CLASSEXT_H */
diff --git a/include/ruby/backward/cxxanyargs.hpp b/include/ruby/backward/cxxanyargs.hpp
deleted file mode 100644
index bc5745d850..0000000000
--- a/include/ruby/backward/cxxanyargs.hpp
+++ /dev/null
@@ -1,683 +0,0 @@
-#ifndef RUBY_BACKWARD_CXXANYARGS_HPP //-*-C++-*-vi:ft=cpp
-#define RUBY_BACKWARD_CXXANYARGS_HPP
-/// @file
-/// @author \@shyouhei
-/// @copyright This file is a part of the programming language Ruby.
-/// Permission is hereby granted, to either redistribute and/or
-/// modify this file, provided that the conditions mentioned in the
-/// file COPYING are met. Consult the file for details.
-/// @note DO NOT MODERNIZE THIS FILE! As the file name implies it is
-/// meant to be a backwards compatibility shim. Please stick to
-/// C++ 98 and never use newer features, like `constexpr`.
-/// @brief Provides old prototypes for C++ programs.
-#include "ruby/internal/config.h"
-#include "ruby/internal/intern/class.h"
-#include "ruby/internal/intern/cont.h"
-#include "ruby/internal/intern/hash.h"
-#include "ruby/internal/intern/proc.h"
-#include "ruby/internal/intern/thread.h"
-#include "ruby/internal/intern/variable.h"
-#include "ruby/internal/intern/vm.h"
-#include "ruby/internal/iterator.h"
-#include "ruby/internal/method.h"
-#include "ruby/internal/value.h"
-#include "ruby/internal/variable.h"
-#include "ruby/backward/2/stdarg.h"
-#include "ruby/st.h"
-
-extern "C++" {
-
-#ifdef HAVE_NULLPTR
-#include <cstddef>
-#endif
-
-/// @brief The main namespace.
-/// @note The name "ruby" might already be taken, but that must not be a
-/// problem because namespaces are allowed to reopen.
-namespace ruby {
-
-/// Backwards compatibility layer.
-namespace backward {
-
-/// Provides ANYARGS deprecation warnings. In C, ANYARGS means there is no
-/// function prototype. Literally anything, even including nothing, can be a
-/// valid ANYARGS. So passing a correctly prototyped function pointer to an
-/// ANYARGS-ed function parameter is valid, at the same time passing an
-/// ANYARGS-ed function pointer to a granular typed function parameter is also
-/// valid. However on the other hand in C++, ANYARGS doesn't actually mean any
-/// number of arguments. C++'s ANYARGS means _variadic_ number of arguments.
-/// This is incompatible with ordinal, correct function prototypes.
-///
-/// Luckily, function prototypes being distinct each other means they can be
-/// overloaded. We can provide a compatibility layer for older Ruby APIs which
-/// used to have ANYARGS. This namespace includes such attempts.
-namespace cxxanyargs {
-
-typedef VALUE type(ANYARGS); ///< ANYARGS-ed function type.
-typedef void void_type(ANYARGS); ///< ANYARGS-ed function type, void variant.
-typedef int int_type(ANYARGS); ///< ANYARGS-ed function type, int variant.
-typedef VALUE onearg_type(VALUE); ///< Single-argumented function type.
-
-/// @name Hooking global variables
-/// @{
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Define a function-backended global variable.
-/// @param[in] q Name of the variable.
-/// @param[in] w Getter function.
-/// @param[in] e Setter function.
-/// @note Both functions can be nullptr.
-/// @see rb_define_hooked_variable()
-/// @deprecated Use glanular typed overload instead.
-inline void
-rb_define_virtual_variable(const char *q, type *w, void_type *e)
-{
- rb_gvar_getter_t *r = reinterpret_cast<rb_gvar_getter_t*>(w);
- rb_gvar_setter_t *t = reinterpret_cast<rb_gvar_setter_t*>(e);
- ::rb_define_virtual_variable(q, r, t);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_virtual_variable(const char *q, rb_gvar_getter_t *w, void_type *e)
-{
- rb_gvar_setter_t *t = reinterpret_cast<rb_gvar_setter_t*>(e);
- ::rb_define_virtual_variable(q, w, t);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_virtual_variable(const char *q, type *w, rb_gvar_setter_t *e)
-{
- rb_gvar_getter_t *r = reinterpret_cast<rb_gvar_getter_t*>(w);
- ::rb_define_virtual_variable(q, r, e);
-}
-
-#ifdef HAVE_NULLPTR
-inline void
-rb_define_virtual_variable(const char *q, rb_gvar_getter_t *w, std::nullptr_t e)
-{
- ::rb_define_virtual_variable(q, w, e);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_virtual_variable(const char *q, type *w, std::nullptr_t e)
-{
- rb_gvar_getter_t *r = reinterpret_cast<rb_gvar_getter_t *>(w);
- ::rb_define_virtual_variable(q, r, e);
-}
-
-inline void
-rb_define_virtual_variable(const char *q, std::nullptr_t w, rb_gvar_setter_t *e)
-{
- ::rb_define_virtual_variable(q, w, e);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_virtual_variable(const char *q, std::nullptr_t w, void_type *e)
-{
- rb_gvar_setter_t *r = reinterpret_cast<rb_gvar_setter_t *>(e);
- ::rb_define_virtual_variable(q, w, r);
-}
-#endif
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Define a function-backended global variable.
-/// @param[in] q Name of the variable.
-/// @param[in] w Variable storage.
-/// @param[in] e Getter function.
-/// @param[in] r Setter function.
-/// @note Both functions can be nullptr.
-/// @see rb_define_virtual_variable()
-/// @deprecated Use glanular typed overload instead.
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, type *e, void_type *r)
-{
- rb_gvar_getter_t *t = reinterpret_cast<rb_gvar_getter_t*>(e);
- rb_gvar_setter_t *y = reinterpret_cast<rb_gvar_setter_t*>(r);
- ::rb_define_hooked_variable(q, w, t, y);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, rb_gvar_getter_t *e, void_type *r)
-{
- rb_gvar_setter_t *y = reinterpret_cast<rb_gvar_setter_t*>(r);
- ::rb_define_hooked_variable(q, w, e, y);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, type *e, rb_gvar_setter_t *r)
-{
- rb_gvar_getter_t *t = reinterpret_cast<rb_gvar_getter_t*>(e);
- ::rb_define_hooked_variable(q, w, t, r);
-}
-
-#ifdef HAVE_NULLPTR
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, rb_gvar_getter_t *e, std::nullptr_t r)
-{
- ::rb_define_hooked_variable(q, w, e, r);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, type *e, std::nullptr_t r)
-{
- rb_gvar_getter_t *y = reinterpret_cast<rb_gvar_getter_t *>(e);
- ::rb_define_hooked_variable(q, w, y, r);
-}
-
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, std::nullptr_t e, rb_gvar_setter_t *r)
-{
- ::rb_define_hooked_variable(q, w, e, r);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-inline void
-rb_define_hooked_variable(const char *q, VALUE *w, std::nullptr_t e, void_type *r)
-{
- rb_gvar_setter_t *y = reinterpret_cast<rb_gvar_setter_t *>(r);
- ::rb_define_hooked_variable(q, w, e, y);
-}
-#endif
-
-/// @}
-/// @name Exceptions and tag jumps
-/// @{
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Old way to implement iterators.
-/// @param[in] q A function that can yield.
-/// @param[in] w Passed to `q`.
-/// @param[in] e What is to be yielded.
-/// @param[in] r Passed to `e`.
-/// @return The return value of `q`.
-/// @note `e` can be nullptr.
-/// @deprecated This function is obsolated since long before 2.x era. Do not
-/// use it any longer. rb_block_call() is provided instead.
-inline VALUE
-rb_iterate(onearg_type *q, VALUE w, type *e, VALUE r)
-{
- rb_block_call_func_t t = reinterpret_cast<rb_block_call_func_t>(e);
- return ::rb_iterate(q, w, t, r);
-}
-
-#ifdef HAVE_NULLPTR
-inline VALUE
-rb_iterate(onearg_type *q, VALUE w, std::nullptr_t e, VALUE r)
-{
- return ::rb_iterate(q, w, e, r);
-}
-#endif
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Call a method with a block.
-/// @param[in] q The self.
-/// @param[in] w The method.
-/// @param[in] e The # of elems of `r`
-/// @param[in] r The arguments.
-/// @param[in] t What is to be yielded.
-/// @param[in] y Passed to `t`
-/// @return Return value of `q#w(*r,&t)`
-/// @note 't' can be nullptr.
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_block_call(VALUE q, ID w, int e, const VALUE *r, type *t, VALUE y)
-{
- rb_block_call_func_t u = reinterpret_cast<rb_block_call_func_t>(t);
- return ::rb_block_call(q, w, e, r, u, y);
-}
-
-#ifdef HAVE_NULLPTR
-inline VALUE
-rb_block_call(VALUE q, ID w, int e, const VALUE *r, std::nullptr_t t, VALUE y)
-{
- return ::rb_block_call(q, w, e, r, t, y);
-}
-#endif
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief An equivalent of `rescue` clause.
-/// @param[in] q A function that can raise.
-/// @param[in] w Passed to `q`.
-/// @param[in] e A function that cleans-up.
-/// @param[in] r Passed to `e`.
-/// @return The return value of `q` if no exception occurs, or the return
-/// value of `e` if otherwise.
-/// @note `e` can be nullptr.
-/// @see rb_ensure()
-/// @see rb_rescue2()
-/// @see rb_protect()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_rescue(type *q, VALUE w, type *e, VALUE r)
-{
- typedef VALUE func1_t(VALUE);
- typedef VALUE func2_t(VALUE, VALUE);
- func1_t *t = reinterpret_cast<func1_t*>(q);
- func2_t *y = reinterpret_cast<func2_t*>(e);
- return ::rb_rescue(t, w, y, r);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief An equivalent of `rescue` clause.
-/// @param[in] q A function that can raise.
-/// @param[in] w Passed to `q`.
-/// @param[in] e A function that cleans-up.
-/// @param[in] r Passed to `e`.
-/// @param[in] ... 0-terminated list of subclass of @ref rb_eException.
-/// @return The return value of `q` if no exception occurs, or the return
-/// value of `e` if otherwise.
-/// @note `e` can be nullptr.
-/// @see rb_ensure()
-/// @see rb_rescue()
-/// @see rb_protect()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_rescue2(type *q, VALUE w, type *e, VALUE r, ...)
-{
- typedef VALUE func1_t(VALUE);
- typedef VALUE func2_t(VALUE, VALUE);
- func1_t *t = reinterpret_cast<func1_t*>(q);
- func2_t *y = reinterpret_cast<func2_t*>(e);
- va_list ap;
- va_start(ap, r);
- VALUE ret = ::rb_vrescue2(t, w, y, r, ap);
- va_end(ap);
- return ret;
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief An equivalent of `ensure` clause.
-/// @param[in] q A function that can raise.
-/// @param[in] w Passed to `q`.
-/// @param[in] e A function that ensures.
-/// @param[in] r Passed to `e`.
-/// @return The return value of `q`.
-/// @note It makes no sense to pass nullptr to `e`.
-/// @see rb_rescue()
-/// @see rb_rescue2()
-/// @see rb_protect()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_ensure(type *q, VALUE w, type *e, VALUE r)
-{
- typedef VALUE func1_t(VALUE);
- func1_t *t = reinterpret_cast<func1_t*>(q);
- func1_t *y = reinterpret_cast<func1_t*>(e);
- return ::rb_ensure(t, w, y, r);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief An equivalent of `Kernel#catch`.
-/// @param[in] q The "tag" string.
-/// @param[in] w A function that can throw.
-/// @param[in] e Passed to `w`.
-/// @return What was thrown.
-/// @note `q` can be a nullptr but makes no sense to pass nullptr to`w`.
-/// @see rb_block_call()
-/// @see rb_protect()
-/// @see rb_rb_catch_obj()
-/// @see rb_rescue()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_catch(const char *q, type *w, VALUE e)
-{
- rb_block_call_func_t r = reinterpret_cast<rb_block_call_func_t>(w);
- return ::rb_catch(q, r, e);
-}
-
-#ifdef HAVE_NULLPTR
-inline VALUE
-rb_catch(const char *q, std::nullptr_t w, VALUE e)
-{
- return ::rb_catch(q, w, e);
-}
-#endif
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief An equivalent of `Kernel#catch`.
-/// @param[in] q The "tag" object.
-/// @param[in] w A function that can throw.
-/// @param[in] e Passed to `w`.
-/// @return What was thrown.
-/// @note It makes no sense to pass nullptr to`w`.
-/// @see rb_block_call()
-/// @see rb_protect()
-/// @see rb_rb_catch_obj()
-/// @see rb_rescue()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_catch_obj(VALUE q, type *w, VALUE e)
-{
- rb_block_call_func_t r = reinterpret_cast<rb_block_call_func_t>(w);
- return ::rb_catch_obj(q, r, e);
-}
-
-/// @}
-/// @name Procs, Fibers and Threads
-/// @{
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Creates a @ref rb_cFiber instance.
-/// @param[in] q The fiber body.
-/// @param[in] w Passed to `q`.
-/// @return What was allocated.
-/// @note It makes no sense to pass nullptr to`q`.
-/// @see rb_proc_new()
-/// @see rb_thread_creatr()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_fiber_new(type *q, VALUE w)
-{
- rb_block_call_func_t e = reinterpret_cast<rb_block_call_func_t>(q);
- return ::rb_fiber_new(e, w);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Creates a @ref rb_cProc instance.
-/// @param[in] q The proc body.
-/// @param[in] w Passed to `q`.
-/// @return What was allocated.
-/// @note It makes no sense to pass nullptr to`q`.
-/// @see rb_fiber_new()
-/// @see rb_thread_creatr()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_proc_new(type *q, VALUE w)
-{
- rb_block_call_func_t e = reinterpret_cast<rb_block_call_func_t>(q);
- return ::rb_proc_new(e, w);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Creates a @ref rb_cThread instance.
-/// @param[in] q The thread body.
-/// @param[in] w Passed to `q`.
-/// @return What was allocated.
-/// @note It makes no sense to pass nullptr to`q`.
-/// @see rb_proc_new()
-/// @see rb_fiber_new()
-/// @deprecated Use glanular typed overload instead.
-inline VALUE
-rb_thread_create(type *q, void *w)
-{
- typedef VALUE ptr_t(void*);
- ptr_t *e = reinterpret_cast<ptr_t*>(q);
- return ::rb_thread_create(e, w);
-}
-
-/// @}
-/// @name Hash and st_table
-/// @{
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Iteration over the given table.
-/// @param[in] q A table to scan.
-/// @param[in] w A function to iterate.
-/// @param[in] e Passed to `w`.
-/// @retval 0 Always returns 0.
-/// @note It makes no sense to pass nullptr to`w`.
-/// @see st_foreach_check()
-/// @see rb_hash_foreach()
-/// @deprecated Use glanular typed overload instead.
-inline int
-st_foreach(st_table *q, int_type *w, st_data_t e)
-{
- st_foreach_callback_func *r =
- reinterpret_cast<st_foreach_callback_func*>(w);
- return ::st_foreach(q, r, e);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Iteration over the given table.
-/// @param[in] q A table to scan.
-/// @param[in] w A function to iterate.
-/// @param[in] e Passed to `w`.
-/// @retval 0 Successful end of iteration.
-/// @retval 1 Element removed during traversing.
-/// @note It makes no sense to pass nullptr to`w`.
-/// @see st_foreach()
-/// @deprecated Use glanular typed overload instead.
-inline int
-st_foreach_check(st_table *q, int_type *w, st_data_t e, st_data_t)
-{
- st_foreach_check_callback_func *t =
- reinterpret_cast<st_foreach_check_callback_func*>(w);
- return ::st_foreach_check(q, t, e, 0);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Iteration over the given table.
-/// @param[in] q A table to scan.
-/// @param[in] w A function to iterate.
-/// @param[in] e Passed to `w`.
-/// @note It makes no sense to pass nullptr to`w`.
-/// @see st_foreach_check()
-/// @deprecated Use glanular typed overload instead.
-inline void
-st_foreach_safe(st_table *q, int_type *w, st_data_t e)
-{
- st_foreach_callback_func *r =
- reinterpret_cast<st_foreach_callback_func*>(w);
- ::st_foreach_safe(q, r, e);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Iteration over the given hash.
-/// @param[in] q A hash to scan.
-/// @param[in] w A function to iterate.
-/// @param[in] e Passed to `w`.
-/// @note It makes no sense to pass nullptr to`w`.
-/// @see st_foreach()
-/// @deprecated Use glanular typed overload instead.
-inline void
-rb_hash_foreach(VALUE q, int_type *w, VALUE e)
-{
- st_foreach_callback_func *r =
- reinterpret_cast<st_foreach_callback_func*>(w);
- ::rb_hash_foreach(q, r, e);
-}
-
-RUBY_CXX_DEPRECATED("Use of ANYARGS in this function is deprecated")
-/// @brief Iteration over each instance variable of the object.
-/// @param[in] q An object.
-/// @param[in] w A function to iterate.
-/// @param[in] e Passed to `w`.
-/// @note It makes no sense to pass nullptr to`w`.
-/// @see st_foreach()
-/// @deprecated Use glanular typed overload instead.
-inline void
-rb_ivar_foreach(VALUE q, int_type *w, VALUE e)
-{
- st_foreach_callback_func *r =
- reinterpret_cast<st_foreach_callback_func*>(w);
- ::rb_ivar_foreach(q, r, e);
-}
-
-/// @}
-
-/// Driver for *_define_method. ::rb_define_method function for instance takes
-/// a pointer to ANYARGS-ed functions, which in fact varies 18 different
-/// prototypes. We still need to preserve ANYARGS for storages but why not
-/// check the consistencies if possible. In C++ a function has its own
-/// prototype, which is a compile-time constant (static type) by nature. We
-/// can list up all the possible input types and provide warnings for other
-/// cases. This is such attempt.
-namespace define_method {
-
-/// Type of ::rb_f_notimplement().
-typedef VALUE notimpl_type(int, const VALUE *, VALUE, VALUE);
-
-/// @brief Template metaprogramming to generate function prototypes.
-/// @tparam T Type of method id (`ID` or `const char*` in practice).
-/// @tparam F Definition driver e.g. ::rb_define_method.
-template<typename T, void (*F)(VALUE klass, T mid, type *func, int arity)>
-struct driver {
-
- /// @brief Defines a method
- /// @tparam N Arity of the function.
- /// @tparam U The function in question
- template<int N, typename U>
- struct engine {
-
- /* :TODO: Following deprecation attribute renders tons of warnings (one
- * per every method definitions), which is annoying. Of course
- * annoyance is the core feature of deprecation warnings... But that
- * could be too much, especially when the warnings happen inside of
- * machine-generated programs. And SWIG is known to do such thing.
- * The new (granular) API was introduced in API version 2.7. As of
- * this writing the version is 2.8. Let's warn this later, some time
- * during 3.x. Hopefully codes in old (ANYARGS-ed) format should be
- * less than now. */
-#if (RUBY_API_VERSION_MAJOR * 100 + RUBY_API_VERSION_MINOR) >= 301
- RUBY_CXX_DEPRECATED("use of ANYARGS is deprecated")
-#endif
- /// @copydoc define(VALUE klass, T mid, U func)
- /// @deprecated Pass corrctly typed function instead.
- static inline void
- define(VALUE klass, T mid, type func)
- {
- F(klass, mid, func, N);
- }
-
- /// @brief Defines klass#mid as func, whose arity is N.
- /// @param[in] klass Where the method lives.
- /// @param[in] mid Name of the method to define.
- /// @param[in] func Function that implements klass#mid.
- static inline void
- define(VALUE klass, T mid, U func)
- {
- F(klass, mid, reinterpret_cast<type *>(func), N);
- }
-
- /// @copydoc define(VALUE klass, T mid, U func)
- static inline void
- define(VALUE klass, T mid, notimpl_type func)
- {
- F(klass, mid, reinterpret_cast<type *>(func), N);
- }
- };
-
- /// @cond INTERNAL_MACRO
- template<int N, bool = false> struct specific : public engine<N, type *> {};
- template<bool b> struct specific<15, b> : public engine<15, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<14, b> : public engine<14, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<13, b> : public engine<13, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<12, b> : public engine<12, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<11, b> : public engine<11, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<10, b> : public engine<10, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 9, b> : public engine< 9, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 8, b> : public engine< 8, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 7, b> : public engine< 7, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 6, b> : public engine< 6, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 5, b> : public engine< 5, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 4, b> : public engine< 4, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 3, b> : public engine< 3, VALUE(*)(VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 2, b> : public engine< 2, VALUE(*)(VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 1, b> : public engine< 1, VALUE(*)(VALUE, VALUE)> {};
- template<bool b> struct specific< 0, b> : public engine< 0, VALUE(*)(VALUE)> {};
- template<bool b> struct specific<-1, b> : public engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)> {
- using engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)>::define;
- static inline void define(VALUE c, T m, VALUE(*f)(int argc, const VALUE *argv, VALUE self)) { F(c, m, reinterpret_cast<type *>(f), -1); }
- };
- template<bool b> struct specific<-2, b> : public engine<-2, VALUE(*)(VALUE, VALUE)> {};
- /// @endcond
-};
-
-/* We could perhaps merge this struct into the one above using variadic
- * template parameters if we could assume C++11, but sadly we cannot. */
-template<typename T, void (*F)(T mid, type func, int arity)>
-struct driver0 {
- template<int N, typename U>
- struct engine {
- RUBY_CXX_DEPRECATED("use of ANYARGS is deprecated")
- static inline void
- define(T mid, type func)
- {
- F(mid, func, N);
- }
- static inline void
- define(T mid, U func)
- {
- F(mid, reinterpret_cast<type *>(func), N);
- }
- static inline void
- define(T mid, notimpl_type func)
- {
- F(mid, reinterpret_cast<type *>(func), N);
- }
- };
- /// @cond INTERNAL_MACRO
- template<int N, bool = false> struct specific : public engine<N, type *> {};
- template<bool b> struct specific<15, b> : public engine<15, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<14, b> : public engine<14, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<13, b> : public engine<13, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<12, b> : public engine<12, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<11, b> : public engine<11, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific<10, b> : public engine<10, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 9, b> : public engine< 9, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 8, b> : public engine< 8, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 7, b> : public engine< 7, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 6, b> : public engine< 6, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 5, b> : public engine< 5, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 4, b> : public engine< 4, VALUE(*)(VALUE, VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 3, b> : public engine< 3, VALUE(*)(VALUE, VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 2, b> : public engine< 2, VALUE(*)(VALUE, VALUE, VALUE)> {};
- template<bool b> struct specific< 1, b> : public engine< 1, VALUE(*)(VALUE, VALUE)> {};
- template<bool b> struct specific< 0, b> : public engine< 0, VALUE(*)(VALUE)> {};
- template<bool b> struct specific<-1, b> : public engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)> {
- using engine<-1, VALUE(*)(int argc, VALUE *argv, VALUE self)>::define;
- static inline void define(T m, VALUE(*f)(int argc, const VALUE *argv, VALUE self)) { F(m, reinterpret_cast<type *>(f), -1); }
- };
- template<bool b> struct specific<-2, b> : public engine<-2, VALUE(*)(VALUE, VALUE)> {};
- /// @endcond
-};
-
-struct rb_define_method : public driver <const char *, ::rb_define_method> {}; ///< Dispatches appropriate driver for ::rb_define_method.
-struct rb_define_method_id : public driver <ID, ::rb_define_method_id> {}; ///< Dispatches appropriate driver for ::rb_define_method_id.
-struct rb_define_private_method : public driver <const char *, ::rb_define_private_method> {}; ///< Dispatches appropriate driver for ::rb_define_private_method.
-struct rb_define_protected_method : public driver <const char *, ::rb_define_protected_method> {}; ///< Dispatches appropriate driver for ::rb_define_protected_method.
-struct rb_define_singleton_method : public driver <const char *, ::rb_define_singleton_method> {}; ///< Dispatches appropriate driver for ::rb_define_singleton_method.
-struct rb_define_module_function : public driver <const char *, ::rb_define_module_function> {}; ///< Dispatches appropriate driver for ::rb_define_module_function.
-struct rb_define_global_function : public driver0<const char *, ::rb_define_global_function> {}; ///< Dispatches appropriate driver for ::rb_define_global_function.
-
-/// @brief Defines klass\#mid.
-/// @param klass Where the method lives.
-/// @copydetails #rb_define_global_function(mid, func, arity)
-#define rb_define_method(klass, mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_method::specific<arity>::define(klass, mid, func)
-
-/// @copydoc #rb_define_method(klass, mid, func, arity)
-#define rb_define_method_id(klass, mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_method_id::specific<arity>::define(klass, mid, func)
-
-/// @brief Defines klass\#mid and makes it private.
-/// @copydetails #rb_define_method(klass, mid, func, arity)
-#define rb_define_private_method(klass, mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_private_method::specific<arity>::define(klass, mid, func)
-
-/// @brief Defines klass\#mid and makes it protected.
-/// @copydetails #rb_define_method
-#define rb_define_protected_method(klass, mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_protected_method::specific<arity>::define(klass, mid, func)
-
-/// @brief Defines klass.mid.(klass, mid, func, arity)
-/// @copydetails #rb_define_method
-#define rb_define_singleton_method(klass, mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_singleton_method::specific<arity>::define(klass, mid, func)
-
-/// @brief Defines klass\#mid and makes it a module function.
-/// @copydetails #rb_define_method(klass, mid, func, arity)
-#define rb_define_module_function(klass, mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_module_function::specific<arity>::define(klass, mid, func)
-
-/// @brief Defines ::rb_mKernel \#mid.
-/// @param mid Name of the defining method.
-/// @param func Implementation of \#mid.
-/// @param arity Arity of \#mid.
-#define rb_define_global_function(mid, func, arity) ruby::backward::cxxanyargs::define_method::rb_define_global_function::specific<arity>::define(mid, func)
-
-}}}}}
-
-using namespace ruby::backward::cxxanyargs;
-#endif // RUBY_BACKWARD_CXXANYARGS_HPP
diff --git a/include/ruby/backward/rubyio.h b/include/ruby/backward/rubyio.h
new file mode 100644
index 0000000000..a6e3a7c78b
--- /dev/null
+++ b/include/ruby/backward/rubyio.h
@@ -0,0 +1,6 @@
+#if defined __GNUC__
+#warning use "ruby/io.h" instead of "rubyio.h"
+#elif defined _MSC_VER
+#pragma message("warning: use \"ruby/io.h\" instead of \"rubyio.h\"")
+#endif
+#include "ruby/io.h"
diff --git a/include/ruby/backward/rubysig.h b/include/ruby/backward/rubysig.h
new file mode 100644
index 0000000000..58b13cab1c
--- /dev/null
+++ b/include/ruby/backward/rubysig.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+
+ rubysig.h -
+
+ $Author$
+ $Date$
+ created at: Wed Aug 16 01:15:38 JST 1995
+
+ Copyright (C) 1993-2008 Yukihiro Matsumoto
+
+**********************************************************************/
+
+#if defined __GNUC__
+#warning rubysig.h is obsolete
+#elif defined _MSC_VER
+#pragma message("warning: rubysig.h is obsolete")
+#endif
+
+#ifndef RUBYSIG_H
+#define RUBYSIG_H
+#include "ruby/ruby.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#if 0
+} /* satisfy cc-mode */
+#endif
+#endif
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+#define RUBY_CRITICAL(statements) do {statements;} while (0)
+#define DEFER_INTS (0)
+#define ENABLE_INTS (1)
+#define ALLOW_INTS do {CHECK_INTS;} while (0)
+#define CHECK_INTS rb_thread_check_ints()
+
+RUBY_SYMBOL_EXPORT_END
+
+#if defined(__cplusplus)
+#if 0
+{ /* satisfy cc-mode */
+#endif
+} /* extern "C" { */
+#endif
+
+#endif
diff --git a/include/ruby/backward/st.h b/include/ruby/backward/st.h
new file mode 100644
index 0000000000..3e36d44cf8
--- /dev/null
+++ b/include/ruby/backward/st.h
@@ -0,0 +1,6 @@
+#if defined __GNUC__
+#warning use "ruby/st.h" instead of bare "st.h"
+#elif defined _MSC_VER
+#pragma message("warning: use \"ruby/st.h\" instead of bare \"st.h\"")
+#endif
+#include "ruby/st.h"
diff --git a/include/ruby/backward/util.h b/include/ruby/backward/util.h
new file mode 100644
index 0000000000..11d32a2da8
--- /dev/null
+++ b/include/ruby/backward/util.h
@@ -0,0 +1,6 @@
+#if defined __GNUC__
+#warning use "ruby/util.h" instead of bare "util.h"
+#elif defined _MSC_VER
+#pragma message("warning: use \"ruby/util.h\" instead of bare \"util.h\"")
+#endif
+#include "ruby/util.h"