ruby2d 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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