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
@@ -3,9 +3,9 @@ mruby-pack (pack / unpack)
3
3
 
4
4
  mruby-pack provides `Array#pack` and `String#unpack` for mruby.
5
5
 
6
-
7
6
  ## Installation
8
- Add the line below into your `build_config.rb`:
7
+
8
+ Add the line below into your build configuration:
9
9
 
10
10
  ```
11
11
  conf.gem :github => 'iij/mruby-pack'
@@ -13,8 +13,8 @@ Add the line below into your `build_config.rb`:
13
13
 
14
14
  There is no dependency on other mrbgems.
15
15
 
16
-
17
16
  ## Supported template string
17
+
18
18
  - A : arbitrary binary string (space padded, count is width)
19
19
  - a : arbitrary binary string (null padded, count is width)
20
20
  - C : 8-bit unsigned (unsigned char)
@@ -44,28 +44,25 @@ There is no dependency on other mrbgems.
44
44
  - x : null byte
45
45
  - Z : same as "a", except that null is added with *
46
46
 
47
-
48
-
49
47
  ## License
50
48
 
51
49
  Copyright (c) 2012 Internet Initiative Japan Inc.
52
50
  Copyright (c) 2017 mruby developers
53
51
 
54
- Permission is hereby granted, free of charge, to any person obtaining a
55
- copy of this software and associated documentation files (the "Software"),
56
- to deal in the Software without restriction, including without limitation
57
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
58
- and/or sell copies of the Software, and to permit persons to whom the
52
+ Permission is hereby granted, free of charge, to any person obtaining a
53
+ copy of this software and associated documentation files (the "Software"),
54
+ to deal in the Software without restriction, including without limitation
55
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
56
+ and/or sell copies of the Software, and to permit persons to whom the
59
57
  Software is furnished to do so, subject to the following conditions:
60
58
 
61
- The above copyright notice and this permission notice shall be included in
59
+ The above copyright notice and this permission notice shall be included in
62
60
  all copies or substantial portions of the Software.
63
61
 
64
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
65
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
66
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
67
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
68
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
69
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
62
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
63
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
64
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
65
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
66
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
67
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
70
68
  DEALINGS IN THE SOFTWARE.
71
-
@@ -9,12 +9,15 @@
9
9
  #include "mruby/numeric.h"
10
10
  #include "mruby/string.h"
11
11
  #include "mruby/variable.h"
12
+ #include "mruby/endian.h"
12
13
 
13
14
  #include <ctype.h>
14
15
  #include <errno.h>
15
- #include <limits.h>
16
16
  #include <string.h>
17
17
 
18
+ #define INT_OVERFLOW_P(n) ((n) < MRB_INT_MIN || (n) > MRB_INT_MAX)
19
+ #define UINT_OVERFLOW_P(n) ((n) > MRB_INT_MAX)
20
+
18
21
  struct tmpl {
19
22
  mrb_value str;
20
23
  int idx;
@@ -63,36 +66,6 @@ const static unsigned char base64chars[] =
63
66
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
64
67
  static unsigned char base64_dec_tab[128];
65
68
 
66
- #if !defined(BYTE_ORDER) && defined(__BYTE_ORDER__)
67
- # define BYTE_ORDER __BYTE_ORDER__
68
- #endif
69
- #if !defined(BIG_ENDIAN) && defined(__ORDER_BIG_ENDIAN__)
70
- # define BIG_ENDIAN __ORDER_BIG_ENDIAN__
71
- #endif
72
- #if !defined(LITTLE_ENDIAN) && defined(__ORDER_LITTLE_ENDIAN__)
73
- # define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
74
- #endif
75
-
76
- #ifdef BYTE_ORDER
77
- # if BYTE_ORDER == BIG_ENDIAN
78
- # define littleendian 0
79
- # define check_little_endian() (void)0
80
- # elif BYTE_ORDER == LITTLE_ENDIAN
81
- # define littleendian 1
82
- # define check_little_endian() (void)0
83
- # endif
84
- #endif
85
- #ifndef littleendian
86
- /* can't distinguish endian in compile time */
87
- static int littleendian = 0;
88
- static void
89
- check_little_endian(void)
90
- {
91
- unsigned int n = 1;
92
- littleendian = (*(unsigned char *)&n == 1);
93
- }
94
- #endif
95
-
96
69
  static unsigned int
97
70
  hex2int(unsigned char ch)
98
71
  {
@@ -143,7 +116,7 @@ static int
143
116
  pack_c(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
144
117
  {
145
118
  str = str_len_ensure(mrb, str, sidx + 1);
146
- RSTRING_PTR(str)[sidx] = (char)mrb_fixnum(o);
119
+ RSTRING_PTR(str)[sidx] = (char)mrb_integer(o);
147
120
  return 1;
148
121
  }
149
122
 
@@ -163,7 +136,7 @@ pack_s(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
163
136
  uint16_t n;
164
137
 
165
138
  str = str_len_ensure(mrb, str, sidx + 2);
166
- n = (uint16_t)mrb_fixnum(o);
139
+ n = (uint16_t)mrb_integer(o);
167
140
  if (flags & PACK_FLAG_LITTLEENDIAN) {
168
141
  RSTRING_PTR(str)[sidx+0] = n % 256;
169
142
  RSTRING_PTR(str)[sidx+1] = n / 256;
@@ -197,7 +170,7 @@ pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
197
170
  uint32_t n;
198
171
 
199
172
  str = str_len_ensure(mrb, str, sidx + 4);
200
- n = (uint32_t)mrb_fixnum(o);
173
+ n = (uint32_t)mrb_integer(o);
201
174
  if (flags & PACK_FLAG_LITTLEENDIAN) {
202
175
  RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff);
203
176
  RSTRING_PTR(str)[sidx+1] = (char)(n >> 8);
@@ -216,7 +189,7 @@ pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
216
189
  static void
217
190
  u32tostr(char *buf, size_t len, uint32_t n)
218
191
  {
219
- #ifdef MRB_DISABLE_STDIO
192
+ #ifdef MRB_NO_STDIO
220
193
  char *bufend = buf + len;
221
194
  char *p = bufend - 1;
222
195
 
@@ -241,27 +214,7 @@ u32tostr(char *buf, size_t len, uint32_t n)
241
214
  memmove(buf, p, bufend - p);
242
215
  #else
243
216
  snprintf(buf, len, "%" PRIu32, n);
244
- #endif /* MRB_DISABLE_STDIO */
245
- }
246
-
247
- static void
248
- i32tostr(char *buf, size_t len, int32_t n)
249
- {
250
- #ifdef MRB_DISABLE_STDIO
251
- if (len < 1) {
252
- return;
253
- }
254
-
255
- if (n < 0) {
256
- *buf ++ = '-';
257
- len --;
258
- n = -n;
259
- }
260
-
261
- u32tostr(buf, len, (uint32_t)n);
262
- #else
263
- snprintf(buf, len, "%" PRId32, n);
264
- #endif /* MRB_DISABLE_STDIO */
217
+ #endif /* MRB_NO_STDIO */
265
218
  }
266
219
  #endif /* MRB_INT64 */
267
220
 
@@ -286,24 +239,17 @@ unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, un
286
239
  ul += (uint32_t)src[3];
287
240
  }
288
241
  if (flags & PACK_FLAG_SIGNED) {
289
- int32_t sl = ul;
290
- #ifndef MRB_INT64
291
- if (!FIXABLE(sl)) {
292
- i32tostr(msg, sizeof(msg), sl);
293
- mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Fixnum: %s", msg);
294
- }
295
- #endif
296
- n = sl;
242
+ n = (int32_t)ul;
297
243
  } else {
298
244
  #ifndef MRB_INT64
299
- if (!POSFIXABLE(ul)) {
245
+ if (UINT_OVERFLOW_P(ul)) {
300
246
  u32tostr(msg, sizeof(msg), ul);
301
- mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Fixnum: %s", msg);
247
+ mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Integer: %s", msg);
302
248
  }
303
249
  #endif
304
250
  n = ul;
305
251
  }
306
- mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
252
+ mrb_ary_push(mrb, ary, mrb_int_value(mrb, n));
307
253
  return 4;
308
254
  }
309
255
 
@@ -313,7 +259,7 @@ pack_q(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
313
259
  uint64_t n;
314
260
 
315
261
  str = str_len_ensure(mrb, str, sidx + 8);
316
- n = (uint64_t)mrb_fixnum(o);
262
+ n = (uint64_t)mrb_integer(o);
317
263
  if (flags & PACK_FLAG_LITTLEENDIAN) {
318
264
  RSTRING_PTR(str)[sidx+0] = (char)(n & 0xff);
319
265
  RSTRING_PTR(str)[sidx+1] = (char)(n >> 8);
@@ -339,7 +285,7 @@ pack_q(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
339
285
  static void
340
286
  u64tostr(char *buf, size_t len, uint64_t n)
341
287
  {
342
- #ifdef MRB_DISABLE_STDIO
288
+ #ifdef MRB_NO_STDIO
343
289
  char *bufend = buf + len;
344
290
  char *p = bufend - 1;
345
291
 
@@ -364,13 +310,14 @@ u64tostr(char *buf, size_t len, uint64_t n)
364
310
  memmove(buf, p, bufend - p);
365
311
  #else
366
312
  snprintf(buf, len, "%" PRIu64, n);
367
- #endif /* MRB_DISABLE_STDIO */
313
+ #endif /* MRB_NO_STDIO */
368
314
  }
369
315
 
316
+ #ifndef MRB_INT64
370
317
  static void
371
318
  i64tostr(char *buf, size_t len, int64_t n)
372
319
  {
373
- #ifdef MRB_DISABLE_STDIO
320
+ #ifdef MRB_NO_STDIO
374
321
  if (len < 1) {
375
322
  return;
376
323
  }
@@ -384,8 +331,9 @@ i64tostr(char *buf, size_t len, int64_t n)
384
331
  u64tostr(buf, len, (uint64_t)n);
385
332
  #else
386
333
  snprintf(buf, len, "%" PRId64, n);
387
- #endif /* MRB_DISABLE_STDIO */
334
+ #endif /* MRB_NO_STDIO */
388
335
  }
336
+ #endif /* MRB_INT64 */
389
337
 
390
338
  static int
391
339
  unpack_q(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
@@ -409,23 +357,25 @@ unpack_q(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, un
409
357
  }
410
358
  if (flags & PACK_FLAG_SIGNED) {
411
359
  int64_t sll = ull;
412
- if (!FIXABLE(sll)) {
360
+ #ifndef MRB_INT64
361
+ if (INT_OVERFLOW_P(sll)) {
413
362
  i64tostr(msg, sizeof(msg), sll);
414
- mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Fixnum: %s", msg);
363
+ mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Integer: %s", msg);
415
364
  }
416
- n = sll;
365
+ #endif
366
+ n = (mrb_int)sll;
417
367
  } else {
418
- if (!POSFIXABLE(ull)) {
368
+ if (UINT_OVERFLOW_P(ull)) {
419
369
  u64tostr(msg, sizeof(msg), ull);
420
- mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Fixnum: %s", msg);
370
+ mrb_raisef(mrb, E_RANGE_ERROR, "cannot unpack to Integer: %s", msg);
421
371
  }
422
- n = ull;
372
+ n = (mrb_int)ull;
423
373
  }
424
- mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
374
+ mrb_ary_push(mrb, ary, mrb_int_value(mrb, n));
425
375
  return 8;
426
376
  }
427
377
 
428
- #ifndef MRB_WITHOUT_FLOAT
378
+ #ifndef MRB_NO_FLOAT
429
379
  static int
430
380
  pack_double(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int flags)
431
381
  {
@@ -560,7 +510,7 @@ pack_utf8(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, long count,
560
510
  int len = 0;
561
511
  uint32_t c = 0;
562
512
 
563
- c = (uint32_t)mrb_fixnum(o);
513
+ c = (uint32_t)mrb_integer(o);
564
514
 
565
515
  /* Unicode character */
566
516
  /* from mruby-compiler gem */
@@ -828,7 +778,7 @@ unpack_h(mrb_state *mrb, const void *src, int slen, mrb_value ary, int count, un
828
778
  }
829
779
  }
830
780
 
831
- dst = mrb_str_resize(mrb, dst, dptr - dptr0);
781
+ dst = mrb_str_resize(mrb, dst, (mrb_int)(dptr - dptr0));
832
782
  mrb_ary_push(mrb, ary, dst);
833
783
  return (int)(sptr - sptr0);
834
784
  }
@@ -951,7 +901,7 @@ unpack_m(mrb_state *mrb, const void *src, int slen, mrb_value ary, unsigned int
951
901
  }
952
902
 
953
903
  done:
954
- dst = mrb_str_resize(mrb, dst, dptr - dptr0);
904
+ dst = mrb_str_resize(mrb, dst, (mrb_int)(dptr - dptr0));
955
905
  mrb_ary_push(mrb, ary, dst);
956
906
  return (int)(sptr - sptr0);
957
907
  }
@@ -1248,7 +1198,7 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary)
1248
1198
  if (type == PACK_TYPE_INTEGER) {
1249
1199
  o = mrb_to_int(mrb, o);
1250
1200
  }
1251
- #ifndef MRB_WITHOUT_FLOAT
1201
+ #ifndef MRB_NO_FLOAT
1252
1202
  else if (type == PACK_TYPE_FLOAT) {
1253
1203
  if (!mrb_float_p(o)) {
1254
1204
  mrb_float f = mrb_to_flo(mrb, o);
@@ -1284,7 +1234,7 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary)
1284
1234
  case PACK_DIR_STR:
1285
1235
  ridx += pack_a(mrb, o, result, ridx, count, flags);
1286
1236
  break;
1287
- #ifndef MRB_WITHOUT_FLOAT
1237
+ #ifndef MRB_NO_FLOAT
1288
1238
  case PACK_DIR_DOUBLE:
1289
1239
  ridx += pack_double(mrb, o, result, ridx, flags);
1290
1240
  break;
@@ -1298,7 +1248,8 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary)
1298
1248
  default:
1299
1249
  break;
1300
1250
  }
1301
- if (dir == PACK_DIR_STR || dir == PACK_DIR_BASE64) { /* always consumes 1 entry */
1251
+ if (dir == PACK_DIR_STR || dir == PACK_DIR_BASE64 || dir == PACK_DIR_HEX) {
1252
+ /* always consumes 1 entry */
1302
1253
  aidx++;
1303
1254
  break;
1304
1255
  }
@@ -1380,7 +1331,7 @@ pack_unpack(mrb_state *mrb, mrb_value str, int single)
1380
1331
  case PACK_DIR_QUAD:
1381
1332
  srcidx += unpack_q(mrb, sptr, srclen - srcidx, result, flags);
1382
1333
  break;
1383
- #ifndef MRB_WITHOUT_FLOAT
1334
+ #ifndef MRB_NO_FLOAT
1384
1335
  case PACK_DIR_FLOAT:
1385
1336
  srcidx += unpack_float(mrb, sptr, srclen - srcidx, result, flags);
1386
1337
  break;
@@ -1425,7 +1376,6 @@ mrb_pack_unpack1(mrb_state *mrb, mrb_value str)
1425
1376
  void
1426
1377
  mrb_mruby_pack_gem_init(mrb_state *mrb)
1427
1378
  {
1428
- check_little_endian();
1429
1379
  make_base64_dec_tab();
1430
1380
 
1431
1381
  mrb_define_method(mrb, mrb->array_class, "pack", mrb_pack_pack, MRB_ARGS_REQ(1));
@@ -3,39 +3,10 @@
3
3
  #
4
4
  # ISO 15.3.1
5
5
  module Kernel
6
- ##
7
- # Invoke method +print+ on STDOUT and passing +*args+
8
- #
9
- # ISO 15.3.1.2.10
10
- def print(*args)
11
- i = 0
12
- len = args.size
13
- while i < len
14
- __printstr__ args[i].to_s
15
- i += 1
16
- end
17
- end
18
-
19
- ##
20
- # Invoke method +puts+ on STDOUT and passing +*args*+
21
- #
22
- # ISO 15.3.1.2.11
23
- def puts(*args)
24
- i = 0
25
- len = args.size
26
- while i < len
27
- s = args[i].to_s
28
- __printstr__ s
29
- __printstr__ "\n" if (s[-1] != "\n")
30
- i += 1
31
- end
32
- __printstr__ "\n" if len == 0
33
- nil
34
- end
35
-
36
6
  ##
37
7
  # Print human readable object description
38
8
  #
9
+ # ISO 15.3.1.2.9
39
10
  # ISO 15.3.1.3.34
40
11
  def p(*args)
41
12
  i = 0
@@ -1,7 +1,7 @@
1
1
  #include <mruby.h>
2
2
 
3
- #ifdef MRB_DISABLE_STDIO
4
- # error print conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
3
+ #ifdef MRB_NO_STDIO
4
+ # error print conflicts 'MRB_NO_STDIO' in your build configuration
5
5
  #endif
6
6
 
7
7
  #include <mruby/string.h>
@@ -17,39 +17,73 @@
17
17
  #endif
18
18
 
19
19
  static void
20
- printstr(mrb_state *mrb, mrb_value obj)
20
+ printstr(mrb_state *mrb, const char *p, mrb_int len)
21
21
  {
22
- if (mrb_string_p(obj)) {
23
22
  #if defined(_WIN32)
24
- if (isatty(fileno(stdout))) {
25
- DWORD written;
26
- int mlen = (int)RSTRING_LEN(obj);
27
- char* utf8 = RSTRING_PTR(obj);
28
- int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, NULL, 0);
29
- wchar_t* utf16 = (wchar_t*)mrb_malloc(mrb, (wlen+1) * sizeof(wchar_t));
30
- if (MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, utf16, wlen) > 0) {
31
- utf16[wlen] = 0;
32
- WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
33
- utf16, wlen, &written, NULL);
34
- }
35
- mrb_free(mrb, utf16);
36
- } else
23
+ if (isatty(fileno(stdout))) {
24
+ DWORD written;
25
+ int wlen = MultiByteToWideChar(CP_UTF8, 0, p, (int)len, NULL, 0);
26
+ wchar_t* utf16 = (wchar_t*)mrb_malloc(mrb, (wlen+1) * sizeof(wchar_t));
27
+ if (MultiByteToWideChar(CP_UTF8, 0, p, (int)len, utf16, wlen) > 0) {
28
+ utf16[wlen] = 0;
29
+ WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
30
+ utf16, (DWORD)wlen, &written, NULL);
31
+ }
32
+ mrb_free(mrb, utf16);
33
+ } else
37
34
  #endif
38
- fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
39
- fflush(stdout);
40
- }
35
+ fwrite(p, (size_t)len, 1, stdout);
36
+ fflush(stdout);
41
37
  }
42
38
 
43
- /* 15.3.1.2.9 */
44
- /* 15.3.1.3.34 */
45
- mrb_value
39
+ static mrb_value
46
40
  mrb_printstr(mrb_state *mrb, mrb_value self)
47
41
  {
48
- mrb_value argv = mrb_get_arg1(mrb);
42
+ mrb_value s = mrb_get_arg1(mrb);
43
+
44
+ if (mrb_string_p(s)) {
45
+ printstr(mrb, RSTRING_PTR(s), RSTRING_LEN(s));
46
+ }
47
+ return s;
48
+ }
49
+
50
+ /* 15.3.1.2.10 */
51
+ /* 15.3.1.3.35 */
52
+ static mrb_value
53
+ mrb_print(mrb_state *mrb, mrb_value self)
54
+ {
55
+ mrb_int argc, i;
56
+ const mrb_value *argv;
49
57
 
50
- printstr(mrb, argv);
58
+ mrb_get_args(mrb, "*", &argv, &argc);
59
+ for (i=0; i<argc; i++) {
60
+ mrb_value s = mrb_obj_as_string(mrb, argv[i]);
61
+ printstr(mrb, RSTRING_PTR(s), RSTRING_LEN(s));
62
+ }
63
+ return mrb_nil_value();
64
+ }
65
+
66
+ /* 15.3.1.2.11 */
67
+ /* 15.3.1.3.39 */
68
+ static mrb_value
69
+ mrb_puts(mrb_state *mrb, mrb_value self)
70
+ {
71
+ mrb_int argc, i;
72
+ const mrb_value *argv;
51
73
 
52
- return argv;
74
+ mrb_get_args(mrb, "*", &argv, &argc);
75
+ for (i=0; i<argc; i++) {
76
+ mrb_value s = mrb_obj_as_string(mrb, argv[i]);
77
+ mrb_int len = RSTRING_LEN(s);
78
+ printstr(mrb, RSTRING_PTR(s), len);
79
+ if (len == 0 || RSTRING_PTR(s)[len-1] != '\n') {
80
+ printstr(mrb, "\n", 1);
81
+ }
82
+ }
83
+ if (argc == 0) {
84
+ printstr(mrb, "\n", 1);
85
+ }
86
+ return mrb_nil_value();
53
87
  }
54
88
 
55
89
  void
@@ -58,6 +92,8 @@ mrb_mruby_print_gem_init(mrb_state* mrb)
58
92
  struct RClass *krn;
59
93
  krn = mrb->kernel_module;
60
94
  mrb_define_method(mrb, krn, "__printstr__", mrb_printstr, MRB_ARGS_REQ(1));
95
+ mrb_define_method(mrb, krn, "print", mrb_print, MRB_ARGS_ANY());
96
+ mrb_define_method(mrb, krn, "puts", mrb_puts, MRB_ARGS_ANY());
61
97
  }
62
98
 
63
99
  void