debase-ruby_core_source 3.2.2 → 3.3.0
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 +10 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/addr2line.h +3 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ccan/list/list.h +4 -2
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/dln.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/eval_intern.h +4 -2
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/insns.inc +2 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/insns_info.inc +280 -198
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/array.h +8 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/bits.h +6 -6
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/class.h +53 -3
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/cmdlineopt.h +2 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/cont.h +3 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/encoding.h +3 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/error.h +3 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/gc.h +3 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/hash.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/imemo.h +0 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/object.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/parse.h +7 -32
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/random.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/string.h +0 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/symbol.h +3 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/thread.h +4 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/transcode.h +3 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/variable.h +5 -4
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/vm.h +9 -2
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/iseq.h +5 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/method.h +7 -7
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/node.h +22 -19
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/node_name.inc +4 -2
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/optunifs.inc +1 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/parse.h +16 -5
- data/lib/debase/ruby_core_source/ruby-3.3.0-p0/parser_node.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism_compile.h +29 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ractor_core.h +7 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/regint.h +8 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/regparse.h +2 -1
- data/lib/debase/ruby_core_source/ruby-3.3.0-p0/revision.h +5 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/rjit.h +6 -8
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/rjit_c.h +0 -1
- data/lib/debase/ruby_core_source/ruby-3.3.0-p0/rubyparser.h +1403 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/shape.h +32 -32
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/symbol.h +1 -2
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/thread_none.h +1 -0
- data/lib/debase/ruby_core_source/ruby-3.3.0-p0/thread_pthread.h +166 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/thread_win32.h +1 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/variable.h +11 -2
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/version.h +8 -4
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm.inc +225 -185
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_callinfo.h +12 -1
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_core.h +128 -16
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_insnhelper.h +4 -14
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vmtc.inc +2 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/yjit.h +10 -8
- data/lib/debase/ruby_core_source/version.rb +1 -1
- metadata +121 -120
- data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/parser_node.h +0 -133
- data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/revision.h +0 -5
- data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/rubyparser.h +0 -628
- data/lib/debase/ruby_core_source/ruby-3.3.0-preview2/thread_pthread.h +0 -126
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/builtin.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/constant.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/darray.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/debug_counter.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/encindex.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/hrtime.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/id.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/id_table.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/basic_operators.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/bignum.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/compar.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/compile.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/compilers.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/complex.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/dir.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/enc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/enum.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/enumerator.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/eval.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/file.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/fixnum.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/inits.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/io.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/load.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/loadpath.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/math.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/missing.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/numeric.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/proc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/process.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/ractor.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/range.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/rational.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/re.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/ruby_parser.h +2 -2
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/sanitizers.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/serial.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/signal.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/static_assert.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/struct.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/time.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/util.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal/warnings.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/internal.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/known_errors.inc +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/optinsn.inc +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/parser_bits.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/parser_st.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/parser_value.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/probes_helper.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/regenc.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ruby_assert.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/ruby_atomic.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/siphash.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/timev.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/transcode_data.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_call_iseq_optimized.inc +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_debug.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_exec.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_opts.h +0 -0
- /data/lib/debase/ruby_core_source/{ruby-3.3.0-preview2 → ruby-3.3.0-p0}/vm_sync.h +0 -0
|
@@ -136,9 +136,16 @@ RBIMPL_ATTR_ARTIFICIAL()
|
|
|
136
136
|
static inline VALUE
|
|
137
137
|
RARRAY_AREF(VALUE ary, long i)
|
|
138
138
|
{
|
|
139
|
+
VALUE val;
|
|
139
140
|
RBIMPL_ASSERT_TYPE(ary, RUBY_T_ARRAY);
|
|
140
141
|
|
|
141
|
-
|
|
142
|
+
RBIMPL_WARNING_PUSH();
|
|
143
|
+
#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ == 13
|
|
144
|
+
RBIMPL_WARNING_IGNORED(-Warray-bounds);
|
|
145
|
+
#endif
|
|
146
|
+
val = RARRAY_CONST_PTR(ary)[i];
|
|
147
|
+
RBIMPL_WARNING_POP();
|
|
148
|
+
return val;
|
|
142
149
|
}
|
|
143
150
|
|
|
144
151
|
#endif /* INTERNAL_ARRAY_H */
|
|
@@ -398,9 +398,9 @@ rb_popcount32(uint32_t x)
|
|
|
398
398
|
#else
|
|
399
399
|
x = (x & 0x55555555) + (x >> 1 & 0x55555555);
|
|
400
400
|
x = (x & 0x33333333) + (x >> 2 & 0x33333333);
|
|
401
|
-
x = (x &
|
|
402
|
-
x = (x &
|
|
403
|
-
x = (x &
|
|
401
|
+
x = (x & 0x07070707) + (x >> 4 & 0x07070707);
|
|
402
|
+
x = (x & 0x000f000f) + (x >> 8 & 0x000f000f);
|
|
403
|
+
x = (x & 0x0000001f) + (x >>16 & 0x0000001f);
|
|
404
404
|
return (unsigned int)x;
|
|
405
405
|
|
|
406
406
|
#endif
|
|
@@ -428,9 +428,9 @@ rb_popcount64(uint64_t x)
|
|
|
428
428
|
x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555);
|
|
429
429
|
x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333);
|
|
430
430
|
x = (x & 0x0707070707070707) + (x >> 4 & 0x0707070707070707);
|
|
431
|
-
x = (x &
|
|
432
|
-
x = (x &
|
|
433
|
-
x = (x &
|
|
431
|
+
x = (x & 0x000f000f000f000f) + (x >> 8 & 0x000f000f000f000f);
|
|
432
|
+
x = (x & 0x0000001f0000001f) + (x >>16 & 0x0000001f0000001f);
|
|
433
|
+
x = (x & 0x000000000000003f) + (x >>32 & 0x000000000000003f);
|
|
434
434
|
return (unsigned int)x;
|
|
435
435
|
|
|
436
436
|
#endif
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include "shape.h"
|
|
20
20
|
#include "ruby_assert.h"
|
|
21
21
|
#include "vm_core.h"
|
|
22
|
+
#include "vm_sync.h"
|
|
22
23
|
#include "method.h" /* for rb_cref_t */
|
|
23
24
|
|
|
24
25
|
#ifdef RCLASS_SUPER
|
|
@@ -85,7 +86,12 @@ struct RClass {
|
|
|
85
86
|
// Assert that classes can be embedded in size_pools[2] (which has 160B slot size)
|
|
86
87
|
STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass) + sizeof(rb_classext_t) <= 4 * RVALUE_SIZE);
|
|
87
88
|
|
|
88
|
-
|
|
89
|
+
struct RClass_and_rb_classext_t {
|
|
90
|
+
struct RClass rclass;
|
|
91
|
+
rb_classext_t classext;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
#define RCLASS_EXT(c) (&((struct RClass_and_rb_classext_t*)(c))->classext)
|
|
89
95
|
#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
|
|
90
96
|
#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
|
|
91
97
|
#define RCLASS_IVPTR(c) (RCLASS_EXT(c)->iv_ptr)
|
|
@@ -106,6 +112,51 @@ STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass) + sizeof(rb_classext_t
|
|
|
106
112
|
#define RCLASS_SUPERCLASSES_INCLUDE_SELF FL_USER2
|
|
107
113
|
#define RICLASS_ORIGIN_SHARED_MTBL FL_USER3
|
|
108
114
|
|
|
115
|
+
static inline st_table *
|
|
116
|
+
RCLASS_IV_HASH(VALUE obj)
|
|
117
|
+
{
|
|
118
|
+
RUBY_ASSERT(RB_TYPE_P(obj, RUBY_T_CLASS) || RB_TYPE_P(obj, RUBY_T_MODULE));
|
|
119
|
+
RUBY_ASSERT(rb_shape_obj_too_complex(obj));
|
|
120
|
+
return (st_table *)RCLASS_IVPTR(obj);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
static inline void
|
|
124
|
+
RCLASS_SET_IV_HASH(VALUE obj, const st_table *tbl)
|
|
125
|
+
{
|
|
126
|
+
RUBY_ASSERT(RB_TYPE_P(obj, RUBY_T_CLASS) || RB_TYPE_P(obj, RUBY_T_MODULE));
|
|
127
|
+
RUBY_ASSERT(rb_shape_obj_too_complex(obj));
|
|
128
|
+
RCLASS_IVPTR(obj) = (VALUE *)tbl;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static inline uint32_t
|
|
132
|
+
RCLASS_IV_COUNT(VALUE obj)
|
|
133
|
+
{
|
|
134
|
+
RUBY_ASSERT(RB_TYPE_P(obj, RUBY_T_CLASS) || RB_TYPE_P(obj, RUBY_T_MODULE));
|
|
135
|
+
if (rb_shape_obj_too_complex(obj)) {
|
|
136
|
+
uint32_t count;
|
|
137
|
+
|
|
138
|
+
// "Too complex" classes could have their IV hash mutated in
|
|
139
|
+
// parallel, so lets lock around getting the hash size.
|
|
140
|
+
RB_VM_LOCK_ENTER();
|
|
141
|
+
{
|
|
142
|
+
count = (uint32_t)rb_st_table_size(RCLASS_IV_HASH(obj));
|
|
143
|
+
}
|
|
144
|
+
RB_VM_LOCK_LEAVE();
|
|
145
|
+
|
|
146
|
+
return count;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return rb_shape_get_shape_by_id(RCLASS_SHAPE_ID(obj))->next_iv_index;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
static inline void
|
|
154
|
+
RCLASS_SET_M_TBL(VALUE klass, struct rb_id_table *table)
|
|
155
|
+
{
|
|
156
|
+
RUBY_ASSERT(!RB_OBJ_PROMOTED(klass));
|
|
157
|
+
RCLASS_M_TBL(klass) = table;
|
|
158
|
+
}
|
|
159
|
+
|
|
109
160
|
/* class.c */
|
|
110
161
|
void rb_class_subclass_add(VALUE super, VALUE klass);
|
|
111
162
|
void rb_class_remove_from_super_subclasses(VALUE);
|
|
@@ -119,7 +170,6 @@ VALUE rb_module_s_alloc(VALUE klass);
|
|
|
119
170
|
void rb_module_set_initialized(VALUE module);
|
|
120
171
|
void rb_module_check_initializable(VALUE module);
|
|
121
172
|
VALUE rb_make_metaclass(VALUE, VALUE);
|
|
122
|
-
VALUE rb_iclass_alloc(VALUE klass);
|
|
123
173
|
VALUE rb_include_class_new(VALUE, VALUE);
|
|
124
174
|
void rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE);
|
|
125
175
|
void rb_class_detach_subclasses(VALUE);
|
|
@@ -206,7 +256,7 @@ RCLASS_SET_SUPER(VALUE klass, VALUE super)
|
|
|
206
256
|
static inline void
|
|
207
257
|
RCLASS_SET_CLASSPATH(VALUE klass, VALUE classpath, bool permanent)
|
|
208
258
|
{
|
|
209
|
-
assert(BUILTIN_TYPE(klass) == T_CLASS || BUILTIN_TYPE(klass) == T_MODULE
|
|
259
|
+
assert(BUILTIN_TYPE(klass) == T_CLASS || BUILTIN_TYPE(klass) == T_MODULE);
|
|
210
260
|
assert(classpath == 0 || BUILTIN_TYPE(classpath) == T_STRING);
|
|
211
261
|
|
|
212
262
|
RB_OBJ_WRITE(klass, &(RCLASS_EXT(klass)->classpath), classpath);
|
|
@@ -22,6 +22,9 @@ void rb_jit_cont_init(void);
|
|
|
22
22
|
void rb_jit_cont_each_iseq(rb_iseq_callback callback, void *data);
|
|
23
23
|
void rb_jit_cont_finish(void);
|
|
24
24
|
|
|
25
|
+
/* vm.c */
|
|
26
|
+
void rb_free_shared_fiber_pool(void);
|
|
27
|
+
|
|
25
28
|
// Copy locals from the current execution to the specified fiber.
|
|
26
29
|
VALUE rb_fiber_inherit_storage(struct rb_execution_context_struct *ec, struct rb_fiber_struct *fiber);
|
|
27
30
|
|
|
@@ -227,6 +227,7 @@ __attribute__((__alloc_align__(1)))
|
|
|
227
227
|
RUBY_ATTR_MALLOC void *rb_aligned_malloc(size_t, size_t) RUBY_ATTR_ALLOC_SIZE((2));
|
|
228
228
|
size_t rb_size_mul_or_raise(size_t, size_t, VALUE); /* used in compile.c */
|
|
229
229
|
size_t rb_size_mul_add_or_raise(size_t, size_t, size_t, VALUE); /* used in iseq.h */
|
|
230
|
+
size_t rb_malloc_grow_capa(size_t current_capacity, size_t type_size);
|
|
230
231
|
RUBY_ATTR_MALLOC void *rb_xmalloc_mul_add(size_t, size_t, size_t);
|
|
231
232
|
RUBY_ATTR_MALLOC void *rb_xcalloc_mul_add(size_t, size_t, size_t);
|
|
232
233
|
void *rb_xrealloc_mul_add(const void *, size_t, size_t, size_t);
|
|
@@ -249,6 +250,8 @@ void rb_gc_mark_and_move(VALUE *ptr);
|
|
|
249
250
|
void rb_gc_mark_weak(VALUE *ptr);
|
|
250
251
|
void rb_gc_remove_weak(VALUE parent_obj, VALUE *ptr);
|
|
251
252
|
|
|
253
|
+
void rb_gc_ref_update_table_values_only(st_table *tbl);
|
|
254
|
+
|
|
252
255
|
#define rb_gc_mark_and_move_ptr(ptr) do { \
|
|
253
256
|
VALUE _obj = (VALUE)*(ptr); \
|
|
254
257
|
rb_gc_mark_and_move(&_obj); \
|
|
@@ -87,6 +87,7 @@ int rb_hash_stlike_delete(VALUE hash, st_data_t *pkey, st_data_t *pval);
|
|
|
87
87
|
int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_func *func, st_update_callback_func *replace, st_data_t arg);
|
|
88
88
|
int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg);
|
|
89
89
|
VALUE rb_ident_hash_new_with_size(st_index_t size);
|
|
90
|
+
void rb_hash_free(VALUE hash);
|
|
90
91
|
|
|
91
92
|
static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h);
|
|
92
93
|
static inline VALUE RHASH_IFNONE(VALUE h);
|
|
@@ -129,7 +129,6 @@ struct MEMO {
|
|
|
129
129
|
typedef struct rb_imemo_tmpbuf_struct rb_imemo_tmpbuf_t;
|
|
130
130
|
rb_imemo_tmpbuf_t *rb_imemo_tmpbuf_parser_heap(void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt);
|
|
131
131
|
struct vm_ifunc *rb_vm_ifunc_new(rb_block_call_func_t func, const void *data, int min_argc, int max_argc);
|
|
132
|
-
void rb_strterm_mark(VALUE obj);
|
|
133
132
|
static inline enum imemo_type imemo_type(VALUE imemo);
|
|
134
133
|
static inline int imemo_type_p(VALUE imemo, enum imemo_type imemo_type);
|
|
135
134
|
static inline bool imemo_throw_data_p(VALUE imemo);
|
|
@@ -22,47 +22,22 @@ struct rb_iseq_struct; /* in vm_core.h */
|
|
|
22
22
|
|
|
23
23
|
/* structs for managing terminator of string literal and heredocment */
|
|
24
24
|
typedef struct rb_strterm_literal_struct {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
union {
|
|
30
|
-
VALUE dummy;
|
|
31
|
-
long func; /* STR_FUNC_* (e.g., STR_FUNC_ESCAPE and STR_FUNC_EXPAND) */
|
|
32
|
-
} u1;
|
|
33
|
-
union {
|
|
34
|
-
VALUE dummy;
|
|
35
|
-
long paren; /* '(' of `%q(...)` */
|
|
36
|
-
} u2;
|
|
37
|
-
union {
|
|
38
|
-
VALUE dummy;
|
|
39
|
-
long term; /* ')' of `%q(...)` */
|
|
40
|
-
} u3;
|
|
25
|
+
long nest;
|
|
26
|
+
int func; /* STR_FUNC_* (e.g., STR_FUNC_ESCAPE and STR_FUNC_EXPAND) */
|
|
27
|
+
int paren; /* '(' of `%q(...)` */
|
|
28
|
+
int term; /* ')' of `%q(...)` */
|
|
41
29
|
} rb_strterm_literal_t;
|
|
42
30
|
|
|
43
|
-
#define HERETERM_LENGTH_BITS ((SIZEOF_VALUE - 1) * CHAR_BIT - 1)
|
|
44
|
-
|
|
45
31
|
typedef struct rb_strterm_heredoc_struct {
|
|
46
32
|
VALUE lastline; /* the string of line that contains `<<"END"` */
|
|
47
33
|
long offset; /* the column of END in `<<"END"` */
|
|
48
34
|
int sourceline; /* lineno of the line that contains `<<"END"` */
|
|
49
|
-
unsigned length /* the length of END in `<<"END"` */
|
|
50
|
-
#if HERETERM_LENGTH_BITS < SIZEOF_INT * CHAR_BIT
|
|
51
|
-
: HERETERM_LENGTH_BITS
|
|
52
|
-
# define HERETERM_LENGTH_MAX ((1U << HERETERM_LENGTH_BITS) - 1)
|
|
53
|
-
#else
|
|
54
|
-
# define HERETERM_LENGTH_MAX UINT_MAX
|
|
55
|
-
#endif
|
|
56
|
-
;
|
|
57
|
-
#if HERETERM_LENGTH_BITS < SIZEOF_INT * CHAR_BIT
|
|
58
|
-
unsigned quote: 1;
|
|
59
|
-
unsigned func: 8;
|
|
60
|
-
#else
|
|
35
|
+
unsigned length; /* the length of END in `<<"END"` */
|
|
61
36
|
uint8_t quote;
|
|
62
37
|
uint8_t func;
|
|
63
|
-
#endif
|
|
64
38
|
} rb_strterm_heredoc_t;
|
|
65
|
-
|
|
39
|
+
|
|
40
|
+
#define HERETERM_LENGTH_MAX UINT_MAX
|
|
66
41
|
|
|
67
42
|
typedef struct rb_strterm_struct {
|
|
68
43
|
VALUE flags;
|
|
@@ -64,7 +64,6 @@ VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE);
|
|
|
64
64
|
void rb_str_make_embedded(VALUE);
|
|
65
65
|
size_t rb_str_size_as_embedded(VALUE);
|
|
66
66
|
bool rb_str_reembeddable_p(VALUE);
|
|
67
|
-
void rb_str_update_shared_ary(VALUE str, VALUE old_root, VALUE new_root);
|
|
68
67
|
RUBY_SYMBOL_EXPORT_END
|
|
69
68
|
|
|
70
69
|
VALUE rb_fstring_new(const char *ptr, long len);
|
|
@@ -32,6 +32,9 @@ ID rb_make_temporary_id(size_t n);
|
|
|
32
32
|
void rb_gc_free_dsymbol(VALUE);
|
|
33
33
|
int rb_static_id_valid_p(ID id);
|
|
34
34
|
|
|
35
|
+
/* vm.c */
|
|
36
|
+
void rb_free_static_symid_str(void);
|
|
37
|
+
|
|
35
38
|
#if __has_builtin(__builtin_constant_p)
|
|
36
39
|
#define rb_sym_intern_ascii_cstr(ptr) \
|
|
37
40
|
(__builtin_constant_p(ptr) ? \
|
|
@@ -50,6 +50,7 @@ void rb_mutex_allow_trap(VALUE self, int val);
|
|
|
50
50
|
VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data);
|
|
51
51
|
VALUE rb_mutex_owned_p(VALUE self);
|
|
52
52
|
VALUE rb_exec_recursive_outer_mid(VALUE (*f)(VALUE g, VALUE h, int r), VALUE g, VALUE h, ID mid);
|
|
53
|
+
void ruby_mn_threads_params(void);
|
|
53
54
|
|
|
54
55
|
int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout);
|
|
55
56
|
|
|
@@ -62,11 +63,14 @@ int rb_notify_fd_close(int fd, struct rb_io_close_wait_list *busy);
|
|
|
62
63
|
void rb_notify_fd_close_wait(struct rb_io_close_wait_list *busy);
|
|
63
64
|
|
|
64
65
|
RUBY_SYMBOL_EXPORT_BEGIN
|
|
66
|
+
|
|
65
67
|
/* Temporary. This API will be removed (renamed). */
|
|
66
68
|
VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd);
|
|
69
|
+
VALUE rb_thread_io_blocking_call(rb_blocking_function_t *func, void *data1, int fd, int events);
|
|
67
70
|
|
|
68
71
|
/* thread.c (export) */
|
|
69
72
|
int ruby_thread_has_gvl_p(void); /* for ext/fiddle/closure.c */
|
|
73
|
+
|
|
70
74
|
RUBY_SYMBOL_EXPORT_END
|
|
71
75
|
|
|
72
76
|
int rb_threadptr_execute_interrupts(struct rb_thread_struct *th, int blocking_timing);
|
|
@@ -47,11 +47,14 @@ VALUE rb_mod_set_temporary_name(VALUE, VALUE);
|
|
|
47
47
|
|
|
48
48
|
struct gen_ivtbl;
|
|
49
49
|
int rb_gen_ivtbl_get(VALUE obj, ID id, struct gen_ivtbl **ivtbl);
|
|
50
|
-
|
|
50
|
+
void rb_obj_copy_ivs_to_hash_table(VALUE obj, st_table *table);
|
|
51
|
+
void rb_obj_convert_to_too_complex(VALUE obj, st_table *table);
|
|
52
|
+
void rb_evict_ivars_to_hash(VALUE obj);
|
|
51
53
|
|
|
52
54
|
RUBY_SYMBOL_EXPORT_BEGIN
|
|
53
55
|
/* variable.c (export) */
|
|
54
|
-
void
|
|
56
|
+
void rb_mark_generic_ivar(VALUE obj);
|
|
57
|
+
void rb_ref_update_generic_ivar(VALUE);
|
|
55
58
|
void rb_mv_generic_ivar(VALUE src, VALUE dst);
|
|
56
59
|
VALUE rb_const_missing(VALUE klass, VALUE name);
|
|
57
60
|
int rb_class_ivar_set(VALUE klass, ID vid, VALUE value);
|
|
@@ -63,9 +66,7 @@ VALUE rb_gvar_get(ID);
|
|
|
63
66
|
VALUE rb_gvar_set(ID, VALUE);
|
|
64
67
|
VALUE rb_gvar_defined(ID);
|
|
65
68
|
void rb_const_warn_if_deprecated(const rb_const_entry_t *, VALUE, ID);
|
|
66
|
-
rb_shape_t * rb_grow_iv_list(VALUE obj);
|
|
67
69
|
void rb_ensure_iv_list_size(VALUE obj, uint32_t len, uint32_t newsize);
|
|
68
|
-
struct gen_ivtbl *rb_ensure_generic_iv_list_size(VALUE obj, rb_shape_t *shape, uint32_t newsize);
|
|
69
70
|
attr_index_t rb_obj_ivar_set(VALUE obj, ID id, VALUE val);
|
|
70
71
|
|
|
71
72
|
#endif /* INTERNAL_VARIABLE_H */
|
|
@@ -58,6 +58,8 @@ VALUE rb_yield_refine_block(VALUE refinement, VALUE refinements);
|
|
|
58
58
|
VALUE ruby_vm_special_exception_copy(VALUE);
|
|
59
59
|
PUREFUNC(st_table *rb_vm_fstring_table(void));
|
|
60
60
|
|
|
61
|
+
void rb_lastline_set_up(VALUE val, unsigned int up);
|
|
62
|
+
|
|
61
63
|
/* vm_eval.c */
|
|
62
64
|
VALUE rb_current_realfilepath(void);
|
|
63
65
|
VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE);
|
|
@@ -81,6 +83,11 @@ void rb_check_stack_overflow(void);
|
|
|
81
83
|
extern uint64_t rb_vm_insns_count;
|
|
82
84
|
#endif
|
|
83
85
|
|
|
86
|
+
extern bool rb_free_at_exit;
|
|
87
|
+
|
|
88
|
+
/* miniinit.c and builtin.c */
|
|
89
|
+
void rb_free_loaded_builtin_table(void);
|
|
90
|
+
|
|
84
91
|
/* vm_insnhelper.c */
|
|
85
92
|
VALUE rb_equal_opt(VALUE obj1, VALUE obj2);
|
|
86
93
|
VALUE rb_eql_opt(VALUE obj1, VALUE obj2);
|
|
@@ -95,7 +102,7 @@ int rb_ec_obj_respond_to(struct rb_execution_context_struct *ec, VALUE obj, ID i
|
|
|
95
102
|
void rb_clear_constant_cache(void);
|
|
96
103
|
|
|
97
104
|
/* vm_dump.c */
|
|
98
|
-
void rb_print_backtrace(
|
|
105
|
+
void rb_print_backtrace(FILE *);
|
|
99
106
|
|
|
100
107
|
/* vm_backtrace.c */
|
|
101
108
|
VALUE rb_vm_thread_backtrace(int argc, const VALUE *argv, VALUE thval);
|
|
@@ -103,7 +110,7 @@ VALUE rb_vm_thread_backtrace_locations(int argc, const VALUE *argv, VALUE thval)
|
|
|
103
110
|
VALUE rb_vm_backtrace(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
|
|
104
111
|
VALUE rb_vm_backtrace_locations(int argc, const VALUE * argv, struct rb_execution_context_struct * ec);
|
|
105
112
|
VALUE rb_make_backtrace(void);
|
|
106
|
-
void rb_backtrace_print_as_bugreport(
|
|
113
|
+
void rb_backtrace_print_as_bugreport(FILE*);
|
|
107
114
|
int rb_backtrace_p(VALUE obj);
|
|
108
115
|
VALUE rb_backtrace_to_str_ary(VALUE obj);
|
|
109
116
|
VALUE rb_backtrace_to_location_ary(VALUE obj);
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "internal/gc.h"
|
|
14
14
|
#include "shape.h"
|
|
15
15
|
#include "vm_core.h"
|
|
16
|
+
#include "prism_compile.h"
|
|
16
17
|
|
|
17
18
|
RUBY_EXTERN const int ruby_api_version[];
|
|
18
19
|
#define ISEQ_MAJOR_VERSION ((unsigned int)ruby_api_version[0])
|
|
@@ -173,6 +174,7 @@ void rb_iseq_init_trace(rb_iseq_t *iseq);
|
|
|
173
174
|
int rb_iseq_add_local_tracepoint_recursively(const rb_iseq_t *iseq, rb_event_flag_t turnon_events, VALUE tpval, unsigned int target_line, bool target_bmethod);
|
|
174
175
|
int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval);
|
|
175
176
|
const rb_iseq_t *rb_iseq_load_iseq(VALUE fname);
|
|
177
|
+
rb_iseq_t * rb_iseq_new_main_prism(pm_string_t *input, pm_options_t *options, VALUE path);
|
|
176
178
|
|
|
177
179
|
#if VM_INSN_INFO_TABLE_IMPL == 2
|
|
178
180
|
unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body);
|
|
@@ -189,7 +191,7 @@ VALUE *rb_iseq_original_iseq(const rb_iseq_t *iseq);
|
|
|
189
191
|
void rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc,
|
|
190
192
|
VALUE locals, VALUE args,
|
|
191
193
|
VALUE exception, VALUE body);
|
|
192
|
-
void
|
|
194
|
+
void rb_iseq_mark_and_pin_insn_storage(struct iseq_compile_data_storage *arena);
|
|
193
195
|
|
|
194
196
|
VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
|
|
195
197
|
VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
|
|
@@ -329,6 +331,8 @@ VALUE rb_iseq_local_variables(const rb_iseq_t *iseq);
|
|
|
329
331
|
|
|
330
332
|
attr_index_t rb_estimate_iv_count(VALUE klass, const rb_iseq_t * initialize_iseq);
|
|
331
333
|
|
|
334
|
+
void rb_free_encoded_insn_data(void);
|
|
335
|
+
|
|
332
336
|
RUBY_SYMBOL_EXPORT_END
|
|
333
337
|
|
|
334
338
|
#endif /* RUBY_ISEQ_H */
|
|
@@ -101,8 +101,9 @@ static inline void
|
|
|
101
101
|
METHOD_ENTRY_FLAGS_COPY(rb_method_entry_t *dst, const rb_method_entry_t *src)
|
|
102
102
|
{
|
|
103
103
|
dst->flags =
|
|
104
|
-
(dst->flags & ~(IMEMO_FL_USER0|IMEMO_FL_USER1|IMEMO_FL_USER2
|
|
105
|
-
|
|
104
|
+
(dst->flags & ~(IMEMO_FL_USER0|IMEMO_FL_USER1|IMEMO_FL_USER2
|
|
105
|
+
|IMEMO_FL_USER3)) |
|
|
106
|
+
(src->flags & (IMEMO_FL_USER0|IMEMO_FL_USER1|IMEMO_FL_USER2|IMEMO_FL_USER3));
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
typedef enum {
|
|
@@ -152,7 +153,6 @@ typedef struct rb_method_alias_struct {
|
|
|
152
153
|
|
|
153
154
|
typedef struct rb_method_refined_struct {
|
|
154
155
|
struct rb_method_entry_struct * orig_me;
|
|
155
|
-
VALUE owner;
|
|
156
156
|
} rb_method_refined_t;
|
|
157
157
|
|
|
158
158
|
typedef struct rb_method_bmethod_struct {
|
|
@@ -178,9 +178,9 @@ typedef struct rb_method_optimized {
|
|
|
178
178
|
struct rb_method_definition_struct {
|
|
179
179
|
BITFIELD(rb_method_type_t, type, VM_METHOD_TYPE_MINIMUM_BITS);
|
|
180
180
|
unsigned int iseq_overload: 1;
|
|
181
|
-
int alias_count : 27;
|
|
182
|
-
int complemented_count : 28;
|
|
183
181
|
unsigned int no_redef_warning: 1;
|
|
182
|
+
unsigned int aliased : 1;
|
|
183
|
+
int reference_count : 28;
|
|
184
184
|
|
|
185
185
|
union {
|
|
186
186
|
rb_method_iseq_t iseq;
|
|
@@ -199,7 +199,7 @@ struct rb_method_definition_struct {
|
|
|
199
199
|
struct rb_id_table;
|
|
200
200
|
|
|
201
201
|
typedef struct rb_method_definition_struct rb_method_definition_t;
|
|
202
|
-
STATIC_ASSERT(sizeof_method_def, offsetof(rb_method_definition_t, body)
|
|
202
|
+
STATIC_ASSERT(sizeof_method_def, offsetof(rb_method_definition_t, body) <= 8);
|
|
203
203
|
|
|
204
204
|
#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
|
|
205
205
|
#define UNDEFINED_REFINED_METHOD_P(def) \
|
|
@@ -213,7 +213,7 @@ void rb_add_method_optimized(VALUE klass, ID mid, enum method_optimized_type, un
|
|
|
213
213
|
void rb_add_refined_method_entry(VALUE refined_class, ID mid);
|
|
214
214
|
|
|
215
215
|
rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_visibility_t noex);
|
|
216
|
-
rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi,
|
|
216
|
+
rb_method_entry_t *rb_method_entry_create(ID called_id, VALUE klass, rb_method_visibility_t visi, rb_method_definition_t *def);
|
|
217
217
|
|
|
218
218
|
const rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
|
|
219
219
|
|
|
@@ -19,12 +19,14 @@ typedef void (*bug_report_func)(const char *fmt, ...);
|
|
|
19
19
|
|
|
20
20
|
typedef struct node_buffer_elem_struct {
|
|
21
21
|
struct node_buffer_elem_struct *next;
|
|
22
|
-
long len;
|
|
23
|
-
|
|
22
|
+
long len; /* Length of nodes */
|
|
23
|
+
size_t allocated; /* Total memory size of allocated buf */
|
|
24
|
+
size_t used; /* Current usage of buf */
|
|
25
|
+
NODE **nodes; /* Array of node pointers */
|
|
26
|
+
NODE *buf[FLEX_ARY_LEN];
|
|
24
27
|
} node_buffer_elem_t;
|
|
25
28
|
|
|
26
29
|
typedef struct {
|
|
27
|
-
long idx, len;
|
|
28
30
|
node_buffer_elem_t *head;
|
|
29
31
|
node_buffer_elem_t *last;
|
|
30
32
|
} node_buffer_list_t;
|
|
@@ -50,7 +52,7 @@ RUBY_SYMBOL_EXPORT_BEGIN
|
|
|
50
52
|
#ifdef UNIVERSAL_PARSER
|
|
51
53
|
rb_ast_t *rb_ast_new(rb_parser_config_t *config);
|
|
52
54
|
#else
|
|
53
|
-
rb_ast_t *rb_ast_new();
|
|
55
|
+
rb_ast_t *rb_ast_new(void);
|
|
54
56
|
#endif
|
|
55
57
|
size_t rb_ast_memsize(const rb_ast_t*);
|
|
56
58
|
void rb_ast_dispose(rb_ast_t*);
|
|
@@ -59,14 +61,15 @@ VALUE rb_ast_tokens(rb_ast_t *ast);
|
|
|
59
61
|
void rb_ast_node_type_change(NODE *n, enum node_type type);
|
|
60
62
|
#endif
|
|
61
63
|
const char *ruby_node_name(int node);
|
|
62
|
-
void rb_node_init(NODE *n, enum node_type type
|
|
64
|
+
void rb_node_init(NODE *n, enum node_type type);
|
|
63
65
|
|
|
64
66
|
void rb_ast_mark(rb_ast_t*);
|
|
65
67
|
void rb_ast_update_references(rb_ast_t*);
|
|
66
68
|
void rb_ast_free(rb_ast_t*);
|
|
67
69
|
void rb_ast_add_mark_object(rb_ast_t*, VALUE);
|
|
70
|
+
void rb_ast_delete_mark_object(rb_ast_t*, VALUE);
|
|
68
71
|
void rb_ast_set_tokens(rb_ast_t*, VALUE);
|
|
69
|
-
NODE *rb_ast_newnode(rb_ast_t*, enum node_type type);
|
|
72
|
+
NODE *rb_ast_newnode(rb_ast_t*, enum node_type type, size_t size, size_t alignment);
|
|
70
73
|
void rb_ast_delete_node(rb_ast_t*, NODE *n);
|
|
71
74
|
rb_ast_id_table_t *rb_ast_new_local_table(rb_ast_t*, int);
|
|
72
75
|
rb_ast_id_table_t *rb_ast_resize_latest_local_table(rb_ast_t*, int);
|
|
@@ -94,27 +97,27 @@ RUBY_SYMBOL_EXPORT_END
|
|
|
94
97
|
|
|
95
98
|
|
|
96
99
|
#define NODE_SPECIAL_REQUIRED_KEYWORD ((NODE *)-1)
|
|
97
|
-
#define NODE_REQUIRED_KEYWORD_P(node) ((node)
|
|
100
|
+
#define NODE_REQUIRED_KEYWORD_P(node) ((node) == NODE_SPECIAL_REQUIRED_KEYWORD)
|
|
98
101
|
#define NODE_SPECIAL_NO_NAME_REST ((NODE *)-1)
|
|
99
102
|
#define NODE_NAMED_REST_P(node) ((node) != NODE_SPECIAL_NO_NAME_REST)
|
|
100
103
|
#define NODE_SPECIAL_EXCESSIVE_COMMA ((ID)1)
|
|
101
104
|
#define NODE_SPECIAL_NO_REST_KEYWORD ((NODE *)-1)
|
|
102
105
|
|
|
103
|
-
#define nd_first_column(n) ((int)((n)->nd_loc.beg_pos.column))
|
|
104
|
-
#define nd_set_first_column(n, v) ((n)->nd_loc.beg_pos.column = (v))
|
|
105
|
-
#define nd_first_lineno(n) ((int)((n)->nd_loc.beg_pos.lineno))
|
|
106
|
-
#define nd_set_first_lineno(n, v) ((n)->nd_loc.beg_pos.lineno = (v))
|
|
107
|
-
#define nd_first_loc(n) ((n)->nd_loc.beg_pos)
|
|
106
|
+
#define nd_first_column(n) ((int)(RNODE(n)->nd_loc.beg_pos.column))
|
|
107
|
+
#define nd_set_first_column(n, v) (RNODE(n)->nd_loc.beg_pos.column = (v))
|
|
108
|
+
#define nd_first_lineno(n) ((int)(RNODE(n)->nd_loc.beg_pos.lineno))
|
|
109
|
+
#define nd_set_first_lineno(n, v) (RNODE(n)->nd_loc.beg_pos.lineno = (v))
|
|
110
|
+
#define nd_first_loc(n) (RNODE(n)->nd_loc.beg_pos)
|
|
108
111
|
#define nd_set_first_loc(n, v) (nd_first_loc(n) = (v))
|
|
109
112
|
|
|
110
|
-
#define nd_last_column(n) ((int)((n)->nd_loc.end_pos.column))
|
|
111
|
-
#define nd_set_last_column(n, v) ((n)->nd_loc.end_pos.column = (v))
|
|
112
|
-
#define nd_last_lineno(n) ((int)((n)->nd_loc.end_pos.lineno))
|
|
113
|
-
#define nd_set_last_lineno(n, v) ((n)->nd_loc.end_pos.lineno = (v))
|
|
114
|
-
#define nd_last_loc(n) ((n)->nd_loc.end_pos)
|
|
113
|
+
#define nd_last_column(n) ((int)(RNODE(n)->nd_loc.end_pos.column))
|
|
114
|
+
#define nd_set_last_column(n, v) (RNODE(n)->nd_loc.end_pos.column = (v))
|
|
115
|
+
#define nd_last_lineno(n) ((int)(RNODE(n)->nd_loc.end_pos.lineno))
|
|
116
|
+
#define nd_set_last_lineno(n, v) (RNODE(n)->nd_loc.end_pos.lineno = (v))
|
|
117
|
+
#define nd_last_loc(n) (RNODE(n)->nd_loc.end_pos)
|
|
115
118
|
#define nd_set_last_loc(n, v) (nd_last_loc(n) = (v))
|
|
116
|
-
#define nd_node_id(n) ((n)->node_id)
|
|
117
|
-
#define nd_set_node_id(n,id) ((n)->node_id = (id))
|
|
119
|
+
#define nd_node_id(n) (RNODE(n)->node_id)
|
|
120
|
+
#define nd_set_node_id(n,id) (RNODE(n)->node_id = (id))
|
|
118
121
|
|
|
119
122
|
static inline bool
|
|
120
123
|
nd_type_p(const NODE *n, enum node_type t)
|
|
@@ -88,8 +88,6 @@
|
|
|
88
88
|
return "NODE_LIST";
|
|
89
89
|
case NODE_ZLIST:
|
|
90
90
|
return "NODE_ZLIST";
|
|
91
|
-
case NODE_VALUES:
|
|
92
|
-
return "NODE_VALUES";
|
|
93
91
|
case NODE_HASH:
|
|
94
92
|
return "NODE_HASH";
|
|
95
93
|
case NODE_RETURN:
|
|
@@ -208,3 +206,7 @@
|
|
|
208
206
|
return "NODE_FNDPTN";
|
|
209
207
|
case NODE_ERROR:
|
|
210
208
|
return "NODE_ERROR";
|
|
209
|
+
case NODE_RIPPER:
|
|
210
|
+
return "NODE_RIPPER";
|
|
211
|
+
case NODE_RIPPER_VALUES:
|
|
212
|
+
return "NODE_RIPPER_VALUES";
|
|
@@ -38,6 +38,6 @@
|
|
|
38
38
|
|
|
39
39
|
/* Let .bss section automatically initialize this variable */
|
|
40
40
|
/* cf. Section 6.7.8 of ISO/IEC 9899:1999 */
|
|
41
|
-
static const int *const *const unified_insns_data[
|
|
41
|
+
static const int *const *const unified_insns_data[204];
|
|
42
42
|
|
|
43
43
|
ASSERT_VM_INSTRUCTION_SIZE(unified_insns_data);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* A Bison parser, made by Lrama 0.5.
|
|
1
|
+
/* A Bison parser, made by Lrama 0.5.12. */
|
|
2
2
|
|
|
3
3
|
/* Bison interface for Yacc-like parsers in C
|
|
4
4
|
|
|
@@ -34,17 +34,17 @@
|
|
|
34
34
|
/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
|
|
35
35
|
especially those whose name start with YY_ or yy_. They are
|
|
36
36
|
private implementation details that can be changed or removed. */
|
|
37
|
-
|
|
38
37
|
#ifndef YY_YY_PARSE_H_INCLUDED
|
|
39
38
|
# define YY_YY_PARSE_H_INCLUDED
|
|
40
39
|
/* Debug traces. */
|
|
41
40
|
#ifndef YYDEBUG
|
|
42
41
|
# define YYDEBUG 0
|
|
43
42
|
#endif
|
|
44
|
-
#if YYDEBUG
|
|
43
|
+
#if YYDEBUG && !defined(yydebug)
|
|
45
44
|
extern int yydebug;
|
|
46
45
|
#endif
|
|
47
46
|
|
|
47
|
+
|
|
48
48
|
/* Token kinds. */
|
|
49
49
|
#ifndef YYTOKENTYPE
|
|
50
50
|
# define YYTOKENTYPE
|
|
@@ -190,10 +190,19 @@ extern int yydebug;
|
|
|
190
190
|
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
|
191
191
|
union YYSTYPE
|
|
192
192
|
{
|
|
193
|
-
#line
|
|
193
|
+
#line 1963 "parse.y"
|
|
194
194
|
|
|
195
195
|
VALUE val;
|
|
196
196
|
NODE *node;
|
|
197
|
+
rb_node_fcall_t *node_fcall;
|
|
198
|
+
rb_node_args_t *node_args;
|
|
199
|
+
rb_node_args_aux_t *node_args_aux;
|
|
200
|
+
rb_node_opt_arg_t *node_opt_arg;
|
|
201
|
+
rb_node_kw_arg_t *node_kw_arg;
|
|
202
|
+
rb_node_block_pass_t *node_block_pass;
|
|
203
|
+
rb_node_masgn_t *node_masgn;
|
|
204
|
+
rb_node_def_temp_t *node_def_temp;
|
|
205
|
+
rb_node_exits_t *node_exits;
|
|
197
206
|
ID id;
|
|
198
207
|
int num;
|
|
199
208
|
st_table *tbl;
|
|
@@ -201,7 +210,7 @@ union YYSTYPE
|
|
|
201
210
|
struct rb_strterm_struct *strterm;
|
|
202
211
|
struct lex_context ctxt;
|
|
203
212
|
|
|
204
|
-
#line
|
|
213
|
+
#line 214 "parse.h"
|
|
205
214
|
|
|
206
215
|
};
|
|
207
216
|
typedef union YYSTYPE YYSTYPE;
|
|
@@ -229,4 +238,6 @@ struct YYLTYPE
|
|
|
229
238
|
int yyparse (struct parser_params *p);
|
|
230
239
|
|
|
231
240
|
|
|
241
|
+
|
|
232
242
|
#endif /* !YY_YY_PARSE_H_INCLUDED */
|
|
243
|
+
|