ruby2d 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +5 -5
  2. data/assets/README.md +8 -0
  3. data/assets/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  4. data/assets/ios/Assets.xcassets/Contents.json +6 -0
  5. data/assets/ios/Base.lproj/LaunchScreen.storyboard +27 -0
  6. data/assets/ios/Info.plist +43 -0
  7. data/assets/ios/MRuby.framework/Headers/mrbconf.h +145 -0
  8. data/assets/ios/MRuby.framework/Headers/mruby.h +1279 -0
  9. data/assets/ios/MRuby.framework/Headers/mruby/array.h +279 -0
  10. data/assets/ios/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  11. data/assets/ios/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  12. data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +136 -0
  13. data/assets/ios/MRuby.framework/Headers/mruby/class.h +94 -0
  14. data/assets/ios/MRuby.framework/Headers/mruby/common.h +72 -0
  15. data/assets/ios/MRuby.framework/Headers/mruby/compile.h +194 -0
  16. data/assets/ios/MRuby.framework/Headers/mruby/data.h +75 -0
  17. data/assets/ios/MRuby.framework/Headers/mruby/debug.h +66 -0
  18. data/assets/ios/MRuby.framework/Headers/mruby/dump.h +196 -0
  19. data/assets/ios/MRuby.framework/Headers/mruby/error.h +75 -0
  20. data/assets/ios/MRuby.framework/Headers/mruby/gc.h +91 -0
  21. data/assets/ios/MRuby.framework/Headers/mruby/hash.h +182 -0
  22. data/assets/ios/MRuby.framework/Headers/mruby/irep.h +62 -0
  23. data/assets/ios/MRuby.framework/Headers/mruby/istruct.h +47 -0
  24. data/assets/ios/MRuby.framework/Headers/mruby/khash.h +274 -0
  25. data/assets/ios/MRuby.framework/Headers/mruby/numeric.h +161 -0
  26. data/assets/ios/MRuby.framework/Headers/mruby/object.h +45 -0
  27. data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +161 -0
  28. data/assets/ios/MRuby.framework/Headers/mruby/proc.h +131 -0
  29. data/assets/ios/MRuby.framework/Headers/mruby/range.h +49 -0
  30. data/assets/ios/MRuby.framework/Headers/mruby/re.h +16 -0
  31. data/assets/ios/MRuby.framework/Headers/mruby/string.h +440 -0
  32. data/assets/ios/MRuby.framework/Headers/mruby/throw.h +55 -0
  33. data/assets/ios/MRuby.framework/Headers/mruby/value.h +309 -0
  34. data/assets/ios/MRuby.framework/Headers/mruby/variable.h +138 -0
  35. data/assets/ios/MRuby.framework/Headers/mruby/version.h +110 -0
  36. data/assets/ios/MRuby.framework/Info.plist +20 -0
  37. data/assets/ios/MRuby.framework/MRuby +0 -0
  38. data/assets/ios/MyApp.xcodeproj/project.pbxproj +362 -0
  39. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  40. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  41. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcuserdata/Tom.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  42. data/assets/ios/MyApp.xcodeproj/xcuserdata/Tom.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  43. data/assets/ios/main.c +1 -0
  44. data/assets/opal.js +8434 -6329
  45. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +12 -0
  46. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +6 -0
  47. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +17 -0
  48. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +12 -0
  49. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +6 -0
  50. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +12 -0
  51. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  52. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +12 -0
  53. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +6 -0
  54. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +17 -0
  55. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +12 -0
  56. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +6 -0
  57. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +12 -0
  58. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  59. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +32 -0
  60. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +12 -0
  61. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +12 -0
  62. data/assets/tvos/Assets.xcassets/Contents.json +6 -0
  63. data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +15 -0
  64. data/assets/tvos/Info.plist +30 -0
  65. data/assets/tvos/MRuby.framework/Headers/mrbconf.h +145 -0
  66. data/assets/tvos/MRuby.framework/Headers/mruby.h +1279 -0
  67. data/assets/tvos/MRuby.framework/Headers/mruby/array.h +279 -0
  68. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  69. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  70. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +136 -0
  71. data/assets/tvos/MRuby.framework/Headers/mruby/class.h +94 -0
  72. data/assets/tvos/MRuby.framework/Headers/mruby/common.h +72 -0
  73. data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +194 -0
  74. data/assets/tvos/MRuby.framework/Headers/mruby/data.h +75 -0
  75. data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +66 -0
  76. data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +196 -0
  77. data/assets/tvos/MRuby.framework/Headers/mruby/error.h +75 -0
  78. data/assets/tvos/MRuby.framework/Headers/mruby/gc.h +91 -0
  79. data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +182 -0
  80. data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +62 -0
  81. data/assets/tvos/MRuby.framework/Headers/mruby/istruct.h +47 -0
  82. data/assets/tvos/MRuby.framework/Headers/mruby/khash.h +274 -0
  83. data/assets/tvos/MRuby.framework/Headers/mruby/numeric.h +161 -0
  84. data/assets/tvos/MRuby.framework/Headers/mruby/object.h +45 -0
  85. data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +161 -0
  86. data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +131 -0
  87. data/assets/tvos/MRuby.framework/Headers/mruby/range.h +49 -0
  88. data/assets/tvos/MRuby.framework/Headers/mruby/re.h +16 -0
  89. data/assets/tvos/MRuby.framework/Headers/mruby/string.h +440 -0
  90. data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +55 -0
  91. data/assets/tvos/MRuby.framework/Headers/mruby/value.h +309 -0
  92. data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +138 -0
  93. data/assets/tvos/MRuby.framework/Headers/mruby/version.h +110 -0
  94. data/assets/tvos/MRuby.framework/Info.plist +20 -0
  95. data/assets/tvos/MRuby.framework/MRuby +0 -0
  96. data/assets/tvos/MyApp.xcodeproj/project.pbxproj +344 -0
  97. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  98. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  99. data/assets/tvos/main.c +1 -0
  100. data/bin/ruby2d +219 -64
  101. data/ext/ruby2d/extconf.rb +1 -1
  102. data/ext/ruby2d/ruby2d.c +117 -19
  103. data/lib/ruby2d/color.rb +1 -1
  104. data/lib/ruby2d/version.rb +1 -1
  105. data/lib/ruby2d/window.rb +16 -10
  106. metadata +102 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2ef4f4bead6ed9ee601f91c0d16240f247fc2c49
4
- data.tar.gz: 97f7c8fdd9c7292e9a54f5f08cca319ea8e6e6ae
2
+ SHA256:
3
+ metadata.gz: b3248849ba536b5f8b806a92b6020c9177feb4b8415241cc5579240b9d25f771
4
+ data.tar.gz: f934d3eaef436fd21de2a120fc4ec392e670f3e123865b3aea251d2b5f1f4459
5
5
  SHA512:
6
- metadata.gz: 208b10d8e88d98e2f3cb208fbc1725794b334d05894b9d71c22f793f2e3dfb96ae4e168780ee98536e43f2931eb4fa2492d1da4b4143415b7bb852f51a6360b2
7
- data.tar.gz: 1eb73fb64d4c76883a6e3a3aa6d69f5a52e9bede5124f580d4f10cf659a09e4fec1f12842b8fd61ce69699424d774cfb43ba330cd33f10d2bfaab814c9198304
6
+ metadata.gz: f844b95a670393b87a606bfd098b9abbd2f2758a3e255e30527339202e46affc2cc9caedc8c3fcdd4a486cdefd06d4cab7af579cacdc9a38e86fcb8e97d8a603
7
+ data.tar.gz: ed7598cce5629acf38a346b95feb86e1c9b402cc380448f2f031b4f2c6c4c0ed8eb3ac633e8c1e4a0caf1d8ef003ec3ac8b50b387154e075287ac02c5f9459ff
@@ -1 +1,9 @@
1
1
  # Assets for the Ruby 2D gem
2
+
3
+ This repo contains:
4
+ - Xcode projects for iOS and tvOS, derived from the [Simple 2D deps](https://github.com/simple2d/deps/tree/master/xcode)
5
+ - iOS and tvOS frameworks from [`mruby-frameworks`](https://github.com/ruby2d/mruby-frameworks)
6
+ - [Simple2D.js](https://github.com/simple2d/simple2d.js)
7
+ - The [Opal](http://opalrb.com) library generated using, for example, `opal --compile app.rb > app.js`
8
+ - An [HTML template](template.html) for web-based apps
9
+ - The [Ruby 2D logo](https://github.com/ruby2d/logo) icon
@@ -0,0 +1,98 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "idiom" : "iphone",
5
+ "size" : "20x20",
6
+ "scale" : "2x"
7
+ },
8
+ {
9
+ "idiom" : "iphone",
10
+ "size" : "20x20",
11
+ "scale" : "3x"
12
+ },
13
+ {
14
+ "idiom" : "iphone",
15
+ "size" : "29x29",
16
+ "scale" : "2x"
17
+ },
18
+ {
19
+ "idiom" : "iphone",
20
+ "size" : "29x29",
21
+ "scale" : "3x"
22
+ },
23
+ {
24
+ "idiom" : "iphone",
25
+ "size" : "40x40",
26
+ "scale" : "2x"
27
+ },
28
+ {
29
+ "idiom" : "iphone",
30
+ "size" : "40x40",
31
+ "scale" : "3x"
32
+ },
33
+ {
34
+ "idiom" : "iphone",
35
+ "size" : "60x60",
36
+ "scale" : "2x"
37
+ },
38
+ {
39
+ "idiom" : "iphone",
40
+ "size" : "60x60",
41
+ "scale" : "3x"
42
+ },
43
+ {
44
+ "idiom" : "ipad",
45
+ "size" : "20x20",
46
+ "scale" : "1x"
47
+ },
48
+ {
49
+ "idiom" : "ipad",
50
+ "size" : "20x20",
51
+ "scale" : "2x"
52
+ },
53
+ {
54
+ "idiom" : "ipad",
55
+ "size" : "29x29",
56
+ "scale" : "1x"
57
+ },
58
+ {
59
+ "idiom" : "ipad",
60
+ "size" : "29x29",
61
+ "scale" : "2x"
62
+ },
63
+ {
64
+ "idiom" : "ipad",
65
+ "size" : "40x40",
66
+ "scale" : "1x"
67
+ },
68
+ {
69
+ "idiom" : "ipad",
70
+ "size" : "40x40",
71
+ "scale" : "2x"
72
+ },
73
+ {
74
+ "idiom" : "ipad",
75
+ "size" : "76x76",
76
+ "scale" : "1x"
77
+ },
78
+ {
79
+ "idiom" : "ipad",
80
+ "size" : "76x76",
81
+ "scale" : "2x"
82
+ },
83
+ {
84
+ "idiom" : "ipad",
85
+ "size" : "83.5x83.5",
86
+ "scale" : "2x"
87
+ },
88
+ {
89
+ "idiom" : "ios-marketing",
90
+ "size" : "1024x1024",
91
+ "scale" : "1x"
92
+ }
93
+ ],
94
+ "info" : {
95
+ "version" : 1,
96
+ "author" : "xcode"
97
+ }
98
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "info" : {
3
+ "version" : 1,
4
+ "author" : "xcode"
5
+ }
6
+ }
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
3
+ <dependencies>
4
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
5
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
6
+ </dependencies>
7
+ <scenes>
8
+ <!--View Controller-->
9
+ <scene sceneID="EHf-IW-A2E">
10
+ <objects>
11
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
12
+ <layoutGuides>
13
+ <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
14
+ <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
15
+ </layoutGuides>
16
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
17
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
18
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
19
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
20
+ </view>
21
+ </viewController>
22
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
23
+ </objects>
24
+ <point key="canvasLocation" x="53" y="375"/>
25
+ </scene>
26
+ </scenes>
27
+ </document>
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>en</string>
7
+ <key>CFBundleExecutable</key>
8
+ <string>$(EXECUTABLE_NAME)</string>
9
+ <key>CFBundleIdentifier</key>
10
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
+ <key>CFBundleInfoDictionaryVersion</key>
12
+ <string>6.0</string>
13
+ <key>CFBundleName</key>
14
+ <string>$(PRODUCT_NAME)</string>
15
+ <key>CFBundlePackageType</key>
16
+ <string>APPL</string>
17
+ <key>CFBundleShortVersionString</key>
18
+ <string>1.0</string>
19
+ <key>CFBundleVersion</key>
20
+ <string>1</string>
21
+ <key>LSRequiresIPhoneOS</key>
22
+ <true/>
23
+ <key>UILaunchStoryboardName</key>
24
+ <string>LaunchScreen</string>
25
+ <key>UIRequiredDeviceCapabilities</key>
26
+ <array>
27
+ <string>armv7</string>
28
+ </array>
29
+ <key>UISupportedInterfaceOrientations</key>
30
+ <array>
31
+ <string>UIInterfaceOrientationPortrait</string>
32
+ <string>UIInterfaceOrientationLandscapeLeft</string>
33
+ <string>UIInterfaceOrientationLandscapeRight</string>
34
+ </array>
35
+ <key>UISupportedInterfaceOrientations~ipad</key>
36
+ <array>
37
+ <string>UIInterfaceOrientationPortrait</string>
38
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
39
+ <string>UIInterfaceOrientationLandscapeLeft</string>
40
+ <string>UIInterfaceOrientationLandscapeRight</string>
41
+ </array>
42
+ </dict>
43
+ </plist>
@@ -0,0 +1,145 @@
1
+ /*
2
+ ** mrbconf.h - mruby core configuration
3
+ **
4
+ ** See Copyright Notice in mruby.h
5
+ */
6
+
7
+ #ifndef MRUBYCONF_H
8
+ #define MRUBYCONF_H
9
+
10
+ #include <limits.h>
11
+ #include <stdint.h>
12
+
13
+ /* architecture selection: */
14
+ /* specify -DMRB_32BIT or -DMRB_64BIT to override */
15
+ #if !defined(MRB_32BIT) && !defined(MRB_64BIT)
16
+ #if UINT64_MAX == SIZE_MAX
17
+ #define MRB_64BIT
18
+ #else
19
+ #define MRB_32BIT
20
+ #endif
21
+ #endif
22
+
23
+ #if defined(MRB_32BIT) && defined(MRB_64BIT)
24
+ #error Cannot build for 32 and 64 bit architecture at the same time
25
+ #endif
26
+
27
+ /* configuration options: */
28
+ /* add -DMRB_USE_FLOAT to use float instead of double for floating point numbers */
29
+ //#define MRB_USE_FLOAT
30
+
31
+ /* exclude floating point numbers */
32
+ //#define MRB_WITHOUT_FLOAT
33
+
34
+ /* add -DMRB_METHOD_CACHE to use method cache to improve performance */
35
+ //#define MRB_METHOD_CACHE
36
+ /* size of the method cache (need to be the power of 2) */
37
+ //#define MRB_METHOD_CACHE_SIZE (1<<7)
38
+
39
+ /* add -DMRB_METHOD_TABLE_INLINE unless platform uses MSB of pointers */
40
+ //#define MRB_METHOD_TABLE_INLINE
41
+ /* turn MRB_METHOD_TABLE_INLINE on for linux by default */
42
+ #if !defined(MRB_METHOD_TABLE_INLINE) && defined(__linux__)
43
+ # define MRB_METHOD_TABLE_INLINE
44
+ #endif
45
+
46
+ /* add -DMRB_INT16 to use 16bit integer for mrb_int; conflict with MRB_INT64 */
47
+ //#define MRB_INT16
48
+
49
+ /* add -DMRB_INT64 to use 64bit integer for mrb_int; conflict with MRB_INT16 */
50
+ //#define MRB_INT64
51
+
52
+ /* if no specific integer type is chosen */
53
+ #if !defined(MRB_INT16) && !defined(MRB_INT32) && !defined(MRB_INT64)
54
+ # if defined(MRB_64BIT) && !defined(MRB_NAN_BOXING)
55
+ /* Use 64bit integers on 64bit architecture (without MRB_NAN_BOXING) */
56
+ # define MRB_INT64
57
+ # else
58
+ /* Otherwise use 32bit integers */
59
+ # define MRB_INT32
60
+ # endif
61
+ #endif
62
+
63
+ /* represent mrb_value in boxed double; conflict with MRB_USE_FLOAT and MRB_WITHOUT_FLOAT */
64
+ //#define MRB_NAN_BOXING
65
+
66
+ /* define on big endian machines; used by MRB_NAN_BOXING */
67
+ //#define MRB_ENDIAN_BIG
68
+
69
+ /* represent mrb_value as a word (natural unit of data for the processor) */
70
+ //#define MRB_WORD_BOXING
71
+
72
+ /* string class to handle UTF-8 encoding */
73
+ //#define MRB_UTF8_STRING
74
+
75
+ /* argv max size in mrb_funcall */
76
+ //#define MRB_FUNCALL_ARGC_MAX 16
77
+
78
+ /* number of object per heap page */
79
+ //#define MRB_HEAP_PAGE_SIZE 1024
80
+
81
+ /* if _etext and _edata available, mruby can reduce memory used by symbols */
82
+ //#define MRB_USE_ETEXT_EDATA
83
+
84
+ /* do not use __init_array_start to determine readonly data section;
85
+ effective only when MRB_USE_ETEXT_EDATA is defined */
86
+ //#define MRB_NO_INIT_ARRAY_START
87
+
88
+ /* turn off generational GC by default */
89
+ //#define MRB_GC_TURN_OFF_GENERATIONAL
90
+
91
+ /* default size of khash table bucket */
92
+ //#define KHASH_DEFAULT_SIZE 32
93
+
94
+ /* allocated memory address alignment */
95
+ //#define POOL_ALIGNMENT 4
96
+
97
+ /* page size of memory pool */
98
+ //#define POOL_PAGE_SIZE 16000
99
+
100
+ /* initial minimum size for string buffer */
101
+ //#define MRB_STR_BUF_MIN_SIZE 128
102
+
103
+ /* arena size */
104
+ //#define MRB_GC_ARENA_SIZE 100
105
+
106
+ /* fixed size GC arena */
107
+ //#define MRB_GC_FIXED_ARENA
108
+
109
+ /* state atexit stack size */
110
+ //#define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5
111
+
112
+ /* fixed size state atexit stack */
113
+ //#define MRB_FIXED_STATE_ATEXIT_STACK
114
+
115
+ /* -DMRB_DISABLE_XXXX to drop following features */
116
+ //#define MRB_DISABLE_STDIO /* use of stdio */
117
+
118
+ /* -DMRB_ENABLE_XXXX to enable following features */
119
+ //#define MRB_ENABLE_DEBUG_HOOK /* hooks for debugger */
120
+
121
+ /* end of configuration */
122
+
123
+ /* define MRB_DISABLE_XXXX from DISABLE_XXX (for compatibility) */
124
+ #ifdef DISABLE_STDIO
125
+ #define MRB_DISABLE_STDIO
126
+ #endif
127
+
128
+ /* define MRB_ENABLE_XXXX from ENABLE_XXX (for compatibility) */
129
+ #ifdef ENABLE_DEBUG
130
+ #define MRB_ENABLE_DEBUG_HOOK
131
+ #endif
132
+
133
+ #ifndef MRB_DISABLE_STDIO
134
+ # include <stdio.h>
135
+ #endif
136
+
137
+ #ifndef FALSE
138
+ # define FALSE 0
139
+ #endif
140
+
141
+ #ifndef TRUE
142
+ # define TRUE 1
143
+ #endif
144
+
145
+ #endif /* MRUBYCONF_H */
@@ -0,0 +1,1279 @@
1
+ /*
2
+ ** mruby - An embeddable Ruby implementation
3
+ **
4
+ ** Copyright (c) mruby developers 2010-2017
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 uint32_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
+ int nregs;
127
+ int ridx;
128
+ int epos;
129
+ struct REnv *env;
130
+ mrb_code *pc; /* return address */
131
+ mrb_code *err; /* error position */
132
+ int argc;
133
+ int acc;
134
+ struct RClass *target_class;
135
+ } mrb_callinfo;
136
+
137
+ enum mrb_fiber_state {
138
+ MRB_FIBER_CREATED = 0,
139
+ MRB_FIBER_RUNNING,
140
+ MRB_FIBER_RESUMED,
141
+ MRB_FIBER_SUSPENDED,
142
+ MRB_FIBER_TRANSFERRED,
143
+ MRB_FIBER_TERMINATED,
144
+ };
145
+
146
+ struct mrb_context {
147
+ struct mrb_context *prev;
148
+
149
+ mrb_value *stack; /* stack of virtual machine */
150
+ mrb_value *stbase, *stend;
151
+
152
+ mrb_callinfo *ci;
153
+ mrb_callinfo *cibase, *ciend;
154
+
155
+ mrb_code **rescue; /* exception handler stack */
156
+ int rsize;
157
+ struct RProc **ensure; /* ensure handler stack */
158
+ int esize, eidx;
159
+
160
+ enum mrb_fiber_state status;
161
+ mrb_bool vmexec;
162
+ struct RFiber *fib;
163
+ };
164
+
165
+ #ifdef MRB_METHOD_CACHE_SIZE
166
+ # define MRB_METHOD_CACHE
167
+ #else
168
+ /* default method cache size: 128 */
169
+ /* cache size needs to be power of 2 */
170
+ # define MRB_METHOD_CACHE_SIZE (1<<7)
171
+ #endif
172
+
173
+ typedef mrb_value (*mrb_func_t)(struct mrb_state *mrb, mrb_value);
174
+
175
+ #ifdef MRB_METHOD_TABLE_INLINE
176
+ typedef uintptr_t mrb_method_t;
177
+ #else
178
+ typedef struct {
179
+ mrb_bool func_p;
180
+ union {
181
+ struct RProc *proc;
182
+ mrb_func_t func;
183
+ };
184
+ } mrb_method_t;
185
+ #endif
186
+
187
+ #ifdef MRB_METHOD_CACHE
188
+ struct mrb_cache_entry {
189
+ struct RClass *c;
190
+ mrb_sym mid;
191
+ mrb_method_t m;
192
+ };
193
+ #endif
194
+
195
+ struct mrb_jmpbuf;
196
+
197
+ typedef void (*mrb_atexit_func)(struct mrb_state*);
198
+
199
+ #define MRB_STATE_NO_REGEXP 1
200
+ #define MRB_STATE_REGEXP 2
201
+
202
+ typedef struct mrb_state {
203
+ struct mrb_jmpbuf *jmp;
204
+
205
+ uint32_t flags;
206
+ mrb_allocf allocf; /* memory allocation function */
207
+ void *allocf_ud; /* auxiliary data of allocf */
208
+
209
+ struct mrb_context *c;
210
+ struct mrb_context *root_c;
211
+ struct iv_tbl *globals; /* global variable table */
212
+
213
+ struct RObject *exc; /* exception */
214
+
215
+ struct RObject *top_self;
216
+ struct RClass *object_class; /* Object class */
217
+ struct RClass *class_class;
218
+ struct RClass *module_class;
219
+ struct RClass *proc_class;
220
+ struct RClass *string_class;
221
+ struct RClass *array_class;
222
+ struct RClass *hash_class;
223
+ struct RClass *range_class;
224
+
225
+ #ifndef MRB_WITHOUT_FLOAT
226
+ struct RClass *float_class;
227
+ #endif
228
+ struct RClass *fixnum_class;
229
+ struct RClass *true_class;
230
+ struct RClass *false_class;
231
+ struct RClass *nil_class;
232
+ struct RClass *symbol_class;
233
+ struct RClass *kernel_module;
234
+
235
+ struct alloca_header *mems;
236
+ mrb_gc gc;
237
+
238
+ #ifdef MRB_METHOD_CACHE
239
+ struct mrb_cache_entry cache[MRB_METHOD_CACHE_SIZE];
240
+ #endif
241
+
242
+ mrb_sym symidx;
243
+ struct kh_n2s *name2sym; /* symbol hash */
244
+ struct symbol_name *symtbl; /* symbol table */
245
+ size_t symcapa;
246
+
247
+ #ifdef MRB_ENABLE_DEBUG_HOOK
248
+ void (*code_fetch_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs);
249
+ void (*debug_op_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs);
250
+ #endif
251
+
252
+ #ifdef MRB_BYTECODE_DECODE_OPTION
253
+ mrb_code (*bytecode_decoder)(struct mrb_state* mrb, mrb_code code);
254
+ #endif
255
+
256
+ struct RClass *eException_class;
257
+ struct RClass *eStandardError_class;
258
+ struct RObject *nomem_err; /* pre-allocated NoMemoryError */
259
+ struct RObject *stack_err; /* pre-allocated SysStackError */
260
+ #ifdef MRB_GC_FIXED_ARENA
261
+ struct RObject *arena_err; /* pre-allocated arena overfow error */
262
+ #endif
263
+
264
+ void *ud; /* auxiliary data */
265
+
266
+ #ifdef MRB_FIXED_STATE_ATEXIT_STACK
267
+ mrb_atexit_func atexit_stack[MRB_FIXED_STATE_ATEXIT_STACK_SIZE];
268
+ #else
269
+ mrb_atexit_func *atexit_stack;
270
+ #endif
271
+ mrb_int atexit_stack_len;
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 fuction.
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*] constchar* The name of the method to be undefined.
490
+ */
491
+ MRB_API void mrb_undef_method(mrb_state*, struct RClass*, const char*);
492
+
493
+ /**
494
+ * Undefine a class method.
495
+ * Example:
496
+ *
497
+ * # Ruby style
498
+ * class ExampleClass
499
+ * def self.example_method
500
+ * "example"
501
+ * end
502
+ * end
503
+ *
504
+ * ExampleClass.example_method
505
+ *
506
+ * // C style
507
+ * #include <stdio.h>
508
+ * #include <mruby.h>
509
+ *
510
+ * mrb_value
511
+ * mrb_example_method(mrb_state *mrb){
512
+ * return mrb_str_new_lit(mrb, "example");
513
+ * }
514
+ *
515
+ * void
516
+ * mrb_example_gem_init(mrb_state* mrb){
517
+ * struct RClass *example_class;
518
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
519
+ * mrb_define_class_method(mrb, example_class, "example_method", mrb_example_method, MRB_ARGS_NONE());
520
+ * mrb_undef_class_method(mrb, example_class, "example_method");
521
+ * }
522
+ *
523
+ * void
524
+ * mrb_example_gem_final(mrb_state* mrb){
525
+ * }
526
+ * @param [mrb_state*] mrb_state* The mruby state reference.
527
+ * @param [RClass*] RClass* A class the class method will be undefined from.
528
+ * @param [constchar*] constchar* The name of the class method to be undefined.
529
+ */
530
+ MRB_API void mrb_undef_class_method(mrb_state*, struct RClass*, const char*);
531
+
532
+ /**
533
+ * Initialize a new object instace of c class.
534
+ *
535
+ * Example:
536
+ *
537
+ * # Ruby style
538
+ * class ExampleClass
539
+ * end
540
+ *
541
+ * p ExampleClass # => #<ExampleClass:0x9958588>
542
+ * // C style
543
+ * #include <stdio.h>
544
+ * #include <mruby.h>
545
+ *
546
+ * void
547
+ * mrb_example_gem_init(mrb_state* mrb) {
548
+ * struct RClass *example_class;
549
+ * mrb_value obj;
550
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class); # => class ExampleClass; end
551
+ * obj = mrb_obj_new(mrb, example_class, 0, NULL); # => ExampleClass.new
552
+ * mrb_p(mrb, obj); // => Kernel#p
553
+ * }
554
+ * @param [mrb_state*] mrb The current mruby state.
555
+ * @param [RClass*] c Reference to the class of the new object.
556
+ * @param [mrb_int] argc Number of arguments in argv
557
+ * @param [const mrb_value *] argv Array of mrb_value to initialize the object
558
+ * @return [mrb_value] The newly initialized object
559
+ */
560
+ MRB_API mrb_value mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv);
561
+
562
+ /** @see mrb_obj_new */
563
+ MRB_INLINE mrb_value mrb_class_new_instance(mrb_state *mrb, mrb_int argc, const mrb_value *argv, struct RClass *c)
564
+ {
565
+ return mrb_obj_new(mrb,c,argc,argv);
566
+ }
567
+
568
+ MRB_API mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv);
569
+
570
+ /**
571
+ * Creates a new instance of Class, Class.
572
+ *
573
+ * Example:
574
+ *
575
+ * void
576
+ * mrb_example_gem_init(mrb_state* mrb) {
577
+ * struct RClass *example_class;
578
+ *
579
+ * mrb_value obj;
580
+ * example_class = mrb_class_new(mrb, mrb->object_class);
581
+ * obj = mrb_obj_new(mrb, example_class, 0, NULL); // => #<#<Class:0x9a945b8>:0x9a94588>
582
+ * mrb_p(mrb, obj); // => Kernel#p
583
+ * }
584
+ *
585
+ * @param [mrb_state*] mrb The current mruby state.
586
+ * @param [struct RClass *] super The super class or parent.
587
+ * @return [struct RClass *] Reference to the new class.
588
+ */
589
+ MRB_API struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super);
590
+
591
+ /**
592
+ * Creates a new module, Module.
593
+ *
594
+ * Example:
595
+ * void
596
+ * mrb_example_gem_init(mrb_state* mrb) {
597
+ * struct RClass *example_module;
598
+ *
599
+ * example_module = mrb_module_new(mrb);
600
+ * }
601
+ *
602
+ * @param [mrb_state*] mrb The current mruby state.
603
+ * @return [struct RClass *] Reference to the new module.
604
+ */
605
+ MRB_API struct RClass * mrb_module_new(mrb_state *mrb);
606
+
607
+ /**
608
+ * Returns an mrb_bool. True if class was defined, and false if the class was not defined.
609
+ *
610
+ * Example:
611
+ * void
612
+ * mrb_example_gem_init(mrb_state* mrb) {
613
+ * struct RClass *example_class;
614
+ * mrb_bool cd;
615
+ *
616
+ * example_class = mrb_define_class(mrb, "ExampleClass", mrb->object_class);
617
+ * cd = mrb_class_defined(mrb, "ExampleClass");
618
+ *
619
+ * // If mrb_class_defined returns 1 then puts "True"
620
+ * // If mrb_class_defined returns 0 then puts "False"
621
+ * if (cd == 1){
622
+ * puts("True");
623
+ * }
624
+ * else {
625
+ * puts("False");
626
+ * }
627
+ * }
628
+ *
629
+ * @param [mrb_state*] mrb The current mruby state.
630
+ * @param [const char *] name A string representing the name of the class.
631
+ * @return [mrb_bool] A boolean value.
632
+ */
633
+ MRB_API mrb_bool mrb_class_defined(mrb_state *mrb, const char *name);
634
+
635
+ /**
636
+ * Gets a class.
637
+ * @param [mrb_state*] mrb The current mruby state.
638
+ * @param [const char *] name The name of the class.
639
+ * @return [struct RClass *] A reference to the class.
640
+ */
641
+ MRB_API struct RClass * mrb_class_get(mrb_state *mrb, const char *name);
642
+
643
+ /**
644
+ * Gets a exception class.
645
+ * @param [mrb_state*] mrb The current mruby state.
646
+ * @param [const char *] name The name of the class.
647
+ * @return [struct RClass *] A reference to the class.
648
+ */
649
+ MRB_API struct RClass * mrb_exc_get(mrb_state *mrb, const char *name);
650
+
651
+ /**
652
+ * Returns an mrb_bool. True if inner class was defined, and false if the inner class was not defined.
653
+ *
654
+ * Example:
655
+ * void
656
+ * mrb_example_gem_init(mrb_state* mrb) {
657
+ * struct RClass *example_outer, *example_inner;
658
+ * mrb_bool cd;
659
+ *
660
+ * example_outer = mrb_define_module(mrb, "ExampleOuter");
661
+ *
662
+ * example_inner = mrb_define_class_under(mrb, example_outer, "ExampleInner", mrb->object_class);
663
+ * cd = mrb_class_defined_under(mrb, example_outer, "ExampleInner");
664
+ *
665
+ * // If mrb_class_defined_under returns 1 then puts "True"
666
+ * // If mrb_class_defined_under returns 0 then puts "False"
667
+ * if (cd == 1){
668
+ * puts("True");
669
+ * }
670
+ * else {
671
+ * puts("False");
672
+ * }
673
+ * }
674
+ *
675
+ * @param [mrb_state*] mrb The current mruby state.
676
+ * @param [struct RClass *] outer The name of the outer class.
677
+ * @param [const char *] name A string representing the name of the inner class.
678
+ * @return [mrb_bool] A boolean value.
679
+ */
680
+ MRB_API mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name);
681
+
682
+ /**
683
+ * Gets a child class.
684
+ * @param [mrb_state*] mrb The current mruby state.
685
+ * @param [struct RClass *] outer The name of the parent class.
686
+ * @param [const char *] name The name of the class.
687
+ * @return [struct RClass *] A reference to the class.
688
+ */
689
+ MRB_API struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
690
+
691
+ /**
692
+ * Gets a module.
693
+ * @param [mrb_state*] mrb The current mruby state.
694
+ * @param [const char *] name The name of the module.
695
+ * @return [struct RClass *] A reference to the module.
696
+ */
697
+ MRB_API struct RClass * mrb_module_get(mrb_state *mrb, const char *name);
698
+
699
+ /**
700
+ * Gets a module defined under another module.
701
+ * @param [mrb_state*] mrb The current mruby state.
702
+ * @param [struct RClass *] outer The name of the outer module.
703
+ * @param [const char *] name The name of the module.
704
+ * @return [struct RClass *] A reference to the module.
705
+ */
706
+ MRB_API struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name);
707
+ MRB_API mrb_value mrb_notimplement_m(mrb_state*, mrb_value);
708
+
709
+ /**
710
+ * Duplicate an object.
711
+ *
712
+ * Equivalent to:
713
+ * Object#dup
714
+ * @param [mrb_state*] mrb The current mruby state.
715
+ * @param [mrb_value] obj Object to be duplicate.
716
+ * @return [mrb_value] The newly duplicated object.
717
+ */
718
+ MRB_API mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj);
719
+ MRB_API mrb_value mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method);
720
+
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
+ * Funtion 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
+ * Funtion 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} | |
847
+ * | `*` | rest arguments | {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array. |
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
+ * When applicable, implicit conversions (such as `to_str`, `to_ary`, `to_hash`) are
859
+ * applied to received arguments.
860
+ * Used inside a function of mrb_func_t type.
861
+ *
862
+ * @param mrb The current MRuby state.
863
+ * @param format [mrb_args_format] is a list of format specifiers
864
+ * @param ... The passing variadic arguments must be a pointer of retrieving type.
865
+ * @return the number of arguments retrieved.
866
+ * @see mrb_args_format
867
+ */
868
+ MRB_API mrb_int mrb_get_args(mrb_state *mrb, mrb_args_format format, ...);
869
+
870
+ static inline mrb_sym
871
+ mrb_get_mid(mrb_state *mrb) /* get method symbol */
872
+ {
873
+ return mrb->c->ci->mid;
874
+ }
875
+
876
+ /**
877
+ * Retrieve number of arguments from mrb_state.
878
+ *
879
+ * Correctly handles *splat arguments.
880
+ */
881
+ MRB_API mrb_int mrb_get_argc(mrb_state *mrb);
882
+
883
+ MRB_API mrb_value* mrb_get_argv(mrb_state *mrb);
884
+
885
+ /* `strlen` for character string literals (use with caution or `strlen` instead)
886
+ Adjacent string literals are concatenated in C/C++ in translation phase 6.
887
+ If `lit` is not one, the compiler will report a syntax error:
888
+ MSVC: "error C2143: syntax error : missing ')' before 'string'"
889
+ GCC: "error: expected ')' before string constant"
890
+ */
891
+ #define mrb_strlen_lit(lit) (sizeof(lit "") - 1)
892
+
893
+ /**
894
+ * Call existing ruby functions.
895
+ *
896
+ * #include <stdio.h>
897
+ * #include <mruby.h>
898
+ * #include "mruby/compile.h"
899
+ *
900
+ * int
901
+ * main()
902
+ * {
903
+ * mrb_int i = 99;
904
+ * mrb_state *mrb = mrb_open();
905
+ *
906
+ * if (!mrb) { }
907
+ * FILE *fp = fopen("test.rb","r");
908
+ * mrb_value obj = mrb_load_file(mrb,fp);
909
+ * mrb_funcall(mrb, obj, "method_name", 1, mrb_fixnum_value(i));
910
+ * fclose(fp);
911
+ * mrb_close(mrb);
912
+ * }
913
+ * @param [mrb_state*] mrb_state* The current mruby state.
914
+ * @param [mrb_value] mrb_value A reference to an mruby value.
915
+ * @param [const char*] const char* The name of the method.
916
+ * @param [mrb_int] mrb_int The number of arguments the method has.
917
+ * @param [...] ... Variadic values(not type safe!).
918
+ * @return [mrb_value] mrb_value mruby function value.
919
+ */
920
+ MRB_API mrb_value mrb_funcall(mrb_state*, mrb_value, const char*, mrb_int,...);
921
+ /**
922
+ * Call existing ruby functions. This is basically the type safe version of mrb_funcall.
923
+ *
924
+ * #include <stdio.h>
925
+ * #include <mruby.h>
926
+ * #include "mruby/compile.h"
927
+ * int
928
+ * main()
929
+ * {
930
+ * mrb_int i = 99;
931
+ * mrb_state *mrb = mrb_open();
932
+ *
933
+ * if (!mrb) { }
934
+ * mrb_sym m_sym = mrb_intern_lit(mrb, "method_name"); // Symbol for method.
935
+ *
936
+ * FILE *fp = fopen("test.rb","r");
937
+ * mrb_value obj = mrb_load_file(mrb,fp);
938
+ * mrb_funcall_argv(mrb, obj, m_sym, 1, &obj); // Calling ruby function from test.rb.
939
+ * fclose(fp);
940
+ * mrb_close(mrb);
941
+ * }
942
+ * @param [mrb_state*] mrb_state* The current mruby state.
943
+ * @param [mrb_value] mrb_value A reference to an mruby value.
944
+ * @param [mrb_sym] mrb_sym The symbol representing the method.
945
+ * @param [mrb_int] mrb_int The number of arguments the method has.
946
+ * @param [const mrb_value*] mrb_value* Pointer to the object.
947
+ * @return [mrb_value] mrb_value mruby function value.
948
+ * @see mrb_funcall
949
+ */
950
+ MRB_API mrb_value mrb_funcall_argv(mrb_state*, mrb_value, mrb_sym, mrb_int, const mrb_value*);
951
+ /**
952
+ * Call existing ruby functions with a block.
953
+ */
954
+ MRB_API mrb_value mrb_funcall_with_block(mrb_state*, mrb_value, mrb_sym, mrb_int, const mrb_value*, mrb_value);
955
+ /**
956
+ * Create a symbol
957
+ *
958
+ * # Ruby style:
959
+ * :pizza # => :pizza
960
+ *
961
+ * // C style:
962
+ * mrb_sym m_sym = mrb_intern_lit(mrb, "pizza"); // => :pizza
963
+ * @param [mrb_state*] mrb_state* The current mruby state.
964
+ * @param [const char*] const char* The name of the method.
965
+ * @return [mrb_sym] mrb_sym A symbol.
966
+ */
967
+ MRB_API mrb_sym mrb_intern_cstr(mrb_state*,const char*);
968
+ MRB_API mrb_sym mrb_intern(mrb_state*,const char*,size_t);
969
+ MRB_API mrb_sym mrb_intern_static(mrb_state*,const char*,size_t);
970
+ #define mrb_intern_lit(mrb, lit) mrb_intern_static(mrb, lit, mrb_strlen_lit(lit))
971
+ MRB_API mrb_sym mrb_intern_str(mrb_state*,mrb_value);
972
+ MRB_API mrb_value mrb_check_intern_cstr(mrb_state*,const char*);
973
+ MRB_API mrb_value mrb_check_intern(mrb_state*,const char*,size_t);
974
+ MRB_API mrb_value mrb_check_intern_str(mrb_state*,mrb_value);
975
+ MRB_API const char *mrb_sym2name(mrb_state*,mrb_sym);
976
+ MRB_API const char *mrb_sym2name_len(mrb_state*,mrb_sym,mrb_int*);
977
+ MRB_API mrb_value mrb_sym2str(mrb_state*,mrb_sym);
978
+
979
+ MRB_API void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */
980
+ MRB_API void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */
981
+ MRB_API void *mrb_realloc(mrb_state*, void*, size_t); /* ditto */
982
+ MRB_API void *mrb_realloc_simple(mrb_state*, void*, size_t); /* return NULL if no memory available */
983
+ MRB_API void *mrb_malloc_simple(mrb_state*, size_t); /* return NULL if no memory available */
984
+ MRB_API struct RBasic *mrb_obj_alloc(mrb_state*, enum mrb_vtype, struct RClass*);
985
+ MRB_API void mrb_free(mrb_state*, void*);
986
+
987
+ MRB_API mrb_value mrb_str_new(mrb_state *mrb, const char *p, size_t len);
988
+
989
+ /**
990
+ * Turns a C string into a Ruby string value.
991
+ */
992
+ MRB_API mrb_value mrb_str_new_cstr(mrb_state*, const char*);
993
+ MRB_API mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len);
994
+ #define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
995
+
996
+ #ifdef _WIN32
997
+ char* mrb_utf8_from_locale(const char *p, int len);
998
+ char* mrb_locale_from_utf8(const char *p, int len);
999
+ #define mrb_locale_free(p) free(p)
1000
+ #define mrb_utf8_free(p) free(p)
1001
+ #else
1002
+ #define mrb_utf8_from_locale(p, l) (p)
1003
+ #define mrb_locale_from_utf8(p, l) (p)
1004
+ #define mrb_locale_free(p)
1005
+ #define mrb_utf8_free(p)
1006
+ #endif
1007
+
1008
+ /**
1009
+ * Creates new mrb_state.
1010
+ *
1011
+ * @return
1012
+ * Pointer to the newly created mrb_state.
1013
+ */
1014
+ MRB_API mrb_state* mrb_open(void);
1015
+
1016
+ /**
1017
+ * Create new mrb_state with custom allocators.
1018
+ *
1019
+ * @param f
1020
+ * Reference to the allocation function.
1021
+ * @param ud
1022
+ * User data will be passed to custom allocator f.
1023
+ * If user data isn't required just pass NULL.
1024
+ * @return
1025
+ * Pointer to the newly created mrb_state.
1026
+ */
1027
+ MRB_API mrb_state* mrb_open_allocf(mrb_allocf f, void *ud);
1028
+
1029
+ /**
1030
+ * Create new mrb_state with just the MRuby core
1031
+ *
1032
+ * @param f
1033
+ * Reference to the allocation function.
1034
+ * Use mrb_default_allocf for the default
1035
+ * @param ud
1036
+ * User data will be passed to custom allocator f.
1037
+ * If user data isn't required just pass NULL.
1038
+ * @return
1039
+ * Pointer to the newly created mrb_state.
1040
+ */
1041
+ MRB_API mrb_state* mrb_open_core(mrb_allocf f, void *ud);
1042
+
1043
+ /**
1044
+ * Closes and frees a mrb_state.
1045
+ *
1046
+ * @param mrb
1047
+ * Pointer to the mrb_state to be closed.
1048
+ */
1049
+ MRB_API void mrb_close(mrb_state *mrb);
1050
+
1051
+ /**
1052
+ * The default allocation function.
1053
+ *
1054
+ * @see mrb_allocf
1055
+ */
1056
+ MRB_API void* mrb_default_allocf(mrb_state*, void*, size_t, void*);
1057
+
1058
+ MRB_API mrb_value mrb_top_self(mrb_state *);
1059
+ MRB_API mrb_value mrb_run(mrb_state*, struct RProc*, mrb_value);
1060
+ MRB_API mrb_value mrb_top_run(mrb_state*, struct RProc*, mrb_value, unsigned int);
1061
+ MRB_API mrb_value mrb_vm_run(mrb_state*, struct RProc*, mrb_value, unsigned int);
1062
+ MRB_API mrb_value mrb_vm_exec(mrb_state*, struct RProc*, mrb_code*);
1063
+ /* compatibility macros */
1064
+ #define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k))
1065
+ #define mrb_toplevel_run(m,p) mrb_toplevel_run_keep((m),(p),0)
1066
+ #define mrb_context_run(m,p,s,k) mrb_vm_run((m),(p),(s),(k))
1067
+
1068
+ MRB_API void mrb_p(mrb_state*, mrb_value);
1069
+ MRB_API mrb_int mrb_obj_id(mrb_value obj);
1070
+ MRB_API mrb_sym mrb_obj_to_sym(mrb_state *mrb, mrb_value name);
1071
+
1072
+ MRB_API mrb_bool mrb_obj_eq(mrb_state*, mrb_value, mrb_value);
1073
+ MRB_API mrb_bool mrb_obj_equal(mrb_state*, mrb_value, mrb_value);
1074
+ MRB_API mrb_bool mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1075
+ MRB_API mrb_value mrb_convert_to_integer(mrb_state *mrb, mrb_value val, mrb_int base);
1076
+ MRB_API mrb_value mrb_Integer(mrb_state *mrb, mrb_value val);
1077
+ #ifndef MRB_WITHOUT_FLOAT
1078
+ MRB_API mrb_value mrb_Float(mrb_state *mrb, mrb_value val);
1079
+ #endif
1080
+ MRB_API mrb_value mrb_inspect(mrb_state *mrb, mrb_value obj);
1081
+ MRB_API mrb_bool mrb_eql(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
1082
+
1083
+ static inline int mrb_gc_arena_save(mrb_state*);
1084
+ static inline void mrb_gc_arena_restore(mrb_state*,int);
1085
+
1086
+ static inline int
1087
+ mrb_gc_arena_save(mrb_state *mrb)
1088
+ {
1089
+ return mrb->gc.arena_idx;
1090
+ }
1091
+
1092
+ static inline void
1093
+ mrb_gc_arena_restore(mrb_state *mrb, int idx)
1094
+ {
1095
+ mrb->gc.arena_idx = idx;
1096
+ }
1097
+
1098
+ MRB_API int mrb_gc_arena_save(mrb_state*);
1099
+ MRB_API void mrb_gc_arena_restore(mrb_state*,int);
1100
+
1101
+ MRB_API void mrb_garbage_collect(mrb_state*);
1102
+ MRB_API void mrb_full_gc(mrb_state*);
1103
+ MRB_API void mrb_incremental_gc(mrb_state *);
1104
+ MRB_API void mrb_gc_mark(mrb_state*,struct RBasic*);
1105
+ #define mrb_gc_mark_value(mrb,val) do {\
1106
+ if (!mrb_immediate_p(val)) mrb_gc_mark((mrb), mrb_basic_ptr(val)); \
1107
+ } while (0)
1108
+ MRB_API void mrb_field_write_barrier(mrb_state *, struct RBasic*, struct RBasic*);
1109
+ #define mrb_field_write_barrier_value(mrb, obj, val) do{\
1110
+ if (!mrb_immediate_p(val)) mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val)); \
1111
+ } while (0)
1112
+ MRB_API void mrb_write_barrier(mrb_state *, struct RBasic*);
1113
+
1114
+ MRB_API mrb_value mrb_check_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
1115
+ MRB_API mrb_value mrb_any_to_s(mrb_state *mrb, mrb_value obj);
1116
+ MRB_API const char * mrb_obj_classname(mrb_state *mrb, mrb_value obj);
1117
+ MRB_API struct RClass* mrb_obj_class(mrb_state *mrb, mrb_value obj);
1118
+ MRB_API mrb_value mrb_class_path(mrb_state *mrb, struct RClass *c);
1119
+ MRB_API mrb_value mrb_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
1120
+ MRB_API mrb_bool mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c);
1121
+ MRB_API mrb_value mrb_obj_inspect(mrb_state *mrb, mrb_value self);
1122
+ MRB_API mrb_value mrb_obj_clone(mrb_state *mrb, mrb_value self);
1123
+
1124
+ #ifndef ISPRINT
1125
+ #define ISASCII(c) ((unsigned)(c) <= 0x7f)
1126
+ #define ISPRINT(c) (((unsigned)(c) - 0x20) < 0x5f)
1127
+ #define ISSPACE(c) ((c) == ' ' || (unsigned)(c) - '\t' < 5)
1128
+ #define ISUPPER(c) (((unsigned)(c) - 'A') < 26)
1129
+ #define ISLOWER(c) (((unsigned)(c) - 'a') < 26)
1130
+ #define ISALPHA(c) ((((unsigned)(c) | 0x20) - 'a') < 26)
1131
+ #define ISDIGIT(c) (((unsigned)(c) - '0') < 10)
1132
+ #define ISXDIGIT(c) (ISDIGIT(c) || ((unsigned)(c) | 0x20) - 'a' < 6)
1133
+ #define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c))
1134
+ #define ISBLANK(c) ((c) == ' ' || (c) == '\t')
1135
+ #define ISCNTRL(c) ((unsigned)(c) < 0x20 || (c) == 0x7f)
1136
+ #define TOUPPER(c) (ISLOWER(c) ? ((c) & 0x5f) : (c))
1137
+ #define TOLOWER(c) (ISUPPER(c) ? ((c) | 0x20) : (c))
1138
+ #endif
1139
+
1140
+ MRB_API mrb_value mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, size_t len);
1141
+ MRB_API mrb_noreturn void mrb_exc_raise(mrb_state *mrb, mrb_value exc);
1142
+
1143
+ MRB_API mrb_noreturn void mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg);
1144
+ MRB_API mrb_noreturn void mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...);
1145
+ MRB_API mrb_noreturn void mrb_name_error(mrb_state *mrb, mrb_sym id, const char *fmt, ...);
1146
+ MRB_API void mrb_warn(mrb_state *mrb, const char *fmt, ...);
1147
+ MRB_API mrb_noreturn void mrb_bug(mrb_state *mrb, const char *fmt, ...);
1148
+ MRB_API void mrb_print_backtrace(mrb_state *mrb);
1149
+ MRB_API void mrb_print_error(mrb_state *mrb);
1150
+
1151
+ /* macros to get typical exception objects
1152
+ note:
1153
+ + those E_* macros requires mrb_state* variable named mrb.
1154
+ + exception objects obtained from those macros are local to mrb
1155
+ */
1156
+ #define E_RUNTIME_ERROR (mrb_exc_get(mrb, "RuntimeError"))
1157
+ #define E_TYPE_ERROR (mrb_exc_get(mrb, "TypeError"))
1158
+ #define E_ARGUMENT_ERROR (mrb_exc_get(mrb, "ArgumentError"))
1159
+ #define E_INDEX_ERROR (mrb_exc_get(mrb, "IndexError"))
1160
+ #define E_RANGE_ERROR (mrb_exc_get(mrb, "RangeError"))
1161
+ #define E_NAME_ERROR (mrb_exc_get(mrb, "NameError"))
1162
+ #define E_NOMETHOD_ERROR (mrb_exc_get(mrb, "NoMethodError"))
1163
+ #define E_SCRIPT_ERROR (mrb_exc_get(mrb, "ScriptError"))
1164
+ #define E_SYNTAX_ERROR (mrb_exc_get(mrb, "SyntaxError"))
1165
+ #define E_LOCALJUMP_ERROR (mrb_exc_get(mrb, "LocalJumpError"))
1166
+ #define E_REGEXP_ERROR (mrb_exc_get(mrb, "RegexpError"))
1167
+
1168
+ #define E_NOTIMP_ERROR (mrb_exc_get(mrb, "NotImplementedError"))
1169
+ #ifndef MRB_WITHOUT_FLOAT
1170
+ #define E_FLOATDOMAIN_ERROR (mrb_exc_get(mrb, "FloatDomainError"))
1171
+ #endif
1172
+
1173
+ #define E_KEY_ERROR (mrb_exc_get(mrb, "KeyError"))
1174
+
1175
+ MRB_API mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg);
1176
+ MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv);
1177
+ 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);
1178
+
1179
+ /* continue execution to the proc */
1180
+ /* this function should always be called as the last function of a method */
1181
+ /* e.g. return mrb_yield_cont(mrb, proc, self, argc, argv); */
1182
+ mrb_value mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb_value *argv);
1183
+
1184
+ /* mrb_gc_protect() leaves the object in the arena */
1185
+ MRB_API void mrb_gc_protect(mrb_state *mrb, mrb_value obj);
1186
+ /* mrb_gc_register() keeps the object from GC. */
1187
+ MRB_API void mrb_gc_register(mrb_state *mrb, mrb_value obj);
1188
+ /* mrb_gc_unregister() removes the object from GC root. */
1189
+ MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value obj);
1190
+
1191
+ MRB_API mrb_value mrb_to_int(mrb_state *mrb, mrb_value val);
1192
+ #define mrb_int(mrb, val) mrb_fixnum(mrb_to_int(mrb, val))
1193
+ MRB_API void mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t);
1194
+
1195
+ typedef enum call_type {
1196
+ CALL_PUBLIC,
1197
+ CALL_FCALL,
1198
+ CALL_VCALL,
1199
+ CALL_TYPE_MAX
1200
+ } call_type;
1201
+
1202
+ MRB_API void mrb_define_alias(mrb_state *mrb, struct RClass *klass, const char *name1, const char *name2);
1203
+ MRB_API const char *mrb_class_name(mrb_state *mrb, struct RClass* klass);
1204
+ MRB_API void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val);
1205
+
1206
+ MRB_API mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id);
1207
+
1208
+ MRB_API mrb_bool mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid);
1209
+ MRB_API mrb_bool mrb_obj_is_instance_of(mrb_state *mrb, mrb_value obj, struct RClass* c);
1210
+ MRB_API mrb_bool mrb_func_basic_p(mrb_state *mrb, mrb_value obj, mrb_sym mid, mrb_func_t func);
1211
+
1212
+
1213
+ /*
1214
+ * Resume a Fiber
1215
+ *
1216
+ * @mrbgem mruby-fiber
1217
+ */
1218
+ MRB_API mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc, const mrb_value *argv);
1219
+
1220
+ /*
1221
+ * Yield a Fiber
1222
+ *
1223
+ * @mrbgem mruby-fiber
1224
+ */
1225
+ MRB_API mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv);
1226
+
1227
+ /*
1228
+ * FiberError reference
1229
+ *
1230
+ * @mrbgem mruby-fiber
1231
+ */
1232
+ #define E_FIBER_ERROR (mrb_exc_get(mrb, "FiberError"))
1233
+
1234
+ /* memory pool implementation */
1235
+ typedef struct mrb_pool mrb_pool;
1236
+ MRB_API struct mrb_pool* mrb_pool_open(mrb_state*);
1237
+ MRB_API void mrb_pool_close(struct mrb_pool*);
1238
+ MRB_API void* mrb_pool_alloc(struct mrb_pool*, size_t);
1239
+ MRB_API void* mrb_pool_realloc(struct mrb_pool*, void*, size_t oldlen, size_t newlen);
1240
+ MRB_API mrb_bool mrb_pool_can_realloc(struct mrb_pool*, void*, size_t);
1241
+ MRB_API void* mrb_alloca(mrb_state *mrb, size_t);
1242
+
1243
+ MRB_API void mrb_state_atexit(mrb_state *mrb, mrb_atexit_func func);
1244
+
1245
+ MRB_API void mrb_show_version(mrb_state *mrb);
1246
+ MRB_API void mrb_show_copyright(mrb_state *mrb);
1247
+
1248
+ MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
1249
+
1250
+ #if 0
1251
+ /* memcpy and memset does not work with gdb reverse-next on my box */
1252
+ /* use naive memcpy and memset instead */
1253
+ #undef memcpy
1254
+ #undef memset
1255
+ static void*
1256
+ mrbmemcpy(void *dst, const void *src, size_t n)
1257
+ {
1258
+ char *d = (char*)dst;
1259
+ const char *s = (const char*)src;
1260
+ while (n--)
1261
+ *d++ = *s++;
1262
+ return d;
1263
+ }
1264
+ #define memcpy(a,b,c) mrbmemcpy(a,b,c)
1265
+
1266
+ static void*
1267
+ mrbmemset(void *s, int c, size_t n)
1268
+ {
1269
+ char *t = (char*)s;
1270
+ while (n--)
1271
+ *t++ = c;
1272
+ return s;
1273
+ }
1274
+ #define memset(a,b,c) mrbmemset(a,b,c)
1275
+ #endif
1276
+
1277
+ MRB_END_DECL
1278
+
1279
+ #endif /* MRUBY_H */