debase-ruby_core_source 3.3.5 → 3.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.idea/vcs.xml +28 -0
  4. data/CHANGELOG.md +8 -0
  5. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/addr2line.h +22 -0
  6. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/builtin.h +119 -0
  7. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/build_assert/build_assert.h +40 -0
  8. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/check_type/check_type.h +63 -0
  9. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/container_of/container_of.h +142 -0
  10. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/list/list.h +791 -0
  11. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/str/str.h +17 -0
  12. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/constant.h +53 -0
  13. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/darray.h +209 -0
  14. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/debug_counter.h +423 -0
  15. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/dln.h +32 -0
  16. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/encindex.h +70 -0
  17. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/eval_intern.h +324 -0
  18. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/hrtime.h +237 -0
  19. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/id.h +347 -0
  20. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/id_table.h +39 -0
  21. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/insns.inc +265 -0
  22. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/insns_info.inc +9902 -0
  23. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/array.h +152 -0
  24. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/basic_operators.h +64 -0
  25. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/bignum.h +244 -0
  26. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/bits.h +568 -0
  27. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/class.h +283 -0
  28. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/cmdlineopt.h +65 -0
  29. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compar.h +29 -0
  30. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compile.h +34 -0
  31. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compilers.h +107 -0
  32. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/complex.h +29 -0
  33. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/cont.h +35 -0
  34. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/dir.h +16 -0
  35. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enc.h +19 -0
  36. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/encoding.h +36 -0
  37. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enum.h +18 -0
  38. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enumerator.h +21 -0
  39. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/error.h +218 -0
  40. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/eval.h +33 -0
  41. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/file.h +38 -0
  42. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/fixnum.h +184 -0
  43. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/gc.h +322 -0
  44. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/hash.h +192 -0
  45. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/imemo.h +261 -0
  46. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/inits.h +47 -0
  47. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/io.h +143 -0
  48. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/load.h +18 -0
  49. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/loadpath.h +16 -0
  50. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/math.h +23 -0
  51. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/missing.h +19 -0
  52. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/numeric.h +274 -0
  53. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/object.h +63 -0
  54. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/parse.h +129 -0
  55. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/proc.h +30 -0
  56. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/process.h +124 -0
  57. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/ractor.h +6 -0
  58. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/random.h +17 -0
  59. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/range.h +40 -0
  60. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/rational.h +71 -0
  61. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/re.h +28 -0
  62. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/ruby_parser.h +102 -0
  63. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/sanitizers.h +326 -0
  64. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/serial.h +23 -0
  65. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/signal.h +24 -0
  66. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/st.h +11 -0
  67. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/static_assert.h +16 -0
  68. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/string.h +186 -0
  69. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/struct.h +127 -0
  70. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/symbol.h +45 -0
  71. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/thread.h +85 -0
  72. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/time.h +34 -0
  73. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/transcode.h +23 -0
  74. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/util.h +27 -0
  75. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/variable.h +72 -0
  76. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/vm.h +137 -0
  77. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/warnings.h +16 -0
  78. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal.h +108 -0
  79. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/iseq.h +340 -0
  80. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/known_errors.inc +1419 -0
  81. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/method.h +255 -0
  82. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/node.h +111 -0
  83. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/node_name.inc +224 -0
  84. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/optinsn.inc +128 -0
  85. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/optunifs.inc +43 -0
  86. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parse.h +244 -0
  87. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_bits.h +564 -0
  88. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_node.h +32 -0
  89. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_st.h +162 -0
  90. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_value.h +106 -0
  91. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/ast.h +7524 -0
  92. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/defines.h +242 -0
  93. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/diagnostic.h +450 -0
  94. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/encoding.h +283 -0
  95. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/extension.h +19 -0
  96. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/node.h +129 -0
  97. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/options.h +396 -0
  98. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/pack.h +163 -0
  99. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/parser.h +933 -0
  100. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/prettyprint.h +34 -0
  101. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/prism.h +336 -0
  102. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/regexp.h +43 -0
  103. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/static_literals.h +121 -0
  104. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_buffer.h +218 -0
  105. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_char.h +204 -0
  106. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_constant_pool.h +218 -0
  107. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_integer.h +126 -0
  108. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_list.h +97 -0
  109. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_memchr.h +29 -0
  110. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_newline_list.h +113 -0
  111. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_string.h +190 -0
  112. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_strncasecmp.h +32 -0
  113. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_strpbrk.h +46 -0
  114. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/version.h +29 -0
  115. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism_compile.h +99 -0
  116. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/probes_helper.h +42 -0
  117. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ractor_core.h +382 -0
  118. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regenc.h +254 -0
  119. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regint.h +1006 -0
  120. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regparse.h +371 -0
  121. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/revision.h +5 -0
  122. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rjit.h +101 -0
  123. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rjit_c.h +165 -0
  124. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ruby_assert.h +14 -0
  125. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ruby_atomic.h +23 -0
  126. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rubyparser.h +1350 -0
  127. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/shape.h +234 -0
  128. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/siphash.h +48 -0
  129. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/symbol.h +123 -0
  130. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_none.h +21 -0
  131. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_pthread.h +168 -0
  132. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_win32.h +58 -0
  133. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/timev.h +58 -0
  134. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/transcode_data.h +138 -0
  135. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/variable.h +39 -0
  136. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/version.h +69 -0
  137. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm.inc +5840 -0
  138. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_call_iseq_optimized.inc +244 -0
  139. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_callinfo.h +627 -0
  140. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_core.h +2222 -0
  141. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_debug.h +124 -0
  142. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_exec.h +199 -0
  143. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_insnhelper.h +277 -0
  144. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_opts.h +67 -0
  145. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_sync.h +137 -0
  146. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vmtc.inc +259 -0
  147. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/yjit.h +79 -0
  148. data/lib/debase/ruby_core_source/version.rb +1 -1
  149. metadata +150 -6
@@ -0,0 +1,261 @@
1
+ #ifndef INTERNAL_IMEMO_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_IMEMO_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief IMEMO: Internal memo object.
10
+ */
11
+ #include "ruby/internal/config.h"
12
+ #include <stddef.h> /* for size_t */
13
+ #include "internal/array.h" /* for rb_ary_hidden_new_fill */
14
+ #include "ruby/internal/stdbool.h" /* for bool */
15
+ #include "ruby/ruby.h" /* for rb_block_call_func_t */
16
+
17
+ #ifndef IMEMO_DEBUG
18
+ # define IMEMO_DEBUG 0
19
+ #endif
20
+
21
+ #define IMEMO_MASK 0x0f
22
+
23
+ /* FL_USER0 to FL_USER3 is for type */
24
+ #define IMEMO_FL_USHIFT (FL_USHIFT + 4)
25
+ #define IMEMO_FL_USER0 FL_USER4
26
+ #define IMEMO_FL_USER1 FL_USER5
27
+ #define IMEMO_FL_USER2 FL_USER6
28
+ #define IMEMO_FL_USER3 FL_USER7
29
+ #define IMEMO_FL_USER4 FL_USER8
30
+ #define IMEMO_FL_USER5 FL_USER9
31
+
32
+ enum imemo_type {
33
+ imemo_env = 0,
34
+ imemo_cref = 1, /*!< class reference */
35
+ imemo_svar = 2, /*!< special variable */
36
+ imemo_throw_data = 3,
37
+ imemo_ifunc = 4, /*!< iterator function */
38
+ imemo_memo = 5,
39
+ imemo_ment = 6,
40
+ imemo_iseq = 7,
41
+ imemo_tmpbuf = 8,
42
+ imemo_ast = 9, // Obsolete due to the universal parser
43
+ imemo_parser_strterm = 10,
44
+ imemo_callinfo = 11,
45
+ imemo_callcache = 12,
46
+ imemo_constcache = 13,
47
+ };
48
+
49
+ /* CREF (Class REFerence) is defined in method.h */
50
+
51
+ /*! SVAR (Special VARiable) */
52
+ struct vm_svar {
53
+ VALUE flags;
54
+ const VALUE cref_or_me; /*!< class reference or rb_method_entry_t */
55
+ const VALUE lastline;
56
+ const VALUE backref;
57
+ const VALUE others;
58
+ };
59
+
60
+ /*! THROW_DATA */
61
+ struct vm_throw_data {
62
+ VALUE flags;
63
+ VALUE reserved;
64
+ const VALUE throw_obj;
65
+ const struct rb_control_frame_struct *catch_frame;
66
+ int throw_state;
67
+ };
68
+
69
+ #define THROW_DATA_CONSUMED IMEMO_FL_USER0
70
+
71
+ /* IFUNC (Internal FUNCtion) */
72
+
73
+ struct vm_ifunc_argc {
74
+ #if SIZEOF_INT * 2 > SIZEOF_VALUE
75
+ signed int min: (SIZEOF_VALUE * CHAR_BIT) / 2;
76
+ signed int max: (SIZEOF_VALUE * CHAR_BIT) / 2;
77
+ #else
78
+ int min, max;
79
+ #endif
80
+ };
81
+
82
+ /*! IFUNC (Internal FUNCtion) */
83
+ struct vm_ifunc {
84
+ VALUE flags;
85
+ VALUE *svar_lep;
86
+ rb_block_call_func_t func;
87
+ const void *data;
88
+ struct vm_ifunc_argc argc;
89
+ };
90
+ #define IFUNC_YIELD_OPTIMIZABLE IMEMO_FL_USER0
91
+
92
+ struct rb_imemo_tmpbuf_struct {
93
+ VALUE flags;
94
+ VALUE reserved;
95
+ VALUE *ptr; /* malloc'ed buffer */
96
+ struct rb_imemo_tmpbuf_struct *next; /* next imemo */
97
+ size_t cnt; /* buffer size in VALUE */
98
+ };
99
+
100
+ /*! MEMO
101
+ *
102
+ * @see imemo_type
103
+ * */
104
+ struct MEMO {
105
+ VALUE flags;
106
+ VALUE reserved;
107
+ const VALUE v1;
108
+ const VALUE v2;
109
+ union {
110
+ long cnt;
111
+ long state;
112
+ const VALUE value;
113
+ void (*func)(void);
114
+ } u3;
115
+ };
116
+
117
+ #define IMEMO_NEW(T, type, v0) ((T *)rb_imemo_new((type), (v0)))
118
+
119
+ /* ment is in method.h */
120
+
121
+ #define THROW_DATA_P(err) imemo_throw_data_p((VALUE)err)
122
+ #define MEMO_CAST(m) ((struct MEMO *)(m))
123
+ #define MEMO_FOR(type, value) ((type *)RARRAY_PTR(value))
124
+ #define NEW_MEMO_FOR(type, value) \
125
+ ((value) = rb_ary_hidden_new_fill(type_roomof(type, VALUE)), MEMO_FOR(type, value))
126
+ #define NEW_PARTIAL_MEMO_FOR(type, value, member) \
127
+ ((value) = rb_ary_hidden_new_fill(type_roomof(type, VALUE)), \
128
+ rb_ary_set_len((value), offsetof(type, member) / sizeof(VALUE)), \
129
+ MEMO_FOR(type, value))
130
+
131
+ #ifndef RUBY_RUBYPARSER_H
132
+ typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
133
+ #endif
134
+ rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
135
+ struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
136
+ static inline enum imemo_type imemo_type(VALUE imemo);
137
+ static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
138
+ static inline bool imemo_throw_data_p(VALUE imemo);
139
+ static inline struct vm_ifunc *rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data);
140
+ static inline VALUE rb_imemo_tmpbuf_auto_free_pointer(void);
141
+ static inline void *RB_IMEMO_TMPBUF_PTR(VALUE v);
142
+ static inline void *rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr);
143
+ static inline VALUE rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str);
144
+ static inline void MEMO_V1_SET(struct MEMO *m, VALUE v);
145
+ static inline void MEMO_V2_SET(struct MEMO *m, VALUE v);
146
+
147
+ size_t rb_imemo_memsize(VALUE obj);
148
+ void rb_cc_table_mark(VALUE klass);
149
+ void rb_imemo_mark_and_move(VALUE obj, bool reference_updating);
150
+ void rb_cc_table_free(VALUE klass);
151
+ void rb_imemo_free(VALUE obj);
152
+
153
+ RUBY_SYMBOL_EXPORT_BEGIN
154
+ #if IMEMO_DEBUG
155
+ VALUE rb_imemo_new_debug(enum imemo_type type, VALUE v0, const char *file, int line);
156
+ #define rb_imemo_new(type, v1, v2, v3, v0) rb_imemo_new_debug(type, v1, v2, v3, v0, __FILE__, __LINE__)
157
+ #else
158
+ VALUE rb_imemo_new(enum imemo_type type, VALUE v0);
159
+ #endif
160
+ const char *rb_imemo_name(enum imemo_type type);
161
+ RUBY_SYMBOL_EXPORT_END
162
+
163
+ static inline struct MEMO *
164
+ MEMO_NEW(VALUE a, VALUE b, VALUE c)
165
+ {
166
+ struct MEMO *memo = IMEMO_NEW(struct MEMO, imemo_memo, 0);
167
+ *((VALUE *)&memo->v1) = a;
168
+ *((VALUE *)&memo->v2) = b;
169
+ *((VALUE *)&memo->u3.value) = c;
170
+
171
+ return memo;
172
+ }
173
+
174
+ static inline enum imemo_type
175
+ imemo_type(VALUE imemo)
176
+ {
177
+ return (RBASIC(imemo)->flags >> FL_USHIFT) & IMEMO_MASK;
178
+ }
179
+
180
+ static inline int
181
+ imemo_type_p(VALUE imemo, enum imemo_type imemo_type)
182
+ {
183
+ if (LIKELY(!RB_SPECIAL_CONST_P(imemo))) {
184
+ /* fixed at compile time if imemo_type is given. */
185
+ const VALUE mask = (IMEMO_MASK << FL_USHIFT) | RUBY_T_MASK;
186
+ const VALUE expected_type = (imemo_type << FL_USHIFT) | T_IMEMO;
187
+ /* fixed at runtime. */
188
+ return expected_type == (RBASIC(imemo)->flags & mask);
189
+ }
190
+ else {
191
+ return 0;
192
+ }
193
+ }
194
+
195
+ #define IMEMO_TYPE_P(v, t) imemo_type_p((VALUE)(v), t)
196
+
197
+ static inline bool
198
+ imemo_throw_data_p(VALUE imemo)
199
+ {
200
+ return RB_TYPE_P(imemo, T_IMEMO);
201
+ }
202
+
203
+ static inline struct vm_ifunc *
204
+ rb_vm_ifunc_proc_new(rb_block_call_func_t func, const void *data)
205
+ {
206
+ return rb_vm_ifunc_new(func, data, 0, UNLIMITED_ARGUMENTS);
207
+ }
208
+
209
+ static inline VALUE
210
+ rb_imemo_tmpbuf_auto_free_pointer(void)
211
+ {
212
+ return rb_imemo_new(imemo_tmpbuf, 0);
213
+ }
214
+
215
+ static inline void *
216
+ RB_IMEMO_TMPBUF_PTR(VALUE v)
217
+ {
218
+ const struct rb_imemo_tmpbuf_struct *p = (const void *)v;
219
+ return p->ptr;
220
+ }
221
+
222
+ static inline void *
223
+ rb_imemo_tmpbuf_set_ptr(VALUE v, void *ptr)
224
+ {
225
+ return ((rb_imemo_tmpbuf_t *)v)->ptr = ptr;
226
+ }
227
+
228
+ static inline VALUE
229
+ rb_imemo_tmpbuf_auto_free_pointer_new_from_an_RString(VALUE str)
230
+ {
231
+ const void *src;
232
+ VALUE imemo;
233
+ rb_imemo_tmpbuf_t *tmpbuf;
234
+ void *dst;
235
+ size_t len;
236
+
237
+ StringValue(str);
238
+ /* create tmpbuf to keep the pointer before xmalloc */
239
+ imemo = rb_imemo_tmpbuf_auto_free_pointer();
240
+ tmpbuf = (rb_imemo_tmpbuf_t *)imemo;
241
+ len = RSTRING_LEN(str);
242
+ src = RSTRING_PTR(str);
243
+ dst = ruby_xmalloc(len);
244
+ memcpy(dst, src, len);
245
+ tmpbuf->ptr = dst;
246
+ return imemo;
247
+ }
248
+
249
+ static inline void
250
+ MEMO_V1_SET(struct MEMO *m, VALUE v)
251
+ {
252
+ RB_OBJ_WRITE(m, &m->v1, v);
253
+ }
254
+
255
+ static inline void
256
+ MEMO_V2_SET(struct MEMO *m, VALUE v)
257
+ {
258
+ RB_OBJ_WRITE(m, &m->v2, v);
259
+ }
260
+
261
+ #endif /* INTERNAL_IMEMO_H */
@@ -0,0 +1,47 @@
1
+ #ifndef INTERNAL_INITS_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_INITS_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header aggregating init functions.
10
+ */
11
+
12
+ /* class.c */
13
+ void Init_class_hierarchy(void);
14
+
15
+ /* dmyext.c */
16
+ void Init_enc(void);
17
+ void Init_ext(void);
18
+
19
+ /* file.c */
20
+ void Init_File(void);
21
+
22
+ /* localeinit.c */
23
+ int Init_enc_set_filesystem_encoding(void);
24
+
25
+ /* newline.c */
26
+ void Init_newline(void);
27
+
28
+ /* vm.c */
29
+ void Init_BareVM(void);
30
+ void Init_vm_objects(void);
31
+
32
+ /* vm_backtrace.c */
33
+ void Init_vm_backtrace(void);
34
+
35
+ /* vm_eval.c */
36
+ void Init_vm_eval(void);
37
+
38
+ /* vm_insnhelper.c */
39
+ void Init_vm_stack_canary(void);
40
+
41
+ /* vm_method.c */
42
+ void Init_eval_method(void);
43
+
44
+ /* inits.c */
45
+ void rb_call_inits(void);
46
+
47
+ #endif /* INTERNAL_INITS_H */
@@ -0,0 +1,143 @@
1
+ #ifndef INTERNAL_IO_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_IO_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for IO.
10
+ */
11
+ #include "ruby/ruby.h" /* for VALUE */
12
+
13
+ #define HAVE_RB_IO_T
14
+ struct rb_io;
15
+
16
+ #include "ruby/io.h" /* for rb_io_t */
17
+
18
+ #define IO_WITHOUT_GVL(func, arg) rb_thread_call_without_gvl(func, arg, RUBY_UBF_IO, 0)
19
+ #define IO_WITHOUT_GVL_INT(func, arg) (int)(VALUE)IO_WITHOUT_GVL(func, arg)
20
+
21
+ /** Ruby's IO, metadata and buffers. */
22
+ struct rb_io {
23
+
24
+ /** The IO's Ruby level counterpart. */
25
+ VALUE self;
26
+
27
+ /** stdio ptr for read/write, if available. */
28
+ FILE *stdio_file;
29
+
30
+ /** file descriptor. */
31
+ int fd;
32
+
33
+ /** mode flags: FMODE_XXXs */
34
+ int mode;
35
+
36
+ /** child's pid (for pipes) */
37
+ rb_pid_t pid;
38
+
39
+ /** number of lines read */
40
+ int lineno;
41
+
42
+ /** pathname for file */
43
+ VALUE pathv;
44
+
45
+ /** finalize proc */
46
+ void (*finalize)(struct rb_io*,int);
47
+
48
+ /** Write buffer. */
49
+ rb_io_buffer_t wbuf;
50
+
51
+ /**
52
+ * (Byte) read buffer. Note also that there is a field called
53
+ * ::rb_io_t::cbuf, which also concerns read IO.
54
+ */
55
+ rb_io_buffer_t rbuf;
56
+
57
+ /**
58
+ * Duplex IO object, if set.
59
+ *
60
+ * @see rb_io_set_write_io()
61
+ */
62
+ VALUE tied_io_for_writing;
63
+
64
+ struct rb_io_encoding encs; /**< Decomposed encoding flags. */
65
+
66
+ /** Encoding converter used when reading from this IO. */
67
+ rb_econv_t *readconv;
68
+
69
+ /**
70
+ * rb_io_ungetc() destination. This buffer is read before checking
71
+ * ::rb_io_t::rbuf
72
+ */
73
+ rb_io_buffer_t cbuf;
74
+
75
+ /** Encoding converter used when writing to this IO. */
76
+ rb_econv_t *writeconv;
77
+
78
+ /**
79
+ * This is, when set, an instance of ::rb_cString which holds the "common"
80
+ * encoding. Write conversion can convert strings twice... In case
81
+ * conversion from encoding X to encoding Y does not exist, Ruby finds an
82
+ * encoding Z that bridges the two, so that X to Z to Y conversion happens.
83
+ */
84
+ VALUE writeconv_asciicompat;
85
+
86
+ /** Whether ::rb_io_t::writeconv is already set up. */
87
+ int writeconv_initialized;
88
+
89
+ /**
90
+ * Value of ::rb_io_t::rb_io_enc_t::ecflags stored right before
91
+ * initialising ::rb_io_t::writeconv.
92
+ */
93
+ int writeconv_pre_ecflags;
94
+
95
+ /**
96
+ * Value of ::rb_io_t::rb_io_enc_t::ecopts stored right before initialising
97
+ * ::rb_io_t::writeconv.
98
+ */
99
+ VALUE writeconv_pre_ecopts;
100
+
101
+ /**
102
+ * This is a Ruby level mutex. It avoids multiple threads to write to an
103
+ * IO at once; helps for instance rb_io_puts() to ensure newlines right
104
+ * next to its arguments.
105
+ *
106
+ * This of course doesn't help inter-process IO interleaves, though.
107
+ */
108
+ VALUE write_lock;
109
+
110
+ /**
111
+ * The timeout associated with this IO when performing blocking operations.
112
+ */
113
+ VALUE timeout;
114
+ };
115
+
116
+ /* io.c */
117
+ void ruby_set_inplace_mode(const char *);
118
+ void rb_stdio_set_default_encoding(void);
119
+ VALUE rb_io_flush_raw(VALUE, int);
120
+ size_t rb_io_memsize(const rb_io_t *);
121
+ int rb_stderr_tty_p(void);
122
+ void rb_io_fptr_finalize_internal(void *ptr);
123
+ #ifdef rb_io_fptr_finalize
124
+ # undef rb_io_fptr_finalize
125
+ #endif
126
+ #define rb_io_fptr_finalize rb_io_fptr_finalize_internal
127
+ VALUE rb_io_popen(VALUE pname, VALUE pmode, VALUE env, VALUE opt);
128
+
129
+ VALUE rb_io_prep_stdin(void);
130
+ VALUE rb_io_prep_stdout(void);
131
+ VALUE rb_io_prep_stderr(void);
132
+
133
+ RUBY_SYMBOL_EXPORT_BEGIN
134
+ /* io.c (export) */
135
+ void rb_maygvl_fd_fix_cloexec(int fd);
136
+ int rb_gc_for_fd(int err);
137
+ void rb_write_error_str(VALUE mesg);
138
+
139
+ VALUE rb_io_blocking_region_wait(struct rb_io *io, rb_blocking_function_t *function, void *argument, enum rb_io_event events);
140
+ VALUE rb_io_blocking_region(struct rb_io *io, rb_blocking_function_t *function, void *argument);
141
+ RUBY_SYMBOL_EXPORT_END
142
+
143
+ #endif /* INTERNAL_IO_H */
@@ -0,0 +1,18 @@
1
+ #ifndef INTERNAL_LOAD_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_LOAD_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for require.
10
+ */
11
+ #include "ruby/ruby.h" /* for VALUE */
12
+
13
+ /* load.c */
14
+ VALUE rb_get_expanded_load_path(void);
15
+ int rb_require_internal(VALUE fname);
16
+ NORETURN(void rb_load_fail(VALUE, const char*));
17
+
18
+ #endif /* INTERNAL_LOAD_H */
@@ -0,0 +1,16 @@
1
+ #ifndef INTERNAL_LOADPATH_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_LOADPATH_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for $LOAD_PATH.
10
+ */
11
+
12
+ /* loadpath.c */
13
+ extern const char ruby_exec_prefix[];
14
+ extern const char ruby_initial_load_paths[];
15
+
16
+ #endif /* INTERNAL_LOADPATH_H */
@@ -0,0 +1,23 @@
1
+ #ifndef INTERNAL_MATH_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_MATH_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for Math.
10
+ */
11
+ #include "ruby/ruby.h" /* for VALUE */
12
+
13
+ /* math.c */
14
+ VALUE rb_math_atan2(VALUE, VALUE);
15
+ VALUE rb_math_cos(VALUE);
16
+ VALUE rb_math_cosh(VALUE);
17
+ VALUE rb_math_exp(VALUE);
18
+ VALUE rb_math_hypot(VALUE, VALUE);
19
+ VALUE rb_math_log(int argc, const VALUE *argv);
20
+ VALUE rb_math_sin(VALUE);
21
+ VALUE rb_math_sinh(VALUE);
22
+
23
+ #endif /* INTERNAL_MATH_H */
@@ -0,0 +1,19 @@
1
+ #ifndef INTERNAL_MISSING_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_MISSING_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header corresponding missing.
10
+ */
11
+ #include "ruby/internal/config.h" /* for HAVE_SETPROCTITLE */
12
+
13
+ /* missing/setproctitle.c */
14
+ #ifndef HAVE_SETPROCTITLE
15
+ extern void ruby_init_setproctitle(int argc, char *argv[]);
16
+ extern void ruby_free_proctitle(void);
17
+ #endif
18
+
19
+ #endif /* INTERNAL_MISSING_H */