ruby2d 0.8.1 → 0.9.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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/assets/README.md +20 -7
  3. data/assets/include/SDL2/SDL.h +135 -0
  4. data/assets/include/SDL2/SDL_assert.h +291 -0
  5. data/assets/include/SDL2/SDL_atomic.h +277 -0
  6. data/assets/include/SDL2/SDL_audio.h +826 -0
  7. data/assets/include/SDL2/SDL_bits.h +112 -0
  8. data/assets/include/SDL2/SDL_blendmode.h +120 -0
  9. data/assets/include/SDL2/SDL_clipboard.h +71 -0
  10. data/assets/include/SDL2/SDL_config.h +421 -0
  11. data/assets/include/SDL2/SDL_cpuinfo.h +188 -0
  12. data/assets/include/SDL2/SDL_egl.h +1673 -0
  13. data/assets/include/SDL2/SDL_endian.h +260 -0
  14. data/assets/include/SDL2/SDL_error.h +76 -0
  15. data/assets/include/SDL2/SDL_events.h +788 -0
  16. data/assets/include/SDL2/SDL_filesystem.h +136 -0
  17. data/assets/include/SDL2/SDL_gamecontroller.h +390 -0
  18. data/assets/include/SDL2/SDL_gesture.h +87 -0
  19. data/assets/include/SDL2/SDL_haptic.h +1238 -0
  20. data/assets/include/SDL2/SDL_hints.h +1135 -0
  21. data/assets/include/SDL2/SDL_image.h +161 -0
  22. data/assets/include/SDL2/SDL_joystick.h +408 -0
  23. data/assets/include/SDL2/SDL_keyboard.h +217 -0
  24. data/assets/include/SDL2/SDL_keycode.h +349 -0
  25. data/assets/include/SDL2/SDL_loadso.h +81 -0
  26. data/assets/include/SDL2/SDL_log.h +211 -0
  27. data/assets/include/SDL2/SDL_main.h +168 -0
  28. data/assets/include/SDL2/SDL_messagebox.h +144 -0
  29. data/assets/include/SDL2/SDL_mixer.h +651 -0
  30. data/assets/include/SDL2/SDL_mouse.h +302 -0
  31. data/assets/include/SDL2/SDL_mutex.h +251 -0
  32. data/assets/include/SDL2/SDL_name.h +33 -0
  33. data/assets/include/SDL2/SDL_opengl.h +2183 -0
  34. data/assets/include/SDL2/SDL_opengl_glext.h +11177 -0
  35. data/assets/include/SDL2/SDL_opengles.h +39 -0
  36. data/assets/include/SDL2/SDL_opengles2.h +52 -0
  37. data/assets/include/SDL2/SDL_opengles2_gl2.h +621 -0
  38. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +2050 -0
  39. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +30 -0
  40. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +282 -0
  41. data/assets/include/SDL2/SDL_pixels.h +470 -0
  42. data/assets/include/SDL2/SDL_platform.h +198 -0
  43. data/assets/include/SDL2/SDL_power.h +75 -0
  44. data/assets/include/SDL2/SDL_quit.h +58 -0
  45. data/assets/include/SDL2/SDL_rect.h +148 -0
  46. data/assets/include/SDL2/SDL_render.h +931 -0
  47. data/assets/include/SDL2/SDL_revision.h +2 -0
  48. data/assets/include/SDL2/SDL_rwops.h +254 -0
  49. data/assets/include/SDL2/SDL_scancode.h +413 -0
  50. data/assets/include/SDL2/SDL_sensor.h +251 -0
  51. data/assets/include/SDL2/SDL_shape.h +144 -0
  52. data/assets/include/SDL2/SDL_stdinc.h +607 -0
  53. data/assets/include/SDL2/SDL_surface.h +553 -0
  54. data/assets/include/SDL2/SDL_system.h +279 -0
  55. data/assets/include/SDL2/SDL_syswm.h +324 -0
  56. data/assets/include/SDL2/SDL_test.h +69 -0
  57. data/assets/include/SDL2/SDL_test_assert.h +105 -0
  58. data/assets/include/SDL2/SDL_test_common.h +188 -0
  59. data/assets/include/SDL2/SDL_test_compare.h +69 -0
  60. data/assets/include/SDL2/SDL_test_crc32.h +124 -0
  61. data/assets/include/SDL2/SDL_test_font.h +81 -0
  62. data/assets/include/SDL2/SDL_test_fuzzer.h +384 -0
  63. data/assets/include/SDL2/SDL_test_harness.h +134 -0
  64. data/assets/include/SDL2/SDL_test_images.h +78 -0
  65. data/assets/include/SDL2/SDL_test_log.h +67 -0
  66. data/assets/include/SDL2/SDL_test_md5.h +129 -0
  67. data/assets/include/SDL2/SDL_test_memory.h +63 -0
  68. data/assets/include/SDL2/SDL_test_random.h +115 -0
  69. data/assets/include/SDL2/SDL_thread.h +343 -0
  70. data/assets/include/SDL2/SDL_timer.h +115 -0
  71. data/assets/include/SDL2/SDL_touch.h +86 -0
  72. data/assets/include/SDL2/SDL_ttf.h +294 -0
  73. data/assets/include/SDL2/SDL_types.h +29 -0
  74. data/assets/include/SDL2/SDL_version.h +162 -0
  75. data/assets/include/SDL2/SDL_video.h +1276 -0
  76. data/assets/include/SDL2/SDL_vulkan.h +278 -0
  77. data/assets/include/SDL2/begin_code.h +167 -0
  78. data/assets/include/SDL2/close_code.h +37 -0
  79. data/assets/include/glew.h +23686 -0
  80. data/assets/include/simple2d.h +735 -0
  81. data/assets/ios/MRuby.framework/Headers/mrbconf.h +3 -5
  82. data/assets/ios/MRuby.framework/Headers/mruby.h +35 -32
  83. data/assets/ios/MRuby.framework/Headers/mruby/array.h +1 -0
  84. data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +9 -1
  85. data/assets/ios/MRuby.framework/Headers/mruby/class.h +14 -11
  86. data/assets/ios/MRuby.framework/Headers/mruby/common.h +5 -0
  87. data/assets/ios/MRuby.framework/Headers/mruby/compile.h +4 -3
  88. data/assets/ios/MRuby.framework/Headers/mruby/debug.h +3 -2
  89. data/assets/ios/MRuby.framework/Headers/mruby/dump.h +2 -2
  90. data/assets/ios/MRuby.framework/Headers/mruby/hash.h +38 -5
  91. data/assets/ios/MRuby.framework/Headers/mruby/irep.h +17 -4
  92. data/assets/ios/MRuby.framework/Headers/mruby/object.h +4 -5
  93. data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +47 -139
  94. data/assets/ios/MRuby.framework/Headers/mruby/ops.h +117 -0
  95. data/assets/ios/MRuby.framework/Headers/mruby/proc.h +4 -4
  96. data/assets/ios/MRuby.framework/Headers/mruby/string.h +11 -7
  97. data/assets/ios/MRuby.framework/Headers/mruby/throw.h +4 -4
  98. data/assets/ios/MRuby.framework/Headers/mruby/variable.h +2 -4
  99. data/assets/ios/MRuby.framework/Headers/mruby/version.h +6 -6
  100. data/assets/ios/MRuby.framework/MRuby +0 -0
  101. data/assets/ios/MyApp.xcodeproj/project.pbxproj +24 -18
  102. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  103. data/assets/ios/main.c +1 -1
  104. data/assets/macos/lib/libFLAC.a +0 -0
  105. data/assets/macos/lib/libSDL2.a +0 -0
  106. data/assets/macos/lib/libSDL2_image.a +0 -0
  107. data/assets/macos/lib/libSDL2_mixer.a +0 -0
  108. data/assets/macos/lib/libSDL2_ttf.a +0 -0
  109. data/assets/macos/lib/libfreetype.a +0 -0
  110. data/assets/macos/lib/libjpeg.a +0 -0
  111. data/assets/macos/lib/libmpg123.a +0 -0
  112. data/assets/macos/lib/libogg.a +0 -0
  113. data/assets/macos/lib/libpng16.a +0 -0
  114. data/assets/macos/lib/libsimple2d.a +0 -0
  115. data/assets/macos/lib/libtiff.a +0 -0
  116. data/assets/macos/lib/libvorbis.a +0 -0
  117. data/assets/macos/lib/libvorbisfile.a +0 -0
  118. data/assets/macos/lib/libwebp.a +0 -0
  119. data/assets/mingw/bin/SDL2.dll +0 -0
  120. data/assets/mingw/bin/SDL2_image.dll +0 -0
  121. data/assets/mingw/bin/SDL2_mixer.dll +0 -0
  122. data/assets/mingw/bin/SDL2_ttf.dll +0 -0
  123. data/assets/mingw/bin/glew32.dll +0 -0
  124. data/assets/mingw/bin/libFLAC-8.dll +0 -0
  125. data/assets/mingw/bin/libfreetype-6.dll +0 -0
  126. data/assets/mingw/bin/libjpeg-9.dll +0 -0
  127. data/assets/mingw/bin/libmodplug-1.dll +0 -0
  128. data/assets/mingw/bin/libmpg123-0.dll +0 -0
  129. data/assets/mingw/bin/libogg-0.dll +0 -0
  130. data/assets/mingw/bin/libopus-0.dll +0 -0
  131. data/assets/mingw/bin/libopusfile-0.dll +0 -0
  132. data/assets/mingw/bin/libpng16-16.dll +0 -0
  133. data/assets/mingw/bin/libtiff-5.dll +0 -0
  134. data/assets/mingw/bin/libvorbis-0.dll +0 -0
  135. data/assets/mingw/bin/libvorbisfile-3.dll +0 -0
  136. data/assets/mingw/bin/libwebp-7.dll +0 -0
  137. data/assets/mingw/bin/zlib1.dll +0 -0
  138. data/assets/mingw/lib/libSDL2.a +0 -0
  139. data/assets/mingw/lib/libSDL2.dll.a +0 -0
  140. data/assets/mingw/lib/libSDL2_image.a +0 -0
  141. data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
  142. data/assets/mingw/lib/libSDL2_mixer.a +0 -0
  143. data/assets/mingw/lib/libSDL2_mixer.dll.a +0 -0
  144. data/assets/mingw/lib/libSDL2_test.a +0 -0
  145. data/assets/mingw/lib/libSDL2_ttf.a +0 -0
  146. data/assets/mingw/lib/libSDL2_ttf.dll.a +0 -0
  147. data/assets/mingw/lib/libSDL2main.a +0 -0
  148. data/assets/mingw/lib/libglew32.a +0 -0
  149. data/assets/mingw/lib/libglew32.dll.a +0 -0
  150. data/assets/mingw/lib/libsimple2d.a +0 -0
  151. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +4 -0
  152. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +4 -0
  153. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +4 -0
  154. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +4 -0
  155. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +4 -0
  156. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +4 -0
  157. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +4 -0
  158. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +4 -0
  159. data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +7 -0
  160. data/assets/tvos/MRuby.framework/Headers/mrbconf.h +3 -5
  161. data/assets/tvos/MRuby.framework/Headers/mruby.h +35 -32
  162. data/assets/tvos/MRuby.framework/Headers/mruby/array.h +1 -0
  163. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +9 -1
  164. data/assets/tvos/MRuby.framework/Headers/mruby/class.h +14 -11
  165. data/assets/tvos/MRuby.framework/Headers/mruby/common.h +5 -0
  166. data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +4 -3
  167. data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +3 -2
  168. data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +2 -2
  169. data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +38 -5
  170. data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +17 -4
  171. data/assets/tvos/MRuby.framework/Headers/mruby/object.h +4 -5
  172. data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +47 -139
  173. data/assets/tvos/MRuby.framework/Headers/mruby/ops.h +117 -0
  174. data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +4 -4
  175. data/assets/tvos/MRuby.framework/Headers/mruby/string.h +11 -7
  176. data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +4 -4
  177. data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +2 -4
  178. data/assets/tvos/MRuby.framework/Headers/mruby/version.h +6 -6
  179. data/assets/tvos/MRuby.framework/MRuby +0 -0
  180. data/assets/tvos/MyApp.xcodeproj/project.pbxproj +25 -19
  181. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  182. data/assets/tvos/main.c +1 -1
  183. data/ext/ruby2d/extconf.rb +59 -50
  184. data/ext/ruby2d/ruby2d.c +0 -1
  185. data/lib/ruby2d.rb +1 -7
  186. data/lib/ruby2d/cli/launch.rb +1 -1
  187. data/lib/ruby2d/font.rb +32 -7
  188. data/lib/ruby2d/version.rb +1 -1
  189. metadata +132 -6
  190. data/assets/opal.js +0 -21637
  191. data/assets/simple2d.js +0 -1379
  192. data/assets/template.html +0 -18
@@ -39,23 +39,36 @@ typedef struct mrb_irep {
39
39
 
40
40
  struct mrb_locals *lv;
41
41
  /* debug info */
42
- mrb_bool own_filename;
43
- const char *filename;
44
- uint16_t *lines;
45
42
  struct mrb_irep_debug_info* debug_info;
46
43
 
47
- int ilen, plen, slen, rlen, refcnt;
44
+ uint16_t ilen, plen, slen, rlen;
45
+ uint32_t refcnt;
48
46
  } mrb_irep;
49
47
 
50
48
  #define MRB_ISEQ_NO_FREE 1
51
49
 
52
50
  MRB_API mrb_irep *mrb_add_irep(mrb_state *mrb);
51
+
52
+ /* @param [const uint8_t*] irep code, expected as a literal */
53
53
  MRB_API mrb_value mrb_load_irep(mrb_state*, const uint8_t*);
54
+
55
+ /* @param [const uint8_t*] irep code, expected as a literal */
54
56
  MRB_API mrb_value mrb_load_irep_cxt(mrb_state*, const uint8_t*, mrbc_context*);
57
+
55
58
  void mrb_irep_free(mrb_state*, struct mrb_irep*);
56
59
  void mrb_irep_incref(mrb_state*, struct mrb_irep*);
57
60
  void mrb_irep_decref(mrb_state*, struct mrb_irep*);
58
61
  void mrb_irep_cutref(mrb_state*, struct mrb_irep*);
62
+ void mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep);
63
+
64
+ struct mrb_insn_data {
65
+ uint8_t insn;
66
+ uint16_t a;
67
+ uint16_t b;
68
+ uint8_t c;
69
+ };
70
+
71
+ struct mrb_insn_data mrb_decode_insn(mrb_code *pc);
59
72
 
60
73
  MRB_END_DECL
61
74
 
@@ -22,11 +22,10 @@ struct RBasic {
22
22
  };
23
23
  #define mrb_basic_ptr(v) ((struct RBasic*)(mrb_ptr(v)))
24
24
 
25
- /* flags bits >= 18 is reserved */
26
- #define MRB_FLAG_IS_FROZEN (1 << 18)
27
- #define MRB_FROZEN_P(o) ((o)->flags & MRB_FLAG_IS_FROZEN)
28
- #define MRB_SET_FROZEN_FLAG(o) ((o)->flags |= MRB_FLAG_IS_FROZEN)
29
- #define MRB_UNSET_FROZEN_FLAG(o) ((o)->flags &= ~MRB_FLAG_IS_FROZEN)
25
+ #define MRB_FL_OBJ_IS_FROZEN (1 << 20)
26
+ #define MRB_FROZEN_P(o) ((o)->flags & MRB_FL_OBJ_IS_FROZEN)
27
+ #define MRB_SET_FROZEN_FLAG(o) ((o)->flags |= MRB_FL_OBJ_IS_FROZEN)
28
+ #define MRB_UNSET_FROZEN_FLAG(o) ((o)->flags &= ~MRB_FL_OBJ_IS_FROZEN)
30
29
 
31
30
  struct RObject {
32
31
  MRB_OBJECT_HEADER;
@@ -7,145 +7,10 @@
7
7
  #ifndef MRUBY_OPCODE_H
8
8
  #define MRUBY_OPCODE_H
9
9
 
10
- #define MAXARG_Bx (0xffff)
11
- #define MAXARG_sBx (MAXARG_Bx>>1) /* 'sBx' is signed */
12
-
13
- /* instructions: packed 32 bit */
14
- /* ------------------------------- */
15
- /* A:B:C:OP = 9: 9: 7: 7 */
16
- /* A:Bx:OP = 9:16: 7 */
17
- /* Ax:OP = 25: 7 */
18
- /* A:Bz:Cz:OP = 9:14: 2: 7 */
19
-
20
- #define GET_OPCODE(i) ((int)(((mrb_code)(i)) & 0x7f))
21
- #define GETARG_A(i) ((int)((((mrb_code)(i)) >> 23) & 0x1ff))
22
- #define GETARG_B(i) ((int)((((mrb_code)(i)) >> 14) & 0x1ff))
23
- #define GETARG_C(i) ((int)((((mrb_code)(i)) >> 7) & 0x7f))
24
- #define GETARG_Bx(i) ((int)((((mrb_code)(i)) >> 7) & 0xffff))
25
- #define GETARG_sBx(i) ((int)(GETARG_Bx(i)-MAXARG_sBx))
26
- #define GETARG_Ax(i) ((int32_t)((((mrb_code)(i)) >> 7) & 0x1ffffff))
27
- #define GETARG_UNPACK_b(i,n1,n2) ((int)((((mrb_code)(i)) >> (7+(n2))) & (((1<<(n1))-1))))
28
- #define GETARG_UNPACK_c(i,n1,n2) ((int)((((mrb_code)(i)) >> 7) & (((1<<(n2))-1))))
29
- #define GETARG_b(i) GETARG_UNPACK_b(i,14,2)
30
- #define GETARG_c(i) GETARG_UNPACK_c(i,14,2)
31
-
32
- #define MKOPCODE(op) ((op) & 0x7f)
33
- #define MKARG_A(c) ((mrb_code)((c) & 0x1ff) << 23)
34
- #define MKARG_B(c) ((mrb_code)((c) & 0x1ff) << 14)
35
- #define MKARG_C(c) (((c) & 0x7f) << 7)
36
- #define MKARG_Bx(v) ((mrb_code)((v) & 0xffff) << 7)
37
- #define MKARG_sBx(v) MKARG_Bx((v)+MAXARG_sBx)
38
- #define MKARG_Ax(v) ((mrb_code)((v) & 0x1ffffff) << 7)
39
- #define MKARG_PACK(b,n1,c,n2) ((((b) & ((1<<n1)-1)) << (7+n2))|(((c) & ((1<<n2)-1)) << 7))
40
- #define MKARG_bc(b,c) MKARG_PACK(b,14,c,2)
41
-
42
- #define MKOP_A(op,a) (MKOPCODE(op)|MKARG_A(a))
43
- #define MKOP_AB(op,a,b) (MKOP_A(op,a)|MKARG_B(b))
44
- #define MKOP_ABC(op,a,b,c) (MKOP_AB(op,a,b)|MKARG_C(c))
45
- #define MKOP_ABx(op,a,bx) (MKOP_A(op,a)|MKARG_Bx(bx))
46
- #define MKOP_Bx(op,bx) (MKOPCODE(op)|MKARG_Bx(bx))
47
- #define MKOP_sBx(op,sbx) (MKOPCODE(op)|MKARG_sBx(sbx))
48
- #define MKOP_AsBx(op,a,sbx) (MKOP_A(op,a)|MKARG_sBx(sbx))
49
- #define MKOP_Ax(op,ax) (MKOPCODE(op)|MKARG_Ax(ax))
50
- #define MKOP_Abc(op,a,b,c) (MKOP_A(op,a)|MKARG_bc(b,c))
51
-
52
- enum {
53
- /*-----------------------------------------------------------------------
54
- operation code operand description
55
- ------------------------------------------------------------------------*/
56
- OP_NOP=0,/* */
57
- OP_MOVE,/* A B R(A) := R(B) */
58
- OP_LOADL,/* A Bx R(A) := Pool(Bx) */
59
- OP_LOADI,/* A sBx R(A) := sBx */
60
- OP_LOADSYM,/* A Bx R(A) := Syms(Bx) */
61
- OP_LOADNIL,/* A R(A) := nil */
62
- OP_LOADSELF,/* A R(A) := self */
63
- OP_LOADT,/* A R(A) := true */
64
- OP_LOADF,/* A R(A) := false */
65
-
66
- OP_GETGLOBAL,/* A Bx R(A) := getglobal(Syms(Bx)) */
67
- OP_SETGLOBAL,/* A Bx setglobal(Syms(Bx), R(A)) */
68
- OP_GETSPECIAL,/*A Bx R(A) := Special[Bx] */
69
- OP_SETSPECIAL,/*A Bx Special[Bx] := R(A) */
70
- OP_GETIV,/* A Bx R(A) := ivget(Syms(Bx)) */
71
- OP_SETIV,/* A Bx ivset(Syms(Bx),R(A)) */
72
- OP_GETCV,/* A Bx R(A) := cvget(Syms(Bx)) */
73
- OP_SETCV,/* A Bx cvset(Syms(Bx),R(A)) */
74
- OP_GETCONST,/* A Bx R(A) := constget(Syms(Bx)) */
75
- OP_SETCONST,/* A Bx constset(Syms(Bx),R(A)) */
76
- OP_GETMCNST,/* A Bx R(A) := R(A)::Syms(Bx) */
77
- OP_SETMCNST,/* A Bx R(A+1)::Syms(Bx) := R(A) */
78
- OP_GETUPVAR,/* A B C R(A) := uvget(B,C) */
79
- OP_SETUPVAR,/* A B C uvset(B,C,R(A)) */
80
-
81
- OP_JMP,/* sBx pc+=sBx */
82
- OP_JMPIF,/* A sBx if R(A) pc+=sBx */
83
- OP_JMPNOT,/* A sBx if !R(A) pc+=sBx */
84
- OP_ONERR,/* sBx rescue_push(pc+sBx) */
85
- OP_RESCUE,/* A B C if A (if C exc=R(A) else R(A) := exc);
86
- if B R(B) := exc.isa?(R(B)); clear(exc) */
87
- OP_POPERR,/* A A.times{rescue_pop()} */
88
- OP_RAISE,/* A raise(R(A)) */
89
- OP_EPUSH,/* Bx ensure_push(SEQ[Bx]) */
90
- OP_EPOP,/* A A.times{ensure_pop().call} */
91
-
92
- OP_SEND,/* A B C R(A) := call(R(A),Syms(B),R(A+1),...,R(A+C)) */
93
- OP_SENDB,/* A B C R(A) := call(R(A),Syms(B),R(A+1),...,R(A+C),&R(A+C+1))*/
94
- OP_FSEND,/* A B C R(A) := fcall(R(A),Syms(B),R(A+1),...,R(A+C-1)) */
95
- OP_CALL,/* A R(A) := self.call(frame.argc, frame.argv) */
96
- OP_SUPER,/* A C R(A) := super(R(A+1),... ,R(A+C+1)) */
97
- OP_ARGARY,/* A Bx R(A) := argument array (16=6:1:5:4) */
98
- OP_ENTER,/* Ax arg setup according to flags (23=5:5:1:5:5:1:1) */
99
- OP_KARG,/* A B C R(A) := kdict[Syms(B)]; if C kdict.rm(Syms(B)) */
100
- OP_KDICT,/* A C R(A) := kdict */
101
-
102
- OP_RETURN,/* A B return R(A) (B=normal,in-block return/break) */
103
- OP_TAILCALL,/* A B C return call(R(A),Syms(B),*R(C)) */
104
- OP_BLKPUSH,/* A Bx R(A) := block (16=6:1:5:4) */
105
-
106
- OP_ADD,/* A B C R(A) := R(A)+R(A+1) (Syms[B]=:+,C=1) */
107
- OP_ADDI,/* A B C R(A) := R(A)+C (Syms[B]=:+) */
108
- OP_SUB,/* A B C R(A) := R(A)-R(A+1) (Syms[B]=:-,C=1) */
109
- OP_SUBI,/* A B C R(A) := R(A)-C (Syms[B]=:-) */
110
- OP_MUL,/* A B C R(A) := R(A)*R(A+1) (Syms[B]=:*,C=1) */
111
- OP_DIV,/* A B C R(A) := R(A)/R(A+1) (Syms[B]=:/,C=1) */
112
- OP_EQ,/* A B C R(A) := R(A)==R(A+1) (Syms[B]=:==,C=1) */
113
- OP_LT,/* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1) */
114
- OP_LE,/* A B C R(A) := R(A)<=R(A+1) (Syms[B]=:<=,C=1) */
115
- OP_GT,/* A B C R(A) := R(A)>R(A+1) (Syms[B]=:>,C=1) */
116
- OP_GE,/* A B C R(A) := R(A)>=R(A+1) (Syms[B]=:>=,C=1) */
117
-
118
- OP_ARRAY,/* A B C R(A) := ary_new(R(B),R(B+1)..R(B+C)) */
119
- OP_ARYCAT,/* A B ary_cat(R(A),R(B)) */
120
- OP_ARYPUSH,/* A B ary_push(R(A),R(B)) */
121
- OP_AREF,/* A B C R(A) := R(B)[C] */
122
- OP_ASET,/* A B C R(B)[C] := R(A) */
123
- OP_APOST,/* A B C *R(A),R(A+1)..R(A+C) := R(A) */
124
-
125
- OP_STRING,/* A Bx R(A) := str_dup(Lit(Bx)) */
126
- OP_STRCAT,/* A B str_cat(R(A),R(B)) */
127
-
128
- OP_HASH,/* A B C R(A) := hash_new(R(B),R(B+1)..R(B+C)) */
129
- OP_LAMBDA,/* A Bz Cz R(A) := lambda(SEQ[Bz],Cz) */
130
- OP_RANGE,/* A B C R(A) := range_new(R(B),R(B+1),C) */
131
-
132
- OP_OCLASS,/* A R(A) := ::Object */
133
- OP_CLASS,/* A B R(A) := newclass(R(A),Syms(B),R(A+1)) */
134
- OP_MODULE,/* A B R(A) := newmodule(R(A),Syms(B)) */
135
- OP_EXEC,/* A Bx R(A) := blockexec(R(A),SEQ[Bx]) */
136
- OP_METHOD,/* A B R(A).newmethod(Syms(B),R(A+1)) */
137
- OP_SCLASS,/* A B R(A) := R(B).singleton_class */
138
- OP_TCLASS,/* A R(A) := target_class */
139
-
140
- OP_DEBUG,/* A B C print R(A),R(B),R(C) */
141
- OP_STOP,/* stop VM */
142
- OP_ERR,/* Bx raise RuntimeError with message Lit(Bx) */
143
-
144
- OP_RSVD1,/* reserved instruction #1 */
145
- OP_RSVD2,/* reserved instruction #2 */
146
- OP_RSVD3,/* reserved instruction #3 */
147
- OP_RSVD4,/* reserved instruction #4 */
148
- OP_RSVD5,/* reserved instruction #5 */
10
+ enum mrb_insn {
11
+ #define OPCODE(x,_) OP_ ## x,
12
+ #include "mruby/ops.h"
13
+ #undef OPCODE
149
14
  };
150
15
 
151
16
  #define OP_L_STRICT 1
@@ -158,4 +23,47 @@ enum {
158
23
  #define OP_R_BREAK 1
159
24
  #define OP_R_RETURN 2
160
25
 
26
+ #define PEEK_B(pc) (*(pc))
27
+ #define PEEK_S(pc) ((pc)[0]<<8|(pc)[1])
28
+ #define PEEK_W(pc) ((pc)[0]<<16|(pc)[1]<<8|(pc)[2])
29
+
30
+ #define READ_B() PEEK_B(pc++)
31
+ #define READ_S() (pc+=2, PEEK_S(pc-2))
32
+ #define READ_W() (pc+=3, PEEK_W(pc-3))
33
+
34
+ #define FETCH_Z() /* nothing */
35
+ #define FETCH_B() do {a=READ_B();} while (0)
36
+ #define FETCH_BB() do {a=READ_B(); b=READ_B();} while (0)
37
+ #define FETCH_BBB() do {a=READ_B(); b=READ_B(); c=READ_B();} while (0)
38
+ #define FETCH_BS() do {a=READ_B(); b=READ_S();} while (0)
39
+ #define FETCH_S() do {a=READ_S();} while (0)
40
+ #define FETCH_W() do {a=READ_W();} while (0)
41
+
42
+ /* with OP_EXT1 (1st 16bit) */
43
+ #define FETCH_Z_1() FETCH_Z()
44
+ #define FETCH_B_1() FETCH_S()
45
+ #define FETCH_BB_1() do {a=READ_S(); b=READ_B();} while (0)
46
+ #define FETCH_BBB_1() do {a=READ_S(); b=READ_B(); c=READ_B();} while (0)
47
+ #define FETCH_BS_1() do {a=READ_S(); b=READ_S();} while (0)
48
+ #define FETCH_S_1() FETCH_S()
49
+ #define FETCH_W_1() FETCH_W()
50
+
51
+ /* with OP_EXT2 (2nd 16bit) */
52
+ #define FETCH_Z_2() FETCH_Z()
53
+ #define FETCH_B_2() FETCH_B()
54
+ #define FETCH_BB_2() do {a=READ_B(); b=READ_S();} while (0)
55
+ #define FETCH_BBB_2() do {a=READ_B(); b=READ_S(); c=READ_B();} while (0)
56
+ #define FETCH_BS_2() FETCH_BS()
57
+ #define FETCH_S_2() FETCH_S()
58
+ #define FETCH_W_2() FETCH_W()
59
+
60
+ /* with OP_EXT3 (1st & 2nd 16bit) */
61
+ #define FETCH_Z_3() FETCH_Z()
62
+ #define FETCH_B_3() FETCH_B()
63
+ #define FETCH_BB_3() do {a=READ_S(); b=READ_S();} while (0)
64
+ #define FETCH_BBB_3() do {a=READ_S(); b=READ_S(); c=READ_B();} while (0)
65
+ #define FETCH_BS_3() do {a=READ_S(); b=READ_S();} while (0)
66
+ #define FETCH_S_3() FETCH_S()
67
+ #define FETCH_W_3() FETCH_W()
68
+
161
69
  #endif /* MRUBY_OPCODE_H */
@@ -0,0 +1,117 @@
1
+ /* operand types:
2
+ + Z: no operand (Z,Z,Z,Z)
3
+ + B: 8bit (B,S,B,B)
4
+ + BB: 8+8bit (BB,SB,BS,SS)
5
+ + BBB: 8+8+8bit (BBB,SBB,BSB,SSB)
6
+ + BS: 8+16bit (BS,SS,BS,BS)
7
+ + S: 16bit (S,S,S,S)
8
+ + W: 24bit (W,W,W,W)
9
+ */
10
+
11
+ /*-----------------------------------------------------------------------
12
+ operation code operands semantics
13
+ ------------------------------------------------------------------------*/
14
+ OPCODE(NOP, Z) /* no operation */
15
+ OPCODE(MOVE, BB) /* R(a) = R(b) */
16
+ OPCODE(LOADL, BB) /* R(a) = Pool(b) */
17
+ OPCODE(LOADI, BB) /* R(a) = mrb_int(b) */
18
+ OPCODE(LOADINEG, BB) /* R(a) = mrb_int(-b) */
19
+ OPCODE(LOADI__1, B) /* R(a) = mrb_int(-1) */
20
+ OPCODE(LOADI_0, B) /* R(a) = mrb_int(0) */
21
+ OPCODE(LOADI_1, B) /* R(a) = mrb_int(1) */
22
+ OPCODE(LOADI_2, B) /* R(a) = mrb_int(2) */
23
+ OPCODE(LOADI_3, B) /* R(a) = mrb_int(3) */
24
+ OPCODE(LOADI_4, B) /* R(a) = mrb_int(4) */
25
+ OPCODE(LOADI_5, B) /* R(a) = mrb_int(5) */
26
+ OPCODE(LOADI_6, B) /* R(a) = mrb_int(6) */
27
+ OPCODE(LOADI_7, B) /* R(a) = mrb_int(7) */
28
+ OPCODE(LOADSYM, BB) /* R(a) = Syms(b) */
29
+ OPCODE(LOADNIL, B) /* R(a) = nil */
30
+ OPCODE(LOADSELF, B) /* R(a) = self */
31
+ OPCODE(LOADT, B) /* R(a) = true */
32
+ OPCODE(LOADF, B) /* R(a) = false */
33
+ OPCODE(GETGV, BB) /* R(a) = getglobal(Syms(b)) */
34
+ OPCODE(SETGV, BB) /* setglobal(Syms(b), R(a)) */
35
+ OPCODE(GETSV, BB) /* R(a) = Special[Syms(b)] */
36
+ OPCODE(SETSV, BB) /* Special[Syms(b)] = R(a) */
37
+ OPCODE(GETIV, BB) /* R(a) = ivget(Syms(b)) */
38
+ OPCODE(SETIV, BB) /* ivset(Syms(b),R(a)) */
39
+ OPCODE(GETCV, BB) /* R(a) = cvget(Syms(b)) */
40
+ OPCODE(SETCV, BB) /* cvset(Syms(b),R(a)) */
41
+ OPCODE(GETCONST, BB) /* R(a) = constget(Syms(b)) */
42
+ OPCODE(SETCONST, BB) /* constset(Syms(b),R(a)) */
43
+ OPCODE(GETMCNST, BB) /* R(a) = R(a)::Syms(b) */
44
+ OPCODE(SETMCNST, BB) /* R(a+1)::Syms(b) = R(a) */
45
+ OPCODE(GETUPVAR, BBB) /* R(a) = uvget(b,c) */
46
+ OPCODE(SETUPVAR, BBB) /* uvset(b,c,R(a)) */
47
+ OPCODE(JMP, S) /* pc=a */
48
+ OPCODE(JMPIF, BS) /* if R(b) pc=a */
49
+ OPCODE(JMPNOT, BS) /* if !R(b) pc=a */
50
+ OPCODE(JMPNIL, BS) /* if R(b)==nil pc=a */
51
+ OPCODE(ONERR, S) /* rescue_push(a) */
52
+ OPCODE(EXCEPT, B) /* R(a) = exc */
53
+ OPCODE(RESCUE, BB) /* R(b) = R(a).isa?(R(b)) */
54
+ OPCODE(POPERR, B) /* a.times{rescue_pop()} */
55
+ OPCODE(RAISE, B) /* raise(R(a)) */
56
+ OPCODE(EPUSH, B) /* ensure_push(SEQ[a]) */
57
+ OPCODE(EPOP, B) /* A.times{ensure_pop().call} */
58
+ OPCODE(SENDV, BB) /* R(a) = call(R(a),Syms(b),*R(a+1)) */
59
+ OPCODE(SENDVB, BB) /* R(a) = call(R(a),Syms(b),*R(a+1),&R(a+2)) */
60
+ OPCODE(SEND, BBB) /* R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c)) */
61
+ OPCODE(SENDB, BBB) /* R(a) = call(R(a),Syms(Bx),R(a+1),...,R(a+c),&R(a+c+1)) */
62
+ OPCODE(CALL, Z) /* R(0) = self.call(frame.argc, frame.argv) */
63
+ OPCODE(SUPER, BB) /* R(a) = super(R(a+1),... ,R(a+b+1)) */
64
+ OPCODE(ARGARY, BS) /* R(a) = argument array (16=m5:r1:m5:d1:lv4) */
65
+ OPCODE(ENTER, W) /* arg setup according to flags (23=m5:o5:r1:m5:k5:d1:b1) */
66
+ OPCODE(KEY_P, BB) /* R(a) = kdict.key?(Syms(b)) # todo */
67
+ OPCODE(KEYEND, Z) /* raise unless kdict.empty? # todo */
68
+ OPCODE(KARG, BB) /* R(a) = kdict[Syms(b)]; kdict.delete(Syms(b)) # todo */
69
+ OPCODE(RETURN, B) /* return R(a) (normal) */
70
+ OPCODE(RETURN_BLK, B) /* return R(a) (in-block return) */
71
+ OPCODE(BREAK, B) /* break R(a) */
72
+ OPCODE(BLKPUSH, BS) /* R(a) = block (16=m5:r1:m5:d1:lv4) */
73
+ OPCODE(ADD, B) /* R(a) = R(a)+R(a+1) */
74
+ OPCODE(ADDI, BB) /* R(a) = R(a)+mrb_int(c) */
75
+ OPCODE(SUB, B) /* R(a) = R(a)-R(a+1) */
76
+ OPCODE(SUBI, BB) /* R(a) = R(a)-C */
77
+ OPCODE(MUL, B) /* R(a) = R(a)*R(a+1) */
78
+ OPCODE(DIV, B) /* R(a) = R(a)/R(a+1) */
79
+ OPCODE(EQ, B) /* R(a) = R(a)==R(a+1) */
80
+ OPCODE(LT, B) /* R(a) = R(a)<R(a+1) */
81
+ OPCODE(LE, B) /* R(a) = R(a)<=R(a+1) */
82
+ OPCODE(GT, B) /* R(a) = R(a)>R(a+1) */
83
+ OPCODE(GE, B) /* R(a) = R(a)>=R(a+1) */
84
+ OPCODE(ARRAY, BB) /* R(a) = ary_new(R(a),R(a+1)..R(a+b)) */
85
+ OPCODE(ARRAY2, BBB) /* R(a) = ary_new(R(b),R(b+1)..R(b+c)) */
86
+ OPCODE(ARYCAT, B) /* ary_cat(R(a),R(a+1)) */
87
+ OPCODE(ARYPUSH, B) /* ary_push(R(a),R(a+1)) */
88
+ OPCODE(ARYDUP, B) /* R(a) = ary_dup(R(a)) */
89
+ OPCODE(AREF, BBB) /* R(a) = R(b)[c] */
90
+ OPCODE(ASET, BBB) /* R(a)[c] = R(b) */
91
+ OPCODE(APOST, BBB) /* *R(a),R(a+1)..R(a+C) = R(a)[b..] */
92
+ OPCODE(INTERN, B) /* R(a) = intern(R(a)) */
93
+ OPCODE(STRING, BB) /* R(a) = str_dup(Lit(b)) */
94
+ OPCODE(STRCAT, B) /* str_cat(R(a),R(a+1)) */
95
+ OPCODE(HASH, BB) /* R(a) = hash_new(R(a),R(a+1)..R(a+b)) */
96
+ OPCODE(HASHADD, BB) /* R(a) = hash_push(R(a),R(a+1)..R(a+b)) */
97
+ OPCODE(HASHCAT, B) /* R(a) = hash_cat(R(a),R(a+1)) */
98
+ OPCODE(LAMBDA, BB) /* R(a) = lambda(SEQ[b],L_LAMBDA) */
99
+ OPCODE(BLOCK, BB) /* R(a) = lambda(SEQ[b],L_BLOCK) */
100
+ OPCODE(METHOD, BB) /* R(a) = lambda(SEQ[b],L_METHOD) */
101
+ OPCODE(RANGE_INC, B) /* R(a) = range_new(R(a),R(a+1),FALSE) */
102
+ OPCODE(RANGE_EXC, B) /* R(a) = range_new(R(a),R(a+1),TRUE) */
103
+ OPCODE(OCLASS, B) /* R(a) = ::Object */
104
+ OPCODE(CLASS, BB) /* R(a) = newclass(R(a),Syms(b),R(a+1)) */
105
+ OPCODE(MODULE, BB) /* R(a) = newmodule(R(a),Syms(b)) */
106
+ OPCODE(EXEC, BB) /* R(a) = blockexec(R(a),SEQ[b]) */
107
+ OPCODE(DEF, BB) /* R(a).newmethod(Syms(b),R(a+1)) */
108
+ OPCODE(ALIAS, BB) /* alias_method(target_class,Syms(a),Syms(b)) */
109
+ OPCODE(UNDEF, B) /* undef_method(target_class,Syms(a)) */
110
+ OPCODE(SCLASS, B) /* R(a) = R(a).singleton_class */
111
+ OPCODE(TCLASS, B) /* R(a) = target_class */
112
+ OPCODE(DEBUG, BBB) /* print a,b,c */
113
+ OPCODE(ERR, B) /* raise(LocalJumpError, Lit(a)) */
114
+ OPCODE(EXT1, Z) /* make 1st operand 16bit */
115
+ OPCODE(EXT2, Z) /* make 2nd operand 16bit */
116
+ OPCODE(EXT3, Z) /* make 1st and 2nd operands 16bit */
117
+ OPCODE(STOP, Z) /* stop VM */
@@ -88,7 +88,7 @@ MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int
88
88
  void mrb_proc_copy(struct RProc *a, struct RProc *b);
89
89
 
90
90
  /* implementation of #send method */
91
- MRB_API mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
91
+ mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
92
92
 
93
93
  /* following functions are defined in mruby-proc-ext so please include it when using */
94
94
  MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state*, mrb_func_t, mrb_int, const mrb_value*);
@@ -98,8 +98,8 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state*, mrb_int);
98
98
 
99
99
  #ifdef MRB_METHOD_TABLE_INLINE
100
100
 
101
- #define MRB_METHOD_FUNC_FL ((uintptr_t)1U<<(sizeof(uintptr_t)*8-1))
102
- #define MRB_METHOD_FUNC_P(m) ((uintptr_t)(m)&MRB_METHOD_FUNC_FL)
101
+ #define MRB_METHOD_FUNC_FL ((uintptr_t)1)
102
+ #define MRB_METHOD_FUNC_P(m) (((uintptr_t)(m))&MRB_METHOD_FUNC_FL)
103
103
  #define MRB_METHOD_FUNC(m) ((mrb_func_t)((uintptr_t)(m)&(~MRB_METHOD_FUNC_FL)))
104
104
  #define MRB_METHOD_FROM_FUNC(m,fn) m=(mrb_method_t)((struct RProc*)((uintptr_t)(fn)|MRB_METHOD_FUNC_FL))
105
105
  #define MRB_METHOD_FROM_PROC(m,pr) m=(mrb_method_t)(struct RProc*)(pr)
@@ -114,7 +114,7 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state*, mrb_int);
114
114
  #define MRB_METHOD_FROM_FUNC(m,fn) do{(m).func_p=TRUE;(m).func=(fn);}while(0)
115
115
  #define MRB_METHOD_FROM_PROC(m,pr) do{(m).func_p=FALSE;(m).proc=(pr);}while(0)
116
116
  #define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
117
- #define MRB_METHOD_PROC(fn) ((m).proc)
117
+ #define MRB_METHOD_PROC(m) ((m).proc)
118
118
  #define MRB_METHOD_UNDEF_P(m) ((m).proc==NULL)
119
119
 
120
120
  #endif /* MRB_METHOD_TABLE_INLINE */
@@ -102,7 +102,7 @@ MRB_API mrb_int mrb_str_index(mrb_state*, mrb_value, const char*, mrb_int, mrb_i
102
102
  #define mrb_str_index_lit(mrb, str, lit, off) mrb_str_index(mrb, str, lit, mrb_strlen_lit(lit), off);
103
103
 
104
104
  /*
105
- * Appends self to other. Returns self as a concatnated string.
105
+ * Appends self to other. Returns self as a concatenated string.
106
106
  *
107
107
  *
108
108
  * Example:
@@ -126,10 +126,10 @@ MRB_API mrb_int mrb_str_index(mrb_state*, mrb_value, const char*, mrb_int, mrb_i
126
126
  * str1 = mrb_str_new_lit(mrb, "abc");
127
127
  * str2 = mrb_str_new_lit(mrb, "def");
128
128
  *
129
- * // Concatnates str2 to str1.
129
+ * // Concatenates str2 to str1.
130
130
  * mrb_str_concat(mrb, str1, str2);
131
131
  *
132
- * // Prints new Concatnated Ruby string.
132
+ * // Prints new Concatenated Ruby string.
133
133
  * mrb_p(mrb, str1);
134
134
  *
135
135
  * mrb_close(mrb);
@@ -178,10 +178,10 @@ MRB_API void mrb_str_concat(mrb_state*, mrb_value, mrb_value);
178
178
  * mrb_p(mrb, a);
179
179
  * mrb_p(mrb, b);
180
180
  *
181
- * // Concatnates both Ruby strings.
181
+ * // Concatenates both Ruby strings.
182
182
  * c = mrb_str_plus(mrb, a, b);
183
183
  *
184
- * // Prints new Concatnated Ruby string.
184
+ * // Prints new Concatenated Ruby string.
185
185
  * mrb_p(mrb, c);
186
186
  *
187
187
  * mrb_close(mrb);
@@ -193,7 +193,7 @@ MRB_API void mrb_str_concat(mrb_state*, mrb_value, mrb_value);
193
193
  *
194
194
  * => "abc" # First string
195
195
  * => "def" # Second string
196
- * => "abcdef" # First & Second concatnated.
196
+ * => "abcdef" # First & Second concatenated.
197
197
  *
198
198
  * @param [mrb_state] mrb The current mruby state.
199
199
  * @param [mrb_value] a First string to concatenate.
@@ -311,9 +311,12 @@ MRB_API mrb_value mrb_str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb
311
311
  * @param [mrb_value] str Ruby string.
312
312
  * @return [mrb_value] A Ruby string.
313
313
  */
314
+ MRB_API mrb_value mrb_ensure_string_type(mrb_state *mrb, mrb_value str);
315
+ MRB_API mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str);
316
+ /* obsolete: use mrb_ensure_string_type() instead */
314
317
  MRB_API mrb_value mrb_string_type(mrb_state *mrb, mrb_value str);
315
318
 
316
- MRB_API mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str);
319
+
317
320
  MRB_API mrb_value mrb_str_new_capa(mrb_state *mrb, size_t capa);
318
321
  MRB_API mrb_value mrb_str_buf_new(mrb_state *mrb, size_t capa);
319
322
 
@@ -353,6 +356,7 @@ MRB_API double mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck);
353
356
 
354
357
  /*
355
358
  * Returns a converted string type.
359
+ * For type checking, non converting `mrb_to_str` is recommended.
356
360
  */
357
361
  MRB_API mrb_value mrb_str_to_str(mrb_state *mrb, mrb_value str);
358
362