prism 1.9.0 → 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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +84 -0
  3. data/Makefile +41 -12
  4. data/README.md +35 -97
  5. data/config.yml +174 -161
  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/serialization.md +21 -24
  15. data/docs/testing.md +46 -29
  16. data/ext/prism/api_node.c +1461 -1401
  17. data/ext/prism/extconf.rb +3 -4
  18. data/ext/prism/extension.c +778 -422
  19. data/ext/prism/extension.h +3 -3
  20. data/include/prism/arena.h +37 -0
  21. data/include/prism/ast.h +2727 -610
  22. data/include/prism/buffer.h +52 -0
  23. data/include/prism/comments.h +55 -0
  24. data/include/prism/compiler/accel.h +24 -0
  25. data/include/prism/compiler/align.h +36 -0
  26. data/include/prism/compiler/assume.h +25 -0
  27. data/include/prism/compiler/exported.h +24 -0
  28. data/include/prism/compiler/fallthrough.h +22 -0
  29. data/include/prism/compiler/filesystem.h +32 -0
  30. data/include/prism/compiler/flex_array.h +19 -0
  31. data/include/prism/compiler/force_inline.h +21 -0
  32. data/include/prism/compiler/format.h +25 -0
  33. data/include/prism/compiler/inline.h +17 -0
  34. data/include/prism/compiler/nodiscard.h +22 -0
  35. data/include/prism/compiler/nonnull.h +18 -0
  36. data/include/prism/compiler/unused.h +18 -0
  37. data/include/prism/constant_pool.h +81 -0
  38. data/include/prism/diagnostic.h +38 -403
  39. data/include/prism/errors_format.h +53 -0
  40. data/include/prism/excludes.h +29 -0
  41. data/include/prism/integer.h +41 -0
  42. data/include/prism/internal/allocator.h +68 -0
  43. data/include/prism/internal/allocator_debug.h +88 -0
  44. data/include/prism/internal/arena.h +108 -0
  45. data/include/prism/internal/bit.h +42 -0
  46. data/include/prism/internal/buffer.h +91 -0
  47. data/include/prism/internal/char.h +145 -0
  48. data/include/prism/internal/comments.h +53 -0
  49. data/include/prism/internal/constant_pool.h +152 -0
  50. data/include/prism/internal/diagnostic.h +389 -0
  51. data/include/prism/{encoding.h → internal/encoding.h} +27 -68
  52. data/include/prism/internal/integer.h +68 -0
  53. data/include/prism/internal/isinf.h +16 -0
  54. data/include/prism/internal/line_offset_list.h +34 -0
  55. data/include/prism/{util/pm_list.h → internal/list.h} +11 -52
  56. data/include/prism/internal/magic_comments.h +23 -0
  57. data/include/prism/internal/memchr.h +15 -0
  58. data/include/prism/internal/node.h +38 -0
  59. data/include/prism/internal/options.h +232 -0
  60. data/include/prism/internal/parser.h +984 -0
  61. data/include/prism/internal/regexp.h +26 -0
  62. data/include/prism/internal/serialize.h +39 -0
  63. data/include/prism/internal/source.h +72 -0
  64. data/include/prism/{static_literals.h → internal/static_literals.h} +26 -47
  65. data/include/prism/internal/stringy.h +35 -0
  66. data/include/prism/{util/pm_strncasecmp.h → internal/strncasecmp.h} +3 -17
  67. data/include/prism/{util/pm_strpbrk.h → internal/strpbrk.h} +7 -20
  68. data/include/prism/internal/tokens.h +11 -0
  69. data/include/prism/json.h +32 -0
  70. data/include/prism/line_offset_list.h +61 -0
  71. data/include/prism/magic_comments.h +35 -0
  72. data/include/prism/node.h +18 -53
  73. data/include/prism/options.h +146 -280
  74. data/include/prism/parser.h +336 -868
  75. data/include/prism/prettyprint.h +6 -9
  76. data/include/prism/serialize.h +115 -0
  77. data/include/prism/source.h +155 -0
  78. data/include/prism/stream.h +28 -0
  79. data/include/prism/string_query.h +63 -0
  80. data/include/prism/stringy.h +72 -0
  81. data/include/prism/version.h +12 -3
  82. data/include/prism.h +43 -320
  83. data/lib/prism/compiler.rb +319 -305
  84. data/lib/prism/desugar_compiler.rb +105 -34
  85. data/lib/prism/dispatcher.rb +646 -473
  86. data/lib/prism/dot_visitor.rb +592 -511
  87. data/lib/prism/dsl.rb +391 -25
  88. data/lib/prism/ffi.rb +252 -90
  89. data/lib/prism/inspect_visitor.rb +357 -325
  90. data/lib/prism/lex_compat.rb +254 -212
  91. data/lib/prism/mutation_compiler.rb +313 -305
  92. data/lib/prism/node.rb +20268 -7030
  93. data/lib/prism/node_ext.rb +180 -187
  94. data/lib/prism/node_find.rb +215 -0
  95. data/lib/prism/parse_result/errors.rb +7 -1
  96. data/lib/prism/parse_result/newlines.rb +276 -8
  97. data/lib/prism/parse_result.rb +453 -139
  98. data/lib/prism/pattern.rb +65 -20
  99. data/lib/prism/reflection.rb +23 -12
  100. data/lib/prism/relocation.rb +149 -87
  101. data/lib/prism/serialize.rb +3443 -535
  102. data/lib/prism/string_query.rb +16 -1
  103. data/lib/prism/translation/parser/builder.rb +10 -2
  104. data/lib/prism/translation/parser/compiler.rb +44 -52
  105. data/lib/prism/translation/parser/lexer.rb +41 -92
  106. data/lib/prism/translation/parser.rb +1 -1
  107. data/lib/prism/translation/parser_current.rb +1 -1
  108. data/lib/prism/translation/ripper/lexer.rb +8 -10
  109. data/lib/prism/translation/ripper/sexp.rb +2 -10
  110. data/lib/prism/translation/ripper/shim.rb +2 -0
  111. data/lib/prism/translation/ripper.rb +967 -209
  112. data/lib/prism/translation/ruby_parser.rb +73 -316
  113. data/lib/prism/translation.rb +2 -0
  114. data/lib/prism/visitor.rb +632 -5
  115. data/lib/prism.rb +79 -9
  116. data/prism.gemspec +122 -60
  117. data/rbi/generated/prism/compiler.rbi +489 -0
  118. data/rbi/generated/prism/desugar_compiler.rbi +306 -0
  119. data/rbi/generated/prism/dispatcher.rbi +1138 -0
  120. data/rbi/generated/prism/dot_visitor.rbi +618 -0
  121. data/rbi/generated/prism/dsl.rbi +751 -0
  122. data/rbi/generated/prism/inspect_visitor.rbi +503 -0
  123. data/rbi/generated/prism/lex_compat.rbi +162 -0
  124. data/rbi/generated/prism/mutation_compiler.rbi +464 -0
  125. data/rbi/generated/prism/node.rbi +13681 -0
  126. data/rbi/generated/prism/node_ext.rbi +259 -0
  127. data/rbi/generated/prism/node_find.rbi +79 -0
  128. data/rbi/generated/prism/parse_result/errors.rbi +21 -0
  129. data/rbi/generated/prism/parse_result/newlines.rbi +208 -0
  130. data/rbi/generated/prism/parse_result.rbi +764 -0
  131. data/rbi/generated/prism/pattern.rbi +134 -0
  132. data/rbi/generated/prism/reflection.rbi +89 -0
  133. data/rbi/generated/prism/relocation.rbi +329 -0
  134. data/rbi/generated/prism/serialize.rbi +181 -0
  135. data/rbi/generated/prism/string_query.rbi +36 -0
  136. data/rbi/generated/prism/translation.rbi +7 -0
  137. data/rbi/generated/prism/visitor.rbi +650 -0
  138. data/rbi/generated/prism.rbi +86 -0
  139. data/rbi/prism/translation/parser_versions.rbi +5 -0
  140. data/rbi/rubyvm/node_find.rbi +14 -0
  141. data/sig/generated/prism/compiler.rbs +492 -0
  142. data/sig/generated/prism/desugar_compiler.rbs +305 -0
  143. data/sig/generated/prism/dispatcher.rbs +1292 -0
  144. data/sig/generated/prism/dot_visitor.rbs +635 -0
  145. data/sig/generated/prism/dsl.rbs +928 -0
  146. data/sig/generated/prism/inspect_visitor.rbs +509 -0
  147. data/sig/generated/prism/lex_compat.rbs +166 -0
  148. data/sig/{prism → generated/prism}/mutation_compiler.rbs +309 -4
  149. data/sig/generated/prism/node.rbs +20160 -0
  150. data/sig/generated/prism/node_ext.rbs +290 -0
  151. data/sig/generated/prism/node_find.rbs +90 -0
  152. data/sig/generated/prism/parse_result/errors.rbs +22 -0
  153. data/sig/generated/prism/parse_result/newlines.rbs +223 -0
  154. data/sig/generated/prism/parse_result.rbs +859 -0
  155. data/sig/generated/prism/pattern.rbs +156 -0
  156. data/sig/generated/prism/reflection.rbs +101 -0
  157. data/sig/generated/prism/relocation.rbs +428 -0
  158. data/sig/generated/prism/serialize.rbs +195 -0
  159. data/sig/generated/prism/string_query.rbs +36 -0
  160. data/sig/generated/prism/translation.rbs +8 -0
  161. data/sig/generated/prism/visitor.rbs +1111 -0
  162. data/sig/generated/prism.rbs +84 -0
  163. data/sig/manifest.yaml +2 -0
  164. data/src/arena.c +117 -0
  165. data/src/{util/pm_buffer.c → buffer.c} +44 -21
  166. data/src/{util/pm_char.c → char.c} +28 -57
  167. data/src/comments.c +454 -0
  168. data/src/constant_pool.c +406 -0
  169. data/src/diagnostic.c +97 -65
  170. data/src/encoding.c +8 -3
  171. data/src/errors_format.c +519 -0
  172. data/src/{util/pm_integer.c → integer.c} +33 -22
  173. data/src/json.c +5733 -0
  174. data/src/line_offset_list.c +100 -0
  175. data/src/list.c +24 -0
  176. data/src/{util/pm_memchr.c → memchr.c} +8 -6
  177. data/src/node.c +3504 -7674
  178. data/src/options.c +162 -49
  179. data/src/parser.c +349 -0
  180. data/src/prettyprint.c +421 -354
  181. data/src/prism.c +8030 -6970
  182. data/src/regexp.c +961 -45
  183. data/src/serialize.c +459 -424
  184. data/src/source.c +518 -0
  185. data/src/static_literals.c +111 -43
  186. data/src/string_query.c +166 -0
  187. data/src/stringy.c +91 -0
  188. data/src/{util/pm_strncasecmp.c → strncasecmp.c} +5 -4
  189. data/src/strpbrk.c +447 -0
  190. data/src/{token_type.c → tokens.c} +39 -18
  191. metadata +122 -61
  192. data/ext/prism/api_pack.c +0 -276
  193. data/include/prism/defines.h +0 -260
  194. data/include/prism/pack.h +0 -163
  195. data/include/prism/regexp.h +0 -43
  196. data/include/prism/util/pm_buffer.h +0 -236
  197. data/include/prism/util/pm_char.h +0 -204
  198. data/include/prism/util/pm_constant_pool.h +0 -218
  199. data/include/prism/util/pm_integer.h +0 -130
  200. data/include/prism/util/pm_memchr.h +0 -29
  201. data/include/prism/util/pm_newline_list.h +0 -113
  202. data/include/prism/util/pm_string.h +0 -200
  203. data/lib/prism/pack.rb +0 -230
  204. data/lib/prism/parse_result/comments.rb +0 -188
  205. data/rbi/prism/compiler.rbi +0 -12
  206. data/rbi/prism/dsl.rbi +0 -524
  207. data/rbi/prism/inspect_visitor.rbi +0 -12
  208. data/rbi/prism/node.rbi +0 -8750
  209. data/rbi/prism/node_ext.rbi +0 -107
  210. data/rbi/prism/parse_result.rbi +0 -404
  211. data/rbi/prism/reflection.rbi +0 -58
  212. data/rbi/prism/string_query.rbi +0 -12
  213. data/rbi/prism/visitor.rbi +0 -473
  214. data/rbi/prism.rbi +0 -63
  215. data/sig/prism/compiler.rbs +0 -9
  216. data/sig/prism/dispatcher.rbs +0 -19
  217. data/sig/prism/dot_visitor.rbs +0 -6
  218. data/sig/prism/dsl.rbs +0 -351
  219. data/sig/prism/inspect_visitor.rbs +0 -22
  220. data/sig/prism/lex_compat.rbs +0 -10
  221. data/sig/prism/node.rbs +0 -4042
  222. data/sig/prism/node_ext.rbs +0 -149
  223. data/sig/prism/pack.rbs +0 -43
  224. data/sig/prism/parse_result/comments.rbs +0 -38
  225. data/sig/prism/parse_result.rbs +0 -197
  226. data/sig/prism/pattern.rbs +0 -13
  227. data/sig/prism/reflection.rbs +0 -50
  228. data/sig/prism/relocation.rbs +0 -185
  229. data/sig/prism/serialize.rbs +0 -8
  230. data/sig/prism/string_query.rbs +0 -11
  231. data/sig/prism/visitor.rbs +0 -169
  232. data/sig/prism.rbs +0 -272
  233. data/src/pack.c +0 -509
  234. data/src/util/pm_constant_pool.c +0 -342
  235. data/src/util/pm_list.c +0 -49
  236. data/src/util/pm_newline_list.c +0 -125
  237. data/src/util/pm_string.c +0 -381
  238. 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.9.0
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
@@ -83,9 +122,8 @@ files:
83
122
  - lib/prism/mutation_compiler.rb
84
123
  - lib/prism/node.rb
85
124
  - lib/prism/node_ext.rb
86
- - lib/prism/pack.rb
125
+ - lib/prism/node_find.rb
87
126
  - lib/prism/parse_result.rb
88
- - lib/prism/parse_result/comments.rb
89
127
  - lib/prism/parse_result/errors.rb
90
128
  - lib/prism/parse_result/newlines.rb
91
129
  - lib/prism/pattern.rb
@@ -113,59 +151,82 @@ files:
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