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
@@ -36,12 +36,10 @@
36
36
  /* size of the method cache (need to be the power of 2) */
37
37
  //#define MRB_METHOD_CACHE_SIZE (1<<7)
38
38
 
39
- /* add -DMRB_METHOD_TABLE_INLINE unless platform uses MSB of pointers */
39
+ /* add -DMRB_METHOD_TABLE_INLINE to reduce the size of method table */
40
+ /* MRB_METHOD_TABLE_INLINE requires LSB of function pointers to be zero */
41
+ /* you might need to specify --falign-functions=n (where n>1) */
40
42
  //#define MRB_METHOD_TABLE_INLINE
41
- /* turn MRB_METHOD_TABLE_INLINE on for linux by default */
42
- #if !defined(MRB_METHOD_TABLE_INLINE) && defined(__linux__)
43
- # define MRB_METHOD_TABLE_INLINE
44
- #endif
45
43
 
46
44
  /* add -DMRB_INT16 to use 16bit integer for mrb_int; conflict with MRB_INT64 */
47
45
  //#define MRB_INT16
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  ** mruby - An embeddable Ruby implementation
3
3
  **
4
- ** Copyright (c) mruby developers 2010-2017
4
+ ** Copyright (c) mruby developers 2010-2018
5
5
  **
6
6
  ** Permission is hereby granted, free of charge, to any person obtaining
7
7
  ** a copy of this software and associated documentation files (the
@@ -93,7 +93,7 @@
93
93
  */
94
94
  MRB_BEGIN_DECL
95
95
 
96
- typedef uint32_t mrb_code;
96
+ typedef uint8_t mrb_code;
97
97
 
98
98
  /**
99
99
  * Required arguments signature type.
@@ -123,9 +123,8 @@ typedef struct {
123
123
  mrb_sym mid;
124
124
  struct RProc *proc;
125
125
  mrb_value *stackent;
126
- int nregs;
127
- int ridx;
128
- int epos;
126
+ uint16_t ridx;
127
+ uint16_t epos;
129
128
  struct REnv *env;
130
129
  mrb_code *pc; /* return address */
131
130
  mrb_code *err; /* error position */
@@ -152,10 +151,10 @@ struct mrb_context {
152
151
  mrb_callinfo *ci;
153
152
  mrb_callinfo *cibase, *ciend;
154
153
 
155
- mrb_code **rescue; /* exception handler stack */
156
- int rsize;
154
+ uint16_t *rescue; /* exception handler stack */
155
+ uint16_t rsize;
157
156
  struct RProc **ensure; /* ensure handler stack */
158
- int esize, eidx;
157
+ uint16_t esize, eidx;
159
158
 
160
159
  enum mrb_fiber_state status;
161
160
  mrb_bool vmexec;
@@ -186,7 +185,7 @@ typedef struct {
186
185
 
187
186
  #ifdef MRB_METHOD_CACHE
188
187
  struct mrb_cache_entry {
189
- struct RClass *c;
188
+ struct RClass *c, *c0;
190
189
  mrb_sym mid;
191
190
  mrb_method_t m;
192
191
  };
@@ -268,7 +267,8 @@ typedef struct mrb_state {
268
267
  #else
269
268
  mrb_atexit_func *atexit_stack;
270
269
  #endif
271
- mrb_int atexit_stack_len;
270
+ uint16_t atexit_stack_len;
271
+ uint16_t ecall_nest; /* prevent infinite recursive ecall() */
272
272
  } mrb_state;
273
273
 
274
274
  /**
@@ -386,7 +386,7 @@ MRB_API void mrb_define_class_method(mrb_state *, struct RClass *, const char *,
386
386
  MRB_API void mrb_define_singleton_method(mrb_state*, struct RObject*, const char*, mrb_func_t, mrb_aspec);
387
387
 
388
388
  /**
389
- * Defines a module fuction.
389
+ * Defines a module function.
390
390
  *
391
391
  * Example:
392
392
  *
@@ -486,9 +486,10 @@ MRB_API void mrb_define_const(mrb_state*, struct RClass*, const char *name, mrb_
486
486
  * }
487
487
  * @param [mrb_state*] mrb_state* The mruby state reference.
488
488
  * @param [struct RClass*] RClass* A class the method will be undefined from.
489
- * @param [const char*] constchar* The name of the method to be undefined.
489
+ * @param [const char] const char* The name of the method to be undefined.
490
490
  */
491
491
  MRB_API void mrb_undef_method(mrb_state*, struct RClass*, const char*);
492
+ MRB_API void mrb_undef_method_id(mrb_state*, struct RClass*, mrb_sym);
492
493
 
493
494
  /**
494
495
  * Undefine a class method.
@@ -530,7 +531,7 @@ MRB_API void mrb_undef_method(mrb_state*, struct RClass*, const char*);
530
531
  MRB_API void mrb_undef_class_method(mrb_state*, struct RClass*, const char*);
531
532
 
532
533
  /**
533
- * Initialize a new object instace of c class.
534
+ * Initialize a new object instance of c class.
534
535
  *
535
536
  * Example:
536
537
  *
@@ -716,7 +717,6 @@ MRB_API mrb_value mrb_notimplement_m(mrb_state*, mrb_value);
716
717
  * @return [mrb_value] The newly duplicated object.
717
718
  */
718
719
  MRB_API mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj);
719
- MRB_API mrb_value mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method);
720
720
 
721
721
  /**
722
722
  * Returns true if obj responds to the given method. If the method was defined for that
@@ -783,7 +783,7 @@ MRB_API struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *o
783
783
  #define MRB_ARGS_REQ(n) ((mrb_aspec)((n)&0x1f) << 18)
784
784
 
785
785
  /**
786
- * Funtion takes n optional arguments
786
+ * Function takes n optional arguments
787
787
  *
788
788
  * @param n
789
789
  * The number of optional arguments.
@@ -791,7 +791,7 @@ MRB_API struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *o
791
791
  #define MRB_ARGS_OPT(n) ((mrb_aspec)((n)&0x1f) << 13)
792
792
 
793
793
  /**
794
- * Funtion takes n1 mandatory arguments and n2 optional arguments
794
+ * Function takes n1 mandatory arguments and n2 optional arguments
795
795
  *
796
796
  * @param n1
797
797
  * The number of required arguments.
@@ -829,22 +829,22 @@ MRB_API struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *o
829
829
  *
830
830
  * Must be a C string composed of the following format specifiers:
831
831
  *
832
- * | char | Ruby type | C types | Notes |
832
+ * | char | Ruby type | C types | Notes |
833
833
  * |:----:|----------------|-------------------|----------------------------------------------------|
834
834
  * | `o` | {Object} | {mrb_value} | Could be used to retrieve any type of argument |
835
835
  * | `C` | {Class}/{Module} | {mrb_value} | |
836
836
  * | `S` | {String} | {mrb_value} | when `!` follows, the value may be `nil` |
837
837
  * | `A` | {Array} | {mrb_value} | when `!` follows, the value may be `nil` |
838
838
  * | `H` | {Hash} | {mrb_value} | when `!` follows, the value may be `nil` |
839
- * | `s` | {String} | char *, {mrb_int} | Receive two arguments; `s!` gives (`NULL`,`0`) for `nil` |
839
+ * | `s` | {String} | char *, {mrb_int} | Receive two arguments; `s!` gives (`NULL`,`0`) for `nil` |
840
840
  * | `z` | {String} | char * | `NULL` terminated string; `z!` gives `NULL` for `nil` |
841
841
  * | `a` | {Array} | {mrb_value} *, {mrb_int} | Receive two arguments; `a!` gives (`NULL`,`0`) for `nil` |
842
842
  * | `f` | {Float} | {mrb_float} | |
843
843
  * | `i` | {Integer} | {mrb_int} | |
844
844
  * | `b` | boolean | {mrb_bool} | |
845
845
  * | `n` | {Symbol} | {mrb_sym} | |
846
- * | `&` | block | {mrb_value} | |
847
- * | `*` | rest arguments | {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array. |
846
+ * | `&` | block | {mrb_value} | &! raises exception if no block given. |
847
+ * | `*` | rest arguments | {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array; *! avoid copy of the stack. |
848
848
  * | &vert; | optional | | After this spec following specs would be optional. |
849
849
  * | `?` | optional given | {mrb_bool} | `TRUE` if preceding argument is given. Used to check optional argument is given. |
850
850
  *
@@ -855,10 +855,6 @@ typedef const char *mrb_args_format;
855
855
  /**
856
856
  * Retrieve arguments from mrb_state.
857
857
  *
858
- * When applicable, implicit conversions (such as `to_str`, `to_ary`, `to_hash`) are
859
- * applied to received arguments.
860
- * Used inside a function of mrb_func_t type.
861
- *
862
858
  * @param mrb The current MRuby state.
863
859
  * @param format [mrb_args_format] is a list of format specifiers
864
860
  * @param ... The passing variadic arguments must be a pointer of retrieving type.
@@ -994,13 +990,13 @@ MRB_API mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len);
994
990
  #define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
995
991
 
996
992
  #ifdef _WIN32
997
- char* mrb_utf8_from_locale(const char *p, int len);
998
- char* mrb_locale_from_utf8(const char *p, int len);
993
+ MRB_API char* mrb_utf8_from_locale(const char *p, int len);
994
+ MRB_API char* mrb_locale_from_utf8(const char *p, int len);
999
995
  #define mrb_locale_free(p) free(p)
1000
996
  #define mrb_utf8_free(p) free(p)
1001
997
  #else
1002
- #define mrb_utf8_from_locale(p, l) (p)
1003
- #define mrb_locale_from_utf8(p, l) (p)
998
+ #define mrb_utf8_from_locale(p, l) ((char*)p)
999
+ #define mrb_locale_from_utf8(p, l) ((char*)p)
1004
1000
  #define mrb_locale_free(p)
1005
1001
  #define mrb_utf8_free(p)
1006
1002
  #endif
@@ -1095,9 +1091,6 @@ mrb_gc_arena_restore(mrb_state *mrb, int idx)
1095
1091
  mrb->gc.arena_idx = idx;
1096
1092
  }
1097
1093
 
1098
- MRB_API int mrb_gc_arena_save(mrb_state*);
1099
- MRB_API void mrb_gc_arena_restore(mrb_state*,int);
1100
-
1101
1094
  MRB_API void mrb_garbage_collect(mrb_state*);
1102
1095
  MRB_API void mrb_full_gc(mrb_state*);
1103
1096
  MRB_API void mrb_incremental_gc(mrb_state *);
@@ -1164,6 +1157,7 @@ MRB_API void mrb_print_error(mrb_state *mrb);
1164
1157
  #define E_SYNTAX_ERROR (mrb_exc_get(mrb, "SyntaxError"))
1165
1158
  #define E_LOCALJUMP_ERROR (mrb_exc_get(mrb, "LocalJumpError"))
1166
1159
  #define E_REGEXP_ERROR (mrb_exc_get(mrb, "RegexpError"))
1160
+ #define E_FROZEN_ERROR (mrb_exc_get(mrb, "FrozenError"))
1167
1161
 
1168
1162
  #define E_NOTIMP_ERROR (mrb_exc_get(mrb, "NotImplementedError"))
1169
1163
  #ifndef MRB_WITHOUT_FLOAT
@@ -1190,6 +1184,7 @@ MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value obj);
1190
1184
 
1191
1185
  MRB_API mrb_value mrb_to_int(mrb_state *mrb, mrb_value val);
1192
1186
  #define mrb_int(mrb, val) mrb_fixnum(mrb_to_int(mrb, val))
1187
+ MRB_API mrb_value mrb_to_str(mrb_state *mrb, mrb_value val);
1193
1188
  MRB_API void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t);
1194
1189
 
1195
1190
  typedef enum call_type {
@@ -1199,7 +1194,7 @@ typedef enum call_type {
1199
1194
  CALL_TYPE_MAX
1200
1195
  } call_type;
1201
1196
 
1202
- MRB_API void mrb_define_alias(mrb_state *mrb, struct RClass *klass, const char *name1, const char *name2);
1197
+ MRB_API void mrb_define_alias(mrb_state *mrb, struct RClass *c, const char *a, const char *b);
1203
1198
  MRB_API const char *mrb_class_name(mrb_state *mrb, struct RClass* klass);
1204
1199
  MRB_API void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val);
1205
1200
 
@@ -1224,12 +1219,20 @@ MRB_API mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc,
1224
1219
  */
1225
1220
  MRB_API mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv);
1226
1221
 
1222
+ /*
1223
+ * Check if a Fiber is alive
1224
+ *
1225
+ * @mrbgem mruby-fiber
1226
+ */
1227
+ MRB_API mrb_value mrb_fiber_alive_p(mrb_state *mrb, mrb_value fib);
1228
+
1227
1229
  /*
1228
1230
  * FiberError reference
1229
1231
  *
1230
1232
  * @mrbgem mruby-fiber
1231
1233
  */
1232
1234
  #define E_FIBER_ERROR (mrb_exc_get(mrb, "FiberError"))
1235
+ MRB_API void mrb_stack_extend(mrb_state*, mrb_int);
1233
1236
 
1234
1237
  /* memory pool implementation */
1235
1238
  typedef struct mrb_pool mrb_pool;
@@ -199,6 +199,7 @@ MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val
199
199
  * @param other The array to replace it with.
200
200
  */
201
201
  MRB_API void mrb_ary_replace(mrb_state *mrb, mrb_value self, mrb_value other);
202
+ MRB_API mrb_value mrb_ensure_array_type(mrb_state *mrb, mrb_value self);
202
203
  MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self);
203
204
 
204
205
  /*
@@ -45,6 +45,14 @@ enum mrb_special_consts {
45
45
  #define MRB_SYMBOL_FLAG 0x0e
46
46
  #define MRB_SPECIAL_SHIFT 8
47
47
 
48
+ #if defined(MRB_64BIT)
49
+ #define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT)
50
+ #define MRB_SYMBOL_MAX UINT32_MAX
51
+ #else
52
+ #define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT - MRB_SPECIAL_SHIFT)
53
+ #define MRB_SYMBOL_MAX (UINT32_MAX >> MRB_SPECIAL_SHIFT)
54
+ #endif
55
+
48
56
  typedef union mrb_value {
49
57
  union {
50
58
  void *p;
@@ -54,7 +62,7 @@ typedef union mrb_value {
54
62
  };
55
63
  struct {
56
64
  unsigned int sym_flag : MRB_SPECIAL_SHIFT;
57
- mrb_sym sym : (sizeof(mrb_sym) * CHAR_BIT);
65
+ mrb_sym sym : MRB_SYMBOL_BITSIZE;
58
66
  };
59
67
  struct RBasic *bp;
60
68
  #ifndef MRB_WITHOUT_FLOAT
@@ -22,9 +22,6 @@ struct RClass {
22
22
  };
23
23
 
24
24
  #define mrb_class_ptr(v) ((struct RClass*)(mrb_ptr(v)))
25
- #define RCLASS_SUPER(v) (((struct RClass*)(mrb_ptr(v)))->super)
26
- #define RCLASS_IV_TBL(v) (((struct RClass*)(mrb_ptr(v)))->iv)
27
- #define RCLASS_M_TBL(v) (((struct RClass*)(mrb_ptr(v)))->mt)
28
25
 
29
26
  static inline struct RClass*
30
27
  mrb_class(mrb_state *mrb, mrb_value v)
@@ -53,19 +50,25 @@ mrb_class(mrb_state *mrb, mrb_value v)
53
50
  }
54
51
  }
55
52
 
56
- /* TODO: figure out where to put user flags */
57
- /* flags bits >= 18 is reserved */
58
- #define MRB_FLAG_IS_PREPENDED (1 << 19)
59
- #define MRB_FLAG_IS_ORIGIN (1 << 20)
53
+ /* flags:
54
+ 20: frozen
55
+ 19: is_prepended
56
+ 18: is_origin
57
+ 17: is_inherited (used by method cache)
58
+ 16: unused
59
+ 0-15: instance type
60
+ */
61
+ #define MRB_FL_CLASS_IS_PREPENDED (1 << 19)
62
+ #define MRB_FL_CLASS_IS_ORIGIN (1 << 18)
60
63
  #define MRB_CLASS_ORIGIN(c) do {\
61
- if (c->flags & MRB_FLAG_IS_PREPENDED) {\
64
+ if (c->flags & MRB_FL_CLASS_IS_PREPENDED) {\
62
65
  c = c->super;\
63
- while (!(c->flags & MRB_FLAG_IS_ORIGIN)) {\
66
+ while (!(c->flags & MRB_FL_CLASS_IS_ORIGIN)) {\
64
67
  c = c->super;\
65
68
  }\
66
69
  }\
67
70
  } while (0)
68
- #define MRB_FLAG_IS_INHERITED (1 << 21)
71
+ #define MRB_FL_CLASS_IS_INHERITED (1 << 17)
69
72
  #define MRB_INSTANCE_TT_MASK (0xFF)
70
73
  #define MRB_SET_INSTANCE_TT(c, tt) c->flags = ((c->flags & ~MRB_INSTANCE_TT_MASK) | (char)tt)
71
74
  #define MRB_INSTANCE_TT(c) (enum mrb_vtype)(c->flags & MRB_INSTANCE_TT_MASK)
@@ -76,7 +79,7 @@ MRB_API struct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb
76
79
  MRB_API struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym);
77
80
  MRB_API void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, mrb_method_t);
78
81
  MRB_API void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
79
- MRB_API void mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b);
82
+ MRB_API void mrb_alias_method(mrb_state*, struct RClass *c, mrb_sym a, mrb_sym b);
80
83
 
81
84
  MRB_API mrb_method_t mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym);
82
85
  MRB_API mrb_method_t mrb_method_search(mrb_state*, struct RClass*, mrb_sym);
@@ -7,6 +7,11 @@
7
7
  #ifndef MRUBY_COMMON_H
8
8
  #define MRUBY_COMMON_H
9
9
 
10
+ #ifdef __APPLE__
11
+ #ifndef __TARGETCONDITIONALS__
12
+ #include "TargetConditionals.h"
13
+ #endif
14
+ #endif
10
15
 
11
16
  #ifdef __cplusplus
12
17
  #ifdef MRB_ENABLE_CXX_ABI
@@ -33,6 +33,7 @@ typedef struct mrbc_context {
33
33
  mrb_bool no_exec:1;
34
34
  mrb_bool keep_lv:1;
35
35
  mrb_bool no_optimize:1;
36
+ mrb_bool on_eval:1;
36
37
 
37
38
  size_t parser_nerr;
38
39
  } mrbc_context;
@@ -142,7 +143,6 @@ struct mrb_parser_state {
142
143
  mrb_ast_node *heredocs_from_nextline;
143
144
  mrb_ast_node *parsing_heredoc;
144
145
  mrb_ast_node *lex_strterm_before_heredoc;
145
- mrb_bool heredoc_end_now:1; /* for mirb */
146
146
 
147
147
  void *ylval;
148
148
 
@@ -151,13 +151,14 @@ struct mrb_parser_state {
151
151
  mrb_ast_node *tree;
152
152
 
153
153
  mrb_bool no_optimize:1;
154
+ mrb_bool on_eval:1;
154
155
  mrb_bool capture_errors:1;
155
156
  struct mrb_parser_message error_buffer[10];
156
157
  struct mrb_parser_message warn_buffer[10];
157
158
 
158
159
  mrb_sym* filename_table;
159
- size_t filename_table_length;
160
- int current_filename_index;
160
+ uint16_t filename_table_length;
161
+ uint16_t current_filename_index;
161
162
 
162
163
  struct mrb_jmpbuf* jmp;
163
164
  };
@@ -55,10 +55,11 @@ MRB_API const char *mrb_debug_get_filename(mrb_irep *irep, ptrdiff_t pc);
55
55
  */
56
56
  MRB_API int32_t mrb_debug_get_line(mrb_irep *irep, ptrdiff_t pc);
57
57
 
58
+ MRB_API mrb_irep_debug_info *mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep);
58
59
  MRB_API mrb_irep_debug_info_file *mrb_debug_info_append_file(
59
- mrb_state *mrb, mrb_irep *irep,
60
+ mrb_state *mrb, mrb_irep_debug_info *info,
61
+ const char *filename, uint16_t *lines,
60
62
  uint32_t start_pos, uint32_t end_pos);
61
- MRB_API mrb_irep_debug_info *mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep);
62
63
  MRB_API void mrb_debug_info_free(mrb_state *mrb, mrb_irep_debug_info *d);
63
64
 
64
65
  MRB_END_DECL
@@ -52,11 +52,11 @@ MRB_API mrb_irep *mrb_read_irep(mrb_state*, const uint8_t*);
52
52
  /* Rite Binary File header */
53
53
  #define RITE_BINARY_IDENT "RITE"
54
54
  #define RITE_BINARY_IDENT_LIL "ETIR"
55
- #define RITE_BINARY_FORMAT_VER "0004"
55
+ #define RITE_BINARY_FORMAT_VER "0005"
56
56
  #define RITE_COMPILER_NAME "MATZ"
57
57
  #define RITE_COMPILER_VERSION "0000"
58
58
 
59
- #define RITE_VM_VER "0000"
59
+ #define RITE_VM_VER "0002"
60
60
 
61
61
  #define RITE_BINARY_EOF "END\0"
62
62
  #define RITE_SECTION_IREP_IDENT "IREP"
@@ -18,13 +18,15 @@ MRB_BEGIN_DECL
18
18
  struct RHash {
19
19
  MRB_OBJECT_HEADER;
20
20
  struct iv_tbl *iv;
21
- struct kh_ht *ht;
21
+ struct htable *ht;
22
22
  };
23
23
 
24
24
  #define mrb_hash_ptr(v) ((struct RHash*)(mrb_ptr(v)))
25
25
  #define mrb_hash_value(p) mrb_obj_value((void*)(p))
26
26
 
27
27
  MRB_API mrb_value mrb_hash_new_capa(mrb_state*, mrb_int);
28
+ MRB_API mrb_value mrb_ensure_hash_type(mrb_state *mrb, mrb_value hash);
29
+ MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
28
30
 
29
31
  /*
30
32
  * Initializes a new hash.
@@ -74,7 +76,7 @@ MRB_API mrb_value mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key);
74
76
  *
75
77
  * Equivalent to:
76
78
  *
77
- * hash.hash_key?(key) ? hash[key] : def
79
+ * hash.key?(key) ? hash[key] : def
78
80
  *
79
81
  * @param mrb The mruby state reference.
80
82
  * @param hash The target hash.
@@ -110,7 +112,19 @@ MRB_API mrb_value mrb_hash_delete_key(mrb_state *mrb, mrb_value hash, mrb_value
110
112
  * @return An array with the keys of the hash.
111
113
  */
112
114
  MRB_API mrb_value mrb_hash_keys(mrb_state *mrb, mrb_value hash);
113
- MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
115
+ /*
116
+ * Check if the hash has the key.
117
+ *
118
+ * Equivalent to:
119
+ *
120
+ * hash.key?(key)
121
+ *
122
+ * @param mrb The mruby state reference.
123
+ * @param hash The target hash.
124
+ * @param key The key to check existence.
125
+ * @return True if the hash has the key
126
+ */
127
+ MRB_API mrb_bool mrb_hash_key_p(mrb_state *mrb, mrb_value hash, mrb_value key);
114
128
 
115
129
  /*
116
130
  * Check if the hash is empty
@@ -123,7 +137,7 @@ MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
123
137
  * @param self The target hash.
124
138
  * @return True if the hash is empty, false otherwise.
125
139
  */
126
- MRB_API mrb_value mrb_hash_empty_p(mrb_state *mrb, mrb_value self);
140
+ MRB_API mrb_bool mrb_hash_empty_p(mrb_state *mrb, mrb_value self);
127
141
 
128
142
  /*
129
143
  * Gets an array of values.
@@ -151,6 +165,26 @@ MRB_API mrb_value mrb_hash_values(mrb_state *mrb, mrb_value hash);
151
165
  */
152
166
  MRB_API mrb_value mrb_hash_clear(mrb_state *mrb, mrb_value hash);
153
167
 
168
+ /*
169
+ * Copies the hash.
170
+ *
171
+ *
172
+ * @param mrb The mruby state reference.
173
+ * @param hash The target hash.
174
+ * @return The copy of the hash
175
+ */
176
+ MRB_API mrb_value mrb_hash_dup(mrb_state *mrb, mrb_value hash);
177
+
178
+ /*
179
+ * Merges two hashes. The first hash will be modified by the
180
+ * second hash.
181
+ *
182
+ * @param mrb The mruby state reference.
183
+ * @param hash1 The target hash.
184
+ * @param hash2 Updating hash
185
+ */
186
+ MRB_API void mrb_hash_merge(mrb_state *mrb, mrb_value hash1, mrb_value hash2);
187
+
154
188
  /* declaration of struct kh_ht */
155
189
  /* be careful when you touch the internal */
156
190
  typedef struct {
@@ -165,7 +199,6 @@ KHASH_DECLARE(ht, mrb_value, mrb_hash_value, TRUE)
165
199
  #define RHASH_TBL(h) (RHASH(h)->ht)
166
200
  #define RHASH_IFNONE(h) mrb_iv_get(mrb, (h), mrb_intern_lit(mrb, "ifnone"))
167
201
  #define RHASH_PROCDEFAULT(h) RHASH_IFNONE(h)
168
- MRB_API struct kh_ht * mrb_hash_tbl(mrb_state *mrb, mrb_value hash);
169
202
 
170
203
  #define MRB_HASH_DEFAULT 1
171
204
  #define MRB_HASH_PROC_DEFAULT 2