prism 2.0.0.rc1-x86_64-linux-gnu

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 (216) hide show
  1. checksums.yaml +7 -0
  2. data/BSDmakefile +58 -0
  3. data/CHANGELOG.md +870 -0
  4. data/CODE_OF_CONDUCT.md +76 -0
  5. data/CONTRIBUTING.md +58 -0
  6. data/LICENSE.md +7 -0
  7. data/Makefile +145 -0
  8. data/README.md +81 -0
  9. data/config.yml +4752 -0
  10. data/docs/build_system.md +119 -0
  11. data/docs/configuration.md +69 -0
  12. data/docs/cruby_compilation.md +27 -0
  13. data/docs/design.md +53 -0
  14. data/docs/encoding.md +121 -0
  15. data/docs/fuzzing.md +81 -0
  16. data/docs/heredocs.md +36 -0
  17. data/docs/javascript.md +133 -0
  18. data/docs/local_variable_depth.md +229 -0
  19. data/docs/mapping.md +117 -0
  20. data/docs/parser_translation.md +24 -0
  21. data/docs/parsing_rules.md +22 -0
  22. data/docs/releasing.md +147 -0
  23. data/docs/relocation.md +32 -0
  24. data/docs/ripper_translation.md +63 -0
  25. data/docs/ruby_api.md +45 -0
  26. data/docs/ruby_parser_translation.md +19 -0
  27. data/docs/serialization.md +230 -0
  28. data/docs/testing.md +72 -0
  29. data/ext/prism/api_node.c +7005 -0
  30. data/ext/prism/extconf.rb +126 -0
  31. data/ext/prism/extension.c +1783 -0
  32. data/ext/prism/extension.h +19 -0
  33. data/include/prism/arena.h +37 -0
  34. data/include/prism/ast.h +10371 -0
  35. data/include/prism/buffer.h +52 -0
  36. data/include/prism/comments.h +55 -0
  37. data/include/prism/compiler/accel.h +24 -0
  38. data/include/prism/compiler/align.h +36 -0
  39. data/include/prism/compiler/assume.h +25 -0
  40. data/include/prism/compiler/exported.h +24 -0
  41. data/include/prism/compiler/fallthrough.h +22 -0
  42. data/include/prism/compiler/filesystem.h +32 -0
  43. data/include/prism/compiler/flex_array.h +19 -0
  44. data/include/prism/compiler/force_inline.h +21 -0
  45. data/include/prism/compiler/format.h +25 -0
  46. data/include/prism/compiler/inline.h +17 -0
  47. data/include/prism/compiler/nodiscard.h +22 -0
  48. data/include/prism/compiler/nonnull.h +18 -0
  49. data/include/prism/compiler/unused.h +18 -0
  50. data/include/prism/constant_pool.h +81 -0
  51. data/include/prism/diagnostic.h +93 -0
  52. data/include/prism/errors_format.h +53 -0
  53. data/include/prism/excludes.h +29 -0
  54. data/include/prism/integer.h +41 -0
  55. data/include/prism/internal/allocator.h +68 -0
  56. data/include/prism/internal/allocator_debug.h +88 -0
  57. data/include/prism/internal/arena.h +108 -0
  58. data/include/prism/internal/bit.h +42 -0
  59. data/include/prism/internal/buffer.h +91 -0
  60. data/include/prism/internal/char.h +145 -0
  61. data/include/prism/internal/comments.h +53 -0
  62. data/include/prism/internal/constant_pool.h +152 -0
  63. data/include/prism/internal/diagnostic.h +389 -0
  64. data/include/prism/internal/encoding.h +242 -0
  65. data/include/prism/internal/integer.h +68 -0
  66. data/include/prism/internal/isinf.h +16 -0
  67. data/include/prism/internal/line_offset_list.h +34 -0
  68. data/include/prism/internal/list.h +62 -0
  69. data/include/prism/internal/magic_comments.h +23 -0
  70. data/include/prism/internal/memchr.h +15 -0
  71. data/include/prism/internal/node.h +38 -0
  72. data/include/prism/internal/options.h +232 -0
  73. data/include/prism/internal/parser.h +984 -0
  74. data/include/prism/internal/regexp.h +26 -0
  75. data/include/prism/internal/serialize.h +39 -0
  76. data/include/prism/internal/source.h +72 -0
  77. data/include/prism/internal/static_literals.h +100 -0
  78. data/include/prism/internal/stringy.h +35 -0
  79. data/include/prism/internal/strncasecmp.h +18 -0
  80. data/include/prism/internal/strpbrk.h +33 -0
  81. data/include/prism/internal/tokens.h +11 -0
  82. data/include/prism/json.h +32 -0
  83. data/include/prism/line_offset_list.h +61 -0
  84. data/include/prism/magic_comments.h +35 -0
  85. data/include/prism/node.h +94 -0
  86. data/include/prism/options.h +354 -0
  87. data/include/prism/parser.h +404 -0
  88. data/include/prism/prettyprint.h +31 -0
  89. data/include/prism/serialize.h +115 -0
  90. data/include/prism/source.h +155 -0
  91. data/include/prism/stream.h +28 -0
  92. data/include/prism/string_query.h +63 -0
  93. data/include/prism/stringy.h +72 -0
  94. data/include/prism/version.h +38 -0
  95. data/include/prism.h +131 -0
  96. data/lib/prism/3.3/prism.so +0 -0
  97. data/lib/prism/3.4/prism.so +0 -0
  98. data/lib/prism/4.0/prism.so +0 -0
  99. data/lib/prism/compiler.rb +815 -0
  100. data/lib/prism/desugar_compiler.rb +463 -0
  101. data/lib/prism/dispatcher.rb +2383 -0
  102. data/lib/prism/dot_visitor.rb +4848 -0
  103. data/lib/prism/dsl.rb +1369 -0
  104. data/lib/prism/ffi.rb +740 -0
  105. data/lib/prism/inspect_visitor.rb +2425 -0
  106. data/lib/prism/lex_compat.rb +953 -0
  107. data/lib/prism/mutation_compiler.rb +780 -0
  108. data/lib/prism/node.rb +33204 -0
  109. data/lib/prism/node_ext.rb +504 -0
  110. data/lib/prism/node_find.rb +215 -0
  111. data/lib/prism/parse_result/errors.rb +72 -0
  112. data/lib/prism/parse_result/newlines.rb +423 -0
  113. data/lib/prism/parse_result.rb +1221 -0
  114. data/lib/prism/pattern.rb +314 -0
  115. data/lib/prism/polyfill/append_as_bytes.rb +15 -0
  116. data/lib/prism/polyfill/byteindex.rb +13 -0
  117. data/lib/prism/polyfill/scan_byte.rb +14 -0
  118. data/lib/prism/polyfill/unpack1.rb +14 -0
  119. data/lib/prism/polyfill/warn.rb +36 -0
  120. data/lib/prism/reflection.rb +427 -0
  121. data/lib/prism/relocation.rb +567 -0
  122. data/lib/prism/serialize.rb +5308 -0
  123. data/lib/prism/string_query.rb +46 -0
  124. data/lib/prism/translation/parser/builder.rb +70 -0
  125. data/lib/prism/translation/parser/compiler.rb +2226 -0
  126. data/lib/prism/translation/parser/lexer.rb +769 -0
  127. data/lib/prism/translation/parser.rb +376 -0
  128. data/lib/prism/translation/parser_current.rb +26 -0
  129. data/lib/prism/translation/parser_versions.rb +36 -0
  130. data/lib/prism/translation/ripper/filter.rb +53 -0
  131. data/lib/prism/translation/ripper/lexer.rb +133 -0
  132. data/lib/prism/translation/ripper/sexp.rb +118 -0
  133. data/lib/prism/translation/ripper/shim.rb +7 -0
  134. data/lib/prism/translation/ripper.rb +4278 -0
  135. data/lib/prism/translation/ruby_parser.rb +1721 -0
  136. data/lib/prism/translation.rb +20 -0
  137. data/lib/prism/visitor.rb +1440 -0
  138. data/lib/prism.rb +168 -0
  139. data/prism.gemspec +234 -0
  140. data/rbi/generated/prism/compiler.rbi +489 -0
  141. data/rbi/generated/prism/desugar_compiler.rbi +306 -0
  142. data/rbi/generated/prism/dispatcher.rbi +1138 -0
  143. data/rbi/generated/prism/dot_visitor.rbi +618 -0
  144. data/rbi/generated/prism/dsl.rbi +751 -0
  145. data/rbi/generated/prism/inspect_visitor.rbi +503 -0
  146. data/rbi/generated/prism/lex_compat.rbi +162 -0
  147. data/rbi/generated/prism/mutation_compiler.rbi +464 -0
  148. data/rbi/generated/prism/node.rbi +13681 -0
  149. data/rbi/generated/prism/node_ext.rbi +259 -0
  150. data/rbi/generated/prism/node_find.rbi +79 -0
  151. data/rbi/generated/prism/parse_result/errors.rbi +21 -0
  152. data/rbi/generated/prism/parse_result/newlines.rbi +208 -0
  153. data/rbi/generated/prism/parse_result.rbi +764 -0
  154. data/rbi/generated/prism/pattern.rbi +134 -0
  155. data/rbi/generated/prism/reflection.rbi +89 -0
  156. data/rbi/generated/prism/relocation.rbi +329 -0
  157. data/rbi/generated/prism/serialize.rbi +181 -0
  158. data/rbi/generated/prism/string_query.rbi +36 -0
  159. data/rbi/generated/prism/translation.rbi +7 -0
  160. data/rbi/generated/prism/visitor.rbi +650 -0
  161. data/rbi/generated/prism.rbi +86 -0
  162. data/rbi/prism/translation/parser.rbi +11 -0
  163. data/rbi/prism/translation/parser_versions.rbi +28 -0
  164. data/rbi/prism/translation/ripper.rbi +15 -0
  165. data/rbi/rubyvm/node_find.rbi +14 -0
  166. data/sig/generated/prism/compiler.rbs +492 -0
  167. data/sig/generated/prism/desugar_compiler.rbs +305 -0
  168. data/sig/generated/prism/dispatcher.rbs +1292 -0
  169. data/sig/generated/prism/dot_visitor.rbs +635 -0
  170. data/sig/generated/prism/dsl.rbs +928 -0
  171. data/sig/generated/prism/inspect_visitor.rbs +509 -0
  172. data/sig/generated/prism/lex_compat.rbs +166 -0
  173. data/sig/generated/prism/mutation_compiler.rbs +464 -0
  174. data/sig/generated/prism/node.rbs +20160 -0
  175. data/sig/generated/prism/node_ext.rbs +290 -0
  176. data/sig/generated/prism/node_find.rbs +90 -0
  177. data/sig/generated/prism/parse_result/errors.rbs +22 -0
  178. data/sig/generated/prism/parse_result/newlines.rbs +223 -0
  179. data/sig/generated/prism/parse_result.rbs +859 -0
  180. data/sig/generated/prism/pattern.rbs +156 -0
  181. data/sig/generated/prism/reflection.rbs +101 -0
  182. data/sig/generated/prism/relocation.rbs +428 -0
  183. data/sig/generated/prism/serialize.rbs +195 -0
  184. data/sig/generated/prism/string_query.rbs +36 -0
  185. data/sig/generated/prism/translation.rbs +8 -0
  186. data/sig/generated/prism/visitor.rbs +1111 -0
  187. data/sig/generated/prism.rbs +84 -0
  188. data/sig/manifest.yaml +2 -0
  189. data/src/arena.c +117 -0
  190. data/src/buffer.c +380 -0
  191. data/src/char.c +289 -0
  192. data/src/comments.c +454 -0
  193. data/src/constant_pool.c +406 -0
  194. data/src/diagnostic.c +886 -0
  195. data/src/encoding.c +5345 -0
  196. data/src/errors_format.c +519 -0
  197. data/src/integer.c +681 -0
  198. data/src/json.c +5733 -0
  199. data/src/line_offset_list.c +100 -0
  200. data/src/list.c +24 -0
  201. data/src/memchr.c +37 -0
  202. data/src/node.c +4515 -0
  203. data/src/options.c +451 -0
  204. data/src/parser.c +349 -0
  205. data/src/prettyprint.c +9024 -0
  206. data/src/prism.c +23739 -0
  207. data/src/regexp.c +1706 -0
  208. data/src/serialize.c +2309 -0
  209. data/src/source.c +518 -0
  210. data/src/static_literals.c +685 -0
  211. data/src/string_query.c +166 -0
  212. data/src/stringy.c +91 -0
  213. data/src/strncasecmp.c +37 -0
  214. data/src/strpbrk.c +447 -0
  215. data/src/tokens.c +724 -0
  216. metadata +259 -0
@@ -0,0 +1,306 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ class DesugarAndWriteNode
5
+ include DSL
6
+
7
+ sig { returns(::T.any(ClassVariableAndWriteNode, ConstantAndWriteNode, GlobalVariableAndWriteNode, InstanceVariableAndWriteNode, LocalVariableAndWriteNode)) }
8
+ attr_reader :node
9
+
10
+ sig { returns(Source) }
11
+ attr_reader :default_source
12
+
13
+ sig { returns(Symbol) }
14
+ attr_reader :read_class
15
+
16
+ sig { returns(Symbol) }
17
+ attr_reader :write_class
18
+
19
+ sig { returns(T::Hash[Symbol, ::T.untyped]) }
20
+ attr_reader :arguments
21
+
22
+ sig { params(node: ::T.any(ClassVariableAndWriteNode, ConstantAndWriteNode, GlobalVariableAndWriteNode, InstanceVariableAndWriteNode, LocalVariableAndWriteNode), default_source: Source, read_class: Symbol, write_class: Symbol, arguments: ::T.untyped).void }
23
+ def initialize(node, default_source, read_class, write_class, **arguments); end
24
+
25
+ # Desugar `x &&= y` to `x && x = y`
26
+ sig { returns(Node) }
27
+ def compile; end
28
+ end
29
+
30
+ class DesugarOrWriteDefinedNode
31
+ include DSL
32
+
33
+ sig { returns(::T.any(ClassVariableOrWriteNode, ConstantOrWriteNode, GlobalVariableOrWriteNode)) }
34
+ attr_reader :node
35
+
36
+ sig { returns(Source) }
37
+ attr_reader :default_source
38
+
39
+ sig { returns(Symbol) }
40
+ attr_reader :read_class
41
+
42
+ sig { returns(Symbol) }
43
+ attr_reader :write_class
44
+
45
+ sig { returns(T::Hash[Symbol, ::T.untyped]) }
46
+ attr_reader :arguments
47
+
48
+ sig { params(node: ::T.any(ClassVariableOrWriteNode, ConstantOrWriteNode, GlobalVariableOrWriteNode), default_source: Source, read_class: Symbol, write_class: Symbol, arguments: ::T.untyped).void }
49
+ def initialize(node, default_source, read_class, write_class, **arguments); end
50
+
51
+ # Desugar `x ||= y` to `defined?(x) ? x : x = y`
52
+ sig { returns(Node) }
53
+ def compile; end
54
+ end
55
+
56
+ class DesugarOperatorWriteNode
57
+ include DSL
58
+
59
+ sig { returns(::T.any(ClassVariableOperatorWriteNode, ConstantOperatorWriteNode, GlobalVariableOperatorWriteNode, InstanceVariableOperatorWriteNode, LocalVariableOperatorWriteNode)) }
60
+ attr_reader :node
61
+
62
+ sig { returns(Source) }
63
+ attr_reader :default_source
64
+
65
+ sig { returns(Symbol) }
66
+ attr_reader :read_class
67
+
68
+ sig { returns(Symbol) }
69
+ attr_reader :write_class
70
+
71
+ sig { returns(T::Hash[Symbol, ::T.untyped]) }
72
+ attr_reader :arguments
73
+
74
+ sig { params(node: ::T.any(ClassVariableOperatorWriteNode, ConstantOperatorWriteNode, GlobalVariableOperatorWriteNode, InstanceVariableOperatorWriteNode, LocalVariableOperatorWriteNode), default_source: Source, read_class: Symbol, write_class: Symbol, arguments: ::T.untyped).void }
75
+ def initialize(node, default_source, read_class, write_class, **arguments); end
76
+
77
+ # Desugar `x += y` to `x = x + y`
78
+ sig { returns(Node) }
79
+ def compile; end
80
+ end
81
+
82
+ class DesugarOrWriteNode
83
+ include DSL
84
+
85
+ sig { returns(::T.any(InstanceVariableOrWriteNode, LocalVariableOrWriteNode)) }
86
+ attr_reader :node
87
+
88
+ sig { returns(Source) }
89
+ attr_reader :default_source
90
+
91
+ sig { returns(Symbol) }
92
+ attr_reader :read_class
93
+
94
+ sig { returns(Symbol) }
95
+ attr_reader :write_class
96
+
97
+ sig { returns(T::Hash[Symbol, ::T.untyped]) }
98
+ attr_reader :arguments
99
+
100
+ sig { params(node: ::T.any(InstanceVariableOrWriteNode, LocalVariableOrWriteNode), default_source: Source, read_class: Symbol, write_class: Symbol, arguments: ::T.untyped).void }
101
+ def initialize(node, default_source, read_class, write_class, **arguments); end
102
+
103
+ # Desugar `x ||= y` to `x || x = y`
104
+ sig { returns(Node) }
105
+ def compile; end
106
+ end
107
+
108
+ class ClassVariableAndWriteNode
109
+ sig { returns(Node) }
110
+ def desugar; end
111
+ end
112
+
113
+ class ClassVariableOrWriteNode
114
+ sig { returns(Node) }
115
+ def desugar; end
116
+ end
117
+
118
+ class ClassVariableOperatorWriteNode
119
+ sig { returns(Node) }
120
+ def desugar; end
121
+ end
122
+
123
+ class ConstantAndWriteNode
124
+ sig { returns(Node) }
125
+ def desugar; end
126
+ end
127
+
128
+ class ConstantOrWriteNode
129
+ sig { returns(Node) }
130
+ def desugar; end
131
+ end
132
+
133
+ class ConstantOperatorWriteNode
134
+ sig { returns(Node) }
135
+ def desugar; end
136
+ end
137
+
138
+ class GlobalVariableAndWriteNode
139
+ sig { returns(Node) }
140
+ def desugar; end
141
+ end
142
+
143
+ class GlobalVariableOrWriteNode
144
+ sig { returns(Node) }
145
+ def desugar; end
146
+ end
147
+
148
+ class GlobalVariableOperatorWriteNode
149
+ sig { returns(Node) }
150
+ def desugar; end
151
+ end
152
+
153
+ class InstanceVariableAndWriteNode
154
+ sig { returns(Node) }
155
+ def desugar; end
156
+ end
157
+
158
+ class InstanceVariableOrWriteNode
159
+ sig { returns(Node) }
160
+ def desugar; end
161
+ end
162
+
163
+ class InstanceVariableOperatorWriteNode
164
+ sig { returns(Node) }
165
+ def desugar; end
166
+ end
167
+
168
+ class LocalVariableAndWriteNode
169
+ sig { returns(Node) }
170
+ def desugar; end
171
+ end
172
+
173
+ class LocalVariableOrWriteNode
174
+ sig { returns(Node) }
175
+ def desugar; end
176
+ end
177
+
178
+ class LocalVariableOperatorWriteNode
179
+ sig { returns(Node) }
180
+ def desugar; end
181
+ end
182
+
183
+ # DesugarCompiler is a compiler that desugars Ruby code into a more primitive
184
+ # form. This is useful for consumers that want to deal with fewer node types.
185
+ class DesugarCompiler < MutationCompiler
186
+ # `@@foo &&= bar`
187
+ #
188
+ # becomes
189
+ #
190
+ # `@@foo && @@foo = bar`
191
+ sig { params(node: ClassVariableAndWriteNode).returns(Node) }
192
+ def visit_class_variable_and_write_node(node); end
193
+
194
+ # `@@foo ||= bar`
195
+ #
196
+ # becomes
197
+ #
198
+ # `defined?(@@foo) ? @@foo : @@foo = bar`
199
+ sig { params(node: ClassVariableOrWriteNode).returns(Node) }
200
+ def visit_class_variable_or_write_node(node); end
201
+
202
+ # `@@foo += bar`
203
+ #
204
+ # becomes
205
+ #
206
+ # `@@foo = @@foo + bar`
207
+ sig { params(node: ClassVariableOperatorWriteNode).returns(Node) }
208
+ def visit_class_variable_operator_write_node(node); end
209
+
210
+ # `Foo &&= bar`
211
+ #
212
+ # becomes
213
+ #
214
+ # `Foo && Foo = bar`
215
+ sig { params(node: ConstantAndWriteNode).returns(Node) }
216
+ def visit_constant_and_write_node(node); end
217
+
218
+ # `Foo ||= bar`
219
+ #
220
+ # becomes
221
+ #
222
+ # `defined?(Foo) ? Foo : Foo = bar`
223
+ sig { params(node: ConstantOrWriteNode).returns(Node) }
224
+ def visit_constant_or_write_node(node); end
225
+
226
+ # `Foo += bar`
227
+ #
228
+ # becomes
229
+ #
230
+ # `Foo = Foo + bar`
231
+ sig { params(node: ConstantOperatorWriteNode).returns(Node) }
232
+ def visit_constant_operator_write_node(node); end
233
+
234
+ # `$foo &&= bar`
235
+ #
236
+ # becomes
237
+ #
238
+ # `$foo && $foo = bar`
239
+ sig { params(node: GlobalVariableAndWriteNode).returns(Node) }
240
+ def visit_global_variable_and_write_node(node); end
241
+
242
+ # `$foo ||= bar`
243
+ #
244
+ # becomes
245
+ #
246
+ # `defined?($foo) ? $foo : $foo = bar`
247
+ sig { params(node: GlobalVariableOrWriteNode).returns(Node) }
248
+ def visit_global_variable_or_write_node(node); end
249
+
250
+ # `$foo += bar`
251
+ #
252
+ # becomes
253
+ #
254
+ # `$foo = $foo + bar`
255
+ sig { params(node: GlobalVariableOperatorWriteNode).returns(Node) }
256
+ def visit_global_variable_operator_write_node(node); end
257
+
258
+ # `@foo &&= bar`
259
+ #
260
+ # becomes
261
+ #
262
+ # `@foo && @foo = bar`
263
+ sig { params(node: InstanceVariableAndWriteNode).returns(Node) }
264
+ def visit_instance_variable_and_write_node(node); end
265
+
266
+ # `@foo ||= bar`
267
+ #
268
+ # becomes
269
+ #
270
+ # `@foo || @foo = bar`
271
+ sig { params(node: InstanceVariableOrWriteNode).returns(Node) }
272
+ def visit_instance_variable_or_write_node(node); end
273
+
274
+ # `@foo += bar`
275
+ #
276
+ # becomes
277
+ #
278
+ # `@foo = @foo + bar`
279
+ sig { params(node: InstanceVariableOperatorWriteNode).returns(Node) }
280
+ def visit_instance_variable_operator_write_node(node); end
281
+
282
+ # `foo &&= bar`
283
+ #
284
+ # becomes
285
+ #
286
+ # `foo && foo = bar`
287
+ sig { params(node: LocalVariableAndWriteNode).returns(Node) }
288
+ def visit_local_variable_and_write_node(node); end
289
+
290
+ # `foo ||= bar`
291
+ #
292
+ # becomes
293
+ #
294
+ # `foo || foo = bar`
295
+ sig { params(node: LocalVariableOrWriteNode).returns(Node) }
296
+ def visit_local_variable_or_write_node(node); end
297
+
298
+ # `foo += bar`
299
+ #
300
+ # becomes
301
+ #
302
+ # `foo = foo + bar`
303
+ sig { params(node: LocalVariableOperatorWriteNode).returns(Node) }
304
+ def visit_local_variable_operator_write_node(node); end
305
+ end
306
+ end