script_core 0.2.7 → 0.3.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 (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
@@ -4,6 +4,7 @@
4
4
  #include <mruby/array.h>
5
5
  #include <mruby/string.h>
6
6
  #include <mruby/debug.h>
7
+ #include <mruby/presym.h>
7
8
 
8
9
  static mrb_value
9
10
  mrb_proc_lambda_p(mrb_state *mrb, mrb_value self)
@@ -21,7 +22,7 @@ mrb_proc_source_location(mrb_state *mrb, mrb_value self)
21
22
  return mrb_nil_value();
22
23
  }
23
24
  else {
24
- mrb_irep *irep = p->body.irep;
25
+ const mrb_irep *irep = p->body.irep;
25
26
  int32_t line;
26
27
  const char *filename;
27
28
 
@@ -41,7 +42,7 @@ mrb_proc_inspect(mrb_state *mrb, mrb_value self)
41
42
  mrb_str_cat_str(mrb, str, mrb_ptr_to_str(mrb, mrb_cptr(self)));
42
43
 
43
44
  if (!MRB_PROC_CFUNC_P(p)) {
44
- mrb_irep *irep = p->body.irep;
45
+ const mrb_irep *irep = p->body.irep;
45
46
  const char *filename;
46
47
  int32_t line;
47
48
  mrb_str_cat_lit(mrb, str, "@");
@@ -91,21 +92,24 @@ static mrb_value
91
92
  mrb_proc_parameters(mrb_state *mrb, mrb_value self)
92
93
  {
93
94
  struct parameters_type {
94
- size_t len;
95
- const char *name;
95
+ mrb_sym name;
96
96
  int size;
97
97
  } *p, parameters_list [] = {
98
- {sizeof("req") - 1, "req", 0},
99
- {sizeof("opt") - 1, "opt", 0},
100
- {sizeof("rest") - 1, "rest", 0},
101
- {sizeof("req") - 1, "req", 0},
102
- {sizeof("block") - 1, "block", 0},
103
- {0, NULL, 0}
98
+ {MRB_SYM(req), 0},
99
+ {MRB_SYM(opt), 0},
100
+ {MRB_SYM(rest), 0},
101
+ {MRB_SYM(req), 0},
102
+ {MRB_SYM(keyrest), 0},
103
+ {MRB_SYM(block), 0},
104
+ {MRB_SYM(key), 0},
105
+ {0, 0}
104
106
  };
105
107
  const struct RProc *proc = mrb_proc_ptr(self);
106
- const struct mrb_irep *irep = proc->body.irep;
108
+ const struct mrb_irep *irep;
107
109
  mrb_aspec aspec;
108
110
  mrb_value parameters;
111
+ mrb_value krest = mrb_nil_value();
112
+ mrb_value block = mrb_nil_value();
109
113
  int i, j;
110
114
  int max = -1;
111
115
 
@@ -113,6 +117,7 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
113
117
  // TODO cfunc aspec is not implemented yet
114
118
  return mrb_ary_new(mrb);
115
119
  }
120
+ irep = proc->body.irep;
116
121
  if (!irep) {
117
122
  return mrb_ary_new(mrb);
118
123
  }
@@ -124,10 +129,8 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
124
129
  }
125
130
 
126
131
  if (!MRB_PROC_STRICT_P(proc)) {
127
- parameters_list[0].len = sizeof("opt") - 1;
128
- parameters_list[0].name = "opt";
129
- parameters_list[3].len = sizeof("opt") - 1;
130
- parameters_list[3].name = "opt";
132
+ parameters_list[0].name = MRB_SYM(opt);
133
+ parameters_list[3].name = MRB_SYM(opt);
131
134
  }
132
135
 
133
136
  aspec = PEEK_W(irep->iseq+1);
@@ -135,21 +138,23 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
135
138
  parameters_list[1].size = MRB_ASPEC_OPT(aspec);
136
139
  parameters_list[2].size = MRB_ASPEC_REST(aspec);
137
140
  parameters_list[3].size = MRB_ASPEC_POST(aspec);
138
- parameters_list[4].size = MRB_ASPEC_BLOCK(aspec);
141
+ parameters_list[4].size = MRB_ASPEC_KDICT(aspec);
142
+ parameters_list[5].size = MRB_ASPEC_BLOCK(aspec);
143
+ parameters_list[6].size = MRB_ASPEC_KEY(aspec);
139
144
 
140
145
  parameters = mrb_ary_new_capa(mrb, irep->nlocals-1);
141
146
 
142
147
  max = irep->nlocals-1;
143
148
  for (i = 0, p = parameters_list; p->name; p++) {
144
- mrb_value sname = mrb_symbol_value(mrb_intern_static(mrb, p->name, p->len));
149
+ mrb_value sname = mrb_symbol_value(p->name);
145
150
 
146
151
  for (j = 0; j < p->size; i++, j++) {
147
152
  mrb_value a;
148
153
 
149
154
  a = mrb_ary_new(mrb);
150
155
  mrb_ary_push(mrb, a, sname);
151
- if (i < max && irep->lv[i].name) {
152
- mrb_sym sym = irep->lv[i].name;
156
+ if (i < max && irep->lv[i]) {
157
+ mrb_sym sym = irep->lv[i];
153
158
  const char *name = mrb_sym_name(mrb, sym);
154
159
  switch (name[0]) {
155
160
  case '*': case '&':
@@ -159,9 +164,17 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self)
159
164
  break;
160
165
  }
161
166
  }
167
+ if (p->name == MRB_SYM(block)) {
168
+ block = a; continue;
169
+ }
170
+ if (p->name == MRB_SYM(keyrest)) {
171
+ krest = a; continue;
172
+ }
162
173
  mrb_ary_push(mrb, parameters, a);
163
174
  }
164
175
  }
176
+ if (!mrb_nil_p(krest)) mrb_ary_push(mrb, parameters, krest);
177
+ if (!mrb_nil_p(block)) mrb_ary_push(mrb, parameters, block);
165
178
  return parameters;
166
179
  }
167
180
 
@@ -35,7 +35,7 @@ static mrb_value
35
35
  cfunc_env_get(mrb_state *mrb, mrb_value self)
36
36
  {
37
37
  mrb_sym n;
38
- mrb_value *argv; mrb_int argc;
38
+ const mrb_value *argv; mrb_int argc;
39
39
  mrb_method_t m;
40
40
  struct RProc *p;
41
41
  mrb_get_args(mrb, "na", &n, &argv, &argc);
@@ -10,16 +10,41 @@
10
10
  #include <mruby/data.h>
11
11
  #include <mruby/array.h>
12
12
  #include <mruby/istruct.h>
13
- #if INT32_MAX <= INTPTR_MAX
13
+ #include <mruby/presym.h>
14
+
15
+ #include <time.h>
16
+
17
+ /* Written in 2019 by David Blackman and Sebastiano Vigna (vigna@acm.org)
18
+
19
+ To the extent possible under law, the author has dedicated all copyright
20
+ and related and neighboring rights to this software to the public domain
21
+ worldwide. This software is distributed without any warranty.
22
+
23
+ See <https://creativecommons.org/publicdomain/zero/1.0/>. */
24
+
25
+ #include <stdint.h>
26
+
27
+ /* This is xoshiro128++ 1.0, one of our 32-bit all-purpose, rock-solid
28
+ generators. It has excellent speed, a state size (128 bits) that is
29
+ large enough for mild parallelism, and it passes all tests we are aware
30
+ of.
31
+
32
+ For generating just single-precision (i.e., 32-bit) floating-point
33
+ numbers, xoshiro128+ is even faster.
34
+
35
+ The state must be seeded so that it is not everywhere zero. */
36
+
37
+
38
+ #ifdef MRB_32BIT
14
39
  # define XORSHIFT96
15
40
  # define NSEEDS 3
41
+ # define SEEDPOS 2
16
42
  #else
17
43
  # define NSEEDS 4
44
+ # define SEEDPOS 0
18
45
  #endif
19
46
  #define LASTSEED (NSEEDS-1)
20
47
 
21
- #include <time.h>
22
-
23
48
  typedef struct rand_state {
24
49
  uint32_t seed[NSEEDS];
25
50
  } rand_state;
@@ -38,16 +63,23 @@ rand_init(rand_state *t)
38
63
  static uint32_t
39
64
  rand_seed(rand_state *t, uint32_t seed)
40
65
  {
41
- uint32_t old_seed = t->seed[LASTSEED];
66
+ uint32_t old_seed = t->seed[SEEDPOS];
42
67
  rand_init(t);
43
- t->seed[LASTSEED] = seed;
68
+ t->seed[SEEDPOS] = seed;
44
69
  return old_seed;
45
70
  }
46
71
 
47
- #ifdef XORSHIFT96
72
+ #ifndef XORSHIFT96
73
+ static inline uint32_t
74
+ rotl(const uint32_t x, int k) {
75
+ return (x << k) | (x >> (32 - k));
76
+ }
77
+ #endif
78
+
48
79
  static uint32_t
49
80
  rand_uint32(rand_state *state)
50
81
  {
82
+ #ifdef XORSHIFT96
51
83
  uint32_t *seed = state->seed;
52
84
  uint32_t x = seed[0];
53
85
  uint32_t y = seed[1];
@@ -61,36 +93,29 @@ rand_uint32(rand_state *state)
61
93
  seed[2] = z;
62
94
 
63
95
  return z;
64
- }
65
- #else /* XORSHIFT96 */
66
- static uint32_t
67
- rand_uint32(rand_state *state)
68
- {
69
- uint32_t *seed = state->seed;
70
- uint32_t x = seed[0];
71
- uint32_t y = seed[1];
72
- uint32_t z = seed[2];
73
- uint32_t w = seed[3];
74
- uint32_t t;
96
+ #else
97
+ uint32_t *s = state->seed;
98
+ const uint32_t result = rotl(s[0] + s[3], 7) + s[0];
99
+ const uint32_t t = s[1] << 9;
75
100
 
76
- t = x ^ (x << 11);
77
- x = y; y = z; z = w;
78
- w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
79
- seed[0] = x;
80
- seed[1] = y;
81
- seed[2] = z;
82
- seed[3] = w;
101
+ s[2] ^= s[0];
102
+ s[3] ^= s[1];
103
+ s[1] ^= s[2];
104
+ s[0] ^= s[3];
83
105
 
84
- return w;
85
- }
106
+ s[2] ^= t;
107
+ s[3] = rotl(s[3], 11);
108
+
109
+ return result;
86
110
  #endif /* XORSHIFT96 */
111
+ }
87
112
 
88
- #ifndef MRB_WITHOUT_FLOAT
113
+ #ifndef MRB_NO_FLOAT
89
114
  static double
90
115
  rand_real(rand_state *t)
91
116
  {
92
117
  uint32_t x = rand_uint32(t);
93
- return x*(1.0/4294967295.0);
118
+ return x*(1.0/4294967296.0);
94
119
  }
95
120
  #endif
96
121
 
@@ -99,15 +124,15 @@ random_rand(mrb_state *mrb, rand_state *t, mrb_value max)
99
124
  {
100
125
  mrb_value value;
101
126
 
102
- if (mrb_fixnum(max) == 0) {
103
- #ifndef MRB_WITHOUT_FLOAT
127
+ if (mrb_integer(max) == 0) {
128
+ #ifndef MRB_NO_FLOAT
104
129
  value = mrb_float_value(mrb, rand_real(t));
105
130
  #else
106
131
  mrb_raise(mrb, E_ARGUMENT_ERROR, "Float not supported");
107
132
  #endif
108
133
  }
109
134
  else {
110
- value = mrb_fixnum_value(rand_uint32(t) % mrb_fixnum(max));
135
+ value = mrb_int_value(mrb, rand_uint32(t) % mrb_integer(max));
111
136
  }
112
137
 
113
138
  return value;
@@ -125,7 +150,7 @@ get_opt(mrb_state* mrb)
125
150
  mrb_int i;
126
151
 
127
152
  arg = mrb_to_int(mrb, arg);
128
- i = mrb_fixnum(arg);
153
+ i = mrb_integer(arg);
129
154
  if (i < 0) {
130
155
  arg = mrb_fixnum_value(0 - i);
131
156
  }
@@ -135,7 +160,7 @@ get_opt(mrb_state* mrb)
135
160
 
136
161
  static void
137
162
  random_check(mrb_state *mrb, mrb_value random) {
138
- struct RClass *c = mrb_class_get(mrb, "Random");
163
+ struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Random));
139
164
  if (!mrb_obj_is_kind_of(mrb, random, c) || !mrb_istruct_p(random)) {
140
165
  mrb_raise(mrb, E_TYPE_ERROR, "Random instance required");
141
166
  }
@@ -144,7 +169,7 @@ random_check(mrb_state *mrb, mrb_value random) {
144
169
  static mrb_value
145
170
  random_default(mrb_state *mrb) {
146
171
  struct RClass *c = mrb_class_get(mrb, "Random");
147
- mrb_value d = mrb_const_get(mrb, mrb_obj_value(c), mrb_intern_lit(mrb, "DEFAULT"));
172
+ mrb_value d = mrb_const_get(mrb, mrb_obj_value(c), MRB_SYM(DEFAULT));
148
173
  if (!mrb_obj_is_kind_of(mrb, d, c)) {
149
174
  mrb_raise(mrb, E_TYPE_ERROR, "Random::DEFAULT replaced");
150
175
  }
@@ -167,7 +192,7 @@ random_m_init(mrb_state *mrb, mrb_value self)
167
192
  rand_init(t);
168
193
  }
169
194
  else {
170
- rand_seed(t, (uint32_t)mrb_fixnum(seed));
195
+ rand_seed(t, (uint32_t)mrb_integer(seed));
171
196
  }
172
197
 
173
198
  return self;
@@ -196,11 +221,11 @@ random_m_srand(mrb_state *mrb, mrb_value self)
196
221
  seed = (uint32_t)time(NULL) + rand_uint32(t);
197
222
  }
198
223
  else {
199
- seed = (uint32_t)mrb_fixnum(sv);
224
+ seed = (uint32_t)mrb_integer(sv);
200
225
  }
201
226
  old_seed = rand_seed(t, seed);
202
227
 
203
- return mrb_fixnum_value((mrb_int)old_seed);
228
+ return mrb_int_value(mrb, (mrb_int)old_seed);
204
229
  }
205
230
 
206
231
  /*
@@ -218,6 +243,34 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
218
243
  mrb_value r = mrb_nil_value();
219
244
  rand_state *random;
220
245
 
246
+ /*
247
+ * MSC compiler bug generating invalid instructions with optimization
248
+ * enabled. MSC errantly uses a hardcoded value with optimizations on
249
+ * when using a fixed value from a union.
250
+ * Creating a temp volatile variable and reassigning back to the original
251
+ * value tricks the compiler to not perform this optimization;
252
+ */
253
+ #if defined _MSC_VER && _MSC_VER >= 1923
254
+ /* C++ will not cast away volatile easily, so we cannot do something like
255
+ * volatile mrb_value rr = r; r = (mrb_value)rr; with C++.
256
+ * That cast does work with C.
257
+ * We also have to trick the compiler to not optimize away the const_cast entirely
258
+ * by creating and manipulating an intermediate volatile pointer.
259
+ */
260
+ volatile mrb_value *v_r;
261
+ volatile mrb_int ii;
262
+ mrb_value *p_r;
263
+ v_r = &r;
264
+ ii = 2;
265
+ v_r = v_r + 2;
266
+ #if defined __cplusplus
267
+ p_r = const_cast<mrb_value*>(v_r - ii);
268
+ #else
269
+ p_r = (mrb_value*)v_r - ii;
270
+ #endif
271
+ r = *p_r;
272
+ #endif
273
+
221
274
  if (RARRAY_LEN(ary) > 1) {
222
275
  mrb_get_args(mrb, "|o", &r);
223
276
 
@@ -235,7 +288,7 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary)
235
288
  mrb_value *ptr = RARRAY_PTR(ary);
236
289
  mrb_value tmp;
237
290
 
238
- j = mrb_fixnum(random_rand(mrb, random, max));
291
+ j = mrb_integer(random_rand(mrb, random, max));
239
292
 
240
293
  tmp = ptr[i];
241
294
  ptr[i] = ptr[j];
@@ -320,16 +373,18 @@ mrb_ary_sample(mrb_state *mrb, mrb_value ary)
320
373
  r = (mrb_int)(rand_uint32(random) % len);
321
374
 
322
375
  for (j=0; j<i; j++) {
323
- if (mrb_fixnum(RARRAY_PTR(result)[j]) == r) {
376
+ if (mrb_integer(RARRAY_PTR(result)[j]) == r) {
324
377
  goto retry; /* retry if duplicate */
325
378
  }
326
379
  }
327
380
  break;
328
381
  }
329
- mrb_ary_push(mrb, result, mrb_fixnum_value(r));
382
+ mrb_ary_push(mrb, result, mrb_int_value(mrb, r));
330
383
  }
331
384
  for (i=0; i<n; i++) {
332
- mrb_ary_set(mrb, result, i, RARRAY_PTR(ary)[mrb_fixnum(RARRAY_PTR(result)[i])]);
385
+ mrb_int idx = mrb_integer(RARRAY_PTR(result)[i]);
386
+ mrb_value elem = RARRAY_PTR(ary)[idx];
387
+ mrb_ary_set(mrb, result, i, elem);
333
388
  }
334
389
  return result;
335
390
  }
@@ -355,7 +410,7 @@ void mrb_mruby_random_gem_init(mrb_state *mrb)
355
410
  struct RClass *random;
356
411
  struct RClass *array = mrb->array_class;
357
412
 
358
- mrb_assert(sizeof(rand_state) <= ISTRUCT_DATA_SIZE);
413
+ mrb_static_assert1(sizeof(rand_state) <= ISTRUCT_DATA_SIZE);
359
414
 
360
415
  mrb_define_method(mrb, mrb->kernel_module, "rand", random_f_rand, MRB_ARGS_OPT(1));
361
416
  mrb_define_method(mrb, mrb->kernel_module, "srand", random_f_srand, MRB_ARGS_OPT(1));
@@ -373,7 +428,7 @@ void mrb_mruby_random_gem_init(mrb_state *mrb)
373
428
  mrb_define_method(mrb, array, "shuffle!", mrb_ary_shuffle_bang, MRB_ARGS_OPT(1));
374
429
  mrb_define_method(mrb, array, "sample", mrb_ary_sample, MRB_ARGS_OPT(2));
375
430
 
376
- mrb_const_set(mrb, mrb_obj_value(random), mrb_intern_lit(mrb, "DEFAULT"),
431
+ mrb_const_set(mrb, mrb_obj_value(random), MRB_SYM(DEFAULT),
377
432
  mrb_obj_new(mrb, random, 0, NULL));
378
433
  }
379
434
 
@@ -32,8 +32,8 @@
32
32
  end
33
33
 
34
34
  assert("return class of Kernel.rand") do
35
- assert_kind_of(Fixnum, rand(3))
36
- assert_kind_of(Fixnum, rand(1.5))
35
+ assert_kind_of(Integer, rand(3))
36
+ assert_kind_of(Integer, rand(1.5))
37
37
  assert_kind_of(Float, rand)
38
38
  assert_kind_of(Float, rand(0.5))
39
39
  end
@@ -11,6 +11,7 @@ class Range
11
11
  # (10..20).first(3) #=> [10, 11, 12]
12
12
  #
13
13
  def first(*args)
14
+ raise RangeError, "cannot get the first element of beginless range" if self.begin.nil?
14
15
  return self.begin if args.empty?
15
16
 
16
17
  raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
@@ -26,14 +27,42 @@ def first(*args)
26
27
  ary
27
28
  end
28
29
 
30
+ ##
31
+ # call-seq:
32
+ # rng.last -> obj
33
+ # rng.last(n) -> an_array
34
+ #
35
+ # Returns the last object in the range,
36
+ # or an array of the last +n+ elements.
37
+ #
38
+ # Note that with no arguments +last+ will return the object that defines
39
+ # the end of the range even if #exclude_end? is +true+.
40
+ #
41
+ # (10..20).last #=> 20
42
+ # (10...20).last #=> 20
43
+ # (10..20).last(3) #=> [18, 19, 20]
44
+ # (10...20).last(3) #=> [17, 18, 19]
45
+ def last(*args)
46
+ raise RangeError, "cannot get the last element of endless range" if self.end.nil?
47
+ return self.end if args.empty?
48
+
49
+ raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 1)" unless args.length == 1
50
+ nv = args[0]
51
+ n = nv.__to_int
52
+ raise ArgumentError, "negative array size (or size too big)" unless 0 <= n
53
+ return self.to_a.last(nv)
54
+ end
55
+
29
56
  def max(&block)
30
- val = self.first
31
- last = self.last
57
+ val = self.begin
58
+ last = self.end
32
59
  return super if block
33
60
 
61
+ raise RangeError, "cannot get the maximum of endless range" if last.nil?
62
+
34
63
  # fast path for numerics
35
64
  if val.kind_of?(Numeric) && last.kind_of?(Numeric)
36
- raise TypeError if exclude_end? && !last.kind_of?(Fixnum)
65
+ raise TypeError if exclude_end? && !last.kind_of?(Integer)
37
66
  return nil if val > last
38
67
  return nil if val == last && exclude_end?
39
68
 
@@ -47,9 +76,13 @@ def max(&block)
47
76
  end
48
77
 
49
78
  def min(&block)
50
- val = self.first
51
- last = self.last
52
- return super if block
79
+ val = self.begin
80
+ last = self.end
81
+ if block
82
+ raise RangeError, "cannot get the minimum of endless range with custom comparison method" if last.nil?
83
+ return super
84
+ end
85
+ return val if last.nil?
53
86
 
54
87
  # fast path for numerics
55
88
  if val.kind_of?(Numeric) && last.kind_of?(Numeric)