zscan 2.0.8 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/pack/pack-27.c +1 -0
- data/ext/pack/pack.c +1 -0
- data/ext/pack/ruby/backward/2/assume.h +43 -0
- data/ext/pack/ruby/backward/2/attributes.h +157 -0
- data/ext/pack/ruby/backward/2/bool.h +37 -0
- data/ext/pack/ruby/backward/2/extern.h +46 -0
- data/ext/pack/ruby/backward/2/gcc_version_since.h +38 -0
- data/ext/pack/ruby/backward/2/inttypes.h +132 -0
- data/ext/pack/ruby/backward/2/limits.h +100 -0
- data/ext/pack/ruby/backward/2/long_long.h +65 -0
- data/ext/pack/ruby/backward/2/r_cast.h +27 -0
- data/ext/pack/ruby/backward/2/rmodule.h +31 -0
- data/ext/pack/ruby/backward/2/stdalign.h +30 -0
- data/ext/pack/ruby/backward/2/stdarg.h +47 -0
- data/ext/pack/ruby/backward/classext.h +25 -0
- data/ext/pack/ruby/backward/rubyio.h +18 -0
- data/ext/pack/ruby/backward/rubysig.h +26 -0
- data/ext/pack/ruby/backward/st.h +18 -0
- data/ext/pack/ruby/backward/util.h +18 -0
- data/ext/pack/ruby/internal/anyargs.h +375 -0
- data/ext/pack/ruby/internal/arithmetic.h +38 -0
- data/ext/pack/ruby/internal/arithmetic/char.h +58 -0
- data/ext/pack/ruby/internal/arithmetic/double.h +39 -0
- data/ext/pack/ruby/internal/arithmetic/fixnum.h +44 -0
- data/ext/pack/ruby/internal/arithmetic/gid_t.h +34 -0
- data/ext/pack/ruby/internal/arithmetic/int.h +163 -0
- data/ext/pack/ruby/internal/arithmetic/intptr_t.h +42 -0
- data/ext/pack/ruby/internal/arithmetic/long.h +244 -0
- data/ext/pack/ruby/internal/arithmetic/long_long.h +53 -0
- data/ext/pack/ruby/internal/arithmetic/mode_t.h +34 -0
- data/ext/pack/ruby/internal/arithmetic/off_t.h +49 -0
- data/ext/pack/ruby/internal/arithmetic/pid_t.h +34 -0
- data/ext/pack/ruby/internal/arithmetic/short.h +54 -0
- data/ext/pack/ruby/internal/arithmetic/size_t.h +51 -0
- data/ext/pack/ruby/internal/arithmetic/st_data_t.h +59 -0
- data/ext/pack/ruby/internal/arithmetic/uid_t.h +34 -0
- data/ext/pack/ruby/internal/assume.h +90 -0
- data/ext/pack/ruby/internal/attr/alloc_size.h +32 -0
- data/ext/pack/ruby/internal/attr/artificial.h +46 -0
- data/ext/pack/ruby/internal/attr/cold.h +37 -0
- data/ext/pack/ruby/internal/attr/const.h +46 -0
- data/ext/pack/ruby/internal/attr/constexpr.h +85 -0
- data/ext/pack/ruby/internal/attr/deprecated.h +59 -0
- data/ext/pack/ruby/internal/attr/diagnose_if.h +42 -0
- data/ext/pack/ruby/internal/attr/enum_extensibility.h +32 -0
- data/ext/pack/ruby/internal/attr/error.h +32 -0
- data/ext/pack/ruby/internal/attr/flag_enum.h +33 -0
- data/ext/pack/ruby/internal/attr/forceinline.h +40 -0
- data/ext/pack/ruby/internal/attr/format.h +38 -0
- data/ext/pack/ruby/internal/attr/maybe_unused.h +38 -0
- data/ext/pack/ruby/internal/attr/noalias.h +58 -0
- data/ext/pack/ruby/internal/attr/nodiscard.h +45 -0
- data/ext/pack/ruby/internal/attr/noexcept.h +91 -0
- data/ext/pack/ruby/internal/attr/noinline.h +35 -0
- data/ext/pack/ruby/internal/attr/nonnull.h +32 -0
- data/ext/pack/ruby/internal/attr/noreturn.h +48 -0
- data/ext/pack/ruby/internal/attr/pure.h +43 -0
- data/ext/pack/ruby/internal/attr/restrict.h +45 -0
- data/ext/pack/ruby/internal/attr/returns_nonnull.h +37 -0
- data/ext/pack/ruby/internal/attr/warning.h +32 -0
- data/ext/pack/ruby/internal/attr/weakref.h +32 -0
- data/ext/pack/ruby/internal/cast.h +53 -0
- data/ext/pack/ruby/internal/compiler_is.h +45 -0
- data/ext/pack/ruby/internal/compiler_is/apple.h +41 -0
- data/ext/pack/ruby/internal/compiler_is/clang.h +38 -0
- data/ext/pack/ruby/internal/compiler_is/gcc.h +46 -0
- data/ext/pack/ruby/internal/compiler_is/intel.h +41 -0
- data/ext/pack/ruby/internal/compiler_is/msvc.h +57 -0
- data/ext/pack/ruby/internal/compiler_is/sunpro.h +55 -0
- data/ext/pack/ruby/internal/compiler_since.h +61 -0
- data/ext/pack/ruby/internal/config.h +131 -0
- data/ext/pack/ruby/internal/constant_p.h +37 -0
- data/ext/pack/ruby/internal/core.h +35 -0
- data/ext/pack/ruby/internal/core/rarray.h +275 -0
- data/ext/pack/ruby/internal/core/rbasic.h +85 -0
- data/ext/pack/ruby/internal/core/rbignum.h +51 -0
- data/ext/pack/ruby/internal/core/rclass.h +47 -0
- data/ext/pack/ruby/internal/core/rdata.h +174 -0
- data/ext/pack/ruby/internal/core/rfile.h +36 -0
- data/ext/pack/ruby/internal/core/rhash.h +62 -0
- data/ext/pack/ruby/internal/core/rmatch.h +73 -0
- data/ext/pack/ruby/internal/core/robject.h +97 -0
- data/ext/pack/ruby/internal/core/rregexp.h +84 -0
- data/ext/pack/ruby/internal/core/rstring.h +215 -0
- data/ext/pack/ruby/internal/core/rstruct.h +73 -0
- data/ext/pack/ruby/internal/core/rtypeddata.h +184 -0
- data/ext/pack/ruby/internal/ctype.h +203 -0
- data/ext/pack/ruby/internal/dllexport.h +92 -0
- data/ext/pack/ruby/internal/dosish.h +63 -0
- data/ext/pack/ruby/internal/error.h +74 -0
- data/ext/pack/ruby/internal/eval.h +50 -0
- data/ext/pack/ruby/internal/event.h +75 -0
- data/ext/pack/ruby/internal/fl_type.h +469 -0
- data/ext/pack/ruby/internal/gc.h +35 -0
- data/ext/pack/ruby/internal/glob.h +35 -0
- data/ext/pack/ruby/internal/globals.h +159 -0
- data/ext/pack/ruby/internal/has/attribute.h +164 -0
- data/ext/pack/ruby/internal/has/builtin.h +105 -0
- data/ext/pack/ruby/internal/has/c_attribute.h +38 -0
- data/ext/pack/ruby/internal/has/cpp_attribute.h +79 -0
- data/ext/pack/ruby/internal/has/declspec_attribute.h +48 -0
- data/ext/pack/ruby/internal/has/extension.h +33 -0
- data/ext/pack/ruby/internal/has/feature.h +31 -0
- data/ext/pack/ruby/internal/has/warning.h +31 -0
- data/ext/pack/ruby/internal/intern/array.h +78 -0
- data/ext/pack/ruby/internal/intern/bignum.h +105 -0
- data/ext/pack/ruby/internal/intern/class.h +57 -0
- data/ext/pack/ruby/internal/intern/compar.h +34 -0
- data/ext/pack/ruby/internal/intern/complex.h +60 -0
- data/ext/pack/ruby/internal/intern/cont.h +40 -0
- data/ext/pack/ruby/internal/intern/dir.h +33 -0
- data/ext/pack/ruby/internal/intern/enum.h +33 -0
- data/ext/pack/ruby/internal/intern/enumerator.h +79 -0
- data/ext/pack/ruby/internal/intern/error.h +82 -0
- data/ext/pack/ruby/internal/intern/eval.h +59 -0
- data/ext/pack/ruby/internal/intern/file.h +44 -0
- data/ext/pack/ruby/internal/intern/gc.h +57 -0
- data/ext/pack/ruby/internal/intern/hash.h +59 -0
- data/ext/pack/ruby/internal/intern/io.h +70 -0
- data/ext/pack/ruby/internal/intern/load.h +39 -0
- data/ext/pack/ruby/internal/intern/marshal.h +35 -0
- data/ext/pack/ruby/internal/intern/numeric.h +42 -0
- data/ext/pack/ruby/internal/intern/object.h +90 -0
- data/ext/pack/ruby/internal/intern/parse.h +64 -0
- data/ext/pack/ruby/internal/intern/proc.h +53 -0
- data/ext/pack/ruby/internal/intern/process.h +46 -0
- data/ext/pack/ruby/internal/intern/random.h +45 -0
- data/ext/pack/ruby/internal/intern/range.h +35 -0
- data/ext/pack/ruby/internal/intern/rational.h +46 -0
- data/ext/pack/ruby/internal/intern/re.h +50 -0
- data/ext/pack/ruby/internal/intern/ruby.h +37 -0
- data/ext/pack/ruby/internal/intern/select.h +52 -0
- data/ext/pack/ruby/internal/intern/select/largesize.h +103 -0
- data/ext/pack/ruby/internal/intern/select/posix.h +82 -0
- data/ext/pack/ruby/internal/intern/select/win32.h +124 -0
- data/ext/pack/ruby/internal/intern/signal.h +40 -0
- data/ext/pack/ruby/internal/intern/sprintf.h +43 -0
- data/ext/pack/ruby/internal/intern/string.h +290 -0
- data/ext/pack/ruby/internal/intern/struct.h +47 -0
- data/ext/pack/ruby/internal/intern/thread.h +76 -0
- data/ext/pack/ruby/internal/intern/time.h +52 -0
- data/ext/pack/ruby/internal/intern/variable.h +83 -0
- data/ext/pack/ruby/internal/intern/vm.h +77 -0
- data/ext/pack/ruby/internal/interpreter.h +94 -0
- data/ext/pack/ruby/internal/iterator.h +65 -0
- data/ext/pack/ruby/internal/memory.h +286 -0
- data/ext/pack/ruby/internal/method.h +39 -0
- data/ext/pack/ruby/internal/module.h +39 -0
- data/ext/pack/ruby/internal/newobj.h +73 -0
- data/ext/pack/ruby/internal/rgengc.h +199 -0
- data/ext/pack/ruby/internal/scan_args.h +394 -0
- data/ext/pack/ruby/internal/special_consts.h +204 -0
- data/ext/pack/ruby/internal/static_assert.h +77 -0
- data/ext/pack/ruby/internal/stdalign.h +124 -0
- data/ext/pack/ruby/internal/stdbool.h +51 -0
- data/ext/pack/ruby/internal/symbol.h +114 -0
- data/ext/pack/ruby/internal/token_paste.h +75 -0
- data/ext/pack/ruby/internal/value.h +66 -0
- data/ext/pack/ruby/internal/value_type.h +354 -0
- data/ext/pack/ruby/internal/variable.h +62 -0
- data/ext/pack/ruby/internal/warning_push.h +91 -0
- data/ext/pack/ruby/internal/xmalloc.h +201 -0
- data/lib/zscan.rb +1 -1
- data/readme.md +2 -0
- data/zscan.gemspec +1 -1
- metadata +162 -2
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_LONG_LONG_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_LONG_LONG_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `long long` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/value.h"
|
|
24
|
+
#include "ruby/internal/dllexport.h"
|
|
25
|
+
#include "ruby/internal/special_consts.h"
|
|
26
|
+
#include "ruby/backward/2/long_long.h"
|
|
27
|
+
|
|
28
|
+
#define RB_LL2NUM rb_ll2inum
|
|
29
|
+
#define RB_ULL2NUM rb_ull2inum
|
|
30
|
+
#define LL2NUM RB_LL2NUM
|
|
31
|
+
#define ULL2NUM RB_ULL2NUM
|
|
32
|
+
#define RB_NUM2LL rb_num2ll_inline
|
|
33
|
+
#define RB_NUM2ULL rb_num2ull
|
|
34
|
+
#define NUM2LL RB_NUM2LL
|
|
35
|
+
#define NUM2ULL RB_NUM2ULL
|
|
36
|
+
|
|
37
|
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
|
38
|
+
VALUE rb_ll2inum(LONG_LONG);
|
|
39
|
+
VALUE rb_ull2inum(unsigned LONG_LONG);
|
|
40
|
+
LONG_LONG rb_num2ll(VALUE);
|
|
41
|
+
unsigned LONG_LONG rb_num2ull(VALUE);
|
|
42
|
+
RBIMPL_SYMBOL_EXPORT_END()
|
|
43
|
+
|
|
44
|
+
static inline LONG_LONG
|
|
45
|
+
rb_num2ll_inline(VALUE x)
|
|
46
|
+
{
|
|
47
|
+
if (RB_FIXNUM_P(x))
|
|
48
|
+
return RB_FIX2LONG(x);
|
|
49
|
+
else
|
|
50
|
+
return rb_num2ll(x);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#endif /* RBIMPL_ARITHMETIC_LONG_LONG_H */
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_MODE_T_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_MODE_T_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `mode_t` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h"
|
|
24
|
+
#include "ruby/internal/arithmetic/int.h"
|
|
25
|
+
|
|
26
|
+
#ifndef NUM2MODET
|
|
27
|
+
# define NUM2MODET RB_NUM2INT
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifndef MODET2NUM
|
|
31
|
+
# define MODET2NUM RB_INT2NUM
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
#endif /* RBIMPL_ARITHMETIC_MODE_T_H */
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_OFF_T_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_OFF_T_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `off_t` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h"
|
|
24
|
+
#include "ruby/internal/arithmetic/int.h"
|
|
25
|
+
#include "ruby/internal/arithmetic/long.h"
|
|
26
|
+
#include "ruby/internal/arithmetic/long_long.h"
|
|
27
|
+
#include "ruby/backward/2/long_long.h"
|
|
28
|
+
|
|
29
|
+
#ifdef OFFT2NUM
|
|
30
|
+
# /* take that. */
|
|
31
|
+
#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG
|
|
32
|
+
# define OFFT2NUM RB_LL2NUM
|
|
33
|
+
#elif SIZEOF_OFF_T == SIZEOF_LONG
|
|
34
|
+
# define OFFT2NUM RB_LONG2NUM
|
|
35
|
+
#else
|
|
36
|
+
# define OFFT2NUM RB_INT2NUM
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#ifdef NUM2OFFT
|
|
40
|
+
# /* take that. */
|
|
41
|
+
#elif SIZEOF_OFF_T == SIZEOF_LONG_LONG
|
|
42
|
+
# define NUM2OFFT RB_NUM2LL
|
|
43
|
+
#elif SIZEOF_OFF_T == SIZEOF_LONG
|
|
44
|
+
# define NUM2OFFT RB_NUM2LONG
|
|
45
|
+
#else
|
|
46
|
+
# define NUM2OFFT RB_NUM2INT
|
|
47
|
+
#endif
|
|
48
|
+
|
|
49
|
+
#endif /* RBIMPL_ARITHMETIC_OFF_T_H */
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_PID_T_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_PID_T_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `pid_t` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h"
|
|
24
|
+
#include "ruby/internal/arithmetic/long.h"
|
|
25
|
+
|
|
26
|
+
#ifndef PIDT2NUM
|
|
27
|
+
# define PIDT2NUM RB_LONG2NUM
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifndef NUM2PIDT
|
|
31
|
+
# define NUM2PIDT RB_NUM2LONG
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
#endif /* RBIMPL_ARITHMETIC_PID_T_H */
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_SHORT_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_SHORT_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `short` and Ruby's.
|
|
22
|
+
*
|
|
23
|
+
* Shyouhei wonders: why there is no SHORT2NUM, given there are both
|
|
24
|
+
* #USHORT2NUM and #CHR2FIX?
|
|
25
|
+
*/
|
|
26
|
+
#include "ruby/internal/value.h"
|
|
27
|
+
#include "ruby/internal/dllexport.h"
|
|
28
|
+
#include "ruby/internal/special_consts.h"
|
|
29
|
+
|
|
30
|
+
#define RB_NUM2SHORT rb_num2short_inline
|
|
31
|
+
#define RB_NUM2USHORT rb_num2ushort
|
|
32
|
+
#define NUM2SHORT RB_NUM2SHORT
|
|
33
|
+
#define NUM2USHORT RB_NUM2USHORT
|
|
34
|
+
#define USHORT2NUM RB_INT2FIX
|
|
35
|
+
#define RB_FIX2SHORT rb_fix2short
|
|
36
|
+
#define FIX2SHORT RB_FIX2SHORT
|
|
37
|
+
|
|
38
|
+
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
|
39
|
+
short rb_num2short(VALUE);
|
|
40
|
+
unsigned short rb_num2ushort(VALUE);
|
|
41
|
+
short rb_fix2short(VALUE);
|
|
42
|
+
unsigned short rb_fix2ushort(VALUE);
|
|
43
|
+
RBIMPL_SYMBOL_EXPORT_END()
|
|
44
|
+
|
|
45
|
+
static inline short
|
|
46
|
+
rb_num2short_inline(VALUE x)
|
|
47
|
+
{
|
|
48
|
+
if (RB_FIXNUM_P(x))
|
|
49
|
+
return rb_fix2short(x);
|
|
50
|
+
else
|
|
51
|
+
return rb_num2short(x);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#endif /* RBIMPL_ARITHMETIC_SOHRT_H */
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_SIZE_T_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_SIZE_T_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `size_t` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h"
|
|
24
|
+
#include "ruby/internal/arithmetic/int.h"
|
|
25
|
+
#include "ruby/internal/arithmetic/long.h"
|
|
26
|
+
#include "ruby/internal/arithmetic/long_long.h"
|
|
27
|
+
#include "ruby/backward/2/long_long.h"
|
|
28
|
+
|
|
29
|
+
#if SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
|
30
|
+
# define SIZET2NUM RB_ULL2NUM
|
|
31
|
+
# define SSIZET2NUM RB_LL2NUM
|
|
32
|
+
#elif SIZEOF_SIZE_T == SIZEOF_LONG
|
|
33
|
+
# define SIZET2NUM RB_ULONG2NUM
|
|
34
|
+
# define SSIZET2NUM RB_LONG2NUM
|
|
35
|
+
#else
|
|
36
|
+
# define SIZET2NUM RB_UINT2NUM
|
|
37
|
+
# define SSIZET2NUM RB_INT2NUM
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
#if SIZEOF_SIZE_T == SIZEOF_LONG_LONG
|
|
41
|
+
# define NUM2SIZET RB_NUM2ULL
|
|
42
|
+
# define NUM2SSIZET RB_NUM2LL
|
|
43
|
+
#elif SIZEOF_SIZE_T == SIZEOF_LONG
|
|
44
|
+
# define NUM2SIZET RB_NUM2ULONG
|
|
45
|
+
# define NUM2SSIZET RB_NUM2LONG
|
|
46
|
+
#else
|
|
47
|
+
# define NUM2SIZET RB_NUM2UINT
|
|
48
|
+
# define NUM2SSIZET RB_NUM2INT
|
|
49
|
+
#endif
|
|
50
|
+
|
|
51
|
+
#endif /* RBIMPL_ARITHMETIC_SIZE_T_H */
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMERIC_ST_DATA_T_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMERIC_ST_DATA_T_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `st_data_t` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/arithmetic/fixnum.h"
|
|
24
|
+
#include "ruby/internal/arithmetic/long.h"
|
|
25
|
+
#include "ruby/internal/attr/artificial.h"
|
|
26
|
+
#include "ruby/internal/attr/const.h"
|
|
27
|
+
#include "ruby/internal/attr/constexpr.h"
|
|
28
|
+
#include "ruby/internal/cast.h"
|
|
29
|
+
#include "ruby/internal/value.h"
|
|
30
|
+
#include "ruby/assert.h"
|
|
31
|
+
#include "ruby/st.h"
|
|
32
|
+
|
|
33
|
+
#define ST2FIX RB_ST2FIX
|
|
34
|
+
/** @cond INTERNAL_MACRO */
|
|
35
|
+
#define RB_ST2FIX RB_ST2FIX
|
|
36
|
+
/** @endcond */
|
|
37
|
+
|
|
38
|
+
RBIMPL_ATTR_CONST_ON_NDEBUG()
|
|
39
|
+
RBIMPL_ATTR_CONSTEXPR_ON_NDEBUG(CXX14)
|
|
40
|
+
RBIMPL_ATTR_ARTIFICIAL()
|
|
41
|
+
/* See also [ruby-core:84395] [Bug #14218] [ruby-core:82687] [Bug #13877] */
|
|
42
|
+
static inline VALUE
|
|
43
|
+
RB_ST2FIX(st_data_t i)
|
|
44
|
+
{
|
|
45
|
+
SIGNED_VALUE x = i;
|
|
46
|
+
|
|
47
|
+
if (x >= 0) {
|
|
48
|
+
x &= RUBY_FIXNUM_MAX;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
x |= RUBY_FIXNUM_MIN;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(x));
|
|
55
|
+
unsigned long y = RBIMPL_CAST((unsigned long)x);
|
|
56
|
+
return RB_LONG2FIX(y);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#endif /* RBIMPL_ARITHMERIC_ST_DATA_T_H */
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#ifndef RBIMPL_ARITHMETIC_UID_T_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ARITHMETIC_UID_T_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Arithmetic conversion between C's `uid_t` and Ruby's.
|
|
22
|
+
*/
|
|
23
|
+
#include "ruby/internal/config.h"
|
|
24
|
+
#include "ruby/internal/arithmetic/long.h"
|
|
25
|
+
|
|
26
|
+
#ifndef UIDT2NUM
|
|
27
|
+
# define UIDT2NUM RB_LONG2NUM
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#ifndef NUM2UIDT
|
|
31
|
+
# define NUM2UIDT RB_NUM2LONG
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
#endif /* RBIMPL_ARITHMETIC_UID_T_H */
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#ifndef RBIMPL_ASSUME_H /*-*-C++-*-vi:se ft=cpp:*/
|
|
2
|
+
#define RBIMPL_ASSUME_H
|
|
3
|
+
/**
|
|
4
|
+
* @file
|
|
5
|
+
* @author Ruby developers <ruby-core@ruby-lang.org>
|
|
6
|
+
* @copyright This file is a part of the programming language Ruby.
|
|
7
|
+
* Permission is hereby granted, to either redistribute and/or
|
|
8
|
+
* modify this file, provided that the conditions mentioned in the
|
|
9
|
+
* file COPYING are met. Consult the file for details.
|
|
10
|
+
* @warning Symbols prefixed with either `RBIMPL` or `rbimpl` are
|
|
11
|
+
* implementation details. Don't take them as canon. They could
|
|
12
|
+
* rapidly appear then vanish. The name (path) of this header file
|
|
13
|
+
* is also an implementation detail. Do not expect it to persist
|
|
14
|
+
* at the place it is now. Developers are free to move it anywhere
|
|
15
|
+
* anytime at will.
|
|
16
|
+
* @note To ruby-core: remember that this header can be possibly
|
|
17
|
+
* recursively included from extension libraries written in C++.
|
|
18
|
+
* Do not expect for instance `__VA_ARGS__` is always available.
|
|
19
|
+
* We assume C99 for ruby itself but we don't assume languages of
|
|
20
|
+
* extension libraries. They could be written in C++98.
|
|
21
|
+
* @brief Defines #RBIMPL_ASSUME / #RBIMPL_UNREACHABLE.
|
|
22
|
+
*
|
|
23
|
+
* These macros must be defined at once because:
|
|
24
|
+
*
|
|
25
|
+
* - #RBIMPL_ASSUME could fallback to #RBIMPL_UNREACHABLE.
|
|
26
|
+
* - #RBIMPL_UNREACHABLE could fallback to #RBIMPL_ASSUME.
|
|
27
|
+
*/
|
|
28
|
+
#include "ruby/internal/config.h"
|
|
29
|
+
#include "ruby/internal/cast.h"
|
|
30
|
+
#include "ruby/internal/compiler_since.h"
|
|
31
|
+
#include "ruby/internal/has/builtin.h"
|
|
32
|
+
#include "ruby/internal/warning_push.h"
|
|
33
|
+
|
|
34
|
+
/** @cond INTERNAL_MACRO */
|
|
35
|
+
#if RBIMPL_COMPILER_SINCE(MSVC, 13, 10, 0)
|
|
36
|
+
# define RBIMPL_HAVE___ASSUME
|
|
37
|
+
|
|
38
|
+
#elif RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0)
|
|
39
|
+
# define RBIMPL_HAVE___ASSUME
|
|
40
|
+
#endif
|
|
41
|
+
/** @endcond */
|
|
42
|
+
|
|
43
|
+
/** Wraps (or simulates) `__builtin_unreachable`. */
|
|
44
|
+
#if RBIMPL_HAS_BUILTIN(__builtin_unreachable)
|
|
45
|
+
# define RBIMPL_UNREACHABLE_RETURN(_) __builtin_unreachable()
|
|
46
|
+
|
|
47
|
+
#elif defined(RBIMPL_HAVE___ASSUME)
|
|
48
|
+
# define RBIMPL_UNREACHABLE_RETURN(_) return (__assume(0), (_))
|
|
49
|
+
|
|
50
|
+
#else
|
|
51
|
+
# define RBIMPL_UNREACHABLE_RETURN(_) return (_)
|
|
52
|
+
#endif
|
|
53
|
+
|
|
54
|
+
/** Wraps (or simulates) `__builtin_unreachable`. */
|
|
55
|
+
#if RBIMPL_HAS_BUILTIN(__builtin_unreachable)
|
|
56
|
+
# define RBIMPL_UNREACHABLE __builtin_unreachable
|
|
57
|
+
|
|
58
|
+
#elif defined(RBIMPL_HAVE___ASSUME)
|
|
59
|
+
# define RBIMPL_UNREACHABLE() __assume(0)
|
|
60
|
+
#endif
|
|
61
|
+
|
|
62
|
+
/** Wraps (or simulates) `__assume`. */
|
|
63
|
+
#if RBIMPL_COMPILER_SINCE(Intel, 13, 0, 0)
|
|
64
|
+
# /* icc warnings are false positives. Ignore them. */
|
|
65
|
+
# /* "warning #2261: __assume expression with side effects discarded" */
|
|
66
|
+
# define RBIMPL_ASSUME(expr) \
|
|
67
|
+
RBIMPL_WARNING_PUSH() \
|
|
68
|
+
RBIMPL_WARNING_IGNORED(2261) \
|
|
69
|
+
__assume(expr) \
|
|
70
|
+
RBIMPL_WARNING_POP()
|
|
71
|
+
|
|
72
|
+
#elif defined(RBIMPL_HAVE___ASSUME)
|
|
73
|
+
# define RBIMPL_ASSUME __assume
|
|
74
|
+
|
|
75
|
+
#elif RBIMPL_HAS_BUILTIN(__builtin_assume)
|
|
76
|
+
# define RBIMPL_ASSUME __builtin_assume
|
|
77
|
+
|
|
78
|
+
#elif ! defined(RBIMPL_UNREACHABLE)
|
|
79
|
+
# define RBIMPL_ASSUME(_) RBIMPL_CAST((void)(_))
|
|
80
|
+
|
|
81
|
+
#else
|
|
82
|
+
# define RBIMPL_ASSUME(_) \
|
|
83
|
+
(RB_LIKELY(!!(_)) ? RBIMPL_CAST((void)0) : RBIMPL_UNREACHABLE())
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
#if ! defined(RBIMPL_UNREACHABLE)
|
|
87
|
+
# define RBIMPL_UNREACHABLE() RBIMPL_ASSUME(0)
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
#endif /* RBIMPL_ASSUME_H */
|