ruby2d 0.11.2 → 0.12.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 (231) hide show
  1. checksums.yaml +4 -4
  2. data/assets/include/GLES2/gl2.h +656 -0
  3. data/assets/include/GLES2/gl2ext.h +3949 -0
  4. data/assets/include/GLES2/gl2ext_angle.h +701 -0
  5. data/assets/include/GLES2/gl2platform.h +27 -0
  6. data/assets/include/GLES3/gl3.h +1192 -0
  7. data/assets/include/GLES3/gl31.h +1507 -0
  8. data/assets/include/GLES3/gl32.h +1808 -0
  9. data/assets/include/GLES3/gl3platform.h +27 -0
  10. data/assets/include/KHR/khrplatform.h +290 -0
  11. data/assets/include/SDL2/SDL.h +1 -0
  12. data/assets/include/SDL2/SDL_assert.h +4 -2
  13. data/assets/include/SDL2/SDL_atomic.h +20 -0
  14. data/assets/include/SDL2/SDL_audio.h +40 -4
  15. data/assets/include/SDL2/SDL_blendmode.h +4 -6
  16. data/assets/include/SDL2/SDL_clipboard.h +47 -0
  17. data/assets/include/SDL2/SDL_config.h +6 -2
  18. data/assets/include/SDL2/SDL_config_android.h +2 -0
  19. data/assets/include/SDL2/SDL_config_emscripten.h +2 -0
  20. data/assets/include/SDL2/SDL_config_iphoneos.h +3 -1
  21. data/assets/include/SDL2/SDL_config_macosx.h +3 -6
  22. data/assets/include/SDL2/SDL_config_minimal.h +18 -11
  23. data/assets/include/SDL2/SDL_config_ngage.h +89 -0
  24. data/assets/include/SDL2/SDL_config_os2.h +5 -3
  25. data/assets/include/SDL2/SDL_config_pandora.h +1 -0
  26. data/assets/include/SDL2/SDL_config_windows.h +71 -45
  27. data/assets/include/SDL2/SDL_config_wingdk.h +253 -0
  28. data/assets/include/SDL2/SDL_config_winrt.h +11 -49
  29. data/assets/include/SDL2/SDL_config_xbox.h +235 -0
  30. data/assets/include/SDL2/SDL_cpuinfo.h +39 -4
  31. data/assets/include/SDL2/SDL_egl.h +59 -9
  32. data/assets/include/SDL2/SDL_endian.h +34 -3
  33. data/assets/include/SDL2/SDL_events.h +32 -1
  34. data/assets/include/SDL2/SDL_filesystem.h +5 -1
  35. data/assets/include/SDL2/SDL_gamecontroller.h +78 -5
  36. data/assets/include/SDL2/SDL_guid.h +100 -0
  37. data/assets/include/SDL2/SDL_hints.h +645 -43
  38. data/assets/include/SDL2/SDL_image.h +2045 -33
  39. data/assets/include/SDL2/SDL_joystick.h +127 -7
  40. data/assets/include/SDL2/SDL_keyboard.h +38 -1
  41. data/assets/include/SDL2/SDL_keycode.h +6 -1
  42. data/assets/include/SDL2/SDL_log.h +2 -2
  43. data/assets/include/SDL2/SDL_main.h +42 -2
  44. data/assets/include/SDL2/SDL_metal.h +2 -1
  45. data/assets/include/SDL2/SDL_mixer.h +2529 -396
  46. data/assets/include/SDL2/SDL_mouse.h +12 -1
  47. data/assets/include/SDL2/SDL_opengl.h +0 -51
  48. data/assets/include/SDL2/SDL_opengl_glext.h +2260 -231
  49. data/assets/include/SDL2/SDL_opengles2_gl2.h +374 -339
  50. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +3479 -1496
  51. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +6 -9
  52. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +43 -14
  53. data/assets/include/SDL2/SDL_platform.h +32 -6
  54. data/assets/include/SDL2/SDL_rect.h +154 -2
  55. data/assets/include/SDL2/SDL_render.h +46 -17
  56. data/assets/include/SDL2/SDL_revision.h +4 -0
  57. data/assets/include/SDL2/SDL_rwops.h +1 -15
  58. data/assets/include/SDL2/SDL_scancode.h +46 -21
  59. data/assets/include/SDL2/SDL_sensor.h +24 -3
  60. data/assets/include/SDL2/SDL_stdinc.h +119 -8
  61. data/assets/include/SDL2/SDL_surface.h +3 -1
  62. data/assets/include/SDL2/SDL_system.h +66 -6
  63. data/assets/include/SDL2/SDL_syswm.h +2 -0
  64. data/assets/include/SDL2/SDL_test_common.h +1 -0
  65. data/assets/include/SDL2/SDL_test_font.h +90 -3
  66. data/assets/include/SDL2/SDL_thread.h +3 -3
  67. data/assets/include/SDL2/SDL_touch.h +8 -0
  68. data/assets/include/SDL2/SDL_ttf.h +2084 -155
  69. data/assets/include/SDL2/SDL_version.h +19 -3
  70. data/assets/include/SDL2/SDL_video.h +71 -9
  71. data/assets/include/SDL2/begin_code.h +4 -4
  72. data/assets/include/mrbconf.h +15 -17
  73. data/assets/include/mruby/array.h +8 -21
  74. data/assets/include/mruby/boxing_nan.h +115 -86
  75. data/assets/include/mruby/boxing_word.h +104 -78
  76. data/assets/include/mruby/common.h +6 -0
  77. data/assets/include/mruby/compile.h +3 -4
  78. data/assets/include/mruby/debug.h +4 -2
  79. data/assets/include/mruby/dump.h +5 -2
  80. data/assets/include/mruby/error.h +12 -2
  81. data/assets/include/mruby/gc.h +2 -0
  82. data/assets/include/mruby/hash.h +1 -3
  83. data/assets/include/mruby/irep.h +4 -4
  84. data/assets/include/mruby/numeric.h +21 -13
  85. data/assets/include/mruby/opcode.h +30 -0
  86. data/assets/include/mruby/ops.h +99 -101
  87. data/assets/include/mruby/presym/scanning.h +15 -9
  88. data/assets/include/mruby/proc.h +4 -2
  89. data/assets/include/mruby/string.h +3 -24
  90. data/assets/include/mruby/value.h +80 -40
  91. data/assets/include/mruby/variable.h +0 -15
  92. data/assets/include/mruby/version.h +5 -5
  93. data/assets/include/mruby.h +86 -16
  94. data/assets/macos/universal/bin/mrbc +0 -0
  95. data/assets/macos/universal/lib/libFLAC.a +0 -0
  96. data/assets/macos/universal/lib/libSDL2.a +0 -0
  97. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  98. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  99. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  100. data/assets/macos/universal/lib/libavif.a +0 -0
  101. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  102. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  103. data/assets/macos/universal/lib/libfreetype.a +0 -0
  104. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  105. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  106. data/assets/macos/universal/lib/libhwy.a +0 -0
  107. data/assets/macos/universal/lib/libjpeg.a +0 -0
  108. data/assets/macos/universal/lib/libjxl.a +0 -0
  109. data/assets/macos/universal/lib/libmodplug.a +0 -0
  110. data/assets/macos/universal/lib/libmpg123.a +0 -0
  111. data/assets/macos/universal/lib/libmruby.a +0 -0
  112. data/assets/macos/universal/lib/libogg.a +0 -0
  113. data/assets/macos/universal/lib/libpng.a +0 -0
  114. data/assets/macos/universal/lib/libtiff.a +0 -0
  115. data/assets/macos/universal/lib/libvorbis.a +0 -0
  116. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  117. data/assets/macos/universal/lib/libwebp.a +0 -0
  118. data/assets/macos/universal/lib/libzstd.a +0 -0
  119. data/assets/wasm/libmruby.a +0 -0
  120. data/assets/wasm/template.html +52 -4
  121. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  122. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  123. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  124. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  125. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  126. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  127. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  128. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  129. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  130. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  131. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  132. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  133. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  134. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  135. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  136. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  137. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  138. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  139. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  140. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  141. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  142. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  143. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  144. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  145. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  146. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  147. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  148. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  149. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +1 -0
  150. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  151. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  152. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  153. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  154. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  155. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  156. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  157. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  158. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  159. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  160. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  161. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  162. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  163. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  164. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  165. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  166. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  167. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  168. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  169. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  170. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  171. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  172. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  173. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  174. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  175. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  176. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  177. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  178. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  179. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -0
  180. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  181. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  182. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  183. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  184. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  185. data/ext/ruby2d/canvas.c +540 -0
  186. data/ext/ruby2d/extconf.rb +39 -21
  187. data/ext/ruby2d/gl.c +3 -3
  188. data/ext/ruby2d/image.c +7 -7
  189. data/ext/ruby2d/ruby2d.c +741 -24
  190. data/ext/ruby2d/ruby2d.h +66 -3
  191. data/ext/ruby2d/sound.c +16 -2
  192. data/lib/ruby2d/canvas.rb +315 -0
  193. data/lib/ruby2d/circle.rb +30 -15
  194. data/lib/ruby2d/cli/build.rb +11 -4
  195. data/lib/ruby2d/cli/enable_console.rb +3 -1
  196. data/lib/ruby2d/color.rb +133 -77
  197. data/lib/ruby2d/core.rb +32 -0
  198. data/lib/ruby2d/dsl.rb +38 -32
  199. data/lib/ruby2d/exceptions.rb +2 -1
  200. data/lib/ruby2d/font.rb +97 -62
  201. data/lib/ruby2d/image.rb +48 -27
  202. data/lib/ruby2d/line.rb +84 -45
  203. data/lib/ruby2d/music.rb +33 -23
  204. data/lib/ruby2d/pixel.rb +10 -9
  205. data/lib/ruby2d/pixmap.rb +39 -0
  206. data/lib/ruby2d/pixmap_atlas.rb +56 -0
  207. data/lib/ruby2d/quad.rb +98 -49
  208. data/lib/ruby2d/rectangle.rb +35 -36
  209. data/lib/ruby2d/renderable.rb +7 -6
  210. data/lib/ruby2d/sound.rb +23 -17
  211. data/lib/ruby2d/sprite.rb +181 -140
  212. data/lib/ruby2d/square.rb +21 -20
  213. data/lib/ruby2d/text.rb +47 -19
  214. data/lib/ruby2d/texture.rb +13 -3
  215. data/lib/ruby2d/tileset.rb +97 -44
  216. data/lib/ruby2d/triangle.rb +91 -42
  217. data/lib/ruby2d/version.rb +3 -1
  218. data/lib/ruby2d/vertices.rb +81 -45
  219. data/lib/ruby2d/window.rb +508 -371
  220. data/lib/ruby2d.rb +11 -29
  221. metadata +84 -16
  222. data/assets/include/SDL2/SDL_config_psp.h +0 -165
  223. data/assets/include/SDL2/SDL_config_wiz.h +0 -154
  224. data/assets/include/glew.h +0 -23686
  225. data/assets/macos/universal/lib/libpng16.a +0 -0
  226. data/assets/wasm/build_config.rb +0 -13
  227. data/assets/windows/glew/README.md +0 -10
  228. data/assets/windows/glew/glew.h +0 -23686
  229. data/assets/windows/glew/libglew32.a +0 -0
  230. data/assets/windows/mingw-w64-x86_64/lib/libpng16.a +0 -0
  231. data/lib/ruby2d/entity.rb +0 -17
@@ -13,110 +13,108 @@
13
13
  operation code operands semantics
14
14
  ------------------------------------------------------------------------*/
15
15
  OPCODE(NOP, Z) /* no operation */
16
- OPCODE(MOVE, BB) /* R(a) = R(b) */
17
- OPCODE(LOADL, BB) /* R(a) = Pool(b) */
18
- OPCODE(LOADL16, BS) /* R(a) = Pool(b) */
19
- OPCODE(LOADI, BB) /* R(a) = mrb_int(b) */
20
- OPCODE(LOADINEG, BB) /* R(a) = mrb_int(-b) */
21
- OPCODE(LOADI__1, B) /* R(a) = mrb_int(-1) */
22
- OPCODE(LOADI_0, B) /* R(a) = mrb_int(0) */
23
- OPCODE(LOADI_1, B) /* R(a) = mrb_int(1) */
24
- OPCODE(LOADI_2, B) /* R(a) = mrb_int(2) */
25
- OPCODE(LOADI_3, B) /* R(a) = mrb_int(3) */
26
- OPCODE(LOADI_4, B) /* R(a) = mrb_int(4) */
27
- OPCODE(LOADI_5, B) /* R(a) = mrb_int(5) */
28
- OPCODE(LOADI_6, B) /* R(a) = mrb_int(6) */
29
- OPCODE(LOADI_7, B) /* R(a) = mrb_int(7) */
30
- OPCODE(LOADI16, BS) /* R(a) = mrb_int(b) */
31
- OPCODE(LOADI32, BSS) /* R(a) = mrb_int((b<<16)+c) */
32
- OPCODE(LOADSYM, BB) /* R(a) = Syms(b) */
33
- OPCODE(LOADSYM16, BS) /* R(a) = Syms(b) */
34
- OPCODE(LOADNIL, B) /* R(a) = nil */
35
- OPCODE(LOADSELF, B) /* R(a) = self */
36
- OPCODE(LOADT, B) /* R(a) = true */
37
- OPCODE(LOADF, B) /* R(a) = false */
38
- OPCODE(GETGV, BB) /* R(a) = getglobal(Syms(b)) */
39
- OPCODE(SETGV, BB) /* setglobal(Syms(b), R(a)) */
40
- OPCODE(GETSV, BB) /* R(a) = Special[Syms(b)] */
41
- OPCODE(SETSV, BB) /* Special[Syms(b)] = R(a) */
42
- OPCODE(GETIV, BB) /* R(a) = ivget(Syms(b)) */
43
- OPCODE(SETIV, BB) /* ivset(Syms(b),R(a)) */
44
- OPCODE(GETCV, BB) /* R(a) = cvget(Syms(b)) */
45
- OPCODE(SETCV, BB) /* cvset(Syms(b),R(a)) */
46
- OPCODE(GETCONST, BB) /* R(a) = constget(Syms(b)) */
47
- OPCODE(SETCONST, BB) /* constset(Syms(b),R(a)) */
48
- OPCODE(GETMCNST, BB) /* R(a) = R(a)::Syms(b) */
49
- OPCODE(SETMCNST, BB) /* R(a+1)::Syms(b) = R(a) */
50
- OPCODE(GETUPVAR, BBB) /* R(a) = uvget(b,c) */
51
- OPCODE(SETUPVAR, BBB) /* uvset(b,c,R(a)) */
16
+ OPCODE(MOVE, BB) /* R[a] = R[b] */
17
+ OPCODE(LOADL, BB) /* R[a] = Pool[b] */
18
+ OPCODE(LOADI, BB) /* R[a] = mrb_int(b) */
19
+ OPCODE(LOADINEG, BB) /* R[a] = mrb_int(-b) */
20
+ OPCODE(LOADI__1, B) /* R[a] = mrb_int(-1) */
21
+ OPCODE(LOADI_0, B) /* R[a] = mrb_int(0) */
22
+ OPCODE(LOADI_1, B) /* R[a] = mrb_int(1) */
23
+ OPCODE(LOADI_2, B) /* R[a] = mrb_int(2) */
24
+ OPCODE(LOADI_3, B) /* R[a] = mrb_int(3) */
25
+ OPCODE(LOADI_4, B) /* R[a] = mrb_int(4) */
26
+ OPCODE(LOADI_5, B) /* R[a] = mrb_int(5) */
27
+ OPCODE(LOADI_6, B) /* R[a] = mrb_int(6) */
28
+ OPCODE(LOADI_7, B) /* R[a] = mrb_int(7) */
29
+ OPCODE(LOADI16, BS) /* R[a] = mrb_int(b) */
30
+ OPCODE(LOADI32, BSS) /* R[a] = mrb_int((b<<16)+c) */
31
+ OPCODE(LOADSYM, BB) /* R[a] = Syms[b] */
32
+ OPCODE(LOADNIL, B) /* R[a] = nil */
33
+ OPCODE(LOADSELF, B) /* R[a] = self */
34
+ OPCODE(LOADT, B) /* R[a] = true */
35
+ OPCODE(LOADF, B) /* R[a] = false */
36
+ OPCODE(GETGV, BB) /* R[a] = getglobal(Syms[b]) */
37
+ OPCODE(SETGV, BB) /* setglobal(Syms[b], R[a]) */
38
+ OPCODE(GETSV, BB) /* R[a] = Special[Syms[b]] */
39
+ OPCODE(SETSV, BB) /* Special[Syms[b]] = R[a] */
40
+ OPCODE(GETIV, BB) /* R[a] = ivget(Syms[b]) */
41
+ OPCODE(SETIV, BB) /* ivset(Syms[b],R[a]) */
42
+ OPCODE(GETCV, BB) /* R[a] = cvget(Syms[b]) */
43
+ OPCODE(SETCV, BB) /* cvset(Syms[b],R[a]) */
44
+ OPCODE(GETCONST, BB) /* R[a] = constget(Syms[b]) */
45
+ OPCODE(SETCONST, BB) /* constset(Syms[b],R[a]) */
46
+ OPCODE(GETMCNST, BB) /* R[a] = R[a]::Syms[b] */
47
+ OPCODE(SETMCNST, BB) /* R[a+1]::Syms[b] = R[a] */
48
+ OPCODE(GETUPVAR, BBB) /* R[a] = uvget(b,c) */
49
+ OPCODE(SETUPVAR, BBB) /* uvset(b,c,R[a]) */
50
+ OPCODE(GETIDX, B) /* R[a] = R[a][R[a+1]] */
51
+ OPCODE(SETIDX, B) /* R[a][R[a+1]] = R[a+2] */
52
52
  OPCODE(JMP, S) /* pc+=a */
53
- OPCODE(JMPIF, BS) /* if R(a) pc+=b */
54
- OPCODE(JMPNOT, BS) /* if !R(a) pc+=b */
55
- OPCODE(JMPNIL, BS) /* if R(a)==nil pc+=b */
53
+ OPCODE(JMPIF, BS) /* if R[a] pc+=b */
54
+ OPCODE(JMPNOT, BS) /* if !R[a] pc+=b */
55
+ OPCODE(JMPNIL, BS) /* if R[a]==nil pc+=b */
56
56
  OPCODE(JMPUW, S) /* unwind_and_jump_to(a) */
57
- OPCODE(EXCEPT, B) /* R(a) = exc */
58
- OPCODE(RESCUE, BB) /* R(b) = R(a).isa?(R(b)) */
59
- OPCODE(RAISEIF, B) /* raise(R(a)) if R(a) */
60
- OPCODE(SENDV, BB) /* R(a) = call(R(a),Syms(b),*R(a+1)) */
61
- OPCODE(SENDVB, BB) /* R(a) = call(R(a),Syms(b),*R(a+1),&R(a+2)) */
62
- OPCODE(SEND, BBB) /* R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c)) */
63
- OPCODE(SENDB, BBB) /* R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c),&R(a+c+1)) */
64
- OPCODE(SENDVK, BB) /* R(a) = call(R(a),Syms(b),*R(a+1),**(a+2),&R(a+3)) # todo */
65
- OPCODE(CALL, Z) /* R(0) = self.call(frame.argc, frame.argv) */
66
- OPCODE(SUPER, BB) /* R(a) = super(R(a+1),... ,R(a+b+1)) */
67
- OPCODE(ARGARY, BS) /* R(a) = argument array (16=m5:r1:m5:d1:lv4) */
57
+ OPCODE(EXCEPT, B) /* R[a] = exc */
58
+ OPCODE(RESCUE, BB) /* R[b] = R[a].isa?(R[b]) */
59
+ OPCODE(RAISEIF, B) /* raise(R[a]) if R[a] */
60
+ OPCODE(SSEND, BBB) /* R[a] = self.send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..) (c=n|k<<4) */
61
+ OPCODE(SSENDB, BBB) /* R[a] = self.send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..,&R[a+n+2k+1]) */
62
+ OPCODE(SEND, BBB) /* R[a] = R[a].send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..) (c=n|k<<4) */
63
+ OPCODE(SENDB, BBB) /* R[a] = R[a].send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..,&R[a+n+2k+1]) */
64
+ OPCODE(CALL, Z) /* R[0] = self.call(frame.argc, frame.argv) */
65
+ OPCODE(SUPER, BB) /* R[a] = super(R[a+1],... ,R[a+b+1]) */
66
+ OPCODE(ARGARY, BS) /* R[a] = argument array (16=m5:r1:m5:d1:lv4) */
68
67
  OPCODE(ENTER, W) /* arg setup according to flags (23=m5:o5:r1:m5:k5:d1:b1) */
69
- OPCODE(KEY_P, BB) /* R(a) = kdict.key?(Syms(b)) */
68
+ OPCODE(KEY_P, BB) /* R[a] = kdict.key?(Syms[b]) */
70
69
  OPCODE(KEYEND, Z) /* raise unless kdict.empty? */
71
- OPCODE(KARG, BB) /* R(a) = kdict[Syms(b)]; kdict.delete(Syms(b)) */
72
- OPCODE(RETURN, B) /* return R(a) (normal) */
73
- OPCODE(RETURN_BLK, B) /* return R(a) (in-block return) */
74
- OPCODE(BREAK, B) /* break R(a) */
75
- OPCODE(BLKPUSH, BS) /* R(a) = block (16=m5:r1:m5:d1:lv4) */
76
- OPCODE(ADD, B) /* R(a) = R(a)+R(a+1) */
77
- OPCODE(ADDI, BB) /* R(a) = R(a)+mrb_int(b) */
78
- OPCODE(SUB, B) /* R(a) = R(a)-R(a+1) */
79
- OPCODE(SUBI, BB) /* R(a) = R(a)-mrb_int(b) */
80
- OPCODE(MUL, B) /* R(a) = R(a)*R(a+1) */
81
- OPCODE(DIV, B) /* R(a) = R(a)/R(a+1) */
82
- OPCODE(EQ, B) /* R(a) = R(a)==R(a+1) */
83
- OPCODE(LT, B) /* R(a) = R(a)<R(a+1) */
84
- OPCODE(LE, B) /* R(a) = R(a)<=R(a+1) */
85
- OPCODE(GT, B) /* R(a) = R(a)>R(a+1) */
86
- OPCODE(GE, B) /* R(a) = R(a)>=R(a+1) */
87
- OPCODE(ARRAY, BB) /* R(a) = ary_new(R(a),R(a+1)..R(a+b)) */
88
- OPCODE(ARRAY2, BBB) /* R(a) = ary_new(R(b),R(b+1)..R(b+c)) */
89
- OPCODE(ARYCAT, B) /* ary_cat(R(a),R(a+1)) */
90
- OPCODE(ARYPUSH, B) /* ary_push(R(a),R(a+1)) */
91
- OPCODE(ARYDUP, B) /* R(a) = ary_dup(R(a)) */
92
- OPCODE(AREF, BBB) /* R(a) = R(b)[c] */
93
- OPCODE(ASET, BBB) /* R(a)[c] = R(b) */
94
- OPCODE(APOST, BBB) /* *R(a),R(a+1)..R(a+c) = R(a)[b..] */
95
- OPCODE(INTERN, B) /* R(a) = intern(R(a)) */
96
- OPCODE(STRING, BB) /* R(a) = str_dup(Lit(b)) */
97
- OPCODE(STRING16, BS) /* R(a) = str_dup(Lit(b)) */
98
- OPCODE(STRCAT, B) /* str_cat(R(a),R(a+1)) */
99
- OPCODE(HASH, BB) /* R(a) = hash_new(R(a),R(a+1)..R(a+b*2-1)) */
100
- OPCODE(HASHADD, BB) /* R(a) = hash_push(R(a),R(a+1)..R(a+b*2)) */
101
- OPCODE(HASHCAT, B) /* R(a) = hash_cat(R(a),R(a+1)) */
102
- OPCODE(LAMBDA, BB) /* R(a) = lambda(SEQ[b],L_LAMBDA) */
103
- OPCODE(LAMBDA16, BS) /* R(a) = lambda(SEQ[b],L_LAMBDA) */
104
- OPCODE(BLOCK, BB) /* R(a) = lambda(SEQ[b],L_BLOCK) */
105
- OPCODE(BLOCK16, BS) /* R(a) = lambda(SEQ[b],L_BLOCK) */
106
- OPCODE(METHOD, BB) /* R(a) = lambda(SEQ[b],L_METHOD) */
107
- OPCODE(METHOD16, BS) /* R(a) = lambda(SEQ[b],L_METHOD) */
108
- OPCODE(RANGE_INC, B) /* R(a) = range_new(R(a),R(a+1),FALSE) */
109
- OPCODE(RANGE_EXC, B) /* R(a) = range_new(R(a),R(a+1),TRUE) */
110
- OPCODE(OCLASS, B) /* R(a) = ::Object */
111
- OPCODE(CLASS, BB) /* R(a) = newclass(R(a),Syms(b),R(a+1)) */
112
- OPCODE(MODULE, BB) /* R(a) = newmodule(R(a),Syms(b)) */
113
- OPCODE(EXEC, BB) /* R(a) = blockexec(R(a),SEQ[b]) */
114
- OPCODE(EXEC16, BS) /* R(a) = blockexec(R(a),SEQ[b]) */
115
- OPCODE(DEF, BB) /* R(a).newmethod(Syms(b),R(a+1)) */
116
- OPCODE(ALIAS, BB) /* alias_method(target_class,Syms(a),Syms(b)) */
117
- OPCODE(UNDEF, B) /* undef_method(target_class,Syms(a)) */
118
- OPCODE(SCLASS, B) /* R(a) = R(a).singleton_class */
119
- OPCODE(TCLASS, B) /* R(a) = target_class */
70
+ OPCODE(KARG, BB) /* R[a] = kdict[Syms[b]]; kdict.delete(Syms[b]) */
71
+ OPCODE(RETURN, B) /* return R[a] (normal) */
72
+ OPCODE(RETURN_BLK, B) /* return R[a] (in-block return) */
73
+ OPCODE(BREAK, B) /* break R[a] */
74
+ OPCODE(BLKPUSH, BS) /* R[a] = block (16=m5:r1:m5:d1:lv4) */
75
+ OPCODE(ADD, B) /* R[a] = R[a]+R[a+1] */
76
+ OPCODE(ADDI, BB) /* R[a] = R[a]+mrb_int(b) */
77
+ OPCODE(SUB, B) /* R[a] = R[a]-R[a+1] */
78
+ OPCODE(SUBI, BB) /* R[a] = R[a]-mrb_int(b) */
79
+ OPCODE(MUL, B) /* R[a] = R[a]*R[a+1] */
80
+ OPCODE(DIV, B) /* R[a] = R[a]/R[a+1] */
81
+ OPCODE(EQ, B) /* R[a] = R[a]==R[a+1] */
82
+ OPCODE(LT, B) /* R[a] = R[a]<R[a+1] */
83
+ OPCODE(LE, B) /* R[a] = R[a]<=R[a+1] */
84
+ OPCODE(GT, B) /* R[a] = R[a]>R[a+1] */
85
+ OPCODE(GE, B) /* R[a] = R[a]>=R[a+1] */
86
+ OPCODE(ARRAY, BB) /* R[a] = ary_new(R[a],R[a+1]..R[a+b]) */
87
+ OPCODE(ARRAY2, BBB) /* R[a] = ary_new(R[b],R[b+1]..R[b+c]) */
88
+ OPCODE(ARYCAT, B) /* ary_cat(R[a],R[a+1]) */
89
+ OPCODE(ARYPUSH, BB) /* ary_push(R[a],R[a+1]..R[a+b]) */
90
+ OPCODE(ARYDUP, B) /* R[a] = ary_dup(R[a]) */
91
+ OPCODE(AREF, BBB) /* R[a] = R[b][c] */
92
+ OPCODE(ASET, BBB) /* R[b][c] = R[a] */
93
+ OPCODE(APOST, BBB) /* *R[a],R[a+1]..R[a+c] = R[a][b..] */
94
+ OPCODE(INTERN, B) /* R[a] = intern(R[a]) */
95
+ OPCODE(SYMBOL, BB) /* R[a] = intern(Pool[b]) */
96
+ OPCODE(STRING, BB) /* R[a] = str_dup(Pool[b]) */
97
+ OPCODE(STRCAT, B) /* str_cat(R[a],R[a+1]) */
98
+ OPCODE(HASH, BB) /* R[a] = hash_new(R[a],R[a+1]..R[a+b*2-1]) */
99
+ OPCODE(HASHADD, BB) /* hash_push(R[a],R[a+1]..R[a+b*2]) */
100
+ OPCODE(HASHCAT, B) /* R[a] = hash_cat(R[a],R[a+1]) */
101
+ OPCODE(LAMBDA, BB) /* R[a] = lambda(Irep[b],L_LAMBDA) */
102
+ OPCODE(BLOCK, BB) /* R[a] = lambda(Irep[b],L_BLOCK) */
103
+ OPCODE(METHOD, BB) /* R[a] = lambda(Irep[b],L_METHOD) */
104
+ OPCODE(RANGE_INC, B) /* R[a] = range_new(R[a],R[a+1],FALSE) */
105
+ OPCODE(RANGE_EXC, B) /* R[a] = range_new(R[a],R[a+1],TRUE) */
106
+ OPCODE(OCLASS, B) /* R[a] = ::Object */
107
+ OPCODE(CLASS, BB) /* R[a] = newclass(R[a],Syms[b],R[a+1]) */
108
+ OPCODE(MODULE, BB) /* R[a] = newmodule(R[a],Syms[b]) */
109
+ OPCODE(EXEC, BB) /* R[a] = blockexec(R[a],Irep[b]) */
110
+ OPCODE(DEF, BB) /* R[a].newmethod(Syms[b],R[a+1]); R[a] = Syms[b] */
111
+ OPCODE(ALIAS, BB) /* alias_method(target_class,Syms[a],Syms[b]) */
112
+ OPCODE(UNDEF, B) /* undef_method(target_class,Syms[a]) */
113
+ OPCODE(SCLASS, B) /* R[a] = R[a].singleton_class */
114
+ OPCODE(TCLASS, B) /* R[a] = target_class */
120
115
  OPCODE(DEBUG, BBB) /* print a,b,c */
121
- OPCODE(ERR, B) /* raise(LocalJumpError, Lit(a)) */
116
+ OPCODE(ERR, B) /* raise(LocalJumpError, Pool[a]) */
117
+ OPCODE(EXT1, Z) /* make 1st operand (a) 16bit */
118
+ OPCODE(EXT2, Z) /* make 2nd operand (b) 16bit */
119
+ OPCODE(EXT3, Z) /* make 1st and 2nd operands 16bit */
122
120
  OPCODE(STOP, Z) /* stop VM */
@@ -12,16 +12,22 @@
12
12
  #undef mrb_intern_lit
13
13
  #define mrb_intern_lit(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
14
14
  #define mrb_intern_cstr(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
15
- #define mrb_define_method(mrb, c, name, f, a) MRB_PRESYM_SCANNING_TAGGED(name)
16
- #define mrb_define_class_method(mrb, c, name, f, a) MRB_PRESYM_SCANNING_TAGGED(name)
17
- #define mrb_define_singleton_method(mrb, c, name, f, a) MRB_PRESYM_SCANNING_TAGGED(name)
18
- #define mrb_define_class(mrb, name, s) MRB_PRESYM_SCANNING_TAGGED(name)
19
- #define mrb_define_class_under(mrb, o, name, s) MRB_PRESYM_SCANNING_TAGGED(name)
15
+ #define mrb_define_method(mrb, c, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (c) (__VA_ARGS__)
16
+ #define mrb_define_class_method(mrb, c, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (c) (__VA_ARGS__)
17
+ #define mrb_define_singleton_method(mrb, c, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (c) (__VA_ARGS__)
18
+ #define mrb_define_class(mrb, name, s) MRB_PRESYM_SCANNING_TAGGED(name) (s)
19
+ #define mrb_define_class_under(mrb, o, name, s) MRB_PRESYM_SCANNING_TAGGED(name) (o) (s)
20
20
  #define mrb_define_module(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
21
- #define mrb_define_module_under(mrb, o, name) MRB_PRESYM_SCANNING_TAGGED(name)
22
- #define mrb_define_module_function(mrb, c, name, f, s) MRB_PRESYM_SCANNING_TAGGED(name)
23
- #define mrb_define_const(mrb, c, name, v) MRB_PRESYM_SCANNING_TAGGED(name)
24
- #define mrb_define_global_const(mrb, name, v) MRB_PRESYM_SCANNING_TAGGED(name)
21
+ #define mrb_define_module_under(mrb, o, name) MRB_PRESYM_SCANNING_TAGGED(name) (o)
22
+ #define mrb_define_module_function(mrb, c, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (c) (__VA_ARGS__)
23
+ #define mrb_define_const(mrb, c, name, v) MRB_PRESYM_SCANNING_TAGGED(name) (c) (v)
24
+ #define mrb_define_global_const(mrb, name, v) MRB_PRESYM_SCANNING_TAGGED(name) (v)
25
+ #define mrb_define_alias(mrb, c, a, b) MRB_PRESYM_SCANNING_TAGGED(a) MRB_PRESYM_SCANNING_TAGGED(b) (c)
26
+ #define mrb_class_get(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
27
+ #define mrb_class_get_under(mrb, outer, name) MRB_PRESYM_SCANNING_TAGGED(name) (outer)
28
+ #define mrb_module_get(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
29
+ #define mrb_module_get_under(mrb, outer, name) MRB_PRESYM_SCANNING_TAGGED(name) (outer)
30
+ #define mrb_funcall(mrb, v, name, ...) MRB_PRESYM_SCANNING_TAGGED(name) (v) (__VA_ARGS__)
25
31
 
26
32
  #define MRB_OPSYM(name) MRB_OPSYM__##name(mrb)
27
33
  #define MRB_CVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@@" #name)
@@ -83,6 +83,8 @@ struct RProc {
83
83
  } while (0)
84
84
  #define MRB_PROC_SCOPE 2048
85
85
  #define MRB_PROC_SCOPE_P(p) (((p)->flags & MRB_PROC_SCOPE) != 0)
86
+ #define MRB_PROC_NOARG 4096 /* for MRB_PROC_CFUNC_FL, it would be something like MRB_ARGS_NONE() or MRB_METHOD_NOARG_FL */
87
+ #define MRB_PROC_NOARG_P(p) (((p)->flags & MRB_PROC_NOARG) != 0)
86
88
 
87
89
  #define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v)))
88
90
 
@@ -90,7 +92,7 @@ struct RProc *mrb_proc_new(mrb_state*, const mrb_irep*);
90
92
  struct RProc *mrb_closure_new(mrb_state*, const mrb_irep*);
91
93
  MRB_API struct RProc *mrb_proc_new_cfunc(mrb_state*, mrb_func_t);
92
94
  MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals);
93
- void mrb_proc_copy(struct RProc *a, struct RProc *b);
95
+ void mrb_proc_copy(mrb_state *mrb, struct RProc *a, struct RProc *b);
94
96
  mrb_int mrb_proc_arity(const struct RProc *p);
95
97
 
96
98
  /* following functions are defined in mruby-proc-ext so please include it when using */
@@ -121,7 +123,7 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx);
121
123
  #define MRB_METHOD_FUNC(m) ((m).func)
122
124
  #define MRB_METHOD_NOARG_SET(m) do{(m).flags|=MRB_METHOD_NOARG_FL;}while(0)
123
125
  #define MRB_METHOD_FROM_FUNC(m,fn) do{(m).flags=MRB_METHOD_FUNC_FL;(m).func=(fn);}while(0)
124
- #define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).proc=(pr);}while(0)
126
+ #define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).proc=(struct RProc*)(pr);}while(0)
125
127
  #define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
126
128
  #define MRB_METHOD_PROC(m) ((m).proc)
127
129
  #define MRB_METHOD_UNDEF_P(m) ((m).proc==NULL)
@@ -324,20 +324,6 @@ MRB_API mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, mrb_int len);
324
324
  */
325
325
  MRB_API mrb_value mrb_str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len);
326
326
 
327
- /**
328
- * Returns a Ruby string type.
329
- *
330
- *
331
- * @param mrb The current mruby state.
332
- * @param str Ruby string.
333
- * @return [mrb_value] A Ruby string.
334
- */
335
- MRB_API mrb_value mrb_ensure_string_type(mrb_state *mrb, mrb_value str);
336
- MRB_API mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str);
337
- /* obsolete: use mrb_ensure_string_type() instead */
338
- MRB_API mrb_value mrb_string_type(mrb_state *mrb, mrb_value str);
339
-
340
-
341
327
  MRB_API mrb_value mrb_str_new_capa(mrb_state *mrb, size_t capa);
342
328
  #define mrb_str_buf_new(mrb, capa) mrb_str_new_capa(mrb, (capa))
343
329
 
@@ -369,17 +355,10 @@ MRB_API mrb_value mrb_str_dup(mrb_state *mrb, mrb_value str);
369
355
  */
370
356
  MRB_API mrb_value mrb_str_intern(mrb_state *mrb, mrb_value self);
371
357
 
372
- MRB_API mrb_value mrb_str_to_inum(mrb_state *mrb, mrb_value str, mrb_int base, mrb_bool badcheck);
373
- MRB_API mrb_value mrb_cstr_to_inum(mrb_state *mrb, const char *s, mrb_int base, mrb_bool badcheck);
358
+ MRB_API mrb_value mrb_str_to_integer(mrb_state *mrb, mrb_value str, mrb_int base, mrb_bool badcheck);
359
+ /* obsolete: use mrb_str_to_integer() */
360
+ #define mrb_str_to_inum(mrb, str, base, badcheck) mrb_str_to_integer(mrb, str, base, badcheck)
374
361
  MRB_API double mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck);
375
- MRB_API double mrb_cstr_to_dbl(mrb_state *mrb, const char *s, mrb_bool badcheck);
376
-
377
- /**
378
- * Returns a converted string type.
379
- * For type checking, non converting `mrb_to_str` is recommended.
380
- * obsolete: use `mrb_obj_as_string()` instead.
381
- */
382
- #define mrb_str_to_str(mrb, str) mrb_obj_as_string(mrb, str)
383
362
 
384
363
  /**
385
364
  * Returns true if the strings match and false if the strings don't match.
@@ -31,7 +31,30 @@ typedef uint32_t mrb_sym;
31
31
  * Not to be confused with Ruby's boolean classes, which can be
32
32
  * obtained using mrb_false_value() and mrb_true_value()
33
33
  */
34
+ #if defined(__cplusplus) || (defined(__bool_true_false_are_defined) && __bool_true_false_are_defined)
35
+ typedef bool mrb_bool;
36
+
37
+ # ifndef FALSE
38
+ # define FALSE false
39
+ # endif
40
+ # ifndef TRUE
41
+ # define TRUE true
42
+ # endif
43
+ #else
44
+ # if __STDC_VERSION__ >= 199901L
45
+ typedef _Bool mrb_bool;
46
+ # else
34
47
  typedef uint8_t mrb_bool;
48
+ # endif
49
+
50
+ # ifndef FALSE
51
+ # define FALSE 0
52
+ # endif
53
+ # ifndef TRUE
54
+ # define TRUE 1
55
+ # endif
56
+ #endif
57
+
35
58
  struct mrb_state;
36
59
 
37
60
  #if defined _MSC_VER && _MSC_VER < 1800
@@ -77,6 +100,7 @@ struct mrb_state;
77
100
  # define MRB_ENDIAN_LOHI(a,b) b a
78
101
  #endif
79
102
 
103
+ MRB_API mrb_int mrb_int_read(const char *p, const char *e, char **endp);
80
104
  #ifndef MRB_NO_FLOAT
81
105
  MRB_API double mrb_float_read(const char*, char**);
82
106
  #ifdef MRB_USE_FLOAT32
@@ -87,13 +111,11 @@ MRB_API double mrb_float_read(const char*, char**);
87
111
  #endif
88
112
 
89
113
  #if defined _MSC_VER && _MSC_VER < 1900
90
- # include <stdarg.h>
91
114
  MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg);
92
115
  MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...);
93
116
  # define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg)
94
117
  # define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__)
95
118
  # if _MSC_VER < 1800 && !defined MRB_NO_FLOAT
96
- # include <float.h>
97
119
  # define isfinite(n) _finite(n)
98
120
  # define isnan _isnan
99
121
  # define isinf(n) (!_finite(n) && !_isnan(n))
@@ -104,34 +126,49 @@ static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000;
104
126
  # endif
105
127
  #endif
106
128
 
129
+ #define MRB_VTYPE_FOREACH(f) \
130
+ /* mrb_vtype */ /* c type */ /* ruby class */ \
131
+ f(MRB_TT_FALSE, void, "false") \
132
+ f(MRB_TT_TRUE, void, "true") \
133
+ f(MRB_TT_SYMBOL, void, "Symbol") \
134
+ f(MRB_TT_UNDEF, void, "undefined") \
135
+ f(MRB_TT_FREE, void, "free") \
136
+ f(MRB_TT_FLOAT, struct RFloat, "Float") \
137
+ f(MRB_TT_INTEGER, struct RInteger, "Integer") \
138
+ f(MRB_TT_CPTR, struct RCptr, "cptr") \
139
+ f(MRB_TT_OBJECT, struct RObject, "Object") \
140
+ f(MRB_TT_CLASS, struct RClass, "Class") \
141
+ f(MRB_TT_MODULE, struct RClass, "Module") \
142
+ f(MRB_TT_ICLASS, struct RClass, "iClass") \
143
+ f(MRB_TT_SCLASS, struct RClass, "SClass") \
144
+ f(MRB_TT_PROC, struct RProc, "Proc") \
145
+ f(MRB_TT_ARRAY, struct RArray, "Array") \
146
+ f(MRB_TT_HASH, struct RHash, "Hash") \
147
+ f(MRB_TT_STRING, struct RString, "String") \
148
+ f(MRB_TT_RANGE, struct RRange, "Range") \
149
+ f(MRB_TT_EXCEPTION, struct RException, "Exception") \
150
+ f(MRB_TT_ENV, struct REnv, "env") \
151
+ f(MRB_TT_DATA, struct RData, "Data") \
152
+ f(MRB_TT_FIBER, struct RFiber, "Fiber") \
153
+ f(MRB_TT_STRUCT, struct RArray, "Struct") \
154
+ f(MRB_TT_ISTRUCT, struct RIStruct, "istruct") \
155
+ f(MRB_TT_BREAK, struct RBreak, "break") \
156
+ f(MRB_TT_COMPLEX, struct RComplex, "Complex") \
157
+ f(MRB_TT_RATIONAL, struct RRational, "Rational")
158
+
107
159
  enum mrb_vtype {
108
- MRB_TT_FALSE = 0,
109
- MRB_TT_TRUE,
110
- MRB_TT_FLOAT,
111
- MRB_TT_INTEGER,
112
- MRB_TT_SYMBOL,
113
- MRB_TT_UNDEF,
114
- MRB_TT_CPTR,
115
- MRB_TT_FREE,
116
- MRB_TT_OBJECT,
117
- MRB_TT_CLASS,
118
- MRB_TT_MODULE,
119
- MRB_TT_ICLASS,
120
- MRB_TT_SCLASS,
121
- MRB_TT_PROC,
122
- MRB_TT_ARRAY,
123
- MRB_TT_HASH,
124
- MRB_TT_STRING,
125
- MRB_TT_RANGE,
126
- MRB_TT_EXCEPTION,
127
- MRB_TT_ENV,
128
- MRB_TT_DATA,
129
- MRB_TT_FIBER,
130
- MRB_TT_ISTRUCT,
131
- MRB_TT_BREAK,
160
+ #define MRB_VTYPE_DEFINE(tt, type, name) tt,
161
+ MRB_VTYPE_FOREACH(MRB_VTYPE_DEFINE)
162
+ #undef MRB_VTYPE_DEFINE
132
163
  MRB_TT_MAXDEFINE
133
164
  };
134
165
 
166
+ #define MRB_VTYPE_TYPEOF(tt) MRB_TYPEOF_##tt
167
+
168
+ #define MRB_VTYPE_TYPEDEF(tt, type, name) typedef type MRB_VTYPE_TYPEOF(tt);
169
+ MRB_VTYPE_FOREACH(MRB_VTYPE_TYPEDEF)
170
+ #undef MRB_VTYPE_TYPEDEF
171
+
135
172
  /* for compatibility */
136
173
  #define MRB_TT_FIXNUM MRB_TT_INTEGER
137
174
 
@@ -177,7 +214,7 @@ struct RCptr {
177
214
  #endif
178
215
 
179
216
  #ifndef mrb_immediate_p
180
- #define mrb_immediate_p(o) (mrb_type(o) < MRB_TT_FREE)
217
+ #define mrb_immediate_p(o) (mrb_type(o) <= MRB_TT_CPTR)
181
218
  #endif
182
219
  #ifndef mrb_integer_p
183
220
  #define mrb_integer_p(o) (mrb_type(o) == MRB_TT_INTEGER)
@@ -372,26 +409,29 @@ mrb_undef_value(void)
372
409
  return v;
373
410
  }
374
411
 
375
- #if defined(MRB_USE_ETEXT_EDATA) && !defined(MRB_USE_LINK_TIME_RO_DATA_P)
376
- # ifdef __GNUC__
377
- # warning MRB_USE_ETEXT_EDATA is deprecated. Define MRB_USE_LINK_TIME_RO_DATA_P instead.
378
- # endif
379
- # define MRB_USE_LINK_TIME_RO_DATA_P
380
- #endif
381
-
382
412
  #if defined(MRB_USE_CUSTOM_RO_DATA_P)
383
413
  /* If you define `MRB_USE_CUSTOM_RO_DATA_P`, you must implement `mrb_ro_data_p()`. */
384
414
  mrb_bool mrb_ro_data_p(const char *p);
385
- #elif defined(MRB_USE_LINK_TIME_RO_DATA_P)
386
- extern char __ehdr_start[];
387
- extern char __init_array_start[];
388
-
415
+ #elif !defined(MRB_NO_DEFAULT_RO_DATA_P)
416
+ #if defined(MRB_USE_ETEXT_RO_DATA_P)
417
+ #define MRB_LINK_TIME_RO_DATA_P
418
+ extern char etext, edata;
389
419
  static inline mrb_bool
390
420
  mrb_ro_data_p(const char *p)
391
421
  {
392
- return __ehdr_start < p && p < __init_array_start;
422
+ return &etext < p && p < &edata;
393
423
  }
394
- #else
424
+ #elif defined(__APPLE__)
425
+ #define MRB_LINK_TIME_RO_DATA_P
426
+ #include <mach-o/getsect.h>
427
+ static inline mrb_bool
428
+ mrb_ro_data_p(const char *p)
429
+ {
430
+ return (char*)get_etext() < p && p < (char*)get_edata();
431
+ }
432
+ #endif /* Linux or macOS */
433
+ #endif /* MRB_NO_DEFAULT_RO_DATA_P */
434
+ #ifndef MRB_LINK_TIME_RO_DATA_P
395
435
  # define mrb_ro_data_p(p) FALSE
396
436
  #endif
397
437
 
@@ -14,21 +14,6 @@
14
14
  */
15
15
  MRB_BEGIN_DECL
16
16
 
17
- typedef struct global_variable {
18
- int counter;
19
- mrb_value *data;
20
- mrb_value (*getter)(void);
21
- void (*setter)(void);
22
- /* void (*marker)(); */
23
- /* int block_trace; */
24
- /* struct trace_var *trace; */
25
- } global_variable;
26
-
27
- struct global_entry {
28
- global_variable *var;
29
- mrb_sym id;
30
- };
31
-
32
17
  mrb_value mrb_vm_special_get(mrb_state*, mrb_sym);
33
18
  void mrb_vm_special_set(mrb_state*, mrb_sym, mrb_value);
34
19
  mrb_value mrb_vm_cv_get(mrb_state*, mrb_sym);
@@ -27,7 +27,7 @@ MRB_BEGIN_DECL
27
27
  /*
28
28
  * The version of Ruby used by mruby.
29
29
  */
30
- #define MRUBY_RUBY_VERSION "3.0"
30
+ #define MRUBY_RUBY_VERSION "3.1"
31
31
 
32
32
  /*
33
33
  * Ruby engine.
@@ -42,7 +42,7 @@ MRB_BEGIN_DECL
42
42
  /*
43
43
  * Minor release version number.
44
44
  */
45
- #define MRUBY_RELEASE_MINOR 0
45
+ #define MRUBY_RELEASE_MINOR 1
46
46
 
47
47
  /*
48
48
  * Tiny release version number.
@@ -80,17 +80,17 @@ MRB_BEGIN_DECL
80
80
  /*
81
81
  * Release year.
82
82
  */
83
- #define MRUBY_RELEASE_YEAR 2021
83
+ #define MRUBY_RELEASE_YEAR 2022
84
84
 
85
85
  /*
86
86
  * Release month.
87
87
  */
88
- #define MRUBY_RELEASE_MONTH 3
88
+ #define MRUBY_RELEASE_MONTH 5
89
89
 
90
90
  /*
91
91
  * Release day.
92
92
  */
93
- #define MRUBY_RELEASE_DAY 5
93
+ #define MRUBY_RELEASE_DAY 12
94
94
 
95
95
  /*
96
96
  * Release date as a string.