ruby2d-rpeck-windows 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (289) hide show
  1. checksums.yaml +7 -0
  2. data/assets/README.md +22 -0
  3. data/assets/Rakefile +85 -0
  4. data/assets/app.icns +0 -0
  5. data/assets/include/SDL2/SDL.h +138 -0
  6. data/assets/include/SDL2/SDL_assert.h +293 -0
  7. data/assets/include/SDL2/SDL_atomic.h +295 -0
  8. data/assets/include/SDL2/SDL_audio.h +859 -0
  9. data/assets/include/SDL2/SDL_bits.h +121 -0
  10. data/assets/include/SDL2/SDL_blendmode.h +123 -0
  11. data/assets/include/SDL2/SDL_clipboard.h +71 -0
  12. data/assets/include/SDL2/SDL_config.h +55 -0
  13. data/assets/include/SDL2/SDL_config_android.h +182 -0
  14. data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
  15. data/assets/include/SDL2/SDL_config_macosx.h +266 -0
  16. data/assets/include/SDL2/SDL_config_minimal.h +85 -0
  17. data/assets/include/SDL2/SDL_config_os2.h +188 -0
  18. data/assets/include/SDL2/SDL_config_pandora.h +135 -0
  19. data/assets/include/SDL2/SDL_config_psp.h +165 -0
  20. data/assets/include/SDL2/SDL_config_windows.h +288 -0
  21. data/assets/include/SDL2/SDL_config_winrt.h +243 -0
  22. data/assets/include/SDL2/SDL_config_wiz.h +149 -0
  23. data/assets/include/SDL2/SDL_copying.h +20 -0
  24. data/assets/include/SDL2/SDL_cpuinfo.h +299 -0
  25. data/assets/include/SDL2/SDL_egl.h +1676 -0
  26. data/assets/include/SDL2/SDL_endian.h +263 -0
  27. data/assets/include/SDL2/SDL_error.h +112 -0
  28. data/assets/include/SDL2/SDL_events.h +827 -0
  29. data/assets/include/SDL2/SDL_filesystem.h +136 -0
  30. data/assets/include/SDL2/SDL_gamecontroller.h +541 -0
  31. data/assets/include/SDL2/SDL_gesture.h +87 -0
  32. data/assets/include/SDL2/SDL_haptic.h +1247 -0
  33. data/assets/include/SDL2/SDL_hints.h +1578 -0
  34. data/assets/include/SDL2/SDL_image.h +161 -0
  35. data/assets/include/SDL2/SDL_joystick.h +499 -0
  36. data/assets/include/SDL2/SDL_keyboard.h +217 -0
  37. data/assets/include/SDL2/SDL_keycode.h +351 -0
  38. data/assets/include/SDL2/SDL_loadso.h +81 -0
  39. data/assets/include/SDL2/SDL_locale.h +101 -0
  40. data/assets/include/SDL2/SDL_log.h +211 -0
  41. data/assets/include/SDL2/SDL_main.h +180 -0
  42. data/assets/include/SDL2/SDL_messagebox.h +146 -0
  43. data/assets/include/SDL2/SDL_metal.h +117 -0
  44. data/assets/include/SDL2/SDL_misc.h +75 -0
  45. data/assets/include/SDL2/SDL_mixer.h +651 -0
  46. data/assets/include/SDL2/SDL_mouse.h +302 -0
  47. data/assets/include/SDL2/SDL_mutex.h +251 -0
  48. data/assets/include/SDL2/SDL_name.h +33 -0
  49. data/assets/include/SDL2/SDL_opengl.h +2183 -0
  50. data/assets/include/SDL2/SDL_opengl_glext.h +11180 -0
  51. data/assets/include/SDL2/SDL_opengles.h +39 -0
  52. data/assets/include/SDL2/SDL_opengles2.h +52 -0
  53. data/assets/include/SDL2/SDL_opengles2_gl2.h +621 -0
  54. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +2050 -0
  55. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +30 -0
  56. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +282 -0
  57. data/assets/include/SDL2/SDL_pixels.h +479 -0
  58. data/assets/include/SDL2/SDL_platform.h +198 -0
  59. data/assets/include/SDL2/SDL_power.h +75 -0
  60. data/assets/include/SDL2/SDL_quit.h +58 -0
  61. data/assets/include/SDL2/SDL_rect.h +174 -0
  62. data/assets/include/SDL2/SDL_render.h +1158 -0
  63. data/assets/include/SDL2/SDL_revision.h +2 -0
  64. data/assets/include/SDL2/SDL_rwops.h +283 -0
  65. data/assets/include/SDL2/SDL_scancode.h +413 -0
  66. data/assets/include/SDL2/SDL_sensor.h +267 -0
  67. data/assets/include/SDL2/SDL_shape.h +144 -0
  68. data/assets/include/SDL2/SDL_stdinc.h +647 -0
  69. data/assets/include/SDL2/SDL_surface.h +563 -0
  70. data/assets/include/SDL2/SDL_system.h +325 -0
  71. data/assets/include/SDL2/SDL_syswm.h +354 -0
  72. data/assets/include/SDL2/SDL_test.h +69 -0
  73. data/assets/include/SDL2/SDL_test_assert.h +105 -0
  74. data/assets/include/SDL2/SDL_test_common.h +218 -0
  75. data/assets/include/SDL2/SDL_test_compare.h +69 -0
  76. data/assets/include/SDL2/SDL_test_crc32.h +124 -0
  77. data/assets/include/SDL2/SDL_test_font.h +81 -0
  78. data/assets/include/SDL2/SDL_test_fuzzer.h +384 -0
  79. data/assets/include/SDL2/SDL_test_harness.h +134 -0
  80. data/assets/include/SDL2/SDL_test_images.h +78 -0
  81. data/assets/include/SDL2/SDL_test_log.h +67 -0
  82. data/assets/include/SDL2/SDL_test_md5.h +129 -0
  83. data/assets/include/SDL2/SDL_test_memory.h +63 -0
  84. data/assets/include/SDL2/SDL_test_random.h +115 -0
  85. data/assets/include/SDL2/SDL_thread.h +366 -0
  86. data/assets/include/SDL2/SDL_timer.h +115 -0
  87. data/assets/include/SDL2/SDL_touch.h +102 -0
  88. data/assets/include/SDL2/SDL_ttf.h +294 -0
  89. data/assets/include/SDL2/SDL_types.h +29 -0
  90. data/assets/include/SDL2/SDL_version.h +162 -0
  91. data/assets/include/SDL2/SDL_video.h +1282 -0
  92. data/assets/include/SDL2/SDL_vulkan.h +276 -0
  93. data/assets/include/SDL2/begin_code.h +166 -0
  94. data/assets/include/SDL2/close_code.h +40 -0
  95. data/assets/include/glew.h +23686 -0
  96. data/assets/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  97. data/assets/ios/Assets.xcassets/Contents.json +6 -0
  98. data/assets/ios/Base.lproj/LaunchScreen.storyboard +27 -0
  99. data/assets/ios/Info.plist +43 -0
  100. data/assets/ios/MRuby.framework/Headers/mrbconf.h +143 -0
  101. data/assets/ios/MRuby.framework/Headers/mruby/array.h +280 -0
  102. data/assets/ios/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  103. data/assets/ios/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  104. data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
  105. data/assets/ios/MRuby.framework/Headers/mruby/class.h +97 -0
  106. data/assets/ios/MRuby.framework/Headers/mruby/common.h +77 -0
  107. data/assets/ios/MRuby.framework/Headers/mruby/compile.h +195 -0
  108. data/assets/ios/MRuby.framework/Headers/mruby/data.h +75 -0
  109. data/assets/ios/MRuby.framework/Headers/mruby/debug.h +67 -0
  110. data/assets/ios/MRuby.framework/Headers/mruby/dump.h +196 -0
  111. data/assets/ios/MRuby.framework/Headers/mruby/error.h +75 -0
  112. data/assets/ios/MRuby.framework/Headers/mruby/gc.h +91 -0
  113. data/assets/ios/MRuby.framework/Headers/mruby/hash.h +215 -0
  114. data/assets/ios/MRuby.framework/Headers/mruby/irep.h +75 -0
  115. data/assets/ios/MRuby.framework/Headers/mruby/istruct.h +47 -0
  116. data/assets/ios/MRuby.framework/Headers/mruby/khash.h +274 -0
  117. data/assets/ios/MRuby.framework/Headers/mruby/numeric.h +161 -0
  118. data/assets/ios/MRuby.framework/Headers/mruby/object.h +44 -0
  119. data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +69 -0
  120. data/assets/ios/MRuby.framework/Headers/mruby/ops.h +117 -0
  121. data/assets/ios/MRuby.framework/Headers/mruby/proc.h +131 -0
  122. data/assets/ios/MRuby.framework/Headers/mruby/range.h +49 -0
  123. data/assets/ios/MRuby.framework/Headers/mruby/re.h +16 -0
  124. data/assets/ios/MRuby.framework/Headers/mruby/string.h +444 -0
  125. data/assets/ios/MRuby.framework/Headers/mruby/throw.h +55 -0
  126. data/assets/ios/MRuby.framework/Headers/mruby/value.h +309 -0
  127. data/assets/ios/MRuby.framework/Headers/mruby/variable.h +136 -0
  128. data/assets/ios/MRuby.framework/Headers/mruby/version.h +110 -0
  129. data/assets/ios/MRuby.framework/Headers/mruby.h +1282 -0
  130. data/assets/ios/MRuby.framework/Info.plist +20 -0
  131. data/assets/ios/MRuby.framework/MRuby +0 -0
  132. data/assets/ios/MyApp.xcodeproj/project.pbxproj +368 -0
  133. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  134. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  135. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  136. data/assets/ios/main.c +1 -0
  137. data/assets/macos/lib/libFLAC.a +0 -0
  138. data/assets/macos/lib/libSDL2.a +0 -0
  139. data/assets/macos/lib/libSDL2_image.a +0 -0
  140. data/assets/macos/lib/libSDL2_mixer.a +0 -0
  141. data/assets/macos/lib/libSDL2_ttf.a +0 -0
  142. data/assets/macos/lib/libfreetype.a +0 -0
  143. data/assets/macos/lib/libjpeg.a +0 -0
  144. data/assets/macos/lib/libmodplug.a +0 -0
  145. data/assets/macos/lib/libmpg123.a +0 -0
  146. data/assets/macos/lib/libogg.a +0 -0
  147. data/assets/macos/lib/libpng16.a +0 -0
  148. data/assets/macos/lib/libtiff.a +0 -0
  149. data/assets/macos/lib/libvorbis.a +0 -0
  150. data/assets/macos/lib/libvorbisfile.a +0 -0
  151. data/assets/macos/lib/libwebp.a +0 -0
  152. data/assets/mingw/bin/SDL2.dll +0 -0
  153. data/assets/mingw/bin/SDL2_image.dll +0 -0
  154. data/assets/mingw/bin/SDL2_mixer.dll +0 -0
  155. data/assets/mingw/bin/SDL2_ttf.dll +0 -0
  156. data/assets/mingw/bin/glew32.dll +0 -0
  157. data/assets/mingw/bin/libFLAC-8.dll +0 -0
  158. data/assets/mingw/bin/libfreetype-6.dll +0 -0
  159. data/assets/mingw/bin/libjpeg-9.dll +0 -0
  160. data/assets/mingw/bin/libmodplug-1.dll +0 -0
  161. data/assets/mingw/bin/libmpg123-0.dll +0 -0
  162. data/assets/mingw/bin/libogg-0.dll +0 -0
  163. data/assets/mingw/bin/libopus-0.dll +0 -0
  164. data/assets/mingw/bin/libopusfile-0.dll +0 -0
  165. data/assets/mingw/bin/libpng16-16.dll +0 -0
  166. data/assets/mingw/bin/libtiff-5.dll +0 -0
  167. data/assets/mingw/bin/libvorbis-0.dll +0 -0
  168. data/assets/mingw/bin/libvorbisfile-3.dll +0 -0
  169. data/assets/mingw/bin/libwebp-7.dll +0 -0
  170. data/assets/mingw/bin/libwinpthread-1.dll +0 -0
  171. data/assets/mingw/bin/zlib1.dll +0 -0
  172. data/assets/mingw/lib/libSDL2.a +0 -0
  173. data/assets/mingw/lib/libSDL2.dll.a +0 -0
  174. data/assets/mingw/lib/libSDL2_image.a +0 -0
  175. data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
  176. data/assets/mingw/lib/libSDL2_mixer.a +0 -0
  177. data/assets/mingw/lib/libSDL2_mixer.dll.a +0 -0
  178. data/assets/mingw/lib/libSDL2_test.a +0 -0
  179. data/assets/mingw/lib/libSDL2_ttf.a +0 -0
  180. data/assets/mingw/lib/libSDL2_ttf.dll.a +0 -0
  181. data/assets/mingw/lib/libSDL2main.a +0 -0
  182. data/assets/mingw/lib/libglew32.a +0 -0
  183. data/assets/mingw/lib/libglew32.dll.a +0 -0
  184. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
  185. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +6 -0
  186. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +17 -0
  187. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
  188. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +6 -0
  189. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
  190. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  191. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
  192. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +6 -0
  193. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +17 -0
  194. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
  195. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +6 -0
  196. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
  197. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  198. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +32 -0
  199. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +16 -0
  200. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +16 -0
  201. data/assets/tvos/Assets.xcassets/Contents.json +6 -0
  202. data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +22 -0
  203. data/assets/tvos/Info.plist +30 -0
  204. data/assets/tvos/MRuby.framework/Headers/mrbconf.h +143 -0
  205. data/assets/tvos/MRuby.framework/Headers/mruby/array.h +280 -0
  206. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  207. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  208. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
  209. data/assets/tvos/MRuby.framework/Headers/mruby/class.h +97 -0
  210. data/assets/tvos/MRuby.framework/Headers/mruby/common.h +77 -0
  211. data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +195 -0
  212. data/assets/tvos/MRuby.framework/Headers/mruby/data.h +75 -0
  213. data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +67 -0
  214. data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +196 -0
  215. data/assets/tvos/MRuby.framework/Headers/mruby/error.h +75 -0
  216. data/assets/tvos/MRuby.framework/Headers/mruby/gc.h +91 -0
  217. data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +215 -0
  218. data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +75 -0
  219. data/assets/tvos/MRuby.framework/Headers/mruby/istruct.h +47 -0
  220. data/assets/tvos/MRuby.framework/Headers/mruby/khash.h +274 -0
  221. data/assets/tvos/MRuby.framework/Headers/mruby/numeric.h +161 -0
  222. data/assets/tvos/MRuby.framework/Headers/mruby/object.h +44 -0
  223. data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +69 -0
  224. data/assets/tvos/MRuby.framework/Headers/mruby/ops.h +117 -0
  225. data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +131 -0
  226. data/assets/tvos/MRuby.framework/Headers/mruby/range.h +49 -0
  227. data/assets/tvos/MRuby.framework/Headers/mruby/re.h +16 -0
  228. data/assets/tvos/MRuby.framework/Headers/mruby/string.h +444 -0
  229. data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +55 -0
  230. data/assets/tvos/MRuby.framework/Headers/mruby/value.h +309 -0
  231. data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +136 -0
  232. data/assets/tvos/MRuby.framework/Headers/mruby/version.h +110 -0
  233. data/assets/tvos/MRuby.framework/Headers/mruby.h +1282 -0
  234. data/assets/tvos/MRuby.framework/Info.plist +20 -0
  235. data/assets/tvos/MRuby.framework/MRuby +0 -0
  236. data/assets/tvos/MyApp.xcodeproj/project.pbxproj +350 -0
  237. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  238. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  239. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  240. data/assets/tvos/main.c +1 -0
  241. data/bin/ruby2d +142 -0
  242. data/ext/ruby2d/common.c +185 -0
  243. data/ext/ruby2d/controllers.c +110 -0
  244. data/ext/ruby2d/extconf.rb +147 -0
  245. data/ext/ruby2d/font.c +35 -0
  246. data/ext/ruby2d/gl.c +398 -0
  247. data/ext/ruby2d/gl2.c +86 -0
  248. data/ext/ruby2d/gl3.c +305 -0
  249. data/ext/ruby2d/gles.c +249 -0
  250. data/ext/ruby2d/image.c +58 -0
  251. data/ext/ruby2d/input.c +48 -0
  252. data/ext/ruby2d/music.c +127 -0
  253. data/ext/ruby2d/ruby2d.c +1374 -0
  254. data/ext/ruby2d/ruby2d.h +656 -0
  255. data/ext/ruby2d/shapes.c +154 -0
  256. data/ext/ruby2d/sound.c +118 -0
  257. data/ext/ruby2d/text.c +22 -0
  258. data/ext/ruby2d/window.c +414 -0
  259. data/lib/ruby2d/circle.rb +43 -0
  260. data/lib/ruby2d/cli/build.rb +237 -0
  261. data/lib/ruby2d/cli/colorize.rb +10 -0
  262. data/lib/ruby2d/cli/console.rb +65 -0
  263. data/lib/ruby2d/cli/enable_console.rb +5 -0
  264. data/lib/ruby2d/cli/launch.rb +50 -0
  265. data/lib/ruby2d/color.rb +136 -0
  266. data/lib/ruby2d/dsl.rb +46 -0
  267. data/lib/ruby2d/entity.rb +17 -0
  268. data/lib/ruby2d/exceptions.rb +6 -0
  269. data/lib/ruby2d/font.rb +96 -0
  270. data/lib/ruby2d/image.rb +58 -0
  271. data/lib/ruby2d/line.rb +89 -0
  272. data/lib/ruby2d/music.rb +67 -0
  273. data/lib/ruby2d/pixel.rb +17 -0
  274. data/lib/ruby2d/quad.rb +96 -0
  275. data/lib/ruby2d/rectangle.rb +65 -0
  276. data/lib/ruby2d/renderable.rb +40 -0
  277. data/lib/ruby2d/ruby2d.so +0 -0
  278. data/lib/ruby2d/sound.rb +55 -0
  279. data/lib/ruby2d/sprite.rb +232 -0
  280. data/lib/ruby2d/square.rb +37 -0
  281. data/lib/ruby2d/text.rb +76 -0
  282. data/lib/ruby2d/texture.rb +28 -0
  283. data/lib/ruby2d/tileset.rb +87 -0
  284. data/lib/ruby2d/triangle.rb +82 -0
  285. data/lib/ruby2d/version.rb +5 -0
  286. data/lib/ruby2d/vertices.rb +84 -0
  287. data/lib/ruby2d/window.rb +673 -0
  288. data/lib/ruby2d.rb +69 -0
  289. metadata +346 -0
@@ -0,0 +1,1282 @@
1
+ /*
2
+ ** mruby - An embeddable Ruby implementation
3
+ **
4
+ ** Copyright (c) mruby developers 2010-2018
5
+ **
6
+ ** Permission is hereby granted, free of charge, to any person obtaining
7
+ ** a copy of this software and associated documentation files (the
8
+ ** "Software"), to deal in the Software without restriction, including
9
+ ** without limitation the rights to use, copy, modify, merge, publish,
10
+ ** distribute, sublicense, and/or sell copies of the Software, and to
11
+ ** permit persons to whom the Software is furnished to do so, subject to
12
+ ** the following conditions:
13
+ **
14
+ ** The above copyright notice and this permission notice shall be
15
+ ** included in all copies or substantial portions of the Software.
16
+ **
17
+ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ **
25
+ ** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
26
+ */
27
+
28
+ #ifndef MRUBY_H
29
+ #define MRUBY_H
30
+
31
+ #ifdef __cplusplus
32
+ #define __STDC_LIMIT_MACROS
33
+ #define __STDC_CONSTANT_MACROS
34
+ #define __STDC_FORMAT_MACROS
35
+ #endif
36
+
37
+ #include <stdint.h>
38
+ #include <stddef.h>
39
+ #include <limits.h>
40
+
41
+ #ifdef __cplusplus
42
+ #ifndef SIZE_MAX
43
+ #ifdef __SIZE_MAX__
44
+ #define SIZE_MAX __SIZE_MAX__
45
+ #else
46
+ #define SIZE_MAX std::numeric_limits<size_t>::max()
47
+ #endif
48
+ #endif
49
+ #endif
50
+
51
+ #ifdef MRB_DEBUG
52
+ #include <assert.h>
53
+ #define mrb_assert(p) assert(p)
54
+ #define mrb_assert_int_fit(t1,n,t2,max) assert((n)>=0 && ((sizeof(n)<=sizeof(t2))||(n<=(t1)(max))))
55
+ #else
56
+ #define mrb_assert(p) ((void)0)
57
+ #define mrb_assert_int_fit(t1,n,t2,max) ((void)0)
58
+ #endif
59
+
60
+ #if __STDC_VERSION__ >= 201112L
61
+ #define mrb_static_assert(exp, str) _Static_assert(exp, str)
62
+ #else
63
+ #define mrb_static_assert(exp, str) mrb_assert(exp)
64
+ #endif
65
+
66
+ #include "mrbconf.h"
67
+
68
+ #ifndef MRB_WITHOUT_FLOAT
69
+ #ifndef FLT_EPSILON
70
+ #define FLT_EPSILON (1.19209290e-07f)
71
+ #endif
72
+ #ifndef DBL_EPSILON
73
+ #define DBL_EPSILON ((double)2.22044604925031308085e-16L)
74
+ #endif
75
+ #ifndef LDBL_EPSILON
76
+ #define LDBL_EPSILON (1.08420217248550443401e-19L)
77
+ #endif
78
+
79
+ #ifdef MRB_USE_FLOAT
80
+ #define MRB_FLOAT_EPSILON FLT_EPSILON
81
+ #else
82
+ #define MRB_FLOAT_EPSILON DBL_EPSILON
83
+ #endif
84
+ #endif
85
+
86
+ #include "mruby/common.h"
87
+ #include <mruby/value.h>
88
+ #include <mruby/gc.h>
89
+ #include <mruby/version.h>
90
+
91
+ /**
92
+ * MRuby C API entry point
93
+ */
94
+ MRB_BEGIN_DECL
95
+
96
+ typedef uint8_t mrb_code;
97
+
98
+ /**
99
+ * Required arguments signature type.
100
+ */
101
+ typedef uint32_t mrb_aspec;
102
+
103
+
104
+ struct mrb_irep;
105
+ struct mrb_state;
106
+
107
+ /**
108
+ * Function pointer type of custom allocator used in @see mrb_open_allocf.
109
+ *
110
+ * The function pointing it must behave similarly as realloc except:
111
+ * - If ptr is NULL it must allocate new space.
112
+ * - If s is NULL, ptr must be freed.
113
+ *
114
+ * See @see mrb_default_allocf for the default implementation.
115
+ */
116
+ typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud);
117
+
118
+ #ifndef MRB_FIXED_STATE_ATEXIT_STACK_SIZE
119
+ #define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5
120
+ #endif
121
+
122
+ typedef struct {
123
+ mrb_sym mid;
124
+ struct RProc *proc;
125
+ mrb_value *stackent;
126
+ uint16_t ridx;
127
+ uint16_t epos;
128
+ struct REnv *env;
129
+ mrb_code *pc; /* return address */
130
+ mrb_code *err; /* error position */
131
+ int argc;
132
+ int acc;
133
+ struct RClass *target_class;
134
+ } mrb_callinfo;
135
+
136
+ enum mrb_fiber_state {
137
+ MRB_FIBER_CREATED = 0,
138
+ MRB_FIBER_RUNNING,
139
+ MRB_FIBER_RESUMED,
140
+ MRB_FIBER_SUSPENDED,
141
+ MRB_FIBER_TRANSFERRED,
142
+ MRB_FIBER_TERMINATED,
143
+ };
144
+
145
+ struct mrb_context {
146
+ struct mrb_context *prev;
147
+
148
+ mrb_value *stack; /* stack of virtual machine */
149
+ mrb_value *stbase, *stend;
150
+
151
+ mrb_callinfo *ci;
152
+ mrb_callinfo *cibase, *ciend;
153
+
154
+ uint16_t *rescue; /* exception handler stack */
155
+ uint16_t rsize;
156
+ struct RProc **ensure; /* ensure handler stack */
157
+ uint16_t esize, eidx;
158
+
159
+ enum mrb_fiber_state status;
160
+ mrb_bool vmexec;
161
+ struct RFiber *fib;
162
+ };
163
+
164
+ #ifdef MRB_METHOD_CACHE_SIZE
165
+ # define MRB_METHOD_CACHE
166
+ #else
167
+ /* default method cache size: 128 */
168
+ /* cache size needs to be power of 2 */
169
+ # define MRB_METHOD_CACHE_SIZE (1<<7)
170
+ #endif
171
+
172
+ typedef mrb_value (*mrb_func_t)(struct mrb_state *mrb, mrb_value);
173
+
174
+ #ifdef MRB_METHOD_TABLE_INLINE
175
+ typedef uintptr_t mrb_method_t;
176
+ #else
177
+ typedef struct {
178
+ mrb_bool func_p;
179
+ union {
180
+ struct RProc *proc;
181
+ mrb_func_t func;
182
+ };
183
+ } mrb_method_t;
184
+ #endif
185
+
186
+ #ifdef MRB_METHOD_CACHE
187
+ struct mrb_cache_entry {
188
+ struct RClass *c, *c0;
189
+ mrb_sym mid;
190
+ mrb_method_t m;
191
+ };
192
+ #endif
193
+
194
+ struct mrb_jmpbuf;
195
+
196
+ typedef void (*mrb_atexit_func)(struct mrb_state*);
197
+
198
+ #define MRB_STATE_NO_REGEXP 1
199
+ #define MRB_STATE_REGEXP 2
200
+
201
+ typedef struct mrb_state {
202
+ struct mrb_jmpbuf *jmp;
203
+
204
+ uint32_t flags;
205
+ mrb_allocf allocf; /* memory allocation function */
206
+ void *allocf_ud; /* auxiliary data of allocf */
207
+
208
+ struct mrb_context *c;
209
+ struct mrb_context *root_c;
210
+ struct iv_tbl *globals; /* global variable table */
211
+
212
+ struct RObject *exc; /* exception */
213
+
214
+ struct RObject *top_self;
215
+ struct RClass *object_class; /* Object class */
216
+ struct RClass *class_class;
217
+ struct RClass *module_class;
218
+ struct RClass *proc_class;
219
+ struct RClass *string_class;
220
+ struct RClass *array_class;
221
+ struct RClass *hash_class;
222
+ struct RClass *range_class;
223
+
224
+ #ifndef MRB_WITHOUT_FLOAT
225
+ struct RClass *float_class;
226
+ #endif
227
+ struct RClass *fixnum_class;
228
+ struct RClass *true_class;
229
+ struct RClass *false_class;
230
+ struct RClass *nil_class;
231
+ struct RClass *symbol_class;
232
+ struct RClass *kernel_module;
233
+
234
+ struct alloca_header *mems;
235
+ mrb_gc gc;
236
+
237
+ #ifdef MRB_METHOD_CACHE
238
+ struct mrb_cache_entry cache[MRB_METHOD_CACHE_SIZE];
239
+ #endif
240
+
241
+ mrb_sym symidx;
242
+ struct kh_n2s *name2sym; /* symbol hash */
243
+ struct symbol_name *symtbl; /* symbol table */
244
+ size_t symcapa;
245
+
246
+ #ifdef MRB_ENABLE_DEBUG_HOOK
247
+ void (*code_fetch_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs);
248
+ void (*debug_op_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs);
249
+ #endif
250
+
251
+ #ifdef MRB_BYTECODE_DECODE_OPTION
252
+ mrb_code (*bytecode_decoder)(struct mrb_state* mrb, mrb_code code);
253
+ #endif
254
+
255
+ struct RClass *eException_class;
256
+ struct RClass *eStandardError_class;
257
+ struct RObject *nomem_err; /* pre-allocated NoMemoryError */
258
+ struct RObject *stack_err; /* pre-allocated SysStackError */
259
+ #ifdef MRB_GC_FIXED_ARENA
260
+ struct RObject *arena_err; /* pre-allocated arena overfow error */
261
+ #endif
262
+
263
+ void *ud; /* auxiliary data */
264
+
265
+ #ifdef MRB_FIXED_STATE_ATEXIT_STACK
266
+ mrb_atexit_func atexit_stack[MRB_FIXED_STATE_ATEXIT_STACK_SIZE];
267
+ #else
268
+ mrb_atexit_func *atexit_stack;
269
+ #endif
270
+ uint16_t atexit_stack_len;
271
+ uint16_t ecall_nest; /* prevent infinite recursive ecall() */
272
+ } mrb_state;
273
+
274
+ /**
275
+ * Defines a new class.
276
+ *
277
+ * If you're creating a gem it may look something like this:
278
+ *
279
+ * !!!c
280
+ * void mrb_example_gem_init(mrb_state* mrb) {
281
+ * struct RClass *example_class;
282
+ * example_class = mrb_define_class(mrb, "Example_Class", mrb->object_class);
283
+ * }
284
+ *
285
+ * void mrb_example_gem_final(mrb_state* mrb) {
286
+ * //free(TheAnimals);
287
+ * }
288
+ *
289
+ * @param [mrb_state *] mrb The current mruby state.
290
+ * @param [const char *] name The name of the defined class.
291
+ * @param [struct RClass *] super The new class parent.
292
+ * @return [struct RClass *] Reference to the newly defined class.
293
+ * @see mrb_define_class_under
294
+ */
295
+ MRB_API struct RClass *mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super);
296
+
297
+ /**
298
+ * Defines a new module.
299
+ *
300
+ * @param [mrb_state *] mrb_state* The current mruby state.
301
+ * @param [const char *] char* The name of the module.
302
+ * @return [struct RClass *] Reference to the newly defined module.
303
+ */
304
+ MRB_API struct RClass *mrb_define_module(mrb_state *, const char*);
305
+ MRB_API mrb_value mrb_singleton_class(mrb_state*, mrb_value);
306
+
307
+ /**
308
+ * Include a module in another class or module.
309
+ * Equivalent to:
310
+ *
311
+ * module B
312
+ * include A
313
+ * end
314
+ * @param [mrb_state *] mrb_state* The current mruby state.
315
+ * @param [struct RClass *] RClass* A reference to module or a class.
316
+ * @param [struct RClass *] RClass* A reference to the module to be included.
317
+ */
318
+ MRB_API void mrb_include_module(mrb_state*, struct RClass*, struct RClass*);
319
+
320
+ /**
321
+ * Prepends a module in another class or module.
322
+ *
323
+ * Equivalent to:
324
+ * module B
325
+ * prepend A
326
+ * end
327
+ * @param [mrb_state *] mrb_state* The current mruby state.
328
+ * @param [struct RClass *] RClass* A reference to module or a class.
329
+ * @param [struct RClass *] RClass* A reference to the module to be prepended.
330
+ */
331
+ MRB_API void mrb_prepend_module(mrb_state*, struct RClass*, struct RClass*);
332
+
333
+ /**
334
+ * Defines a global function in ruby.
335
+ *
336
+ * If you're creating a gem it may look something like this
337
+ *
338
+ * Example:
339
+ *
340
+ * !!!c
341
+ * mrb_value example_method(mrb_state* mrb, mrb_value self)
342
+ * {
343
+ * puts("Executing example command!");
344
+ * return self;
345
+ * }
346
+ *
347
+ * void mrb_example_gem_init(mrb_state* mrb)
348
+ * {
349
+ * mrb_define_method(mrb, mrb->kernel_module, "example_method", example_method, MRB_ARGS_NONE());
350
+ * }
351
+ *
352
+ * @param [mrb_state *] mrb The MRuby state reference.
353
+ * @param [struct RClass *] cla The class pointer where the method will be defined.
354
+ * @param [const char *] name The name of the method being defined.
355
+ * @param [mrb_func_t] func The function pointer to the method definition.
356
+ * @param [mrb_aspec] aspec The method parameters declaration.
357
+ */
358
+ MRB_API void mrb_define_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec);
359
+
360
+ /**
361
+ * Defines a class method.
362
+ *
363
+ * Example:
364
+ *
365
+ * # Ruby style
366
+ * class Foo
367
+ * def Foo.bar
368
+ * end
369
+ * end
370
+ * // C style
371
+ * mrb_value bar_method(mrb_state* mrb, mrb_value self){
372
+ * return mrb_nil_value();
373
+ * }
374
+ * void mrb_example_gem_init(mrb_state* mrb){
375
+ * struct RClass *foo;
376
+ * foo = mrb_define_class(mrb, "Foo", mrb->object_class);
377
+ * mrb_define_class_method(mrb, foo, "bar", bar_method, MRB_ARGS_NONE());
378
+ * }
379
+ * @param [mrb_state *] mrb_state* The MRuby state reference.
380
+ * @param [struct RClass *] RClass* The class where the class method will be defined.
381
+ * @param [const char *] char* The name of the class method being defined.
382
+ * @param [mrb_func_t] mrb_func_t The function pointer to the class method definition.
383
+ * @param [mrb_aspec] mrb_aspec The method parameters declaration.
384
+ */
385
+ MRB_API void mrb_define_class_method(mrb_state *, struct RClass *, const char *, mrb_func_t, mrb_aspec);
386
+ MRB_API void mrb_define_singleton_method(mrb_state*, struct RObject*, const char*, mrb_func_t, mrb_aspec);
387
+
388
+ /**
389
+ * Defines a module function.
390
+ *
391
+ * Example:
392
+ *
393
+ * # Ruby style
394
+ * module Foo
395
+ * def Foo.bar
396
+ * end
397
+ * end
398
+ * // C style
399
+ * mrb_value bar_method(mrb_state* mrb, mrb_value self){
400
+ * return mrb_nil_value();
401
+ * }
402
+ * void mrb_example_gem_init(mrb_state* mrb){
403
+ * struct RClass *foo;
404
+ * foo = mrb_define_module(mrb, "Foo");
405
+ * mrb_define_module_function(mrb, foo, "bar", bar_method, MRB_ARGS_NONE());
406
+ * }
407
+ * @param [mrb_state *] mrb_state* The MRuby state reference.
408
+ * @param [struct RClass *] RClass* The module where the module function will be defined.
409
+ * @param [const char *] char* The name of the module function being defined.
410
+ * @param [mrb_func_t] mrb_func_t The function pointer to the module function definition.
411
+ * @param [mrb_aspec] mrb_aspec The method parameters declaration.
412
+ */
413
+ MRB_API void mrb_define_module_function(mrb_state*, struct RClass*, const char*, mrb_func_t, mrb_aspec);
414
+
415
+ /**
416
+ * Defines a constant.
417
+ *
418
+ * Example:
419
+ *
420
+ * # Ruby style
421
+ * class ExampleClass
422
+ * AGE = 22
423
+ * end
424
+ * // C style
425
+ * #include <stdio.h>
426
+ * #include <mruby.h>
427
+ *
428
+ * void
429
+ * mrb_example_gem_init(mrb_state* mrb){
430
+ * mrb_define_const(mrb, mrb->kernel_module, "AGE", mrb_fixnum_value(22));
431
+ * }
432
+ *
433
+ * mrb_value
434
+ * mrb_example_gem_final(mrb_state* mrb){
435
+ * }
436
+ * @param [mrb_state *] mrb_state* The MRuby state reference.
437
+ * @param [struct RClass *] RClass* A class or module the constant is defined in.
438
+ * @param [const char *] name The name of the constant being defined.
439
+ * @param [mrb_value] mrb_value The value for the constant.
440
+ */
441
+ MRB_API void mrb_define_const(mrb_state*, struct RClass*, const char *name, mrb_value);
442
+
443
+ /**
444
+ * Undefines a method.
445
+ *
446
+ * Example:
447
+ *
448
+ * # Ruby style
449
+ *
450
+ * class ExampleClassA
451
+ * def example_method
452
+ * "example"
453
+ * end
454
+ * end
455
+ * ExampleClassA.new.example_method # => example
456
+ *
457
+ * class ExampleClassB < ExampleClassA
458
+ * undef_method :example_method
459
+ * end
460
+ *
461
+ * ExampleClassB.new.example_method # => undefined method 'example_method' for ExampleClassB (NoMethodError)
462
+ *
463
+ * // C style
464
+ * #include <stdio.h>
465
+ * #include <mruby.h>
466
+ *
467
+ * mrb_value
468
+ * mrb_example_method(mrb_state *mrb){
469
+ * return mrb_str_new_lit(mrb, "example");
470
+ * }
471
+ *
472
+ * void
473
+ * mrb_example_gem_init(mrb_state* mrb){
474
+ * struct RClass *example_class_a;
475
+ * struct RClass *example_class_b;
476
+ * struct RClass *example_class_c;
477
+ *
478
+ * example_class_a = mrb_define_class(mrb, "ExampleClassA", mrb->object_class);
479
+ * mrb_define_method(mrb, example_class_a, "example_method", mrb_example_method, MRB_ARGS_NONE());
480
+ * example_class_b = mrb_define_class(mrb, "ExampleClassB", example_class_a);
481
+ * example_class_c = mrb_define_class(mrb, "ExampleClassC", example_class_b);
482
+ * mrb_undef_method(mrb, example_class_c, "example_method");
483
+ * }
484
+ *
485
+ * mrb_example_gem_final(mrb_state* mrb){
486
+ * }
487
+ * @param [mrb_state*] mrb_state* The mruby state reference.
488
+ * @param [struct RClass*] RClass* A class the method will be undefined from.
489
+ * @param [const char] const char* The name of the method to be undefined.
490
+ */
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);
493
+
494
+ /**
495
+ * Undefine a class method.
496
+ * Example:
497
+ *
498
+ * # Ruby style
499
+ * class ExampleClass
500
+ * def self.example_method
501
+ * "example"
502
+ * end
503
+ * end
504
+ *
505
+ * ExampleClass.example_method
506
+ *
507
+ * // C style
508
+ * #include <stdio.h>
509
+ * #include <mruby.h>
510
+ *
511
+ * mrb_value
512
+ * mrb_example_method(mrb_state *mrb){
513
+ * return mrb_str_new_lit(mrb, "example");
514
+ * }
515
+ *
516
+ * void
517
+ * mrb_example_gem_init(mrb_state* mrb){
518
+ * struct RClass *example_class;
519
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
520
+ * mrb_define_class_method(mrb, example_class, "example_method", mrb_example_method, MRB_ARGS_NONE());
521
+ * mrb_undef_class_method(mrb, example_class, "example_method");
522
+ * }
523
+ *
524
+ * void
525
+ * mrb_example_gem_final(mrb_state* mrb){
526
+ * }
527
+ * @param [mrb_state*] mrb_state* The mruby state reference.
528
+ * @param [RClass*] RClass* A class the class method will be undefined from.
529
+ * @param [constchar*] constchar* The name of the class method to be undefined.
530
+ */
531
+ MRB_API void mrb_undef_class_method(mrb_state*, struct RClass*, const char*);
532
+
533
+ /**
534
+ * Initialize a new object instance of c class.
535
+ *
536
+ * Example:
537
+ *
538
+ * # Ruby style
539
+ * class ExampleClass
540
+ * end
541
+ *
542
+ * p ExampleClass # => #<ExampleClass:0x9958588>
543
+ * // C style
544
+ * #include <stdio.h>
545
+ * #include <mruby.h>
546
+ *
547
+ * void
548
+ * mrb_example_gem_init(mrb_state* mrb) {
549
+ * struct RClass *example_class;
550
+ * mrb_value obj;
551
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class); # => class ExampleClass; end
552
+ * obj = mrb_obj_new(mrb, example_class, 0, NULL); # => ExampleClass.new
553
+ * mrb_p(mrb, obj); // => Kernel#p
554
+ * }
555
+ * @param [mrb_state*] mrb The current mruby state.
556
+ * @param [RClass*] c Reference to the class of the new object.
557
+ * @param [mrb_int] argc Number of arguments in argv
558
+ * @param [const mrb_value *] argv Array of mrb_value to initialize the object
559
+ * @return [mrb_value] The newly initialized object
560
+ */
561
+ MRB_API mrb_value mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv);
562
+
563
+ /** @see mrb_obj_new */
564
+ MRB_INLINE mrb_value mrb_class_new_instance(mrb_state *mrb, mrb_int argc, const mrb_value *argv, struct RClass *c)
565
+ {
566
+ return mrb_obj_new(mrb,c,argc,argv);
567
+ }
568
+
569
+ MRB_API mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv);
570
+
571
+ /**
572
+ * Creates a new instance of Class, Class.
573
+ *
574
+ * Example:
575
+ *
576
+ * void
577
+ * mrb_example_gem_init(mrb_state* mrb) {
578
+ * struct RClass *example_class;
579
+ *
580
+ * mrb_value obj;
581
+ * example_class = mrb_class_new(mrb, mrb->object_class);
582
+ * obj = mrb_obj_new(mrb, example_class, 0, NULL); // => #<#<Class:0x9a945b8>:0x9a94588>
583
+ * mrb_p(mrb, obj); // => Kernel#p
584
+ * }
585
+ *
586
+ * @param [mrb_state*] mrb The current mruby state.
587
+ * @param [struct RClass *] super The super class or parent.
588
+ * @return [struct RClass *] Reference to the new class.
589
+ */
590
+ MRB_API struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super);
591
+
592
+ /**
593
+ * Creates a new module, Module.
594
+ *
595
+ * Example:
596
+ * void
597
+ * mrb_example_gem_init(mrb_state* mrb) {
598
+ * struct RClass *example_module;
599
+ *
600
+ * example_module = mrb_module_new(mrb);
601
+ * }
602
+ *
603
+ * @param [mrb_state*] mrb The current mruby state.
604
+ * @return [struct RClass *] Reference to the new module.
605
+ */
606
+ MRB_API struct RClass * mrb_module_new(mrb_state *mrb);
607
+
608
+ /**
609
+ * Returns an mrb_bool. True if class was defined, and false if the class was not defined.
610
+ *
611
+ * Example:
612
+ * void
613
+ * mrb_example_gem_init(mrb_state* mrb) {
614
+ * struct RClass *example_class;
615
+ * mrb_bool cd;
616
+ *
617
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
618
+ * cd = mrb_class_defined(mrb, "ExampleClass");
619
+ *
620
+ * // If mrb_class_defined returns 1 then puts "True"
621
+ * // If mrb_class_defined returns 0 then puts "False"
622
+ * if (cd == 1){
623
+ * puts("True");
624
+ * }
625
+ * else {
626
+ * puts("False");
627
+ * }
628
+ * }
629
+ *
630
+ * @param [mrb_state*] mrb The current mruby state.
631
+ * @param [const char *] name A string representing the name of the class.
632
+ * @return [mrb_bool] A boolean value.
633
+ */
634
+ MRB_API mrb_bool mrb_class_defined(mrb_state *mrb, const char *name);
635
+
636
+ /**
637
+ * Gets a class.
638
+ * @param [mrb_state*] mrb The current mruby state.
639
+ * @param [const char *] name The name of the class.
640
+ * @return [struct RClass *] A reference to the class.
641
+ */
642
+ MRB_API struct RClass * mrb_class_get(mrb_state *mrb, const char *name);
643
+
644
+ /**
645
+ * Gets a exception class.
646
+ * @param [mrb_state*] mrb The current mruby state.
647
+ * @param [const char *] name The name of the class.
648
+ * @return [struct RClass *] A reference to the class.
649
+ */
650
+ MRB_API struct RClass * mrb_exc_get(mrb_state *mrb, const char *name);
651
+
652
+ /**
653
+ * Returns an mrb_bool. True if inner class was defined, and false if the inner class was not defined.
654
+ *
655
+ * Example:
656
+ * void
657
+ * mrb_example_gem_init(mrb_state* mrb) {
658
+ * struct RClass *example_outer, *example_inner;
659
+ * mrb_bool cd;
660
+ *
661
+ * example_outer = mrb_define_module(mrb, "ExampleOuter");
662
+ *
663
+ * example_inner = mrb_define_class_under(mrb, example_outer, "ExampleInner", mrb->object_class);
664
+ * cd = mrb_class_defined_under(mrb, example_outer, "ExampleInner");
665
+ *
666
+ * // If mrb_class_defined_under returns 1 then puts "True"
667
+ * // If mrb_class_defined_under returns 0 then puts "False"
668
+ * if (cd == 1){
669
+ * puts("True");
670
+ * }
671
+ * else {
672
+ * puts("False");
673
+ * }
674
+ * }
675
+ *
676
+ * @param [mrb_state*] mrb The current mruby state.
677
+ * @param [struct RClass *] outer The name of the outer class.
678
+ * @param [const char *] name A string representing the name of the inner class.
679
+ * @return [mrb_bool] A boolean value.
680
+ */
681
+ MRB_API mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name);
682
+
683
+ /**
684
+ * Gets a child class.
685
+ * @param [mrb_state*] mrb The current mruby state.
686
+ * @param [struct RClass *] outer The name of the parent class.
687
+ * @param [const char *] name The name of the class.
688
+ * @return [struct RClass *] A reference to the class.
689
+ */
690
+ MRB_API struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
691
+
692
+ /**
693
+ * Gets a module.
694
+ * @param [mrb_state*] mrb The current mruby state.
695
+ * @param [const char *] name The name of the module.
696
+ * @return [struct RClass *] A reference to the module.
697
+ */
698
+ MRB_API struct RClass * mrb_module_get(mrb_state *mrb, const char *name);
699
+
700
+ /**
701
+ * Gets a module defined under another module.
702
+ * @param [mrb_state*] mrb The current mruby state.
703
+ * @param [struct RClass *] outer The name of the outer module.
704
+ * @param [const char *] name The name of the module.
705
+ * @return [struct RClass *] A reference to the module.
706
+ */
707
+ MRB_API struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
708
+ MRB_API mrb_value mrb_notimplement_m(mrb_state*, mrb_value);
709
+
710
+ /**
711
+ * Duplicate an object.
712
+ *
713
+ * Equivalent to:
714
+ * Object#dup
715
+ * @param [mrb_state*] mrb The current mruby state.
716
+ * @param [mrb_value] obj Object to be duplicate.
717
+ * @return [mrb_value] The newly duplicated object.
718
+ */
719
+ MRB_API mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj);
720
+
721
+ /**
722
+ * Returns true if obj responds to the given method. If the method was defined for that
723
+ * class it returns true, it returns false otherwise.
724
+ *
725
+ * Example:
726
+ * # Ruby style
727
+ * class ExampleClass
728
+ * def example_method
729
+ * end
730
+ * end
731
+ *
732
+ * ExampleClass.new.respond_to?(:example_method) # => true
733
+ *
734
+ * // C style
735
+ * void
736
+ * mrb_example_gem_init(mrb_state* mrb) {
737
+ * struct RClass *example_class;
738
+ * mrb_sym mid;
739
+ * mrb_bool obj_resp;
740
+ *
741
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
742
+ * mrb_define_method(mrb, example_class, "example_method", exampleMethod, MRB_ARGS_NONE());
743
+ * mid = mrb_intern_str(mrb, mrb_str_new_lit(mrb, "example_method" ));
744
+ * obj_resp = mrb_obj_respond_to(mrb, example_class, mid); // => 1(true in Ruby world)
745
+ *
746
+ * // If mrb_obj_respond_to returns 1 then puts "True"
747
+ * // If mrb_obj_respond_to returns 0 then puts "False"
748
+ * if (obj_resp == 1) {
749
+ * puts("True");
750
+ * }
751
+ * else if (obj_resp == 0) {
752
+ * puts("False");
753
+ * }
754
+ * }
755
+ *
756
+ * @param [mrb_state*] mrb The current mruby state.
757
+ * @param [struct RClass *] c A reference to a class.
758
+ * @param [mrb_sym] mid A symbol referencing a method id.
759
+ * @return [mrb_bool] A boolean value.
760
+ */
761
+ MRB_API mrb_bool mrb_obj_respond_to(mrb_state *mrb, struct RClass* c, mrb_sym mid);
762
+
763
+ /**
764
+ * Defines a new class under a given module
765
+ *
766
+ * @param [mrb_state*] mrb The current mruby state.
767
+ * @param [struct RClass *] outer Reference to the module under which the new class will be defined
768
+ * @param [const char *] name The name of the defined class
769
+ * @param [struct RClass *] super The new class parent
770
+ * @return [struct RClass *] Reference to the newly defined class
771
+ * @see mrb_define_class
772
+ */
773
+ MRB_API struct RClass * mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super);
774
+
775
+ MRB_API struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *outer, const char *name);
776
+
777
+ /**
778
+ * Function requires n arguments.
779
+ *
780
+ * @param n
781
+ * The number of required arguments.
782
+ */
783
+ #define MRB_ARGS_REQ(n) ((mrb_aspec)((n)&0x1f) << 18)
784
+
785
+ /**
786
+ * Function takes n optional arguments
787
+ *
788
+ * @param n
789
+ * The number of optional arguments.
790
+ */
791
+ #define MRB_ARGS_OPT(n) ((mrb_aspec)((n)&0x1f) << 13)
792
+
793
+ /**
794
+ * Function takes n1 mandatory arguments and n2 optional arguments
795
+ *
796
+ * @param n1
797
+ * The number of required arguments.
798
+ * @param n2
799
+ * The number of optional arguments.
800
+ */
801
+ #define MRB_ARGS_ARG(n1,n2) (MRB_ARGS_REQ(n1)|MRB_ARGS_OPT(n2))
802
+
803
+ /** rest argument */
804
+ #define MRB_ARGS_REST() ((mrb_aspec)(1 << 12))
805
+
806
+ /** required arguments after rest */
807
+ #define MRB_ARGS_POST(n) ((mrb_aspec)((n)&0x1f) << 7)
808
+
809
+ /** keyword arguments (n of keys, kdict) */
810
+ #define MRB_ARGS_KEY(n1,n2) ((mrb_aspec)((((n1)&0x1f) << 2) | ((n2)?(1<<1):0)))
811
+
812
+ /**
813
+ * Function takes a block argument
814
+ */
815
+ #define MRB_ARGS_BLOCK() ((mrb_aspec)1)
816
+
817
+ /**
818
+ * Function accepts any number of arguments
819
+ */
820
+ #define MRB_ARGS_ANY() MRB_ARGS_REST()
821
+
822
+ /**
823
+ * Function accepts no arguments
824
+ */
825
+ #define MRB_ARGS_NONE() ((mrb_aspec)0)
826
+
827
+ /**
828
+ * Format specifiers for {mrb_get_args} function
829
+ *
830
+ * Must be a C string composed of the following format specifiers:
831
+ *
832
+ * | char | Ruby type | C types | Notes |
833
+ * |:----:|----------------|-------------------|----------------------------------------------------|
834
+ * | `o` | {Object} | {mrb_value} | Could be used to retrieve any type of argument |
835
+ * | `C` | {Class}/{Module} | {mrb_value} | |
836
+ * | `S` | {String} | {mrb_value} | when `!` follows, the value may be `nil` |
837
+ * | `A` | {Array} | {mrb_value} | when `!` follows, the value may be `nil` |
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` |
840
+ * | `z` | {String} | char * | `NULL` terminated string; `z!` gives `NULL` for `nil` |
841
+ * | `a` | {Array} | {mrb_value} *, {mrb_int} | Receive two arguments; `a!` gives (`NULL`,`0`) for `nil` |
842
+ * | `f` | {Float} | {mrb_float} | |
843
+ * | `i` | {Integer} | {mrb_int} | |
844
+ * | `b` | boolean | {mrb_bool} | |
845
+ * | `n` | {Symbol} | {mrb_sym} | |
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
+ * | &vert; | optional | | After this spec following specs would be optional. |
849
+ * | `?` | optional given | {mrb_bool} | `TRUE` if preceding argument is given. Used to check optional argument is given. |
850
+ *
851
+ * @see mrb_get_args
852
+ */
853
+ typedef const char *mrb_args_format;
854
+
855
+ /**
856
+ * Retrieve arguments from mrb_state.
857
+ *
858
+ * @param mrb The current MRuby state.
859
+ * @param format [mrb_args_format] is a list of format specifiers
860
+ * @param ... The passing variadic arguments must be a pointer of retrieving type.
861
+ * @return the number of arguments retrieved.
862
+ * @see mrb_args_format
863
+ */
864
+ MRB_API mrb_int mrb_get_args(mrb_state *mrb, mrb_args_format format, ...);
865
+
866
+ static inline mrb_sym
867
+ mrb_get_mid(mrb_state *mrb) /* get method symbol */
868
+ {
869
+ return mrb->c->ci->mid;
870
+ }
871
+
872
+ /**
873
+ * Retrieve number of arguments from mrb_state.
874
+ *
875
+ * Correctly handles *splat arguments.
876
+ */
877
+ MRB_API mrb_int mrb_get_argc(mrb_state *mrb);
878
+
879
+ MRB_API mrb_value* mrb_get_argv(mrb_state *mrb);
880
+
881
+ /* `strlen` for character string literals (use with caution or `strlen` instead)
882
+ Adjacent string literals are concatenated in C/C++ in translation phase 6.
883
+ If `lit` is not one, the compiler will report a syntax error:
884
+ MSVC: "error C2143: syntax error : missing ')' before 'string'"
885
+ GCC: "error: expected ')' before string constant"
886
+ */
887
+ #define mrb_strlen_lit(lit) (sizeof(lit "") - 1)
888
+
889
+ /**
890
+ * Call existing ruby functions.
891
+ *
892
+ * #include <stdio.h>
893
+ * #include <mruby.h>
894
+ * #include "mruby/compile.h"
895
+ *
896
+ * int
897
+ * main()
898
+ * {
899
+ * mrb_int i = 99;
900
+ * mrb_state *mrb = mrb_open();
901
+ *
902
+ * if (!mrb) { }
903
+ * FILE *fp = fopen("test.rb","r");
904
+ * mrb_value obj = mrb_load_file(mrb,fp);
905
+ * mrb_funcall(mrb, obj, "method_name", 1, mrb_fixnum_value(i));
906
+ * fclose(fp);
907
+ * mrb_close(mrb);
908
+ * }
909
+ * @param [mrb_state*] mrb_state* The current mruby state.
910
+ * @param [mrb_value] mrb_value A reference to an mruby value.
911
+ * @param [const char*] const char* The name of the method.
912
+ * @param [mrb_int] mrb_int The number of arguments the method has.
913
+ * @param [...] ... Variadic values(not type safe!).
914
+ * @return [mrb_value] mrb_value mruby function value.
915
+ */
916
+ MRB_API mrb_value mrb_funcall(mrb_state*, mrb_value, const char*, mrb_int,...);
917
+ /**
918
+ * Call existing ruby functions. This is basically the type safe version of mrb_funcall.
919
+ *
920
+ * #include <stdio.h>
921
+ * #include <mruby.h>
922
+ * #include "mruby/compile.h"
923
+ * int
924
+ * main()
925
+ * {
926
+ * mrb_int i = 99;
927
+ * mrb_state *mrb = mrb_open();
928
+ *
929
+ * if (!mrb) { }
930
+ * mrb_sym m_sym = mrb_intern_lit(mrb, "method_name"); // Symbol for method.
931
+ *
932
+ * FILE *fp = fopen("test.rb","r");
933
+ * mrb_value obj = mrb_load_file(mrb,fp);
934
+ * mrb_funcall_argv(mrb, obj, m_sym, 1, &obj); // Calling ruby function from test.rb.
935
+ * fclose(fp);
936
+ * mrb_close(mrb);
937
+ * }
938
+ * @param [mrb_state*] mrb_state* The current mruby state.
939
+ * @param [mrb_value] mrb_value A reference to an mruby value.
940
+ * @param [mrb_sym] mrb_sym The symbol representing the method.
941
+ * @param [mrb_int] mrb_int The number of arguments the method has.
942
+ * @param [const mrb_value*] mrb_value* Pointer to the object.
943
+ * @return [mrb_value] mrb_value mruby function value.
944
+ * @see mrb_funcall
945
+ */
946
+ MRB_API mrb_value mrb_funcall_argv(mrb_state*, mrb_value, mrb_sym, mrb_int, const mrb_value*);
947
+ /**
948
+ * Call existing ruby functions with a block.
949
+ */
950
+ MRB_API mrb_value mrb_funcall_with_block(mrb_state*, mrb_value, mrb_sym, mrb_int, const mrb_value*, mrb_value);
951
+ /**
952
+ * Create a symbol
953
+ *
954
+ * # Ruby style:
955
+ * :pizza # => :pizza
956
+ *
957
+ * // C style:
958
+ * mrb_sym m_sym = mrb_intern_lit(mrb, "pizza"); // => :pizza
959
+ * @param [mrb_state*] mrb_state* The current mruby state.
960
+ * @param [const char*] const char* The name of the method.
961
+ * @return [mrb_sym] mrb_sym A symbol.
962
+ */
963
+ MRB_API mrb_sym mrb_intern_cstr(mrb_state*,const char*);
964
+ MRB_API mrb_sym mrb_intern(mrb_state*,const char*,size_t);
965
+ MRB_API mrb_sym mrb_intern_static(mrb_state*,const char*,size_t);
966
+ #define mrb_intern_lit(mrb, lit) mrb_intern_static(mrb, lit, mrb_strlen_lit(lit))
967
+ MRB_API mrb_sym mrb_intern_str(mrb_state*,mrb_value);
968
+ MRB_API mrb_value mrb_check_intern_cstr(mrb_state*,const char*);
969
+ MRB_API mrb_value mrb_check_intern(mrb_state*,const char*,size_t);
970
+ MRB_API mrb_value mrb_check_intern_str(mrb_state*,mrb_value);
971
+ MRB_API const char *mrb_sym2name(mrb_state*,mrb_sym);
972
+ MRB_API const char *mrb_sym2name_len(mrb_state*,mrb_sym,mrb_int*);
973
+ MRB_API mrb_value mrb_sym2str(mrb_state*,mrb_sym);
974
+
975
+ MRB_API void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */
976
+ MRB_API void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */
977
+ MRB_API void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */
978
+ MRB_API void *mrb_realloc_simple(mrb_state*, void*, size_t); /* return NULL if no memory available */
979
+ MRB_API void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory available */
980
+ MRB_API struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*);
981
+ MRB_API void mrb_free(mrb_state*, void*);
982
+
983
+ MRB_API mrb_value mrb_str_new(mrb_state *mrb, const char *p, size_t len);
984
+
985
+ /**
986
+ * Turns a C string into a Ruby string value.
987
+ */
988
+ MRB_API mrb_value mrb_str_new_cstr(mrb_state*, const char*);
989
+ MRB_API mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len);
990
+ #define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
991
+
992
+ #ifdef _WIN32
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);
995
+ #define mrb_locale_free(p) free(p)
996
+ #define mrb_utf8_free(p) free(p)
997
+ #else
998
+ #define mrb_utf8_from_locale(p, l) ((char*)p)
999
+ #define mrb_locale_from_utf8(p, l) ((char*)p)
1000
+ #define mrb_locale_free(p)
1001
+ #define mrb_utf8_free(p)
1002
+ #endif
1003
+
1004
+ /**
1005
+ * Creates new mrb_state.
1006
+ *
1007
+ * @return
1008
+ * Pointer to the newly created mrb_state.
1009
+ */
1010
+ MRB_API mrb_state* mrb_open(void);
1011
+
1012
+ /**
1013
+ * Create new mrb_state with custom allocators.
1014
+ *
1015
+ * @param f
1016
+ * Reference to the allocation function.
1017
+ * @param ud
1018
+ * User data will be passed to custom allocator f.
1019
+ * If user data isn't required just pass NULL.
1020
+ * @return
1021
+ * Pointer to the newly created mrb_state.
1022
+ */
1023
+ MRB_API mrb_state* mrb_open_allocf(mrb_allocf f, void *ud);
1024
+
1025
+ /**
1026
+ * Create new mrb_state with just the MRuby core
1027
+ *
1028
+ * @param f
1029
+ * Reference to the allocation function.
1030
+ * Use mrb_default_allocf for the default
1031
+ * @param ud
1032
+ * User data will be passed to custom allocator f.
1033
+ * If user data isn't required just pass NULL.
1034
+ * @return
1035
+ * Pointer to the newly created mrb_state.
1036
+ */
1037
+ MRB_API mrb_state* mrb_open_core(mrb_allocf f, void *ud);
1038
+
1039
+ /**
1040
+ * Closes and frees a mrb_state.
1041
+ *
1042
+ * @param mrb
1043
+ * Pointer to the mrb_state to be closed.
1044
+ */
1045
+ MRB_API void mrb_close(mrb_state *mrb);
1046
+
1047
+ /**
1048
+ * The default allocation function.
1049
+ *
1050
+ * @see mrb_allocf
1051
+ */
1052
+ MRB_API void* mrb_default_allocf(mrb_state*, void*, size_t, void*);
1053
+
1054
+ MRB_API mrb_value mrb_top_self(mrb_state *);
1055
+ MRB_API mrb_value mrb_run(mrb_state*, struct RProc*, mrb_value);
1056
+ MRB_API mrb_value mrb_top_run(mrb_state*, struct RProc*, mrb_value, unsigned int);
1057
+ MRB_API mrb_value mrb_vm_run(mrb_state*, struct RProc*, mrb_value, unsigned int);
1058
+ MRB_API mrb_value mrb_vm_exec(mrb_state*, struct RProc*, mrb_code*);
1059
+ /* compatibility macros */
1060
+ #define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k))
1061
+ #define mrb_toplevel_run(m,p) mrb_toplevel_run_keep((m),(p),0)
1062
+ #define mrb_context_run(m,p,s,k) mrb_vm_run((m),(p),(s),(k))
1063
+
1064
+ MRB_API void mrb_p(mrb_state*, mrb_value);
1065
+ MRB_API mrb_int mrb_obj_id(mrb_value obj);
1066
+ MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name);
1067
+
1068
+ MRB_API mrb_bool mrb_obj_eq(mrb_state*, mrb_value, mrb_value);
1069
+ MRB_API mrb_bool mrb_obj_equal(mrb_state*, mrb_value, mrb_value);
1070
+ MRB_API mrb_bool mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1071
+ MRB_API mrb_value mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base);
1072
+ MRB_API mrb_value mrb_Integer(mrb_state *mrb, mrb_value val);
1073
+ #ifndef MRB_WITHOUT_FLOAT
1074
+ MRB_API mrb_value mrb_Float(mrb_state *mrb, mrb_value val);
1075
+ #endif
1076
+ MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj);
1077
+ MRB_API mrb_bool mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1078
+
1079
+ static inline int mrb_gc_arena_save(mrb_state*);
1080
+ static inline void mrb_gc_arena_restore(mrb_state*,int);
1081
+
1082
+ static inline int
1083
+ mrb_gc_arena_save(mrb_state *mrb)
1084
+ {
1085
+ return mrb->gc.arena_idx;
1086
+ }
1087
+
1088
+ static inline void
1089
+ mrb_gc_arena_restore(mrb_state *mrb, int idx)
1090
+ {
1091
+ mrb->gc.arena_idx = idx;
1092
+ }
1093
+
1094
+ MRB_API void mrb_garbage_collect(mrb_state*);
1095
+ MRB_API void mrb_full_gc(mrb_state*);
1096
+ MRB_API void mrb_incremental_gc(mrb_state *);
1097
+ MRB_API void mrb_gc_mark(mrb_state*,struct RBasic*);
1098
+ #define mrb_gc_mark_value(mrb,val) do {\
1099
+ if (!mrb_immediate_p(val)) mrb_gc_mark((mrb), mrb_basic_ptr(val)); \
1100
+ } while (0)
1101
+ MRB_API void mrb_field_write_barrier(mrb_state *, struct RBasic*, struct RBasic*);
1102
+ #define mrb_field_write_barrier_value(mrb, obj, val) do{\
1103
+ if (!mrb_immediate_p(val)) mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val)); \
1104
+ } while (0)
1105
+ MRB_API void mrb_write_barrier(mrb_state *, struct RBasic*);
1106
+
1107
+ MRB_API mrb_value mrb_check_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
1108
+ MRB_API mrb_value mrb_any_to_s(mrb_state *mrb, mrb_value obj);
1109
+ MRB_API const char * mrb_obj_classname(mrb_state *mrb, mrb_value obj);
1110
+ MRB_API struct RClass* mrb_obj_class(mrb_state *mrb, mrb_value obj);
1111
+ MRB_API mrb_value mrb_class_path(mrb_state *mrb, struct RClass *c);
1112
+ MRB_API mrb_value mrb_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
1113
+ MRB_API mrb_bool mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c);
1114
+ MRB_API mrb_value mrb_obj_inspect(mrb_state *mrb, mrb_value self);
1115
+ MRB_API mrb_value mrb_obj_clone(mrb_state *mrb, mrb_value self);
1116
+
1117
+ #ifndef ISPRINT
1118
+ #define ISASCII(c) ((unsigned)(c) <= 0x7f)
1119
+ #define ISPRINT(c) (((unsigned)(c) - 0x20) < 0x5f)
1120
+ #define ISSPACE(c) ((c) == ' ' || (unsigned)(c) - '\t' < 5)
1121
+ #define ISUPPER(c) (((unsigned)(c) - 'A') < 26)
1122
+ #define ISLOWER(c) (((unsigned)(c) - 'a') < 26)
1123
+ #define ISALPHA(c) ((((unsigned)(c) | 0x20) - 'a') < 26)
1124
+ #define ISDIGIT(c) (((unsigned)(c) - '0') < 10)
1125
+ #define ISXDIGIT(c) (ISDIGIT(c) || ((unsigned)(c) | 0x20) - 'a' < 6)
1126
+ #define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c))
1127
+ #define ISBLANK(c) ((c) == ' ' || (c) == '\t')
1128
+ #define ISCNTRL(c) ((unsigned)(c) < 0x20 || (c) == 0x7f)
1129
+ #define TOUPPER(c) (ISLOWER(c) ? ((c) & 0x5f) : (c))
1130
+ #define TOLOWER(c) (ISUPPER(c) ? ((c) | 0x20) : (c))
1131
+ #endif
1132
+
1133
+ MRB_API mrb_value mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, size_t len);
1134
+ MRB_API mrb_noreturn void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
1135
+
1136
+ MRB_API mrb_noreturn void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
1137
+ MRB_API mrb_noreturn void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
1138
+ MRB_API mrb_noreturn void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
1139
+ MRB_API void mrb_warn(mrb_state *mrb, const char *fmt, ...);
1140
+ MRB_API mrb_noreturn void mrb_bug(mrb_state *mrb, const char *fmt, ...);
1141
+ MRB_API void mrb_print_backtrace(mrb_state *mrb);
1142
+ MRB_API void mrb_print_error(mrb_state *mrb);
1143
+
1144
+ /* macros to get typical exception objects
1145
+ note:
1146
+ + those E_* macros requires mrb_state* variable named mrb.
1147
+ + exception objects obtained from those macros are local to mrb
1148
+ */
1149
+ #define E_RUNTIME_ERROR (mrb_exc_get(mrb, "RuntimeError"))
1150
+ #define E_TYPE_ERROR (mrb_exc_get(mrb, "TypeError"))
1151
+ #define E_ARGUMENT_ERROR (mrb_exc_get(mrb, "ArgumentError"))
1152
+ #define E_INDEX_ERROR (mrb_exc_get(mrb, "IndexError"))
1153
+ #define E_RANGE_ERROR (mrb_exc_get(mrb, "RangeError"))
1154
+ #define E_NAME_ERROR (mrb_exc_get(mrb, "NameError"))
1155
+ #define E_NOMETHOD_ERROR (mrb_exc_get(mrb, "NoMethodError"))
1156
+ #define E_SCRIPT_ERROR (mrb_exc_get(mrb, "ScriptError"))
1157
+ #define E_SYNTAX_ERROR (mrb_exc_get(mrb, "SyntaxError"))
1158
+ #define E_LOCALJUMP_ERROR (mrb_exc_get(mrb, "LocalJumpError"))
1159
+ #define E_REGEXP_ERROR (mrb_exc_get(mrb, "RegexpError"))
1160
+ #define E_FROZEN_ERROR (mrb_exc_get(mrb, "FrozenError"))
1161
+
1162
+ #define E_NOTIMP_ERROR (mrb_exc_get(mrb, "NotImplementedError"))
1163
+ #ifndef MRB_WITHOUT_FLOAT
1164
+ #define E_FLOATDOMAIN_ERROR (mrb_exc_get(mrb, "FloatDomainError"))
1165
+ #endif
1166
+
1167
+ #define E_KEY_ERROR (mrb_exc_get(mrb, "KeyError"))
1168
+
1169
+ MRB_API mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg);
1170
+ MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv);
1171
+ MRB_API mrb_value mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c);
1172
+
1173
+ /* continue execution to the proc */
1174
+ /* this function should always be called as the last function of a method */
1175
+ /* e.g. return mrb_yield_cont(mrb, proc, self, argc, argv); */
1176
+ mrb_value mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb_value *argv);
1177
+
1178
+ /* mrb_gc_protect() leaves the object in the arena */
1179
+ MRB_API void mrb_gc_protect(mrb_state *mrb, mrb_value obj);
1180
+ /* mrb_gc_register() keeps the object from GC. */
1181
+ MRB_API void mrb_gc_register(mrb_state *mrb, mrb_value obj);
1182
+ /* mrb_gc_unregister() removes the object from GC root. */
1183
+ MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value obj);
1184
+
1185
+ MRB_API mrb_value mrb_to_int(mrb_state *mrb, mrb_value val);
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);
1188
+ MRB_API void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t);
1189
+
1190
+ typedef enum call_type {
1191
+ CALL_PUBLIC,
1192
+ CALL_FCALL,
1193
+ CALL_VCALL,
1194
+ CALL_TYPE_MAX
1195
+ } call_type;
1196
+
1197
+ MRB_API void mrb_define_alias(mrb_state *mrb, struct RClass *c, const char *a, const char *b);
1198
+ MRB_API const char *mrb_class_name(mrb_state *mrb, struct RClass* klass);
1199
+ MRB_API void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val);
1200
+
1201
+ MRB_API mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id);
1202
+
1203
+ MRB_API mrb_bool mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid);
1204
+ MRB_API mrb_bool mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c);
1205
+ MRB_API mrb_bool mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func);
1206
+
1207
+
1208
+ /*
1209
+ * Resume a Fiber
1210
+ *
1211
+ * @mrbgem mruby-fiber
1212
+ */
1213
+ MRB_API mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc, const mrb_value *argv);
1214
+
1215
+ /*
1216
+ * Yield a Fiber
1217
+ *
1218
+ * @mrbgem mruby-fiber
1219
+ */
1220
+ MRB_API mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv);
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
+
1229
+ /*
1230
+ * FiberError reference
1231
+ *
1232
+ * @mrbgem mruby-fiber
1233
+ */
1234
+ #define E_FIBER_ERROR (mrb_exc_get(mrb, "FiberError"))
1235
+ MRB_API void mrb_stack_extend(mrb_state*, mrb_int);
1236
+
1237
+ /* memory pool implementation */
1238
+ typedef struct mrb_pool mrb_pool;
1239
+ MRB_API struct mrb_pool* mrb_pool_open(mrb_state*);
1240
+ MRB_API void mrb_pool_close(struct mrb_pool*);
1241
+ MRB_API void* mrb_pool_alloc(struct mrb_pool*, size_t);
1242
+ MRB_API void* mrb_pool_realloc(struct mrb_pool*, void*, size_t oldlen, size_t newlen);
1243
+ MRB_API mrb_bool mrb_pool_can_realloc(struct mrb_pool*, void*, size_t);
1244
+ MRB_API void* mrb_alloca(mrb_state *mrb, size_t);
1245
+
1246
+ MRB_API void mrb_state_atexit(mrb_state *mrb, mrb_atexit_func func);
1247
+
1248
+ MRB_API void mrb_show_version(mrb_state *mrb);
1249
+ MRB_API void mrb_show_copyright(mrb_state *mrb);
1250
+
1251
+ MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
1252
+
1253
+ #if 0
1254
+ /* memcpy and memset does not work with gdb reverse-next on my box */
1255
+ /* use naive memcpy and memset instead */
1256
+ #undef memcpy
1257
+ #undef memset
1258
+ static void*
1259
+ mrbmemcpy(void *dst, const void *src, size_t n)
1260
+ {
1261
+ char *d = (char*)dst;
1262
+ const char *s = (const char*)src;
1263
+ while (n--)
1264
+ *d++ = *s++;
1265
+ return d;
1266
+ }
1267
+ #define memcpy(a,b,c) mrbmemcpy(a,b,c)
1268
+
1269
+ static void*
1270
+ mrbmemset(void *s, int c, size_t n)
1271
+ {
1272
+ char *t = (char*)s;
1273
+ while (n--)
1274
+ *t++ = c;
1275
+ return s;
1276
+ }
1277
+ #define memset(a,b,c) mrbmemset(a,b,c)
1278
+ #endif
1279
+
1280
+ MRB_END_DECL
1281
+
1282
+ #endif /* MRUBY_H */