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,181 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ # A module responsible for deserializing parse results.
5
+ module Serialize
6
+ # The major version of prism that we are expecting to find in the serialized
7
+ # strings.
8
+ MAJOR_VERSION = T.let(nil, Integer)
9
+
10
+ # The minor version of prism that we are expecting to find in the serialized
11
+ # strings.
12
+ MINOR_VERSION = T.let(nil, Integer)
13
+
14
+ # The patch version of prism that we are expecting to find in the serialized
15
+ # strings.
16
+ PATCH_VERSION = T.let(nil, Integer)
17
+
18
+ # Deserialize the dumped output from a request to parse or parse_file.
19
+ #
20
+ # The formatting of the source of this method is purposeful to illustrate
21
+ # the structure of the serialized data.
22
+ sig { params(input: String, serialized: String, freeze: T::Boolean).returns(ParseResult) }
23
+ def self.load_parse(input, serialized, freeze); end
24
+
25
+ # Deserialize the dumped output from a request to lex or lex_file.
26
+ #
27
+ # The formatting of the source of this method is purposeful to illustrate
28
+ # the structure of the serialized data.
29
+ sig { params(input: String, serialized: String, freeze: T::Boolean).returns(LexResult) }
30
+ def self.load_lex(input, serialized, freeze); end
31
+
32
+ # Deserialize the dumped output from a request to parse_comments or
33
+ # parse_file_comments.
34
+ #
35
+ # The formatting of the source of this method is purposeful to illustrate
36
+ # the structure of the serialized data.
37
+ sig { params(input: String, serialized: String, freeze: T::Boolean).returns(T::Array[Comment]) }
38
+ def self.load_parse_comments(input, serialized, freeze); end
39
+
40
+ # Deserialize the dumped output from a request to parse_lex or
41
+ # parse_lex_file.
42
+ #
43
+ # The formatting of the source of this method is purposeful to illustrate
44
+ # the structure of the serialized data.
45
+ sig { params(input: String, serialized: String, freeze: T::Boolean).returns(ParseLexResult) }
46
+ def self.load_parse_lex(input, serialized, freeze); end
47
+
48
+ class ConstantPool
49
+ sig { returns(Integer) }
50
+ attr_reader :size
51
+
52
+ sig { params(serialized: String, base: Integer, size: Integer).void }
53
+ def initialize(serialized, base, size); end
54
+
55
+ sig { params(index: Integer, encoding: Encoding).returns(Symbol) }
56
+ def get(index, encoding); end
57
+ end
58
+
59
+ FastStringIO = T.let(nil, ::T.untyped)
60
+
61
+ class Loader
62
+ sig { returns(String) }
63
+ attr_reader :input
64
+
65
+ sig { returns(StringIO) }
66
+ attr_reader :io
67
+
68
+ sig { returns(Source) }
69
+ attr_reader :source
70
+
71
+ sig { params(source: Source, serialized: String).void }
72
+ def initialize(source, serialized); end
73
+
74
+ sig { returns(T::Boolean) }
75
+ def eof?; end
76
+
77
+ sig { params(constant_pool: ConstantPool).void }
78
+ def load_constant_pool(constant_pool); end
79
+
80
+ sig { void }
81
+ def load_header; end
82
+
83
+ sig { returns(Encoding) }
84
+ def load_encoding; end
85
+
86
+ sig { params(freeze: T::Boolean).returns(T::Array[Integer]) }
87
+ def load_line_offsets(freeze); end
88
+
89
+ # Load the comments attached to each node into the comment attachments and
90
+ # comment ranges of the given source. For each node that owns comments, the
91
+ # index at which its comments begin is stored at its node id and the index
92
+ # at which they end at the following node id.
93
+ sig { params(source: Source, freeze: T::Boolean).void }
94
+ def load_comment_attachments(source, freeze); end
95
+
96
+ # Load the comments into the given list, which belongs to the source that
97
+ # the comments refer to.
98
+ sig { params(comments: T::Array[Comment], freeze: T::Boolean).returns(T::Array[Comment]) }
99
+ def load_comments(comments, freeze); end
100
+
101
+ sig { params(freeze: T::Boolean).returns(T::Array[MagicComment]) }
102
+ def load_magic_comments(freeze); end
103
+
104
+ DIAGNOSTIC_TYPES = T.let(nil, T::Array[Symbol])
105
+
106
+ sig { returns(Symbol) }
107
+ def load_error_level; end
108
+
109
+ sig { params(encoding: Encoding, freeze: T::Boolean).returns(T::Array[ParseError]) }
110
+ def load_errors(encoding, freeze); end
111
+
112
+ sig { returns(Symbol) }
113
+ def load_warning_level; end
114
+
115
+ sig { params(encoding: Encoding, freeze: T::Boolean).returns(T::Array[ParseWarning]) }
116
+ def load_warnings(encoding, freeze); end
117
+
118
+ sig { returns(T::Array[Token]) }
119
+ def load_tokens; end
120
+
121
+ # variable-length integer using https://en.wikipedia.org/wiki/LEB128
122
+ # This is also what protobuf uses: https://protobuf.dev/programming-guides/encoding/#varints
123
+ sig { returns(Integer) }
124
+ def load_varuint; end
125
+
126
+ sig { returns(Integer) }
127
+ def load_varsint; end
128
+
129
+ sig { returns(Integer) }
130
+ def load_integer; end
131
+
132
+ sig { returns(Float) }
133
+ def load_double; end
134
+
135
+ sig { returns(T::Boolean) }
136
+ def load_bool; end
137
+
138
+ sig { returns(Integer) }
139
+ def load_uint32; end
140
+
141
+ sig { params(constant_pool: ConstantPool, encoding: Encoding, freeze: T::Boolean).returns(::T.nilable(Node)) }
142
+ def load_optional_node(constant_pool, encoding, freeze); end
143
+
144
+ sig { params(encoding: Encoding).returns(String) }
145
+ def load_string(encoding); end
146
+
147
+ sig { params(freeze: T::Boolean).returns(Location) }
148
+ def load_location_object(freeze); end
149
+
150
+ # Load a location object from the serialized data. Note that we are lying
151
+ # about the signature a bit here, because we sometimes load it as a packed
152
+ # integer instead of an object.
153
+ sig { params(freeze: T::Boolean).returns(Location) }
154
+ def load_location(freeze); end
155
+
156
+ # Load an optional location object from the serialized data if it is
157
+ # present. Note that we are lying about the signature a bit here, because
158
+ # we sometimes load it as a packed integer instead of an object.
159
+ sig { params(freeze: T::Boolean).returns(::T.nilable(Location)) }
160
+ def load_optional_location(freeze); end
161
+
162
+ sig { params(freeze: T::Boolean).returns(::T.nilable(Location)) }
163
+ def load_optional_location_object(freeze); end
164
+
165
+ sig { params(constant_pool: ConstantPool, encoding: Encoding).returns(Symbol) }
166
+ def load_constant(constant_pool, encoding); end
167
+
168
+ sig { params(constant_pool: ConstantPool, encoding: Encoding).returns(::T.nilable(Symbol)) }
169
+ def load_optional_constant(constant_pool, encoding); end
170
+
171
+ sig { params(constant_pool: ConstantPool, encoding: Encoding, freeze: T::Boolean).returns(Node) }
172
+ def load_node(constant_pool, encoding, freeze); end
173
+
174
+ sig { void }
175
+ def define_load_node_lambdas; end
176
+ end
177
+
178
+ # The token types that can be indexed by their enum values.
179
+ TOKEN_TYPES = T.let(nil, T::Array[::T.nilable(Symbol)])
180
+ end
181
+ end
@@ -0,0 +1,36 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ # Query methods that allow categorizing strings based on their context for
5
+ # where they could be valid in a Ruby syntax tree.
6
+ class StringQuery
7
+ sig { params(string: String).returns(T::Boolean) }
8
+ def self.local?(string); end
9
+
10
+ sig { params(string: String).returns(T::Boolean) }
11
+ def self.constant?(string); end
12
+
13
+ sig { params(string: String).returns(T::Boolean) }
14
+ def self.method_name?(string); end
15
+
16
+ # The string that this query is wrapping.
17
+ sig { returns(String) }
18
+ attr_reader :string
19
+
20
+ # Initialize a new query with the given string.
21
+ sig { params(string: String).void }
22
+ def initialize(string); end
23
+
24
+ # Whether or not this string is a valid local variable name.
25
+ sig { returns(T::Boolean) }
26
+ def local?; end
27
+
28
+ # Whether or not this string is a valid constant name.
29
+ sig { returns(T::Boolean) }
30
+ def constant?; end
31
+
32
+ # Whether or not this string is a valid method name.
33
+ sig { returns(T::Boolean) }
34
+ def method_name?; end
35
+ end
36
+ end
@@ -0,0 +1,7 @@
1
+ # typed: true
2
+
3
+ module Prism
4
+ # This module is responsible for converting the prism syntax tree into other
5
+ # syntax trees.
6
+ module Translation; end
7
+ end