debase-ruby_core_source 3.3.5 → 3.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.idea/vcs.xml +28 -0
  4. data/CHANGELOG.md +8 -0
  5. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/addr2line.h +22 -0
  6. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/builtin.h +119 -0
  7. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/build_assert/build_assert.h +40 -0
  8. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/check_type/check_type.h +63 -0
  9. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/container_of/container_of.h +142 -0
  10. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/list/list.h +791 -0
  11. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ccan/str/str.h +17 -0
  12. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/constant.h +53 -0
  13. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/darray.h +209 -0
  14. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/debug_counter.h +423 -0
  15. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/dln.h +32 -0
  16. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/encindex.h +70 -0
  17. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/eval_intern.h +324 -0
  18. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/hrtime.h +237 -0
  19. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/id.h +347 -0
  20. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/id_table.h +39 -0
  21. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/insns.inc +265 -0
  22. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/insns_info.inc +9902 -0
  23. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/array.h +152 -0
  24. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/basic_operators.h +64 -0
  25. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/bignum.h +244 -0
  26. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/bits.h +568 -0
  27. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/class.h +283 -0
  28. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/cmdlineopt.h +65 -0
  29. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compar.h +29 -0
  30. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compile.h +34 -0
  31. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/compilers.h +107 -0
  32. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/complex.h +29 -0
  33. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/cont.h +35 -0
  34. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/dir.h +16 -0
  35. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enc.h +19 -0
  36. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/encoding.h +36 -0
  37. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enum.h +18 -0
  38. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/enumerator.h +21 -0
  39. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/error.h +218 -0
  40. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/eval.h +33 -0
  41. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/file.h +38 -0
  42. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/fixnum.h +184 -0
  43. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/gc.h +322 -0
  44. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/hash.h +192 -0
  45. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/imemo.h +261 -0
  46. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/inits.h +47 -0
  47. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/io.h +143 -0
  48. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/load.h +18 -0
  49. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/loadpath.h +16 -0
  50. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/math.h +23 -0
  51. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/missing.h +19 -0
  52. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/numeric.h +274 -0
  53. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/object.h +63 -0
  54. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/parse.h +129 -0
  55. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/proc.h +30 -0
  56. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/process.h +124 -0
  57. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/ractor.h +6 -0
  58. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/random.h +17 -0
  59. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/range.h +40 -0
  60. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/rational.h +71 -0
  61. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/re.h +28 -0
  62. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/ruby_parser.h +102 -0
  63. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/sanitizers.h +326 -0
  64. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/serial.h +23 -0
  65. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/signal.h +24 -0
  66. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/st.h +11 -0
  67. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/static_assert.h +16 -0
  68. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/string.h +186 -0
  69. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/struct.h +127 -0
  70. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/symbol.h +45 -0
  71. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/thread.h +85 -0
  72. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/time.h +34 -0
  73. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/transcode.h +23 -0
  74. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/util.h +27 -0
  75. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/variable.h +72 -0
  76. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/vm.h +137 -0
  77. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal/warnings.h +16 -0
  78. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/internal.h +108 -0
  79. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/iseq.h +340 -0
  80. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/known_errors.inc +1419 -0
  81. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/method.h +255 -0
  82. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/node.h +111 -0
  83. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/node_name.inc +224 -0
  84. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/optinsn.inc +128 -0
  85. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/optunifs.inc +43 -0
  86. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parse.h +244 -0
  87. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_bits.h +564 -0
  88. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_node.h +32 -0
  89. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_st.h +162 -0
  90. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/parser_value.h +106 -0
  91. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/ast.h +7524 -0
  92. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/defines.h +242 -0
  93. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/diagnostic.h +450 -0
  94. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/encoding.h +283 -0
  95. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/extension.h +19 -0
  96. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/node.h +129 -0
  97. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/options.h +396 -0
  98. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/pack.h +163 -0
  99. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/parser.h +933 -0
  100. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/prettyprint.h +34 -0
  101. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/prism.h +336 -0
  102. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/regexp.h +43 -0
  103. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/static_literals.h +121 -0
  104. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_buffer.h +218 -0
  105. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_char.h +204 -0
  106. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_constant_pool.h +218 -0
  107. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_integer.h +126 -0
  108. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_list.h +97 -0
  109. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_memchr.h +29 -0
  110. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_newline_list.h +113 -0
  111. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_string.h +190 -0
  112. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_strncasecmp.h +32 -0
  113. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/util/pm_strpbrk.h +46 -0
  114. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism/version.h +29 -0
  115. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/prism_compile.h +99 -0
  116. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/probes_helper.h +42 -0
  117. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ractor_core.h +382 -0
  118. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regenc.h +254 -0
  119. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regint.h +1006 -0
  120. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/regparse.h +371 -0
  121. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/revision.h +5 -0
  122. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rjit.h +101 -0
  123. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rjit_c.h +165 -0
  124. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ruby_assert.h +14 -0
  125. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/ruby_atomic.h +23 -0
  126. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/rubyparser.h +1350 -0
  127. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/shape.h +234 -0
  128. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/siphash.h +48 -0
  129. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/symbol.h +123 -0
  130. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_none.h +21 -0
  131. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_pthread.h +168 -0
  132. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/thread_win32.h +58 -0
  133. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/timev.h +58 -0
  134. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/transcode_data.h +138 -0
  135. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/variable.h +39 -0
  136. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/version.h +69 -0
  137. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm.inc +5840 -0
  138. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_call_iseq_optimized.inc +244 -0
  139. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_callinfo.h +627 -0
  140. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_core.h +2222 -0
  141. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_debug.h +124 -0
  142. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_exec.h +199 -0
  143. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_insnhelper.h +277 -0
  144. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_opts.h +67 -0
  145. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vm_sync.h +137 -0
  146. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/vmtc.inc +259 -0
  147. data/lib/debase/ruby_core_source/ruby-3.4.0-preview2/yjit.h +79 -0
  148. data/lib/debase/ruby_core_source/version.rb +1 -1
  149. metadata +150 -6
@@ -0,0 +1,71 @@
1
+ #ifndef INTERNAL_RATIONAL_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_RATIONAL_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for Rational.
10
+ */
11
+ #include "ruby/internal/config.h" /* for HAVE_LIBGMP */
12
+ #include "ruby/ruby.h" /* for struct RBasic */
13
+ #include "internal/numeric.h" /* for INT_POSITIVE_P */
14
+ #include "ruby_assert.h" /* for assert */
15
+
16
+ struct RRational {
17
+ struct RBasic basic;
18
+ VALUE num;
19
+ VALUE den;
20
+ };
21
+
22
+ #define RRATIONAL(obj) ((struct RRational *)(obj))
23
+
24
+ /* rational.c */
25
+ VALUE rb_rational_canonicalize(VALUE x);
26
+ VALUE rb_rational_uminus(VALUE self);
27
+ VALUE rb_rational_plus(VALUE self, VALUE other);
28
+ VALUE rb_rational_minus(VALUE self, VALUE other);
29
+ VALUE rb_rational_mul(VALUE self, VALUE other);
30
+ VALUE rb_rational_div(VALUE self, VALUE other);
31
+ VALUE rb_lcm(VALUE x, VALUE y);
32
+ VALUE rb_rational_reciprocal(VALUE x);
33
+ VALUE rb_cstr_to_rat(const char *, int);
34
+ VALUE rb_rational_hash(VALUE self);
35
+ VALUE rb_rational_abs(VALUE self);
36
+ VALUE rb_rational_cmp(VALUE self, VALUE other);
37
+ VALUE rb_rational_pow(VALUE self, VALUE other);
38
+ VALUE rb_rational_floor(VALUE self, int ndigits);
39
+ VALUE rb_numeric_quo(VALUE x, VALUE y);
40
+ VALUE rb_flo_round_by_rational(int argc, VALUE *argv, VALUE num);
41
+ VALUE rb_float_numerator(VALUE x);
42
+ VALUE rb_float_denominator(VALUE x);
43
+
44
+ static inline void RATIONAL_SET_NUM(VALUE r, VALUE n);
45
+ static inline void RATIONAL_SET_DEN(VALUE r, VALUE d);
46
+
47
+ RUBY_SYMBOL_EXPORT_BEGIN
48
+ /* rational.c (export) */
49
+ VALUE rb_gcd(VALUE x, VALUE y);
50
+ VALUE rb_gcd_normal(VALUE self, VALUE other);
51
+ #if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H)
52
+ VALUE rb_gcd_gmp(VALUE x, VALUE y);
53
+ #endif
54
+ RUBY_SYMBOL_EXPORT_END
55
+
56
+ static inline void
57
+ RATIONAL_SET_NUM(VALUE r, VALUE n)
58
+ {
59
+ assert(RB_INTEGER_TYPE_P(n));
60
+ RB_OBJ_WRITE(r, &RRATIONAL(r)->num, n);
61
+ }
62
+
63
+ static inline void
64
+ RATIONAL_SET_DEN(VALUE r, VALUE d)
65
+ {
66
+ assert(RB_INTEGER_TYPE_P(d));
67
+ assert(INT_POSITIVE_P(d));
68
+ RB_OBJ_WRITE(r, &RRATIONAL(r)->den, d);
69
+ }
70
+
71
+ #endif /* INTERNAL_RATIONAL_H */
@@ -0,0 +1,28 @@
1
+ #ifndef INTERNAL_RE_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_RE_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for Regexp.
10
+ */
11
+ #include "ruby/internal/stdbool.h" /* for bool */
12
+ #include "ruby/ruby.h" /* for VALUE */
13
+
14
+ /* re.c */
15
+ VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
16
+ VALUE rb_reg_check_preprocess(VALUE);
17
+ long rb_reg_search0(VALUE, VALUE, long, int, int);
18
+ VALUE rb_reg_match_p(VALUE re, VALUE str, long pos);
19
+ bool rb_reg_start_with_p(VALUE re, VALUE str);
20
+ VALUE rb_reg_hash(VALUE re);
21
+ VALUE rb_reg_equal(VALUE re1, VALUE re2);
22
+ void rb_backref_set_string(VALUE string, long pos, long len);
23
+ void rb_match_unbusy(VALUE);
24
+ int rb_match_count(VALUE match);
25
+ VALUE rb_reg_new_ary(VALUE ary, int options);
26
+ VALUE rb_reg_last_defined(VALUE match);
27
+
28
+ #endif /* INTERNAL_RE_H */
@@ -0,0 +1,102 @@
1
+ #ifndef INTERNAL_RUBY_PARSE_H
2
+ #define INTERNAL_RUBY_PARSE_H
3
+
4
+ #include "internal.h"
5
+ #include "internal/bignum.h"
6
+ #include "internal/compilers.h"
7
+ #include "internal/complex.h"
8
+ #include "internal/parse.h"
9
+ #include "internal/rational.h"
10
+ #include "rubyparser.h"
11
+ #include "vm.h"
12
+
13
+ struct lex_pointer_string {
14
+ VALUE str;
15
+ long ptr;
16
+ };
17
+
18
+ RUBY_SYMBOL_EXPORT_BEGIN
19
+ #ifdef UNIVERSAL_PARSER
20
+ const rb_parser_config_t *rb_ruby_parser_config(void);
21
+ rb_parser_t *rb_parser_params_new(void);
22
+ #endif
23
+ VALUE rb_parser_set_context(VALUE, const struct rb_iseq_struct *, int);
24
+ VALUE rb_parser_new(void);
25
+ VALUE rb_parser_compile_string_path(VALUE vparser, VALUE fname, VALUE src, int line);
26
+ VALUE rb_str_new_parser_string(rb_parser_string_t *str);
27
+ VALUE rb_str_new_mutable_parser_string(rb_parser_string_t *str);
28
+ rb_parser_string_t *rb_parser_lex_get_str(struct parser_params *p, struct lex_pointer_string *ptr_str);
29
+
30
+ VALUE rb_node_str_string_val(const NODE *);
31
+ VALUE rb_node_sym_string_val(const NODE *);
32
+ VALUE rb_node_dstr_string_val(const NODE *);
33
+ VALUE rb_node_regx_string_val(const NODE *);
34
+ VALUE rb_node_dregx_string_val(const NODE *);
35
+ VALUE rb_node_line_lineno_val(const NODE *);
36
+ VALUE rb_node_file_path_val(const NODE *);
37
+ VALUE rb_node_encoding_val(const NODE *);
38
+
39
+ VALUE rb_node_integer_literal_val(const NODE *);
40
+ VALUE rb_node_float_literal_val(const NODE *);
41
+ VALUE rb_node_rational_literal_val(const NODE *);
42
+ VALUE rb_node_imaginary_literal_val(const NODE *);
43
+ RUBY_SYMBOL_EXPORT_END
44
+
45
+ VALUE rb_parser_end_seen_p(VALUE);
46
+ VALUE rb_parser_encoding(VALUE);
47
+ VALUE rb_parser_set_yydebug(VALUE, VALUE);
48
+ VALUE rb_parser_build_script_lines_from(rb_parser_ary_t *script_lines);
49
+ void rb_parser_set_options(VALUE, int, int, int, int);
50
+ VALUE rb_parser_load_file(VALUE parser, VALUE name);
51
+ void rb_parser_set_script_lines(VALUE vparser);
52
+ void rb_parser_error_tolerant(VALUE vparser);
53
+ void rb_parser_keep_tokens(VALUE vparser);
54
+
55
+ VALUE rb_parser_compile_string(VALUE, const char*, VALUE, int);
56
+ VALUE rb_parser_compile_file_path(VALUE vparser, VALUE fname, VALUE input, int line);
57
+ VALUE rb_parser_compile_generic(VALUE vparser, rb_parser_lex_gets_func *lex_gets, VALUE fname, VALUE input, int line);
58
+ VALUE rb_parser_compile_array(VALUE vparser, VALUE fname, VALUE array, int start);
59
+
60
+ enum lex_state_bits {
61
+ EXPR_BEG_bit, /* ignore newline, +/- is a sign. */
62
+ EXPR_END_bit, /* newline significant, +/- is an operator. */
63
+ EXPR_ENDARG_bit, /* ditto, and unbound braces. */
64
+ EXPR_ENDFN_bit, /* ditto, and unbound braces. */
65
+ EXPR_ARG_bit, /* newline significant, +/- is an operator. */
66
+ EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */
67
+ EXPR_MID_bit, /* newline significant, +/- is an operator. */
68
+ EXPR_FNAME_bit, /* ignore newline, no reserved words. */
69
+ EXPR_DOT_bit, /* right after `.', `&.' or `::', no reserved words. */
70
+ EXPR_CLASS_bit, /* immediate after `class', no here document. */
71
+ EXPR_LABEL_bit, /* flag bit, label is allowed. */
72
+ EXPR_LABELED_bit, /* flag bit, just after a label. */
73
+ EXPR_FITEM_bit, /* symbol literal as FNAME. */
74
+ EXPR_MAX_STATE
75
+ };
76
+ /* examine combinations */
77
+ enum lex_state_e {
78
+ #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
79
+ DEF_EXPR(BEG),
80
+ DEF_EXPR(END),
81
+ DEF_EXPR(ENDARG),
82
+ DEF_EXPR(ENDFN),
83
+ DEF_EXPR(ARG),
84
+ DEF_EXPR(CMDARG),
85
+ DEF_EXPR(MID),
86
+ DEF_EXPR(FNAME),
87
+ DEF_EXPR(DOT),
88
+ DEF_EXPR(CLASS),
89
+ DEF_EXPR(LABEL),
90
+ DEF_EXPR(LABELED),
91
+ DEF_EXPR(FITEM),
92
+ EXPR_VALUE = EXPR_BEG,
93
+ EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS),
94
+ EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
95
+ EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN),
96
+ EXPR_NONE = 0
97
+ };
98
+
99
+ VALUE rb_ruby_ast_new(const NODE *const root);
100
+ rb_ast_t *rb_ruby_ast_data_get(VALUE ast_value);
101
+
102
+ #endif /* INTERNAL_RUBY_PARSE_H */
@@ -0,0 +1,326 @@
1
+ #ifndef INTERNAL_SANITIZERS_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_SANITIZERS_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for ASAN / MSAN / etc.
10
+ */
11
+ #include "ruby/internal/config.h"
12
+ #include "internal/compilers.h" /* for __has_feature */
13
+
14
+ #ifdef HAVE_VALGRIND_MEMCHECK_H
15
+ # include <valgrind/memcheck.h>
16
+ #endif
17
+
18
+ #ifdef HAVE_SANITIZER_ASAN_INTERFACE_H
19
+ # if __has_feature(address_sanitizer)
20
+ # define RUBY_ASAN_ENABLED
21
+ # include <sanitizer/asan_interface.h>
22
+ # endif
23
+ #endif
24
+
25
+ #ifdef HAVE_SANITIZER_MSAN_INTERFACE_H
26
+ # if __has_feature(memory_sanitizer)
27
+ # define RUBY_MSAN_ENABLED
28
+ # include <sanitizer/msan_interface.h>
29
+ # endif
30
+ #endif
31
+
32
+ #include "ruby/internal/stdbool.h" /* for bool */
33
+ #include "ruby/ruby.h" /* for VALUE */
34
+
35
+ #if 0
36
+ #elif defined(RUBY_ASAN_ENABLED) && defined(RUBY_MSAN_ENABLED)
37
+ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
38
+ __attribute__((__no_sanitize__("memory, address"), __noinline__)) x
39
+ #elif defined(RUBY_ASAN_ENABLED)
40
+ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
41
+ __attribute__((__no_sanitize__("address"), __noinline__)) x
42
+ #elif defined(NO_SANITIZE_ADDRESS)
43
+ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
44
+ NO_SANITIZE_ADDRESS(NOINLINE(x))
45
+ #elif defined(NO_ADDRESS_SAFETY_ANALYSIS)
46
+ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
47
+ NO_ADDRESS_SAFETY_ANALYSIS(NOINLINE(x))
48
+ #else
49
+ # define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) x
50
+ #endif
51
+
52
+ #if defined(NO_SANITIZE) && RBIMPL_COMPILER_IS(GCC)
53
+ /* GCC warns about unknown sanitizer, which is annoying. */
54
+ # include "internal/warnings.h"
55
+ # undef NO_SANITIZE
56
+ # define NO_SANITIZE(x, y) \
57
+ COMPILER_WARNING_PUSH; \
58
+ COMPILER_WARNING_IGNORED(-Wattributes); \
59
+ __attribute__((__no_sanitize__(x))) y; \
60
+ COMPILER_WARNING_POP
61
+ #endif
62
+
63
+ #ifndef NO_SANITIZE
64
+ # define NO_SANITIZE(x, y) y
65
+ #endif
66
+
67
+ #ifndef RUBY_ASAN_ENABLED
68
+ # define __asan_poison_memory_region(x, y)
69
+ # define __asan_unpoison_memory_region(x, y)
70
+ # define __asan_region_is_poisoned(x, y) 0
71
+ # define __asan_get_current_fake_stack() NULL
72
+ # define __asan_addr_is_in_fake_stack(fake_stack, slot, start, end) NULL
73
+ #endif
74
+
75
+ #ifndef RUBY_MSAN_ENABLED
76
+ # define __msan_allocated_memory(x, y) ((void)(x), (void)(y))
77
+ # define __msan_poison(x, y) ((void)(x), (void)(y))
78
+ # define __msan_unpoison(x, y) ((void)(x), (void)(y))
79
+ # define __msan_unpoison_string(x) ((void)(x))
80
+ #endif
81
+
82
+ #ifdef VALGRIND_MAKE_READABLE
83
+ # define VALGRIND_MAKE_MEM_DEFINED(p, n) VALGRIND_MAKE_READABLE((p), (n))
84
+ #endif
85
+
86
+ #ifdef VALGRIND_MAKE_WRITABLE
87
+ # define VALGRIND_MAKE_MEM_UNDEFINED(p, n) VALGRIND_MAKE_WRITABLE((p), (n))
88
+ #endif
89
+
90
+ #ifndef VALGRIND_MAKE_MEM_DEFINED
91
+ # define VALGRIND_MAKE_MEM_DEFINED(p, n) 0
92
+ #endif
93
+
94
+ #ifndef VALGRIND_MAKE_MEM_UNDEFINED
95
+ # define VALGRIND_MAKE_MEM_UNDEFINED(p, n) 0
96
+ #endif
97
+
98
+ /**
99
+ * This function asserts that a (continuous) memory region from ptr to size
100
+ * being "poisoned". Both read / write access to such memory region are
101
+ * prohibited until properly unpoisoned. The region must be previously
102
+ * allocated (do not pass a freed pointer here), but not necessarily be an
103
+ * entire object that the malloc returns. You can punch hole a part of a
104
+ * gigantic heap arena. This is handy when you do not free an allocated memory
105
+ * region to reuse later: poison when you keep it unused, and unpoison when you
106
+ * reuse.
107
+ *
108
+ * @param[in] ptr pointer to the beginning of the memory region to poison.
109
+ * @param[in] size the length of the memory region to poison.
110
+ */
111
+ static inline void
112
+ asan_poison_memory_region(const volatile void *ptr, size_t size)
113
+ {
114
+ __msan_poison(ptr, size);
115
+ __asan_poison_memory_region(ptr, size);
116
+ }
117
+
118
+ /**
119
+ * This is a variant of asan_poison_memory_region that takes a VALUE.
120
+ *
121
+ * @param[in] obj target object.
122
+ */
123
+ static inline void
124
+ asan_poison_object(VALUE obj)
125
+ {
126
+ MAYBE_UNUSED(struct RVALUE *) ptr = (void *)obj;
127
+ asan_poison_memory_region(ptr, SIZEOF_VALUE);
128
+ }
129
+
130
+ #ifdef RUBY_ASAN_ENABLED
131
+ #define asan_poison_object_if(ptr, obj) do { \
132
+ if (ptr) asan_poison_object(obj); \
133
+ } while (0)
134
+ #else
135
+ #define asan_poison_object_if(ptr, obj) ((void)(ptr), (void)(obj))
136
+ #endif
137
+
138
+ /**
139
+ * This function predicates if the given object is fully addressable or not.
140
+ *
141
+ * @param[in] obj target object.
142
+ * @retval 0 the given object is fully addressable.
143
+ * @retval otherwise pointer to first such byte who is poisoned.
144
+ */
145
+ static inline void *
146
+ asan_poisoned_object_p(VALUE obj)
147
+ {
148
+ MAYBE_UNUSED(struct RVALUE *) ptr = (void *)obj;
149
+ return __asan_region_is_poisoned(ptr, SIZEOF_VALUE);
150
+ }
151
+
152
+ /**
153
+ * This function asserts that a (formally poisoned) memory region from ptr to
154
+ * size is now addressable. Write access to such memory region gets allowed.
155
+ * However read access might or might not be possible depending on situations,
156
+ * because the region can have contents of previous usages. That information
157
+ * should be passed by the malloc_p flag. If that is true, the contents of the
158
+ * region is _not_ fully defined (like the return value of malloc behaves).
159
+ * Reading from there is NG; write something first. If malloc_p is false on
160
+ * the other hand, that memory region is fully defined and can be read
161
+ * immediately.
162
+ *
163
+ * @param[in] ptr pointer to the beginning of the memory region to unpoison.
164
+ * @param[in] size the length of the memory region.
165
+ * @param[in] malloc_p if the memory region is like a malloc's return value or not.
166
+ */
167
+ static inline void
168
+ asan_unpoison_memory_region(const volatile void *ptr, size_t size, bool malloc_p)
169
+ {
170
+ __asan_unpoison_memory_region(ptr, size);
171
+ if (malloc_p) {
172
+ __msan_allocated_memory(ptr, size);
173
+ }
174
+ else {
175
+ __msan_unpoison(ptr, size);
176
+ }
177
+ }
178
+
179
+ /**
180
+ * This is a variant of asan_unpoison_memory_region that takes a VALUE.
181
+ *
182
+ * @param[in] obj target object.
183
+ * @param[in] malloc_p if the memory region is like a malloc's return value or not.
184
+ */
185
+ static inline void
186
+ asan_unpoison_object(VALUE obj, bool newobj_p)
187
+ {
188
+ MAYBE_UNUSED(struct RVALUE *) ptr = (void *)obj;
189
+ asan_unpoison_memory_region(ptr, SIZEOF_VALUE, newobj_p);
190
+ }
191
+
192
+ static inline void *
193
+ asan_unpoison_object_temporary(VALUE obj)
194
+ {
195
+ void *ptr = asan_poisoned_object_p(obj);
196
+ asan_unpoison_object(obj, false);
197
+ return ptr;
198
+ }
199
+
200
+ static inline void *
201
+ asan_poison_object_restore(VALUE obj, void *ptr)
202
+ {
203
+ if (ptr) {
204
+ asan_poison_object(obj);
205
+ }
206
+ return NULL;
207
+ }
208
+
209
+ #define asan_unpoisoning_object(obj) \
210
+ for (void *poisoned = asan_unpoison_object_temporary(obj), \
211
+ *unpoisoning = &poisoned; /* flag to loop just once */ \
212
+ unpoisoning; \
213
+ unpoisoning = asan_poison_object_restore(obj, poisoned))
214
+
215
+
216
+ static inline void *
217
+ asan_unpoison_memory_region_temporary(void *ptr, size_t len)
218
+ {
219
+ void *poisoned_ptr = __asan_region_is_poisoned(ptr, len);
220
+ asan_unpoison_memory_region(ptr, len, false);
221
+ return poisoned_ptr;
222
+ }
223
+
224
+ static inline void *
225
+ asan_poison_memory_region_restore(void *ptr, size_t len, void *poisoned_ptr)
226
+ {
227
+ if (poisoned_ptr) {
228
+ asan_poison_memory_region(ptr, len);
229
+ }
230
+ return NULL;
231
+ }
232
+
233
+ #define asan_unpoisoning_memory_region(ptr, len) \
234
+ for (void *poisoned = asan_unpoison_memory_region_temporary(ptr, len), \
235
+ *unpoisoning = &poisoned; /* flag to loop just once */ \
236
+ unpoisoning; \
237
+ unpoisoning = asan_poison_memory_region_restore(ptr, len, poisoned))
238
+
239
+ /**
240
+ * Checks if the given pointer is on an ASAN fake stack. If so, it returns the
241
+ * address this variable has on the real frame; if not, it returns the origin
242
+ * address unmodified.
243
+ *
244
+ * n.b. - _dereferencing_ the returned address is meaningless and should not
245
+ * be done; even though ASAN reserves space for the variable in both the real and
246
+ * fake stacks, the _value_ of that variable is only in the fake stack.
247
+ *
248
+ * n.b. - this only works for addresses passed in from local variables on the same
249
+ * thread, because the ASAN fake stacks are threadlocal.
250
+ *
251
+ * @param[in] slot the address of some local variable
252
+ * @retval a pointer to something from that frame on the _real_ machine stack
253
+ */
254
+ static inline void *
255
+ asan_get_real_stack_addr(void* slot)
256
+ {
257
+ VALUE *addr;
258
+ addr = __asan_addr_is_in_fake_stack(__asan_get_current_fake_stack(), slot, NULL, NULL);
259
+ return addr ? addr : slot;
260
+ }
261
+
262
+ /**
263
+ * Gets the current thread's fake stack handle, which can be passed into get_fake_stack_extents
264
+ *
265
+ * @retval An opaque value which can be passed to asan_get_fake_stack_extents
266
+ */
267
+ static inline void *
268
+ asan_get_thread_fake_stack_handle(void)
269
+ {
270
+ return __asan_get_current_fake_stack();
271
+ }
272
+
273
+ /**
274
+ * Checks if the given VALUE _actually_ represents a pointer to an ASAN fake stack.
275
+ *
276
+ * If the given slot _is_ actually a reference to an ASAN fake stack, and that fake stack
277
+ * contains the real values for the passed-in range of machine stack addresses, returns true
278
+ * and the range of the fake stack through the outparams.
279
+ *
280
+ * Otherwise, returns false, and sets the outparams to NULL.
281
+ *
282
+ * Note that this function expects "start" to be > "end" on downward-growing stack architectures;
283
+ *
284
+ * @param[in] thread_fake_stack_handle The asan fake stack reference for the thread we're scanning
285
+ * @param[in] slot The value on the machine stack we want to inspect
286
+ * @param[in] machine_stack_start The extents of the real machine stack on which slot lives
287
+ * @param[in] machine_stack_end The extents of the real machine stack on which slot lives
288
+ * @param[out] fake_stack_start_out The extents of the fake stack which contains real VALUEs
289
+ * @param[out] fake_stack_end_out The extents of the fake stack which contains real VALUEs
290
+ * @return Whether slot is a pointer to a fake stack for the given machine stack range
291
+ */
292
+
293
+ static inline bool
294
+ asan_get_fake_stack_extents(void *thread_fake_stack_handle, VALUE slot,
295
+ void *machine_stack_start, void *machine_stack_end,
296
+ void **fake_stack_start_out, void **fake_stack_end_out)
297
+ {
298
+ /* the ifdef is needed here to suppress a warning about fake_frame_{start/end} being
299
+ uninitialized if __asan_addr_is_in_fake_stack is an empty macro */
300
+ #ifdef RUBY_ASAN_ENABLED
301
+ void *fake_frame_start;
302
+ void *fake_frame_end;
303
+ void *real_stack_frame = __asan_addr_is_in_fake_stack(
304
+ thread_fake_stack_handle, (void *)slot, &fake_frame_start, &fake_frame_end
305
+ );
306
+ if (real_stack_frame) {
307
+ bool in_range;
308
+ #if STACK_GROW_DIRECTION < 0
309
+ in_range = machine_stack_start >= real_stack_frame && real_stack_frame >= machine_stack_end;
310
+ #else
311
+ in_range = machine_stack_start <= real_stack_frame && real_stack_frame <= machine_stack_end;
312
+ #endif
313
+ if (in_range) {
314
+ *fake_stack_start_out = fake_frame_start;
315
+ *fake_stack_end_out = fake_frame_end;
316
+ return true;
317
+ }
318
+ }
319
+ #endif
320
+ *fake_stack_start_out = 0;
321
+ *fake_stack_end_out = 0;
322
+ return false;
323
+ }
324
+
325
+
326
+ #endif /* INTERNAL_SANITIZERS_H */
@@ -0,0 +1,23 @@
1
+ #ifndef INTERNAL_SERIAL_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_SERIAL_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for rb_serial_t.
10
+ */
11
+ #include "ruby/internal/config.h" /* for HAVE_LONG_LONG */
12
+ #include "ruby/defines.h" /* for LONG_LONG */
13
+
14
+ #ifndef HAVE_LONG_LONG
15
+ # error need C99+
16
+ #endif
17
+
18
+ typedef unsigned LONG_LONG rb_serial_t;
19
+ #define SERIALT2NUM ULL2NUM
20
+ #define PRI_SERIALT_PREFIX PRI_LL_PREFIX
21
+ #define SIZEOF_SERIAL_T SIZEOF_LONG_LONG
22
+
23
+ #endif /* INTERNAL_SERIAL_H */
@@ -0,0 +1,24 @@
1
+ #ifndef INTERNAL_SIGNAL_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_SIGNAL_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief Internal header for SignalException.
10
+ */
11
+
12
+ /* signal.c */
13
+ extern int ruby_enable_coredump;
14
+ int rb_get_next_signal(void);
15
+
16
+ #ifdef POSIX_SIGNAL
17
+ void (*ruby_posix_signal(int, void (*)(int)))(int);
18
+ #endif
19
+
20
+ RUBY_SYMBOL_EXPORT_BEGIN
21
+ /* signal.c (export) */
22
+ RUBY_SYMBOL_EXPORT_END
23
+
24
+ #endif /* INTERNAL_SIGNAL_H */
@@ -0,0 +1,11 @@
1
+ #ifndef INTERNAL_ST_H
2
+ #define INTERNAL_ST_H
3
+
4
+ #include "include/ruby/st.h"
5
+
6
+ st_table *rb_st_replace(st_table *new_tab, st_table *old_tab);
7
+ #define st_replace rb_st_replace
8
+ st_table *rb_st_init_existing_table_with_size(st_table *tab, const struct st_hash_type *type, st_index_t size);
9
+ #define st_init_existing_table_with_size rb_st_init_existing_table_with_size
10
+
11
+ #endif
@@ -0,0 +1,16 @@
1
+ #ifndef INTERNAL_STATIC_ASSERT_H /*-*-C-*-vi:se ft=c:*/
2
+ #define INTERNAL_STATIC_ASSERT_H
3
+ /**
4
+ * @author Ruby developers <ruby-core@ruby-lang.org>
5
+ * @copyright This file is a part of the programming language Ruby.
6
+ * Permission is hereby granted, to either redistribute and/or
7
+ * modify this file, provided that the conditions mentioned in the
8
+ * file COPYING are met. Consult the file for details.
9
+ * @brief C11 shim for _Static_assert.
10
+ */
11
+ #include "ruby/internal/static_assert.h"
12
+ #ifndef STATIC_ASSERT
13
+ # define STATIC_ASSERT RBIMPL_STATIC_ASSERT
14
+ #endif
15
+
16
+ #endif /* INTERNAL_STATIC_ASSERT_H */