debase-ruby_core_source 3.3.1 → 3.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.idea/vcs.xml +28 -0
- data/CHANGELOG.md +8 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/addr2line.h +22 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/builtin.h +117 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ccan/list/list.h +791 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ccan/str/str.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/constant.h +53 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/darray.h +246 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/debug_counter.h +423 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/dln.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/encindex.h +70 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/eval_intern.h +343 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/hrtime.h +227 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/id.h +343 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/id_table.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/insns.inc +251 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/insns_info.inc +9215 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/array.h +151 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/basic_operators.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/bignum.h +244 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/bits.h +568 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/class.h +277 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/cmdlineopt.h +65 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/compar.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/compile.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/compilers.h +107 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/complex.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/cont.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/dir.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/enc.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/encoding.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/enum.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/enumerator.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/error.h +216 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/eval.h +33 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/file.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/fixnum.h +184 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/gc.h +364 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/hash.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/imemo.h +240 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/inits.h +50 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/io.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/load.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/loadpath.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/math.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/missing.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/numeric.h +273 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/object.h +62 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/parse.h +108 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/proc.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/process.h +124 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/ractor.h +6 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/random.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/range.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/rational.h +71 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/re.h +28 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/ruby_parser.h +69 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/sanitizers.h +186 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/serial.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/signal.h +25 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/static_assert.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/string.h +160 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/struct.h +127 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/symbol.h +45 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/thread.h +78 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/time.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/transcode.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/util.h +27 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/variable.h +72 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/vm.h +136 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal/warnings.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/internal.h +112 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/iseq.h +338 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/known_errors.inc +791 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/method.h +254 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/node.h +128 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/node_name.inc +212 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/parse.h +243 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/parser_bits.h +564 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/parser_node.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/parser_st.h +162 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/parser_value.h +106 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/ast.h +4612 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/defines.h +94 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/diagnostic.h +297 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/encoding.h +248 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/extension.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/node.h +57 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/options.h +204 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/pack.h +152 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/parser.h +716 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/prettyprint.h +26 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/prism.h +272 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/regexp.h +33 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_buffer.h +146 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_char.h +205 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_constant_pool.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_list.h +97 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_memchr.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_newline_list.h +104 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_state_stack.h +42 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_string.h +150 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_string_list.h +44 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_strncasecmp.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/util/pm_strpbrk.h +43 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism/version.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/prism_compile.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/probes_helper.h +42 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ractor_core.h +393 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/regenc.h +254 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/regint.h +1006 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/regparse.h +371 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/revision.h +5 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/rjit.h +101 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/rjit_c.h +164 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ruby_assert.h +14 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/ruby_atomic.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/rubyparser.h +1405 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/shape.h +233 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/symbol.h +118 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/thread_none.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/thread_pthread.h +166 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/thread_win32.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/timev.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/transcode_data.h +138 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/variable.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/version.h +69 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm.inc +5436 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_call_iseq_optimized.inc +244 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_callinfo.h +614 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_core.h +2202 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_debug.h +122 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_exec.h +199 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_insnhelper.h +261 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_opts.h +67 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vm_sync.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/vmtc.inc +245 -0
- data/lib/debase/ruby_core_source/ruby-3.3.5-p100/yjit.h +72 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/addr2line.h +22 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/builtin.h +119 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ccan/list/list.h +791 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ccan/str/str.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/constant.h +53 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/darray.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/debug_counter.h +423 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/dln.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/encindex.h +70 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/eval_intern.h +324 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/hrtime.h +237 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/id.h +343 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/id_table.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/insns.inc +259 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/insns_info.inc +9530 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/array.h +151 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/basic_operators.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/bignum.h +244 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/bits.h +568 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/class.h +283 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/cmdlineopt.h +65 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/compar.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/compile.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/compilers.h +107 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/complex.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/cont.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/dir.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/enc.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/encoding.h +36 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/enum.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/enumerator.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/error.h +216 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/eval.h +33 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/file.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/fixnum.h +184 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/gc.h +334 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/hash.h +191 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/imemo.h +260 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/inits.h +47 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/io.h +140 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/load.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/loadpath.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/math.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/missing.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/numeric.h +274 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/object.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/parse.h +117 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/proc.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/process.h +124 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/ractor.h +6 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/random.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/range.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/rational.h +71 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/re.h +28 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/ruby_parser.h +102 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/sanitizers.h +297 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/serial.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/signal.h +24 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/st.h +11 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/static_assert.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/string.h +182 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/struct.h +127 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/symbol.h +45 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/thread.h +79 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/time.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/transcode.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/util.h +27 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/variable.h +72 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/vm.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal/warnings.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/internal.h +108 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/iseq.h +340 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/known_errors.inc +1419 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/method.h +255 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/node.h +111 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/node_name.inc +224 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/parse.h +243 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/parser_bits.h +564 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/parser_node.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/parser_st.h +162 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/parser_value.h +106 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/ast.h +6245 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/defines.h +206 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/diagnostic.h +433 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/encoding.h +283 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/extension.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/node.h +150 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/options.h +305 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/pack.h +163 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/parser.h +891 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/prettyprint.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/prism.h +347 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/regexp.h +33 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/static_literals.h +120 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_buffer.h +218 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_char.h +205 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_constant_pool.h +226 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_integer.h +119 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_list.h +97 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_memchr.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_newline_list.h +102 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_string.h +174 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_string_list.h +44 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_strncasecmp.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/util/pm_strpbrk.h +46 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism/version.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/prism_compile.h +88 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/probes_helper.h +42 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ractor_core.h +393 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/regenc.h +254 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/regint.h +1010 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/regparse.h +371 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/revision.h +5 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/rjit.h +101 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/rjit_c.h +165 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ruby_assert.h +14 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/ruby_atomic.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/rubyparser.h +1430 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/shape.h +233 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/symbol.h +118 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/thread_none.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/thread_pthread.h +166 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/thread_win32.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/timev.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/transcode_data.h +138 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/variable.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/version.h +69 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm.inc +5643 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_call_iseq_optimized.inc +244 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_callinfo.h +605 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_core.h +2236 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_debug.h +124 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_exec.h +199 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_insnhelper.h +272 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_opts.h +67 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vm_sync.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/vmtc.inc +253 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview1/yjit.h +79 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/addr2line.h +22 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/builtin.h +119 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/build_assert/build_assert.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/check_type/check_type.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/container_of/container_of.h +142 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/list/list.h +791 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/str/str.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/constant.h +53 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/darray.h +209 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/debug_counter.h +423 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/dln.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/encindex.h +70 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/eval_intern.h +324 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/hrtime.h +237 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/id.h +347 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/id_table.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/insns.inc +265 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/insns_info.inc +9902 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/array.h +152 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/basic_operators.h +64 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/bignum.h +244 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/bits.h +568 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/class.h +283 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/cmdlineopt.h +65 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compar.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compile.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compilers.h +107 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/complex.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/cont.h +35 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/dir.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enc.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/encoding.h +36 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enum.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enumerator.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/error.h +218 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/eval.h +33 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/file.h +38 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/fixnum.h +184 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/gc.h +322 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/hash.h +192 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/imemo.h +261 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/inits.h +47 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/io.h +143 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/load.h +18 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/loadpath.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/math.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/missing.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/numeric.h +274 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/object.h +63 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/parse.h +129 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/proc.h +30 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/process.h +124 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/ractor.h +6 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/random.h +17 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/range.h +40 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/rational.h +71 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/re.h +28 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/ruby_parser.h +102 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/sanitizers.h +326 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/serial.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/signal.h +24 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/st.h +11 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/static_assert.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/string.h +186 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/struct.h +127 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/symbol.h +45 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/thread.h +85 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/time.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/transcode.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/util.h +27 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/variable.h +72 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/vm.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/warnings.h +16 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal.h +108 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/iseq.h +340 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/known_errors.inc +1419 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/method.h +255 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/node.h +111 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/node_name.inc +224 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/optinsn.inc +128 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/optunifs.inc +43 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parse.h +244 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_bits.h +564 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_node.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_st.h +162 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_value.h +106 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/ast.h +7524 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/defines.h +242 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/diagnostic.h +450 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/encoding.h +283 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/extension.h +19 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/node.h +129 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/options.h +396 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/pack.h +163 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/parser.h +933 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/prettyprint.h +34 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/prism.h +336 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/regexp.h +43 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/static_literals.h +121 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_buffer.h +218 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_char.h +204 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_constant_pool.h +218 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_integer.h +126 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_list.h +97 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_memchr.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_newline_list.h +113 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_string.h +190 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_strncasecmp.h +32 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_strpbrk.h +46 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/version.h +29 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism_compile.h +99 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/probes_helper.h +42 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ractor_core.h +382 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regenc.h +254 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regint.h +1006 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regparse.h +371 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/revision.h +5 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rjit.h +101 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rjit_c.h +165 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ruby_assert.h +14 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ruby_atomic.h +23 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rubyparser.h +1350 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/shape.h +234 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/siphash.h +48 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/symbol.h +123 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_none.h +21 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_pthread.h +168 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_win32.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/timev.h +58 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/transcode_data.h +138 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/variable.h +39 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/version.h +69 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm.inc +5840 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_call_iseq_optimized.inc +244 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_callinfo.h +627 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_core.h +2222 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_debug.h +124 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_exec.h +199 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_insnhelper.h +277 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_opts.h +67 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_sync.h +137 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vmtc.inc +259 -0
- data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/yjit.h +79 -0
- data/lib/debase/ruby_core_source/version.rb +1 -1
- metadata +436 -6
@@ -0,0 +1,891 @@
|
|
1
|
+
/**
|
2
|
+
* @file parser.h
|
3
|
+
*
|
4
|
+
* The parser used to parse Ruby source.
|
5
|
+
*/
|
6
|
+
#ifndef PRISM_PARSER_H
|
7
|
+
#define PRISM_PARSER_H
|
8
|
+
|
9
|
+
#include "prism/defines.h"
|
10
|
+
#include "prism/ast.h"
|
11
|
+
#include "prism/encoding.h"
|
12
|
+
#include "prism/options.h"
|
13
|
+
#include "prism/static_literals.h"
|
14
|
+
#include "prism/util/pm_constant_pool.h"
|
15
|
+
#include "prism/util/pm_list.h"
|
16
|
+
#include "prism/util/pm_newline_list.h"
|
17
|
+
#include "prism/util/pm_string.h"
|
18
|
+
|
19
|
+
#include <stdbool.h>
|
20
|
+
|
21
|
+
/**
|
22
|
+
* This enum provides various bits that represent different kinds of states that
|
23
|
+
* the lexer can track. This is used to determine which kind of token to return
|
24
|
+
* based on the context of the parser.
|
25
|
+
*/
|
26
|
+
typedef enum {
|
27
|
+
PM_LEX_STATE_BIT_BEG,
|
28
|
+
PM_LEX_STATE_BIT_END,
|
29
|
+
PM_LEX_STATE_BIT_ENDARG,
|
30
|
+
PM_LEX_STATE_BIT_ENDFN,
|
31
|
+
PM_LEX_STATE_BIT_ARG,
|
32
|
+
PM_LEX_STATE_BIT_CMDARG,
|
33
|
+
PM_LEX_STATE_BIT_MID,
|
34
|
+
PM_LEX_STATE_BIT_FNAME,
|
35
|
+
PM_LEX_STATE_BIT_DOT,
|
36
|
+
PM_LEX_STATE_BIT_CLASS,
|
37
|
+
PM_LEX_STATE_BIT_LABEL,
|
38
|
+
PM_LEX_STATE_BIT_LABELED,
|
39
|
+
PM_LEX_STATE_BIT_FITEM
|
40
|
+
} pm_lex_state_bit_t;
|
41
|
+
|
42
|
+
/**
|
43
|
+
* This enum combines the various bits from the above enum into individual
|
44
|
+
* values that represent the various states of the lexer.
|
45
|
+
*/
|
46
|
+
typedef enum {
|
47
|
+
PM_LEX_STATE_NONE = 0,
|
48
|
+
PM_LEX_STATE_BEG = (1 << PM_LEX_STATE_BIT_BEG),
|
49
|
+
PM_LEX_STATE_END = (1 << PM_LEX_STATE_BIT_END),
|
50
|
+
PM_LEX_STATE_ENDARG = (1 << PM_LEX_STATE_BIT_ENDARG),
|
51
|
+
PM_LEX_STATE_ENDFN = (1 << PM_LEX_STATE_BIT_ENDFN),
|
52
|
+
PM_LEX_STATE_ARG = (1 << PM_LEX_STATE_BIT_ARG),
|
53
|
+
PM_LEX_STATE_CMDARG = (1 << PM_LEX_STATE_BIT_CMDARG),
|
54
|
+
PM_LEX_STATE_MID = (1 << PM_LEX_STATE_BIT_MID),
|
55
|
+
PM_LEX_STATE_FNAME = (1 << PM_LEX_STATE_BIT_FNAME),
|
56
|
+
PM_LEX_STATE_DOT = (1 << PM_LEX_STATE_BIT_DOT),
|
57
|
+
PM_LEX_STATE_CLASS = (1 << PM_LEX_STATE_BIT_CLASS),
|
58
|
+
PM_LEX_STATE_LABEL = (1 << PM_LEX_STATE_BIT_LABEL),
|
59
|
+
PM_LEX_STATE_LABELED = (1 << PM_LEX_STATE_BIT_LABELED),
|
60
|
+
PM_LEX_STATE_FITEM = (1 << PM_LEX_STATE_BIT_FITEM),
|
61
|
+
PM_LEX_STATE_BEG_ANY = PM_LEX_STATE_BEG | PM_LEX_STATE_MID | PM_LEX_STATE_CLASS,
|
62
|
+
PM_LEX_STATE_ARG_ANY = PM_LEX_STATE_ARG | PM_LEX_STATE_CMDARG,
|
63
|
+
PM_LEX_STATE_END_ANY = PM_LEX_STATE_END | PM_LEX_STATE_ENDARG | PM_LEX_STATE_ENDFN
|
64
|
+
} pm_lex_state_t;
|
65
|
+
|
66
|
+
/**
|
67
|
+
* The type of quote that a heredoc uses.
|
68
|
+
*/
|
69
|
+
typedef enum {
|
70
|
+
PM_HEREDOC_QUOTE_NONE,
|
71
|
+
PM_HEREDOC_QUOTE_SINGLE = '\'',
|
72
|
+
PM_HEREDOC_QUOTE_DOUBLE = '"',
|
73
|
+
PM_HEREDOC_QUOTE_BACKTICK = '`',
|
74
|
+
} pm_heredoc_quote_t;
|
75
|
+
|
76
|
+
/**
|
77
|
+
* The type of indentation that a heredoc uses.
|
78
|
+
*/
|
79
|
+
typedef enum {
|
80
|
+
PM_HEREDOC_INDENT_NONE,
|
81
|
+
PM_HEREDOC_INDENT_DASH,
|
82
|
+
PM_HEREDOC_INDENT_TILDE,
|
83
|
+
} pm_heredoc_indent_t;
|
84
|
+
|
85
|
+
/**
|
86
|
+
* When lexing Ruby source, the lexer has a small amount of state to tell which
|
87
|
+
* kind of token it is currently lexing. For example, when we find the start of
|
88
|
+
* a string, the first token that we return is a TOKEN_STRING_BEGIN token. After
|
89
|
+
* that the lexer is now in the PM_LEX_STRING mode, and will return tokens that
|
90
|
+
* are found as part of a string.
|
91
|
+
*/
|
92
|
+
typedef struct pm_lex_mode {
|
93
|
+
/** The type of this lex mode. */
|
94
|
+
enum {
|
95
|
+
/** This state is used when any given token is being lexed. */
|
96
|
+
PM_LEX_DEFAULT,
|
97
|
+
|
98
|
+
/**
|
99
|
+
* This state is used when we're lexing as normal but inside an embedded
|
100
|
+
* expression of a string.
|
101
|
+
*/
|
102
|
+
PM_LEX_EMBEXPR,
|
103
|
+
|
104
|
+
/**
|
105
|
+
* This state is used when we're lexing a variable that is embedded
|
106
|
+
* directly inside of a string with the # shorthand.
|
107
|
+
*/
|
108
|
+
PM_LEX_EMBVAR,
|
109
|
+
|
110
|
+
/** This state is used when you are inside the content of a heredoc. */
|
111
|
+
PM_LEX_HEREDOC,
|
112
|
+
|
113
|
+
/**
|
114
|
+
* This state is used when we are lexing a list of tokens, as in a %w
|
115
|
+
* word list literal or a %i symbol list literal.
|
116
|
+
*/
|
117
|
+
PM_LEX_LIST,
|
118
|
+
|
119
|
+
/**
|
120
|
+
* This state is used when a regular expression has been begun and we
|
121
|
+
* are looking for the terminator.
|
122
|
+
*/
|
123
|
+
PM_LEX_REGEXP,
|
124
|
+
|
125
|
+
/**
|
126
|
+
* This state is used when we are lexing a string or a string-like
|
127
|
+
* token, as in string content with either quote or an xstring.
|
128
|
+
*/
|
129
|
+
PM_LEX_STRING
|
130
|
+
} mode;
|
131
|
+
|
132
|
+
/** The data associated with this type of lex mode. */
|
133
|
+
union {
|
134
|
+
struct {
|
135
|
+
/** This keeps track of the nesting level of the list. */
|
136
|
+
size_t nesting;
|
137
|
+
|
138
|
+
/** Whether or not interpolation is allowed in this list. */
|
139
|
+
bool interpolation;
|
140
|
+
|
141
|
+
/**
|
142
|
+
* When lexing a list, it takes into account balancing the
|
143
|
+
* terminator if the terminator is one of (), [], {}, or <>.
|
144
|
+
*/
|
145
|
+
uint8_t incrementor;
|
146
|
+
|
147
|
+
/** This is the terminator of the list literal. */
|
148
|
+
uint8_t terminator;
|
149
|
+
|
150
|
+
/**
|
151
|
+
* This is the character set that should be used to delimit the
|
152
|
+
* tokens within the list.
|
153
|
+
*/
|
154
|
+
uint8_t breakpoints[11];
|
155
|
+
} list;
|
156
|
+
|
157
|
+
struct {
|
158
|
+
/**
|
159
|
+
* This keeps track of the nesting level of the regular expression.
|
160
|
+
*/
|
161
|
+
size_t nesting;
|
162
|
+
|
163
|
+
/**
|
164
|
+
* When lexing a regular expression, it takes into account balancing
|
165
|
+
* the terminator if the terminator is one of (), [], {}, or <>.
|
166
|
+
*/
|
167
|
+
uint8_t incrementor;
|
168
|
+
|
169
|
+
/** This is the terminator of the regular expression. */
|
170
|
+
uint8_t terminator;
|
171
|
+
|
172
|
+
/**
|
173
|
+
* This is the character set that should be used to delimit the
|
174
|
+
* tokens within the regular expression.
|
175
|
+
*/
|
176
|
+
uint8_t breakpoints[7];
|
177
|
+
} regexp;
|
178
|
+
|
179
|
+
struct {
|
180
|
+
/** This keeps track of the nesting level of the string. */
|
181
|
+
size_t nesting;
|
182
|
+
|
183
|
+
/** Whether or not interpolation is allowed in this string. */
|
184
|
+
bool interpolation;
|
185
|
+
|
186
|
+
/**
|
187
|
+
* Whether or not at the end of the string we should allow a :,
|
188
|
+
* which would indicate this was a dynamic symbol instead of a
|
189
|
+
* string.
|
190
|
+
*/
|
191
|
+
bool label_allowed;
|
192
|
+
|
193
|
+
/**
|
194
|
+
* When lexing a string, it takes into account balancing the
|
195
|
+
* terminator if the terminator is one of (), [], {}, or <>.
|
196
|
+
*/
|
197
|
+
uint8_t incrementor;
|
198
|
+
|
199
|
+
/**
|
200
|
+
* This is the terminator of the string. It is typically either a
|
201
|
+
* single or double quote.
|
202
|
+
*/
|
203
|
+
uint8_t terminator;
|
204
|
+
|
205
|
+
/**
|
206
|
+
* This is the character set that should be used to delimit the
|
207
|
+
* tokens within the string.
|
208
|
+
*/
|
209
|
+
uint8_t breakpoints[7];
|
210
|
+
} string;
|
211
|
+
|
212
|
+
struct {
|
213
|
+
/** A pointer to the start of the heredoc identifier. */
|
214
|
+
const uint8_t *ident_start;
|
215
|
+
|
216
|
+
/** The length of the heredoc identifier. */
|
217
|
+
size_t ident_length;
|
218
|
+
|
219
|
+
/** The type of quote that the heredoc uses. */
|
220
|
+
pm_heredoc_quote_t quote;
|
221
|
+
|
222
|
+
/** The type of indentation that the heredoc uses. */
|
223
|
+
pm_heredoc_indent_t indent;
|
224
|
+
|
225
|
+
/**
|
226
|
+
* This is the pointer to the character where lexing should resume
|
227
|
+
* once the heredoc has been completely processed.
|
228
|
+
*/
|
229
|
+
const uint8_t *next_start;
|
230
|
+
|
231
|
+
/**
|
232
|
+
* This is used to track the amount of common whitespace on each
|
233
|
+
* line so that we know how much to dedent each line in the case of
|
234
|
+
* a tilde heredoc.
|
235
|
+
*/
|
236
|
+
size_t common_whitespace;
|
237
|
+
|
238
|
+
/** True if the previous token ended with a line continuation. */
|
239
|
+
bool line_continuation;
|
240
|
+
} heredoc;
|
241
|
+
} as;
|
242
|
+
|
243
|
+
/** The previous lex state so that it knows how to pop. */
|
244
|
+
struct pm_lex_mode *prev;
|
245
|
+
} pm_lex_mode_t;
|
246
|
+
|
247
|
+
/**
|
248
|
+
* We pre-allocate a certain number of lex states in order to avoid having to
|
249
|
+
* call malloc too many times while parsing. You really shouldn't need more than
|
250
|
+
* this because you only really nest deeply when doing string interpolation.
|
251
|
+
*/
|
252
|
+
#define PM_LEX_STACK_SIZE 4
|
253
|
+
|
254
|
+
/**
|
255
|
+
* The parser used to parse Ruby source.
|
256
|
+
*/
|
257
|
+
typedef struct pm_parser pm_parser_t;
|
258
|
+
|
259
|
+
/**
|
260
|
+
* While parsing, we keep track of a stack of contexts. This is helpful for
|
261
|
+
* error recovery so that we can pop back to a previous context when we hit a
|
262
|
+
* token that is understood by a parent context but not by the current context.
|
263
|
+
*/
|
264
|
+
typedef enum {
|
265
|
+
/** a null context, used for returning a value from a function */
|
266
|
+
PM_CONTEXT_NONE = 0,
|
267
|
+
|
268
|
+
/** a begin statement */
|
269
|
+
PM_CONTEXT_BEGIN,
|
270
|
+
|
271
|
+
/** an ensure statement with an explicit begin */
|
272
|
+
PM_CONTEXT_BEGIN_ENSURE,
|
273
|
+
|
274
|
+
/** a rescue else statement with an explicit begin */
|
275
|
+
PM_CONTEXT_BEGIN_ELSE,
|
276
|
+
|
277
|
+
/** a rescue statement with an explicit begin */
|
278
|
+
PM_CONTEXT_BEGIN_RESCUE,
|
279
|
+
|
280
|
+
/** expressions in block arguments using braces */
|
281
|
+
PM_CONTEXT_BLOCK_BRACES,
|
282
|
+
|
283
|
+
/** expressions in block arguments using do..end */
|
284
|
+
PM_CONTEXT_BLOCK_KEYWORDS,
|
285
|
+
|
286
|
+
/** an ensure statement within a do..end block */
|
287
|
+
PM_CONTEXT_BLOCK_ENSURE,
|
288
|
+
|
289
|
+
/** a rescue else statement within a do..end block */
|
290
|
+
PM_CONTEXT_BLOCK_ELSE,
|
291
|
+
|
292
|
+
/** a rescue statement within a do..end block */
|
293
|
+
PM_CONTEXT_BLOCK_RESCUE,
|
294
|
+
|
295
|
+
/** a case when statements */
|
296
|
+
PM_CONTEXT_CASE_WHEN,
|
297
|
+
|
298
|
+
/** a case in statements */
|
299
|
+
PM_CONTEXT_CASE_IN,
|
300
|
+
|
301
|
+
/** a class declaration */
|
302
|
+
PM_CONTEXT_CLASS,
|
303
|
+
|
304
|
+
/** an ensure statement within a class statement */
|
305
|
+
PM_CONTEXT_CLASS_ENSURE,
|
306
|
+
|
307
|
+
/** a rescue else statement within a class statement */
|
308
|
+
PM_CONTEXT_CLASS_ELSE,
|
309
|
+
|
310
|
+
/** a rescue statement within a class statement */
|
311
|
+
PM_CONTEXT_CLASS_RESCUE,
|
312
|
+
|
313
|
+
/** a method definition */
|
314
|
+
PM_CONTEXT_DEF,
|
315
|
+
|
316
|
+
/** an ensure statement within a method definition */
|
317
|
+
PM_CONTEXT_DEF_ENSURE,
|
318
|
+
|
319
|
+
/** a rescue else statement within a method definition */
|
320
|
+
PM_CONTEXT_DEF_ELSE,
|
321
|
+
|
322
|
+
/** a rescue statement within a method definition */
|
323
|
+
PM_CONTEXT_DEF_RESCUE,
|
324
|
+
|
325
|
+
/** a method definition's parameters */
|
326
|
+
PM_CONTEXT_DEF_PARAMS,
|
327
|
+
|
328
|
+
/** a defined? expression */
|
329
|
+
PM_CONTEXT_DEFINED,
|
330
|
+
|
331
|
+
/** a method definition's default parameter */
|
332
|
+
PM_CONTEXT_DEFAULT_PARAMS,
|
333
|
+
|
334
|
+
/** an else clause */
|
335
|
+
PM_CONTEXT_ELSE,
|
336
|
+
|
337
|
+
/** an elsif clause */
|
338
|
+
PM_CONTEXT_ELSIF,
|
339
|
+
|
340
|
+
/** an interpolated expression */
|
341
|
+
PM_CONTEXT_EMBEXPR,
|
342
|
+
|
343
|
+
/** a for loop */
|
344
|
+
PM_CONTEXT_FOR,
|
345
|
+
|
346
|
+
/** a for loop's index */
|
347
|
+
PM_CONTEXT_FOR_INDEX,
|
348
|
+
|
349
|
+
/** an if statement */
|
350
|
+
PM_CONTEXT_IF,
|
351
|
+
|
352
|
+
/** a lambda expression with braces */
|
353
|
+
PM_CONTEXT_LAMBDA_BRACES,
|
354
|
+
|
355
|
+
/** a lambda expression with do..end */
|
356
|
+
PM_CONTEXT_LAMBDA_DO_END,
|
357
|
+
|
358
|
+
/** an ensure statement within a lambda expression */
|
359
|
+
PM_CONTEXT_LAMBDA_ENSURE,
|
360
|
+
|
361
|
+
/** a rescue else statement within a lambda expression */
|
362
|
+
PM_CONTEXT_LAMBDA_ELSE,
|
363
|
+
|
364
|
+
/** a rescue statement within a lambda expression */
|
365
|
+
PM_CONTEXT_LAMBDA_RESCUE,
|
366
|
+
|
367
|
+
/** the top level context */
|
368
|
+
PM_CONTEXT_MAIN,
|
369
|
+
|
370
|
+
/** a module declaration */
|
371
|
+
PM_CONTEXT_MODULE,
|
372
|
+
|
373
|
+
/** an ensure statement within a module statement */
|
374
|
+
PM_CONTEXT_MODULE_ENSURE,
|
375
|
+
|
376
|
+
/** a rescue else statement within a module statement */
|
377
|
+
PM_CONTEXT_MODULE_ELSE,
|
378
|
+
|
379
|
+
/** a rescue statement within a module statement */
|
380
|
+
PM_CONTEXT_MODULE_RESCUE,
|
381
|
+
|
382
|
+
/** a parenthesized expression */
|
383
|
+
PM_CONTEXT_PARENS,
|
384
|
+
|
385
|
+
/** an END block */
|
386
|
+
PM_CONTEXT_POSTEXE,
|
387
|
+
|
388
|
+
/** a predicate inside an if/elsif/unless statement */
|
389
|
+
PM_CONTEXT_PREDICATE,
|
390
|
+
|
391
|
+
/** a BEGIN block */
|
392
|
+
PM_CONTEXT_PREEXE,
|
393
|
+
|
394
|
+
/** a modifier rescue clause */
|
395
|
+
PM_CONTEXT_RESCUE_MODIFIER,
|
396
|
+
|
397
|
+
/** a singleton class definition */
|
398
|
+
PM_CONTEXT_SCLASS,
|
399
|
+
|
400
|
+
/** an ensure statement with a singleton class */
|
401
|
+
PM_CONTEXT_SCLASS_ENSURE,
|
402
|
+
|
403
|
+
/** a rescue else statement with a singleton class */
|
404
|
+
PM_CONTEXT_SCLASS_ELSE,
|
405
|
+
|
406
|
+
/** a rescue statement with a singleton class */
|
407
|
+
PM_CONTEXT_SCLASS_RESCUE,
|
408
|
+
|
409
|
+
/** a ternary expression */
|
410
|
+
PM_CONTEXT_TERNARY,
|
411
|
+
|
412
|
+
/** an unless statement */
|
413
|
+
PM_CONTEXT_UNLESS,
|
414
|
+
|
415
|
+
/** an until statement */
|
416
|
+
PM_CONTEXT_UNTIL,
|
417
|
+
|
418
|
+
/** a while statement */
|
419
|
+
PM_CONTEXT_WHILE,
|
420
|
+
} pm_context_t;
|
421
|
+
|
422
|
+
/** This is a node in a linked list of contexts. */
|
423
|
+
typedef struct pm_context_node {
|
424
|
+
/** The context that this node represents. */
|
425
|
+
pm_context_t context;
|
426
|
+
|
427
|
+
/** A pointer to the previous context in the linked list. */
|
428
|
+
struct pm_context_node *prev;
|
429
|
+
} pm_context_node_t;
|
430
|
+
|
431
|
+
/** This is the type of a comment that we've found while parsing. */
|
432
|
+
typedef enum {
|
433
|
+
PM_COMMENT_INLINE,
|
434
|
+
PM_COMMENT_EMBDOC
|
435
|
+
} pm_comment_type_t;
|
436
|
+
|
437
|
+
/**
|
438
|
+
* This is a node in the linked list of comments that we've found while parsing.
|
439
|
+
*
|
440
|
+
* @extends pm_list_node_t
|
441
|
+
*/
|
442
|
+
typedef struct pm_comment {
|
443
|
+
/** The embedded base node. */
|
444
|
+
pm_list_node_t node;
|
445
|
+
|
446
|
+
/** The location of the comment in the source. */
|
447
|
+
pm_location_t location;
|
448
|
+
|
449
|
+
/** The type of comment that we've found. */
|
450
|
+
pm_comment_type_t type;
|
451
|
+
} pm_comment_t;
|
452
|
+
|
453
|
+
/**
|
454
|
+
* This is a node in the linked list of magic comments that we've found while
|
455
|
+
* parsing.
|
456
|
+
*
|
457
|
+
* @extends pm_list_node_t
|
458
|
+
*/
|
459
|
+
typedef struct {
|
460
|
+
/** The embedded base node. */
|
461
|
+
pm_list_node_t node;
|
462
|
+
|
463
|
+
/** A pointer to the start of the key in the source. */
|
464
|
+
const uint8_t *key_start;
|
465
|
+
|
466
|
+
/** A pointer to the start of the value in the source. */
|
467
|
+
const uint8_t *value_start;
|
468
|
+
|
469
|
+
/** The length of the key in the source. */
|
470
|
+
uint32_t key_length;
|
471
|
+
|
472
|
+
/** The length of the value in the source. */
|
473
|
+
uint32_t value_length;
|
474
|
+
} pm_magic_comment_t;
|
475
|
+
|
476
|
+
/**
|
477
|
+
* When the encoding that is being used to parse the source is changed by prism,
|
478
|
+
* we provide the ability here to call out to a user-defined function.
|
479
|
+
*/
|
480
|
+
typedef void (*pm_encoding_changed_callback_t)(pm_parser_t *parser);
|
481
|
+
|
482
|
+
/**
|
483
|
+
* When you are lexing through a file, the lexer needs all of the information
|
484
|
+
* that the parser additionally provides (for example, the local table). So if
|
485
|
+
* you want to properly lex Ruby, you need to actually lex it in the context of
|
486
|
+
* the parser. In order to provide this functionality, we optionally allow a
|
487
|
+
* struct to be attached to the parser that calls back out to a user-provided
|
488
|
+
* callback when each token is lexed.
|
489
|
+
*/
|
490
|
+
typedef struct {
|
491
|
+
/**
|
492
|
+
* This opaque pointer is used to provide whatever information the user
|
493
|
+
* deemed necessary to the callback. In our case we use it to pass the array
|
494
|
+
* that the tokens get appended into.
|
495
|
+
*/
|
496
|
+
void *data;
|
497
|
+
|
498
|
+
/**
|
499
|
+
* This is the callback that is called when a token is lexed. It is passed
|
500
|
+
* the opaque data pointer, the parser, and the token that was lexed.
|
501
|
+
*/
|
502
|
+
void (*callback)(void *data, pm_parser_t *parser, pm_token_t *token);
|
503
|
+
} pm_lex_callback_t;
|
504
|
+
|
505
|
+
/** The type of shareable constant value that can be set. */
|
506
|
+
typedef uint8_t pm_shareable_constant_value_t;
|
507
|
+
static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_NONE = 0x0;
|
508
|
+
static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_LITERAL = 0x1;
|
509
|
+
static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_EVERYTHING = 0x2;
|
510
|
+
static const pm_shareable_constant_value_t PM_SCOPE_SHAREABLE_CONSTANT_EXPERIMENTAL_COPY = 0x4;
|
511
|
+
|
512
|
+
/**
|
513
|
+
* This tracks an individual local variable in a certain lexical context, as
|
514
|
+
* well as the number of times is it read.
|
515
|
+
*/
|
516
|
+
typedef struct {
|
517
|
+
/** The name of the local variable. */
|
518
|
+
pm_constant_id_t name;
|
519
|
+
|
520
|
+
/** The location of the local variable in the source. */
|
521
|
+
pm_location_t location;
|
522
|
+
|
523
|
+
/** The index of the local variable in the local table. */
|
524
|
+
uint32_t index;
|
525
|
+
|
526
|
+
/** The number of times the local variable is read. */
|
527
|
+
uint32_t reads;
|
528
|
+
|
529
|
+
/** The hash of the local variable. */
|
530
|
+
uint32_t hash;
|
531
|
+
} pm_local_t;
|
532
|
+
|
533
|
+
/**
|
534
|
+
* This is a set of local variables in a certain lexical context (method, class,
|
535
|
+
* module, etc.). We need to track how many times these variables are read in
|
536
|
+
* order to warn if they only get written.
|
537
|
+
*/
|
538
|
+
typedef struct pm_locals {
|
539
|
+
/** The number of local variables in the set. */
|
540
|
+
uint32_t size;
|
541
|
+
|
542
|
+
/** The capacity of the local variables set. */
|
543
|
+
uint32_t capacity;
|
544
|
+
|
545
|
+
/** The nullable allocated memory for the local variables in the set. */
|
546
|
+
pm_local_t *locals;
|
547
|
+
} pm_locals_t;
|
548
|
+
|
549
|
+
/**
|
550
|
+
* This struct represents a node in a linked list of scopes. Some scopes can see
|
551
|
+
* into their parent scopes, while others cannot.
|
552
|
+
*/
|
553
|
+
typedef struct pm_scope {
|
554
|
+
/** A pointer to the previous scope in the linked list. */
|
555
|
+
struct pm_scope *previous;
|
556
|
+
|
557
|
+
/** The IDs of the locals in the given scope. */
|
558
|
+
pm_locals_t locals;
|
559
|
+
|
560
|
+
/**
|
561
|
+
* This is a bitfield that indicates the parameters that are being used in
|
562
|
+
* this scope. It is a combination of the PM_SCOPE_PARAMS_* constants. There
|
563
|
+
* are three different kinds of parameters that can be used in a scope:
|
564
|
+
*
|
565
|
+
* - Ordinary parameters (e.g., def foo(bar); end)
|
566
|
+
* - Numbered parameters (e.g., def foo; _1; end)
|
567
|
+
* - The it parameter (e.g., def foo; it; end)
|
568
|
+
*
|
569
|
+
* If ordinary parameters are being used, then certain parameters can be
|
570
|
+
* forwarded to another method/structure. Those are indicated by four
|
571
|
+
* additional bits in the params field. For example, some combinations of:
|
572
|
+
*
|
573
|
+
* - def foo(*); end
|
574
|
+
* - def foo(**); end
|
575
|
+
* - def foo(&); end
|
576
|
+
* - def foo(...); end
|
577
|
+
*/
|
578
|
+
uint8_t parameters;
|
579
|
+
|
580
|
+
/**
|
581
|
+
* An integer indicating the number of numbered parameters on this scope.
|
582
|
+
* This is necessary to determine if child blocks are allowed to use
|
583
|
+
* numbered parameters, and to pass information to consumers of the AST
|
584
|
+
* about how many numbered parameters exist.
|
585
|
+
*/
|
586
|
+
int8_t numbered_parameters;
|
587
|
+
|
588
|
+
/**
|
589
|
+
* The current state of constant shareability for this scope. This is
|
590
|
+
* changed by magic shareable_constant_value comments.
|
591
|
+
*/
|
592
|
+
pm_shareable_constant_value_t shareable_constant;
|
593
|
+
|
594
|
+
/**
|
595
|
+
* A boolean indicating whether or not this scope can see into its parent.
|
596
|
+
* If closed is true, then the scope cannot see into its parent.
|
597
|
+
*/
|
598
|
+
bool closed;
|
599
|
+
} pm_scope_t;
|
600
|
+
|
601
|
+
static const uint8_t PM_SCOPE_PARAMETERS_NONE = 0x0;
|
602
|
+
static const uint8_t PM_SCOPE_PARAMETERS_ORDINARY = 0x1;
|
603
|
+
static const uint8_t PM_SCOPE_PARAMETERS_NUMBERED = 0x2;
|
604
|
+
static const uint8_t PM_SCOPE_PARAMETERS_IT = 0x4;
|
605
|
+
static const uint8_t PM_SCOPE_PARAMETERS_TYPE_MASK = 0x7;
|
606
|
+
|
607
|
+
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_POSITIONALS = 0x8;
|
608
|
+
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_KEYWORDS = 0x10;
|
609
|
+
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_BLOCK = 0x20;
|
610
|
+
static const uint8_t PM_SCOPE_PARAMETERS_FORWARDING_ALL = 0x40;
|
611
|
+
|
612
|
+
static const int8_t PM_SCOPE_NUMBERED_PARAMETERS_DISALLOWED = -1;
|
613
|
+
static const int8_t PM_SCOPE_NUMBERED_PARAMETERS_NONE = 0;
|
614
|
+
|
615
|
+
/**
|
616
|
+
* A struct that represents a stack of boolean values.
|
617
|
+
*/
|
618
|
+
typedef uint32_t pm_state_stack_t;
|
619
|
+
|
620
|
+
/**
|
621
|
+
* This struct represents the overall parser. It contains a reference to the
|
622
|
+
* source file, as well as pointers that indicate where in the source it's
|
623
|
+
* currently parsing. It also contains the most recent and current token that
|
624
|
+
* it's considering.
|
625
|
+
*/
|
626
|
+
struct pm_parser {
|
627
|
+
/** The current state of the lexer. */
|
628
|
+
pm_lex_state_t lex_state;
|
629
|
+
|
630
|
+
/** Tracks the current nesting of (), [], and {}. */
|
631
|
+
int enclosure_nesting;
|
632
|
+
|
633
|
+
/**
|
634
|
+
* Used to temporarily track the nesting of enclosures to determine if a {
|
635
|
+
* is the beginning of a lambda following the parameters of a lambda.
|
636
|
+
*/
|
637
|
+
int lambda_enclosure_nesting;
|
638
|
+
|
639
|
+
/**
|
640
|
+
* Used to track the nesting of braces to ensure we get the correct value
|
641
|
+
* when we are interpolating blocks with braces.
|
642
|
+
*/
|
643
|
+
int brace_nesting;
|
644
|
+
|
645
|
+
/**
|
646
|
+
* The stack used to determine if a do keyword belongs to the predicate of a
|
647
|
+
* while, until, or for loop.
|
648
|
+
*/
|
649
|
+
pm_state_stack_t do_loop_stack;
|
650
|
+
|
651
|
+
/**
|
652
|
+
* The stack used to determine if a do keyword belongs to the beginning of a
|
653
|
+
* block.
|
654
|
+
*/
|
655
|
+
pm_state_stack_t accepts_block_stack;
|
656
|
+
|
657
|
+
/** A stack of lex modes. */
|
658
|
+
struct {
|
659
|
+
/** The current mode of the lexer. */
|
660
|
+
pm_lex_mode_t *current;
|
661
|
+
|
662
|
+
/** The stack of lexer modes. */
|
663
|
+
pm_lex_mode_t stack[PM_LEX_STACK_SIZE];
|
664
|
+
|
665
|
+
/** The current index into the lexer mode stack. */
|
666
|
+
size_t index;
|
667
|
+
} lex_modes;
|
668
|
+
|
669
|
+
/** The pointer to the start of the source. */
|
670
|
+
const uint8_t *start;
|
671
|
+
|
672
|
+
/** The pointer to the end of the source. */
|
673
|
+
const uint8_t *end;
|
674
|
+
|
675
|
+
/** The previous token we were considering. */
|
676
|
+
pm_token_t previous;
|
677
|
+
|
678
|
+
/** The current token we're considering. */
|
679
|
+
pm_token_t current;
|
680
|
+
|
681
|
+
/**
|
682
|
+
* This is a special field set on the parser when we need the parser to jump
|
683
|
+
* to a specific location when lexing the next token, as opposed to just
|
684
|
+
* using the end of the previous token. Normally this is NULL.
|
685
|
+
*/
|
686
|
+
const uint8_t *next_start;
|
687
|
+
|
688
|
+
/**
|
689
|
+
* This field indicates the end of a heredoc whose identifier was found on
|
690
|
+
* the current line. If another heredoc is found on the same line, then this
|
691
|
+
* will be moved forward to the end of that heredoc. If no heredocs are
|
692
|
+
* found on a line then this is NULL.
|
693
|
+
*/
|
694
|
+
const uint8_t *heredoc_end;
|
695
|
+
|
696
|
+
/** The list of comments that have been found while parsing. */
|
697
|
+
pm_list_t comment_list;
|
698
|
+
|
699
|
+
/** The list of magic comments that have been found while parsing. */
|
700
|
+
pm_list_t magic_comment_list;
|
701
|
+
|
702
|
+
/**
|
703
|
+
* An optional location that represents the location of the __END__ marker
|
704
|
+
* and the rest of the content of the file. This content is loaded into the
|
705
|
+
* DATA constant when the file being parsed is the main file being executed.
|
706
|
+
*/
|
707
|
+
pm_location_t data_loc;
|
708
|
+
|
709
|
+
/** The list of warnings that have been found while parsing. */
|
710
|
+
pm_list_t warning_list;
|
711
|
+
|
712
|
+
/** The list of errors that have been found while parsing. */
|
713
|
+
pm_list_t error_list;
|
714
|
+
|
715
|
+
/** The current local scope. */
|
716
|
+
pm_scope_t *current_scope;
|
717
|
+
|
718
|
+
/** The current parsing context. */
|
719
|
+
pm_context_node_t *current_context;
|
720
|
+
|
721
|
+
/**
|
722
|
+
* The hash keys for the hash that is currently being parsed. This is not
|
723
|
+
* usually necessary because it can pass it down the various call chains,
|
724
|
+
* but in the event that you're parsing a hash that is being directly
|
725
|
+
* pushed into another hash with **, we need to share the hash keys so that
|
726
|
+
* we can warn for the nested hash as well.
|
727
|
+
*/
|
728
|
+
pm_static_literals_t *current_hash_keys;
|
729
|
+
|
730
|
+
/**
|
731
|
+
* The encoding functions for the current file is attached to the parser as
|
732
|
+
* it's parsing so that it can change with a magic comment.
|
733
|
+
*/
|
734
|
+
const pm_encoding_t *encoding;
|
735
|
+
|
736
|
+
/**
|
737
|
+
* When the encoding that is being used to parse the source is changed by
|
738
|
+
* prism, we provide the ability here to call out to a user-defined
|
739
|
+
* function.
|
740
|
+
*/
|
741
|
+
pm_encoding_changed_callback_t encoding_changed_callback;
|
742
|
+
|
743
|
+
/**
|
744
|
+
* This pointer indicates where a comment must start if it is to be
|
745
|
+
* considered an encoding comment.
|
746
|
+
*/
|
747
|
+
const uint8_t *encoding_comment_start;
|
748
|
+
|
749
|
+
/**
|
750
|
+
* This is an optional callback that can be attached to the parser that will
|
751
|
+
* be called whenever a new token is lexed by the parser.
|
752
|
+
*/
|
753
|
+
pm_lex_callback_t *lex_callback;
|
754
|
+
|
755
|
+
/**
|
756
|
+
* This is the path of the file being parsed. We use the filepath when
|
757
|
+
* constructing SourceFileNodes.
|
758
|
+
*/
|
759
|
+
pm_string_t filepath;
|
760
|
+
|
761
|
+
/**
|
762
|
+
* This constant pool keeps all of the constants defined throughout the file
|
763
|
+
* so that we can reference them later.
|
764
|
+
*/
|
765
|
+
pm_constant_pool_t constant_pool;
|
766
|
+
|
767
|
+
/** This is the list of newline offsets in the source file. */
|
768
|
+
pm_newline_list_t newline_list;
|
769
|
+
|
770
|
+
/**
|
771
|
+
* We want to add a flag to integer nodes that indicates their base. We only
|
772
|
+
* want to parse these once, but we don't have space on the token itself to
|
773
|
+
* communicate this information. So we store it here and pass it through
|
774
|
+
* when we find tokens that we need it for.
|
775
|
+
*/
|
776
|
+
pm_node_flags_t integer_base;
|
777
|
+
|
778
|
+
/**
|
779
|
+
* This string is used to pass information from the lexer to the parser. It
|
780
|
+
* is particularly necessary because of escape sequences.
|
781
|
+
*/
|
782
|
+
pm_string_t current_string;
|
783
|
+
|
784
|
+
/**
|
785
|
+
* The line number at the start of the parse. This will be used to offset
|
786
|
+
* the line numbers of all of the locations.
|
787
|
+
*/
|
788
|
+
int32_t start_line;
|
789
|
+
|
790
|
+
/**
|
791
|
+
* When a string-like expression is being lexed, any byte or escape sequence
|
792
|
+
* that resolves to a value whose top bit is set (i.e., >= 0x80) will
|
793
|
+
* explicitly set the encoding to the same encoding as the source.
|
794
|
+
* Alternatively, if a unicode escape sequence is used (e.g., \\u{80}) that
|
795
|
+
* resolves to a value whose top bit is set, then the encoding will be
|
796
|
+
* explicitly set to UTF-8.
|
797
|
+
*
|
798
|
+
* The _next_ time this happens, if the encoding that is about to become the
|
799
|
+
* explicitly set encoding does not match the previously set explicit
|
800
|
+
* encoding, a mixed encoding error will be emitted.
|
801
|
+
*
|
802
|
+
* When the expression is finished being lexed, the explicit encoding
|
803
|
+
* controls the encoding of the expression. For the most part this means
|
804
|
+
* that the expression will either be encoded in the source encoding or
|
805
|
+
* UTF-8. This holds for all encodings except US-ASCII. If the source is
|
806
|
+
* US-ASCII and an explicit encoding was set that was _not_ UTF-8, then the
|
807
|
+
* expression will be encoded as ASCII-8BIT.
|
808
|
+
*
|
809
|
+
* Note that if the expression is a list, different elements within the same
|
810
|
+
* list can have different encodings, so this will get reset between each
|
811
|
+
* element. Furthermore all of this only applies to lists that support
|
812
|
+
* interpolation, because otherwise escapes that could change the encoding
|
813
|
+
* are ignored.
|
814
|
+
*
|
815
|
+
* At first glance, it may make more sense for this to live on the lexer
|
816
|
+
* mode, but we need it here to communicate back to the parser for character
|
817
|
+
* literals that do not push a new lexer mode.
|
818
|
+
*/
|
819
|
+
const pm_encoding_t *explicit_encoding;
|
820
|
+
|
821
|
+
/**
|
822
|
+
* When parsing block exits (e.g., break, next, redo), we need to validate
|
823
|
+
* that they are in correct contexts. For the most part we can do this by
|
824
|
+
* looking at our parent contexts. However, modifier while and until
|
825
|
+
* expressions can change that context to make block exits valid. In these
|
826
|
+
* cases, we need to keep track of the block exits and then validate them
|
827
|
+
* after the expression has been parsed.
|
828
|
+
*
|
829
|
+
* We use a pointer here because we don't want to keep a whole list attached
|
830
|
+
* since this will only be used in the context of begin/end expressions.
|
831
|
+
*/
|
832
|
+
pm_node_list_t *current_block_exits;
|
833
|
+
|
834
|
+
/** The version of prism that we should use to parse. */
|
835
|
+
pm_options_version_t version;
|
836
|
+
|
837
|
+
/** The command line flags given from the options. */
|
838
|
+
uint8_t command_line;
|
839
|
+
|
840
|
+
/**
|
841
|
+
* Whether or not we have found a frozen_string_literal magic comment with
|
842
|
+
* a true or false value.
|
843
|
+
* May be:
|
844
|
+
* - PM_OPTIONS_FROZEN_STRING_LITERAL_DISABLED
|
845
|
+
* - PM_OPTIONS_FROZEN_STRING_LITERAL_ENABLED
|
846
|
+
* - PM_OPTIONS_FROZEN_STRING_LITERAL_UNSET
|
847
|
+
*/
|
848
|
+
int8_t frozen_string_literal;
|
849
|
+
|
850
|
+
/**
|
851
|
+
* Whether or not we are parsing an eval string. This impacts whether or not
|
852
|
+
* we should evaluate if block exits/yields are valid.
|
853
|
+
*/
|
854
|
+
bool parsing_eval;
|
855
|
+
|
856
|
+
/** Whether or not we're at the beginning of a command. */
|
857
|
+
bool command_start;
|
858
|
+
|
859
|
+
/** Whether or not we're currently recovering from a syntax error. */
|
860
|
+
bool recovering;
|
861
|
+
|
862
|
+
/**
|
863
|
+
* Whether or not the encoding has been changed by a magic comment. We use
|
864
|
+
* this to provide a fast path for the lexer instead of going through the
|
865
|
+
* function pointer.
|
866
|
+
*/
|
867
|
+
bool encoding_changed;
|
868
|
+
|
869
|
+
/**
|
870
|
+
* This flag indicates that we are currently parsing a pattern matching
|
871
|
+
* expression and impacts that calculation of newlines.
|
872
|
+
*/
|
873
|
+
bool pattern_matching_newlines;
|
874
|
+
|
875
|
+
/** This flag indicates that we are currently parsing a keyword argument. */
|
876
|
+
bool in_keyword_arg;
|
877
|
+
|
878
|
+
/**
|
879
|
+
* Whether or not the parser has seen a token that has semantic meaning
|
880
|
+
* (i.e., a token that is not a comment or whitespace).
|
881
|
+
*/
|
882
|
+
bool semantic_token_seen;
|
883
|
+
|
884
|
+
/**
|
885
|
+
* True if the current regular expression being lexed contains only ASCII
|
886
|
+
* characters.
|
887
|
+
*/
|
888
|
+
bool current_regular_expression_ascii_only;
|
889
|
+
};
|
890
|
+
|
891
|
+
#endif
|