diff options
Diffstat (limited to 'include/ruby/backward')
| -rw-r--r-- | include/ruby/backward/2/assume.h | 43 | ||||
| -rw-r--r-- | include/ruby/backward/2/attributes.h | 170 | ||||
| -rw-r--r-- | include/ruby/backward/2/bool.h | 37 | ||||
| -rw-r--r-- | include/ruby/backward/2/gcc_version_since.h | 38 | ||||
| -rw-r--r-- | include/ruby/backward/2/inttypes.h | 132 | ||||
| -rw-r--r-- | include/ruby/backward/2/limits.h | 100 | ||||
| -rw-r--r-- | include/ruby/backward/2/long_long.h | 65 | ||||
| -rw-r--r-- | include/ruby/backward/2/r_cast.h | 33 | ||||
| -rw-r--r-- | include/ruby/backward/2/rmodule.h | 37 | ||||
| -rw-r--r-- | include/ruby/backward/2/stdalign.h | 30 | ||||
| -rw-r--r-- | include/ruby/backward/2/stdarg.h | 47 | ||||
| -rw-r--r-- | include/ruby/backward/classext.h | 18 | ||||
| -rw-r--r-- | include/ruby/backward/cxxanyargs.hpp | 683 | ||||
| -rw-r--r-- | include/ruby/backward/rubyio.h | 6 | ||||
| -rw-r--r-- | include/ruby/backward/rubysig.h | 47 | ||||
| -rw-r--r-- | include/ruby/backward/st.h | 6 | ||||
| -rw-r--r-- | include/ruby/backward/util.h | 6 |
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" |
