cybrid_api_id_ruby 0.73.1 → 0.73.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -2
  3. data/README.md +5 -5
  4. data/cybrid_api_id_ruby.gemspec +1 -1
  5. data/lib/cybrid_api_id_ruby/api/bank_applications_idp_api.rb +1 -1
  6. data/lib/cybrid_api_id_ruby/api/customer_tokens_idp_api.rb +1 -1
  7. data/lib/cybrid_api_id_ruby/api/organization_applications_idp_api.rb +1 -1
  8. data/lib/cybrid_api_id_ruby/api_client.rb +1 -1
  9. data/lib/cybrid_api_id_ruby/api_error.rb +1 -1
  10. data/lib/cybrid_api_id_ruby/configuration.rb +1 -1
  11. data/lib/cybrid_api_id_ruby/models/application_idp_model.rb +1 -1
  12. data/lib/cybrid_api_id_ruby/models/application_list_idp_model.rb +1 -1
  13. data/lib/cybrid_api_id_ruby/models/application_with_secret_all_of_idp_model.rb +1 -1
  14. data/lib/cybrid_api_id_ruby/models/application_with_secret_idp_model.rb +1 -1
  15. data/lib/cybrid_api_id_ruby/models/customer_token_idp_model.rb +1 -1
  16. data/lib/cybrid_api_id_ruby/models/post_bank_application_idp_model.rb +1 -1
  17. data/lib/cybrid_api_id_ruby/models/post_customer_token_idp_model.rb +1 -1
  18. data/lib/cybrid_api_id_ruby/models/post_organization_application_idp_model.rb +1 -1
  19. data/lib/cybrid_api_id_ruby/version.rb +2 -2
  20. data/lib/cybrid_api_id_ruby.rb +1 -1
  21. data/spec/api/bank_applications_idp_api_spec.rb +1 -1
  22. data/spec/api/customer_tokens_idp_api_spec.rb +1 -1
  23. data/spec/api/organization_applications_idp_api_spec.rb +1 -1
  24. data/spec/api_client_spec.rb +1 -1
  25. data/spec/configuration_spec.rb +1 -1
  26. data/spec/models/application_idp_model_spec.rb +1 -1
  27. data/spec/models/application_list_idp_model_spec.rb +1 -1
  28. data/spec/models/application_with_secret_all_of_idp_model_spec.rb +1 -1
  29. data/spec/models/application_with_secret_idp_model_spec.rb +1 -1
  30. data/spec/models/customer_token_idp_model_spec.rb +1 -1
  31. data/spec/models/post_bank_application_idp_model_spec.rb +1 -1
  32. data/spec/models/post_customer_token_idp_model_spec.rb +1 -1
  33. data/spec/models/post_organization_application_idp_model_spec.rb +1 -1
  34. data/spec/spec_helper.rb +1 -1
  35. data/vendor/bundle/ruby/3.2.0/bin/racc +29 -0
  36. data/vendor/bundle/ruby/3.2.0/cache/parser-3.2.2.3.gem +0 -0
  37. data/vendor/bundle/ruby/3.2.0/cache/racc-1.7.0.gem +0 -0
  38. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/byebug-11.1.3/gem_make.out +5 -5
  39. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/ffi-1.15.5/gem_make.out +5 -5
  40. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/jaro_winkler-1.5.6/gem_make.out +5 -5
  41. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/psych-5.1.0/gem_make.out +5 -5
  42. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.0/gem.build_complete +0 -0
  43. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.0/gem_make.out +28 -0
  44. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.0/mkmf.log +57 -0
  45. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.0/racc/cparse.so +0 -0
  46. data/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/stringio-3.0.7/gem_make.out +5 -5
  47. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/macruby.rb +3 -1
  48. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby18.rb +3 -1
  49. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby19.rb +3 -1
  50. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby20.rb +3 -1
  51. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby21.rb +3 -1
  52. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby22.rb +3 -1
  53. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby23.rb +3 -1
  54. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby24.rb +3 -1
  55. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby25.rb +3 -1
  56. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby26.rb +3 -1
  57. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby27.rb +3 -1
  58. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby30.rb +3 -1
  59. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby31.rb +3 -1
  60. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby32.rb +3 -1
  61. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby33.rb +3 -1
  62. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/rubymotion.rb +3 -1
  63. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/version.rb +1 -1
  64. data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/parser.gemspec +1 -1
  65. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/COPYING +22 -0
  66. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/ChangeLog +846 -0
  67. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/README.ja.rdoc +94 -0
  68. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/README.rdoc +79 -0
  69. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/TODO +5 -0
  70. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/bin/racc +320 -0
  71. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/en/NEWS.en.rdoc +282 -0
  72. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/en/grammar.en.rdoc +226 -0
  73. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/en/grammar2.en.rdoc +219 -0
  74. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/NEWS.ja.rdoc +307 -0
  75. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/command.ja.html +94 -0
  76. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/debug.ja.rdoc +36 -0
  77. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/grammar.ja.rdoc +348 -0
  78. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/index.ja.html +10 -0
  79. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/parser.ja.rdoc +125 -0
  80. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/doc/ja/usage.ja.html +414 -0
  81. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/ext/racc/MANIFEST +4 -0
  82. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/ext/racc/cparse/Makefile +269 -0
  83. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/ext/racc/cparse/cparse.c +861 -0
  84. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/ext/racc/cparse/extconf.rb +9 -0
  85. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/compat.rb +33 -0
  86. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/cparse.so +0 -0
  87. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/debugflags.rb +60 -0
  88. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/exception.rb +16 -0
  89. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/grammar.rb +1114 -0
  90. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/grammarfileparser.rb +561 -0
  91. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/info.rb +17 -0
  92. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/iset.rb +92 -0
  93. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/logfilegenerator.rb +212 -0
  94. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/parser-text.rb +658 -0
  95. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/parser.rb +632 -0
  96. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/parserfilegenerator.rb +470 -0
  97. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/sourcetext.rb +35 -0
  98. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/state.rb +972 -0
  99. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/statetransitiontable.rb +311 -0
  100. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc/static.rb +5 -0
  101. data/vendor/bundle/ruby/3.2.0/gems/racc-1.7.0/lib/racc.rb +6 -0
  102. data/vendor/bundle/ruby/3.2.0/specifications/{parser-3.2.2.1.gemspec → parser-3.2.2.3.gemspec} +5 -5
  103. data/vendor/bundle/ruby/3.2.0/specifications/racc-1.7.0.gemspec +27 -0
  104. metadata +126 -82
  105. data/vendor/bundle/ruby/3.2.0/cache/parser-3.2.2.1.gem +0 -0
  106. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/LICENSE.txt +0 -0
  107. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/bin/ruby-parse +0 -0
  108. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/bin/ruby-rewrite +0 -0
  109. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/gauntlet_parser.rb +0 -0
  110. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/all.rb +0 -0
  111. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ast/node.rb +0 -0
  112. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ast/processor.rb +0 -0
  113. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/base.rb +0 -0
  114. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/builders/default.rb +0 -0
  115. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/clobbering_error.rb +0 -0
  116. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/color.rb +0 -0
  117. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/context.rb +0 -0
  118. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/current.rb +0 -0
  119. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/current_arg_stack.rb +0 -0
  120. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/deprecation.rb +0 -0
  121. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/diagnostic/engine.rb +0 -0
  122. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/diagnostic.rb +0 -0
  123. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer/dedenter.rb +0 -0
  124. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer/explanation.rb +0 -0
  125. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer/literal.rb +0 -0
  126. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer/stack_state.rb +0 -0
  127. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer-F0.rb +0 -0
  128. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer-F1.rb +0 -0
  129. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/lexer-strings.rb +0 -0
  130. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/max_numparam_stack.rb +0 -0
  131. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/messages.rb +0 -0
  132. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/meta.rb +0 -0
  133. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/rewriter.rb +0 -0
  134. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/ruby28.rb +0 -0
  135. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/runner/ruby_parse.rb +0 -0
  136. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/runner/ruby_rewrite.rb +0 -0
  137. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/runner.rb +0 -0
  138. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/buffer.rb +0 -0
  139. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/comment/associator.rb +0 -0
  140. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/comment.rb +0 -0
  141. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/collection.rb +0 -0
  142. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/condition.rb +0 -0
  143. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/constant.rb +0 -0
  144. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/definition.rb +0 -0
  145. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/for.rb +0 -0
  146. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/heredoc.rb +0 -0
  147. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/index.rb +0 -0
  148. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/keyword.rb +0 -0
  149. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/method_definition.rb +0 -0
  150. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/objc_kwarg.rb +0 -0
  151. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/operator.rb +0 -0
  152. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/rescue_body.rb +0 -0
  153. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/send.rb +0 -0
  154. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/ternary.rb +0 -0
  155. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map/variable.rb +0 -0
  156. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/map.rb +0 -0
  157. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/range.rb +0 -0
  158. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/rewriter/action.rb +0 -0
  159. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/rewriter.rb +0 -0
  160. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/tree_rewriter/action.rb +0 -0
  161. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/source/tree_rewriter.rb +0 -0
  162. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/static_environment.rb +0 -0
  163. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/syntax_error.rb +0 -0
  164. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/tree_rewriter.rb +0 -0
  165. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser/variables_stack.rb +0 -0
  166. /data/vendor/bundle/ruby/3.2.0/gems/{parser-3.2.2.1 → parser-3.2.2.3}/lib/parser.rb +0 -0
@@ -0,0 +1,861 @@
1
+ /*
2
+
3
+ cparse.c -- Racc Runtime Core
4
+
5
+ Copyright (c) 1999-2006 Minero Aoki
6
+
7
+ This library is free software.
8
+ You can distribute/modify this program under the same terms of ruby.
9
+
10
+ */
11
+
12
+ #include <ruby.h>
13
+
14
+ #ifndef FALSE
15
+ #define FALSE 0
16
+ #endif
17
+ #ifndef TRUE
18
+ #define TRUE 1
19
+ #endif
20
+
21
+ /* -----------------------------------------------------------------------
22
+ Important Constants
23
+ ----------------------------------------------------------------------- */
24
+
25
+ #define RACC_VERSION "1.6.2"
26
+
27
+ #define DEFAULT_TOKEN -1
28
+ #define ERROR_TOKEN 1
29
+ #define FINAL_TOKEN 0
30
+
31
+ #define vDEFAULT_TOKEN INT2FIX(DEFAULT_TOKEN)
32
+ #define vERROR_TOKEN INT2FIX(ERROR_TOKEN)
33
+ #define vFINAL_TOKEN INT2FIX(FINAL_TOKEN)
34
+
35
+ /* -----------------------------------------------------------------------
36
+ File Local Variables
37
+ ----------------------------------------------------------------------- */
38
+
39
+ static VALUE RaccBug;
40
+ static VALUE CparseParams;
41
+
42
+ static ID id_yydebug;
43
+ static ID id_nexttoken;
44
+ static ID id_onerror;
45
+ static ID id_noreduce;
46
+ static ID id_errstatus;
47
+
48
+ static ID id_d_shift;
49
+ static ID id_d_reduce;
50
+ static ID id_d_accept;
51
+ static ID id_d_read_token;
52
+ static ID id_d_next_state;
53
+ static ID id_d_e_pop;
54
+
55
+ /* -----------------------------------------------------------------------
56
+ Utils
57
+ ----------------------------------------------------------------------- */
58
+
59
+ /* For backward compatibility */
60
+ #ifndef ID2SYM
61
+ # define ID2SYM(i) ULONG2NUM(i)
62
+ #endif
63
+ #ifndef SYM2ID
64
+ # define SYM2ID(v) ((ID)NUM2ULONG(v))
65
+ #endif
66
+ #ifndef SYMBOL_P
67
+ # define SYMBOL_P(v) FIXNUM_P(v)
68
+ #endif
69
+ #ifndef LONG2NUM
70
+ # define LONG2NUM(i) INT2NUM(i)
71
+ #endif
72
+
73
+ #ifndef HAVE_RB_ARY_SUBSEQ
74
+ # define rb_ary_subseq(ary, beg, len) rb_ary_new4(len, RARRAY_PTR(ary) + beg)
75
+ #endif
76
+
77
+ static ID value_to_id _((VALUE v));
78
+ static inline long num_to_long _((VALUE n));
79
+
80
+ static ID
81
+ value_to_id(VALUE v)
82
+ {
83
+ if (! SYMBOL_P(v)) {
84
+ rb_raise(rb_eTypeError, "not symbol");
85
+ }
86
+ return SYM2ID(v);
87
+ }
88
+
89
+ static inline long
90
+ num_to_long(VALUE n)
91
+ {
92
+ return NUM2LONG(n);
93
+ }
94
+
95
+ #define AREF(s, idx) \
96
+ ((0 <= idx && idx < RARRAY_LEN(s)) ? rb_ary_entry(s, idx) : Qnil)
97
+
98
+ /* -----------------------------------------------------------------------
99
+ Parser Stack Interfaces
100
+ ----------------------------------------------------------------------- */
101
+
102
+ static VALUE get_stack_tail _((VALUE stack, long len));
103
+ static void cut_stack_tail _((VALUE stack, long len));
104
+
105
+ static VALUE
106
+ get_stack_tail(VALUE stack, long len)
107
+ {
108
+ if (len < 0) return Qnil; /* system error */
109
+ if (len > RARRAY_LEN(stack)) len = RARRAY_LEN(stack);
110
+ return rb_ary_subseq(stack, RARRAY_LEN(stack) - len, len);
111
+ }
112
+
113
+ static void
114
+ cut_stack_tail(VALUE stack, long len)
115
+ {
116
+ while (len > 0) {
117
+ rb_ary_pop(stack);
118
+ len--;
119
+ }
120
+ }
121
+
122
+ #define STACK_INIT_LEN 64
123
+ #define NEW_STACK() rb_ary_new2(STACK_INIT_LEN)
124
+ #define PUSH(s, i) rb_ary_store(s, RARRAY_LEN(s), i)
125
+ #define POP(s) rb_ary_pop(s)
126
+ #define LAST_I(s) \
127
+ ((RARRAY_LEN(s) > 0) ? rb_ary_entry(s, RARRAY_LEN(s) - 1) : Qnil)
128
+ #define GET_TAIL(s, len) get_stack_tail(s, len)
129
+ #define CUT_TAIL(s, len) cut_stack_tail(s, len)
130
+
131
+ /* -----------------------------------------------------------------------
132
+ struct cparse_params
133
+ ----------------------------------------------------------------------- */
134
+
135
+ struct cparse_params {
136
+ VALUE value_v; /* VALUE version of this struct */
137
+
138
+ VALUE parser; /* parser object */
139
+
140
+ int lex_is_iterator;
141
+ VALUE lexer; /* scanner object */
142
+ ID lexmid; /* name of scanner method (must be an iterator) */
143
+
144
+ /* State transition tables (immutable)
145
+ Data structure is from Dragon Book 4.9 */
146
+ /* action table */
147
+ VALUE action_table;
148
+ VALUE action_check;
149
+ VALUE action_default;
150
+ VALUE action_pointer;
151
+ /* goto table */
152
+ VALUE goto_table;
153
+ VALUE goto_check;
154
+ VALUE goto_default;
155
+ VALUE goto_pointer;
156
+
157
+ long nt_base; /* NonTerminal BASE index */
158
+ VALUE reduce_table; /* reduce data table */
159
+ VALUE token_table; /* token conversion table */
160
+
161
+ /* parser stacks and parameters */
162
+ VALUE state;
163
+ long curstate;
164
+ VALUE vstack;
165
+ VALUE tstack;
166
+ VALUE t;
167
+ long shift_n;
168
+ long reduce_n;
169
+ long ruleno;
170
+
171
+ long errstatus; /* nonzero in error recovering mode */
172
+ long nerr; /* number of error */
173
+
174
+ int use_result_var;
175
+
176
+ VALUE retval; /* return value of parser routine */
177
+ long fin; /* parse result status */
178
+ #define CP_FIN_ACCEPT 1
179
+ #define CP_FIN_EOT 2
180
+ #define CP_FIN_CANTPOP 3
181
+
182
+ int debug; /* user level debug */
183
+ int sys_debug; /* system level debug */
184
+
185
+ long i; /* table index */
186
+ };
187
+
188
+ /* -----------------------------------------------------------------------
189
+ Parser Main Routines
190
+ ----------------------------------------------------------------------- */
191
+
192
+ static VALUE racc_cparse _((VALUE parser, VALUE arg, VALUE sysdebug));
193
+ static VALUE racc_yyparse _((VALUE parser, VALUE lexer, VALUE lexmid,
194
+ VALUE arg, VALUE sysdebug));
195
+
196
+ static void call_lexer _((struct cparse_params *v));
197
+ static VALUE lexer_i _((RB_BLOCK_CALL_FUNC_ARGLIST(block_args, data)));
198
+
199
+ static VALUE assert_array _((VALUE a));
200
+ static long assert_integer _((VALUE n));
201
+ static VALUE assert_hash _((VALUE h));
202
+ static VALUE initialize_params _((VALUE vparams, VALUE parser, VALUE arg,
203
+ VALUE lexer, VALUE lexmid));
204
+ static void cparse_params_mark _((void *ptr));
205
+ static size_t cparse_params_memsize _((const void *ptr));
206
+
207
+ static void parse_main _((struct cparse_params *v,
208
+ VALUE tok, VALUE val, int resume));
209
+ static void extract_user_token _((struct cparse_params *v,
210
+ VALUE block_args, VALUE *tok, VALUE *val));
211
+ static void shift _((struct cparse_params* v, long act, VALUE tok, VALUE val));
212
+ static int reduce _((struct cparse_params* v, long act));
213
+ static rb_block_call_func reduce0;
214
+
215
+ #ifdef DEBUG
216
+ # define D_puts(msg) if (v->sys_debug) puts(msg)
217
+ # define D_printf(fmt,arg) if (v->sys_debug) printf(fmt,arg)
218
+ #else
219
+ # define D_puts(msg)
220
+ # define D_printf(fmt,arg)
221
+ #endif
222
+
223
+ #undef RUBY_UNTYPED_DATA_WARNING
224
+ #define RUBY_UNTYPED_DATA_WARNING 1
225
+
226
+ static const rb_data_type_t cparse_params_type = {
227
+ "racc/cparse",
228
+ {
229
+ cparse_params_mark,
230
+ RUBY_TYPED_DEFAULT_FREE,
231
+ cparse_params_memsize,
232
+ },
233
+ #ifdef RUBY_TYPED_FREE_IMMEDIATELY
234
+ 0, 0,
235
+ RUBY_TYPED_FREE_IMMEDIATELY,
236
+ #endif
237
+ };
238
+
239
+ static VALUE
240
+ racc_cparse(VALUE parser, VALUE arg, VALUE sysdebug)
241
+ {
242
+ VALUE vparams;
243
+ struct cparse_params *v;
244
+
245
+ vparams = TypedData_Make_Struct(CparseParams, struct cparse_params,
246
+ &cparse_params_type, v);
247
+ D_puts("starting cparse");
248
+ v->sys_debug = RTEST(sysdebug);
249
+ vparams = initialize_params(vparams, parser, arg, Qnil, Qnil);
250
+ v->lex_is_iterator = FALSE;
251
+ parse_main(v, Qnil, Qnil, 0);
252
+
253
+ RB_GC_GUARD(vparams);
254
+ return v->retval;
255
+ }
256
+
257
+ static VALUE
258
+ racc_yyparse(VALUE parser, VALUE lexer, VALUE lexmid, VALUE arg, VALUE sysdebug)
259
+ {
260
+ VALUE vparams;
261
+ struct cparse_params *v;
262
+
263
+ vparams = TypedData_Make_Struct(CparseParams, struct cparse_params,
264
+ &cparse_params_type, v);
265
+ v->sys_debug = RTEST(sysdebug);
266
+ D_puts("start C yyparse");
267
+ vparams = initialize_params(vparams, parser, arg, lexer, lexmid);
268
+ v->lex_is_iterator = TRUE;
269
+ D_puts("params initialized");
270
+ parse_main(v, Qnil, Qnil, 0);
271
+ call_lexer(v);
272
+ if (!v->fin) {
273
+ rb_raise(rb_eArgError, "%s() is finished before EndOfToken",
274
+ rb_id2name(v->lexmid));
275
+ }
276
+
277
+ RB_GC_GUARD(vparams);
278
+ return v->retval;
279
+ }
280
+
281
+ #ifdef HAVE_RB_BLOCK_CALL
282
+ static void
283
+ call_lexer(struct cparse_params *v)
284
+ {
285
+ rb_block_call(v->lexer, v->lexmid, 0, NULL, lexer_i, v->value_v);
286
+ }
287
+ #else
288
+ static VALUE
289
+ lexer_iter(VALUE data)
290
+ {
291
+ struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type);
292
+
293
+ rb_funcall(v->lexer, v->lexmid, 0);
294
+ return Qnil;
295
+ }
296
+
297
+ static void
298
+ call_lexer(struct cparse_params *v)
299
+ {
300
+ rb_iterate(lexer_iter, v->value_v, lexer_i, v->value_v);
301
+ }
302
+ #endif
303
+
304
+ static VALUE
305
+ lexer_i(RB_BLOCK_CALL_FUNC_ARGLIST(block_args, data))
306
+ {
307
+ struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type);
308
+ VALUE tok, val;
309
+
310
+ if (v->fin)
311
+ rb_raise(rb_eArgError, "extra token after EndOfToken");
312
+ extract_user_token(v, block_args, &tok, &val);
313
+ parse_main(v, tok, val, 1);
314
+ if (v->fin && v->fin != CP_FIN_ACCEPT)
315
+ rb_iter_break();
316
+ return Qnil;
317
+ }
318
+
319
+ static VALUE
320
+ assert_array(VALUE a)
321
+ {
322
+ Check_Type(a, T_ARRAY);
323
+ return a;
324
+ }
325
+
326
+ static VALUE
327
+ assert_hash(VALUE h)
328
+ {
329
+ Check_Type(h, T_HASH);
330
+ return h;
331
+ }
332
+
333
+ static long
334
+ assert_integer(VALUE n)
335
+ {
336
+ return NUM2LONG(n);
337
+ }
338
+
339
+ static VALUE
340
+ initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lexmid)
341
+ {
342
+ struct cparse_params *v = rb_check_typeddata(vparams, &cparse_params_type);
343
+
344
+ v->value_v = vparams;
345
+ v->parser = parser;
346
+ v->lexer = lexer;
347
+ if (! NIL_P(lexmid))
348
+ v->lexmid = value_to_id(lexmid);
349
+
350
+ v->debug = RTEST(rb_ivar_get(parser, id_yydebug));
351
+
352
+ Check_Type(arg, T_ARRAY);
353
+ if (!(13 <= RARRAY_LEN(arg) && RARRAY_LEN(arg) <= 14))
354
+ rb_raise(RaccBug, "[Racc Bug] wrong arg.size %ld", RARRAY_LEN(arg));
355
+ v->action_table = assert_array (rb_ary_entry(arg, 0));
356
+ v->action_check = assert_array (rb_ary_entry(arg, 1));
357
+ v->action_default = assert_array (rb_ary_entry(arg, 2));
358
+ v->action_pointer = assert_array (rb_ary_entry(arg, 3));
359
+ v->goto_table = assert_array (rb_ary_entry(arg, 4));
360
+ v->goto_check = assert_array (rb_ary_entry(arg, 5));
361
+ v->goto_default = assert_array (rb_ary_entry(arg, 6));
362
+ v->goto_pointer = assert_array (rb_ary_entry(arg, 7));
363
+ v->nt_base = assert_integer(rb_ary_entry(arg, 8));
364
+ v->reduce_table = assert_array (rb_ary_entry(arg, 9));
365
+ v->token_table = assert_hash (rb_ary_entry(arg, 10));
366
+ v->shift_n = assert_integer(rb_ary_entry(arg, 11));
367
+ v->reduce_n = assert_integer(rb_ary_entry(arg, 12));
368
+ if (RARRAY_LEN(arg) > 13) {
369
+ v->use_result_var = RTEST(rb_ary_entry(arg, 13));
370
+ }
371
+ else {
372
+ v->use_result_var = TRUE;
373
+ }
374
+
375
+ v->tstack = v->debug ? NEW_STACK() : Qnil;
376
+ v->vstack = NEW_STACK();
377
+ v->state = NEW_STACK();
378
+ v->curstate = 0;
379
+ PUSH(v->state, INT2FIX(0));
380
+ v->t = INT2FIX(FINAL_TOKEN + 1); /* must not init to FINAL_TOKEN */
381
+ v->nerr = 0;
382
+ v->errstatus = 0;
383
+ rb_ivar_set(parser, id_errstatus, LONG2NUM(v->errstatus));
384
+
385
+ v->retval = Qnil;
386
+ v->fin = 0;
387
+
388
+ v->lex_is_iterator = FALSE;
389
+
390
+ rb_iv_set(parser, "@vstack", v->vstack);
391
+ if (v->debug) {
392
+ rb_iv_set(parser, "@tstack", v->tstack);
393
+ }
394
+ else {
395
+ rb_iv_set(parser, "@tstack", Qnil);
396
+ }
397
+
398
+ return vparams;
399
+ }
400
+
401
+ static void
402
+ cparse_params_mark(void *ptr)
403
+ {
404
+ struct cparse_params *v = (struct cparse_params*)ptr;
405
+
406
+ rb_gc_mark(v->value_v);
407
+ rb_gc_mark(v->parser);
408
+ rb_gc_mark(v->lexer);
409
+ rb_gc_mark(v->action_table);
410
+ rb_gc_mark(v->action_check);
411
+ rb_gc_mark(v->action_default);
412
+ rb_gc_mark(v->action_pointer);
413
+ rb_gc_mark(v->goto_table);
414
+ rb_gc_mark(v->goto_check);
415
+ rb_gc_mark(v->goto_default);
416
+ rb_gc_mark(v->goto_pointer);
417
+ rb_gc_mark(v->reduce_table);
418
+ rb_gc_mark(v->token_table);
419
+ rb_gc_mark(v->state);
420
+ rb_gc_mark(v->vstack);
421
+ rb_gc_mark(v->tstack);
422
+ rb_gc_mark(v->t);
423
+ rb_gc_mark(v->retval);
424
+ }
425
+
426
+ static size_t
427
+ cparse_params_memsize(const void *ptr)
428
+ {
429
+ return sizeof(struct cparse_params);
430
+ }
431
+
432
+ static void
433
+ extract_user_token(struct cparse_params *v, VALUE block_args,
434
+ VALUE *tok, VALUE *val)
435
+ {
436
+ if (NIL_P(block_args)) {
437
+ /* EOF */
438
+ *tok = Qfalse;
439
+ *val = rb_str_new("$", 1);
440
+ return;
441
+ }
442
+
443
+ if (!RB_TYPE_P(block_args, T_ARRAY)) {
444
+ rb_raise(rb_eTypeError,
445
+ "%s() %s %"PRIsVALUE" (must be Array[2])",
446
+ v->lex_is_iterator ? rb_id2name(v->lexmid) : "next_token",
447
+ v->lex_is_iterator ? "yielded" : "returned",
448
+ rb_obj_class(block_args));
449
+ }
450
+ if (RARRAY_LEN(block_args) != 2) {
451
+ rb_raise(rb_eArgError,
452
+ "%s() %s wrong size of array (%ld for 2)",
453
+ v->lex_is_iterator ? rb_id2name(v->lexmid) : "next_token",
454
+ v->lex_is_iterator ? "yielded" : "returned",
455
+ RARRAY_LEN(block_args));
456
+ }
457
+ *tok = AREF(block_args, 0);
458
+ *val = AREF(block_args, 1);
459
+ }
460
+
461
+ #define SHIFT(v,act,tok,val) shift(v,act,tok,val)
462
+ #define REDUCE(v,act) do {\
463
+ switch (reduce(v,act)) { \
464
+ case 0: /* normal */ \
465
+ break; \
466
+ case 1: /* yyerror */ \
467
+ goto user_yyerror; \
468
+ case 2: /* yyaccept */ \
469
+ D_puts("u accept"); \
470
+ goto accept; \
471
+ default: \
472
+ break; \
473
+ } \
474
+ } while (0)
475
+
476
+ static void
477
+ parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)
478
+ {
479
+ long i; /* table index */
480
+ long act; /* action type */
481
+ VALUE act_value; /* action type, VALUE version */
482
+ int read_next = 1; /* true if we need to read next token */
483
+ VALUE tmp;
484
+
485
+ if (resume)
486
+ goto resume;
487
+
488
+ while (1) {
489
+ D_puts("");
490
+ D_puts("---- enter new loop ----");
491
+ D_puts("");
492
+
493
+ D_printf("(act) k1=%ld\n", v->curstate);
494
+ tmp = AREF(v->action_pointer, v->curstate);
495
+ if (NIL_P(tmp)) goto notfound;
496
+ D_puts("(act) pointer[k1] ok");
497
+ i = NUM2LONG(tmp);
498
+
499
+ D_printf("read_next=%d\n", read_next);
500
+ if (read_next && (v->t != vFINAL_TOKEN)) {
501
+ if (v->lex_is_iterator) {
502
+ D_puts("resuming...");
503
+ if (v->fin) rb_raise(rb_eArgError, "token given after EOF");
504
+ v->i = i; /* save i */
505
+ return;
506
+ resume:
507
+ D_puts("resumed");
508
+ i = v->i; /* load i */
509
+ }
510
+ else {
511
+ D_puts("next_token");
512
+ tmp = rb_funcall(v->parser, id_nexttoken, 0);
513
+ extract_user_token(v, tmp, &tok, &val);
514
+ }
515
+ /* convert token */
516
+ v->t = rb_hash_aref(v->token_table, tok);
517
+ if (NIL_P(v->t)) {
518
+ v->t = vERROR_TOKEN;
519
+ }
520
+ D_printf("(act) t(k2)=%ld\n", NUM2LONG(v->t));
521
+ if (v->debug) {
522
+ rb_funcall(v->parser, id_d_read_token,
523
+ 3, v->t, tok, val);
524
+ }
525
+ }
526
+ read_next = 0;
527
+
528
+ i += NUM2LONG(v->t);
529
+ D_printf("(act) i=%ld\n", i);
530
+ if (i < 0) goto notfound;
531
+
532
+ act_value = AREF(v->action_table, i);
533
+ if (NIL_P(act_value)) goto notfound;
534
+ act = NUM2LONG(act_value);
535
+ D_printf("(act) table[i]=%ld\n", act);
536
+
537
+ tmp = AREF(v->action_check, i);
538
+ if (NIL_P(tmp)) goto notfound;
539
+ if (NUM2LONG(tmp) != v->curstate) goto notfound;
540
+ D_printf("(act) check[i]=%ld\n", NUM2LONG(tmp));
541
+
542
+ D_puts("(act) found");
543
+ act_fixed:
544
+ D_printf("act=%ld\n", act);
545
+ goto handle_act;
546
+
547
+ notfound:
548
+ D_puts("(act) not found: use default");
549
+ act_value = AREF(v->action_default, v->curstate);
550
+ act = NUM2LONG(act_value);
551
+ goto act_fixed;
552
+
553
+
554
+ handle_act:
555
+ if (act > 0 && act < v->shift_n) {
556
+ D_puts("shift");
557
+ if (v->errstatus > 0) {
558
+ v->errstatus--;
559
+ rb_ivar_set(v->parser, id_errstatus, LONG2NUM(v->errstatus));
560
+ }
561
+ SHIFT(v, act, v->t, val);
562
+ read_next = 1;
563
+ }
564
+ else if (act < 0 && act > -(v->reduce_n)) {
565
+ D_puts("reduce");
566
+ REDUCE(v, act);
567
+ }
568
+ else if (act == -(v->reduce_n)) {
569
+ goto error;
570
+ error_recovered:
571
+ ; /* goto label requires stmt */
572
+ }
573
+ else if (act == v->shift_n) {
574
+ D_puts("accept");
575
+ goto accept;
576
+ }
577
+ else {
578
+ rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act);
579
+ }
580
+
581
+ if (v->debug) {
582
+ rb_funcall(v->parser, id_d_next_state,
583
+ 2, LONG2NUM(v->curstate), v->state);
584
+ }
585
+ }
586
+ /* not reach */
587
+
588
+
589
+ accept:
590
+ if (v->debug) rb_funcall(v->parser, id_d_accept, 0);
591
+ v->retval = rb_ary_entry(v->vstack, 0);
592
+ v->fin = CP_FIN_ACCEPT;
593
+ return;
594
+
595
+
596
+ error:
597
+ D_printf("error detected, status=%ld\n", v->errstatus);
598
+ if (v->errstatus == 0) {
599
+ v->nerr++;
600
+ rb_funcall(v->parser, id_onerror,
601
+ 3, v->t, val, v->vstack);
602
+ }
603
+ user_yyerror:
604
+ if (v->errstatus == 3) {
605
+ if (v->t == vFINAL_TOKEN) {
606
+ v->retval = Qnil;
607
+ v->fin = CP_FIN_EOT;
608
+ return;
609
+ }
610
+ read_next = 1;
611
+ }
612
+ v->errstatus = 3;
613
+ rb_ivar_set(v->parser, id_errstatus, LONG2NUM(v->errstatus));
614
+
615
+ /* check if we can shift/reduce error token */
616
+ D_printf("(err) k1=%ld\n", v->curstate);
617
+ D_printf("(err) k2=%d (error)\n", ERROR_TOKEN);
618
+ while (1) {
619
+ tmp = AREF(v->action_pointer, v->curstate);
620
+ if (NIL_P(tmp)) goto error_pop;
621
+ D_puts("(err) pointer[k1] ok");
622
+
623
+ i = NUM2LONG(tmp) + ERROR_TOKEN;
624
+ D_printf("(err) i=%ld\n", i);
625
+ if (i < 0) goto error_pop;
626
+
627
+ act_value = AREF(v->action_table, i);
628
+ if (NIL_P(act_value)) {
629
+ D_puts("(err) table[i] == nil");
630
+ goto error_pop;
631
+ }
632
+ act = NUM2LONG(act_value);
633
+ D_printf("(err) table[i]=%ld\n", act);
634
+
635
+ tmp = AREF(v->action_check, i);
636
+ if (NIL_P(tmp)) {
637
+ D_puts("(err) check[i] == nil");
638
+ goto error_pop;
639
+ }
640
+ if (NUM2LONG(tmp) != v->curstate) {
641
+ D_puts("(err) check[i] != k1");
642
+ goto error_pop;
643
+ }
644
+
645
+ D_puts("(err) found: can handle error token");
646
+ break;
647
+
648
+ error_pop:
649
+ D_puts("(err) act not found: can't handle error token; pop");
650
+
651
+ if (RARRAY_LEN(v->state) <= 1) {
652
+ v->retval = Qnil;
653
+ v->fin = CP_FIN_CANTPOP;
654
+ return;
655
+ }
656
+ POP(v->state);
657
+ POP(v->vstack);
658
+ v->curstate = num_to_long(LAST_I(v->state));
659
+ if (v->debug) {
660
+ POP(v->tstack);
661
+ rb_funcall(v->parser, id_d_e_pop,
662
+ 3, v->state, v->tstack, v->vstack);
663
+ }
664
+ }
665
+
666
+ /* shift/reduce error token */
667
+ if (act > 0 && act < v->shift_n) {
668
+ D_puts("e shift");
669
+ SHIFT(v, act, ERROR_TOKEN, val);
670
+ }
671
+ else if (act < 0 && act > -(v->reduce_n)) {
672
+ D_puts("e reduce");
673
+ REDUCE(v, act);
674
+ }
675
+ else if (act == v->shift_n) {
676
+ D_puts("e accept");
677
+ goto accept;
678
+ }
679
+ else {
680
+ rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act);
681
+ }
682
+ goto error_recovered;
683
+ }
684
+
685
+ static void
686
+ shift(struct cparse_params *v, long act, VALUE tok, VALUE val)
687
+ {
688
+ PUSH(v->vstack, val);
689
+ if (v->debug) {
690
+ PUSH(v->tstack, tok);
691
+ rb_funcall(v->parser, id_d_shift,
692
+ 3, tok, v->tstack, v->vstack);
693
+ }
694
+ v->curstate = act;
695
+ PUSH(v->state, LONG2NUM(v->curstate));
696
+ }
697
+
698
+ static int
699
+ reduce(struct cparse_params *v, long act)
700
+ {
701
+ VALUE code;
702
+ v->ruleno = -act * 3;
703
+ code = rb_catch("racc_jump", reduce0, v->value_v);
704
+ v->errstatus = num_to_long(rb_ivar_get(v->parser, id_errstatus));
705
+ return NUM2INT(code);
706
+ }
707
+
708
+ static VALUE
709
+ reduce0(RB_BLOCK_CALL_FUNC_ARGLIST(_, data))
710
+ {
711
+ struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type);
712
+ VALUE reduce_to, reduce_len, method_id;
713
+ long len;
714
+ ID mid;
715
+ VALUE tmp, tmp_t = Qundef, tmp_v = Qundef;
716
+ long i, k1, k2;
717
+ VALUE goto_state;
718
+
719
+ reduce_len = rb_ary_entry(v->reduce_table, v->ruleno);
720
+ reduce_to = rb_ary_entry(v->reduce_table, v->ruleno+1);
721
+ method_id = rb_ary_entry(v->reduce_table, v->ruleno+2);
722
+ len = NUM2LONG(reduce_len);
723
+ mid = value_to_id(method_id);
724
+
725
+ /* call action */
726
+ if (len == 0) {
727
+ tmp = Qnil;
728
+ if (mid != id_noreduce)
729
+ tmp_v = rb_ary_new();
730
+ if (v->debug)
731
+ tmp_t = rb_ary_new();
732
+ }
733
+ else {
734
+ if (mid != id_noreduce) {
735
+ tmp_v = GET_TAIL(v->vstack, len);
736
+ tmp = rb_ary_entry(tmp_v, 0);
737
+ }
738
+ else {
739
+ tmp = rb_ary_entry(v->vstack, RARRAY_LEN(v->vstack) - len);
740
+ }
741
+ CUT_TAIL(v->vstack, len);
742
+ if (v->debug) {
743
+ tmp_t = GET_TAIL(v->tstack, len);
744
+ CUT_TAIL(v->tstack, len);
745
+ }
746
+ CUT_TAIL(v->state, len);
747
+ }
748
+ if (mid != id_noreduce) {
749
+ if (v->use_result_var) {
750
+ tmp = rb_funcall(v->parser, mid,
751
+ 3, tmp_v, v->vstack, tmp);
752
+ }
753
+ else {
754
+ tmp = rb_funcall(v->parser, mid,
755
+ 2, tmp_v, v->vstack);
756
+ }
757
+ }
758
+
759
+ /* then push result */
760
+ PUSH(v->vstack, tmp);
761
+ if (v->debug) {
762
+ PUSH(v->tstack, reduce_to);
763
+ rb_funcall(v->parser, id_d_reduce,
764
+ 4, tmp_t, reduce_to, v->tstack, v->vstack);
765
+ }
766
+
767
+ /* calculate transition state */
768
+ if (RARRAY_LEN(v->state) == 0)
769
+ rb_raise(RaccBug, "state stack unexpectedly empty");
770
+ k2 = num_to_long(LAST_I(v->state));
771
+ k1 = num_to_long(reduce_to) - v->nt_base;
772
+ D_printf("(goto) k1=%ld\n", k1);
773
+ D_printf("(goto) k2=%ld\n", k2);
774
+
775
+ tmp = AREF(v->goto_pointer, k1);
776
+ if (NIL_P(tmp)) goto notfound;
777
+
778
+ i = NUM2LONG(tmp) + k2;
779
+ D_printf("(goto) i=%ld\n", i);
780
+ if (i < 0) goto notfound;
781
+
782
+ goto_state = AREF(v->goto_table, i);
783
+ if (NIL_P(goto_state)) {
784
+ D_puts("(goto) table[i] == nil");
785
+ goto notfound;
786
+ }
787
+ D_printf("(goto) table[i]=%ld (goto_state)\n", NUM2LONG(goto_state));
788
+
789
+ tmp = AREF(v->goto_check, i);
790
+ if (NIL_P(tmp)) {
791
+ D_puts("(goto) check[i] == nil");
792
+ goto notfound;
793
+ }
794
+ if (tmp != LONG2NUM(k1)) {
795
+ D_puts("(goto) check[i] != table[i]");
796
+ goto notfound;
797
+ }
798
+ D_printf("(goto) check[i]=%ld\n", NUM2LONG(tmp));
799
+
800
+ D_puts("(goto) found");
801
+ transit:
802
+ PUSH(v->state, goto_state);
803
+ v->curstate = NUM2LONG(goto_state);
804
+ return INT2FIX(0);
805
+
806
+ notfound:
807
+ D_puts("(goto) not found: use default");
808
+ /* overwrite `goto-state' by default value */
809
+ goto_state = AREF(v->goto_default, k1);
810
+ goto transit;
811
+ }
812
+
813
+ /* -----------------------------------------------------------------------
814
+ Ruby Interface
815
+ ----------------------------------------------------------------------- */
816
+
817
+ void
818
+ Init_cparse(void)
819
+ {
820
+ #ifdef HAVE_RB_EXT_RACTOR_SAFE
821
+ rb_ext_ractor_safe(true);
822
+ #endif
823
+
824
+ VALUE Racc, Parser;
825
+ ID id_racc = rb_intern_const("Racc");
826
+
827
+ if (rb_const_defined(rb_cObject, id_racc)) {
828
+ Racc = rb_const_get(rb_cObject, id_racc);
829
+ Parser = rb_const_get_at(Racc, rb_intern_const("Parser"));
830
+ }
831
+ else {
832
+ Racc = rb_define_module("Racc");
833
+ Parser = rb_define_class_under(Racc, "Parser", rb_cObject);
834
+ }
835
+ rb_define_private_method(Parser, "_racc_do_parse_c", racc_cparse, 2);
836
+ rb_define_private_method(Parser, "_racc_yyparse_c", racc_yyparse, 4);
837
+ rb_define_const(Parser, "Racc_Runtime_Core_Version_C",
838
+ rb_str_new2(RACC_VERSION));
839
+ rb_define_const(Parser, "Racc_Runtime_Core_Id_C",
840
+ rb_str_new2("$originalId: cparse.c,v 1.8 2006/07/06 11:39:46 aamine Exp $"));
841
+
842
+ CparseParams = rb_define_class_under(Racc, "CparseParams", rb_cObject);
843
+ rb_undef_alloc_func(CparseParams);
844
+ rb_undef_method(CparseParams, "initialize");
845
+ rb_undef_method(CparseParams, "initialize_copy");
846
+
847
+ RaccBug = rb_eRuntimeError;
848
+
849
+ id_yydebug = rb_intern_const("@yydebug");
850
+ id_nexttoken = rb_intern_const("next_token");
851
+ id_onerror = rb_intern_const("on_error");
852
+ id_noreduce = rb_intern_const("_reduce_none");
853
+ id_errstatus = rb_intern_const("@racc_error_status");
854
+
855
+ id_d_shift = rb_intern_const("racc_shift");
856
+ id_d_reduce = rb_intern_const("racc_reduce");
857
+ id_d_accept = rb_intern_const("racc_accept");
858
+ id_d_read_token = rb_intern_const("racc_read_token");
859
+ id_d_next_state = rb_intern_const("racc_next_state");
860
+ id_d_e_pop = rb_intern_const("racc_e_pop");
861
+ }