@appthreat/atom-parsetools 1.2.2 → 1.4.0

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 (267) hide show
  1. package/README.md +118 -7
  2. package/astgen.js +297 -57
  3. package/package.json +9 -6
  4. package/plugins/composer/installed.php +6 -6
  5. package/plugins/rubyastgen/Gemfile +6 -4
  6. package/plugins/rubyastgen/Gemfile.lock +5 -8
  7. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/Gemfile +11 -0
  8. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/exe/ruby_ast_gen +55 -0
  9. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen/cli.rb +133 -0
  10. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen/node_handling.rb +449 -0
  11. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/lib/ruby_ast_gen/version.rb +1 -1
  12. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/lib/ruby_ast_gen.rb +888 -0
  13. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-4ac84327b3af/ruby_ast_gen.gemspec +25 -0
  14. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/current.rb +1 -1
  15. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/version.rb +1 -1
  16. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/ast-2.4.3.gemspec +29 -0
  17. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/bundler-2.6.9.gemspec +25 -0
  18. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/ostruct-0.6.3.gemspec +22 -0
  19. package/plugins/rubyastgen/bundle/ruby/4.0.0/specifications/parser-3.3.12.0.gemspec +37 -0
  20. package/rbastgen.js +102 -13
  21. package/scalasem.js +11 -2
  22. package/plugins/bin/bundler +0 -14
  23. package/plugins/bin/ruby_ast_gen +0 -14
  24. package/plugins/rubyastgen/bundle/bundler/setup.rb +0 -44
  25. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/exe/ruby_ast_gen +0 -63
  26. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/lib/ruby_ast_gen/node_handling.rb +0 -269
  27. package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/ruby_ast_gen-cc312ebf06b4/lib/ruby_ast_gen.rb +0 -218
  28. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/gem.build_complete +0 -0
  29. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/gem_make.out +0 -44
  30. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/mkmf.log +0 -74
  31. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/prism-1.9.0/prism/prism.so +0 -0
  32. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/gem.build_complete +0 -0
  33. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/gem_make.out +0 -18
  34. package/plugins/rubyastgen/bundle/ruby/4.0.0/extensions/x86_64-linux/4.0.0/racc-1.8.1/racc/cparse.so +0 -0
  35. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/BSDmakefile +0 -58
  36. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/Makefile +0 -116
  37. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/Makefile +0 -273
  38. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/api_node.c +0 -6945
  39. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/api_pack.c +0 -276
  40. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extconf.rb +0 -127
  41. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extension.c +0 -1427
  42. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/ext/prism/extension.h +0 -19
  43. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/ast.h +0 -8254
  44. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/defines.h +0 -260
  45. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/diagnostic.h +0 -458
  46. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/encoding.h +0 -283
  47. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/node.h +0 -129
  48. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/options.h +0 -488
  49. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/pack.h +0 -163
  50. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/parser.h +0 -936
  51. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/prettyprint.h +0 -34
  52. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/regexp.h +0 -43
  53. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/static_literals.h +0 -121
  54. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +0 -236
  55. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_char.h +0 -204
  56. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +0 -218
  57. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +0 -130
  58. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_list.h +0 -103
  59. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +0 -29
  60. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +0 -113
  61. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_string.h +0 -200
  62. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +0 -32
  63. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +0 -46
  64. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism/version.h +0 -29
  65. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/include/prism.h +0 -408
  66. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/compiler.rb +0 -801
  67. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +0 -392
  68. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +0 -2210
  69. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +0 -4767
  70. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/dsl.rb +0 -1003
  71. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/ffi.rb +0 -578
  72. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +0 -2393
  73. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +0 -911
  74. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +0 -772
  75. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/node.rb +0 -19966
  76. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/node_ext.rb +0 -511
  77. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/pack.rb +0 -230
  78. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +0 -188
  79. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +0 -66
  80. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +0 -155
  81. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/parse_result.rb +0 -907
  82. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/pattern.rb +0 -269
  83. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +0 -15
  84. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +0 -13
  85. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +0 -14
  86. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +0 -14
  87. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +0 -36
  88. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
  89. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/reflection.rb +0 -416
  90. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/relocation.rb +0 -505
  91. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/serialize.rb +0 -2400
  92. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/string_query.rb +0 -31
  93. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +0 -62
  94. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +0 -2234
  95. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +0 -820
  96. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +0 -376
  97. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +0 -26
  98. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +0 -36
  99. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +0 -53
  100. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +0 -135
  101. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +0 -126
  102. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +0 -5
  103. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +0 -3520
  104. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +0 -1964
  105. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/translation.rb +0 -18
  106. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism/visitor.rb +0 -813
  107. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/lib/prism.rb +0 -98
  108. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +0 -12
  109. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +0 -524
  110. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +0 -12
  111. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/node.rbi +0 -8750
  112. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +0 -107
  113. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +0 -404
  114. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +0 -58
  115. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +0 -12
  116. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +0 -11
  117. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +0 -23
  118. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +0 -15
  119. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +0 -473
  120. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/rbi/prism.rbi +0 -63
  121. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/compiler.rbs +0 -9
  122. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +0 -19
  123. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +0 -6
  124. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/dsl.rbs +0 -351
  125. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +0 -22
  126. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +0 -10
  127. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +0 -159
  128. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/node.rbs +0 -4042
  129. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +0 -149
  130. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/pack.rbs +0 -43
  131. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +0 -38
  132. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +0 -197
  133. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/pattern.rbs +0 -13
  134. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/reflection.rbs +0 -50
  135. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/relocation.rbs +0 -185
  136. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/serialize.rbs +0 -8
  137. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/string_query.rbs +0 -11
  138. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism/visitor.rbs +0 -169
  139. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/sig/prism.rbs +0 -272
  140. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/diagnostic.c +0 -854
  141. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/encoding.c +0 -5340
  142. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/node.c +0 -8685
  143. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/options.c +0 -338
  144. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/pack.c +0 -509
  145. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/prettyprint.c +0 -8957
  146. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/prism.c +0 -22679
  147. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/regexp.c +0 -790
  148. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/serialize.c +0 -2274
  149. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/static_literals.c +0 -617
  150. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/token_type.c +0 -703
  151. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_buffer.c +0 -357
  152. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_char.c +0 -318
  153. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +0 -342
  154. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_integer.c +0 -670
  155. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_list.c +0 -49
  156. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_memchr.c +0 -35
  157. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_newline_list.c +0 -125
  158. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_string.c +0 -381
  159. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +0 -36
  160. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +0 -206
  161. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/BSDL +0 -22
  162. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/COPYING +0 -56
  163. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ChangeLog +0 -846
  164. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/README.ja.rdoc +0 -58
  165. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/README.rdoc +0 -60
  166. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/TODO +0 -5
  167. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/bin/racc +0 -320
  168. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/Makefile +0 -273
  169. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/cparse.c +0 -840
  170. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/ext/racc/cparse/extconf.rb +0 -8
  171. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/compat.rb +0 -33
  172. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/cparse.so +0 -0
  173. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/debugflags.rb +0 -60
  174. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/exception.rb +0 -16
  175. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/grammar.rb +0 -1191
  176. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/grammarfileparser.rb +0 -667
  177. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/info.rb +0 -18
  178. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/iset.rb +0 -92
  179. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/logfilegenerator.rb +0 -212
  180. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parser-text.rb +0 -644
  181. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parser.rb +0 -630
  182. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/parserfilegenerator.rb +0 -473
  183. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/sourcetext.rb +0 -35
  184. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/state.rb +0 -976
  185. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/statetransitiontable.rb +0 -311
  186. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc/static.rb +0 -5
  187. package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/racc-1.8.1/lib/racc.rb +0 -6
  188. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/.rspec +0 -0
  189. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/bin/console +0 -0
  190. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/bin/setup +0 -0
  191. /package/plugins/rubyastgen/bundle/ruby/4.0.0/bundler/gems/{ruby_ast_gen-cc312ebf06b4 → ruby_ast_gen-4ac84327b3af}/update_version.rb +0 -0
  192. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/bin/ruby-parse +0 -0
  193. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/bin/ruby-rewrite +0 -0
  194. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/gauntlet_parser.rb +0 -0
  195. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/all.rb +0 -0
  196. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ast/node.rb +0 -0
  197. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ast/processor.rb +0 -0
  198. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/base.rb +0 -0
  199. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/builders/default.rb +0 -0
  200. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/clobbering_error.rb +0 -0
  201. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/color.rb +0 -0
  202. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/context.rb +0 -0
  203. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/current_arg_stack.rb +0 -0
  204. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/deprecation.rb +0 -0
  205. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/diagnostic/engine.rb +0 -0
  206. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/diagnostic.rb +0 -0
  207. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/dedenter.rb +0 -0
  208. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/explanation.rb +0 -0
  209. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/literal.rb +0 -0
  210. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer/stack_state.rb +0 -0
  211. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer-F0.rb +0 -0
  212. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer-F1.rb +0 -0
  213. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/lexer-strings.rb +0 -0
  214. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/macruby.rb +0 -0
  215. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/max_numparam_stack.rb +0 -0
  216. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/messages.rb +0 -0
  217. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/meta.rb +0 -0
  218. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/rewriter.rb +0 -0
  219. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby18.rb +0 -0
  220. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby19.rb +0 -0
  221. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby20.rb +0 -0
  222. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby21.rb +0 -0
  223. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby22.rb +0 -0
  224. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby23.rb +0 -0
  225. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby24.rb +0 -0
  226. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby25.rb +0 -0
  227. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby26.rb +0 -0
  228. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby27.rb +0 -0
  229. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby30.rb +0 -0
  230. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby31.rb +0 -0
  231. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby32.rb +0 -0
  232. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby33.rb +0 -0
  233. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/ruby34.rb +0 -0
  234. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/rubymotion.rb +0 -0
  235. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/runner/ruby_parse.rb +0 -0
  236. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/runner/ruby_rewrite.rb +0 -0
  237. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/runner.rb +0 -0
  238. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/buffer.rb +0 -0
  239. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/comment/associator.rb +0 -0
  240. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/comment.rb +0 -0
  241. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/collection.rb +0 -0
  242. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/condition.rb +0 -0
  243. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/constant.rb +0 -0
  244. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/definition.rb +0 -0
  245. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/for.rb +0 -0
  246. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/heredoc.rb +0 -0
  247. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/index.rb +0 -0
  248. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/keyword.rb +0 -0
  249. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/method_definition.rb +0 -0
  250. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/objc_kwarg.rb +0 -0
  251. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/operator.rb +0 -0
  252. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/rescue_body.rb +0 -0
  253. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/send.rb +0 -0
  254. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/ternary.rb +0 -0
  255. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map/variable.rb +0 -0
  256. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/map.rb +0 -0
  257. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/range.rb +0 -0
  258. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/rewriter/action.rb +0 -0
  259. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/rewriter.rb +0 -0
  260. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/tree_rewriter/action.rb +0 -0
  261. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/source/tree_rewriter.rb +0 -0
  262. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/static_environment.rb +0 -0
  263. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/syntax_error.rb +0 -0
  264. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/tree_rewriter.rb +0 -0
  265. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/unknown_encoding_in_magic_comment_error.rb +0 -0
  266. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser/variables_stack.rb +0 -0
  267. /package/plugins/rubyastgen/bundle/ruby/4.0.0/gems/{parser-3.3.11.1 → parser-3.3.12.0}/lib/parser.rb +0 -0
@@ -1,670 +0,0 @@
1
- #include "prism/util/pm_integer.h"
2
-
3
- /**
4
- * Pull out the length and values from the integer, regardless of the form in
5
- * which the length/values are stored.
6
- */
7
- #define INTEGER_EXTRACT(integer, length_variable, values_variable) \
8
- if ((integer)->values == NULL) { \
9
- length_variable = 1; \
10
- values_variable = &(integer)->value; \
11
- } else { \
12
- length_variable = (integer)->length; \
13
- values_variable = (integer)->values; \
14
- }
15
-
16
- /**
17
- * Adds two positive pm_integer_t with the given base.
18
- * Return pm_integer_t with values allocated. Not normalized.
19
- */
20
- static void
21
- big_add(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *right, uint64_t base) {
22
- size_t left_length;
23
- uint32_t *left_values;
24
- INTEGER_EXTRACT(left, left_length, left_values)
25
-
26
- size_t right_length;
27
- uint32_t *right_values;
28
- INTEGER_EXTRACT(right, right_length, right_values)
29
-
30
- size_t length = left_length < right_length ? right_length : left_length;
31
- uint32_t *values = (uint32_t *) xmalloc(sizeof(uint32_t) * (length + 1));
32
- if (values == NULL) return;
33
-
34
- uint64_t carry = 0;
35
- for (size_t index = 0; index < length; index++) {
36
- uint64_t sum = carry + (index < left_length ? left_values[index] : 0) + (index < right_length ? right_values[index] : 0);
37
- values[index] = (uint32_t) (sum % base);
38
- carry = sum / base;
39
- }
40
-
41
- if (carry > 0) {
42
- values[length] = (uint32_t) carry;
43
- length++;
44
- }
45
-
46
- *destination = (pm_integer_t) { length, values, 0, false };
47
- }
48
-
49
- /**
50
- * Internal use for karatsuba_multiply. Calculates `a - b - c` with the given
51
- * base. Assume a, b, c, a - b - c all to be positive.
52
- * Return pm_integer_t with values allocated. Not normalized.
53
- */
54
- static void
55
- big_sub2(pm_integer_t *destination, pm_integer_t *a, pm_integer_t *b, pm_integer_t *c, uint64_t base) {
56
- size_t a_length;
57
- uint32_t *a_values;
58
- INTEGER_EXTRACT(a, a_length, a_values)
59
-
60
- size_t b_length;
61
- uint32_t *b_values;
62
- INTEGER_EXTRACT(b, b_length, b_values)
63
-
64
- size_t c_length;
65
- uint32_t *c_values;
66
- INTEGER_EXTRACT(c, c_length, c_values)
67
-
68
- uint32_t *values = (uint32_t*) xmalloc(sizeof(uint32_t) * a_length);
69
- int64_t carry = 0;
70
-
71
- for (size_t index = 0; index < a_length; index++) {
72
- int64_t sub = (
73
- carry +
74
- a_values[index] -
75
- (index < b_length ? b_values[index] : 0) -
76
- (index < c_length ? c_values[index] : 0)
77
- );
78
-
79
- if (sub >= 0) {
80
- values[index] = (uint32_t) sub;
81
- carry = 0;
82
- } else {
83
- sub += 2 * (int64_t) base;
84
- values[index] = (uint32_t) ((uint64_t) sub % base);
85
- carry = sub / (int64_t) base - 2;
86
- }
87
- }
88
-
89
- while (a_length > 1 && values[a_length - 1] == 0) a_length--;
90
- *destination = (pm_integer_t) { a_length, values, 0, false };
91
- }
92
-
93
- /**
94
- * Multiply two positive integers with the given base using karatsuba algorithm.
95
- * Return pm_integer_t with values allocated. Not normalized.
96
- */
97
- static void
98
- karatsuba_multiply(pm_integer_t *destination, pm_integer_t *left, pm_integer_t *right, uint64_t base) {
99
- size_t left_length;
100
- uint32_t *left_values;
101
- INTEGER_EXTRACT(left, left_length, left_values)
102
-
103
- size_t right_length;
104
- uint32_t *right_values;
105
- INTEGER_EXTRACT(right, right_length, right_values)
106
-
107
- if (left_length > right_length) {
108
- size_t temporary_length = left_length;
109
- left_length = right_length;
110
- right_length = temporary_length;
111
-
112
- uint32_t *temporary_values = left_values;
113
- left_values = right_values;
114
- right_values = temporary_values;
115
- }
116
-
117
- if (left_length <= 10) {
118
- size_t length = left_length + right_length;
119
- uint32_t *values = (uint32_t *) xcalloc(length, sizeof(uint32_t));
120
- if (values == NULL) return;
121
-
122
- for (size_t left_index = 0; left_index < left_length; left_index++) {
123
- uint32_t carry = 0;
124
- for (size_t right_index = 0; right_index < right_length; right_index++) {
125
- uint64_t product = (uint64_t) left_values[left_index] * right_values[right_index] + values[left_index + right_index] + carry;
126
- values[left_index + right_index] = (uint32_t) (product % base);
127
- carry = (uint32_t) (product / base);
128
- }
129
- values[left_index + right_length] = carry;
130
- }
131
-
132
- while (length > 1 && values[length - 1] == 0) length--;
133
- *destination = (pm_integer_t) { length, values, 0, false };
134
- return;
135
- }
136
-
137
- if (left_length * 2 <= right_length) {
138
- uint32_t *values = (uint32_t *) xcalloc(left_length + right_length, sizeof(uint32_t));
139
-
140
- for (size_t start_offset = 0; start_offset < right_length; start_offset += left_length) {
141
- size_t end_offset = start_offset + left_length;
142
- if (end_offset > right_length) end_offset = right_length;
143
-
144
- pm_integer_t sliced_left = {
145
- .length = left_length,
146
- .values = left_values,
147
- .value = 0,
148
- .negative = false
149
- };
150
-
151
- pm_integer_t sliced_right = {
152
- .length = end_offset - start_offset,
153
- .values = right_values + start_offset,
154
- .value = 0,
155
- .negative = false
156
- };
157
-
158
- pm_integer_t product;
159
- karatsuba_multiply(&product, &sliced_left, &sliced_right, base);
160
-
161
- uint32_t carry = 0;
162
- for (size_t index = 0; index < product.length; index++) {
163
- uint64_t sum = (uint64_t) values[start_offset + index] + product.values[index] + carry;
164
- values[start_offset + index] = (uint32_t) (sum % base);
165
- carry = (uint32_t) (sum / base);
166
- }
167
-
168
- if (carry > 0) values[start_offset + product.length] += carry;
169
- pm_integer_free(&product);
170
- }
171
-
172
- *destination = (pm_integer_t) { left_length + right_length, values, 0, false };
173
- return;
174
- }
175
-
176
- size_t half = left_length / 2;
177
- pm_integer_t x0 = { half, left_values, 0, false };
178
- pm_integer_t x1 = { left_length - half, left_values + half, 0, false };
179
- pm_integer_t y0 = { half, right_values, 0, false };
180
- pm_integer_t y1 = { right_length - half, right_values + half, 0, false };
181
-
182
- pm_integer_t z0 = { 0 };
183
- karatsuba_multiply(&z0, &x0, &y0, base);
184
-
185
- pm_integer_t z2 = { 0 };
186
- karatsuba_multiply(&z2, &x1, &y1, base);
187
-
188
- // For simplicity to avoid considering negative values,
189
- // use `z1 = (x0 + x1) * (y0 + y1) - z0 - z2` instead of original karatsuba algorithm.
190
- pm_integer_t x01 = { 0 };
191
- big_add(&x01, &x0, &x1, base);
192
-
193
- pm_integer_t y01 = { 0 };
194
- big_add(&y01, &y0, &y1, base);
195
-
196
- pm_integer_t xy = { 0 };
197
- karatsuba_multiply(&xy, &x01, &y01, base);
198
-
199
- pm_integer_t z1;
200
- big_sub2(&z1, &xy, &z0, &z2, base);
201
-
202
- size_t length = left_length + right_length;
203
- uint32_t *values = (uint32_t*) xcalloc(length, sizeof(uint32_t));
204
-
205
- assert(z0.values != NULL);
206
- memcpy(values, z0.values, sizeof(uint32_t) * z0.length);
207
-
208
- assert(z2.values != NULL);
209
- memcpy(values + 2 * half, z2.values, sizeof(uint32_t) * z2.length);
210
-
211
- uint32_t carry = 0;
212
- for(size_t index = 0; index < z1.length; index++) {
213
- uint64_t sum = (uint64_t) carry + values[index + half] + z1.values[index];
214
- values[index + half] = (uint32_t) (sum % base);
215
- carry = (uint32_t) (sum / base);
216
- }
217
-
218
- for(size_t index = half + z1.length; carry > 0; index++) {
219
- uint64_t sum = (uint64_t) carry + values[index];
220
- values[index] = (uint32_t) (sum % base);
221
- carry = (uint32_t) (sum / base);
222
- }
223
-
224
- while (length > 1 && values[length - 1] == 0) length--;
225
- pm_integer_free(&z0);
226
- pm_integer_free(&z1);
227
- pm_integer_free(&z2);
228
- pm_integer_free(&x01);
229
- pm_integer_free(&y01);
230
- pm_integer_free(&xy);
231
-
232
- *destination = (pm_integer_t) { length, values, 0, false };
233
- }
234
-
235
- /**
236
- * The values of a hexadecimal digit, where the index is the ASCII character.
237
- * Note that there's an odd exception here where _ is mapped to 0. This is
238
- * because it's possible for us to end up trying to parse a number that has
239
- * already had an error attached to it, and we want to provide _something_ to
240
- * the user.
241
- */
242
- static const int8_t pm_integer_parse_digit_values[256] = {
243
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
244
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x
245
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 1x
246
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 2x
247
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, // 3x
248
- -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 4x
249
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, // 5x
250
- -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 6x
251
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 7x
252
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 8x
253
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 9x
254
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // Ax
255
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // Bx
256
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // Cx
257
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // Dx
258
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // Ex
259
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // Fx
260
- };
261
-
262
- /**
263
- * Return the value of a hexadecimal digit in a uint8_t.
264
- */
265
- static uint8_t
266
- pm_integer_parse_digit(const uint8_t character) {
267
- int8_t value = pm_integer_parse_digit_values[character];
268
- assert(value != -1 && "invalid digit");
269
-
270
- return (uint8_t) value;
271
- }
272
-
273
- /**
274
- * Create a pm_integer_t from uint64_t with the given base. It is assumed that
275
- * the memory for the pm_integer_t pointer has been zeroed.
276
- */
277
- static void
278
- pm_integer_from_uint64(pm_integer_t *integer, uint64_t value, uint64_t base) {
279
- if (value < base) {
280
- integer->value = (uint32_t) value;
281
- return;
282
- }
283
-
284
- size_t length = 0;
285
- uint64_t length_value = value;
286
- while (length_value > 0) {
287
- length++;
288
- length_value /= base;
289
- }
290
-
291
- uint32_t *values = (uint32_t *) xmalloc(sizeof(uint32_t) * length);
292
- if (values == NULL) return;
293
-
294
- for (size_t value_index = 0; value_index < length; value_index++) {
295
- values[value_index] = (uint32_t) (value % base);
296
- value /= base;
297
- }
298
-
299
- integer->length = length;
300
- integer->values = values;
301
- }
302
-
303
- /**
304
- * Normalize pm_integer_t.
305
- * Heading zero values will be removed. If the integer fits into uint32_t,
306
- * values is set to NULL, length is set to 0, and value field will be used.
307
- */
308
- static void
309
- pm_integer_normalize(pm_integer_t *integer) {
310
- if (integer->values == NULL) {
311
- return;
312
- }
313
-
314
- while (integer->length > 1 && integer->values[integer->length - 1] == 0) {
315
- integer->length--;
316
- }
317
-
318
- if (integer->length > 1) {
319
- return;
320
- }
321
-
322
- uint32_t value = integer->values[0];
323
- bool negative = integer->negative && value != 0;
324
-
325
- pm_integer_free(integer);
326
- *integer = (pm_integer_t) { .values = NULL, .value = value, .length = 0, .negative = negative };
327
- }
328
-
329
- /**
330
- * Convert base of the integer.
331
- * In practice, it converts 10**9 to 1<<32 or 1<<32 to 10**9.
332
- */
333
- static void
334
- pm_integer_convert_base(pm_integer_t *destination, const pm_integer_t *source, uint64_t base_from, uint64_t base_to) {
335
- size_t source_length;
336
- const uint32_t *source_values;
337
- INTEGER_EXTRACT(source, source_length, source_values)
338
-
339
- size_t bigints_length = (source_length + 1) / 2;
340
- assert(bigints_length > 0);
341
-
342
- pm_integer_t *bigints = (pm_integer_t *) xcalloc(bigints_length, sizeof(pm_integer_t));
343
- if (bigints == NULL) return;
344
-
345
- for (size_t index = 0; index < source_length; index += 2) {
346
- uint64_t value = source_values[index] + base_from * (index + 1 < source_length ? source_values[index + 1] : 0);
347
- pm_integer_from_uint64(&bigints[index / 2], value, base_to);
348
- }
349
-
350
- pm_integer_t base = { 0 };
351
- pm_integer_from_uint64(&base, base_from, base_to);
352
-
353
- while (bigints_length > 1) {
354
- pm_integer_t next_base;
355
- karatsuba_multiply(&next_base, &base, &base, base_to);
356
-
357
- pm_integer_free(&base);
358
- base = next_base;
359
-
360
- size_t next_length = (bigints_length + 1) / 2;
361
- pm_integer_t *next_bigints = (pm_integer_t *) xcalloc(next_length, sizeof(pm_integer_t));
362
-
363
- for (size_t bigints_index = 0; bigints_index < bigints_length; bigints_index += 2) {
364
- if (bigints_index + 1 == bigints_length) {
365
- next_bigints[bigints_index / 2] = bigints[bigints_index];
366
- } else {
367
- pm_integer_t multiplied = { 0 };
368
- karatsuba_multiply(&multiplied, &base, &bigints[bigints_index + 1], base_to);
369
-
370
- big_add(&next_bigints[bigints_index / 2], &bigints[bigints_index], &multiplied, base_to);
371
- pm_integer_free(&bigints[bigints_index]);
372
- pm_integer_free(&bigints[bigints_index + 1]);
373
- pm_integer_free(&multiplied);
374
- }
375
- }
376
-
377
- xfree(bigints);
378
- bigints = next_bigints;
379
- bigints_length = next_length;
380
- }
381
-
382
- *destination = bigints[0];
383
- destination->negative = source->negative;
384
- pm_integer_normalize(destination);
385
-
386
- xfree(bigints);
387
- pm_integer_free(&base);
388
- }
389
-
390
- #undef INTEGER_EXTRACT
391
-
392
- /**
393
- * Convert digits to integer with the given power-of-two base.
394
- */
395
- static void
396
- pm_integer_parse_powof2(pm_integer_t *integer, uint32_t base, const uint8_t *digits, size_t digits_length) {
397
- size_t bit = 1;
398
- while (base > (uint32_t) (1 << bit)) bit++;
399
-
400
- size_t length = (digits_length * bit + 31) / 32;
401
- uint32_t *values = (uint32_t *) xcalloc(length, sizeof(uint32_t));
402
-
403
- for (size_t digit_index = 0; digit_index < digits_length; digit_index++) {
404
- size_t bit_position = bit * (digits_length - digit_index - 1);
405
- uint32_t value = digits[digit_index];
406
-
407
- size_t index = bit_position / 32;
408
- size_t shift = bit_position % 32;
409
-
410
- values[index] |= value << shift;
411
- if (32 - shift < bit) values[index + 1] |= value >> (32 - shift);
412
- }
413
-
414
- while (length > 1 && values[length - 1] == 0) length--;
415
- *integer = (pm_integer_t) { .length = length, .values = values, .value = 0, .negative = false };
416
- pm_integer_normalize(integer);
417
- }
418
-
419
- /**
420
- * Convert decimal digits to pm_integer_t.
421
- */
422
- static void
423
- pm_integer_parse_decimal(pm_integer_t *integer, const uint8_t *digits, size_t digits_length) {
424
- const size_t batch = 9;
425
- size_t length = (digits_length + batch - 1) / batch;
426
-
427
- uint32_t *values = (uint32_t *) xcalloc(length, sizeof(uint32_t));
428
- uint32_t value = 0;
429
-
430
- for (size_t digits_index = 0; digits_index < digits_length; digits_index++) {
431
- value = value * 10 + digits[digits_index];
432
-
433
- size_t reverse_index = digits_length - digits_index - 1;
434
- if (reverse_index % batch == 0) {
435
- values[reverse_index / batch] = value;
436
- value = 0;
437
- }
438
- }
439
-
440
- // Convert base from 10**9 to 1<<32.
441
- pm_integer_convert_base(integer, &((pm_integer_t) { .length = length, .values = values, .value = 0, .negative = false }), 1000000000, ((uint64_t) 1 << 32));
442
- xfree(values);
443
- }
444
-
445
- /**
446
- * Parse a large integer from a string that does not fit into uint32_t.
447
- */
448
- static void
449
- pm_integer_parse_big(pm_integer_t *integer, uint32_t multiplier, const uint8_t *start, const uint8_t *end) {
450
- // Allocate an array to store digits.
451
- uint8_t *digits = xmalloc(sizeof(uint8_t) * (size_t) (end - start));
452
- size_t digits_length = 0;
453
-
454
- for (; start < end; start++) {
455
- if (*start == '_') continue;
456
- digits[digits_length++] = pm_integer_parse_digit(*start);
457
- }
458
-
459
- // Construct pm_integer_t from the digits.
460
- if (multiplier == 10) {
461
- pm_integer_parse_decimal(integer, digits, digits_length);
462
- } else {
463
- pm_integer_parse_powof2(integer, multiplier, digits, digits_length);
464
- }
465
-
466
- xfree(digits);
467
- }
468
-
469
- /**
470
- * Parse an integer from a string. This assumes that the format of the integer
471
- * has already been validated, as internal validation checks are not performed
472
- * here.
473
- */
474
- void
475
- pm_integer_parse(pm_integer_t *integer, pm_integer_base_t base, const uint8_t *start, const uint8_t *end) {
476
- // Ignore unary +. Unary - is parsed differently and will not end up here.
477
- // Instead, it will modify the parsed integer later.
478
- if (*start == '+') start++;
479
-
480
- // Determine the multiplier from the base, and skip past any prefixes.
481
- uint32_t multiplier = 10;
482
- switch (base) {
483
- case PM_INTEGER_BASE_DEFAULT:
484
- while (*start == '0') start++; // 01 -> 1
485
- break;
486
- case PM_INTEGER_BASE_BINARY:
487
- start += 2; // 0b
488
- multiplier = 2;
489
- break;
490
- case PM_INTEGER_BASE_OCTAL:
491
- start++; // 0
492
- if (*start == '_' || *start == 'o' || *start == 'O') start++; // o
493
- multiplier = 8;
494
- break;
495
- case PM_INTEGER_BASE_DECIMAL:
496
- if (*start == '0' && (end - start) > 1) start += 2; // 0d
497
- break;
498
- case PM_INTEGER_BASE_HEXADECIMAL:
499
- start += 2; // 0x
500
- multiplier = 16;
501
- break;
502
- case PM_INTEGER_BASE_UNKNOWN:
503
- if (*start == '0' && (end - start) > 1) {
504
- switch (start[1]) {
505
- case '_': start += 2; multiplier = 8; break;
506
- case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': start++; multiplier = 8; break;
507
- case 'b': case 'B': start += 2; multiplier = 2; break;
508
- case 'o': case 'O': start += 2; multiplier = 8; break;
509
- case 'd': case 'D': start += 2; break;
510
- case 'x': case 'X': start += 2; multiplier = 16; break;
511
- default: assert(false && "unreachable"); break;
512
- }
513
- }
514
- break;
515
- }
516
-
517
- // It's possible that we've consumed everything at this point if there is an
518
- // invalid integer. If this is the case, we'll just return 0.
519
- if (start >= end) return;
520
-
521
- const uint8_t *cursor = start;
522
- uint64_t value = (uint64_t) pm_integer_parse_digit(*cursor++);
523
-
524
- for (; cursor < end; cursor++) {
525
- if (*cursor == '_') continue;
526
- value = value * multiplier + (uint64_t) pm_integer_parse_digit(*cursor);
527
-
528
- if (value > UINT32_MAX) {
529
- // If the integer is too large to fit into a single uint32_t, then
530
- // we'll parse it as a big integer.
531
- pm_integer_parse_big(integer, multiplier, start, end);
532
- return;
533
- }
534
- }
535
-
536
- integer->value = (uint32_t) value;
537
- }
538
-
539
- /**
540
- * Compare two integers. This function returns -1 if the left integer is less
541
- * than the right integer, 0 if they are equal, and 1 if the left integer is
542
- * greater than the right integer.
543
- */
544
- int
545
- pm_integer_compare(const pm_integer_t *left, const pm_integer_t *right) {
546
- if (left->negative != right->negative) return left->negative ? -1 : 1;
547
- int negative = left->negative ? -1 : 1;
548
-
549
- if (left->values == NULL && right->values == NULL) {
550
- if (left->value < right->value) return -1 * negative;
551
- if (left->value > right->value) return 1 * negative;
552
- return 0;
553
- }
554
-
555
- if (left->values == NULL || left->length < right->length) return -1 * negative;
556
- if (right->values == NULL || left->length > right->length) return 1 * negative;
557
-
558
- for (size_t index = 0; index < left->length; index++) {
559
- size_t value_index = left->length - index - 1;
560
- uint32_t left_value = left->values[value_index];
561
- uint32_t right_value = right->values[value_index];
562
-
563
- if (left_value < right_value) return -1 * negative;
564
- if (left_value > right_value) return 1 * negative;
565
- }
566
-
567
- return 0;
568
- }
569
-
570
- /**
571
- * Reduce a ratio of integers to its simplest form.
572
- */
573
- void pm_integers_reduce(pm_integer_t *numerator, pm_integer_t *denominator) {
574
- // If either the numerator or denominator do not fit into a 32-bit integer,
575
- // then this function is a no-op. In the future, we may consider reducing
576
- // even the larger numbers, but for now we're going to keep it simple.
577
- if (
578
- // If the numerator doesn't fit into a 32-bit integer, return early.
579
- numerator->length != 0 ||
580
- // If the denominator doesn't fit into a 32-bit integer, return early.
581
- denominator->length != 0 ||
582
- // If the numerator is 0, then return early.
583
- numerator->value == 0 ||
584
- // If the denominator is 1, then return early.
585
- denominator->value == 1
586
- ) return;
587
-
588
- // Find the greatest common divisor of the numerator and denominator.
589
- uint32_t divisor = numerator->value;
590
- uint32_t remainder = denominator->value;
591
-
592
- while (remainder != 0) {
593
- uint32_t temporary = remainder;
594
- remainder = divisor % remainder;
595
- divisor = temporary;
596
- }
597
-
598
- // Divide the numerator and denominator by the greatest common divisor.
599
- numerator->value /= divisor;
600
- denominator->value /= divisor;
601
- }
602
-
603
- /**
604
- * Convert an integer to a decimal string.
605
- */
606
- PRISM_EXPORTED_FUNCTION void
607
- pm_integer_string(pm_buffer_t *buffer, const pm_integer_t *integer) {
608
- if (integer->negative) {
609
- pm_buffer_append_byte(buffer, '-');
610
- }
611
-
612
- // If the integer fits into a single uint32_t, then we can just append the
613
- // value directly to the buffer.
614
- if (integer->values == NULL) {
615
- pm_buffer_append_format(buffer, "%" PRIu32, integer->value);
616
- return;
617
- }
618
-
619
- // If the integer is two uint32_t values, then we can | them together and
620
- // append the result to the buffer.
621
- if (integer->length == 2) {
622
- const uint64_t value = ((uint64_t) integer->values[0]) | ((uint64_t) integer->values[1] << 32);
623
- pm_buffer_append_format(buffer, "%" PRIu64, value);
624
- return;
625
- }
626
-
627
- // Otherwise, first we'll convert the base from 1<<32 to 10**9.
628
- pm_integer_t converted = { 0 };
629
- pm_integer_convert_base(&converted, integer, (uint64_t) 1 << 32, 1000000000);
630
-
631
- if (converted.values == NULL) {
632
- pm_buffer_append_format(buffer, "%" PRIu32, converted.value);
633
- pm_integer_free(&converted);
634
- return;
635
- }
636
-
637
- // Allocate a buffer that we'll copy the decimal digits into.
638
- size_t digits_length = converted.length * 9;
639
- char *digits = xcalloc(digits_length, sizeof(char));
640
- if (digits == NULL) return;
641
-
642
- // Pack bigdecimal to digits.
643
- for (size_t value_index = 0; value_index < converted.length; value_index++) {
644
- uint32_t value = converted.values[value_index];
645
-
646
- for (size_t digit_index = 0; digit_index < 9; digit_index++) {
647
- digits[digits_length - 9 * value_index - digit_index - 1] = (char) ('0' + value % 10);
648
- value /= 10;
649
- }
650
- }
651
-
652
- size_t start_offset = 0;
653
- while (start_offset < digits_length - 1 && digits[start_offset] == '0') start_offset++;
654
-
655
- // Finally, append the string to the buffer and free the digits.
656
- pm_buffer_append_string(buffer, digits + start_offset, digits_length - start_offset);
657
- xfree(digits);
658
- pm_integer_free(&converted);
659
- }
660
-
661
- /**
662
- * Free the internal memory of an integer. This memory will only be allocated if
663
- * the integer exceeds the size of a single uint32_t.
664
- */
665
- PRISM_EXPORTED_FUNCTION void
666
- pm_integer_free(pm_integer_t *integer) {
667
- if (integer->values) {
668
- xfree(integer->values);
669
- }
670
- }