debase-ruby_core_source 0.9.9 → 0.9.10
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/CHANGELOG.md +7 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/addr2line.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/ccan/list/list.h +28 -166
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/constant.h +3 -10
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/dln.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/eval_intern.h +49 -89
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/gc.h +1 -8
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/id.h +5 -15
- data/lib/debase/ruby_core_source/ruby-2.2.8-p477/insns.inc +107 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/insns_info.inc +45 -89
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/internal.h +164 -666
- data/lib/debase/ruby_core_source/ruby-2.2.8-p477/iseq.h +158 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/known_errors.inc +0 -0
- data/lib/debase/ruby_core_source/ruby-2.2.8-p477/method.h +144 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/node.h +42 -18
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/node_name.inc +6 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/opt_sc.inc +0 -40
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/optinsn.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/optunifs.inc +0 -5
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/parse.h +8 -28
- data/lib/debase/ruby_core_source/ruby-2.2.8-p477/probes_helper.h +67 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/regenc.h +16 -16
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/regint.h +10 -33
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/regparse.h +1 -5
- data/lib/debase/ruby_core_source/ruby-2.2.8-p477/revision.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/ruby_atomic.h +5 -68
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/siphash.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/symbol.h +13 -33
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/thread_pthread.h +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/thread_win32.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/timev.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/transcode_data.h +7 -23
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/version.h +10 -31
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/vm.inc +497 -542
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/vm_core.h +305 -784
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/vm_debug.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.2.8-p477}/vm_exec.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.2.8-p477}/vm_insnhelper.h +56 -50
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/vm_opts.h +7 -8
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.2.8-p477}/vmtc.inc +0 -5
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/addr2line.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/ccan/list/list.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/constant.h +1 -1
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/dln.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/encindex.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/eval_intern.h +3 -4
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/gc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/id.h +0 -9
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/id_table.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/insns.inc +46 -48
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/insns_info.inc +0 -20
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/internal.h +58 -290
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/iseq.h +15 -18
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/known_errors.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/method.h +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/node.h +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/node_name.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/opt_sc.inc +0 -16
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/optinsn.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/optunifs.inc +0 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/parse.h +8 -27
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/probes_helper.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/regenc.h +14 -14
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/regint.h +0 -8
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/regparse.h +0 -0
- data/lib/debase/ruby_core_source/ruby-2.3.5-p376/revision.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/ruby_atomic.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/siphash.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/symbol.h +3 -3
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/thread_pthread.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/thread_win32.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/timev.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/transcode_data.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.3.5-p376}/version.h +9 -27
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/vm.inc +255 -264
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/vm_call_iseq_optimized.inc +5 -5
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/vm_core.h +37 -28
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/vm_debug.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/vm_exec.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/vm_insnhelper.h +32 -16
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/vm_opts.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.3.5-p376}/vmtc.inc +0 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/addr2line.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/ccan/list/list.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/constant.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/dln.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/encindex.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/eval_intern.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/gc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/id.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/id_table.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/insns.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/insns_info.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/internal.h +116 -51
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/iseq.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/known_errors.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/method.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/node.h +2 -2
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/node_name.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/opt_sc.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/optinsn.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/optunifs.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/parse.h +8 -27
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/probes_helper.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/regenc.h +79 -67
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/regint.h +187 -244
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/regparse.h +30 -27
- data/lib/debase/ruby_core_source/ruby-2.4.2-p198/revision.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/ruby_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/ruby_atomic.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/siphash.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/symbol.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/thread_pthread.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/thread_win32.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/timev.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/transcode_data.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/version.h +6 -6
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/vm.inc +37 -34
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/vm_call_iseq_optimized.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/vm_core.h +9 -7
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/vm_debug.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/vm_exec.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview3 → ruby-2.4.2-p198}/vm_insnhelper.h +30 -14
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview2 → ruby-2.4.2-p198}/vm_opts.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.4.2-p198}/vmtc.inc +0 -0
- data/lib/debase/ruby_core_source/version.rb +1 -1
- metadata +138 -143
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview1/method.h +0 -213
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview1/revision.h +0 -1
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview2/revision.h +0 -1
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview2/ruby_assert.h +0 -54
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/encindex.h +0 -67
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/id_table.h +0 -31
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/insns.inc +0 -112
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/iseq.h +0 -252
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/probes_helper.h +0 -43
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/revision.h +0 -1
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/ruby_assert.h +0 -54
- data/lib/debase/ruby_core_source/ruby-2.4.0-preview3/vm_call_iseq_optimized.inc +0 -212
data/lib/debase/ruby_core_source/{ruby-2.4.0-preview1 → ruby-2.3.5-p376}/vm_call_iseq_optimized.inc
RENAMED
|
@@ -181,10 +181,10 @@ static inline vm_call_handler
|
|
|
181
181
|
vm_call_iseq_setup_func(const struct rb_call_info *ci, const int param_size, const int local_size)
|
|
182
182
|
{
|
|
183
183
|
if (UNLIKELY(ci->flag & VM_CALL_TAILCALL)) {
|
|
184
|
-
return
|
|
184
|
+
return vm_call_iseq_setup_tailcall_0start;
|
|
185
185
|
}
|
|
186
186
|
else if (0) { /* to disable optimize */
|
|
187
|
-
return
|
|
187
|
+
return vm_call_iseq_setup_normal_0start;
|
|
188
188
|
}
|
|
189
189
|
else {
|
|
190
190
|
if (param_size <= 3 &&
|
|
@@ -192,7 +192,7 @@ vm_call_iseq_setup_func(const struct rb_call_info *ci, const int param_size, con
|
|
|
192
192
|
VM_ASSERT(local_size != 0);
|
|
193
193
|
return vm_call_iseq_handlers[param_size][local_size-1];
|
|
194
194
|
}
|
|
195
|
-
return
|
|
195
|
+
return vm_call_iseq_setup_normal_0start;
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
|
|
@@ -203,10 +203,10 @@ static inline vm_call_handler
|
|
|
203
203
|
vm_call_iseq_setup_func(const struct rb_call_info *ci, struct rb_call_cache *cc)
|
|
204
204
|
{
|
|
205
205
|
if (UNLIKELY(ci->flag & VM_CALL_TAILCALL)) {
|
|
206
|
-
return
|
|
206
|
+
return vm_call_iseq_setup_tailcall_0start;
|
|
207
207
|
}
|
|
208
208
|
else {
|
|
209
|
-
return
|
|
209
|
+
return vm_call_iseq_setup_normal_0start;
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
#endif
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
vm_core.h -
|
|
4
4
|
|
|
5
|
-
$Author:
|
|
5
|
+
$Author: usa $
|
|
6
6
|
created at: 04/01/01 19:41:38 JST
|
|
7
7
|
|
|
8
8
|
Copyright (C) 2004-2007 Koichi Sasada
|
|
@@ -42,11 +42,10 @@
|
|
|
42
42
|
#define VMDEBUG 3
|
|
43
43
|
#endif
|
|
44
44
|
|
|
45
|
-
#include "ruby_assert.h"
|
|
46
|
-
|
|
47
45
|
#if VM_CHECK_MODE > 0
|
|
48
46
|
#define VM_ASSERT(expr) ( \
|
|
49
|
-
|
|
47
|
+
LIKELY(expr) ? (void)0 : \
|
|
48
|
+
rb_bug("%s:%d assertion violation - %s", __FILE__, __LINE__, #expr))
|
|
50
49
|
#else
|
|
51
50
|
#define VM_ASSERT(expr) ((void)0)
|
|
52
51
|
#endif
|
|
@@ -200,11 +199,10 @@ enum method_missing_reason {
|
|
|
200
199
|
MISSING_NOENTRY = 0x00,
|
|
201
200
|
MISSING_PRIVATE = 0x01,
|
|
202
201
|
MISSING_PROTECTED = 0x02,
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
MISSING_NONE = 0x40
|
|
202
|
+
MISSING_VCALL = 0x04,
|
|
203
|
+
MISSING_SUPER = 0x08,
|
|
204
|
+
MISSING_MISSING = 0x10,
|
|
205
|
+
MISSING_NONE = 0x20
|
|
208
206
|
};
|
|
209
207
|
|
|
210
208
|
struct rb_call_info {
|
|
@@ -251,11 +249,12 @@ struct rb_call_cache {
|
|
|
251
249
|
};
|
|
252
250
|
|
|
253
251
|
#if 1
|
|
254
|
-
#define
|
|
252
|
+
#define GetCoreDataFromValue(obj, type, ptr) do { \
|
|
253
|
+
(ptr) = (type*)DATA_PTR(obj); \
|
|
254
|
+
} while (0)
|
|
255
255
|
#else
|
|
256
|
-
#define
|
|
256
|
+
#define GetCoreDataFromValue(obj, type, ptr) Data_Get_Struct((obj), type, (ptr))
|
|
257
257
|
#endif
|
|
258
|
-
#define GetCoreDataFromValue(obj, type, ptr) ((ptr) = CoreDataFromValue((obj), type))
|
|
259
258
|
|
|
260
259
|
typedef struct rb_iseq_location_struct {
|
|
261
260
|
VALUE path;
|
|
@@ -453,8 +452,6 @@ enum ruby_basic_operators {
|
|
|
453
452
|
BOP_NEQ,
|
|
454
453
|
BOP_MATCH,
|
|
455
454
|
BOP_FREEZE,
|
|
456
|
-
BOP_MAX,
|
|
457
|
-
BOP_MIN,
|
|
458
455
|
|
|
459
456
|
BOP_LAST_
|
|
460
457
|
};
|
|
@@ -489,14 +486,14 @@ typedef struct rb_vm_struct {
|
|
|
489
486
|
struct rb_thread_struct *main_thread;
|
|
490
487
|
struct rb_thread_struct *running_thread;
|
|
491
488
|
|
|
489
|
+
struct list_head waiting_fds; /* <=> struct waiting_fd */
|
|
492
490
|
struct list_head living_threads;
|
|
493
491
|
size_t living_thread_num;
|
|
494
492
|
VALUE thgroup_default;
|
|
495
493
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
unsigned int trace_running: 1;
|
|
494
|
+
int running;
|
|
495
|
+
int thread_abort_on_exception;
|
|
496
|
+
int trace_running;
|
|
500
497
|
volatile int sleeper;
|
|
501
498
|
|
|
502
499
|
/* object management */
|
|
@@ -570,12 +567,12 @@ typedef struct rb_vm_struct {
|
|
|
570
567
|
#define RUBY_VM_FIBER_MACHINE_STACK_SIZE_MIN ( 16 * 1024 * sizeof(VALUE)) /* 64 KB or 128 KB */
|
|
571
568
|
|
|
572
569
|
/* optimize insn */
|
|
573
|
-
#define
|
|
570
|
+
#define FIXNUM_REDEFINED_OP_FLAG (1 << 0)
|
|
574
571
|
#define FLOAT_REDEFINED_OP_FLAG (1 << 1)
|
|
575
572
|
#define STRING_REDEFINED_OP_FLAG (1 << 2)
|
|
576
573
|
#define ARRAY_REDEFINED_OP_FLAG (1 << 3)
|
|
577
574
|
#define HASH_REDEFINED_OP_FLAG (1 << 4)
|
|
578
|
-
|
|
575
|
+
#define BIGNUM_REDEFINED_OP_FLAG (1 << 5)
|
|
579
576
|
#define SYMBOL_REDEFINED_OP_FLAG (1 << 6)
|
|
580
577
|
#define TIME_REDEFINED_OP_FLAG (1 << 7)
|
|
581
578
|
#define REGEXP_REDEFINED_OP_FLAG (1 << 8)
|
|
@@ -687,8 +684,6 @@ typedef struct rb_thread_struct {
|
|
|
687
684
|
/* passing state */
|
|
688
685
|
int state;
|
|
689
686
|
|
|
690
|
-
int waiting_fd;
|
|
691
|
-
|
|
692
687
|
/* for rb_iterate */
|
|
693
688
|
const rb_block_t *passed_block;
|
|
694
689
|
|
|
@@ -703,6 +698,8 @@ typedef struct rb_thread_struct {
|
|
|
703
698
|
VALUE top_wrapper;
|
|
704
699
|
|
|
705
700
|
/* eval env */
|
|
701
|
+
rb_block_t *base_block;
|
|
702
|
+
|
|
706
703
|
VALUE *root_lep;
|
|
707
704
|
VALUE root_svar;
|
|
708
705
|
|
|
@@ -745,6 +742,20 @@ typedef struct rb_thread_struct {
|
|
|
745
742
|
struct rb_vm_tag *tag;
|
|
746
743
|
struct rb_vm_protect_tag *protect_tag;
|
|
747
744
|
|
|
745
|
+
/*! Thread-local state of evaluation context.
|
|
746
|
+
*
|
|
747
|
+
* If negative, this thread is evaluating the main program.
|
|
748
|
+
* If positive, this thread is evaluating a program under Kernel::eval
|
|
749
|
+
* family.
|
|
750
|
+
*/
|
|
751
|
+
int parse_in_eval;
|
|
752
|
+
|
|
753
|
+
/*! Thread-local state of compiling context.
|
|
754
|
+
*
|
|
755
|
+
* If non-zero, the parser does not automatically print error messages to
|
|
756
|
+
* stderr. */
|
|
757
|
+
int mild_compile_error;
|
|
758
|
+
|
|
748
759
|
/* storage */
|
|
749
760
|
st_table *local_storage;
|
|
750
761
|
VALUE local_storage_recursive_hash;
|
|
@@ -785,9 +796,8 @@ typedef struct rb_thread_struct {
|
|
|
785
796
|
rb_ensure_list_t *ensure_list;
|
|
786
797
|
|
|
787
798
|
/* misc */
|
|
788
|
-
enum method_missing_reason method_missing_reason
|
|
789
|
-
|
|
790
|
-
unsigned int report_on_exception: 1;
|
|
799
|
+
enum method_missing_reason method_missing_reason;
|
|
800
|
+
int abort_on_exception;
|
|
791
801
|
#ifdef USE_SIGALTSTACK
|
|
792
802
|
void *altstack;
|
|
793
803
|
#endif
|
|
@@ -816,7 +826,7 @@ RUBY_SYMBOL_EXPORT_BEGIN
|
|
|
816
826
|
/* node -> iseq */
|
|
817
827
|
rb_iseq_t *rb_iseq_new(NODE*, VALUE, VALUE, VALUE, const rb_iseq_t *parent, enum iseq_type);
|
|
818
828
|
rb_iseq_t *rb_iseq_new_top(NODE *node, VALUE name, VALUE path, VALUE absolute_path, const rb_iseq_t *parent);
|
|
819
|
-
rb_iseq_t *rb_iseq_new_main(NODE *node, VALUE path, VALUE absolute_path
|
|
829
|
+
rb_iseq_t *rb_iseq_new_main(NODE *node, VALUE path, VALUE absolute_path);
|
|
820
830
|
rb_iseq_t *rb_iseq_new_with_bopt(NODE*, VALUE, VALUE, VALUE, VALUE, VALUE, enum iseq_type, VALUE);
|
|
821
831
|
rb_iseq_t *rb_iseq_new_with_opt(NODE*, VALUE, VALUE, VALUE, VALUE, const rb_iseq_t *parent, enum iseq_type, const rb_compile_option_t*);
|
|
822
832
|
|
|
@@ -1032,6 +1042,7 @@ void rb_thread_wakeup_timer_thread(void);
|
|
|
1032
1042
|
static inline void
|
|
1033
1043
|
rb_vm_living_threads_init(rb_vm_t *vm)
|
|
1034
1044
|
{
|
|
1045
|
+
list_head_init(&vm->waiting_fds);
|
|
1035
1046
|
list_head_init(&vm->living_threads);
|
|
1036
1047
|
vm->living_thread_num = 0;
|
|
1037
1048
|
}
|
|
@@ -1139,7 +1150,6 @@ enum {
|
|
|
1139
1150
|
#define RUBY_VM_INTERRUPTED(th) ((th)->interrupt_flag & ~(th)->interrupt_mask & (PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
|
|
1140
1151
|
#define RUBY_VM_INTERRUPTED_ANY(th) ((th)->interrupt_flag & ~(th)->interrupt_mask)
|
|
1141
1152
|
|
|
1142
|
-
VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
|
|
1143
1153
|
int rb_signal_buff_size(void);
|
|
1144
1154
|
void rb_signal_exec(rb_thread_t *th, int sig);
|
|
1145
1155
|
void rb_threadptr_check_signal(rb_thread_t *mth);
|
|
@@ -1151,7 +1161,6 @@ void rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th);
|
|
|
1151
1161
|
void rb_threadptr_pending_interrupt_clear(rb_thread_t *th);
|
|
1152
1162
|
void rb_threadptr_pending_interrupt_enque(rb_thread_t *th, VALUE v);
|
|
1153
1163
|
int rb_threadptr_pending_interrupt_active_p(rb_thread_t *th);
|
|
1154
|
-
void rb_threadptr_error_print(rb_thread_t *th, VALUE errinfo);
|
|
1155
1164
|
|
|
1156
1165
|
#define RUBY_VM_CHECK_INTS(th) ruby_vm_check_ints(th)
|
|
1157
1166
|
static inline void
|
|
File without changes
|
|
File without changes
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
insnhelper.h - helper macros to implement each instructions
|
|
4
4
|
|
|
5
|
-
$Author:
|
|
5
|
+
$Author: usa $
|
|
6
6
|
created at: 04/01/01 15:50:34 JST
|
|
7
7
|
|
|
8
8
|
Copyright (C) 2004-2007 Koichi Sasada
|
|
@@ -185,8 +185,8 @@ enum vm_regan_acttype {
|
|
|
185
185
|
#define GET_GLOBAL_CONSTANT_STATE() (ruby_vm_global_constant_state)
|
|
186
186
|
#define INC_GLOBAL_CONSTANT_STATE() (++ruby_vm_global_constant_state)
|
|
187
187
|
|
|
188
|
-
static VALUE make_no_method_exception(VALUE exc,
|
|
189
|
-
int argc, const VALUE *argv
|
|
188
|
+
static VALUE make_no_method_exception(VALUE exc, const char *format,
|
|
189
|
+
VALUE obj, int argc, const VALUE *argv);
|
|
190
190
|
|
|
191
191
|
static inline struct vm_throw_data *
|
|
192
192
|
THROW_DATA_NEW(VALUE val, rb_control_frame_t *cf, VALUE st)
|
|
@@ -194,18 +194,6 @@ THROW_DATA_NEW(VALUE val, rb_control_frame_t *cf, VALUE st)
|
|
|
194
194
|
return (struct vm_throw_data *)rb_imemo_new(imemo_throw_data, val, (VALUE)cf, st, 0);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
static inline void
|
|
198
|
-
THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
|
|
199
|
-
{
|
|
200
|
-
obj->catch_frame = cfp;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
static inline void
|
|
204
|
-
THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
|
|
205
|
-
{
|
|
206
|
-
obj->throw_state = (VALUE)st;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
197
|
static inline VALUE
|
|
210
198
|
THROW_DATA_VAL(const struct vm_throw_data *obj)
|
|
211
199
|
{
|
|
@@ -218,10 +206,38 @@ THROW_DATA_CATCH_FRAME(const struct vm_throw_data *obj)
|
|
|
218
206
|
return obj->catch_frame;
|
|
219
207
|
}
|
|
220
208
|
|
|
221
|
-
static int
|
|
209
|
+
static inline int
|
|
222
210
|
THROW_DATA_STATE(const struct vm_throw_data *obj)
|
|
223
211
|
{
|
|
224
212
|
return (int)obj->throw_state;
|
|
225
213
|
}
|
|
226
214
|
|
|
215
|
+
static inline int
|
|
216
|
+
THROW_DATA_CONSUMED_P(const struct vm_throw_data *obj)
|
|
217
|
+
{
|
|
218
|
+
VM_ASSERT(THROW_DATA_P(obj));
|
|
219
|
+
return obj->flags & THROW_DATA_CONSUMED;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
static inline void
|
|
223
|
+
THROW_DATA_CATCH_FRAME_SET(struct vm_throw_data *obj, const rb_control_frame_t *cfp)
|
|
224
|
+
{
|
|
225
|
+
obj->catch_frame = cfp;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
static inline void
|
|
229
|
+
THROW_DATA_STATE_SET(struct vm_throw_data *obj, int st)
|
|
230
|
+
{
|
|
231
|
+
obj->throw_state = (VALUE)st;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
static inline void
|
|
235
|
+
THROW_DATA_CONSUMED_SET(struct vm_throw_data *obj)
|
|
236
|
+
{
|
|
237
|
+
if (THROW_DATA_P(obj) &&
|
|
238
|
+
THROW_DATA_STATE(obj) == TAG_BREAK) {
|
|
239
|
+
obj->flags |= THROW_DATA_CONSUMED;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
227
243
|
#endif /* RUBY_INSNHELPER_H */
|
|
File without changes
|
|
@@ -59,8 +59,6 @@ static const void *const insns_address_table[] = {
|
|
|
59
59
|
LABEL_PTR(defineclass),
|
|
60
60
|
LABEL_PTR(send),
|
|
61
61
|
LABEL_PTR(opt_str_freeze),
|
|
62
|
-
LABEL_PTR(opt_newarray_max),
|
|
63
|
-
LABEL_PTR(opt_newarray_min),
|
|
64
62
|
LABEL_PTR(opt_send_without_block),
|
|
65
63
|
LABEL_PTR(invokesuper),
|
|
66
64
|
LABEL_PTR(invokeblock),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -133,20 +133,20 @@ extern "C" {
|
|
|
133
133
|
# endif
|
|
134
134
|
#endif
|
|
135
135
|
|
|
136
|
-
static inline int
|
|
136
|
+
static inline unsigned int
|
|
137
137
|
nlz_int(unsigned int x)
|
|
138
138
|
{
|
|
139
139
|
#if defined(HAVE_BUILTIN___BUILTIN_CLZ)
|
|
140
140
|
if (x == 0) return SIZEOF_INT * CHAR_BIT;
|
|
141
|
-
return __builtin_clz(x);
|
|
141
|
+
return (unsigned int)__builtin_clz(x);
|
|
142
142
|
#else
|
|
143
143
|
unsigned int y;
|
|
144
144
|
# if 64 < SIZEOF_INT * CHAR_BIT
|
|
145
|
-
int n = 128;
|
|
145
|
+
unsigned int n = 128;
|
|
146
146
|
# elif 32 < SIZEOF_INT * CHAR_BIT
|
|
147
|
-
int n = 64;
|
|
147
|
+
unsigned int n = 64;
|
|
148
148
|
# else
|
|
149
|
-
int n = 32;
|
|
149
|
+
unsigned int n = 32;
|
|
150
150
|
# endif
|
|
151
151
|
# if 64 < SIZEOF_INT * CHAR_BIT
|
|
152
152
|
y = x >> 64; if (y) {n -= 64; x = y;}
|
|
@@ -159,24 +159,24 @@ nlz_int(unsigned int x)
|
|
|
159
159
|
y = x >> 4; if (y) {n -= 4; x = y;}
|
|
160
160
|
y = x >> 2; if (y) {n -= 2; x = y;}
|
|
161
161
|
y = x >> 1; if (y) {return n - 2;}
|
|
162
|
-
return (int)(n - x);
|
|
162
|
+
return (unsigned int)(n - x);
|
|
163
163
|
#endif
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
-
static inline int
|
|
166
|
+
static inline unsigned int
|
|
167
167
|
nlz_long(unsigned long x)
|
|
168
168
|
{
|
|
169
169
|
#if defined(HAVE_BUILTIN___BUILTIN_CLZL)
|
|
170
170
|
if (x == 0) return SIZEOF_LONG * CHAR_BIT;
|
|
171
|
-
return __builtin_clzl(x);
|
|
171
|
+
return (unsigned int)__builtin_clzl(x);
|
|
172
172
|
#else
|
|
173
173
|
unsigned long y;
|
|
174
174
|
# if 64 < SIZEOF_LONG * CHAR_BIT
|
|
175
|
-
int n = 128;
|
|
175
|
+
unsigned int n = 128;
|
|
176
176
|
# elif 32 < SIZEOF_LONG * CHAR_BIT
|
|
177
|
-
int n = 64;
|
|
177
|
+
unsigned int n = 64;
|
|
178
178
|
# else
|
|
179
|
-
int n = 32;
|
|
179
|
+
unsigned int n = 32;
|
|
180
180
|
# endif
|
|
181
181
|
# if 64 < SIZEOF_LONG * CHAR_BIT
|
|
182
182
|
y = x >> 64; if (y) {n -= 64; x = y;}
|
|
@@ -189,25 +189,25 @@ nlz_long(unsigned long x)
|
|
|
189
189
|
y = x >> 4; if (y) {n -= 4; x = y;}
|
|
190
190
|
y = x >> 2; if (y) {n -= 2; x = y;}
|
|
191
191
|
y = x >> 1; if (y) {return n - 2;}
|
|
192
|
-
return (int)(n - x);
|
|
192
|
+
return (unsigned int)(n - x);
|
|
193
193
|
#endif
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
#ifdef HAVE_LONG_LONG
|
|
197
|
-
static inline int
|
|
197
|
+
static inline unsigned int
|
|
198
198
|
nlz_long_long(unsigned LONG_LONG x)
|
|
199
199
|
{
|
|
200
200
|
#if defined(HAVE_BUILTIN___BUILTIN_CLZLL)
|
|
201
201
|
if (x == 0) return SIZEOF_LONG_LONG * CHAR_BIT;
|
|
202
|
-
return __builtin_clzll(x);
|
|
202
|
+
return (unsigned int)__builtin_clzll(x);
|
|
203
203
|
#else
|
|
204
204
|
unsigned LONG_LONG y;
|
|
205
205
|
# if 64 < SIZEOF_LONG_LONG * CHAR_BIT
|
|
206
|
-
int n = 128;
|
|
206
|
+
unsigned int n = 128;
|
|
207
207
|
# elif 32 < SIZEOF_LONG_LONG * CHAR_BIT
|
|
208
|
-
int n = 64;
|
|
208
|
+
unsigned int n = 64;
|
|
209
209
|
# else
|
|
210
|
-
int n = 32;
|
|
210
|
+
unsigned int n = 32;
|
|
211
211
|
# endif
|
|
212
212
|
# if 64 < SIZEOF_LONG_LONG * CHAR_BIT
|
|
213
213
|
y = x >> 64; if (y) {n -= 64; x = y;}
|
|
@@ -220,17 +220,17 @@ nlz_long_long(unsigned LONG_LONG x)
|
|
|
220
220
|
y = x >> 4; if (y) {n -= 4; x = y;}
|
|
221
221
|
y = x >> 2; if (y) {n -= 2; x = y;}
|
|
222
222
|
y = x >> 1; if (y) {return n - 2;}
|
|
223
|
-
return (int)(n - x);
|
|
223
|
+
return (unsigned int)(n - x);
|
|
224
224
|
#endif
|
|
225
225
|
}
|
|
226
226
|
#endif
|
|
227
227
|
|
|
228
228
|
#ifdef HAVE_UINT128_T
|
|
229
|
-
static inline int
|
|
229
|
+
static inline unsigned int
|
|
230
230
|
nlz_int128(uint128_t x)
|
|
231
231
|
{
|
|
232
232
|
uint128_t y;
|
|
233
|
-
int n = 128;
|
|
233
|
+
unsigned int n = 128;
|
|
234
234
|
y = x >> 64; if (y) {n -= 64; x = y;}
|
|
235
235
|
y = x >> 32; if (y) {n -= 32; x = y;}
|
|
236
236
|
y = x >> 16; if (y) {n -= 16; x = y;}
|
|
@@ -238,12 +238,13 @@ nlz_int128(uint128_t x)
|
|
|
238
238
|
y = x >> 4; if (y) {n -= 4; x = y;}
|
|
239
239
|
y = x >> 2; if (y) {n -= 2; x = y;}
|
|
240
240
|
y = x >> 1; if (y) {return n - 2;}
|
|
241
|
-
return (int)(n - x);
|
|
241
|
+
return (unsigned int)(n - x);
|
|
242
242
|
}
|
|
243
243
|
#endif
|
|
244
244
|
|
|
245
|
-
static inline int
|
|
246
|
-
nlz_intptr(uintptr_t x)
|
|
245
|
+
static inline unsigned int
|
|
246
|
+
nlz_intptr(uintptr_t x)
|
|
247
|
+
{
|
|
247
248
|
#if SIZEOF_VOIDP == 8
|
|
248
249
|
return nlz_long_long(x);
|
|
249
250
|
#elif SIZEOF_VOIDP == 4
|
|
@@ -251,10 +252,11 @@ nlz_intptr(uintptr_t x) {
|
|
|
251
252
|
#endif
|
|
252
253
|
}
|
|
253
254
|
|
|
254
|
-
static inline int
|
|
255
|
-
rb_popcount32(uint32_t x)
|
|
255
|
+
static inline unsigned int
|
|
256
|
+
rb_popcount32(uint32_t x)
|
|
257
|
+
{
|
|
256
258
|
#ifdef HAVE_BUILTIN___BUILTIN_POPCOUNT
|
|
257
|
-
return __builtin_popcount(x);
|
|
259
|
+
return (unsigned int)__builtin_popcount(x);
|
|
258
260
|
#else
|
|
259
261
|
x = (x & 0x55555555) + (x >> 1 & 0x55555555);
|
|
260
262
|
x = (x & 0x33333333) + (x >> 2 & 0x33333333);
|
|
@@ -265,7 +267,8 @@ rb_popcount32(uint32_t x) {
|
|
|
265
267
|
}
|
|
266
268
|
|
|
267
269
|
static inline int
|
|
268
|
-
rb_popcount64(uint64_t x)
|
|
270
|
+
rb_popcount64(uint64_t x)
|
|
271
|
+
{
|
|
269
272
|
#ifdef HAVE_BUILTIN___BUILTIN_POPCOUNT
|
|
270
273
|
return __builtin_popcountll(x);
|
|
271
274
|
#else
|
|
@@ -279,7 +282,8 @@ rb_popcount64(uint64_t x) {
|
|
|
279
282
|
}
|
|
280
283
|
|
|
281
284
|
static inline int
|
|
282
|
-
rb_popcount_intptr(uintptr_t x)
|
|
285
|
+
rb_popcount_intptr(uintptr_t x)
|
|
286
|
+
{
|
|
283
287
|
#if SIZEOF_VOIDP == 8
|
|
284
288
|
return rb_popcount64(x);
|
|
285
289
|
#elif SIZEOF_VOIDP == 4
|
|
@@ -288,7 +292,8 @@ rb_popcount_intptr(uintptr_t x) {
|
|
|
288
292
|
}
|
|
289
293
|
|
|
290
294
|
static inline int
|
|
291
|
-
ntz_int32(uint32_t x)
|
|
295
|
+
ntz_int32(uint32_t x)
|
|
296
|
+
{
|
|
292
297
|
#ifdef HAVE_BUILTIN___BUILTIN_CTZ
|
|
293
298
|
return __builtin_ctz(x);
|
|
294
299
|
#else
|
|
@@ -297,7 +302,8 @@ ntz_int32(uint32_t x) {
|
|
|
297
302
|
}
|
|
298
303
|
|
|
299
304
|
static inline int
|
|
300
|
-
ntz_int64(uint64_t x)
|
|
305
|
+
ntz_int64(uint64_t x)
|
|
306
|
+
{
|
|
301
307
|
#ifdef HAVE_BUILTIN___BUILTIN_CTZLL
|
|
302
308
|
return __builtin_ctzll(x);
|
|
303
309
|
#else
|
|
@@ -306,7 +312,8 @@ ntz_int64(uint64_t x) {
|
|
|
306
312
|
}
|
|
307
313
|
|
|
308
314
|
static inline int
|
|
309
|
-
ntz_intptr(uintptr_t x)
|
|
315
|
+
ntz_intptr(uintptr_t x)
|
|
316
|
+
{
|
|
310
317
|
#if SIZEOF_VOIDP == 8
|
|
311
318
|
return ntz_int64(x);
|
|
312
319
|
#elif SIZEOF_VOIDP == 4
|
|
@@ -323,8 +330,6 @@ ntz_intptr(uintptr_t x) {
|
|
|
323
330
|
VALUE rb_int128t2big(int128_t n);
|
|
324
331
|
#endif
|
|
325
332
|
|
|
326
|
-
#define ST2FIX(h) LONG2FIX((long)(h))
|
|
327
|
-
|
|
328
333
|
|
|
329
334
|
/* arguments must be Fixnum */
|
|
330
335
|
static inline VALUE
|
|
@@ -397,17 +402,20 @@ rb_fix_mod_fix(VALUE x, VALUE y)
|
|
|
397
402
|
|
|
398
403
|
#if defined(HAVE_UINT128_T)
|
|
399
404
|
# define bit_length(x) \
|
|
405
|
+
(unsigned int) \
|
|
400
406
|
(sizeof(x) <= SIZEOF_INT ? SIZEOF_INT * CHAR_BIT - nlz_int((unsigned int)(x)) : \
|
|
401
407
|
sizeof(x) <= SIZEOF_LONG ? SIZEOF_LONG * CHAR_BIT - nlz_long((unsigned long)(x)) : \
|
|
402
408
|
sizeof(x) <= SIZEOF_LONG_LONG ? SIZEOF_LONG_LONG * CHAR_BIT - nlz_long_long((unsigned LONG_LONG)(x)) : \
|
|
403
409
|
SIZEOF_INT128_T * CHAR_BIT - nlz_int128((uint128_t)(x)))
|
|
404
410
|
#elif defined(HAVE_LONG_LONG)
|
|
405
411
|
# define bit_length(x) \
|
|
412
|
+
(unsigned int) \
|
|
406
413
|
(sizeof(x) <= SIZEOF_INT ? SIZEOF_INT * CHAR_BIT - nlz_int((unsigned int)(x)) : \
|
|
407
414
|
sizeof(x) <= SIZEOF_LONG ? SIZEOF_LONG * CHAR_BIT - nlz_long((unsigned long)(x)) : \
|
|
408
415
|
SIZEOF_LONG_LONG * CHAR_BIT - nlz_long_long((unsigned LONG_LONG)(x)))
|
|
409
416
|
#else
|
|
410
417
|
# define bit_length(x) \
|
|
418
|
+
(unsigned int) \
|
|
411
419
|
(sizeof(x) <= SIZEOF_INT ? SIZEOF_INT * CHAR_BIT - nlz_int((unsigned int)(x)) : \
|
|
412
420
|
SIZEOF_LONG * CHAR_BIT - nlz_long((unsigned long)(x)))
|
|
413
421
|
#endif
|
|
@@ -485,7 +493,7 @@ struct RBignum {
|
|
|
485
493
|
BDIGIT ary[BIGNUM_EMBED_LEN_MAX];
|
|
486
494
|
} as;
|
|
487
495
|
};
|
|
488
|
-
#define BIGNUM_SIGN_BIT FL_USER1
|
|
496
|
+
#define BIGNUM_SIGN_BIT ((VALUE)FL_USER1)
|
|
489
497
|
/* sign: positive:1, negative:0 */
|
|
490
498
|
#define BIGNUM_SIGN(b) ((RBASIC(b)->flags & BIGNUM_SIGN_BIT) != 0)
|
|
491
499
|
#define BIGNUM_SET_SIGN(b,sign) \
|
|
@@ -495,13 +503,13 @@ struct RBignum {
|
|
|
495
503
|
#define BIGNUM_NEGATIVE_P(b) (!BIGNUM_SIGN(b))
|
|
496
504
|
#define BIGNUM_NEGATE(b) (RBASIC(b)->flags ^= BIGNUM_SIGN_BIT)
|
|
497
505
|
|
|
498
|
-
#define BIGNUM_EMBED_FLAG FL_USER2
|
|
499
|
-
#define BIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
|
|
506
|
+
#define BIGNUM_EMBED_FLAG ((VALUE)FL_USER2)
|
|
507
|
+
#define BIGNUM_EMBED_LEN_MASK ((VALUE)(FL_USER5|FL_USER4|FL_USER3))
|
|
500
508
|
#define BIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+BIGNUM_EMBED_LEN_NUMBITS)
|
|
501
509
|
#define BIGNUM_LEN(b) \
|
|
502
510
|
((RBASIC(b)->flags & BIGNUM_EMBED_FLAG) ? \
|
|
503
|
-
(
|
|
504
|
-
|
|
511
|
+
(size_t)((RBASIC(b)->flags >> BIGNUM_EMBED_LEN_SHIFT) & \
|
|
512
|
+
(BIGNUM_EMBED_LEN_MASK >> BIGNUM_EMBED_LEN_SHIFT)) : \
|
|
505
513
|
RBIGNUM(b)->as.heap.len)
|
|
506
514
|
/* LSB:BIGNUM_DIGITS(b)[0], MSB:BIGNUM_DIGITS(b)[BIGNUM_LEN(b)-1] */
|
|
507
515
|
#define BIGNUM_DIGITS(b) \
|
|
@@ -559,7 +567,7 @@ struct RHash {
|
|
|
559
567
|
#undef RHASH_SIZE
|
|
560
568
|
#define RHASH_ITER_LEV(h) (RHASH(h)->iter_lev)
|
|
561
569
|
#define RHASH_IFNONE(h) (RHASH(h)->ifnone)
|
|
562
|
-
#define RHASH_SIZE(h) (RHASH(h)->ntbl ?
|
|
570
|
+
#define RHASH_SIZE(h) (RHASH(h)->ntbl ? RHASH(h)->ntbl->num_entries : (st_index_t)0)
|
|
563
571
|
#endif
|
|
564
572
|
|
|
565
573
|
/* missing/setproctitle.c */
|
|
@@ -766,6 +774,8 @@ struct vm_svar {
|
|
|
766
774
|
|
|
767
775
|
/* THROW_DATA */
|
|
768
776
|
|
|
777
|
+
#define THROW_DATA_CONSUMED IMEMO_FL_USER0
|
|
778
|
+
|
|
769
779
|
struct vm_throw_data {
|
|
770
780
|
VALUE flags;
|
|
771
781
|
VALUE reserved;
|
|
@@ -774,19 +784,34 @@ struct vm_throw_data {
|
|
|
774
784
|
VALUE throw_state;
|
|
775
785
|
};
|
|
776
786
|
|
|
777
|
-
#define THROW_DATA_P(err) RB_TYPE_P((err), T_IMEMO)
|
|
787
|
+
#define THROW_DATA_P(err) RB_TYPE_P(((VALUE)err), T_IMEMO)
|
|
778
788
|
|
|
779
789
|
/* IFUNC */
|
|
780
790
|
|
|
791
|
+
struct vm_ifunc_argc {
|
|
792
|
+
#if SIZEOF_INT * 2 > SIZEOF_VALUE
|
|
793
|
+
int min: (SIZEOF_VALUE * CHAR_BIT) / 2;
|
|
794
|
+
int max: (SIZEOF_VALUE * CHAR_BIT) / 2;
|
|
795
|
+
#else
|
|
796
|
+
int min, max;
|
|
797
|
+
#endif
|
|
798
|
+
};
|
|
799
|
+
|
|
781
800
|
struct vm_ifunc {
|
|
782
801
|
VALUE flags;
|
|
783
802
|
VALUE reserved;
|
|
784
803
|
VALUE (*func)(ANYARGS);
|
|
785
804
|
const void *data;
|
|
786
|
-
|
|
805
|
+
struct vm_ifunc_argc argc;
|
|
787
806
|
};
|
|
788
807
|
|
|
789
808
|
#define IFUNC_NEW(a, b, c) ((struct vm_ifunc *)rb_imemo_new(imemo_ifunc, (VALUE)(a), (VALUE)(b), (VALUE)(c), 0))
|
|
809
|
+
struct vm_ifunc *rb_vm_ifunc_new(VALUE (*func)(ANYARGS), const void *data, int min_argc, int max_argc);
|
|
810
|
+
static inline struct vm_ifunc *
|
|
811
|
+
rb_vm_ifunc_proc_new(VALUE (*func)(ANYARGS), const void *data)
|
|
812
|
+
{
|
|
813
|
+
return rb_vm_ifunc_new(func, data, 0, UNLIMITED_ARGUMENTS);
|
|
814
|
+
}
|
|
790
815
|
|
|
791
816
|
/* MEMO */
|
|
792
817
|
|
|
@@ -834,8 +859,8 @@ enum {
|
|
|
834
859
|
};
|
|
835
860
|
|
|
836
861
|
struct cmp_opt_data {
|
|
837
|
-
int opt_methods;
|
|
838
|
-
int opt_inited;
|
|
862
|
+
unsigned int opt_methods;
|
|
863
|
+
unsigned int opt_inited;
|
|
839
864
|
};
|
|
840
865
|
|
|
841
866
|
#define NEW_CMP_OPT_MEMO(type, value) \
|
|
@@ -891,7 +916,7 @@ size_t rb_ary_memsize(VALUE);
|
|
|
891
916
|
|
|
892
917
|
/* bignum.c */
|
|
893
918
|
extern const char ruby_digitmap[];
|
|
894
|
-
|
|
919
|
+
double rb_big_fdiv_double(VALUE x, VALUE y);
|
|
895
920
|
VALUE rb_big_uminus(VALUE x);
|
|
896
921
|
VALUE rb_big_hash(VALUE);
|
|
897
922
|
VALUE rb_big_odd_p(VALUE);
|
|
@@ -1088,6 +1113,7 @@ long rb_objid_hash(st_index_t index);
|
|
|
1088
1113
|
long rb_dbl_long_hash(double d);
|
|
1089
1114
|
st_table *rb_init_identtable(void);
|
|
1090
1115
|
st_table *rb_init_identtable_with_size(st_index_t size);
|
|
1116
|
+
VALUE rb_hash_compare_by_id_p(VALUE hash);
|
|
1091
1117
|
|
|
1092
1118
|
#define RHASH_TBL_RAW(h) rb_hash_tbl_raw(h)
|
|
1093
1119
|
VALUE rb_hash_keys(VALUE hash);
|
|
@@ -1136,16 +1162,30 @@ VALUE rb_math_sqrt(VALUE);
|
|
|
1136
1162
|
void Init_newline(void);
|
|
1137
1163
|
|
|
1138
1164
|
/* numeric.c */
|
|
1165
|
+
|
|
1166
|
+
#define FIXNUM_POSITIVE_P(num) ((SIGNED_VALUE)(num) > (SIGNED_VALUE)INT2FIX(0))
|
|
1167
|
+
#define FIXNUM_NEGATIVE_P(num) ((SIGNED_VALUE)(num) < 0)
|
|
1168
|
+
#define FIXNUM_ZERO_P(num) ((num) == INT2FIX(0))
|
|
1169
|
+
|
|
1170
|
+
#define INT_NEGATIVE_P(x) (FIXNUM_P(x) ? FIXNUM_NEGATIVE_P(x) : BIGNUM_NEGATIVE_P(x))
|
|
1171
|
+
|
|
1139
1172
|
#ifndef ROUND_DEFAULT
|
|
1140
|
-
# define ROUND_DEFAULT
|
|
1173
|
+
# define ROUND_DEFAULT RUBY_NUM_ROUND_HALF_UP
|
|
1141
1174
|
#endif
|
|
1142
1175
|
enum ruby_num_rounding_mode {
|
|
1143
1176
|
RUBY_NUM_ROUND_HALF_UP,
|
|
1144
1177
|
RUBY_NUM_ROUND_HALF_EVEN,
|
|
1178
|
+
RUBY_NUM_ROUND_HALF_DOWN,
|
|
1145
1179
|
RUBY_NUM_ROUND_DEFAULT = ROUND_DEFAULT
|
|
1146
1180
|
};
|
|
1147
|
-
#define ROUND_TO(mode, up,
|
|
1148
|
-
((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even :
|
|
1181
|
+
#define ROUND_TO(mode, even, up, down) \
|
|
1182
|
+
((mode) == RUBY_NUM_ROUND_HALF_EVEN ? even : \
|
|
1183
|
+
(mode) == RUBY_NUM_ROUND_HALF_UP ? up : down)
|
|
1184
|
+
#define ROUND_FUNC(mode, name) \
|
|
1185
|
+
ROUND_TO(mode, name##_half_even, name##_half_up, name##_half_down)
|
|
1186
|
+
#define ROUND_CALL(mode, name, args) \
|
|
1187
|
+
ROUND_TO(mode, name##_half_even args, \
|
|
1188
|
+
name##_half_up args, name##_half_down args)
|
|
1149
1189
|
|
|
1150
1190
|
int rb_num_to_uint(VALUE val, unsigned int *ret);
|
|
1151
1191
|
VALUE ruby_num_interval_step_size(VALUE from, VALUE to, VALUE step, int excl);
|
|
@@ -1155,6 +1195,7 @@ int rb_num_negative_p(VALUE);
|
|
|
1155
1195
|
VALUE rb_int_succ(VALUE num);
|
|
1156
1196
|
VALUE rb_int_pred(VALUE num);
|
|
1157
1197
|
VALUE rb_int_uminus(VALUE num);
|
|
1198
|
+
VALUE rb_float_uminus(VALUE num);
|
|
1158
1199
|
VALUE rb_int_plus(VALUE x, VALUE y);
|
|
1159
1200
|
VALUE rb_int_minus(VALUE x, VALUE y);
|
|
1160
1201
|
VALUE rb_int_mul(VALUE x, VALUE y);
|
|
@@ -1164,8 +1205,21 @@ VALUE rb_int_round(VALUE num, int ndigits, enum ruby_num_rounding_mode mode);
|
|
|
1164
1205
|
VALUE rb_int2str(VALUE num, int base);
|
|
1165
1206
|
VALUE rb_dbl_hash(double d);
|
|
1166
1207
|
VALUE rb_fix_plus(VALUE x, VALUE y);
|
|
1208
|
+
VALUE rb_int_gt(VALUE x, VALUE y);
|
|
1209
|
+
VALUE rb_float_gt(VALUE x, VALUE y);
|
|
1167
1210
|
VALUE rb_int_ge(VALUE x, VALUE y);
|
|
1168
1211
|
enum ruby_num_rounding_mode rb_num_get_rounding_option(VALUE opts);
|
|
1212
|
+
double rb_int_fdiv_double(VALUE x, VALUE y);
|
|
1213
|
+
VALUE rb_int_pow(VALUE x, VALUE y);
|
|
1214
|
+
VALUE rb_float_pow(VALUE x, VALUE y);
|
|
1215
|
+
VALUE rb_int_cmp(VALUE x, VALUE y);
|
|
1216
|
+
VALUE rb_int_equal(VALUE x, VALUE y);
|
|
1217
|
+
VALUE rb_int_divmod(VALUE x, VALUE y);
|
|
1218
|
+
VALUE rb_int_and(VALUE x, VALUE y);
|
|
1219
|
+
VALUE rb_int_lshift(VALUE x, VALUE y);
|
|
1220
|
+
VALUE rb_int_div(VALUE x, VALUE y);
|
|
1221
|
+
VALUE rb_int_abs(VALUE num);
|
|
1222
|
+
VALUE rb_float_abs(VALUE flt);
|
|
1169
1223
|
|
|
1170
1224
|
#if USE_FLONUM
|
|
1171
1225
|
#define RUBY_BIT_ROTL(v, n) (((v) << (n)) | ((v) >> ((sizeof(v) * 8) - n)))
|
|
@@ -1186,7 +1240,7 @@ rb_float_flonum_value(VALUE v)
|
|
|
1186
1240
|
/* e: xx1... -> 011... */
|
|
1187
1241
|
/* xx0... -> 100... */
|
|
1188
1242
|
/* ^b63 */
|
|
1189
|
-
t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~0x03), 3);
|
|
1243
|
+
t.v = RUBY_BIT_ROTR((2 - b63) | (v & ~(VALUE)0x03), 3);
|
|
1190
1244
|
return t.d;
|
|
1191
1245
|
}
|
|
1192
1246
|
#endif
|
|
@@ -1294,8 +1348,9 @@ ID rb_id_attrget(ID id);
|
|
|
1294
1348
|
VALUE rb_proc_location(VALUE self);
|
|
1295
1349
|
st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
|
|
1296
1350
|
int rb_block_arity(void);
|
|
1351
|
+
int rb_block_min_max_arity(int *max);
|
|
1297
1352
|
VALUE rb_func_proc_new(rb_block_call_func_t func, VALUE val);
|
|
1298
|
-
VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val);
|
|
1353
|
+
VALUE rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_argc);
|
|
1299
1354
|
|
|
1300
1355
|
/* process.c */
|
|
1301
1356
|
#define RB_MAX_GROUPS (65536)
|
|
@@ -1354,15 +1409,19 @@ rb_pid_t rb_fork_ruby(int *status);
|
|
|
1354
1409
|
void rb_last_status_clear(void);
|
|
1355
1410
|
|
|
1356
1411
|
/* rational.c */
|
|
1412
|
+
VALUE rb_rational_uminus(VALUE self);
|
|
1357
1413
|
VALUE rb_rational_plus(VALUE self, VALUE other);
|
|
1358
1414
|
VALUE rb_lcm(VALUE x, VALUE y);
|
|
1359
1415
|
VALUE rb_rational_reciprocal(VALUE x);
|
|
1360
1416
|
VALUE rb_cstr_to_rat(const char *, int);
|
|
1417
|
+
VALUE rb_rational_abs(VALUE self);
|
|
1418
|
+
VALUE rb_rational_cmp(VALUE self, VALUE other);
|
|
1361
1419
|
|
|
1362
1420
|
/* re.c */
|
|
1363
1421
|
VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
|
|
1364
1422
|
VALUE rb_reg_check_preprocess(VALUE);
|
|
1365
1423
|
long rb_reg_search0(VALUE, VALUE, long, int, int);
|
|
1424
|
+
VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
|
|
1366
1425
|
void rb_backref_set_string(VALUE string, long pos, long len);
|
|
1367
1426
|
int rb_match_count(VALUE match);
|
|
1368
1427
|
int rb_match_nth_defined(int nth, VALUE match);
|
|
@@ -1381,7 +1440,6 @@ VALUE rb_strftime(const char *format, size_t format_len, rb_encoding *enc,
|
|
|
1381
1440
|
#endif
|
|
1382
1441
|
|
|
1383
1442
|
/* string.c */
|
|
1384
|
-
void Init_frozen_strings(void);
|
|
1385
1443
|
VALUE rb_fstring(VALUE);
|
|
1386
1444
|
VALUE rb_fstring_new(const char *ptr, long len);
|
|
1387
1445
|
#define rb_fstring_lit(str) rb_fstring_new((str), rb_strlen_lit(str))
|
|
@@ -1416,6 +1474,8 @@ VALUE rb_id_quote_unprintable(ID);
|
|
|
1416
1474
|
char *rb_str_fill_terminator(VALUE str, const int termlen);
|
|
1417
1475
|
void rb_str_change_terminator_length(VALUE str, const int oldtermlen, const int termlen);
|
|
1418
1476
|
VALUE rb_str_locktmp_ensure(VALUE str, VALUE (*func)(VALUE), VALUE arg);
|
|
1477
|
+
VALUE rb_str_tmp_frozen_acquire(VALUE str);
|
|
1478
|
+
void rb_str_tmp_frozen_release(VALUE str, VALUE tmp);
|
|
1419
1479
|
VALUE rb_str_chomp_string(VALUE str, VALUE chomp);
|
|
1420
1480
|
#ifdef RUBY_ENCODING_H
|
|
1421
1481
|
VALUE rb_external_str_with_enc(VALUE str, rb_encoding *eenc);
|
|
@@ -1531,7 +1591,7 @@ void rb_vm_pop_cfunc_frame(void);
|
|
|
1531
1591
|
int rb_vm_add_root_module(ID id, VALUE module);
|
|
1532
1592
|
void rb_vm_check_redefinition_by_prepend(VALUE klass);
|
|
1533
1593
|
VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
|
|
1534
|
-
VALUE
|
|
1594
|
+
VALUE ruby_vm_special_exception_copy(VALUE);
|
|
1535
1595
|
PUREFUNC(st_table *rb_vm_fstring_table(void));
|
|
1536
1596
|
|
|
1537
1597
|
|
|
@@ -1548,6 +1608,10 @@ VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, const VALUE *argv
|
|
|
1548
1608
|
VALUE rb_check_funcall_default(VALUE, ID, int, const VALUE *, VALUE);
|
|
1549
1609
|
VALUE rb_catch_protect(VALUE t, rb_block_call_func *func, VALUE data, int *stateptr);
|
|
1550
1610
|
VALUE rb_yield_1(VALUE val);
|
|
1611
|
+
VALUE rb_yield_lambda(VALUE values);
|
|
1612
|
+
VALUE rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
|
|
1613
|
+
rb_block_call_func_t bl_proc, int min_argc, int max_argc,
|
|
1614
|
+
VALUE data2);
|
|
1551
1615
|
|
|
1552
1616
|
/* vm_insnhelper.c */
|
|
1553
1617
|
VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
|
|
@@ -1640,6 +1704,7 @@ VALUE rb_execarg_extract_options(VALUE execarg_obj, VALUE opthash);
|
|
|
1640
1704
|
void rb_execarg_setenv(VALUE execarg_obj, VALUE env);
|
|
1641
1705
|
|
|
1642
1706
|
/* rational.c (export) */
|
|
1707
|
+
VALUE rb_gcd(VALUE x, VALUE y);
|
|
1643
1708
|
VALUE rb_gcd_normal(VALUE self, VALUE other);
|
|
1644
1709
|
#if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H)
|
|
1645
1710
|
VALUE rb_gcd_gmp(VALUE x, VALUE y);
|