script_core 0.2.7 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (283) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +2 -2
  4. data/ext/enterprise_script_service/Rakefile +1 -1
  5. data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +117 -74
  6. data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +41 -37
  7. data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
  8. data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
  9. data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
  10. data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
  11. data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
  12. data/ext/enterprise_script_service/mruby/.travis.yml +2 -2
  13. data/ext/enterprise_script_service/mruby/.yamllint +8 -0
  14. data/ext/enterprise_script_service/mruby/AUTHORS +3 -0
  15. data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
  16. data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
  17. data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
  18. data/ext/enterprise_script_service/mruby/LICENSE +1 -1
  19. data/ext/enterprise_script_service/mruby/Makefile +1 -1
  20. data/ext/enterprise_script_service/mruby/README.md +4 -14
  21. data/ext/enterprise_script_service/mruby/Rakefile +18 -108
  22. data/ext/enterprise_script_service/mruby/TODO.md +17 -0
  23. data/ext/enterprise_script_service/mruby/appveyor.yml +31 -25
  24. data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
  25. data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
  26. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +2 -19
  27. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +2 -2
  28. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +1 -18
  29. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +2 -19
  30. data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
  31. data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
  32. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_android_armeabi_v7a_neon_hard.rb → build_config/android_armeabi_v7a_neon_hard.rb} +0 -15
  33. data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
  34. data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
  35. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +2 -19
  36. data/ext/enterprise_script_service/mruby/{travis_config.rb → build_config/ci/gcc-clang.rb} +10 -10
  37. data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
  38. data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
  39. data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
  40. data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
  41. data/ext/enterprise_script_service/mruby/{examples/targets/build_config_dreamcast_shelf.rb → build_config/dreamcast_shelf.rb} +5 -19
  42. data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
  43. data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
  44. data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
  45. data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
  46. data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
  47. data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
  48. data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
  49. data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
  50. data/ext/enterprise_script_service/mruby/doc/guides/compile.md +138 -49
  51. data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
  52. data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
  53. data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +49 -22
  54. data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
  55. data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
  56. data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
  57. data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
  58. data/ext/enterprise_script_service/mruby/doc/opcode.md +93 -107
  59. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
  60. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
  61. data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
  62. data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
  63. data/ext/enterprise_script_service/mruby/include/mrbconf.h +81 -62
  64. data/ext/enterprise_script_service/mruby/include/mruby.h +137 -96
  65. data/ext/enterprise_script_service/mruby/include/mruby/array.h +23 -6
  66. data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +73 -48
  67. data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
  68. data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +79 -48
  69. data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
  70. data/ext/enterprise_script_service/mruby/include/mruby/common.h +4 -1
  71. data/ext/enterprise_script_service/mruby/include/mruby/compile.h +13 -7
  72. data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
  73. data/ext/enterprise_script_service/mruby/include/mruby/dump.h +17 -35
  74. data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
  75. data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
  76. data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
  77. data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
  78. data/ext/enterprise_script_service/mruby/include/mruby/irep.h +64 -14
  79. data/ext/enterprise_script_service/mruby/include/mruby/khash.h +6 -14
  80. data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +36 -63
  81. data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
  82. data/ext/enterprise_script_service/mruby/include/mruby/ops.h +27 -23
  83. data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
  84. data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
  85. data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
  86. data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
  87. data/ext/enterprise_script_service/mruby/include/mruby/proc.h +80 -13
  88. data/ext/enterprise_script_service/mruby/include/mruby/string.h +10 -15
  89. data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
  90. data/ext/enterprise_script_service/mruby/include/mruby/value.h +29 -19
  91. data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
  92. data/ext/enterprise_script_service/mruby/include/mruby/version.h +26 -7
  93. data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -44
  94. data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +55 -37
  95. data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
  96. data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
  97. data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +75 -32
  98. data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
  99. data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
  100. data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
  101. data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
  102. data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -88
  103. data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
  104. data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
  105. data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
  106. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -1
  107. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +5 -4
  108. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +28 -19
  109. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
  110. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
  111. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
  112. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
  113. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
  114. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -3
  115. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
  116. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +4 -4
  117. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
  118. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
  119. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +41 -34
  120. data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
  121. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
  122. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +19 -9
  123. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
  124. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -1
  125. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +22 -6
  126. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
  127. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +2 -2
  128. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
  129. data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
  130. data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +2 -1
  131. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +430 -399
  132. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
  133. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
  134. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +559 -217
  135. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +4774 -4193
  136. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +18 -19
  137. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +1 -1
  138. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +8 -7
  139. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
  140. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
  141. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
  142. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
  143. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +17 -25
  144. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +18 -13
  145. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +30 -2
  146. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
  147. data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +2 -2
  148. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
  149. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +2 -2
  150. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
  151. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +2 -2
  152. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +55 -52
  153. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +4 -2
  154. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +99 -87
  155. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +2 -0
  156. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +2 -3
  157. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +1 -1
  158. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +7 -6
  159. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
  160. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
  161. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +43 -58
  162. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +4 -4
  163. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
  164. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +77 -74
  165. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
  166. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
  167. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +5 -4
  168. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -12
  169. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
  170. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
  171. data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
  172. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
  173. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +38 -88
  174. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
  175. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +62 -26
  176. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +32 -19
  177. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
  178. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
  179. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
  180. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
  181. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +20 -40
  182. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
  183. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +11 -17
  184. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
  185. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
  186. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
  187. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +4 -4
  188. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
  189. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
  190. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +102 -71
  191. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +4 -2
  192. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
  193. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +13 -9
  194. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
  195. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +18 -25
  196. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +6 -5
  197. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
  198. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
  199. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
  200. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +16 -44
  201. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
  202. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +27 -27
  203. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
  204. data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
  205. data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
  206. data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
  207. data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
  208. data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
  209. data/ext/enterprise_script_service/mruby/mrblib/hash.rb +0 -20
  210. data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
  211. data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
  212. data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
  213. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
  214. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
  215. data/ext/enterprise_script_service/mruby/src/array.c +43 -80
  216. data/ext/enterprise_script_service/mruby/src/backtrace.c +16 -17
  217. data/ext/enterprise_script_service/mruby/src/class.c +774 -182
  218. data/ext/enterprise_script_service/mruby/src/codedump.c +223 -198
  219. data/ext/enterprise_script_service/mruby/src/debug.c +6 -6
  220. data/ext/enterprise_script_service/mruby/src/dump.c +466 -141
  221. data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
  222. data/ext/enterprise_script_service/mruby/src/error.c +36 -13
  223. data/ext/enterprise_script_service/mruby/src/etc.c +43 -34
  224. data/ext/enterprise_script_service/mruby/src/fmt_fp.c +5 -6
  225. data/ext/enterprise_script_service/mruby/src/gc.c +73 -71
  226. data/ext/enterprise_script_service/mruby/src/hash.c +1050 -707
  227. data/ext/enterprise_script_service/mruby/src/kernel.c +75 -220
  228. data/ext/enterprise_script_service/mruby/src/load.c +196 -166
  229. data/ext/enterprise_script_service/mruby/src/numeric.c +352 -314
  230. data/ext/enterprise_script_service/mruby/src/object.c +97 -90
  231. data/ext/enterprise_script_service/mruby/src/print.c +4 -3
  232. data/ext/enterprise_script_service/mruby/src/proc.c +48 -56
  233. data/ext/enterprise_script_service/mruby/src/range.c +45 -21
  234. data/ext/enterprise_script_service/mruby/src/state.c +25 -32
  235. data/ext/enterprise_script_service/mruby/src/string.c +59 -101
  236. data/ext/enterprise_script_service/mruby/src/symbol.c +121 -56
  237. data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
  238. data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
  239. data/ext/enterprise_script_service/mruby/src/vm.c +617 -602
  240. data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
  241. data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
  242. data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
  243. data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
  244. data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +83 -77
  245. data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
  246. data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
  247. data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
  248. data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
  249. data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
  250. data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +6 -5
  251. data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +10 -14
  252. data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +17 -21
  253. data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
  254. data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
  255. data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
  256. data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
  257. data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
  258. data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
  259. data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
  260. data/ext/enterprise_script_service/mruby/test/t/kernel.rb +1 -1
  261. data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
  262. data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
  263. data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
  264. data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
  265. data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
  266. data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
  267. data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
  268. data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
  269. data/ext/enterprise_script_service/mruby_config.rb +2 -5
  270. data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
  271. data/lib/script_core/version.rb +1 -1
  272. data/spec/script_core_spec.rb +13 -0
  273. metadata +61 -23
  274. data/ext/enterprise_script_service/mruby/.github/workflows/main.yml +0 -24
  275. data/ext/enterprise_script_service/mruby/TODO +0 -8
  276. data/ext/enterprise_script_service/mruby/appveyor_config.rb +0 -46
  277. data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
  278. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
  279. data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
  280. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
  281. data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
  282. data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
  283. data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
@@ -3,36 +3,35 @@
3
3
  spec.author = 'mruby developers'
4
4
  spec.summary = 'mruby compiler library'
5
5
 
6
- lex_def = "#{dir}/core/lex.def"
7
- core_objs = Dir.glob("#{dir}/core/*.c").map { |f|
8
- next nil if build.cxx_exception_enabled? and f =~ /(codegen).c$/
9
- objfile(f.pathmap("#{build_dir}/core/%n"))
10
- }.compact
11
-
12
- if build.cxx_exception_enabled?
13
- core_objs <<
14
- build.compile_as_cxx("#{dir}/core/y.tab.c", "#{build_dir}/core/y.tab.cxx",
15
- objfile("#{build_dir}/y.tab"), ["#{dir}/core"]) <<
16
- build.compile_as_cxx("#{dir}/core/codegen.c", "#{build_dir}/core/codegen.cxx")
17
- else
18
- core_objs << objfile("#{build_dir}/core/y.tab")
19
- file objfile("#{build_dir}/core/y.tab") => "#{dir}/core/y.tab.c" do |t|
20
- cc.run t.name, t.prerequisites.first, [], ["#{dir}/core"]
6
+ objs = %w[codegen y.tab].map do |name|
7
+ src = "#{dir}/core/#{name}.c"
8
+ if build.cxx_exception_enabled?
9
+ build.compile_as_cxx(src)
10
+ else
11
+ objfile(src.pathmap("#{build_dir}/core/%n"))
21
12
  end
22
13
  end
14
+ build.libmruby_core_objs << objs
15
+
16
+ lex_def = "#{dir}/core/lex.def"
23
17
 
24
18
  # Parser
25
19
  file "#{dir}/core/y.tab.c" => ["#{dir}/core/parse.y", lex_def] do |t|
26
20
  yacc.run t.name, t.prerequisites.first
27
- content = File.read(t.name).gsub(/^#line +\d+ +"\K.*$/){$&.relative_path}
28
- File.write(t.name, content)
21
+ replace_line_directive(t.name)
29
22
  end
30
23
 
31
24
  # Lexical analyzer
32
25
  file lex_def => "#{dir}/core/keywords" do |t|
33
26
  gperf.run t.name, t.prerequisites.first
27
+ replace_line_directive(t.name)
34
28
  end
35
29
 
36
- file build.libmruby_core_static => core_objs
37
- build.libmruby << core_objs
30
+ def replace_line_directive(path)
31
+ content = File.read(path).gsub(%r{
32
+ ^\#line\s+\d+\s+"\K.*$ | # #line directive
33
+ ^/\*\s+Command-line:.*\s\K\S+(?=\s+\*/$) # header comment in lex.def
34
+ }x, &:relative_path)
35
+ File.write(path, content)
36
+ end
38
37
  end
@@ -104,7 +104,7 @@ def to_r
104
104
 
105
105
  alias_method :imag, :imaginary
106
106
 
107
- [Fixnum, Float].each do |cls|
107
+ [Integer, Float].each do |cls|
108
108
  [:+, :-, :*, :/, :==].each do |op|
109
109
  cls.instance_eval do
110
110
  original_operator_name = :"__original_operator_#{op}_complex"
@@ -1,10 +1,11 @@
1
1
  #include <mruby.h>
2
2
  #include <mruby/class.h>
3
3
  #include <mruby/numeric.h>
4
+ #include <mruby/presym.h>
4
5
  #include <math.h>
5
6
 
6
- #ifdef MRB_WITHOUT_FLOAT
7
- # error Complex conflicts 'MRB_WITHOUT_FLOAT' configuration in your 'build_config.rb'
7
+ #ifdef MRB_NO_FLOAT
8
+ # error Complex conflicts with 'MRB_NO_FLOAT' configuration
8
9
  #endif
9
10
 
10
11
  struct mrb_complex {
@@ -12,13 +13,13 @@ struct mrb_complex {
12
13
  mrb_float imaginary;
13
14
  };
14
15
 
15
- #ifdef MRB_USE_FLOAT
16
+ #ifdef MRB_USE_FLOAT32
16
17
  #define F(x) x##f
17
18
  #else
18
19
  #define F(x) x
19
20
  #endif
20
21
 
21
- #if defined(MRB_64BIT) || defined(MRB_USE_FLOAT)
22
+ #if defined(MRB_64BIT) || defined(MRB_USE_FLOAT32)
22
23
 
23
24
  #define COMPLEX_USE_ISTRUCT
24
25
  /* use TT_ISTRUCT */
@@ -69,7 +70,7 @@ complex_ptr(mrb_state *mrb, mrb_value v)
69
70
  static mrb_value
70
71
  complex_new(mrb_state *mrb, mrb_float real, mrb_float imaginary)
71
72
  {
72
- struct RClass *c = mrb_class_get(mrb, "Complex");
73
+ struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Complex));
73
74
  struct mrb_complex *p;
74
75
  struct RBasic *comp = complex_alloc(mrb, c, &p);
75
76
  p->real = real;
@@ -122,7 +123,7 @@ complex_to_i(mrb_state *mrb, mrb_value self)
122
123
  if (p->imaginary != 0) {
123
124
  mrb_raisef(mrb, E_RANGE_ERROR, "can't convert %v into Float", self);
124
125
  }
125
- return mrb_int_value(mrb, p->real);
126
+ return mrb_int_value(mrb, (mrb_int)p->real);
126
127
  }
127
128
 
128
129
  static mrb_value
@@ -224,7 +225,7 @@ void mrb_mruby_complex_gem_init(mrb_state *mrb)
224
225
  #ifdef COMPLEX_USE_ISTRUCT
225
226
  mrb_assert(sizeof(struct mrb_complex) < ISTRUCT_DATA_SIZE);
226
227
  #endif
227
- comp = mrb_define_class(mrb, "Complex", mrb_class_get(mrb, "Numeric"));
228
+ comp = mrb_define_class(mrb, "Complex", mrb_class_get_id(mrb, MRB_SYM(Numeric)));
228
229
  #ifdef COMPLEX_USE_ISTRUCT
229
230
  MRB_SET_INSTANCE_TT(comp, MRB_TT_ISTRUCT);
230
231
  #else
@@ -56,11 +56,11 @@ def assert_complex(real, exp)
56
56
  assert 'Complex#/' do
57
57
  assert_complex Complex(2, 3) / Complex(2, 3) , (1 + 0i)
58
58
  assert_complex Complex(900) / Complex(1) , (900 + 0i)
59
- assert_complex Complex(-2, 9) / Complex(-9, 2), ((36 / 85) - (77i / 85))
60
- assert_complex Complex(9, 8) / 4 , ((9 / 4) + 2i)
59
+ assert_complex Complex(-2, 9) / Complex(-9, 2), ((36.0 / 85) - (77i / 85))
60
+ assert_complex Complex(9, 8) / 4 , ((9.0 / 4) + 2i)
61
61
  assert_complex Complex(20, 9) / 9.8 , (2.0408163265306123 + 0.9183673469387754i)
62
62
  if 1e39.infinite? then
63
- # MRB_USE_FLOAT in effect
63
+ # MRB_USE_FLOAT32 in effect
64
64
  ten = 1e21
65
65
  one = 1e20
66
66
  else
@@ -80,7 +80,7 @@ def assert_complex(real, exp)
80
80
  assert_float Complex(-1).abs, 1
81
81
  assert_float Complex(3.0, -4.0).abs, 5.0
82
82
  if 1e39.infinite? then
83
- # MRB_USE_FLOAT in effect
83
+ # MRB_USE_FLOAT32 in effect
84
84
  exp = 125
85
85
  else
86
86
  exp = 1021
@@ -130,6 +130,7 @@ def initialize(obj=NONE, meth=:each, *args, &block)
130
130
  @feedvalue = nil
131
131
  @stop_exc = false
132
132
  end
133
+
133
134
  attr_accessor :obj, :meth, :args
134
135
  attr_reader :fib
135
136
 
@@ -445,7 +445,7 @@ def (o = Object.new).each
445
445
  }
446
446
  end
447
447
 
448
- assert 'Integral#times' do
448
+ assert 'Integer#times' do
449
449
  a = 3
450
450
  b = a.times
451
451
  c = []
@@ -567,7 +567,7 @@ def (o = Object.new).each
567
567
  # Without initial object
568
568
  passed_args = []
569
569
  enum = Enumerator.produce {|obj| passed_args << obj; (obj || 0).succ }
570
- assert_equal Enumerator, enum.class
570
+ assert_equal Enumerator, enum.class
571
571
  assert_take [1, 2, 3], enum
572
572
  assert_equal [nil, 1, 2], passed_args
573
573
 
@@ -4,7 +4,7 @@
4
4
  spec.summary = 'extensional error handling'
5
5
 
6
6
  if build.cxx_exception_enabled?
7
- @objs << build.compile_as_cxx("#{spec.dir}/src/exception.c", "#{spec.build_dir}/src/exception.cxx")
8
- @objs.delete_if { |v| v == objfile("#{spec.build_dir}/src/exception") }
7
+ objs << build.compile_as_cxx("#{spec.dir}/src/exception.c")
8
+ objs.delete_if { |v| v == objfile("#{spec.build_dir}/src/exception") }
9
9
  end
10
10
  end
@@ -5,14 +5,16 @@
5
5
  #include <mruby/proc.h>
6
6
  #include <mruby/opcode.h>
7
7
  #include <mruby/error.h>
8
+ #include <mruby/presym.h>
8
9
 
10
+ struct REnv *mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc);
9
11
  mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p);
10
12
  mrb_value mrb_obj_instance_eval(mrb_state *mrb, mrb_value self);
11
13
 
12
14
  void mrb_codedump_all(mrb_state*, struct RProc*);
13
15
 
14
16
  static struct RProc*
15
- create_proc_from_string(mrb_state *mrb, char *s, mrb_int len, mrb_value binding, const char *file, mrb_int line)
17
+ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value binding, const char *file, mrb_int line)
16
18
  {
17
19
  mrbc_context *cxt;
18
20
  struct mrb_parser_state *p;
@@ -20,7 +22,6 @@ create_proc_from_string(mrb_state *mrb, char *s, mrb_int len, mrb_value binding,
20
22
  struct REnv *e;
21
23
  mrb_callinfo *ci; /* callinfo of eval caller */
22
24
  struct RClass *target_class = NULL;
23
- int bidx;
24
25
 
25
26
  if (!mrb_nil_p(binding)) {
26
27
  mrb_raise(mrb, E_ARGUMENT_ERROR, "Binding of eval must be nil.");
@@ -39,7 +40,7 @@ create_proc_from_string(mrb_state *mrb, char *s, mrb_int len, mrb_value binding,
39
40
 
40
41
  /* only occur when memory ran out */
41
42
  if (!p) {
42
- mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to create parser state.");
43
+ mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to create parser state (out of memory)");
43
44
  }
44
45
 
45
46
  if (0 < p->nerr) {
@@ -79,28 +80,19 @@ create_proc_from_string(mrb_state *mrb, char *s, mrb_int len, mrb_value binding,
79
80
  target_class = MRB_PROC_TARGET_CLASS(ci->proc);
80
81
  }
81
82
  if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) {
82
- if (ci->env) {
83
- e = ci->env;
83
+ if ((e = mrb_vm_ci_env(ci)) != NULL) {
84
+ /* do nothing, because e is assigned already */
84
85
  }
85
86
  else {
86
- e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV,
87
- (struct RClass*)target_class);
88
- e->mid = ci->mid;
89
- e->stack = ci[1].stackent;
90
- e->cxt = mrb->c;
91
- MRB_ENV_SET_LEN(e, ci->proc->body.irep->nlocals);
92
- bidx = ci->argc;
93
- if (ci->argc < 0) bidx = 2;
94
- else bidx += 1;
95
- MRB_ENV_SET_BIDX(e, bidx);
96
- ci->env = e;
87
+ e = mrb_env_new(mrb, mrb->c, ci, ci->proc->body.irep->nlocals, ci->stack, target_class);
88
+ ci->u.env = e;
97
89
  }
98
90
  proc->e.env = e;
99
91
  proc->flags |= MRB_PROC_ENVSET;
100
92
  mrb_field_write_barrier(mrb, (struct RBasic*)proc, (struct RBasic*)e);
101
93
  }
102
94
  proc->upper = ci->proc;
103
- mrb->c->ci->target_class = target_class;
95
+ mrb_vm_ci_target_class_set(mrb->c->ci, target_class);
104
96
  /* mrb_codedump_all(mrb, proc); */
105
97
 
106
98
  mrb_parser_free(p);
@@ -124,17 +116,17 @@ exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc)
124
116
  return ret;
125
117
  }
126
118
  /* clear block */
127
- mrb->c->stack[1] = mrb_nil_value();
119
+ mrb->c->ci->stack[1] = mrb_nil_value();
128
120
  return mrb_exec_irep(mrb, self, proc);
129
121
  }
130
122
 
131
123
  static mrb_value
132
124
  f_eval(mrb_state *mrb, mrb_value self)
133
125
  {
134
- char *s;
126
+ const char *s;
135
127
  mrb_int len;
136
128
  mrb_value binding = mrb_nil_value();
137
- char *file = NULL;
129
+ const char *file = NULL;
138
130
  mrb_int line = 1;
139
131
  struct RProc *proc;
140
132
 
@@ -149,14 +141,14 @@ static mrb_value
149
141
  f_instance_eval(mrb_state *mrb, mrb_value self)
150
142
  {
151
143
  mrb_value b;
152
- mrb_int argc; mrb_value *argv;
144
+ mrb_int argc; const mrb_value *argv;
153
145
 
154
146
  mrb_get_args(mrb, "*!&", &argv, &argc, &b);
155
147
 
156
148
  if (mrb_nil_p(b)) {
157
- char *s;
149
+ const char *s;
158
150
  mrb_int len;
159
- char *file = NULL;
151
+ const char *file = NULL;
160
152
  mrb_int line = 1;
161
153
  mrb_value cv;
162
154
  struct RProc *proc;
@@ -166,7 +158,7 @@ f_instance_eval(mrb_state *mrb, mrb_value self)
166
158
  proc = create_proc_from_string(mrb, s, len, mrb_nil_value(), file, line);
167
159
  MRB_PROC_SET_TARGET_CLASS(proc, mrb_class_ptr(cv));
168
160
  mrb_assert(!MRB_PROC_CFUNC_P(proc));
169
- mrb->c->ci->target_class = mrb_class_ptr(cv);
161
+ mrb_vm_ci_target_class_set(mrb->c->ci, mrb_class_ptr(cv));
170
162
  return exec_irep(mrb, self, proc);
171
163
  }
172
164
  else {
@@ -179,7 +171,7 @@ void
179
171
  mrb_mruby_eval_gem_init(mrb_state* mrb)
180
172
  {
181
173
  mrb_define_module_function(mrb, mrb->kernel_module, "eval", f_eval, MRB_ARGS_ARG(1, 3));
182
- mrb_define_method(mrb, mrb_class_get(mrb, "BasicObject"), "instance_eval", f_instance_eval, MRB_ARGS_OPT(3)|MRB_ARGS_BLOCK());
174
+ mrb_define_method(mrb, mrb_class_get_id(mrb, MRB_SYM(BasicObject)), "instance_eval", f_instance_eval, MRB_ARGS_OPT(3)|MRB_ARGS_BLOCK());
183
175
  }
184
176
 
185
177
  void
@@ -93,7 +93,6 @@ fiber_init(mrb_state *mrb, mrb_value self)
93
93
  }
94
94
  c->stbase = (mrb_value *)mrb_malloc(mrb, slen*sizeof(mrb_value));
95
95
  c->stend = c->stbase + slen;
96
- c->stack = c->stbase;
97
96
 
98
97
  #ifdef MRB_NAN_BOXING
99
98
  {
@@ -110,20 +109,19 @@ fiber_init(mrb_state *mrb, mrb_value self)
110
109
  #endif
111
110
 
112
111
  /* copy receiver from a block */
113
- c->stack[0] = mrb->c->stack[0];
112
+ c->stbase[0] = mrb->c->ci->stack[0];
114
113
 
115
114
  /* initialize callinfo stack */
116
115
  c->cibase = (mrb_callinfo *)mrb_calloc(mrb, FIBER_CI_INIT_SIZE, sizeof(mrb_callinfo));
117
116
  c->ciend = c->cibase + FIBER_CI_INIT_SIZE;
118
117
  c->ci = c->cibase;
119
- c->ci->stackent = c->stack;
120
118
 
121
119
  /* adjust return callinfo */
122
120
  ci = c->ci;
123
- ci->target_class = MRB_PROC_TARGET_CLASS(p);
124
- ci->proc = p;
121
+ mrb_vm_ci_target_class_set(ci, MRB_PROC_TARGET_CLASS(p));
122
+ mrb_vm_ci_proc_set(ci, p);
125
123
  mrb_field_write_barrier(mrb, (struct RBasic*)mrb_obj_ptr(self), (struct RBasic*)p);
126
- ci->pc = p->body.irep->iseq;
124
+ ci->stack = c->stbase;
127
125
  ci[1] = ci[0];
128
126
  c->ci++; /* push dummy callinfo */
129
127
 
@@ -154,7 +152,7 @@ fiber_result(mrb_state *mrb, const mrb_value *a, mrb_int len)
154
152
  }
155
153
 
156
154
  /* mark return from context modifying method */
157
- #define MARK_CONTEXT_MODIFY(c) (c)->ci->target_class = NULL
155
+ #define MARK_CONTEXT_MODIFY(c) (c)->ci->u.target_class = NULL
158
156
 
159
157
  static void
160
158
  fiber_check_cfunc(mrb_state *mrb, struct mrb_context *c)
@@ -214,21 +212,27 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
214
212
  mrb_raise(mrb, E_FIBER_ERROR, "double resume (current)");
215
213
  }
216
214
  mrb_stack_extend(mrb, len+2); /* for receiver and (optional) block */
217
- b = c->stack+1;
215
+ b = c->stbase+1;
218
216
  e = b + len;
219
217
  while (b<e) {
220
218
  *b++ = *a++;
221
219
  }
220
+ if (vmexec) {
221
+ c->ci--; /* pop dummy callinfo */
222
+ }
222
223
  c->cibase->argc = (int)len;
223
- value = c->stack[0] = MRB_PROC_ENV(c->ci->proc)->stack[0];
224
+ value = c->stbase[0] = MRB_PROC_ENV(c->cibase->proc)->stack[0];
224
225
  }
225
226
  else {
226
227
  value = fiber_result(mrb, a, len);
228
+ if (vmexec) {
229
+ c->ci->stack[c->ci[1].acc] = value;
230
+ }
227
231
  }
228
232
 
229
233
  if (vmexec) {
230
234
  c->vmexec = TRUE;
231
- value = mrb_vm_exec(mrb, c->ci[-1].proc, c->ci->pc);
235
+ value = mrb_vm_exec(mrb, c->ci->proc, c->ci->pc);
232
236
  mrb->c = old_c;
233
237
  }
234
238
  else {
@@ -255,7 +259,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
255
259
  static mrb_value
256
260
  fiber_resume(mrb_state *mrb, mrb_value self)
257
261
  {
258
- mrb_value *a;
262
+ const mrb_value *a;
259
263
  mrb_int len;
260
264
  mrb_bool vmexec = FALSE;
261
265
 
@@ -315,7 +319,7 @@ static mrb_value
315
319
  fiber_transfer(mrb_state *mrb, mrb_value self)
316
320
  {
317
321
  struct mrb_context *c = fiber_check(mrb, self);
318
- mrb_value* a;
322
+ const mrb_value* a;
319
323
  mrb_int len;
320
324
 
321
325
  fiber_check_cfunc(mrb, mrb->c);
@@ -354,6 +358,7 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
354
358
  if (c->vmexec) {
355
359
  c->vmexec = FALSE;
356
360
  mrb->c->ci->acc = CI_ACC_RESUMED;
361
+ c->ci--; /* pop callinfo for yield */
357
362
  }
358
363
  MARK_CONTEXT_MODIFY(mrb->c);
359
364
  return fiber_result(mrb, a, len);
@@ -374,7 +379,7 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
374
379
  static mrb_value
375
380
  fiber_yield(mrb_state *mrb, mrb_value self)
376
381
  {
377
- mrb_value *a;
382
+ const mrb_value *a;
378
383
  mrb_int len;
379
384
 
380
385
  mrb_get_args(mrb, "*!", &a, &len);
@@ -22,7 +22,8 @@
22
22
  static mrb_value
23
23
  hash_values_at(mrb_state *mrb, mrb_value hash)
24
24
  {
25
- mrb_value *argv, result;
25
+ const mrb_value *argv;
26
+ mrb_value result;
26
27
  mrb_int argc, i;
27
28
  int ai;
28
29
 
@@ -49,7 +50,8 @@ hash_values_at(mrb_state *mrb, mrb_value hash)
49
50
  static mrb_value
50
51
  hash_slice(mrb_state *mrb, mrb_value hash)
51
52
  {
52
- mrb_value *argv, result;
53
+ const mrb_value *argv;
54
+ mrb_value result;
53
55
  mrb_int argc, i;
54
56
 
55
57
  mrb_get_args(mrb, "*", &argv, &argc);
@@ -67,6 +69,31 @@ hash_slice(mrb_state *mrb, mrb_value hash)
67
69
  return result;
68
70
  }
69
71
 
72
+ /*
73
+ * call-seq:
74
+ * hsh.except(*keys) -> a_hash
75
+ *
76
+ * Returns a hash excluding the given keys and their values.
77
+ *
78
+ * h = { a: 100, b: 200, c: 300 }
79
+ * h.except(:a) #=> {:b=>200, :c=>300}
80
+ * h.except(:b, :c, :d) #=> {:a=>100}
81
+ */
82
+ static mrb_value
83
+ hash_except(mrb_state *mrb, mrb_value hash)
84
+ {
85
+ const mrb_value *argv;
86
+ mrb_value result;
87
+ mrb_int argc, i;
88
+
89
+ mrb_get_args(mrb, "*", &argv, &argc);
90
+ result = mrb_hash_dup(mrb, hash);
91
+ for (i = 0; i < argc; i++) {
92
+ mrb_hash_delete_key(mrb, result, argv[i]);
93
+ }
94
+ return result;
95
+ }
96
+
70
97
  void
71
98
  mrb_mruby_hash_ext_gem_init(mrb_state *mrb)
72
99
  {
@@ -75,6 +102,7 @@ mrb_mruby_hash_ext_gem_init(mrb_state *mrb)
75
102
  h = mrb->hash_class;
76
103
  mrb_define_method(mrb, h, "values_at", hash_values_at, MRB_ARGS_ANY());
77
104
  mrb_define_method(mrb, h, "slice", hash_slice, MRB_ARGS_ANY());
105
+ mrb_define_method(mrb, h, "except", hash_except, MRB_ARGS_ANY());
78
106
  }
79
107
 
80
108
  void