prism 1.8.1 → 2.0.0.rc1

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 (241) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +90 -2
  3. data/Makefile +41 -12
  4. data/README.md +35 -97
  5. data/config.yml +174 -163
  6. data/docs/build_system.md +2 -2
  7. data/docs/configuration.md +5 -4
  8. data/docs/encoding.md +2 -2
  9. data/docs/fuzzing.md +4 -11
  10. data/docs/javascript.md +19 -4
  11. data/docs/mapping.md +1 -1
  12. data/docs/releasing.md +77 -5
  13. data/docs/relocation.md +2 -4
  14. data/docs/ripper_translation.md +8 -17
  15. data/docs/serialization.md +21 -24
  16. data/docs/testing.md +46 -29
  17. data/ext/prism/api_node.c +1461 -1401
  18. data/ext/prism/extconf.rb +3 -4
  19. data/ext/prism/extension.c +778 -422
  20. data/ext/prism/extension.h +3 -3
  21. data/include/prism/arena.h +37 -0
  22. data/include/prism/ast.h +2729 -612
  23. data/include/prism/buffer.h +52 -0
  24. data/include/prism/comments.h +55 -0
  25. data/include/prism/compiler/accel.h +24 -0
  26. data/include/prism/compiler/align.h +36 -0
  27. data/include/prism/compiler/assume.h +25 -0
  28. data/include/prism/compiler/exported.h +24 -0
  29. data/include/prism/compiler/fallthrough.h +22 -0
  30. data/include/prism/compiler/filesystem.h +32 -0
  31. data/include/prism/compiler/flex_array.h +19 -0
  32. data/include/prism/compiler/force_inline.h +21 -0
  33. data/include/prism/compiler/format.h +25 -0
  34. data/include/prism/compiler/inline.h +17 -0
  35. data/include/prism/compiler/nodiscard.h +22 -0
  36. data/include/prism/compiler/nonnull.h +18 -0
  37. data/include/prism/compiler/unused.h +18 -0
  38. data/include/prism/constant_pool.h +81 -0
  39. data/include/prism/diagnostic.h +38 -405
  40. data/include/prism/errors_format.h +53 -0
  41. data/include/prism/excludes.h +29 -0
  42. data/include/prism/integer.h +41 -0
  43. data/include/prism/internal/allocator.h +68 -0
  44. data/include/prism/internal/allocator_debug.h +88 -0
  45. data/include/prism/internal/arena.h +108 -0
  46. data/include/prism/internal/bit.h +42 -0
  47. data/include/prism/internal/buffer.h +91 -0
  48. data/include/prism/internal/char.h +145 -0
  49. data/include/prism/internal/comments.h +53 -0
  50. data/include/prism/internal/constant_pool.h +152 -0
  51. data/include/prism/internal/diagnostic.h +389 -0
  52. data/include/prism/{encoding.h → internal/encoding.h} +27 -68
  53. data/include/prism/internal/integer.h +68 -0
  54. data/include/prism/internal/isinf.h +16 -0
  55. data/include/prism/internal/line_offset_list.h +34 -0
  56. data/include/prism/{util/pm_list.h → internal/list.h} +11 -52
  57. data/include/prism/internal/magic_comments.h +23 -0
  58. data/include/prism/internal/memchr.h +15 -0
  59. data/include/prism/internal/node.h +38 -0
  60. data/include/prism/internal/options.h +232 -0
  61. data/include/prism/internal/parser.h +984 -0
  62. data/include/prism/internal/regexp.h +26 -0
  63. data/include/prism/internal/serialize.h +39 -0
  64. data/include/prism/internal/source.h +72 -0
  65. data/include/prism/{static_literals.h → internal/static_literals.h} +26 -47
  66. data/include/prism/internal/stringy.h +35 -0
  67. data/include/prism/{util/pm_strncasecmp.h → internal/strncasecmp.h} +3 -17
  68. data/include/prism/{util/pm_strpbrk.h → internal/strpbrk.h} +7 -20
  69. data/include/prism/internal/tokens.h +11 -0
  70. data/include/prism/json.h +32 -0
  71. data/include/prism/line_offset_list.h +61 -0
  72. data/include/prism/magic_comments.h +35 -0
  73. data/include/prism/node.h +18 -53
  74. data/include/prism/options.h +146 -280
  75. data/include/prism/parser.h +336 -868
  76. data/include/prism/prettyprint.h +6 -9
  77. data/include/prism/serialize.h +115 -0
  78. data/include/prism/source.h +155 -0
  79. data/include/prism/stream.h +28 -0
  80. data/include/prism/string_query.h +63 -0
  81. data/include/prism/stringy.h +72 -0
  82. data/include/prism/version.h +13 -4
  83. data/include/prism.h +43 -320
  84. data/lib/prism/compiler.rb +319 -305
  85. data/lib/prism/desugar_compiler.rb +105 -34
  86. data/lib/prism/dispatcher.rb +646 -473
  87. data/lib/prism/dot_visitor.rb +592 -511
  88. data/lib/prism/dsl.rb +391 -25
  89. data/lib/prism/ffi.rb +252 -90
  90. data/lib/prism/inspect_visitor.rb +357 -325
  91. data/lib/prism/lex_compat.rb +311 -228
  92. data/lib/prism/mutation_compiler.rb +313 -305
  93. data/lib/prism/node.rb +20284 -7038
  94. data/lib/prism/node_ext.rb +180 -187
  95. data/lib/prism/node_find.rb +215 -0
  96. data/lib/prism/parse_result/errors.rb +7 -1
  97. data/lib/prism/parse_result/newlines.rb +276 -8
  98. data/lib/prism/parse_result.rb +462 -139
  99. data/lib/prism/pattern.rb +65 -20
  100. data/lib/prism/reflection.rb +23 -12
  101. data/lib/prism/relocation.rb +149 -87
  102. data/lib/prism/serialize.rb +3442 -536
  103. data/lib/prism/string_query.rb +16 -1
  104. data/lib/prism/translation/parser/builder.rb +10 -2
  105. data/lib/prism/translation/parser/compiler.rb +44 -52
  106. data/lib/prism/translation/parser/lexer.rb +41 -92
  107. data/lib/prism/translation/parser.rb +1 -1
  108. data/lib/prism/translation/parser_current.rb +1 -1
  109. data/lib/prism/translation/ripper/filter.rb +53 -0
  110. data/lib/prism/translation/ripper/lexer.rb +92 -5
  111. data/lib/prism/translation/ripper/sexp.rb +2 -10
  112. data/lib/prism/translation/ripper/shim.rb +2 -0
  113. data/lib/prism/translation/ripper.rb +1005 -224
  114. data/lib/prism/translation/ruby_parser.rb +73 -316
  115. data/lib/prism/translation.rb +2 -0
  116. data/lib/prism/visitor.rb +632 -5
  117. data/lib/prism.rb +79 -22
  118. data/prism.gemspec +123 -61
  119. data/rbi/generated/prism/compiler.rbi +489 -0
  120. data/rbi/generated/prism/desugar_compiler.rbi +306 -0
  121. data/rbi/generated/prism/dispatcher.rbi +1138 -0
  122. data/rbi/generated/prism/dot_visitor.rbi +618 -0
  123. data/rbi/generated/prism/dsl.rbi +751 -0
  124. data/rbi/generated/prism/inspect_visitor.rbi +503 -0
  125. data/rbi/generated/prism/lex_compat.rbi +162 -0
  126. data/rbi/generated/prism/mutation_compiler.rbi +464 -0
  127. data/rbi/generated/prism/node.rbi +13681 -0
  128. data/rbi/generated/prism/node_ext.rbi +259 -0
  129. data/rbi/generated/prism/node_find.rbi +79 -0
  130. data/rbi/generated/prism/parse_result/errors.rbi +21 -0
  131. data/rbi/generated/prism/parse_result/newlines.rbi +208 -0
  132. data/rbi/generated/prism/parse_result.rbi +764 -0
  133. data/rbi/generated/prism/pattern.rbi +134 -0
  134. data/rbi/generated/prism/reflection.rbi +89 -0
  135. data/rbi/generated/prism/relocation.rbi +329 -0
  136. data/rbi/generated/prism/serialize.rbi +181 -0
  137. data/rbi/generated/prism/string_query.rbi +36 -0
  138. data/rbi/generated/prism/translation.rbi +7 -0
  139. data/rbi/generated/prism/visitor.rbi +650 -0
  140. data/rbi/generated/prism.rbi +86 -0
  141. data/rbi/prism/translation/parser_versions.rbi +5 -0
  142. data/rbi/rubyvm/node_find.rbi +14 -0
  143. data/sig/generated/prism/compiler.rbs +492 -0
  144. data/sig/generated/prism/desugar_compiler.rbs +305 -0
  145. data/sig/generated/prism/dispatcher.rbs +1292 -0
  146. data/sig/generated/prism/dot_visitor.rbs +635 -0
  147. data/sig/generated/prism/dsl.rbs +928 -0
  148. data/sig/generated/prism/inspect_visitor.rbs +509 -0
  149. data/sig/generated/prism/lex_compat.rbs +166 -0
  150. data/sig/{prism → generated/prism}/mutation_compiler.rbs +309 -4
  151. data/sig/generated/prism/node.rbs +20160 -0
  152. data/sig/generated/prism/node_ext.rbs +290 -0
  153. data/sig/generated/prism/node_find.rbs +90 -0
  154. data/sig/generated/prism/parse_result/errors.rbs +22 -0
  155. data/sig/generated/prism/parse_result/newlines.rbs +223 -0
  156. data/sig/generated/prism/parse_result.rbs +859 -0
  157. data/sig/generated/prism/pattern.rbs +156 -0
  158. data/sig/generated/prism/reflection.rbs +101 -0
  159. data/sig/generated/prism/relocation.rbs +428 -0
  160. data/sig/generated/prism/serialize.rbs +195 -0
  161. data/sig/generated/prism/string_query.rbs +36 -0
  162. data/sig/generated/prism/translation.rbs +8 -0
  163. data/sig/generated/prism/visitor.rbs +1111 -0
  164. data/sig/generated/prism.rbs +84 -0
  165. data/sig/manifest.yaml +2 -0
  166. data/src/arena.c +117 -0
  167. data/src/{util/pm_buffer.c → buffer.c} +44 -21
  168. data/src/{util/pm_char.c → char.c} +28 -57
  169. data/src/comments.c +454 -0
  170. data/src/constant_pool.c +406 -0
  171. data/src/diagnostic.c +93 -65
  172. data/src/encoding.c +8 -3
  173. data/src/errors_format.c +519 -0
  174. data/src/{util/pm_integer.c → integer.c} +33 -22
  175. data/src/json.c +5733 -0
  176. data/src/line_offset_list.c +100 -0
  177. data/src/list.c +24 -0
  178. data/src/{util/pm_memchr.c → memchr.c} +8 -6
  179. data/src/node.c +3504 -7674
  180. data/src/options.c +162 -49
  181. data/src/parser.c +349 -0
  182. data/src/prettyprint.c +421 -354
  183. data/src/prism.c +8035 -7019
  184. data/src/regexp.c +961 -45
  185. data/src/serialize.c +459 -424
  186. data/src/source.c +518 -0
  187. data/src/static_literals.c +111 -43
  188. data/src/string_query.c +166 -0
  189. data/src/stringy.c +91 -0
  190. data/src/{util/pm_strncasecmp.c → strncasecmp.c} +5 -4
  191. data/src/strpbrk.c +447 -0
  192. data/src/{token_type.c → tokens.c} +39 -18
  193. metadata +123 -62
  194. data/ext/prism/api_pack.c +0 -276
  195. data/include/prism/defines.h +0 -260
  196. data/include/prism/pack.h +0 -163
  197. data/include/prism/regexp.h +0 -43
  198. data/include/prism/util/pm_buffer.h +0 -236
  199. data/include/prism/util/pm_char.h +0 -204
  200. data/include/prism/util/pm_constant_pool.h +0 -218
  201. data/include/prism/util/pm_integer.h +0 -130
  202. data/include/prism/util/pm_memchr.h +0 -29
  203. data/include/prism/util/pm_newline_list.h +0 -113
  204. data/include/prism/util/pm_string.h +0 -200
  205. data/lib/prism/lex_ripper.rb +0 -64
  206. data/lib/prism/pack.rb +0 -230
  207. data/lib/prism/parse_result/comments.rb +0 -188
  208. data/rbi/prism/compiler.rbi +0 -12
  209. data/rbi/prism/dsl.rbi +0 -524
  210. data/rbi/prism/inspect_visitor.rbi +0 -12
  211. data/rbi/prism/node.rbi +0 -8747
  212. data/rbi/prism/node_ext.rbi +0 -107
  213. data/rbi/prism/parse_result.rbi +0 -404
  214. data/rbi/prism/reflection.rbi +0 -58
  215. data/rbi/prism/string_query.rbi +0 -12
  216. data/rbi/prism/visitor.rbi +0 -473
  217. data/rbi/prism.rbi +0 -66
  218. data/sig/prism/compiler.rbs +0 -9
  219. data/sig/prism/dispatcher.rbs +0 -19
  220. data/sig/prism/dot_visitor.rbs +0 -6
  221. data/sig/prism/dsl.rbs +0 -351
  222. data/sig/prism/inspect_visitor.rbs +0 -22
  223. data/sig/prism/lex_compat.rbs +0 -10
  224. data/sig/prism/node.rbs +0 -4039
  225. data/sig/prism/node_ext.rbs +0 -149
  226. data/sig/prism/pack.rbs +0 -43
  227. data/sig/prism/parse_result/comments.rbs +0 -38
  228. data/sig/prism/parse_result.rbs +0 -196
  229. data/sig/prism/pattern.rbs +0 -13
  230. data/sig/prism/reflection.rbs +0 -50
  231. data/sig/prism/relocation.rbs +0 -185
  232. data/sig/prism/serialize.rbs +0 -8
  233. data/sig/prism/string_query.rbs +0 -11
  234. data/sig/prism/visitor.rbs +0 -169
  235. data/sig/prism.rbs +0 -258
  236. data/src/pack.c +0 -509
  237. data/src/util/pm_constant_pool.c +0 -342
  238. data/src/util/pm_list.c +0 -49
  239. data/src/util/pm_newline_list.c +0 -125
  240. data/src/util/pm_string.c +0 -381
  241. data/src/util/pm_strpbrk.c +0 -206
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prism
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.1
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
@@ -44,32 +44,71 @@ files:
44
44
  - docs/serialization.md
45
45
  - docs/testing.md
46
46
  - ext/prism/api_node.c
47
- - ext/prism/api_pack.c
48
47
  - ext/prism/extconf.rb
49
48
  - ext/prism/extension.c
50
49
  - ext/prism/extension.h
51
50
  - include/prism.h
51
+ - include/prism/arena.h
52
52
  - include/prism/ast.h
53
- - include/prism/defines.h
53
+ - include/prism/buffer.h
54
+ - include/prism/comments.h
55
+ - include/prism/compiler/accel.h
56
+ - include/prism/compiler/align.h
57
+ - include/prism/compiler/assume.h
58
+ - include/prism/compiler/exported.h
59
+ - include/prism/compiler/fallthrough.h
60
+ - include/prism/compiler/filesystem.h
61
+ - include/prism/compiler/flex_array.h
62
+ - include/prism/compiler/force_inline.h
63
+ - include/prism/compiler/format.h
64
+ - include/prism/compiler/inline.h
65
+ - include/prism/compiler/nodiscard.h
66
+ - include/prism/compiler/nonnull.h
67
+ - include/prism/compiler/unused.h
68
+ - include/prism/constant_pool.h
54
69
  - include/prism/diagnostic.h
55
- - include/prism/encoding.h
70
+ - include/prism/errors_format.h
71
+ - include/prism/excludes.h
72
+ - include/prism/integer.h
73
+ - include/prism/internal/allocator.h
74
+ - include/prism/internal/allocator_debug.h
75
+ - include/prism/internal/arena.h
76
+ - include/prism/internal/bit.h
77
+ - include/prism/internal/buffer.h
78
+ - include/prism/internal/char.h
79
+ - include/prism/internal/comments.h
80
+ - include/prism/internal/constant_pool.h
81
+ - include/prism/internal/diagnostic.h
82
+ - include/prism/internal/encoding.h
83
+ - include/prism/internal/integer.h
84
+ - include/prism/internal/isinf.h
85
+ - include/prism/internal/line_offset_list.h
86
+ - include/prism/internal/list.h
87
+ - include/prism/internal/magic_comments.h
88
+ - include/prism/internal/memchr.h
89
+ - include/prism/internal/node.h
90
+ - include/prism/internal/options.h
91
+ - include/prism/internal/parser.h
92
+ - include/prism/internal/regexp.h
93
+ - include/prism/internal/serialize.h
94
+ - include/prism/internal/source.h
95
+ - include/prism/internal/static_literals.h
96
+ - include/prism/internal/stringy.h
97
+ - include/prism/internal/strncasecmp.h
98
+ - include/prism/internal/strpbrk.h
99
+ - include/prism/internal/tokens.h
100
+ - include/prism/json.h
101
+ - include/prism/line_offset_list.h
102
+ - include/prism/magic_comments.h
56
103
  - include/prism/node.h
57
104
  - include/prism/options.h
58
- - include/prism/pack.h
59
105
  - include/prism/parser.h
60
106
  - include/prism/prettyprint.h
61
- - include/prism/regexp.h
62
- - include/prism/static_literals.h
63
- - include/prism/util/pm_buffer.h
64
- - include/prism/util/pm_char.h
65
- - include/prism/util/pm_constant_pool.h
66
- - include/prism/util/pm_integer.h
67
- - include/prism/util/pm_list.h
68
- - include/prism/util/pm_memchr.h
69
- - include/prism/util/pm_newline_list.h
70
- - include/prism/util/pm_string.h
71
- - include/prism/util/pm_strncasecmp.h
72
- - include/prism/util/pm_strpbrk.h
107
+ - include/prism/serialize.h
108
+ - include/prism/source.h
109
+ - include/prism/stream.h
110
+ - include/prism/string_query.h
111
+ - include/prism/stringy.h
73
112
  - include/prism/version.h
74
113
  - lib/prism.rb
75
114
  - lib/prism/compiler.rb
@@ -80,13 +119,11 @@ files:
80
119
  - lib/prism/ffi.rb
81
120
  - lib/prism/inspect_visitor.rb
82
121
  - lib/prism/lex_compat.rb
83
- - lib/prism/lex_ripper.rb
84
122
  - lib/prism/mutation_compiler.rb
85
123
  - lib/prism/node.rb
86
124
  - lib/prism/node_ext.rb
87
- - lib/prism/pack.rb
125
+ - lib/prism/node_find.rb
88
126
  - lib/prism/parse_result.rb
89
- - lib/prism/parse_result/comments.rb
90
127
  - lib/prism/parse_result/errors.rb
91
128
  - lib/prism/parse_result/newlines.rb
92
129
  - lib/prism/pattern.rb
@@ -107,65 +144,89 @@ files:
107
144
  - lib/prism/translation/parser_current.rb
108
145
  - lib/prism/translation/parser_versions.rb
109
146
  - lib/prism/translation/ripper.rb
147
+ - lib/prism/translation/ripper/filter.rb
110
148
  - lib/prism/translation/ripper/lexer.rb
111
149
  - lib/prism/translation/ripper/sexp.rb
112
150
  - lib/prism/translation/ripper/shim.rb
113
151
  - lib/prism/translation/ruby_parser.rb
114
152
  - lib/prism/visitor.rb
115
153
  - prism.gemspec
116
- - rbi/prism.rbi
117
- - rbi/prism/compiler.rbi
118
- - rbi/prism/dsl.rbi
119
- - rbi/prism/inspect_visitor.rbi
120
- - rbi/prism/node.rbi
121
- - rbi/prism/node_ext.rbi
122
- - rbi/prism/parse_result.rbi
123
- - rbi/prism/reflection.rbi
124
- - rbi/prism/string_query.rbi
154
+ - rbi/generated/prism.rbi
155
+ - rbi/generated/prism/compiler.rbi
156
+ - rbi/generated/prism/desugar_compiler.rbi
157
+ - rbi/generated/prism/dispatcher.rbi
158
+ - rbi/generated/prism/dot_visitor.rbi
159
+ - rbi/generated/prism/dsl.rbi
160
+ - rbi/generated/prism/inspect_visitor.rbi
161
+ - rbi/generated/prism/lex_compat.rbi
162
+ - rbi/generated/prism/mutation_compiler.rbi
163
+ - rbi/generated/prism/node.rbi
164
+ - rbi/generated/prism/node_ext.rbi
165
+ - rbi/generated/prism/node_find.rbi
166
+ - rbi/generated/prism/parse_result.rbi
167
+ - rbi/generated/prism/parse_result/errors.rbi
168
+ - rbi/generated/prism/parse_result/newlines.rbi
169
+ - rbi/generated/prism/pattern.rbi
170
+ - rbi/generated/prism/reflection.rbi
171
+ - rbi/generated/prism/relocation.rbi
172
+ - rbi/generated/prism/serialize.rbi
173
+ - rbi/generated/prism/string_query.rbi
174
+ - rbi/generated/prism/translation.rbi
175
+ - rbi/generated/prism/visitor.rbi
125
176
  - rbi/prism/translation/parser.rbi
126
177
  - rbi/prism/translation/parser_versions.rbi
127
178
  - rbi/prism/translation/ripper.rbi
128
- - rbi/prism/visitor.rbi
129
- - sig/prism.rbs
130
- - sig/prism/compiler.rbs
131
- - sig/prism/dispatcher.rbs
132
- - sig/prism/dot_visitor.rbs
133
- - sig/prism/dsl.rbs
134
- - sig/prism/inspect_visitor.rbs
135
- - sig/prism/lex_compat.rbs
136
- - sig/prism/mutation_compiler.rbs
137
- - sig/prism/node.rbs
138
- - sig/prism/node_ext.rbs
139
- - sig/prism/pack.rbs
140
- - sig/prism/parse_result.rbs
141
- - sig/prism/parse_result/comments.rbs
142
- - sig/prism/pattern.rbs
143
- - sig/prism/reflection.rbs
144
- - sig/prism/relocation.rbs
145
- - sig/prism/serialize.rbs
146
- - sig/prism/string_query.rbs
147
- - sig/prism/visitor.rbs
179
+ - rbi/rubyvm/node_find.rbi
180
+ - sig/generated/prism.rbs
181
+ - sig/generated/prism/compiler.rbs
182
+ - sig/generated/prism/desugar_compiler.rbs
183
+ - sig/generated/prism/dispatcher.rbs
184
+ - sig/generated/prism/dot_visitor.rbs
185
+ - sig/generated/prism/dsl.rbs
186
+ - sig/generated/prism/inspect_visitor.rbs
187
+ - sig/generated/prism/lex_compat.rbs
188
+ - sig/generated/prism/mutation_compiler.rbs
189
+ - sig/generated/prism/node.rbs
190
+ - sig/generated/prism/node_ext.rbs
191
+ - sig/generated/prism/node_find.rbs
192
+ - sig/generated/prism/parse_result.rbs
193
+ - sig/generated/prism/parse_result/errors.rbs
194
+ - sig/generated/prism/parse_result/newlines.rbs
195
+ - sig/generated/prism/pattern.rbs
196
+ - sig/generated/prism/reflection.rbs
197
+ - sig/generated/prism/relocation.rbs
198
+ - sig/generated/prism/serialize.rbs
199
+ - sig/generated/prism/string_query.rbs
200
+ - sig/generated/prism/translation.rbs
201
+ - sig/generated/prism/visitor.rbs
202
+ - sig/manifest.yaml
203
+ - src/arena.c
204
+ - src/buffer.c
205
+ - src/char.c
206
+ - src/comments.c
207
+ - src/constant_pool.c
148
208
  - src/diagnostic.c
149
209
  - src/encoding.c
210
+ - src/errors_format.c
211
+ - src/integer.c
212
+ - src/json.c
213
+ - src/line_offset_list.c
214
+ - src/list.c
215
+ - src/memchr.c
150
216
  - src/node.c
151
217
  - src/options.c
152
- - src/pack.c
218
+ - src/parser.c
153
219
  - src/prettyprint.c
154
220
  - src/prism.c
155
221
  - src/regexp.c
156
222
  - src/serialize.c
223
+ - src/source.c
157
224
  - src/static_literals.c
158
- - src/token_type.c
159
- - src/util/pm_buffer.c
160
- - src/util/pm_char.c
161
- - src/util/pm_constant_pool.c
162
- - src/util/pm_integer.c
163
- - src/util/pm_list.c
164
- - src/util/pm_memchr.c
165
- - src/util/pm_newline_list.c
166
- - src/util/pm_string.c
167
- - src/util/pm_strncasecmp.c
168
- - src/util/pm_strpbrk.c
225
+ - src/string_query.c
226
+ - src/stringy.c
227
+ - src/strncasecmp.c
228
+ - src/strpbrk.c
229
+ - src/tokens.c
169
230
  homepage: https://github.com/ruby/prism
170
231
  licenses:
171
232
  - MIT
@@ -187,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
248
  - !ruby/object:Gem::Version
188
249
  version: '0'
189
250
  requirements: []
190
- rubygems_version: 3.6.9
251
+ rubygems_version: 4.0.20
191
252
  specification_version: 4
192
253
  summary: Prism Ruby parser
193
254
  test_files: []
data/ext/prism/api_pack.c DELETED
@@ -1,276 +0,0 @@
1
- #include "prism/extension.h"
2
-
3
- #ifdef PRISM_EXCLUDE_PACK
4
-
5
- void
6
- Init_prism_pack(void) {}
7
-
8
- #else
9
-
10
- static VALUE rb_cPrism;
11
- static VALUE rb_cPrismPack;
12
- static VALUE rb_cPrismPackDirective;
13
- static VALUE rb_cPrismPackFormat;
14
-
15
- static VALUE v3_2_0_symbol;
16
- static VALUE pack_symbol;
17
- static VALUE unpack_symbol;
18
-
19
- #if SIZEOF_UINT64_T == SIZEOF_LONG_LONG
20
- # define UINT64T2NUM(x) ULL2NUM(x)
21
- # define NUM2UINT64T(x) (uint64_t)NUM2ULL(x)
22
- #elif SIZEOF_UINT64_T == SIZEOF_LONG
23
- # define UINT64T2NUM(x) ULONG2NUM(x)
24
- # define NUM2UINT64T(x) (uint64_t)NUM2ULONG(x)
25
- #else
26
- // error No uint64_t conversion
27
- #endif
28
-
29
- static VALUE
30
- pack_type_to_symbol(pm_pack_type type) {
31
- switch (type) {
32
- case PM_PACK_SPACE:
33
- return ID2SYM(rb_intern("SPACE"));
34
- case PM_PACK_COMMENT:
35
- return ID2SYM(rb_intern("COMMENT"));
36
- case PM_PACK_INTEGER:
37
- return ID2SYM(rb_intern("INTEGER"));
38
- case PM_PACK_UTF8:
39
- return ID2SYM(rb_intern("UTF8"));
40
- case PM_PACK_BER:
41
- return ID2SYM(rb_intern("BER"));
42
- case PM_PACK_FLOAT:
43
- return ID2SYM(rb_intern("FLOAT"));
44
- case PM_PACK_STRING_SPACE_PADDED:
45
- return ID2SYM(rb_intern("STRING_SPACE_PADDED"));
46
- case PM_PACK_STRING_NULL_PADDED:
47
- return ID2SYM(rb_intern("STRING_NULL_PADDED"));
48
- case PM_PACK_STRING_NULL_TERMINATED:
49
- return ID2SYM(rb_intern("STRING_NULL_TERMINATED"));
50
- case PM_PACK_STRING_MSB:
51
- return ID2SYM(rb_intern("STRING_MSB"));
52
- case PM_PACK_STRING_LSB:
53
- return ID2SYM(rb_intern("STRING_LSB"));
54
- case PM_PACK_STRING_HEX_HIGH:
55
- return ID2SYM(rb_intern("STRING_HEX_HIGH"));
56
- case PM_PACK_STRING_HEX_LOW:
57
- return ID2SYM(rb_intern("STRING_HEX_LOW"));
58
- case PM_PACK_STRING_UU:
59
- return ID2SYM(rb_intern("STRING_UU"));
60
- case PM_PACK_STRING_MIME:
61
- return ID2SYM(rb_intern("STRING_MIME"));
62
- case PM_PACK_STRING_BASE64:
63
- return ID2SYM(rb_intern("STRING_BASE64"));
64
- case PM_PACK_STRING_FIXED:
65
- return ID2SYM(rb_intern("STRING_FIXED"));
66
- case PM_PACK_STRING_POINTER:
67
- return ID2SYM(rb_intern("STRING_POINTER"));
68
- case PM_PACK_MOVE:
69
- return ID2SYM(rb_intern("MOVE"));
70
- case PM_PACK_BACK:
71
- return ID2SYM(rb_intern("BACK"));
72
- case PM_PACK_NULL:
73
- return ID2SYM(rb_intern("NULL"));
74
- default:
75
- return Qnil;
76
- }
77
- }
78
-
79
- static VALUE
80
- pack_signed_to_symbol(pm_pack_signed signed_type) {
81
- switch (signed_type) {
82
- case PM_PACK_UNSIGNED:
83
- return ID2SYM(rb_intern("UNSIGNED"));
84
- case PM_PACK_SIGNED:
85
- return ID2SYM(rb_intern("SIGNED"));
86
- case PM_PACK_SIGNED_NA:
87
- return ID2SYM(rb_intern("SIGNED_NA"));
88
- default:
89
- return Qnil;
90
- }
91
- }
92
-
93
- static VALUE
94
- pack_endian_to_symbol(pm_pack_endian endian) {
95
- switch (endian) {
96
- case PM_PACK_AGNOSTIC_ENDIAN:
97
- return ID2SYM(rb_intern("AGNOSTIC_ENDIAN"));
98
- case PM_PACK_LITTLE_ENDIAN:
99
- return ID2SYM(rb_intern("LITTLE_ENDIAN"));
100
- case PM_PACK_BIG_ENDIAN:
101
- return ID2SYM(rb_intern("BIG_ENDIAN"));
102
- case PM_PACK_NATIVE_ENDIAN:
103
- return ID2SYM(rb_intern("NATIVE_ENDIAN"));
104
- case PM_PACK_ENDIAN_NA:
105
- return ID2SYM(rb_intern("ENDIAN_NA"));
106
- default:
107
- return Qnil;
108
- }
109
- }
110
-
111
- static VALUE
112
- pack_size_to_symbol(pm_pack_size size) {
113
- switch (size) {
114
- case PM_PACK_SIZE_SHORT:
115
- return ID2SYM(rb_intern("SIZE_SHORT"));
116
- case PM_PACK_SIZE_INT:
117
- return ID2SYM(rb_intern("SIZE_INT"));
118
- case PM_PACK_SIZE_LONG:
119
- return ID2SYM(rb_intern("SIZE_LONG"));
120
- case PM_PACK_SIZE_LONG_LONG:
121
- return ID2SYM(rb_intern("SIZE_LONG_LONG"));
122
- case PM_PACK_SIZE_8:
123
- return ID2SYM(rb_intern("SIZE_8"));
124
- case PM_PACK_SIZE_16:
125
- return ID2SYM(rb_intern("SIZE_16"));
126
- case PM_PACK_SIZE_32:
127
- return ID2SYM(rb_intern("SIZE_32"));
128
- case PM_PACK_SIZE_64:
129
- return ID2SYM(rb_intern("SIZE_64"));
130
- case PM_PACK_SIZE_P:
131
- return ID2SYM(rb_intern("SIZE_P"));
132
- case PM_PACK_SIZE_NA:
133
- return ID2SYM(rb_intern("SIZE_NA"));
134
- default:
135
- return Qnil;
136
- }
137
- }
138
-
139
- static VALUE
140
- pack_length_type_to_symbol(pm_pack_length_type length_type) {
141
- switch (length_type) {
142
- case PM_PACK_LENGTH_FIXED:
143
- return ID2SYM(rb_intern("LENGTH_FIXED"));
144
- case PM_PACK_LENGTH_MAX:
145
- return ID2SYM(rb_intern("LENGTH_MAX"));
146
- case PM_PACK_LENGTH_RELATIVE:
147
- return ID2SYM(rb_intern("LENGTH_RELATIVE"));
148
- case PM_PACK_LENGTH_NA:
149
- return ID2SYM(rb_intern("LENGTH_NA"));
150
- default:
151
- return Qnil;
152
- }
153
- }
154
-
155
- static VALUE
156
- pack_encoding_to_ruby(pm_pack_encoding encoding) {
157
- int index;
158
- switch (encoding) {
159
- case PM_PACK_ENCODING_ASCII_8BIT:
160
- index = rb_ascii8bit_encindex();
161
- break;
162
- case PM_PACK_ENCODING_US_ASCII:
163
- index = rb_usascii_encindex();
164
- break;
165
- case PM_PACK_ENCODING_UTF_8:
166
- index = rb_utf8_encindex();
167
- break;
168
- default:
169
- return Qnil;
170
- }
171
- return rb_enc_from_encoding(rb_enc_from_index(index));
172
- }
173
-
174
- /**
175
- * call-seq:
176
- * Pack::parse(version, variant, source) -> Format
177
- *
178
- * Parse the given source and return a format object.
179
- */
180
- static VALUE
181
- pack_parse(VALUE self, VALUE version_symbol, VALUE variant_symbol, VALUE format_string) {
182
- if (version_symbol != v3_2_0_symbol) {
183
- rb_raise(rb_eArgError, "invalid version");
184
- }
185
-
186
- pm_pack_variant variant;
187
- if (variant_symbol == pack_symbol) {
188
- variant = PM_PACK_VARIANT_PACK;
189
- } else if (variant_symbol == unpack_symbol) {
190
- variant = PM_PACK_VARIANT_UNPACK;
191
- } else {
192
- rb_raise(rb_eArgError, "invalid variant");
193
- }
194
-
195
- StringValue(format_string);
196
-
197
- const char *format = RSTRING_PTR(format_string);
198
- const char *format_end = format + RSTRING_LEN(format_string);
199
- pm_pack_encoding encoding = PM_PACK_ENCODING_START;
200
-
201
- VALUE directives_array = rb_ary_new();
202
-
203
- while (format < format_end) {
204
- pm_pack_type type;
205
- pm_pack_signed signed_type;
206
- pm_pack_endian endian;
207
- pm_pack_size size;
208
- pm_pack_length_type length_type;
209
- uint64_t length;
210
-
211
- const char *directive_start = format;
212
-
213
- pm_pack_result parse_result = pm_pack_parse(variant, &format, format_end, &type, &signed_type, &endian,
214
- &size, &length_type, &length, &encoding);
215
-
216
- const char *directive_end = format;
217
-
218
- switch (parse_result) {
219
- case PM_PACK_OK:
220
- break;
221
- case PM_PACK_ERROR_UNSUPPORTED_DIRECTIVE:
222
- rb_raise(rb_eArgError, "unsupported directive");
223
- case PM_PACK_ERROR_UNKNOWN_DIRECTIVE:
224
- rb_raise(rb_eArgError, "unsupported directive");
225
- case PM_PACK_ERROR_LENGTH_TOO_BIG:
226
- rb_raise(rb_eRangeError, "pack length too big");
227
- case PM_PACK_ERROR_BANG_NOT_ALLOWED:
228
- rb_raise(rb_eRangeError, "bang not allowed");
229
- case PM_PACK_ERROR_DOUBLE_ENDIAN:
230
- rb_raise(rb_eRangeError, "double endian");
231
- default:
232
- rb_bug("parse result");
233
- }
234
-
235
- if (type == PM_PACK_END) {
236
- break;
237
- }
238
-
239
- VALUE directive_args[9] = {
240
- version_symbol,
241
- variant_symbol,
242
- rb_usascii_str_new(directive_start, directive_end - directive_start),
243
- pack_type_to_symbol(type),
244
- pack_signed_to_symbol(signed_type),
245
- pack_endian_to_symbol(endian),
246
- pack_size_to_symbol(size),
247
- pack_length_type_to_symbol(length_type),
248
- UINT64T2NUM(length)
249
- };
250
-
251
- rb_ary_push(directives_array, rb_class_new_instance(9, directive_args, rb_cPrismPackDirective));
252
- }
253
-
254
- VALUE format_args[2];
255
- format_args[0] = directives_array;
256
- format_args[1] = pack_encoding_to_ruby(encoding);
257
- return rb_class_new_instance(2, format_args, rb_cPrismPackFormat);
258
- }
259
-
260
- /**
261
- * The function that gets called when Ruby initializes the prism extension.
262
- */
263
- void
264
- Init_prism_pack(void) {
265
- rb_cPrism = rb_define_module("Prism");
266
- rb_cPrismPack = rb_define_module_under(rb_cPrism, "Pack");
267
- rb_cPrismPackDirective = rb_define_class_under(rb_cPrismPack, "Directive", rb_cObject);
268
- rb_cPrismPackFormat = rb_define_class_under(rb_cPrismPack, "Format", rb_cObject);
269
- rb_define_singleton_method(rb_cPrismPack, "parse", pack_parse, 3);
270
-
271
- v3_2_0_symbol = ID2SYM(rb_intern("v3_2_0"));
272
- pack_symbol = ID2SYM(rb_intern("pack"));
273
- unpack_symbol = ID2SYM(rb_intern("unpack"));
274
- }
275
-
276
- #endif