zscan 2.0.8 → 2.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/ext/pack/pack-27.c +1 -0
  3. data/ext/pack/pack.c +1 -0
  4. data/ext/pack/ruby/backward/2/assume.h +43 -0
  5. data/ext/pack/ruby/backward/2/attributes.h +157 -0
  6. data/ext/pack/ruby/backward/2/bool.h +37 -0
  7. data/ext/pack/ruby/backward/2/extern.h +46 -0
  8. data/ext/pack/ruby/backward/2/gcc_version_since.h +38 -0
  9. data/ext/pack/ruby/backward/2/inttypes.h +132 -0
  10. data/ext/pack/ruby/backward/2/limits.h +100 -0
  11. data/ext/pack/ruby/backward/2/long_long.h +65 -0
  12. data/ext/pack/ruby/backward/2/r_cast.h +27 -0
  13. data/ext/pack/ruby/backward/2/rmodule.h +31 -0
  14. data/ext/pack/ruby/backward/2/stdalign.h +30 -0
  15. data/ext/pack/ruby/backward/2/stdarg.h +47 -0
  16. data/ext/pack/ruby/backward/classext.h +25 -0
  17. data/ext/pack/ruby/backward/rubyio.h +18 -0
  18. data/ext/pack/ruby/backward/rubysig.h +26 -0
  19. data/ext/pack/ruby/backward/st.h +18 -0
  20. data/ext/pack/ruby/backward/util.h +18 -0
  21. data/ext/pack/ruby/internal/anyargs.h +375 -0
  22. data/ext/pack/ruby/internal/arithmetic.h +38 -0
  23. data/ext/pack/ruby/internal/arithmetic/char.h +58 -0
  24. data/ext/pack/ruby/internal/arithmetic/double.h +39 -0
  25. data/ext/pack/ruby/internal/arithmetic/fixnum.h +44 -0
  26. data/ext/pack/ruby/internal/arithmetic/gid_t.h +34 -0
  27. data/ext/pack/ruby/internal/arithmetic/int.h +163 -0
  28. data/ext/pack/ruby/internal/arithmetic/intptr_t.h +42 -0
  29. data/ext/pack/ruby/internal/arithmetic/long.h +244 -0
  30. data/ext/pack/ruby/internal/arithmetic/long_long.h +53 -0
  31. data/ext/pack/ruby/internal/arithmetic/mode_t.h +34 -0
  32. data/ext/pack/ruby/internal/arithmetic/off_t.h +49 -0
  33. data/ext/pack/ruby/internal/arithmetic/pid_t.h +34 -0
  34. data/ext/pack/ruby/internal/arithmetic/short.h +54 -0
  35. data/ext/pack/ruby/internal/arithmetic/size_t.h +51 -0
  36. data/ext/pack/ruby/internal/arithmetic/st_data_t.h +59 -0
  37. data/ext/pack/ruby/internal/arithmetic/uid_t.h +34 -0
  38. data/ext/pack/ruby/internal/assume.h +90 -0
  39. data/ext/pack/ruby/internal/attr/alloc_size.h +32 -0
  40. data/ext/pack/ruby/internal/attr/artificial.h +46 -0
  41. data/ext/pack/ruby/internal/attr/cold.h +37 -0
  42. data/ext/pack/ruby/internal/attr/const.h +46 -0
  43. data/ext/pack/ruby/internal/attr/constexpr.h +85 -0
  44. data/ext/pack/ruby/internal/attr/deprecated.h +59 -0
  45. data/ext/pack/ruby/internal/attr/diagnose_if.h +42 -0
  46. data/ext/pack/ruby/internal/attr/enum_extensibility.h +32 -0
  47. data/ext/pack/ruby/internal/attr/error.h +32 -0
  48. data/ext/pack/ruby/internal/attr/flag_enum.h +33 -0
  49. data/ext/pack/ruby/internal/attr/forceinline.h +40 -0
  50. data/ext/pack/ruby/internal/attr/format.h +38 -0
  51. data/ext/pack/ruby/internal/attr/maybe_unused.h +38 -0
  52. data/ext/pack/ruby/internal/attr/noalias.h +58 -0
  53. data/ext/pack/ruby/internal/attr/nodiscard.h +45 -0
  54. data/ext/pack/ruby/internal/attr/noexcept.h +91 -0
  55. data/ext/pack/ruby/internal/attr/noinline.h +35 -0
  56. data/ext/pack/ruby/internal/attr/nonnull.h +32 -0
  57. data/ext/pack/ruby/internal/attr/noreturn.h +48 -0
  58. data/ext/pack/ruby/internal/attr/pure.h +43 -0
  59. data/ext/pack/ruby/internal/attr/restrict.h +45 -0
  60. data/ext/pack/ruby/internal/attr/returns_nonnull.h +37 -0
  61. data/ext/pack/ruby/internal/attr/warning.h +32 -0
  62. data/ext/pack/ruby/internal/attr/weakref.h +32 -0
  63. data/ext/pack/ruby/internal/cast.h +53 -0
  64. data/ext/pack/ruby/internal/compiler_is.h +45 -0
  65. data/ext/pack/ruby/internal/compiler_is/apple.h +41 -0
  66. data/ext/pack/ruby/internal/compiler_is/clang.h +38 -0
  67. data/ext/pack/ruby/internal/compiler_is/gcc.h +46 -0
  68. data/ext/pack/ruby/internal/compiler_is/intel.h +41 -0
  69. data/ext/pack/ruby/internal/compiler_is/msvc.h +57 -0
  70. data/ext/pack/ruby/internal/compiler_is/sunpro.h +55 -0
  71. data/ext/pack/ruby/internal/compiler_since.h +61 -0
  72. data/ext/pack/ruby/internal/config.h +131 -0
  73. data/ext/pack/ruby/internal/constant_p.h +37 -0
  74. data/ext/pack/ruby/internal/core.h +35 -0
  75. data/ext/pack/ruby/internal/core/rarray.h +275 -0
  76. data/ext/pack/ruby/internal/core/rbasic.h +85 -0
  77. data/ext/pack/ruby/internal/core/rbignum.h +51 -0
  78. data/ext/pack/ruby/internal/core/rclass.h +47 -0
  79. data/ext/pack/ruby/internal/core/rdata.h +174 -0
  80. data/ext/pack/ruby/internal/core/rfile.h +36 -0
  81. data/ext/pack/ruby/internal/core/rhash.h +62 -0
  82. data/ext/pack/ruby/internal/core/rmatch.h +73 -0
  83. data/ext/pack/ruby/internal/core/robject.h +97 -0
  84. data/ext/pack/ruby/internal/core/rregexp.h +84 -0
  85. data/ext/pack/ruby/internal/core/rstring.h +215 -0
  86. data/ext/pack/ruby/internal/core/rstruct.h +73 -0
  87. data/ext/pack/ruby/internal/core/rtypeddata.h +184 -0
  88. data/ext/pack/ruby/internal/ctype.h +203 -0
  89. data/ext/pack/ruby/internal/dllexport.h +92 -0
  90. data/ext/pack/ruby/internal/dosish.h +63 -0
  91. data/ext/pack/ruby/internal/error.h +74 -0
  92. data/ext/pack/ruby/internal/eval.h +50 -0
  93. data/ext/pack/ruby/internal/event.h +75 -0
  94. data/ext/pack/ruby/internal/fl_type.h +469 -0
  95. data/ext/pack/ruby/internal/gc.h +35 -0
  96. data/ext/pack/ruby/internal/glob.h +35 -0
  97. data/ext/pack/ruby/internal/globals.h +159 -0
  98. data/ext/pack/ruby/internal/has/attribute.h +164 -0
  99. data/ext/pack/ruby/internal/has/builtin.h +105 -0
  100. data/ext/pack/ruby/internal/has/c_attribute.h +38 -0
  101. data/ext/pack/ruby/internal/has/cpp_attribute.h +79 -0
  102. data/ext/pack/ruby/internal/has/declspec_attribute.h +48 -0
  103. data/ext/pack/ruby/internal/has/extension.h +33 -0
  104. data/ext/pack/ruby/internal/has/feature.h +31 -0
  105. data/ext/pack/ruby/internal/has/warning.h +31 -0
  106. data/ext/pack/ruby/internal/intern/array.h +78 -0
  107. data/ext/pack/ruby/internal/intern/bignum.h +105 -0
  108. data/ext/pack/ruby/internal/intern/class.h +57 -0
  109. data/ext/pack/ruby/internal/intern/compar.h +34 -0
  110. data/ext/pack/ruby/internal/intern/complex.h +60 -0
  111. data/ext/pack/ruby/internal/intern/cont.h +40 -0
  112. data/ext/pack/ruby/internal/intern/dir.h +33 -0
  113. data/ext/pack/ruby/internal/intern/enum.h +33 -0
  114. data/ext/pack/ruby/internal/intern/enumerator.h +79 -0
  115. data/ext/pack/ruby/internal/intern/error.h +82 -0
  116. data/ext/pack/ruby/internal/intern/eval.h +59 -0
  117. data/ext/pack/ruby/internal/intern/file.h +44 -0
  118. data/ext/pack/ruby/internal/intern/gc.h +57 -0
  119. data/ext/pack/ruby/internal/intern/hash.h +59 -0
  120. data/ext/pack/ruby/internal/intern/io.h +70 -0
  121. data/ext/pack/ruby/internal/intern/load.h +39 -0
  122. data/ext/pack/ruby/internal/intern/marshal.h +35 -0
  123. data/ext/pack/ruby/internal/intern/numeric.h +42 -0
  124. data/ext/pack/ruby/internal/intern/object.h +90 -0
  125. data/ext/pack/ruby/internal/intern/parse.h +64 -0
  126. data/ext/pack/ruby/internal/intern/proc.h +53 -0
  127. data/ext/pack/ruby/internal/intern/process.h +46 -0
  128. data/ext/pack/ruby/internal/intern/random.h +45 -0
  129. data/ext/pack/ruby/internal/intern/range.h +35 -0
  130. data/ext/pack/ruby/internal/intern/rational.h +46 -0
  131. data/ext/pack/ruby/internal/intern/re.h +50 -0
  132. data/ext/pack/ruby/internal/intern/ruby.h +37 -0
  133. data/ext/pack/ruby/internal/intern/select.h +52 -0
  134. data/ext/pack/ruby/internal/intern/select/largesize.h +103 -0
  135. data/ext/pack/ruby/internal/intern/select/posix.h +82 -0
  136. data/ext/pack/ruby/internal/intern/select/win32.h +124 -0
  137. data/ext/pack/ruby/internal/intern/signal.h +40 -0
  138. data/ext/pack/ruby/internal/intern/sprintf.h +43 -0
  139. data/ext/pack/ruby/internal/intern/string.h +290 -0
  140. data/ext/pack/ruby/internal/intern/struct.h +47 -0
  141. data/ext/pack/ruby/internal/intern/thread.h +76 -0
  142. data/ext/pack/ruby/internal/intern/time.h +52 -0
  143. data/ext/pack/ruby/internal/intern/variable.h +83 -0
  144. data/ext/pack/ruby/internal/intern/vm.h +77 -0
  145. data/ext/pack/ruby/internal/interpreter.h +94 -0
  146. data/ext/pack/ruby/internal/iterator.h +65 -0
  147. data/ext/pack/ruby/internal/memory.h +286 -0
  148. data/ext/pack/ruby/internal/method.h +39 -0
  149. data/ext/pack/ruby/internal/module.h +39 -0
  150. data/ext/pack/ruby/internal/newobj.h +73 -0
  151. data/ext/pack/ruby/internal/rgengc.h +199 -0
  152. data/ext/pack/ruby/internal/scan_args.h +394 -0
  153. data/ext/pack/ruby/internal/special_consts.h +204 -0
  154. data/ext/pack/ruby/internal/static_assert.h +77 -0
  155. data/ext/pack/ruby/internal/stdalign.h +124 -0
  156. data/ext/pack/ruby/internal/stdbool.h +51 -0
  157. data/ext/pack/ruby/internal/symbol.h +114 -0
  158. data/ext/pack/ruby/internal/token_paste.h +75 -0
  159. data/ext/pack/ruby/internal/value.h +66 -0
  160. data/ext/pack/ruby/internal/value_type.h +354 -0
  161. data/ext/pack/ruby/internal/variable.h +62 -0
  162. data/ext/pack/ruby/internal/warning_push.h +91 -0
  163. data/ext/pack/ruby/internal/xmalloc.h +201 -0
  164. data/lib/zscan.rb +1 -1
  165. data/readme.md +2 -0
  166. data/zscan.gemspec +1 -1
  167. metadata +162 -2
@@ -0,0 +1,73 @@
1
+ #ifndef RBIMPL_RSTRUCT_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_RSTRUCT_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 Routines to manipulate struct ::RStruct.
22
+ */
23
+ #include "ruby/internal/attr/artificial.h"
24
+ #include "ruby/internal/dllexport.h"
25
+ #include "ruby/internal/value.h"
26
+ #include "ruby/internal/value_type.h"
27
+ #include "ruby/internal/arithmetic/long.h"
28
+ #include "ruby/internal/arithmetic/int.h"
29
+ #if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
30
+ # include "ruby/backward.h"
31
+ #endif
32
+
33
+ #define RSTRUCT_PTR(st) rb_struct_ptr(st)
34
+ /** @cond INTERNAL_MACRO */
35
+ #define RSTRUCT_LEN RSTRUCT_LEN
36
+ #define RSTRUCT_SET RSTRUCT_SET
37
+ #define RSTRUCT_GET RSTRUCT_GET
38
+ /** @endcond */
39
+
40
+ RBIMPL_SYMBOL_EXPORT_BEGIN()
41
+ VALUE rb_struct_size(VALUE s);
42
+ VALUE rb_struct_aref(VALUE, VALUE);
43
+ VALUE rb_struct_aset(VALUE, VALUE, VALUE);
44
+ RBIMPL_SYMBOL_EXPORT_END()
45
+
46
+ RBIMPL_ATTR_ARTIFICIAL()
47
+ static inline long
48
+ RSTRUCT_LEN(VALUE st)
49
+ {
50
+ RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT);
51
+
52
+ return RB_NUM2LONG(rb_struct_size(st));
53
+ }
54
+
55
+ RBIMPL_ATTR_ARTIFICIAL()
56
+ static inline VALUE
57
+ RSTRUCT_SET(VALUE st, int k, VALUE v)
58
+ {
59
+ RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT);
60
+
61
+ return rb_struct_aset(st, INT2NUM(k), (v));
62
+ }
63
+
64
+ RBIMPL_ATTR_ARTIFICIAL()
65
+ static inline VALUE
66
+ RSTRUCT_GET(VALUE st, int k)
67
+ {
68
+ RBIMPL_ASSERT_TYPE(st, RUBY_T_STRUCT);
69
+
70
+ return rb_struct_aref(st, INT2NUM(k));
71
+ }
72
+
73
+ #endif /* RBIMPL_RSTRUCT_H */
@@ -0,0 +1,184 @@
1
+ #ifndef RBIMPL_RTYPEDDATA_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_RTYPEDDATA_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 struct ::RTypedData.
22
+ */
23
+ #include "ruby/internal/config.h"
24
+
25
+ #ifdef STDC_HEADERS
26
+ # include <stddef.h>
27
+ #endif
28
+
29
+ #include "ruby/internal/assume.h"
30
+ #include "ruby/internal/attr/artificial.h"
31
+ #include "ruby/internal/attr/pure.h"
32
+ #include "ruby/internal/cast.h"
33
+ #include "ruby/internal/core/rbasic.h"
34
+ #include "ruby/internal/core/rdata.h"
35
+ #include "ruby/internal/dllexport.h"
36
+ #include "ruby/internal/error.h"
37
+ #include "ruby/internal/fl_type.h"
38
+ #include "ruby/internal/stdbool.h"
39
+ #include "ruby/internal/value_type.h"
40
+
41
+ #define HAVE_TYPE_RB_DATA_TYPE_T 1
42
+ #define HAVE_RB_DATA_TYPE_T_FUNCTION 1
43
+ #define HAVE_RB_DATA_TYPE_T_PARENT 1
44
+ #define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE
45
+ #define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE
46
+ #define RTYPEDDATA(obj) RBIMPL_CAST((struct RTypedData *)(obj))
47
+ #define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data)
48
+ #define Check_TypedStruct(v, t) \
49
+ rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
50
+
51
+ /** @cond INTERNAL_MACRO */
52
+ #define RTYPEDDATA_P RTYPEDDATA_P
53
+ #define RTYPEDDATA_TYPE RTYPEDDATA_TYPE
54
+ #define RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
55
+ #define RUBY_TYPED_WB_PROTECTED RUBY_TYPED_WB_PROTECTED
56
+ #define RUBY_TYPED_PROMOTED1 RUBY_TYPED_PROMOTED1
57
+ /** @endcond */
58
+
59
+ /* bits for rb_data_type_struct::flags */
60
+ enum rbimpl_typeddata_flags {
61
+ RUBY_TYPED_FREE_IMMEDIATELY = 1,
62
+ RUBY_TYPED_WB_PROTECTED = RUBY_FL_WB_PROTECTED, /* THIS FLAG DEPENDS ON Ruby version */
63
+ RUBY_TYPED_PROMOTED1 = RUBY_FL_PROMOTED1 /* THIS FLAG DEPENDS ON Ruby version */
64
+ };
65
+
66
+ typedef struct rb_data_type_struct rb_data_type_t;
67
+
68
+ struct rb_data_type_struct {
69
+ const char *wrap_struct_name;
70
+ struct {
71
+ RUBY_DATA_FUNC dmark;
72
+ RUBY_DATA_FUNC dfree;
73
+ size_t (*dsize)(const void *);
74
+ RUBY_DATA_FUNC dcompact;
75
+ void *reserved[1]; /* For future extension.
76
+ This array *must* be filled with ZERO. */
77
+ } function;
78
+ const rb_data_type_t *parent;
79
+ void *data; /* This area can be used for any purpose
80
+ by a programmer who define the type. */
81
+ VALUE flags; /* RUBY_FL_WB_PROTECTED */
82
+ };
83
+
84
+ struct RTypedData {
85
+ struct RBasic basic;
86
+ const rb_data_type_t *type;
87
+ VALUE typed_flag; /* 1 or not */
88
+ void *data;
89
+ };
90
+
91
+ RBIMPL_SYMBOL_EXPORT_BEGIN()
92
+ VALUE rb_data_typed_object_wrap(VALUE klass, void *datap, const rb_data_type_t *);
93
+ VALUE rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type);
94
+ int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent);
95
+ int rb_typeddata_is_kind_of(VALUE obj, const rb_data_type_t *data_type);
96
+ void *rb_check_typeddata(VALUE obj, const rb_data_type_t *data_type);
97
+ RBIMPL_SYMBOL_EXPORT_END()
98
+
99
+ #define TypedData_Wrap_Struct(klass,data_type,sval)\
100
+ rb_data_typed_object_wrap((klass),(sval),(data_type))
101
+
102
+ #define TypedData_Make_Struct0(result, klass, type, size, data_type, sval) \
103
+ VALUE result = rb_data_typed_object_zalloc(klass, size, data_type); \
104
+ (sval) = RBIMPL_CAST((type *)RTYPEDDATA_DATA(result)); \
105
+ RBIMPL_CAST(/*suppress unused variable warnings*/(void)(sval))
106
+
107
+ #ifdef HAVE_STMT_AND_DECL_IN_EXPR
108
+ #define TypedData_Make_Struct(klass, type, data_type, sval) \
109
+ RB_GNUC_EXTENSION({ \
110
+ TypedData_Make_Struct0( \
111
+ data_struct_obj, \
112
+ klass, \
113
+ type, \
114
+ sizeof(type), \
115
+ data_type, \
116
+ sval); \
117
+ data_struct_obj; \
118
+ })
119
+ #else
120
+ #define TypedData_Make_Struct(klass, type, data_type, sval) \
121
+ rb_data_typed_object_make( \
122
+ (klass), \
123
+ (data_type), \
124
+ RBIMPL_CAST((void **)&(sval)), \
125
+ sizeof(type))
126
+ #endif
127
+
128
+ #define TypedData_Get_Struct(obj,type,data_type,sval) \
129
+ ((sval) = RBIMPL_CAST((type *)rb_check_typeddata((obj), (data_type))))
130
+
131
+ RBIMPL_ATTR_PURE()
132
+ RBIMPL_ATTR_ARTIFICIAL()
133
+ static inline bool
134
+ rbimpl_rtypeddata_p(VALUE obj)
135
+ {
136
+ return RTYPEDDATA(obj)->typed_flag == 1;
137
+ }
138
+
139
+ RBIMPL_ATTR_PURE_ON_NDEBUG()
140
+ RBIMPL_ATTR_ARTIFICIAL()
141
+ static inline bool
142
+ RTYPEDDATA_P(VALUE obj)
143
+ {
144
+ #if ! RUBY_NDEBUG
145
+ if (RB_UNLIKELY(! RB_TYPE_P(obj, RUBY_T_DATA))) {
146
+ Check_Type(obj, RUBY_T_DATA);
147
+ RBIMPL_UNREACHABLE_RETURN(false);
148
+ }
149
+ #endif
150
+
151
+ return rbimpl_rtypeddata_p(obj);
152
+ }
153
+
154
+ RBIMPL_ATTR_PURE_ON_NDEBUG()
155
+ RBIMPL_ATTR_ARTIFICIAL()
156
+ /* :TODO: can this function be __attribute__((returns_nonnull)) or not? */
157
+ static inline const struct rb_data_type_struct *
158
+ RTYPEDDATA_TYPE(VALUE obj)
159
+ {
160
+ #if ! RUBY_NDEBUG
161
+ if (RB_UNLIKELY(! RTYPEDDATA_P(obj))) {
162
+ rb_unexpected_type(obj, RUBY_T_DATA);
163
+ RBIMPL_UNREACHABLE_RETURN(NULL);
164
+ }
165
+ #endif
166
+
167
+ return RTYPEDDATA(obj)->type;
168
+ }
169
+
170
+ static inline VALUE
171
+ rb_data_typed_object_make(VALUE klass, const rb_data_type_t *type, void **datap, size_t size)
172
+ {
173
+ TypedData_Make_Struct0(result, klass, void, size, type, *datap);
174
+ return result;
175
+ }
176
+
177
+ RBIMPL_ATTR_DEPRECATED(("by: rb_data_typed_object_wrap"))
178
+ static inline VALUE
179
+ rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
180
+ {
181
+ return rb_data_typed_object_wrap(klass, datap, type);
182
+ }
183
+
184
+ #endif /* RBIMPL_RTYPEDDATA_H */
@@ -0,0 +1,203 @@
1
+ #ifndef RBIMPL_CTYPE_H /*-*-C++-*-vi:se ft=cpp:*/
2
+ #define RBIMPL_CTYPE_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 Our own, locale independent, character handling routines.
22
+ */
23
+ #include "ruby/internal/config.h"
24
+
25
+ #ifdef STDC_HEADERS
26
+ # include <ctype.h>
27
+ #endif
28
+
29
+ #include "ruby/internal/attr/artificial.h"
30
+ #include "ruby/internal/attr/const.h"
31
+ #include "ruby/internal/attr/constexpr.h"
32
+ #include "ruby/internal/dllexport.h"
33
+
34
+ #ifndef ISPRINT
35
+ # define ISASCII rb_isascii
36
+ # define ISPRINT rb_isprint
37
+ # define ISGRAPH rb_isgraph
38
+ # define ISSPACE rb_isspace
39
+ # define ISUPPER rb_isupper
40
+ # define ISLOWER rb_islower
41
+ # define ISALNUM rb_isalnum
42
+ # define ISALPHA rb_isalpha
43
+ # define ISDIGIT rb_isdigit
44
+ # define ISXDIGIT rb_isxdigit
45
+ # define ISBLANK rb_isblank
46
+ # define ISCNTRL rb_iscntrl
47
+ # define ISPUNCT rb_ispunct
48
+ #endif
49
+
50
+ #define TOUPPER rb_toupper
51
+ #define TOLOWER rb_tolower
52
+ #define STRCASECMP st_locale_insensitive_strcasecmp
53
+ #define STRNCASECMP st_locale_insensitive_strncasecmp
54
+ #define STRTOUL ruby_strtoul
55
+
56
+ RBIMPL_SYMBOL_EXPORT_BEGIN()
57
+ /* locale insensitive functions */
58
+ int st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
59
+ int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
60
+ unsigned long ruby_strtoul(const char *str, char **endptr, int base);
61
+ RBIMPL_SYMBOL_EXPORT_END()
62
+
63
+ /*
64
+ * We are making the functions below to return `int` instead of `bool`. They
65
+ * have been as such since their birth at 5f237d79033b2109afb768bc889611fa9630.
66
+ */
67
+
68
+ RBIMPL_ATTR_CONST()
69
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
70
+ RBIMPL_ATTR_ARTIFICIAL()
71
+ static inline int
72
+ rb_isascii(int c)
73
+ {
74
+ return '\0' <= c && c <= '\x7f';
75
+ }
76
+
77
+ RBIMPL_ATTR_CONST()
78
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
79
+ RBIMPL_ATTR_ARTIFICIAL()
80
+ static inline int
81
+ rb_isupper(int c)
82
+ {
83
+ return 'A' <= c && c <= 'Z';
84
+ }
85
+
86
+ RBIMPL_ATTR_CONST()
87
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
88
+ RBIMPL_ATTR_ARTIFICIAL()
89
+ static inline int
90
+ rb_islower(int c)
91
+ {
92
+ return 'a' <= c && c <= 'z';
93
+ }
94
+
95
+ RBIMPL_ATTR_CONST()
96
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
97
+ RBIMPL_ATTR_ARTIFICIAL()
98
+ static inline int
99
+ rb_isalpha(int c)
100
+ {
101
+ return rb_isupper(c) || rb_islower(c);
102
+ }
103
+
104
+ RBIMPL_ATTR_CONST()
105
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
106
+ RBIMPL_ATTR_ARTIFICIAL()
107
+ static inline int
108
+ rb_isdigit(int c)
109
+ {
110
+ return '0' <= c && c <= '9';
111
+ }
112
+
113
+ RBIMPL_ATTR_CONST()
114
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
115
+ RBIMPL_ATTR_ARTIFICIAL()
116
+ static inline int
117
+ rb_isalnum(int c)
118
+ {
119
+ return rb_isalpha(c) || rb_isdigit(c);
120
+ }
121
+
122
+ RBIMPL_ATTR_CONST()
123
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
124
+ RBIMPL_ATTR_ARTIFICIAL()
125
+ static inline int
126
+ rb_isxdigit(int c)
127
+ {
128
+ return rb_isdigit(c) || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f');
129
+ }
130
+
131
+ RBIMPL_ATTR_CONST()
132
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
133
+ RBIMPL_ATTR_ARTIFICIAL()
134
+ static inline int
135
+ rb_isblank(int c)
136
+ {
137
+ return c == ' ' || c == '\t';
138
+ }
139
+
140
+ RBIMPL_ATTR_CONST()
141
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
142
+ RBIMPL_ATTR_ARTIFICIAL()
143
+ static inline int
144
+ rb_isspace(int c)
145
+ {
146
+ return c == ' ' || ('\t' <= c && c <= '\r');
147
+ }
148
+
149
+ RBIMPL_ATTR_CONST()
150
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
151
+ RBIMPL_ATTR_ARTIFICIAL()
152
+ static inline int
153
+ rb_iscntrl(int c)
154
+ {
155
+ return ('\0' <= c && c < ' ') || c == '\x7f';
156
+ }
157
+
158
+ RBIMPL_ATTR_CONST()
159
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
160
+ RBIMPL_ATTR_ARTIFICIAL()
161
+ static inline int
162
+ rb_isprint(int c)
163
+ {
164
+ return ' ' <= c && c <= '\x7e';
165
+ }
166
+
167
+ RBIMPL_ATTR_CONST()
168
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
169
+ RBIMPL_ATTR_ARTIFICIAL()
170
+ static inline int
171
+ rb_ispunct(int c)
172
+ {
173
+ return !rb_isalnum(c);
174
+ }
175
+
176
+ RBIMPL_ATTR_CONST()
177
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
178
+ RBIMPL_ATTR_ARTIFICIAL()
179
+ static inline int
180
+ rb_isgraph(int c)
181
+ {
182
+ return '!' <= c && c <= '\x7e';
183
+ }
184
+
185
+ RBIMPL_ATTR_CONST()
186
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
187
+ RBIMPL_ATTR_ARTIFICIAL()
188
+ static inline int
189
+ rb_tolower(int c)
190
+ {
191
+ return rb_isupper(c) ? (c|0x20) : c;
192
+ }
193
+
194
+ RBIMPL_ATTR_CONST()
195
+ RBIMPL_ATTR_CONSTEXPR(CXX11)
196
+ RBIMPL_ATTR_ARTIFICIAL()
197
+ static inline int
198
+ rb_toupper(int c)
199
+ {
200
+ return rb_islower(c) ? (c&0x5f) : c;
201
+ }
202
+
203
+ #endif /* RBIMPL_CTYPE_H */