debase-ruby_core_source 4.0.1 → 4.1.0.preview1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/addr2line.h +22 -0
  4. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/builtin.h +127 -0
  5. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/build_assert/build_assert.h +40 -0
  6. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/check_type/check_type.h +63 -0
  7. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/container_of/container_of.h +142 -0
  8. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/list/list.h +791 -0
  9. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ccan/str/str.h +17 -0
  10. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/constant.h +53 -0
  11. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/darray.h +295 -0
  12. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/debug_counter.h +428 -0
  13. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/dln.h +33 -0
  14. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/encindex.h +70 -0
  15. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/eval_intern.h +356 -0
  16. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/hrtime.h +237 -0
  17. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/id.h +365 -0
  18. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/id_table.h +74 -0
  19. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/insns.inc +315 -0
  20. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/insns_info.inc +11637 -0
  21. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/array.h +158 -0
  22. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/basic_operators.h +67 -0
  23. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/bignum.h +249 -0
  24. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/bits.h +647 -0
  25. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/box.h +103 -0
  26. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/class.h +797 -0
  27. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/cmdlineopt.h +64 -0
  28. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/compar.h +30 -0
  29. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/compile.h +34 -0
  30. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/compilers.h +104 -0
  31. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/complex.h +29 -0
  32. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/concurrent_set.h +21 -0
  33. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/cont.h +33 -0
  34. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/coverage.h +51 -0
  35. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/dir.h +16 -0
  36. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/enc.h +19 -0
  37. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/encoding.h +40 -0
  38. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/enum.h +18 -0
  39. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/enumerator.h +21 -0
  40. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/error.h +287 -0
  41. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/eval.h +43 -0
  42. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/file.h +40 -0
  43. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/fixnum.h +185 -0
  44. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/gc.h +411 -0
  45. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/hash.h +220 -0
  46. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/imemo.h +302 -0
  47. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/inits.h +54 -0
  48. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/io.h +167 -0
  49. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/io_buffer.h +36 -0
  50. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/jit.h +23 -0
  51. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/load.h +20 -0
  52. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/loadpath.h +16 -0
  53. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/marshal.h +17 -0
  54. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/math.h +23 -0
  55. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/missing.h +19 -0
  56. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/numeric.h +326 -0
  57. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/object.h +88 -0
  58. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/objspace.h +24 -0
  59. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/parse.h +131 -0
  60. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/proc.h +34 -0
  61. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/process.h +124 -0
  62. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/ractor.h +9 -0
  63. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/random.h +17 -0
  64. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/range.h +46 -0
  65. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/rational.h +92 -0
  66. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/re.h +87 -0
  67. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/ruby_parser.h +109 -0
  68. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/sanitizers.h +346 -0
  69. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/scheduler.h +7 -0
  70. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/serial.h +23 -0
  71. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/set.h +20 -0
  72. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/set_table.h +77 -0
  73. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/signal.h +25 -0
  74. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/simd.h +18 -0
  75. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/st.h +32 -0
  76. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/static_assert.h +16 -0
  77. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/string.h +240 -0
  78. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/struct.h +120 -0
  79. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/symbol.h +46 -0
  80. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/thread.h +108 -0
  81. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/time.h +34 -0
  82. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/transcode.h +23 -0
  83. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/util.h +27 -0
  84. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/variable.h +81 -0
  85. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/vm.h +144 -0
  86. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/vm_map.h +95 -0
  87. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal/warnings.h +16 -0
  88. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/internal.h +106 -0
  89. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/iseq.h +439 -0
  90. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/known_errors.inc +1419 -0
  91. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/method.h +279 -0
  92. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/node.h +122 -0
  93. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/node_name.inc +224 -0
  94. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/optinsn.inc +128 -0
  95. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/optunifs.inc +41 -0
  96. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parse.h +246 -0
  97. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_bits.h +647 -0
  98. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_node.h +32 -0
  99. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_st.h +161 -0
  100. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/parser_value.h +116 -0
  101. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/arena.h +37 -0
  102. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/ast.h +10371 -0
  103. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/buffer.h +52 -0
  104. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/comments.h +43 -0
  105. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/accel.h +19 -0
  106. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/align.h +36 -0
  107. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/assume.h +25 -0
  108. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/exported.h +24 -0
  109. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/fallthrough.h +22 -0
  110. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/filesystem.h +32 -0
  111. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/flex_array.h +19 -0
  112. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/force_inline.h +21 -0
  113. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/format.h +25 -0
  114. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/inline.h +17 -0
  115. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/nodiscard.h +22 -0
  116. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/nonnull.h +18 -0
  117. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/compiler/unused.h +18 -0
  118. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/constant_pool.h +81 -0
  119. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/diagnostic.h +93 -0
  120. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/errors_format.h +53 -0
  121. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/excludes.h +29 -0
  122. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/extension.h +19 -0
  123. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/integer.h +41 -0
  124. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/allocator.h +68 -0
  125. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/allocator_debug.h +88 -0
  126. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/arena.h +108 -0
  127. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/bit.h +42 -0
  128. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/buffer.h +91 -0
  129. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/char.h +139 -0
  130. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/comments.h +20 -0
  131. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/constant_pool.h +152 -0
  132. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/diagnostic.h +389 -0
  133. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/encoding.h +242 -0
  134. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/integer.h +68 -0
  135. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/isinf.h +16 -0
  136. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/line_offset_list.h +34 -0
  137. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/list.h +62 -0
  138. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/magic_comments.h +23 -0
  139. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/memchr.h +15 -0
  140. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/node.h +32 -0
  141. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/options.h +224 -0
  142. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/parser.h +971 -0
  143. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/regexp.h +42 -0
  144. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/serialize.h +39 -0
  145. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/source.h +72 -0
  146. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/static_literals.h +100 -0
  147. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/stringy.h +35 -0
  148. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/strncasecmp.h +18 -0
  149. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/strpbrk.h +33 -0
  150. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/internal/tokens.h +11 -0
  151. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/json.h +32 -0
  152. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/line_offset_list.h +61 -0
  153. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/magic_comments.h +35 -0
  154. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/node.h +94 -0
  155. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/options.h +335 -0
  156. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/parser.h +348 -0
  157. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/prettyprint.h +31 -0
  158. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/prism.h +131 -0
  159. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/serialize.h +115 -0
  160. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/source.h +155 -0
  161. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/stream.h +28 -0
  162. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/string_query.h +63 -0
  163. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/stringy.h +72 -0
  164. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism/version.h +38 -0
  165. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism_compile.h +204 -0
  166. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/prism_xallocator.h +6 -0
  167. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/probes_helper.h +42 -0
  168. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ractor_core.h +421 -0
  169. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/regenc.h +261 -0
  170. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/regint.h +983 -0
  171. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/regparse.h +371 -0
  172. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/revision.h +5 -0
  173. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ruby_assert.h +14 -0
  174. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/ruby_atomic.h +115 -0
  175. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/rubyparser.h +1389 -0
  176. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/shape.h +733 -0
  177. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/siphash.h +48 -0
  178. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/symbol.h +116 -0
  179. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_none.h +25 -0
  180. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_pthread.h +63 -0
  181. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_sched.h +271 -0
  182. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/thread_win32.h +48 -0
  183. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/timev.h +58 -0
  184. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/transcode_data.h +138 -0
  185. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/variable.h +26 -0
  186. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/version.h +69 -0
  187. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm.inc +6457 -0
  188. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_call_iseq_optimized.inc +244 -0
  189. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_callinfo.h +688 -0
  190. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_core.h +2509 -0
  191. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_debug.h +124 -0
  192. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_exec.h +202 -0
  193. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_insnhelper.h +280 -0
  194. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_opts.h +65 -0
  195. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vm_sync.h +160 -0
  196. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/vmtc.inc +302 -0
  197. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/yjit.h +87 -0
  198. data/lib/debase/ruby_core_source/ruby-4.1.0-preview1/zjit.h +221 -0
  199. data/lib/debase/ruby_core_source/version.rb +1 -1
  200. metadata +2930 -2724
@@ -0,0 +1,152 @@
1
+ #ifndef PRISM_INTERNAL_CONSTANT_POOL_H
2
+ #define PRISM_INTERNAL_CONSTANT_POOL_H
3
+
4
+ #include "prism/constant_pool.h"
5
+
6
+ #include "prism/arena.h"
7
+ #include "prism/compiler/inline.h"
8
+
9
+ #include <stdbool.h>
10
+
11
+ /* A constant in the pool which effectively stores a string. */
12
+ struct pm_constant_t {
13
+ /* A pointer to the start of the string. */
14
+ const uint8_t *start;
15
+
16
+ /* The length of the string. */
17
+ size_t length;
18
+ };
19
+
20
+ /*
21
+ * The type of bucket in the constant pool hash map. This determines how the
22
+ * bucket should be freed.
23
+ */
24
+ typedef unsigned int pm_constant_pool_bucket_type_t;
25
+
26
+ /* By default, each constant is a slice of the source. */
27
+ static const pm_constant_pool_bucket_type_t PM_CONSTANT_POOL_BUCKET_DEFAULT = 0;
28
+
29
+ /* An owned constant is one for which memory has been allocated. */
30
+ static const pm_constant_pool_bucket_type_t PM_CONSTANT_POOL_BUCKET_OWNED = 1;
31
+
32
+ /* A constant constant is known at compile time. */
33
+ static const pm_constant_pool_bucket_type_t PM_CONSTANT_POOL_BUCKET_CONSTANT = 2;
34
+
35
+ /* A bucket in the hash map. */
36
+ typedef struct {
37
+ /* The incremental ID used for indexing back into the pool. */
38
+ unsigned int id: 30;
39
+
40
+ /* The type of the bucket, which determines how to free it. */
41
+ pm_constant_pool_bucket_type_t type: 2;
42
+
43
+ /* The hash of the bucket. */
44
+ uint32_t hash;
45
+
46
+ /*
47
+ * A pointer to the start of the string, stored directly in the bucket to
48
+ * avoid a pointer chase to the constants array during probing.
49
+ */
50
+ const uint8_t *start;
51
+
52
+ /* The length of the string. */
53
+ size_t length;
54
+ } pm_constant_pool_bucket_t;
55
+
56
+ /* The overall constant pool, which stores constants found while parsing. */
57
+ struct pm_constant_pool_t {
58
+ /* The buckets in the hash map. */
59
+ pm_constant_pool_bucket_t *buckets;
60
+
61
+ /* The constants that are stored in the buckets. */
62
+ pm_constant_t *constants;
63
+
64
+ /* The number of buckets in the hash map. */
65
+ uint32_t size;
66
+
67
+ /* The number of buckets that have been allocated in the hash map. */
68
+ uint32_t capacity;
69
+ };
70
+
71
+ /*
72
+ * When we allocate constants into the pool, we reserve 0 to mean that the slot
73
+ * is not yet filled. This constant is reused in other places to indicate the
74
+ * lack of a constant id.
75
+ */
76
+ #define PM_CONSTANT_ID_UNSET 0
77
+
78
+ /* Initialize a list of constant ids with a given capacity. */
79
+ void pm_constant_id_list_init_capacity(pm_arena_t *arena, pm_constant_id_list_t *list, size_t capacity);
80
+
81
+ /* Insert a constant id into a list of constant ids at the specified index. */
82
+ void pm_constant_id_list_insert(pm_constant_id_list_t *list, size_t index, pm_constant_id_t id);
83
+
84
+ /*
85
+ * Mix the bits of a constant id so that ids which are close together, as
86
+ * sequentially assigned ids are, land in unrelated slots of a hash table.
87
+ */
88
+ static PRISM_INLINE uint32_t
89
+ pm_constant_id_hash(pm_constant_id_t id) {
90
+ id = ((id >> 16) ^ id) * 0x45d9f3b;
91
+ id = ((id >> 16) ^ id) * 0x45d9f3b;
92
+ id = (id >> 16) ^ id;
93
+ return id;
94
+ }
95
+
96
+ /*
97
+ * A set of constant ids, for where the parser only needs to know whether it has
98
+ * already seen a name, as with the variables a pattern captures or the named
99
+ * capture groups of a regular expression.
100
+ */
101
+ typedef struct {
102
+ /* The number of ids in the set. */
103
+ size_t size;
104
+
105
+ /* The number of slots in `ids`, either zero or a power of two. */
106
+ size_t capacity;
107
+
108
+ /*
109
+ * An open-addressed table of the ids in the set, where PM_CONSTANT_ID_UNSET
110
+ * marks an empty slot. It is NULL until the first id is added.
111
+ */
112
+ pm_constant_id_t *ids;
113
+ } pm_constant_id_set_t;
114
+
115
+ /*
116
+ * Add a constant id, which must not be PM_CONSTANT_ID_UNSET, to the set.
117
+ * Returns whether the set did not already contain it.
118
+ */
119
+ bool pm_constant_id_set_insert(pm_arena_t *arena, pm_constant_id_set_t *set, pm_constant_id_t id);
120
+
121
+ /* Initialize a new constant pool with a given capacity. */
122
+ void pm_constant_pool_init(pm_arena_t *arena, pm_constant_pool_t *pool, uint32_t capacity);
123
+
124
+ /* Return a pointer to the constant indicated by the given constant id. */
125
+ pm_constant_t * pm_constant_pool_id_to_constant(const pm_constant_pool_t *pool, pm_constant_id_t constant_id);
126
+
127
+ /*
128
+ * Find a constant in a constant pool. Returns the id of the constant, or 0 if
129
+ * the constant is not found.
130
+ */
131
+ pm_constant_id_t pm_constant_pool_find(const pm_constant_pool_t *pool, const uint8_t *start, size_t length);
132
+
133
+ /*
134
+ * Insert a constant into a constant pool that is a slice of a source string.
135
+ * Returns the id of the constant, or 0 if any potential calls to resize fail.
136
+ */
137
+ pm_constant_id_t pm_constant_pool_insert_shared(pm_arena_t *arena, pm_constant_pool_t *pool, const uint8_t *start, size_t length);
138
+
139
+ /*
140
+ * Insert a constant into a constant pool from memory that is now owned by the
141
+ * constant pool. Returns the id of the constant, or 0 if any potential calls to
142
+ * resize fail.
143
+ */
144
+ pm_constant_id_t pm_constant_pool_insert_owned(pm_arena_t *arena, pm_constant_pool_t *pool, uint8_t *start, size_t length);
145
+
146
+ /*
147
+ * Insert a constant into a constant pool from memory that is constant. Returns
148
+ * the id of the constant, or 0 if any potential calls to resize fail.
149
+ */
150
+ pm_constant_id_t pm_constant_pool_insert_constant(pm_arena_t *arena, pm_constant_pool_t *pool, const uint8_t *start, size_t length);
151
+
152
+ #endif
@@ -0,0 +1,389 @@
1
+ /*----------------------------------------------------------------------------*/
2
+ /* This file is generated by the templates/template.rb script and should not */
3
+ /* be modified manually. See */
4
+ /* templates/include/prism/internal/diagnostic.h.erb */
5
+ /* if you are looking to modify the */
6
+ /* template */
7
+ /*----------------------------------------------------------------------------*/
8
+
9
+ #ifndef PRISM_INTERNAL_DIAGNOSTIC_H
10
+ #define PRISM_INTERNAL_DIAGNOSTIC_H
11
+
12
+ #include "prism/internal/list.h"
13
+
14
+ #include "prism/arena.h"
15
+ #include "prism/diagnostic.h"
16
+
17
+ /*
18
+ * The diagnostic IDs of all of the diagnostics, used to communicate the types
19
+ * of errors between the parser and the user.
20
+ */
21
+ typedef enum {
22
+ /* These are the error diagnostics. */
23
+ PM_ERR_ALIAS_ARGUMENT,
24
+ PM_ERR_ALIAS_ARGUMENT_NUMBERED_REFERENCE,
25
+ PM_ERR_AMPAMPEQ_MULTI_ASSIGN,
26
+ PM_ERR_ARGUMENT_AFTER_BLOCK,
27
+ PM_ERR_ARGUMENT_AFTER_FORWARDING_ELLIPSES,
28
+ PM_ERR_ARGUMENT_BARE_HASH,
29
+ PM_ERR_ARGUMENT_BLOCK_MULTI,
30
+ PM_ERR_ARGUMENT_CONFLICT_AMPERSAND,
31
+ PM_ERR_ARGUMENT_CONFLICT_STAR,
32
+ PM_ERR_ARGUMENT_CONFLICT_STAR_STAR,
33
+ PM_ERR_ARGUMENT_FORMAL_CLASS,
34
+ PM_ERR_ARGUMENT_FORMAL_CONSTANT,
35
+ PM_ERR_ARGUMENT_FORMAL_GLOBAL,
36
+ PM_ERR_ARGUMENT_FORMAL_IVAR,
37
+ PM_ERR_ARGUMENT_FORWARDING_UNBOUND,
38
+ PM_ERR_ARGUMENT_NO_FORWARDING_AMPERSAND,
39
+ PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES,
40
+ PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES_LAMBDA,
41
+ PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES_BLOCK,
42
+ PM_ERR_ARGUMENT_NO_FORWARDING_STAR,
43
+ PM_ERR_ARGUMENT_NO_FORWARDING_STAR_STAR,
44
+ PM_ERR_ARGUMENT_SPLAT_AFTER_ASSOC_SPLAT,
45
+ PM_ERR_ARGUMENT_SPLAT_AFTER_SPLAT,
46
+ PM_ERR_ARGUMENT_TERM_PAREN,
47
+ PM_ERR_ARGUMENT_UNEXPECTED_BLOCK,
48
+ PM_ERR_ARRAY_ELEMENT,
49
+ PM_ERR_ARRAY_EXPRESSION,
50
+ PM_ERR_ARRAY_EXPRESSION_AFTER_STAR,
51
+ PM_ERR_ARRAY_SEPARATOR,
52
+ PM_ERR_ARRAY_TERM,
53
+ PM_ERR_BEGIN_LONELY_ELSE,
54
+ PM_ERR_BEGIN_TERM,
55
+ PM_ERR_BEGIN_UPCASE_BRACE,
56
+ PM_ERR_BEGIN_UPCASE_TERM,
57
+ PM_ERR_BEGIN_UPCASE_TOPLEVEL,
58
+ PM_ERR_BLOCK_PARAM_LOCAL_VARIABLE,
59
+ PM_ERR_BLOCK_PARAM_PIPE_TERM,
60
+ PM_ERR_BLOCK_TERM_BRACE,
61
+ PM_ERR_BLOCK_TERM_END,
62
+ PM_ERR_CANNOT_PARSE_EXPRESSION,
63
+ PM_ERR_CANNOT_PARSE_STRING_PART,
64
+ PM_ERR_CASE_EXPRESSION_AFTER_CASE,
65
+ PM_ERR_CASE_EXPRESSION_AFTER_WHEN,
66
+ PM_ERR_CASE_MATCH_MISSING_PREDICATE,
67
+ PM_ERR_CASE_MISSING_CONDITIONS,
68
+ PM_ERR_CASE_TERM,
69
+ PM_ERR_CLASS_IN_METHOD,
70
+ PM_ERR_CLASS_NAME,
71
+ PM_ERR_CLASS_SUPERCLASS,
72
+ PM_ERR_CLASS_TERM,
73
+ PM_ERR_CLASS_UNEXPECTED_END,
74
+ PM_ERR_CLASS_VARIABLE_BARE,
75
+ PM_ERR_CONDITIONAL_ELSIF_PREDICATE,
76
+ PM_ERR_CONDITIONAL_IF_PREDICATE,
77
+ PM_ERR_CONDITIONAL_PREDICATE_TERM,
78
+ PM_ERR_CONDITIONAL_TERM,
79
+ PM_ERR_CONDITIONAL_TERM_ELSE,
80
+ PM_ERR_CONDITIONAL_UNLESS_PREDICATE,
81
+ PM_ERR_CONDITIONAL_UNTIL_PREDICATE,
82
+ PM_ERR_CONDITIONAL_WHILE_PREDICATE,
83
+ PM_ERR_CONSTANT_PATH_COLON_COLON_CONSTANT,
84
+ PM_ERR_DEF_ENDLESS,
85
+ PM_ERR_DEF_ENDLESS_PARAMETERS,
86
+ PM_ERR_DEF_ENDLESS_SETTER,
87
+ PM_ERR_DEF_ENDLESS_DO_BLOCK,
88
+ PM_ERR_DEF_NAME,
89
+ PM_ERR_DEF_PARAMS_TERM,
90
+ PM_ERR_DEF_PARAMS_TERM_PAREN,
91
+ PM_ERR_DEF_RECEIVER,
92
+ PM_ERR_DEF_RECEIVER_TERM,
93
+ PM_ERR_DEF_TERM,
94
+ PM_ERR_DEFINED_EXPRESSION,
95
+ PM_ERR_EMBDOC_TERM,
96
+ PM_ERR_EMBEXPR_END,
97
+ PM_ERR_EMBVAR_INVALID,
98
+ PM_ERR_END_UPCASE_BRACE,
99
+ PM_ERR_END_UPCASE_TERM,
100
+ PM_ERR_ESCAPE_INVALID_CONTROL,
101
+ PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT,
102
+ PM_ERR_ESCAPE_INVALID_HEXADECIMAL,
103
+ PM_ERR_ESCAPE_INVALID_META,
104
+ PM_ERR_ESCAPE_INVALID_META_REPEAT,
105
+ PM_ERR_ESCAPE_INVALID_UNICODE,
106
+ PM_ERR_ESCAPE_INVALID_UNICODE_CM_FLAGS,
107
+ PM_ERR_ESCAPE_INVALID_UNICODE_LIST,
108
+ PM_ERR_ESCAPE_INVALID_UNICODE_LITERAL,
109
+ PM_ERR_ESCAPE_INVALID_UNICODE_LONG,
110
+ PM_ERR_ESCAPE_INVALID_UNICODE_SHORT,
111
+ PM_ERR_ESCAPE_INVALID_UNICODE_TERM,
112
+ PM_ERR_EXPECT_ARGUMENT,
113
+ PM_ERR_EXPECT_EOL_AFTER_STATEMENT,
114
+ PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ,
115
+ PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA,
116
+ PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL,
117
+ PM_ERR_EXPECT_EXPRESSION_AFTER_LESS_LESS,
118
+ PM_ERR_EXPECT_EXPRESSION_AFTER_LPAREN,
119
+ PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR,
120
+ PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ,
121
+ PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT,
122
+ PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH,
123
+ PM_ERR_EXPECT_EXPRESSION_AFTER_STAR,
124
+ PM_ERR_EXPECT_FOR_DELIMITER,
125
+ PM_ERR_EXPECT_IDENT_REQ_PARAMETER,
126
+ PM_ERR_EXPECT_IN_DELIMITER,
127
+ PM_ERR_EXPECT_LPAREN_AFTER_NOT_LPAREN,
128
+ PM_ERR_EXPECT_LPAREN_AFTER_NOT_OTHER,
129
+ PM_ERR_EXPECT_LPAREN_REQ_PARAMETER,
130
+ PM_ERR_EXPECT_MESSAGE,
131
+ PM_ERR_EXPECT_RBRACKET,
132
+ PM_ERR_EXPECT_RPAREN,
133
+ PM_ERR_EXPECT_RPAREN_AFTER_MULTI,
134
+ PM_ERR_EXPECT_RPAREN_REQ_PARAMETER,
135
+ PM_ERR_EXPECT_SINGLETON_CLASS_DELIMITER,
136
+ PM_ERR_EXPECT_STRING_CONTENT,
137
+ PM_ERR_EXPECT_WHEN_DELIMITER,
138
+ PM_ERR_EXPRESSION_BARE_HASH,
139
+ PM_ERR_EXPRESSION_NOT_WRITABLE,
140
+ PM_ERR_EXPRESSION_NOT_WRITABLE_ENCODING,
141
+ PM_ERR_EXPRESSION_NOT_WRITABLE_FALSE,
142
+ PM_ERR_EXPRESSION_NOT_WRITABLE_FILE,
143
+ PM_ERR_EXPRESSION_NOT_WRITABLE_LINE,
144
+ PM_ERR_EXPRESSION_NOT_WRITABLE_NIL,
145
+ PM_ERR_EXPRESSION_NOT_WRITABLE_NUMBERED,
146
+ PM_ERR_EXPRESSION_NOT_WRITABLE_SELF,
147
+ PM_ERR_EXPRESSION_NOT_WRITABLE_TRUE,
148
+ PM_ERR_FLOAT_PARSE,
149
+ PM_ERR_FOR_COLLECTION,
150
+ PM_ERR_FOR_IN,
151
+ PM_ERR_FOR_INDEX,
152
+ PM_ERR_FOR_TERM,
153
+ PM_ERR_GLOBAL_VARIABLE_BARE,
154
+ PM_ERR_HASH_EXPRESSION_AFTER_LABEL,
155
+ PM_ERR_HASH_KEY,
156
+ PM_ERR_HASH_ROCKET,
157
+ PM_ERR_HASH_TERM,
158
+ PM_ERR_HASH_VALUE,
159
+ PM_ERR_HEREDOC_IDENTIFIER,
160
+ PM_ERR_HEREDOC_TERM,
161
+ PM_ERR_INCOMPLETE_QUESTION_MARK,
162
+ PM_ERR_INCOMPLETE_VARIABLE_CLASS,
163
+ PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3,
164
+ PM_ERR_INCOMPLETE_VARIABLE_INSTANCE,
165
+ PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3,
166
+ PM_ERR_INSTANCE_VARIABLE_BARE,
167
+ PM_ERR_INVALID_BLOCK_EXIT,
168
+ PM_ERR_INVALID_CHARACTER,
169
+ PM_ERR_INVALID_COMMA,
170
+ PM_ERR_INVALID_ENCODING_MAGIC_COMMENT,
171
+ PM_ERR_INVALID_ESCAPE_CHARACTER,
172
+ PM_ERR_INVALID_FLOAT_EXPONENT,
173
+ PM_ERR_INVALID_LOCAL_VARIABLE_READ,
174
+ PM_ERR_INVALID_LOCAL_VARIABLE_WRITE,
175
+ PM_ERR_INVALID_MULTIBYTE_CHAR,
176
+ PM_ERR_INVALID_MULTIBYTE_CHARACTER,
177
+ PM_ERR_INVALID_MULTIBYTE_ESCAPE,
178
+ PM_ERR_INVALID_NUMBER_BINARY,
179
+ PM_ERR_INVALID_NUMBER_DECIMAL,
180
+ PM_ERR_INVALID_NUMBER_FRACTION,
181
+ PM_ERR_INVALID_NUMBER_HEXADECIMAL,
182
+ PM_ERR_INVALID_NUMBER_OCTAL,
183
+ PM_ERR_INVALID_NUMBER_UNDERSCORE_INNER,
184
+ PM_ERR_INVALID_NUMBER_UNDERSCORE_TRAILING,
185
+ PM_ERR_INVALID_PERCENT,
186
+ PM_ERR_INVALID_PERCENT_EOF,
187
+ PM_ERR_INVALID_PRINTABLE_CHARACTER,
188
+ PM_ERR_INVALID_RETRY_AFTER_ELSE,
189
+ PM_ERR_INVALID_RETRY_AFTER_ENSURE,
190
+ PM_ERR_INVALID_RETRY_WITHOUT_RESCUE,
191
+ PM_ERR_INVALID_SYMBOL,
192
+ PM_ERR_INVALID_VARIABLE_GLOBAL,
193
+ PM_ERR_INVALID_VARIABLE_GLOBAL_3_3,
194
+ PM_ERR_INVALID_YIELD,
195
+ PM_ERR_IT_NOT_ALLOWED_NUMBERED,
196
+ PM_ERR_IT_NOT_ALLOWED_ORDINARY,
197
+ PM_ERR_LAMBDA_OPEN,
198
+ PM_ERR_LAMBDA_TERM_BRACE,
199
+ PM_ERR_LAMBDA_TERM_END,
200
+ PM_ERR_LIST_I_LOWER_ELEMENT,
201
+ PM_ERR_LIST_I_LOWER_TERM,
202
+ PM_ERR_LIST_I_UPPER_ELEMENT,
203
+ PM_ERR_LIST_I_UPPER_TERM,
204
+ PM_ERR_LIST_W_LOWER_ELEMENT,
205
+ PM_ERR_LIST_W_LOWER_TERM,
206
+ PM_ERR_LIST_W_UPPER_ELEMENT,
207
+ PM_ERR_LIST_W_UPPER_TERM,
208
+ PM_ERR_MALLOC_FAILED,
209
+ PM_ERR_MIXED_ENCODING,
210
+ PM_ERR_MODULE_IN_METHOD,
211
+ PM_ERR_MODULE_NAME,
212
+ PM_ERR_MODULE_TERM,
213
+ PM_ERR_MULTI_ASSIGN_MULTI_SPLATS,
214
+ PM_ERR_MULTI_ASSIGN_UNEXPECTED_REST,
215
+ PM_ERR_NESTING_TOO_DEEP,
216
+ PM_ERR_NO_LOCAL_VARIABLE,
217
+ PM_ERR_NON_ASSOCIATIVE_OPERATOR,
218
+ PM_ERR_NOT_EXPRESSION,
219
+ PM_ERR_NUMBER_LITERAL_UNDERSCORE,
220
+ PM_ERR_NUMBERED_PARAMETER_INNER_BLOCK,
221
+ PM_ERR_NUMBERED_PARAMETER_IT,
222
+ PM_ERR_NUMBERED_PARAMETER_ORDINARY,
223
+ PM_ERR_NUMBERED_PARAMETER_OUTER_BLOCK,
224
+ PM_ERR_OPERATOR_MULTI_ASSIGN,
225
+ PM_ERR_OPERATOR_WRITE_ARGUMENTS,
226
+ PM_ERR_OPERATOR_WRITE_BLOCK,
227
+ PM_ERR_PARAMETER_ASSOC_SPLAT_MULTI,
228
+ PM_ERR_PARAMETER_BLOCK_MULTI,
229
+ PM_ERR_PARAMETER_CIRCULAR,
230
+ PM_ERR_PARAMETER_FORWARDING_AFTER_REST,
231
+ PM_ERR_PARAMETER_METHOD_NAME,
232
+ PM_ERR_PARAMETER_NAME_DUPLICATED,
233
+ PM_ERR_PARAMETER_NO_DEFAULT,
234
+ PM_ERR_PARAMETER_NO_DEFAULT_KW,
235
+ PM_ERR_PARAMETER_NUMBERED_RESERVED,
236
+ PM_ERR_PARAMETER_ORDER,
237
+ PM_ERR_PARAMETER_SPLAT_MULTI,
238
+ PM_ERR_PARAMETER_STAR,
239
+ PM_ERR_PARAMETER_UNEXPECTED_FWD,
240
+ PM_ERR_PARAMETER_UNEXPECTED_NO_KW,
241
+ PM_ERR_PARAMETER_WILD_LOOSE_COMMA,
242
+ PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS,
243
+ PM_ERR_PATTERN_CAPTURE_DUPLICATE,
244
+ PM_ERR_PATTERN_CAPTURE_IN_ALTERNATIVE,
245
+ PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET,
246
+ PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA,
247
+ PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET,
248
+ PM_ERR_PATTERN_EXPRESSION_AFTER_IN,
249
+ PM_ERR_PATTERN_EXPRESSION_AFTER_KEY,
250
+ PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN,
251
+ PM_ERR_PATTERN_EXPRESSION_AFTER_PIN,
252
+ PM_ERR_PATTERN_EXPRESSION_AFTER_PIPE,
253
+ PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE,
254
+ PM_ERR_PATTERN_EXPRESSION_AFTER_REST,
255
+ PM_ERR_PATTERN_FIND_MISSING_INNER,
256
+ PM_ERR_PATTERN_HASH_IMPLICIT,
257
+ PM_ERR_PATTERN_HASH_KEY,
258
+ PM_ERR_PATTERN_HASH_KEY_DUPLICATE,
259
+ PM_ERR_PATTERN_HASH_KEY_INTERPOLATED,
260
+ PM_ERR_PATTERN_HASH_KEY_LABEL,
261
+ PM_ERR_PATTERN_HASH_KEY_LOCALS,
262
+ PM_ERR_PATTERN_IDENT_AFTER_HROCKET,
263
+ PM_ERR_PATTERN_LABEL_AFTER_COMMA,
264
+ PM_ERR_PATTERN_REST,
265
+ PM_ERR_PATTERN_TERM_BRACE,
266
+ PM_ERR_PATTERN_TERM_BRACKET,
267
+ PM_ERR_PATTERN_TERM_PAREN,
268
+ PM_ERR_PIPEPIPEEQ_MULTI_ASSIGN,
269
+ PM_ERR_REGEXP_ENCODING_OPTION_MISMATCH,
270
+ PM_ERR_REGEXP_ESCAPED_NON_ASCII_IN_UTF8,
271
+ PM_ERR_REGEXP_INCOMPAT_CHAR_ENCODING,
272
+ PM_ERR_REGEXP_INVALID_CHAR_PROPERTY,
273
+ PM_ERR_REGEXP_INVALID_UNICODE_RANGE,
274
+ PM_ERR_REGEXP_NON_ESCAPED_MBC,
275
+ PM_ERR_REGEXP_PARSE_ERROR,
276
+ PM_ERR_REGEXP_TERM,
277
+ PM_ERR_REGEXP_UNKNOWN_OPTIONS,
278
+ PM_ERR_REGEXP_UTF8_CHAR_NON_UTF8_REGEXP,
279
+ PM_ERR_RESCUE_EXPRESSION,
280
+ PM_ERR_RESCUE_MODIFIER_VALUE,
281
+ PM_ERR_RESCUE_TERM,
282
+ PM_ERR_RESCUE_VARIABLE,
283
+ PM_ERR_RETURN_INVALID,
284
+ PM_ERR_SCRIPT_NOT_FOUND,
285
+ PM_ERR_SINGLETON_FOR_LITERALS,
286
+ PM_ERR_STATEMENT_ALIAS,
287
+ PM_ERR_STATEMENT_POSTEXE_END,
288
+ PM_ERR_STATEMENT_PREEXE_BEGIN,
289
+ PM_ERR_STATEMENT_UNDEF,
290
+ PM_ERR_STRING_CONCATENATION,
291
+ PM_ERR_STRING_INTERPOLATED_TERM,
292
+ PM_ERR_STRING_LITERAL_EOF,
293
+ PM_ERR_STRING_LITERAL_TERM,
294
+ PM_ERR_SYMBOL_INVALID,
295
+ PM_ERR_SYMBOL_TERM_DYNAMIC,
296
+ PM_ERR_SYMBOL_TERM_INTERPOLATED,
297
+ PM_ERR_TERNARY_COLON,
298
+ PM_ERR_TERNARY_EXPRESSION_FALSE,
299
+ PM_ERR_TERNARY_EXPRESSION_TRUE,
300
+ PM_ERR_UNARY_DISALLOWED,
301
+ PM_ERR_UNARY_RECEIVER,
302
+ PM_ERR_UNDEF_ARGUMENT,
303
+ PM_ERR_UNEXPECTED_BLOCK_ARGUMENT,
304
+ PM_ERR_UNEXPECTED_INDEX_BLOCK,
305
+ PM_ERR_UNEXPECTED_INDEX_KEYWORDS,
306
+ PM_ERR_UNEXPECTED_LABEL,
307
+ PM_ERR_UNEXPECTED_MULTI_WRITE,
308
+ PM_ERR_UNEXPECTED_PARAMETER_DEFAULT_VALUE,
309
+ PM_ERR_UNEXPECTED_RANGE_OPERATOR,
310
+ PM_ERR_UNEXPECTED_SAFE_NAVIGATION,
311
+ PM_ERR_UNEXPECTED_TOKEN_CLOSE_CONTEXT,
312
+ PM_ERR_UNEXPECTED_TOKEN_IGNORE,
313
+ PM_ERR_UNTIL_TERM,
314
+ PM_ERR_VOID_EXPRESSION,
315
+ PM_ERR_WHILE_TERM,
316
+ PM_ERR_WRITE_TARGET_IN_METHOD,
317
+ PM_ERR_WRITE_TARGET_READONLY,
318
+ PM_ERR_WRITE_TARGET_UNEXPECTED,
319
+ PM_ERR_XSTRING_TERM,
320
+
321
+ /* These are the warning diagnostics. */
322
+ PM_WARN_AMBIGUOUS_BINARY_OPERATOR,
323
+ PM_WARN_AMBIGUOUS_FIRST_ARGUMENT_MINUS,
324
+ PM_WARN_AMBIGUOUS_FIRST_ARGUMENT_PLUS,
325
+ PM_WARN_AMBIGUOUS_PREFIX_AMPERSAND,
326
+ PM_WARN_AMBIGUOUS_PREFIX_STAR,
327
+ PM_WARN_AMBIGUOUS_PREFIX_STAR_STAR,
328
+ PM_WARN_AMBIGUOUS_SLASH,
329
+ PM_WARN_COMPARISON_AFTER_COMPARISON,
330
+ PM_WARN_DOT_DOT_DOT_EOL,
331
+ PM_WARN_EQUAL_IN_CONDITIONAL,
332
+ PM_WARN_EQUAL_IN_CONDITIONAL_3_3,
333
+ PM_WARN_END_IN_METHOD,
334
+ PM_WARN_DUPLICATED_HASH_KEY,
335
+ PM_WARN_DUPLICATED_WHEN_CLAUSE,
336
+ PM_WARN_FLOAT_OUT_OF_RANGE,
337
+ PM_WARN_IGNORED_FROZEN_STRING_LITERAL,
338
+ PM_WARN_INDENTATION_MISMATCH,
339
+ PM_WARN_INTEGER_IN_FLIP_FLOP,
340
+ PM_WARN_INVALID_CHARACTER,
341
+ PM_WARN_INVALID_MAGIC_COMMENT_VALUE,
342
+ PM_WARN_INVALID_NUMBERED_REFERENCE,
343
+ PM_WARN_KEYWORD_EOL,
344
+ PM_WARN_LITERAL_IN_CONDITION_DEFAULT,
345
+ PM_WARN_LITERAL_IN_CONDITION_VERBOSE,
346
+ PM_WARN_SHAREABLE_CONSTANT_VALUE_LINE,
347
+ PM_WARN_SHEBANG_CARRIAGE_RETURN,
348
+ PM_WARN_UNEXPECTED_CARRIAGE_RETURN,
349
+ PM_WARN_UNREACHABLE_STATEMENT,
350
+ PM_WARN_UNUSED_LOCAL_VARIABLE,
351
+ PM_WARN_VOID_STATEMENT,
352
+ } pm_diagnostic_id_t;
353
+
354
+ /*
355
+ * This struct represents a diagnostic generated during parsing.
356
+ */
357
+ struct pm_diagnostic_t {
358
+ /* The embedded base node. */
359
+ pm_list_node_t node;
360
+
361
+ /* The location of the diagnostic in the source. */
362
+ pm_location_t location;
363
+
364
+ /* The ID of the diagnostic. */
365
+ pm_diagnostic_id_t diag_id;
366
+
367
+ /* The message associated with the diagnostic. */
368
+ const char *message;
369
+
370
+ /*
371
+ * The level of the diagnostic, see `pm_error_level_t` and
372
+ * `pm_warning_level_t` for possible values.
373
+ */
374
+ uint8_t level;
375
+ };
376
+
377
+ /*
378
+ * Append a diagnostic to the given list of diagnostics that is using shared
379
+ * memory for its message.
380
+ */
381
+ void pm_diagnostic_list_append(pm_arena_t *arena, pm_list_t *list, uint32_t start, uint32_t length, pm_diagnostic_id_t diag_id);
382
+
383
+ /*
384
+ * Append a diagnostic to the given list of diagnostics that is using a format
385
+ * string for its message.
386
+ */
387
+ void pm_diagnostic_list_append_format(pm_arena_t *arena, pm_list_t *list, uint32_t start, uint32_t length, pm_diagnostic_id_t diag_id, ...);
388
+
389
+ #endif