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,283 @@
1
+ /**
2
+ * @file encoding.h
3
+ *
4
+ * The encoding interface and implementations used by the parser.
5
+ */
6
+ #ifndef PRISM_ENCODING_H
7
+ #define PRISM_ENCODING_H
8
+
9
+ #include "prism/defines.h"
10
+ #include "prism/util/pm_strncasecmp.h"
11
+
12
+ #include <assert.h>
13
+ #include <stdbool.h>
14
+ #include <stddef.h>
15
+ #include <stdint.h>
16
+
17
+ /**
18
+ * This struct defines the functions necessary to implement the encoding
19
+ * interface so we can determine how many bytes the subsequent character takes.
20
+ * Each callback should return the number of bytes, or 0 if the next bytes are
21
+ * invalid for the encoding and type.
22
+ */
23
+ typedef struct {
24
+ /**
25
+ * Return the number of bytes that the next character takes if it is valid
26
+ * in the encoding. Does not read more than n bytes. It is assumed that n is
27
+ * at least 1.
28
+ */
29
+ size_t (*char_width)(const uint8_t *b, ptrdiff_t n);
30
+
31
+ /**
32
+ * Return the number of bytes that the next character takes if it is valid
33
+ * in the encoding and is alphabetical. Does not read more than n bytes. It
34
+ * is assumed that n is at least 1.
35
+ */
36
+ size_t (*alpha_char)(const uint8_t *b, ptrdiff_t n);
37
+
38
+ /**
39
+ * Return the number of bytes that the next character takes if it is valid
40
+ * in the encoding and is alphanumeric. Does not read more than n bytes. It
41
+ * is assumed that n is at least 1.
42
+ */
43
+ size_t (*alnum_char)(const uint8_t *b, ptrdiff_t n);
44
+
45
+ /**
46
+ * Return true if the next character is valid in the encoding and is an
47
+ * uppercase character. Does not read more than n bytes. It is assumed that
48
+ * n is at least 1.
49
+ */
50
+ bool (*isupper_char)(const uint8_t *b, ptrdiff_t n);
51
+
52
+ /**
53
+ * The name of the encoding. This should correspond to a value that can be
54
+ * passed to Encoding.find in Ruby.
55
+ */
56
+ const char *name;
57
+
58
+ /**
59
+ * Return true if the encoding is a multibyte encoding.
60
+ */
61
+ bool multibyte;
62
+ } pm_encoding_t;
63
+
64
+ /**
65
+ * All of the lookup tables use the first bit of each embedded byte to indicate
66
+ * whether the codepoint is alphabetical.
67
+ */
68
+ #define PRISM_ENCODING_ALPHABETIC_BIT 1 << 0
69
+
70
+ /**
71
+ * All of the lookup tables use the second bit of each embedded byte to indicate
72
+ * whether the codepoint is alphanumeric.
73
+ */
74
+ #define PRISM_ENCODING_ALPHANUMERIC_BIT 1 << 1
75
+
76
+ /**
77
+ * All of the lookup tables use the third bit of each embedded byte to indicate
78
+ * whether the codepoint is uppercase.
79
+ */
80
+ #define PRISM_ENCODING_UPPERCASE_BIT 1 << 2
81
+
82
+ /**
83
+ * Return the size of the next character in the UTF-8 encoding.
84
+ *
85
+ * @param b The bytes to read.
86
+ * @param n The number of bytes that can be read.
87
+ * @returns The number of bytes that the next character takes if it is valid in
88
+ * the encoding, or 0 if it is not.
89
+ */
90
+ size_t pm_encoding_utf_8_char_width(const uint8_t *b, ptrdiff_t n);
91
+
92
+ /**
93
+ * Return the size of the next character in the UTF-8 encoding if it is an
94
+ * alphabetical character.
95
+ *
96
+ * @param b The bytes to read.
97
+ * @param n The number of bytes that can be read.
98
+ * @returns The number of bytes that the next character takes if it is valid in
99
+ * the encoding, or 0 if it is not.
100
+ */
101
+ size_t pm_encoding_utf_8_alpha_char(const uint8_t *b, ptrdiff_t n);
102
+
103
+ /**
104
+ * Return the size of the next character in the UTF-8 encoding if it is an
105
+ * alphanumeric character.
106
+ *
107
+ * @param b The bytes to read.
108
+ * @param n The number of bytes that can be read.
109
+ * @returns The number of bytes that the next character takes if it is valid in
110
+ * the encoding, or 0 if it is not.
111
+ */
112
+ size_t pm_encoding_utf_8_alnum_char(const uint8_t *b, ptrdiff_t n);
113
+
114
+ /**
115
+ * Return true if the next character in the UTF-8 encoding if it is an uppercase
116
+ * character.
117
+ *
118
+ * @param b The bytes to read.
119
+ * @param n The number of bytes that can be read.
120
+ * @returns True if the next character is valid in the encoding and is an
121
+ * uppercase character, or false if it is not.
122
+ */
123
+ bool pm_encoding_utf_8_isupper_char(const uint8_t *b, ptrdiff_t n);
124
+
125
+ /**
126
+ * This lookup table is referenced in both the UTF-8 encoding file and the
127
+ * parser directly in order to speed up the default encoding processing. It is
128
+ * used to indicate whether a character is alphabetical, alphanumeric, or
129
+ * uppercase in unicode mappings.
130
+ */
131
+ extern const uint8_t pm_encoding_unicode_table[256];
132
+
133
+ /**
134
+ * These are all of the encodings that prism supports.
135
+ */
136
+ typedef enum {
137
+ PM_ENCODING_UTF_8 = 0,
138
+ PM_ENCODING_US_ASCII,
139
+ PM_ENCODING_ASCII_8BIT,
140
+ PM_ENCODING_EUC_JP,
141
+ PM_ENCODING_WINDOWS_31J,
142
+
143
+ // We optionally support excluding the full set of encodings to only support the
144
+ // minimum necessary to process Ruby code without encoding comments.
145
+ #ifndef PRISM_ENCODING_EXCLUDE_FULL
146
+ PM_ENCODING_BIG5,
147
+ PM_ENCODING_BIG5_HKSCS,
148
+ PM_ENCODING_BIG5_UAO,
149
+ PM_ENCODING_CESU_8,
150
+ PM_ENCODING_CP51932,
151
+ PM_ENCODING_CP850,
152
+ PM_ENCODING_CP852,
153
+ PM_ENCODING_CP855,
154
+ PM_ENCODING_CP949,
155
+ PM_ENCODING_CP950,
156
+ PM_ENCODING_CP951,
157
+ PM_ENCODING_EMACS_MULE,
158
+ PM_ENCODING_EUC_JP_MS,
159
+ PM_ENCODING_EUC_JIS_2004,
160
+ PM_ENCODING_EUC_KR,
161
+ PM_ENCODING_EUC_TW,
162
+ PM_ENCODING_GB12345,
163
+ PM_ENCODING_GB18030,
164
+ PM_ENCODING_GB1988,
165
+ PM_ENCODING_GB2312,
166
+ PM_ENCODING_GBK,
167
+ PM_ENCODING_IBM437,
168
+ PM_ENCODING_IBM720,
169
+ PM_ENCODING_IBM737,
170
+ PM_ENCODING_IBM775,
171
+ PM_ENCODING_IBM852,
172
+ PM_ENCODING_IBM855,
173
+ PM_ENCODING_IBM857,
174
+ PM_ENCODING_IBM860,
175
+ PM_ENCODING_IBM861,
176
+ PM_ENCODING_IBM862,
177
+ PM_ENCODING_IBM863,
178
+ PM_ENCODING_IBM864,
179
+ PM_ENCODING_IBM865,
180
+ PM_ENCODING_IBM866,
181
+ PM_ENCODING_IBM869,
182
+ PM_ENCODING_ISO_8859_1,
183
+ PM_ENCODING_ISO_8859_2,
184
+ PM_ENCODING_ISO_8859_3,
185
+ PM_ENCODING_ISO_8859_4,
186
+ PM_ENCODING_ISO_8859_5,
187
+ PM_ENCODING_ISO_8859_6,
188
+ PM_ENCODING_ISO_8859_7,
189
+ PM_ENCODING_ISO_8859_8,
190
+ PM_ENCODING_ISO_8859_9,
191
+ PM_ENCODING_ISO_8859_10,
192
+ PM_ENCODING_ISO_8859_11,
193
+ PM_ENCODING_ISO_8859_13,
194
+ PM_ENCODING_ISO_8859_14,
195
+ PM_ENCODING_ISO_8859_15,
196
+ PM_ENCODING_ISO_8859_16,
197
+ PM_ENCODING_KOI8_R,
198
+ PM_ENCODING_KOI8_U,
199
+ PM_ENCODING_MAC_CENT_EURO,
200
+ PM_ENCODING_MAC_CROATIAN,
201
+ PM_ENCODING_MAC_CYRILLIC,
202
+ PM_ENCODING_MAC_GREEK,
203
+ PM_ENCODING_MAC_ICELAND,
204
+ PM_ENCODING_MAC_JAPANESE,
205
+ PM_ENCODING_MAC_ROMAN,
206
+ PM_ENCODING_MAC_ROMANIA,
207
+ PM_ENCODING_MAC_THAI,
208
+ PM_ENCODING_MAC_TURKISH,
209
+ PM_ENCODING_MAC_UKRAINE,
210
+ PM_ENCODING_SHIFT_JIS,
211
+ PM_ENCODING_SJIS_DOCOMO,
212
+ PM_ENCODING_SJIS_KDDI,
213
+ PM_ENCODING_SJIS_SOFTBANK,
214
+ PM_ENCODING_STATELESS_ISO_2022_JP,
215
+ PM_ENCODING_STATELESS_ISO_2022_JP_KDDI,
216
+ PM_ENCODING_TIS_620,
217
+ PM_ENCODING_UTF8_MAC,
218
+ PM_ENCODING_UTF8_DOCOMO,
219
+ PM_ENCODING_UTF8_KDDI,
220
+ PM_ENCODING_UTF8_SOFTBANK,
221
+ PM_ENCODING_WINDOWS_1250,
222
+ PM_ENCODING_WINDOWS_1251,
223
+ PM_ENCODING_WINDOWS_1252,
224
+ PM_ENCODING_WINDOWS_1253,
225
+ PM_ENCODING_WINDOWS_1254,
226
+ PM_ENCODING_WINDOWS_1255,
227
+ PM_ENCODING_WINDOWS_1256,
228
+ PM_ENCODING_WINDOWS_1257,
229
+ PM_ENCODING_WINDOWS_1258,
230
+ PM_ENCODING_WINDOWS_874,
231
+ #endif
232
+
233
+ PM_ENCODING_MAXIMUM
234
+ } pm_encoding_type_t;
235
+
236
+ /**
237
+ * This is the table of all of the encodings that prism supports.
238
+ */
239
+ extern const pm_encoding_t pm_encodings[PM_ENCODING_MAXIMUM];
240
+
241
+ /**
242
+ * This is the default UTF-8 encoding. We need a reference to it to quickly
243
+ * create parsers.
244
+ */
245
+ #define PM_ENCODING_UTF_8_ENTRY (&pm_encodings[PM_ENCODING_UTF_8])
246
+
247
+ /**
248
+ * This is the US-ASCII encoding. We need a reference to it to be able to
249
+ * compare against it when a string is being created because it could possibly
250
+ * need to fall back to ASCII-8BIT.
251
+ */
252
+ #define PM_ENCODING_US_ASCII_ENTRY (&pm_encodings[PM_ENCODING_US_ASCII])
253
+
254
+ /**
255
+ * This is the ASCII-8BIT encoding. We need a reference to it so that pm_strpbrk
256
+ * can compare against it because invalid multibyte characters are not a thing
257
+ * in this encoding. It is also needed for handling Regexp encoding flags.
258
+ */
259
+ #define PM_ENCODING_ASCII_8BIT_ENTRY (&pm_encodings[PM_ENCODING_ASCII_8BIT])
260
+
261
+ /**
262
+ * This is the EUC-JP encoding. We need a reference to it to quickly process
263
+ * regular expression modifiers.
264
+ */
265
+ #define PM_ENCODING_EUC_JP_ENTRY (&pm_encodings[PM_ENCODING_EUC_JP])
266
+
267
+ /**
268
+ * This is the Windows-31J encoding. We need a reference to it to quickly
269
+ * process regular expression modifiers.
270
+ */
271
+ #define PM_ENCODING_WINDOWS_31J_ENTRY (&pm_encodings[PM_ENCODING_WINDOWS_31J])
272
+
273
+ /**
274
+ * Parse the given name of an encoding and return a pointer to the corresponding
275
+ * encoding struct if one can be found, otherwise return NULL.
276
+ *
277
+ * @param start A pointer to the first byte of the name.
278
+ * @param end A pointer to the last byte of the name.
279
+ * @returns A pointer to the encoding struct if one is found, otherwise NULL.
280
+ */
281
+ const pm_encoding_t * pm_encoding_find(const uint8_t *start, const uint8_t *end);
282
+
283
+ #endif
@@ -0,0 +1,19 @@
1
+ #ifndef PRISM_EXT_NODE_H
2
+ #define PRISM_EXT_NODE_H
3
+
4
+ #define EXPECTED_PRISM_VERSION "1.0.0"
5
+
6
+ #include <ruby.h>
7
+ #include <ruby/encoding.h>
8
+ #include "prism.h"
9
+
10
+ VALUE pm_source_new(const pm_parser_t *parser, rb_encoding *encoding);
11
+ VALUE pm_token_new(const pm_parser_t *parser, const pm_token_t *token, rb_encoding *encoding, VALUE source);
12
+ VALUE pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encoding, VALUE source);
13
+ VALUE pm_integer_new(const pm_integer_t *integer);
14
+
15
+ void Init_prism_api_node(void);
16
+ void Init_prism_pack(void);
17
+ RUBY_FUNC_EXPORTED void Init_prism(void);
18
+
19
+ #endif
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @file node.h
3
+ *
4
+ * Functions related to nodes in the AST.
5
+ */
6
+ #ifndef PRISM_NODE_H
7
+ #define PRISM_NODE_H
8
+
9
+ #include "prism/defines.h"
10
+ #include "prism/parser.h"
11
+ #include "prism/util/pm_buffer.h"
12
+
13
+ /**
14
+ * Loop through each node in the node list, writing each node to the given
15
+ * pm_node_t pointer.
16
+ */
17
+ #define PM_NODE_LIST_FOREACH(list, index, node) \
18
+ for (size_t index = 0; index < (list)->size && ((node) = (list)->nodes[index]); index++)
19
+
20
+ /**
21
+ * Append a new node onto the end of the node list.
22
+ *
23
+ * @param list The list to append to.
24
+ * @param node The node to append.
25
+ */
26
+ void pm_node_list_append(pm_node_list_t *list, pm_node_t *node);
27
+
28
+ /**
29
+ * Prepend a new node onto the beginning of the node list.
30
+ *
31
+ * @param list The list to prepend to.
32
+ * @param node The node to prepend.
33
+ */
34
+ void pm_node_list_prepend(pm_node_list_t *list, pm_node_t *node);
35
+
36
+ /**
37
+ * Concatenate the given node list onto the end of the other node list.
38
+ *
39
+ * @param list The list to concatenate onto.
40
+ * @param other The list to concatenate.
41
+ */
42
+ void pm_node_list_concat(pm_node_list_t *list, pm_node_list_t *other);
43
+
44
+ /**
45
+ * Free the internal memory associated with the given node list.
46
+ *
47
+ * @param list The list to free.
48
+ */
49
+ void pm_node_list_free(pm_node_list_t *list);
50
+
51
+ /**
52
+ * Deallocate a node and all of its children.
53
+ *
54
+ * @param parser The parser that owns the node.
55
+ * @param node The node to deallocate.
56
+ */
57
+ PRISM_EXPORTED_FUNCTION void pm_node_destroy(pm_parser_t *parser, struct pm_node *node);
58
+
59
+ /**
60
+ * Returns a string representation of the given node type.
61
+ *
62
+ * @param node_type The node type to convert to a string.
63
+ * @return A string representation of the given node type.
64
+ */
65
+ PRISM_EXPORTED_FUNCTION const char * pm_node_type_to_str(pm_node_type_t node_type);
66
+
67
+ /**
68
+ * Visit each of the nodes in this subtree using the given visitor callback. The
69
+ * callback function will be called for each node in the subtree. If it returns
70
+ * false, then that node's children will not be visited. If it returns true,
71
+ * then the children will be visited. The data parameter is treated as an opaque
72
+ * pointer and is passed to the visitor callback for consumers to use as they
73
+ * see fit.
74
+ *
75
+ * As an example:
76
+ *
77
+ * ```c
78
+ * #include "prism.h"
79
+ *
80
+ * bool visit(const pm_node_t *node, void *data) {
81
+ * size_t *indent = (size_t *) data;
82
+ * for (size_t i = 0; i < *indent * 2; i++) putc(' ', stdout);
83
+ * printf("%s\n", pm_node_type_to_str(node->type));
84
+ *
85
+ * size_t next_indent = *indent + 1;
86
+ * size_t *next_data = &next_indent;
87
+ * pm_visit_child_nodes(node, visit, next_data);
88
+ *
89
+ * return false;
90
+ * }
91
+ *
92
+ * int main(void) {
93
+ * const char *source = "1 + 2; 3 + 4";
94
+ * size_t size = strlen(source);
95
+ *
96
+ * pm_parser_t parser;
97
+ * pm_options_t options = { 0 };
98
+ * pm_parser_init(&parser, (const uint8_t *) source, size, &options);
99
+ *
100
+ * size_t indent = 0;
101
+ * pm_node_t *node = pm_parse(&parser);
102
+ *
103
+ * size_t *data = &indent;
104
+ * pm_visit_node(node, visit, data);
105
+ *
106
+ * pm_node_destroy(&parser, node);
107
+ * pm_parser_free(&parser);
108
+ * return EXIT_SUCCESS;
109
+ * }
110
+ * ```
111
+ *
112
+ * @param node The root node to start visiting from.
113
+ * @param visitor The callback to call for each node in the subtree.
114
+ * @param data An opaque pointer that is passed to the visitor callback.
115
+ */
116
+ PRISM_EXPORTED_FUNCTION void pm_visit_node(const pm_node_t *node, bool (*visitor)(const pm_node_t *node, void *data), void *data);
117
+
118
+ /**
119
+ * Visit the children of the given node with the given callback. This is the
120
+ * default behavior for walking the tree that is called from pm_visit_node if
121
+ * the callback returns true.
122
+ *
123
+ * @param node The node to visit the children of.
124
+ * @param visitor The callback to call for each child node.
125
+ * @param data An opaque pointer that is passed to the visitor callback.
126
+ */
127
+ PRISM_EXPORTED_FUNCTION void pm_visit_child_nodes(const pm_node_t *node, bool (*visitor)(const pm_node_t *node, void *data), void *data);
128
+
129
+ #endif