ruby2d 0.11.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. checksums.yaml +4 -4
  2. data/assets/include/GLES2/gl2.h +656 -0
  3. data/assets/include/GLES2/gl2ext.h +3949 -0
  4. data/assets/include/GLES2/gl2ext_angle.h +701 -0
  5. data/assets/include/GLES2/gl2platform.h +27 -0
  6. data/assets/include/GLES3/gl3.h +1192 -0
  7. data/assets/include/GLES3/gl31.h +1507 -0
  8. data/assets/include/GLES3/gl32.h +1808 -0
  9. data/assets/include/GLES3/gl3platform.h +27 -0
  10. data/assets/include/KHR/khrplatform.h +290 -0
  11. data/assets/include/SDL2/SDL.h +1 -0
  12. data/assets/include/SDL2/SDL_assert.h +4 -2
  13. data/assets/include/SDL2/SDL_atomic.h +20 -0
  14. data/assets/include/SDL2/SDL_audio.h +40 -4
  15. data/assets/include/SDL2/SDL_blendmode.h +4 -6
  16. data/assets/include/SDL2/SDL_clipboard.h +47 -0
  17. data/assets/include/SDL2/SDL_config.h +6 -2
  18. data/assets/include/SDL2/SDL_config_android.h +2 -0
  19. data/assets/include/SDL2/SDL_config_emscripten.h +2 -0
  20. data/assets/include/SDL2/SDL_config_iphoneos.h +3 -1
  21. data/assets/include/SDL2/SDL_config_macosx.h +3 -6
  22. data/assets/include/SDL2/SDL_config_minimal.h +18 -11
  23. data/assets/include/SDL2/SDL_config_ngage.h +89 -0
  24. data/assets/include/SDL2/SDL_config_os2.h +5 -3
  25. data/assets/include/SDL2/SDL_config_pandora.h +1 -0
  26. data/assets/include/SDL2/SDL_config_windows.h +71 -45
  27. data/assets/include/SDL2/SDL_config_wingdk.h +253 -0
  28. data/assets/include/SDL2/SDL_config_winrt.h +11 -49
  29. data/assets/include/SDL2/SDL_config_xbox.h +235 -0
  30. data/assets/include/SDL2/SDL_cpuinfo.h +39 -4
  31. data/assets/include/SDL2/SDL_egl.h +59 -9
  32. data/assets/include/SDL2/SDL_endian.h +34 -3
  33. data/assets/include/SDL2/SDL_events.h +32 -1
  34. data/assets/include/SDL2/SDL_filesystem.h +5 -1
  35. data/assets/include/SDL2/SDL_gamecontroller.h +78 -5
  36. data/assets/include/SDL2/SDL_guid.h +100 -0
  37. data/assets/include/SDL2/SDL_hints.h +645 -43
  38. data/assets/include/SDL2/SDL_image.h +2045 -33
  39. data/assets/include/SDL2/SDL_joystick.h +127 -7
  40. data/assets/include/SDL2/SDL_keyboard.h +38 -1
  41. data/assets/include/SDL2/SDL_keycode.h +6 -1
  42. data/assets/include/SDL2/SDL_log.h +2 -2
  43. data/assets/include/SDL2/SDL_main.h +42 -2
  44. data/assets/include/SDL2/SDL_metal.h +2 -1
  45. data/assets/include/SDL2/SDL_mixer.h +2529 -396
  46. data/assets/include/SDL2/SDL_mouse.h +12 -1
  47. data/assets/include/SDL2/SDL_opengl.h +0 -51
  48. data/assets/include/SDL2/SDL_opengl_glext.h +2260 -231
  49. data/assets/include/SDL2/SDL_opengles2_gl2.h +374 -339
  50. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +3479 -1496
  51. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +6 -9
  52. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +43 -14
  53. data/assets/include/SDL2/SDL_platform.h +32 -6
  54. data/assets/include/SDL2/SDL_rect.h +154 -2
  55. data/assets/include/SDL2/SDL_render.h +46 -17
  56. data/assets/include/SDL2/SDL_revision.h +4 -0
  57. data/assets/include/SDL2/SDL_rwops.h +1 -15
  58. data/assets/include/SDL2/SDL_scancode.h +46 -21
  59. data/assets/include/SDL2/SDL_sensor.h +24 -3
  60. data/assets/include/SDL2/SDL_stdinc.h +119 -8
  61. data/assets/include/SDL2/SDL_surface.h +3 -1
  62. data/assets/include/SDL2/SDL_system.h +66 -6
  63. data/assets/include/SDL2/SDL_syswm.h +2 -0
  64. data/assets/include/SDL2/SDL_test_common.h +1 -0
  65. data/assets/include/SDL2/SDL_test_font.h +90 -3
  66. data/assets/include/SDL2/SDL_thread.h +3 -3
  67. data/assets/include/SDL2/SDL_touch.h +8 -0
  68. data/assets/include/SDL2/SDL_ttf.h +2084 -155
  69. data/assets/include/SDL2/SDL_version.h +19 -3
  70. data/assets/include/SDL2/SDL_video.h +71 -9
  71. data/assets/include/SDL2/begin_code.h +4 -4
  72. data/assets/include/mrbconf.h +15 -17
  73. data/assets/include/mruby/array.h +8 -21
  74. data/assets/include/mruby/boxing_nan.h +115 -86
  75. data/assets/include/mruby/boxing_word.h +104 -78
  76. data/assets/include/mruby/common.h +6 -0
  77. data/assets/include/mruby/compile.h +3 -4
  78. data/assets/include/mruby/debug.h +4 -2
  79. data/assets/include/mruby/dump.h +5 -2
  80. data/assets/include/mruby/error.h +12 -2
  81. data/assets/include/mruby/gc.h +2 -0
  82. data/assets/include/mruby/hash.h +1 -3
  83. data/assets/include/mruby/irep.h +4 -4
  84. data/assets/include/mruby/numeric.h +21 -13
  85. data/assets/include/mruby/opcode.h +30 -0
  86. data/assets/include/mruby/ops.h +99 -101
  87. data/assets/include/mruby/presym/scanning.h +15 -9
  88. data/assets/include/mruby/proc.h +4 -2
  89. data/assets/include/mruby/string.h +3 -24
  90. data/assets/include/mruby/value.h +80 -40
  91. data/assets/include/mruby/variable.h +0 -15
  92. data/assets/include/mruby/version.h +5 -5
  93. data/assets/include/mruby.h +86 -16
  94. data/assets/macos/universal/bin/mrbc +0 -0
  95. data/assets/macos/universal/lib/libFLAC.a +0 -0
  96. data/assets/macos/universal/lib/libSDL2.a +0 -0
  97. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  98. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  99. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  100. data/assets/macos/universal/lib/libavif.a +0 -0
  101. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  102. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  103. data/assets/macos/universal/lib/libfreetype.a +0 -0
  104. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  105. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  106. data/assets/macos/universal/lib/libhwy.a +0 -0
  107. data/assets/macos/universal/lib/libjpeg.a +0 -0
  108. data/assets/macos/universal/lib/libjxl.a +0 -0
  109. data/assets/macos/universal/lib/libmodplug.a +0 -0
  110. data/assets/macos/universal/lib/libmpg123.a +0 -0
  111. data/assets/macos/universal/lib/libmruby.a +0 -0
  112. data/assets/macos/universal/lib/libogg.a +0 -0
  113. data/assets/macos/universal/lib/libpng.a +0 -0
  114. data/assets/macos/universal/lib/libtiff.a +0 -0
  115. data/assets/macos/universal/lib/libvorbis.a +0 -0
  116. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  117. data/assets/macos/universal/lib/libwebp.a +0 -0
  118. data/assets/macos/universal/lib/libzstd.a +0 -0
  119. data/assets/wasm/libmruby.a +0 -0
  120. data/assets/wasm/template.html +52 -4
  121. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  122. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  123. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  124. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  125. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  126. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  127. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  128. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  129. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  130. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  131. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  132. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  133. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  134. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  135. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  136. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  137. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  138. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  139. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  140. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  141. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  142. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  143. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  144. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  145. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  146. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  147. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  148. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  149. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +1 -0
  150. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  151. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  152. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  153. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  154. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  155. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  156. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  157. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  158. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  159. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  160. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  161. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  162. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  163. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  164. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  165. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  166. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  167. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  168. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  169. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  170. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  171. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  172. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  173. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  174. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  175. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  176. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  177. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  178. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  179. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -0
  180. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  181. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  182. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  183. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  184. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  185. data/ext/ruby2d/canvas.c +540 -0
  186. data/ext/ruby2d/extconf.rb +39 -21
  187. data/ext/ruby2d/gl.c +3 -3
  188. data/ext/ruby2d/image.c +7 -7
  189. data/ext/ruby2d/ruby2d.c +741 -24
  190. data/ext/ruby2d/ruby2d.h +66 -3
  191. data/ext/ruby2d/sound.c +16 -2
  192. data/lib/ruby2d/canvas.rb +315 -0
  193. data/lib/ruby2d/circle.rb +30 -15
  194. data/lib/ruby2d/cli/build.rb +11 -4
  195. data/lib/ruby2d/cli/enable_console.rb +3 -1
  196. data/lib/ruby2d/color.rb +133 -77
  197. data/lib/ruby2d/core.rb +32 -0
  198. data/lib/ruby2d/dsl.rb +38 -32
  199. data/lib/ruby2d/exceptions.rb +2 -1
  200. data/lib/ruby2d/font.rb +97 -62
  201. data/lib/ruby2d/image.rb +48 -27
  202. data/lib/ruby2d/line.rb +84 -45
  203. data/lib/ruby2d/music.rb +33 -23
  204. data/lib/ruby2d/pixel.rb +10 -9
  205. data/lib/ruby2d/pixmap.rb +39 -0
  206. data/lib/ruby2d/pixmap_atlas.rb +56 -0
  207. data/lib/ruby2d/quad.rb +98 -49
  208. data/lib/ruby2d/rectangle.rb +35 -36
  209. data/lib/ruby2d/renderable.rb +7 -6
  210. data/lib/ruby2d/sound.rb +23 -17
  211. data/lib/ruby2d/sprite.rb +181 -140
  212. data/lib/ruby2d/square.rb +21 -20
  213. data/lib/ruby2d/text.rb +47 -19
  214. data/lib/ruby2d/texture.rb +13 -3
  215. data/lib/ruby2d/tileset.rb +97 -44
  216. data/lib/ruby2d/triangle.rb +91 -42
  217. data/lib/ruby2d/version.rb +3 -1
  218. data/lib/ruby2d/vertices.rb +81 -45
  219. data/lib/ruby2d/window.rb +508 -371
  220. data/lib/ruby2d.rb +11 -29
  221. metadata +84 -16
  222. data/assets/include/SDL2/SDL_config_psp.h +0 -165
  223. data/assets/include/SDL2/SDL_config_wiz.h +0 -154
  224. data/assets/include/glew.h +0 -23686
  225. data/assets/macos/universal/lib/libpng16.a +0 -0
  226. data/assets/wasm/build_config.rb +0 -13
  227. data/assets/windows/glew/README.md +0 -10
  228. data/assets/windows/glew/glew.h +0 -23686
  229. data/assets/windows/glew/libglew32.a +0 -0
  230. data/assets/windows/mingw-w64-x86_64/lib/libpng16.a +0 -0
  231. data/lib/ruby2d/entity.rb +0 -17
@@ -58,8 +58,8 @@ typedef struct SDL_version
58
58
  /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
59
59
  */
60
60
  #define SDL_MAJOR_VERSION 2
61
- #define SDL_MINOR_VERSION 0
62
- #define SDL_PATCHLEVEL 20
61
+ #define SDL_MINOR_VERSION 26
62
+ #define SDL_PATCHLEVEL 1
63
63
 
64
64
  /**
65
65
  * Macro to determine SDL version program was compiled against.
@@ -83,6 +83,8 @@ typedef struct SDL_version
83
83
  (x)->patch = SDL_PATCHLEVEL; \
84
84
  }
85
85
 
86
+ /* TODO: Remove this whole block in SDL 3 */
87
+ #if SDL_MAJOR_VERSION < 3
86
88
  /**
87
89
  * This macro turns the version numbers into a numeric value:
88
90
  * \verbatim
@@ -90,21 +92,35 @@ typedef struct SDL_version
90
92
  \endverbatim
91
93
  *
92
94
  * This assumes that there will never be more than 100 patchlevels.
95
+ *
96
+ * In versions higher than 2.9.0, the minor version overflows into
97
+ * the thousands digit: for example, 2.23.0 is encoded as 4300,
98
+ * and 2.255.99 would be encoded as 25799.
99
+ * This macro will not be available in SDL 3.x.
93
100
  */
94
101
  #define SDL_VERSIONNUM(X, Y, Z) \
95
102
  ((X)*1000 + (Y)*100 + (Z))
96
103
 
97
104
  /**
98
105
  * This is the version number macro for the current SDL version.
106
+ *
107
+ * In versions higher than 2.9.0, the minor version overflows into
108
+ * the thousands digit: for example, 2.23.0 is encoded as 4300.
109
+ * This macro will not be available in SDL 3.x.
110
+ *
111
+ * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead.
99
112
  */
100
113
  #define SDL_COMPILEDVERSION \
101
114
  SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL)
115
+ #endif /* SDL_MAJOR_VERSION < 3 */
102
116
 
103
117
  /**
104
118
  * This macro will evaluate to true if compiled with SDL at least X.Y.Z.
105
119
  */
106
120
  #define SDL_VERSION_ATLEAST(X, Y, Z) \
107
- (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z))
121
+ ((SDL_MAJOR_VERSION >= X) && \
122
+ (SDL_MAJOR_VERSION > X || SDL_MINOR_VERSION >= Y) && \
123
+ (SDL_MAJOR_VERSION > X || SDL_MINOR_VERSION > Y || SDL_PATCHLEVEL >= Z))
108
124
 
109
125
  /**
110
126
  * Get the version of SDL that is linked against your program.
@@ -248,7 +248,8 @@ typedef enum
248
248
  SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
249
249
  SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
250
250
  SDL_GL_CONTEXT_RESET_NOTIFICATION,
251
- SDL_GL_CONTEXT_NO_ERROR
251
+ SDL_GL_CONTEXT_NO_ERROR,
252
+ SDL_GL_FLOATBUFFERS
252
253
  } SDL_GLattr;
253
254
 
254
255
  typedef enum
@@ -444,6 +445,15 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rec
444
445
  * A failure of this function usually means that either no DPI information is
445
446
  * available or the `displayIndex` is out of range.
446
447
  *
448
+ * **WARNING**: This reports the DPI that the hardware reports, and it is not
449
+ * always reliable! It is almost always better to use SDL_GetWindowSize() to
450
+ * find the window size, which might be in logical points instead of pixels,
451
+ * and then SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(),
452
+ * SDL_Metal_GetDrawableSize(), or SDL_GetRendererOutputSize(), and compare
453
+ * the two values to get an actual scaling value between the two. We will be
454
+ * rethinking how high-dpi details should be managed in SDL3 to make things
455
+ * more consistent, reliable, and clear.
456
+ *
447
457
  * \param displayIndex the index of the display from which DPI information
448
458
  * should be queried
449
459
  * \param ddpi a pointer filled in with the diagonal DPI of the display; may
@@ -587,6 +597,35 @@ extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_Disp
587
597
  */
588
598
  extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest);
589
599
 
600
+ /**
601
+ * Get the index of the display containing a point
602
+ *
603
+ * \param point the point to query
604
+ * \returns the index of the display containing the point or a negative error
605
+ * code on failure; call SDL_GetError() for more information.
606
+ *
607
+ * \since This function is available since SDL 2.24.0.
608
+ *
609
+ * \sa SDL_GetDisplayBounds
610
+ * \sa SDL_GetNumVideoDisplays
611
+ */
612
+ extern DECLSPEC int SDLCALL SDL_GetPointDisplayIndex(const SDL_Point * point);
613
+
614
+ /**
615
+ * Get the index of the display primarily containing a rect
616
+ *
617
+ * \param rect the rect to query
618
+ * \returns the index of the display entirely containing the rect or closest
619
+ * to the center of the rect on success or a negative error code on
620
+ * failure; call SDL_GetError() for more information.
621
+ *
622
+ * \since This function is available since SDL 2.24.0.
623
+ *
624
+ * \sa SDL_GetDisplayBounds
625
+ * \sa SDL_GetNumVideoDisplays
626
+ */
627
+ extern DECLSPEC int SDLCALL SDL_GetRectDisplayIndex(const SDL_Rect * rect);
628
+
590
629
  /**
591
630
  * Get the index of the display associated with a window.
592
631
  *
@@ -697,7 +736,10 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window);
697
736
  * in pixels may differ from its size in screen coordinates on platforms with
698
737
  * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the
699
738
  * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or
700
- * SDL_GetRendererOutputSize() to query the drawable size in pixels.
739
+ * SDL_GetRendererOutputSize() to query the drawable size in pixels. Note that
740
+ * when this flag is set, the drawable size can vary after the window is
741
+ * created and should be queried after major window events such as when the
742
+ * window is resized or moved between displays.
701
743
  *
702
744
  * If the window is set fullscreen, the width and height parameters `w` and
703
745
  * `h` will not be used. However, invalid size parameters (e.g. too large) may
@@ -1004,6 +1046,27 @@ extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window,
1004
1046
  int *top, int *left,
1005
1047
  int *bottom, int *right);
1006
1048
 
1049
+ /**
1050
+ * Get the size of a window in pixels.
1051
+ *
1052
+ * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI
1053
+ * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a
1054
+ * platform with high-DPI support (Apple calls this "Retina"), and not
1055
+ * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint.
1056
+ *
1057
+ * \param window the window from which the drawable size should be queried
1058
+ * \param w a pointer to variable for storing the width in pixels, may be NULL
1059
+ * \param h a pointer to variable for storing the height in pixels, may be
1060
+ * NULL
1061
+ *
1062
+ * \since This function is available since SDL 2.26.0.
1063
+ *
1064
+ * \sa SDL_CreateWindow
1065
+ * \sa SDL_GetWindowSize
1066
+ */
1067
+ extern DECLSPEC void SDLCALL SDL_GetWindowSizeInPixels(SDL_Window * window,
1068
+ int *w, int *h);
1069
+
1007
1070
  /**
1008
1071
  * Set the minimum size of a window's client area.
1009
1072
  *
@@ -1337,6 +1400,7 @@ extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window,
1337
1400
  * Mouse grab confines the mouse cursor to the window.
1338
1401
  *
1339
1402
  * \param window The window for which the mouse grab mode should be set.
1403
+ * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release.
1340
1404
  *
1341
1405
  * \since This function is available since SDL 2.0.16.
1342
1406
  *
@@ -1747,6 +1811,9 @@ extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void);
1747
1811
  * If you disable the screensaver, it is automatically re-enabled when SDL
1748
1812
  * quits.
1749
1813
  *
1814
+ * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2
1815
+ * the screensaver was enabled by default.
1816
+ *
1750
1817
  * \since This function is available since SDL 2.0.0.
1751
1818
  *
1752
1819
  * \sa SDL_EnableScreenSaver
@@ -2008,13 +2075,8 @@ extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w,
2008
2075
  * retry the call with 1 for the interval.
2009
2076
  *
2010
2077
  * Adaptive vsync is implemented for some glX drivers with
2011
- * GLX_EXT_swap_control_tear:
2012
- *
2013
- * https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt
2014
- *
2015
- * and for some Windows drivers with WGL_EXT_swap_control_tear:
2016
- *
2017
- * https://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt
2078
+ * GLX_EXT_swap_control_tear, and for some Windows drivers with
2079
+ * WGL_EXT_swap_control_tear.
2018
2080
  *
2019
2081
  * Read more on the Khronos wiki:
2020
2082
  * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync
@@ -34,7 +34,7 @@
34
34
  #define _begin_code_h
35
35
 
36
36
  #ifndef SDL_DEPRECATED
37
- # if (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */
37
+ # if defined(__GNUC__) && (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */
38
38
  # define SDL_DEPRECATED __attribute__((deprecated))
39
39
  # else
40
40
  # define SDL_DEPRECATED
@@ -51,7 +51,7 @@
51
51
 
52
52
  /* Some compilers use a special export keyword */
53
53
  #ifndef DECLSPEC
54
- # if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__)
54
+ # if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) || defined(__GDK__)
55
55
  # ifdef DLL_EXPORT
56
56
  # define DECLSPEC __declspec(dllexport)
57
57
  # else
@@ -74,7 +74,7 @@
74
74
 
75
75
  /* By default SDL uses the C calling convention */
76
76
  #ifndef SDLCALL
77
- #if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__)
77
+ #if (defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__)) && !defined(__GNUC__)
78
78
  #define SDLCALL __cdecl
79
79
  #elif defined(__OS2__) || defined(__EMX__)
80
80
  #define SDLCALL _System
@@ -107,7 +107,7 @@
107
107
  #ifdef __BORLANDC__
108
108
  #pragma nopackwarning
109
109
  #endif
110
- #ifdef _M_X64
110
+ #ifdef _WIN64
111
111
  /* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */
112
112
  #pragma pack(push,8)
113
113
  #else
@@ -7,9 +7,6 @@
7
7
  #ifndef MRUBYCONF_H
8
8
  #define MRUBYCONF_H
9
9
 
10
- #include <limits.h>
11
- #include <stdint.h>
12
-
13
10
  /* architecture selection: */
14
11
  /* specify -DMRB_32BIT or -DMRB_64BIT to override */
15
12
  #if !defined(MRB_32BIT) && !defined(MRB_64BIT)
@@ -25,10 +22,10 @@
25
22
  #endif
26
23
 
27
24
  /* configuration options: */
28
- /* add -DMRB_USE_FLOAT32 to use float instead of double for floating point numbers */
25
+ /* add -DMRB_USE_FLOAT32 to use float instead of double for floating-point numbers */
29
26
  //#define MRB_USE_FLOAT32
30
27
 
31
- /* exclude floating point numbers */
28
+ /* exclude floating-point numbers */
32
29
  //#define MRB_NO_FLOAT
33
30
 
34
31
  /* obsolete configuration */
@@ -82,6 +79,9 @@
82
79
  # define MRB_WORD_BOXING
83
80
  #endif
84
81
 
82
+ /* if defined mruby allocates Float objects in the heap to keep full precision if needed */
83
+ //#define MRB_WORDBOX_NO_FLOAT_TRUNCATE
84
+
85
85
  /* add -DMRB_INT32 to use 32bit integer for mrb_int; conflict with MRB_INT64;
86
86
  Default for 32-bit CPU mode. */
87
87
  //#define MRB_INT32
@@ -113,11 +113,17 @@
113
113
  /* number of object per heap page */
114
114
  //#define MRB_HEAP_PAGE_SIZE 1024
115
115
 
116
- /* if __ehdr_start is available, mruby can reduce memory used by symbols */
117
- //#define MRB_USE_LINK_TIME_RO_DATA_P
116
+ /* define if your platform does not support etext, edata */
117
+ //#define MRB_NO_DEFAULT_RO_DATA_P
118
+
119
+ /* define if your platform supports etext, edata */
120
+ //#define MRB_USE_RO_DATA_P_ETEXT
121
+ /* use MRB_USE_ETEXT_RO_DATA_P by default on Linux */
122
+ #if (defined(__linux__) && !defined(__KERNEL__))
123
+ #define MRB_USE_ETEXT_RO_DATA_P
124
+ #endif
118
125
 
119
- /* if MRB_USE_LINK_TIME_RO_DATA_P does not work,
120
- you can try mrb_ro_data_p() that you have implemented yourself in any file;
126
+ /* you can provide and use mrb_ro_data_p() for your platform.
121
127
  prototype is `mrb_bool mrb_ro_data_p(const char *ptr)` */
122
128
  //#define MRB_USE_CUSTOM_RO_DATA_P
123
129
 
@@ -181,14 +187,6 @@
181
187
  # include <stdio.h>
182
188
  #endif
183
189
 
184
- #ifndef FALSE
185
- # define FALSE 0
186
- #endif
187
-
188
- #ifndef TRUE
189
- # define TRUE 1
190
- #endif
191
-
192
190
  /*
193
191
  ** mruby tuning profiles
194
192
  **/
@@ -14,15 +14,17 @@
14
14
  */
15
15
  MRB_BEGIN_DECL
16
16
 
17
-
18
17
  typedef struct mrb_shared_array {
19
18
  int refcnt;
20
19
  mrb_ssize len;
21
20
  mrb_value *ptr;
22
21
  } mrb_shared_array;
23
22
 
24
- #if defined(MRB_32BIT) && defined(MRB_NO_BOXING)
23
+ #if defined(MRB_32BIT) && defined(MRB_NO_BOXING) && !defined(MRB_USE_FLOAT32) && !defined(MRB_ARY_NO_EMBED)
25
24
  # define MRB_ARY_NO_EMBED
25
+ #endif
26
+
27
+ #ifdef MRB_ARY_NO_EMBED
26
28
  # define MRB_ARY_EMBED_LEN_MAX 0
27
29
  #else
28
30
  # define MRB_ARY_EMBED_LEN_MAX ((mrb_int)(sizeof(void*)*3/sizeof(mrb_value)))
@@ -65,7 +67,7 @@ struct RArray {
65
67
  #define ARY_EMBED_PTR(a) ((a)->as.ary)
66
68
  #endif
67
69
 
68
- #define ARY_LEN(a) (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(a)->as.heap.len)
70
+ #define ARY_LEN(a) (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(mrb_int)(a)->as.heap.len)
69
71
  #define ARY_PTR(a) (ARY_EMBED_P(a)?ARY_EMBED_PTR(a):(a)->as.heap.ptr)
70
72
  #define RARRAY_LEN(a) ARY_LEN(RARRAY(a))
71
73
  #define RARRAY_PTR(a) ARY_PTR(RARRAY(a))
@@ -107,7 +109,7 @@ MRB_API mrb_value mrb_ary_new(mrb_state *mrb);
107
109
  * Array[value1, value2, ...]
108
110
  *
109
111
  * @param mrb The mruby state reference.
110
- * @param size The numer of values.
112
+ * @param size The number of values.
111
113
  * @param vals The actual values.
112
114
  * @return The initialized array.
113
115
  */
@@ -176,20 +178,6 @@ MRB_API void mrb_ary_push(mrb_state *mrb, mrb_value array, mrb_value value);
176
178
  */
177
179
  MRB_API mrb_value mrb_ary_pop(mrb_state *mrb, mrb_value ary);
178
180
 
179
- /*
180
- * Returns a reference to an element of the array on the given index.
181
- *
182
- * Equivalent to:
183
- *
184
- * ary[n]
185
- *
186
- * @param mrb The mruby state reference.
187
- * @param ary The target array.
188
- * @param n The array index being referenced
189
- * @return The referenced value.
190
- */
191
- MRB_API mrb_value mrb_ary_ref(mrb_state *mrb, mrb_value ary, mrb_int n);
192
-
193
181
  /*
194
182
  * Sets a value on an array at the given index
195
183
  *
@@ -200,7 +188,7 @@ MRB_API mrb_value mrb_ary_ref(mrb_state *mrb, mrb_value ary, mrb_int n);
200
188
  * @param mrb The mruby state reference.
201
189
  * @param ary The target array.
202
190
  * @param n The array index being referenced.
203
- * @param val The value being setted.
191
+ * @param val The value being set.
204
192
  */
205
193
  MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val);
206
194
 
@@ -216,8 +204,6 @@ MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val
216
204
  * @param other The array to replace it with.
217
205
  */
218
206
  MRB_API void mrb_ary_replace(mrb_state *mrb, mrb_value self, mrb_value other);
219
- MRB_API mrb_value mrb_ensure_array_type(mrb_state *mrb, mrb_value self);
220
- MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self);
221
207
 
222
208
  /*
223
209
  * Unshift an element into the array
@@ -243,6 +229,7 @@ MRB_API mrb_value mrb_ary_unshift(mrb_state *mrb, mrb_value self, mrb_value item
243
229
  * @param offset The element position (negative counts from the tail).
244
230
  */
245
231
  MRB_API mrb_value mrb_ary_entry(mrb_value ary, mrb_int offset);
232
+ #define mrb_ary_ref(mrb, ary, n) mrb_ary_entry(ary, n)
246
233
 
247
234
  /*
248
235
  * Replace subsequence of an array.
@@ -15,116 +15,145 @@
15
15
  # error ---->> MRB_NAN_BOXING and MRB_NO_FLOAT conflict <<----
16
16
  #endif
17
17
 
18
- #ifdef MRB_INT64
19
- # error ---->> MRB_NAN_BOXING and MRB_INT64 conflict <<----
20
- #endif
21
-
22
- #define MRB_FIXNUM_SHIFT 0
23
- #define MRB_SYMBOL_SHIFT 0
24
18
  #define MRB_FIXNUM_MIN INT32_MIN
25
19
  #define MRB_FIXNUM_MAX INT32_MAX
26
20
 
21
+ enum mrb_nanbox_tt_inline {
22
+ MRB_NANBOX_TT_OBJECT = 0,
23
+ MRB_NANBOX_TT_INTEGER = 1,
24
+ MRB_NANBOX_TT_MISC = 2,
25
+ MRB_NANBOX_TT_CPTR = 3,
26
+ };
27
+
27
28
  /* value representation by nan-boxing:
28
- * float : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
29
- * object: 111111111111TTTT TTPPPPPPPPPPPPPP PPPPPPPPPPPPPPPP PPPPPPPPPPPPPPPP
30
- * int : 1111111111110001 0000000000000000 IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII
31
- * sym : 1111111111110001 0100000000000000 SSSSSSSSSSSSSSSS SSSSSSSSSSSSSSSS
32
- * In order to get enough bit size to save TT, all pointers are shifted 2 bits
33
- * in the right direction. Also, TTTTTT is the mrb_vtype + 1;
29
+ * float : SEEEEEEE EEEEFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
30
+ * +/-inf: S1111111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
31
+ * nan : 01111111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
32
+ * int : 01111111 11111001 00000000 00000000 IIIIIIII IIIIIIII IIIIIIII IIIIIIII
33
+ * sym : 01111111 11111110 00000000 00TTTTTT SSSSSSSS SSSSSSSS SSSSSSSS SSSSSSSS
34
+ * misc : 01111111 11111110 00000000 00TTTTTT 00000000 00000000 00000000 0000MMMM
35
+ * object: 01111111 11111100 PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPP00
36
+ * cptr : 01111111 11111111 PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP PPPPPPPP
37
+ * Stored as O = R + 0x8004000000000000, retrieved as R = O - 0x8004000000000000.
38
+ * This makes pointers have all zeros in the top 32 bits.
34
39
  */
35
40
  typedef struct mrb_value {
36
41
  uint64_t u;
37
42
  } mrb_value;
38
43
 
39
- union mrb_value_ {
40
- mrb_float f;
41
- uint64_t u;
42
- #ifdef MRB_64BIT
43
- void *p;
44
- # define BOXNAN_IMMEDIATE_VALUE uint32_t i
45
- #else
46
- # define BOXNAN_IMMEDIATE_VALUE union { uint32_t i; void *p; }
47
- #endif
48
- struct {
49
- MRB_ENDIAN_LOHI(
50
- uint32_t ttt;
51
- ,BOXNAN_IMMEDIATE_VALUE;
52
- )
53
- };
54
- mrb_value value;
44
+ static inline mrb_float
45
+ mrb_nan_boxing_value_float(mrb_value v)
46
+ {
47
+ union {
48
+ mrb_float f;
49
+ uint64_t u;
50
+ } x;
51
+ x.u = v.u - 0x8004000000000000;
52
+ return x.f;
53
+ }
54
+
55
+ #define SET_FLOAT_VALUE(mrb,r,f) do { \
56
+ union { \
57
+ mrb_float f; \
58
+ uint64_t u; \
59
+ } float_uint_union; \
60
+ if ((f) != (f)) { /* NaN */ \
61
+ float_uint_union.u = 0x7ff8000000000000UL; \
62
+ } \
63
+ else { \
64
+ float_uint_union.f = (f); \
65
+ } \
66
+ r.u = float_uint_union.u + 0x8004000000000000; \
67
+ } while(0)
68
+
69
+ #define mrb_float_p(o) (((uint64_t)((o).u)&0xfffc000000000000) != 0)
70
+
71
+ struct RInteger {
72
+ MRB_OBJECT_HEADER;
73
+ mrb_int i;
55
74
  };
56
75
 
57
- mrb_static_assert1(sizeof(mrb_value) == sizeof(union mrb_value_));
76
+ #define mrb_nb_tt(o) ((enum mrb_nanbox_tt_inline)((uint32_t)((o).u>>48)&3))
58
77
 
59
- static inline union mrb_value_
60
- mrb_val_union(mrb_value v)
78
+ MRB_INLINE enum mrb_vtype
79
+ mrb_type(mrb_value o)
61
80
  {
62
- union mrb_value_ x;
63
- x.value = v;
64
- return x;
81
+ if (mrb_float_p(o)) return MRB_TT_FLOAT;
82
+
83
+ int64_t u = o.u;
84
+ switch (mrb_nb_tt(o)) {
85
+ case MRB_NANBOX_TT_OBJECT: {
86
+ if (u == 0) return MRB_TT_FALSE;
87
+ return ((struct RBasic*)(uintptr_t)u)->tt;
88
+ }
89
+ case MRB_NANBOX_TT_INTEGER:
90
+ return MRB_TT_INTEGER;
91
+ case MRB_NANBOX_TT_MISC:
92
+ return (enum mrb_vtype)((uint32_t)(o.u >> 32) & 0x1f);
93
+ case MRB_NANBOX_TT_CPTR:
94
+ return MRB_TT_CPTR;
95
+ default:
96
+ /* never happen */
97
+ return MRB_TT_FLOAT;
98
+ }
65
99
  }
66
100
 
67
- #define mrb_tt(o) ((enum mrb_vtype)((mrb_val_union(o).ttt & 0xfc000)>>14)-1)
68
- #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < mrb_val_union(o).ttt ? mrb_tt(o) : MRB_TT_FLOAT)
69
- #define mrb_float(o) mrb_val_union(o).f
70
- #define mrb_fixnum(o) ((mrb_int)mrb_val_union(o).i)
71
- #define mrb_integer(o) mrb_fixnum(o)
72
- #define mrb_symbol(o) ((mrb_sym)mrb_val_union(o).i)
73
-
74
- #ifdef MRB_64BIT
75
- #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)(mrb_val_union(o).p)))<<2))
76
- #define mrb_cptr(o) (((struct RCptr*)mrb_ptr(o))->p)
77
- #define BOXNAN_SHIFT_LONG_POINTER(v) (((uintptr_t)(v)>>34)&0x3fff)
101
+ #define NANBOX_SET_MISC_VALUE(r,t,i) NANBOX_SET_VALUE(r, MRB_NANBOX_TT_MISC, ((uint64_t)(t)<<32) | (i))
102
+
103
+ #define mrb_float(o) mrb_nan_boxing_value_float(o)
104
+ #ifdef MRB_INT64
105
+ /*
106
+ #ifdef MRB_32BIT
107
+ #define mrb_fixnum(o) ((mrb_int)((intptr_t)0xffffffffffff&((o).u))|(((o).u & 0x800000000000)?0xffff000000000000:0))
78
108
  #else
79
- #define mrb_ptr(o) ((void*)mrb_val_union(o).i)
80
- #define mrb_cptr(o) mrb_ptr(o)
81
- #define BOXNAN_SHIFT_LONG_POINTER(v) 0
109
+ #define mrb_fixnum(o) ((mrb_int)(int32_t)((o).u))
82
110
  #endif
111
+ */
83
112
 
84
- #define BOXNAN_SET_VALUE(o, tt, attr, v) do { \
85
- union mrb_value_ mrb_value_union_variable; \
86
- mrb_value_union_variable.attr = (v);\
87
- mrb_value_union_variable.ttt = 0xfff00000 | (((tt)+1)<<14);\
88
- o = mrb_value_union_variable.value;\
89
- } while (0)
113
+ #define mrb_fixnum(o) ((mrb_int)(int32_t)((o).u))
90
114
 
91
- #ifdef MRB_64BIT
92
- #define BOXNAN_SET_OBJ_VALUE(o, tt, v) do {\
93
- union mrb_value_ mrb_value_union_variable;\
94
- mrb_value_union_variable.p = (void*)((uintptr_t)(v)>>2);\
95
- mrb_value_union_variable.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\
96
- o = mrb_value_union_variable.value;\
97
- } while (0)
115
+ static inline mrb_int
116
+ mrb_nan_boxing_value_int(mrb_value v)
117
+ {
118
+ uint64_t u = v.u;
119
+ if (mrb_nb_tt(v)==MRB_NANBOX_TT_OBJECT) {
120
+ struct RInteger *p = (struct RInteger*)(uintptr_t)u;
121
+ return p->i;
122
+ }
123
+ return mrb_fixnum(v);
124
+ }
125
+ #define mrb_integer(o) mrb_nan_boxing_value_int(o)
98
126
  #else
99
- #define BOXNAN_SET_OBJ_VALUE(o, tt, v) BOXNAN_SET_VALUE(o, tt, i, (uint32_t)v)
127
+ #define mrb_fixnum(o) ((mrb_int)(((uintptr_t)0xffffffff)&((o).u)))
128
+ #define mrb_integer(o) mrb_fixnum(o)
100
129
  #endif
130
+ #define mrb_symbol(o) ((mrb_sym)((uintptr_t)0xffffffff)&((o).u))
131
+ #define mrb_ptr(o) ((void*)(uintptr_t)(o).u)
132
+ #define mrb_cptr(o) ((void*)(uintptr_t)(0xffffffffffffULL&(o).u))
101
133
 
102
- #define SET_FLOAT_VALUE(mrb,r,v) do { \
103
- union mrb_value_ mrb_value_union_variable; \
104
- if ((v) != (v)) { /* NaN */ \
105
- mrb_value_union_variable.ttt = 0x7ff80000; \
106
- mrb_value_union_variable.i = 0; \
107
- } \
108
- else { \
109
- mrb_value_union_variable.f = (v); \
110
- } \
111
- r = mrb_value_union_variable.value; \
112
- } while(0)
134
+ #define NANBOX_SET_VALUE(o, tt, v) do { \
135
+ (o).u = ((uint64_t)(tt)<<48) | ((uint64_t)(v)); \
136
+ } while (0)
113
137
 
114
- #define SET_NIL_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 0)
115
- #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 1)
116
- #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, i, 1)
117
- #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, i, 1)
118
- #define SET_INT_VALUE(mrb, r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n))
119
- #define SET_FIXNUM_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_INTEGER, i, (uint32_t)(n))
120
- #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, i, (uint32_t)(v))
121
- #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v))
122
- #ifdef MRB_64BIT
123
- MRB_API mrb_value mrb_nan_boxing_cptr_value(struct mrb_state*, void*);
124
- #define SET_CPTR_VALUE(mrb,r,v) ((r) = mrb_nan_boxing_cptr_value(mrb, v))
138
+ #define SET_NIL_VALUE(r) ((r).u = 0)
139
+ #define SET_FALSE_VALUE(r) NANBOX_SET_MISC_VALUE(r, MRB_TT_FALSE, 1)
140
+ #define SET_TRUE_VALUE(r) NANBOX_SET_MISC_VALUE(r, MRB_TT_TRUE, 1)
141
+ #define SET_BOOL_VALUE(r,b) NANBOX_SET_MISC_VALUE(r, (b) ? MRB_TT_TRUE : MRB_TT_FALSE, 1)
142
+ #ifdef MRB_INT64
143
+ MRB_API mrb_value mrb_boxing_int_value(struct mrb_state*, mrb_int);
144
+ #define SET_INT_VALUE(mrb, r, n) ((r) = mrb_boxing_int_value(mrb, n))
125
145
  #else
126
- #define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_VALUE(r, MRB_TT_CPTR, p, v)
146
+ #define SET_INT_VALUE(mrb, r, n) SET_FIXNUM_VALUE(r, n)
127
147
  #endif
128
- #define SET_UNDEF_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, i, 0)
148
+ #define SET_FIXNUM_VALUE(r,n) NANBOX_SET_VALUE(r, MRB_NANBOX_TT_INTEGER, (uint32_t)(n))
149
+ #define SET_SYM_VALUE(r,v) NANBOX_SET_MISC_VALUE(r, MRB_TT_SYMBOL, (uint32_t)(v))
150
+ #define SET_OBJ_VALUE(r,v) do {(r).u = (uint64_t)(uintptr_t)(v);} while (0)
151
+ #define SET_CPTR_VALUE(mrb,r,v) NANBOX_SET_VALUE(r, MRB_NANBOX_TT_CPTR, (uint64_t)(uintptr_t)(v) & 0x0000ffffffffffffULL)
152
+ #define SET_UNDEF_VALUE(r) NANBOX_SET_MISC_VALUE(r, MRB_TT_UNDEF, 4)
153
+
154
+ #define mrb_immediate_p(o) ((mrb_float_p(o) || mrb_nb_tt(o) != MRB_NANBOX_TT_OBJECT) || (o).u == 0)
155
+ #define mrb_nil_p(o) ((o).u == 0)
156
+ #define mrb_false_p(o) (mrb_type(o) == MRB_TT_FALSE || (o).u == 0)
157
+ #define mrb_fixnum_p(o) (!mrb_float_p(o) && mrb_nb_tt(o)==MRB_NANBOX_TT_INTEGER)
129
158
 
130
159
  #endif /* MRUBY_BOXING_NAN_H */