webruby 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/config.rb +4 -9
  3. data/lib/webruby/rake/files.rake +2 -2
  4. data/modules/emscripten/AUTHORS +9 -1
  5. data/modules/emscripten/CONTRIBUTING.markdown +5 -0
  6. data/modules/emscripten/ChangeLog +435 -0
  7. data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
  8. data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
  9. data/modules/emscripten/em++ +0 -2
  10. data/modules/emscripten/emcc +92 -32
  11. data/modules/emscripten/emlink.py +16 -13
  12. data/modules/emscripten/emmake +1 -1
  13. data/modules/emscripten/emrun +918 -0
  14. data/modules/emscripten/emrun.bat +2 -0
  15. data/modules/emscripten/emscripten.py +545 -20
  16. data/modules/emscripten/src/analyzer.js +6 -1
  17. data/modules/emscripten/src/compiler.js +25 -16
  18. data/modules/emscripten/src/emrun_postjs.js +20 -0
  19. data/modules/emscripten/{tests → src}/hello_world.js +0 -0
  20. data/modules/emscripten/src/intertyper.js +45 -16
  21. data/modules/emscripten/src/jsifier.js +78 -48
  22. data/modules/emscripten/src/library.js +381 -96
  23. data/modules/emscripten/src/library_browser.js +50 -53
  24. data/modules/emscripten/src/library_egl.js +66 -24
  25. data/modules/emscripten/src/library_fs.js +122 -90
  26. data/modules/emscripten/src/library_gl.js +739 -353
  27. data/modules/emscripten/src/library_glfw.js +9 -3
  28. data/modules/emscripten/src/library_glut.js +10 -5
  29. data/modules/emscripten/src/library_idbfs.js +14 -14
  30. data/modules/emscripten/src/library_memfs.js +65 -41
  31. data/modules/emscripten/src/library_nodefs.js +61 -9
  32. data/modules/emscripten/src/library_openal.js +4 -4
  33. data/modules/emscripten/src/library_path.js +9 -13
  34. data/modules/emscripten/src/library_sdl.js +301 -64
  35. data/modules/emscripten/src/library_sockfs.js +7 -5
  36. data/modules/emscripten/src/modules.js +62 -22
  37. data/modules/emscripten/src/parseTools.js +135 -102
  38. data/modules/emscripten/src/postamble.js +3 -4
  39. data/modules/emscripten/src/preamble.js +49 -29
  40. data/modules/emscripten/src/proxyClient.js +1 -1
  41. data/modules/emscripten/src/proxyWorker.js +10 -10
  42. data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
  43. data/modules/emscripten/src/runtime.js +32 -8
  44. data/modules/emscripten/src/settings.js +25 -8
  45. data/modules/emscripten/src/shell.html +6 -3
  46. data/modules/emscripten/src/shell.js +13 -11
  47. data/modules/emscripten/src/simd.js +602 -432
  48. data/modules/emscripten/src/struct_info.json +22 -2
  49. data/modules/emscripten/src/utility.js +32 -17
  50. data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
  51. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  52. data/modules/emscripten/system/include/compat/wchar.h +23 -0
  53. data/modules/emscripten/system/include/compat/wctype.h +23 -0
  54. data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
  55. data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
  56. data/modules/emscripten/system/include/emscripten/vector.h +29 -1
  57. data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
  58. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
  59. data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
  60. data/modules/emscripten/system/include/libcxx/__config +95 -17
  61. data/modules/emscripten/system/include/libcxx/__debug +25 -4
  62. data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
  63. data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
  64. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
  65. data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
  66. data/modules/emscripten/system/include/libcxx/__locale +21 -19
  67. data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
  68. data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
  69. data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
  70. data/modules/emscripten/system/include/libcxx/__tree +35 -26
  71. data/modules/emscripten/system/include/libcxx/__tuple +15 -15
  72. data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
  73. data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
  74. data/modules/emscripten/system/include/libcxx/algorithm +121 -110
  75. data/modules/emscripten/system/include/libcxx/array +15 -15
  76. data/modules/emscripten/system/include/libcxx/bitset +4 -4
  77. data/modules/emscripten/system/include/libcxx/chrono +51 -17
  78. data/modules/emscripten/system/include/libcxx/cmath +25 -23
  79. data/modules/emscripten/system/include/libcxx/codecvt +21 -18
  80. data/modules/emscripten/system/include/libcxx/complex +48 -7
  81. data/modules/emscripten/system/include/libcxx/cstddef +1 -1
  82. data/modules/emscripten/system/include/libcxx/cstdio +8 -1
  83. data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
  84. data/modules/emscripten/system/include/libcxx/cwchar +1 -1
  85. data/modules/emscripten/system/include/libcxx/deque +26 -12
  86. data/modules/emscripten/system/include/libcxx/dynarray +311 -0
  87. data/modules/emscripten/system/include/libcxx/exception +4 -4
  88. data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
  89. data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
  90. data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
  91. data/modules/emscripten/system/include/libcxx/forward_list +33 -7
  92. data/modules/emscripten/system/include/libcxx/fstream +4 -4
  93. data/modules/emscripten/system/include/libcxx/functional +200 -170
  94. data/modules/emscripten/system/include/libcxx/future +83 -39
  95. data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
  96. data/modules/emscripten/system/include/libcxx/iomanip +147 -0
  97. data/modules/emscripten/system/include/libcxx/ios +24 -16
  98. data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
  99. data/modules/emscripten/system/include/libcxx/istream +13 -8
  100. data/modules/emscripten/system/include/libcxx/iterator +108 -417
  101. data/modules/emscripten/system/include/libcxx/limits +8 -4
  102. data/modules/emscripten/system/include/libcxx/list +28 -8
  103. data/modules/emscripten/system/include/libcxx/locale +153 -390
  104. data/modules/emscripten/system/include/libcxx/map +280 -100
  105. data/modules/emscripten/system/include/libcxx/memory +49 -97
  106. data/modules/emscripten/system/include/libcxx/mutex +2 -2
  107. data/modules/emscripten/system/include/libcxx/new +43 -14
  108. data/modules/emscripten/system/include/libcxx/numeric +2 -2
  109. data/modules/emscripten/system/include/libcxx/optional +697 -0
  110. data/modules/emscripten/system/include/libcxx/ostream +17 -8
  111. data/modules/emscripten/system/include/libcxx/queue +5 -5
  112. data/modules/emscripten/system/include/libcxx/random +53 -51
  113. data/modules/emscripten/system/include/libcxx/ratio +11 -11
  114. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  115. data/modules/emscripten/system/include/libcxx/regex +23 -20
  116. data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
  117. data/modules/emscripten/system/include/libcxx/set +166 -2
  118. data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
  119. data/modules/emscripten/system/include/libcxx/sstream +4 -4
  120. data/modules/emscripten/system/include/libcxx/stack +3 -3
  121. data/modules/emscripten/system/include/libcxx/streambuf +5 -5
  122. data/modules/emscripten/system/include/libcxx/string +372 -324
  123. data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
  124. data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
  125. data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
  126. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
  127. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
  128. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
  129. data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
  130. data/modules/emscripten/system/include/libcxx/system_error +14 -8
  131. data/modules/emscripten/system/include/libcxx/thread +7 -8
  132. data/modules/emscripten/system/include/libcxx/tuple +29 -88
  133. data/modules/emscripten/system/include/libcxx/type_traits +253 -209
  134. data/modules/emscripten/system/include/libcxx/typeindex +3 -3
  135. data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
  136. data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
  137. data/modules/emscripten/system/include/libcxx/utility +20 -20
  138. data/modules/emscripten/system/include/libcxx/valarray +23 -23
  139. data/modules/emscripten/system/include/libcxx/vector +114 -91
  140. data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
  141. data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
  142. data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
  143. data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
  144. data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
  145. data/modules/emscripten/system/lib/libcextra.symbols +7 -0
  146. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
  147. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
  148. data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
  149. data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
  150. data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
  151. data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
  152. data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
  153. data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
  154. data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
  155. data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
  156. data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
  157. data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
  158. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  159. data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
  160. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
  161. data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
  162. data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
  163. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
  164. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
  165. data/modules/emscripten/system/lib/libcxx/symbols +187 -168
  166. data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
  167. data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
  168. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
  169. data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
  170. data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
  171. data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
  172. data/modules/emscripten/tools/cache.py +5 -7
  173. data/modules/emscripten/tools/cache.pyc +0 -0
  174. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
  175. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
  176. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
  177. data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
  178. data/modules/emscripten/tools/file_packager.py +93 -50
  179. data/modules/emscripten/tools/js-optimizer.js +98 -48
  180. data/modules/emscripten/tools/js_optimizer.py +4 -4
  181. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  182. data/modules/emscripten/tools/jsrun.py +1 -1
  183. data/modules/emscripten/tools/jsrun.pyc +0 -0
  184. data/modules/emscripten/tools/response_file.py +6 -0
  185. data/modules/emscripten/tools/response_file.pyc +0 -0
  186. data/modules/emscripten/tools/settings_template_readonly.py +2 -0
  187. data/modules/emscripten/tools/shared.py +88 -34
  188. data/modules/emscripten/tools/shared.pyc +0 -0
  189. data/modules/emscripten/tools/split.py +21 -13
  190. data/modules/mruby/build_config.rb +7 -1
  191. data/modules/mruby/doc/compile/README.md +5 -9
  192. data/modules/mruby/include/mrbconf.h +5 -2
  193. data/modules/mruby/include/mruby/array.h +1 -0
  194. data/modules/mruby/include/mruby/compile.h +2 -4
  195. data/modules/mruby/include/mruby/dump.h +7 -16
  196. data/modules/mruby/include/mruby/hash.h +1 -1
  197. data/modules/mruby/include/mruby/irep.h +14 -2
  198. data/modules/mruby/include/mruby/khash.h +8 -7
  199. data/modules/mruby/include/mruby/string.h +1 -0
  200. data/modules/mruby/include/mruby/value.h +5 -2
  201. data/modules/mruby/include/mruby.h +12 -13
  202. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
  203. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
  204. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
  205. data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
  206. data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
  207. data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
  208. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
  209. data/modules/mruby/mrblib/numeric.rb +99 -33
  210. data/modules/mruby/src/array.c +11 -4
  211. data/modules/mruby/src/backtrace.c +2 -2
  212. data/modules/mruby/src/class.c +49 -30
  213. data/modules/mruby/src/codegen.c +131 -79
  214. data/modules/mruby/src/debug.c +1 -1
  215. data/modules/mruby/src/dump.c +213 -163
  216. data/modules/mruby/src/error.c +17 -17
  217. data/modules/mruby/src/error.h +1 -1
  218. data/modules/mruby/src/etc.c +10 -0
  219. data/modules/mruby/src/gc.c +35 -17
  220. data/modules/mruby/src/hash.c +5 -5
  221. data/modules/mruby/src/kernel.c +36 -14
  222. data/modules/mruby/src/load.c +238 -296
  223. data/modules/mruby/src/numeric.c +18 -98
  224. data/modules/mruby/src/object.c +3 -5
  225. data/modules/mruby/src/parse.y +63 -56
  226. data/modules/mruby/src/proc.c +8 -5
  227. data/modules/mruby/src/re.h +0 -1
  228. data/modules/mruby/src/state.c +65 -27
  229. data/modules/mruby/src/string.c +3 -31
  230. data/modules/mruby/src/symbol.c +3 -3
  231. data/modules/mruby/src/variable.c +12 -5
  232. data/modules/mruby/src/vm.c +90 -72
  233. data/modules/mruby/tasks/mruby_build.rake +10 -1
  234. data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
  235. data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
  236. data/modules/mruby/test/driver.c +3 -3
  237. data/modules/mruby/test/t/array.rb +5 -5
  238. data/modules/mruby/test/t/class.rb +14 -1
  239. data/modules/mruby/test/t/kernel.rb +4 -0
  240. data/modules/mruby/test/t/module.rb +4 -4
  241. data/modules/mruby/test/t/nameerror.rb +1 -1
  242. data/modules/mruby/tools/mrbc/mrbc.c +23 -17
  243. data/modules/mruby/travis_config.rb +10 -1
  244. metadata +28 -5
  245. data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -25,7 +25,7 @@ mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, long len)
25
25
  }
26
26
 
27
27
  mrb_value
28
- mrb_exc_new3(mrb_state *mrb, struct RClass* c, mrb_value str)
28
+ mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str)
29
29
  {
30
30
  str = mrb_str_to_str(mrb, str);
31
31
  return mrb_funcall(mrb, mrb_obj_value(c), "new", 1, str);
@@ -45,7 +45,7 @@ exc_initialize(mrb_state *mrb, mrb_value exc)
45
45
  mrb_value mesg;
46
46
 
47
47
  if (mrb_get_args(mrb, "|o", &mesg) == 1) {
48
- mrb_iv_set(mrb, exc, mrb_intern2(mrb, "mesg", 4), mesg);
48
+ mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), mesg);
49
49
  }
50
50
  return exc;
51
51
  }
@@ -74,7 +74,7 @@ exc_exception(mrb_state *mrb, mrb_value self)
74
74
  if (argc == 0) return self;
75
75
  if (mrb_obj_equal(mrb, self, a)) return self;
76
76
  exc = mrb_obj_clone(mrb, self);
77
- mrb_iv_set(mrb, exc, mrb_intern2(mrb, "mesg", 4), a);
77
+ mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), a);
78
78
 
79
79
  return exc;
80
80
  }
@@ -90,7 +90,7 @@ exc_exception(mrb_state *mrb, mrb_value self)
90
90
  static mrb_value
91
91
  exc_to_s(mrb_state *mrb, mrb_value exc)
92
92
  {
93
- mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern2(mrb, "mesg", 4));
93
+ mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
94
94
 
95
95
  if (mrb_nil_p(mesg)) return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc));
96
96
  return mesg;
@@ -124,9 +124,9 @@ exc_inspect(mrb_state *mrb, mrb_value exc)
124
124
  {
125
125
  mrb_value str, mesg, file, line;
126
126
 
127
- mesg = mrb_attr_get(mrb, exc, mrb_intern2(mrb, "mesg", 4));
128
- file = mrb_attr_get(mrb, exc, mrb_intern2(mrb, "file", 4));
129
- line = mrb_attr_get(mrb, exc, mrb_intern2(mrb, "line", 4));
127
+ mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
128
+ file = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "file"));
129
+ line = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "line"));
130
130
 
131
131
  if (!mrb_nil_p(file) && !mrb_nil_p(line)) {
132
132
  str = file;
@@ -163,7 +163,7 @@ exc_equal(mrb_state *mrb, mrb_value exc)
163
163
  mrb_value obj;
164
164
  mrb_value mesg;
165
165
  mrb_bool equal_p;
166
- mrb_sym id_mesg = mrb_intern2(mrb, "mesg", 4);
166
+ mrb_sym id_mesg = mrb_intern_lit(mrb, "mesg");
167
167
 
168
168
  mrb_get_args(mrb, "o", &obj);
169
169
  if (mrb_obj_equal(mrb, exc, obj)) {
@@ -171,7 +171,7 @@ exc_equal(mrb_state *mrb, mrb_value exc)
171
171
  }
172
172
  else {
173
173
  if (mrb_obj_class(mrb, exc) != mrb_obj_class(mrb, obj)) {
174
- if (mrb_respond_to(mrb, obj, mrb_intern2(mrb, "message", 7))) {
174
+ if (mrb_respond_to(mrb, obj, mrb_intern_lit(mrb, "message"))) {
175
175
  mesg = mrb_funcall(mrb, obj, "message", 0);
176
176
  }
177
177
  else
@@ -193,7 +193,7 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
193
193
  mrb_callinfo *ci = mrb->c->ci;
194
194
  mrb_code *pc = ci->pc;
195
195
 
196
- mrb_obj_iv_set(mrb, exc, mrb_intern2(mrb, "ciidx", 5), mrb_fixnum_value(ci - mrb->c->cibase));
196
+ mrb_obj_iv_set(mrb, exc, mrb_intern_lit(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->c->cibase));
197
197
  while (ci >= mrb->c->cibase) {
198
198
  mrb_code *err = ci->err;
199
199
 
@@ -204,8 +204,8 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
204
204
  int32_t const line = mrb_debug_get_line(irep, err - irep->iseq);
205
205
  char const* file = mrb_debug_get_filename(irep, err - irep->iseq);
206
206
  if (line != -1 && file) {
207
- mrb_obj_iv_set(mrb, exc, mrb_intern2(mrb, "file", 4), mrb_str_new_cstr(mrb, file));
208
- mrb_obj_iv_set(mrb, exc, mrb_intern2(mrb, "line", 4), mrb_fixnum_value(line));
207
+ mrb_obj_iv_set(mrb, exc, mrb_intern_lit(mrb, "file"), mrb_str_new_cstr(mrb, file));
208
+ mrb_obj_iv_set(mrb, exc, mrb_intern_lit(mrb, "line"), mrb_fixnum_value(line));
209
209
  return;
210
210
  }
211
211
  }
@@ -231,7 +231,7 @@ mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
231
231
  {
232
232
  mrb_value mesg;
233
233
  mesg = mrb_str_new_cstr(mrb, msg);
234
- mrb_exc_raise(mrb, mrb_exc_new3(mrb, c, mesg));
234
+ mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mesg));
235
235
  }
236
236
 
237
237
  mrb_value
@@ -297,7 +297,7 @@ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
297
297
  va_start(args, fmt);
298
298
  mesg = mrb_vformat(mrb, fmt, args);
299
299
  va_end(args);
300
- mrb_exc_raise(mrb, mrb_exc_new3(mrb, c, mesg));
300
+ mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mesg));
301
301
  }
302
302
 
303
303
  void
@@ -350,7 +350,7 @@ mrb_bug(mrb_state *mrb, const char *fmt, ...)
350
350
  int
351
351
  sysexit_status(mrb_state *mrb, mrb_value err)
352
352
  {
353
- mrb_value st = mrb_iv_get(mrb, err, mrb_intern2(mrb, "status", 6));
353
+ mrb_value st = mrb_iv_get(mrb, err, mrb_intern_lit(mrb, "status"));
354
354
  return mrb_fixnum(st);
355
355
  }
356
356
 
@@ -376,7 +376,7 @@ make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr)
376
376
  if (isstr) {
377
377
  mesg = mrb_check_string_type(mrb, argv[0]);
378
378
  if (!mrb_nil_p(mesg)) {
379
- mesg = mrb_exc_new3(mrb, E_RUNTIME_ERROR, mesg);
379
+ mesg = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, mesg);
380
380
  break;
381
381
  }
382
382
  }
@@ -388,7 +388,7 @@ make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr)
388
388
  n = 1;
389
389
  exception_call:
390
390
  {
391
- mrb_sym exc = mrb_intern2(mrb, "exception", 9);
391
+ mrb_sym exc = mrb_intern_lit(mrb, "exception");
392
392
  if (mrb_respond_to(mrb, argv[0], exc)) {
393
393
  mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
394
394
  }
@@ -9,7 +9,7 @@
9
9
 
10
10
  void mrb_sys_fail(mrb_state *mrb, const char *mesg);
11
11
  int sysexit_status(mrb_state *mrb, mrb_value err);
12
- mrb_value mrb_exc_new3(mrb_state *mrb, struct RClass* c, mrb_value str);
12
+ mrb_value mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str);
13
13
  mrb_value make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr);
14
14
  mrb_value mrb_make_exception(mrb_state *mrb, int argc, mrb_value *argv);
15
15
  mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
@@ -198,6 +198,16 @@ mrb_float_value(mrb_state *mrb, mrb_float f)
198
198
  return v;
199
199
  }
200
200
 
201
+ mrb_value
202
+ mrb_float_pool(mrb_state *mrb, mrb_float f)
203
+ {
204
+ struct RFloat *nf = (struct RFloat *)mrb_malloc(mrb, sizeof(struct RFloat));
205
+ nf->tt = MRB_TT_FLOAT;
206
+ nf->c = mrb->float_class;
207
+ nf->f = f;
208
+ return mrb_obj_value(nf);
209
+ }
210
+
201
211
  mrb_value
202
212
  mrb_cptr_value(mrb_state *mrb, void *p)
203
213
  {
@@ -370,10 +370,16 @@ mrb_free_heap(mrb_state *mrb)
370
370
  static void
371
371
  gc_protect(mrb_state *mrb, struct RBasic *p)
372
372
  {
373
- if (mrb->arena_idx >= MRB_ARENA_SIZE) {
373
+ if (mrb->arena_idx >= MRB_GC_ARENA_SIZE) {
374
+ #ifdef MRB_GC_FIXED_ARENA
374
375
  /* arena overflow error */
375
- mrb->arena_idx = MRB_ARENA_SIZE - 4; /* force room in arena */
376
+ mrb->arena_idx = MRB_GC_ARENA_SIZE - 4; /* force room in arena */
376
377
  mrb_raise(mrb, E_RUNTIME_ERROR, "arena overflow error");
378
+ #else
379
+ /* extend arena */
380
+ mrb->arena_capa *= 1.5;
381
+ mrb->arena = (struct RBasic**)mrb_realloc(mrb, mrb->arena, sizeof(struct RBasic*)*mrb->arena_capa);
382
+ #endif
377
383
  }
378
384
  mrb->arena[mrb->arena_idx++] = p;
379
385
  }
@@ -619,7 +625,8 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
619
625
  {
620
626
  struct mrb_context *c = ((struct RFiber*)obj)->cxt;
621
627
 
622
- mrb_free_context(mrb, c);
628
+ if (c != mrb->root_c)
629
+ mrb_free_context(mrb, c);
623
630
  }
624
631
  break;
625
632
 
@@ -639,6 +646,16 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
639
646
  mrb_gc_free_str(mrb, (struct RString*)obj);
640
647
  break;
641
648
 
649
+ case MRB_TT_PROC:
650
+ {
651
+ struct RProc *p = (struct RProc*)obj;
652
+
653
+ if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
654
+ mrb_irep_decref(mrb, p->body.irep);
655
+ }
656
+ }
657
+ break;
658
+
642
659
  case MRB_TT_RANGE:
643
660
  mrb_free(mrb, ((struct RRange*)obj)->edges);
644
661
  break;
@@ -662,7 +679,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
662
679
  static void
663
680
  root_scan_phase(mrb_state *mrb)
664
681
  {
665
- size_t i, e, j;
682
+ size_t i, e;
666
683
 
667
684
  if (!is_minor_gc(mrb)) {
668
685
  mrb->gray_list = NULL;
@@ -685,19 +702,6 @@ root_scan_phase(mrb_state *mrb)
685
702
  if (mrb->root_c != mrb->c) {
686
703
  mark_context(mrb, mrb->c);
687
704
  }
688
-
689
- /* mark irep pool */
690
- if (mrb->irep) {
691
- size_t len = mrb->irep_len;
692
- if (len > mrb->irep_capa) len = mrb->irep_capa;
693
- for (i=0; i<len; i++) {
694
- mrb_irep *irep = mrb->irep[i];
695
- if (!irep) continue;
696
- for (j=0; j<irep->plen; j++) {
697
- mrb_gc_mark_value(mrb, irep->pool[j]);
698
- }
699
- }
700
- }
701
705
  }
702
706
 
703
707
  static size_t
@@ -1043,6 +1047,20 @@ mrb_gc_arena_save(mrb_state *mrb)
1043
1047
  void
1044
1048
  mrb_gc_arena_restore(mrb_state *mrb, int idx)
1045
1049
  {
1050
+ #ifndef MRB_GC_FIXED_ARENA
1051
+ int capa = mrb->arena_capa;
1052
+
1053
+ if (idx < capa / 2) {
1054
+ capa *= 0.66;
1055
+ if (capa < MRB_GC_ARENA_SIZE) {
1056
+ capa = MRB_GC_ARENA_SIZE;
1057
+ }
1058
+ if (capa != mrb->arena_capa) {
1059
+ mrb->arena = (struct RBasic**)mrb_realloc(mrb, mrb->arena, sizeof(struct RBasic*)*capa);
1060
+ mrb->arena_capa = capa;
1061
+ }
1062
+ }
1063
+ #endif
1046
1064
  mrb->arena_idx = idx;
1047
1065
  }
1048
1066
 
@@ -266,7 +266,7 @@ mrb_hash_init_core(mrb_state *mrb, mrb_value hash)
266
266
  RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT;
267
267
  ifnone = block;
268
268
  }
269
- mrb_iv_set(mrb, hash, mrb_intern2(mrb, "ifnone", 6), ifnone);
269
+ mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
270
270
  return hash;
271
271
  }
272
272
 
@@ -425,7 +425,7 @@ mrb_hash_set_default(mrb_state *mrb, mrb_value hash)
425
425
 
426
426
  mrb_get_args(mrb, "o", &ifnone);
427
427
  mrb_hash_modify(mrb, hash);
428
- mrb_iv_set(mrb, hash, mrb_intern2(mrb, "ifnone", 6), ifnone);
428
+ mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
429
429
  RHASH(hash)->flags &= ~(MRB_HASH_PROC_DEFAULT);
430
430
 
431
431
  return ifnone;
@@ -476,7 +476,7 @@ mrb_hash_set_default_proc(mrb_state *mrb, mrb_value hash)
476
476
 
477
477
  mrb_get_args(mrb, "o", &ifnone);
478
478
  mrb_hash_modify(mrb, hash);
479
- mrb_iv_set(mrb, hash, mrb_intern2(mrb, "ifnone", 6), ifnone);
479
+ mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
480
480
  RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT;
481
481
 
482
482
  return ifnone;
@@ -734,7 +734,7 @@ mrb_hash_replace(mrb_state *mrb, mrb_value hash)
734
734
  else {
735
735
  ifnone = RHASH_IFNONE(hash2);
736
736
  }
737
- mrb_iv_set(mrb, hash, mrb_intern2(mrb, "ifnone", 6), ifnone);
737
+ mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
738
738
 
739
739
  return hash;
740
740
  }
@@ -1004,7 +1004,7 @@ hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, int eql)
1004
1004
 
1005
1005
  if (mrb_obj_equal(mrb, hash1, hash2)) return mrb_true_value();
1006
1006
  if (!mrb_hash_p(hash2)) {
1007
- if (!mrb_respond_to(mrb, hash2, mrb_intern2(mrb, "to_hash", 7))) {
1007
+ if (!mrb_respond_to(mrb, hash2, mrb_intern_lit(mrb, "to_hash"))) {
1008
1008
  return mrb_false_value();
1009
1009
  }
1010
1010
  if (eql)
@@ -29,7 +29,7 @@ typedef enum {
29
29
  mrb_bool
30
30
  mrb_obj_basic_to_s_p(mrb_state *mrb, mrb_value obj)
31
31
  {
32
- struct RProc *me = mrb_method_search(mrb, mrb_class(mrb, obj), mrb_intern2(mrb, "to_s", 4));
32
+ struct RProc *me = mrb_method_search(mrb, mrb_class(mrb, obj), mrb_intern_lit(mrb, "to_s"));
33
33
  if (me && MRB_PROC_CFUNC_P(me) && (me->body.func == mrb_any_to_s))
34
34
  return TRUE;
35
35
  return FALSE;
@@ -280,7 +280,7 @@ mrb_singleton_class_clone(mrb_state *mrb, mrb_value obj)
280
280
  clone->super = klass->super;
281
281
  if (klass->iv) {
282
282
  mrb_iv_copy(mrb, mrb_obj_value(clone), mrb_obj_value(klass));
283
- mrb_obj_iv_set(mrb, (struct RObject*)clone, mrb_intern2(mrb, "__attached__", 12), obj);
283
+ mrb_obj_iv_set(mrb, (struct RObject*)clone, mrb_intern_lit(mrb, "__attached__"), obj);
284
284
  }
285
285
  if (klass->mt) {
286
286
  clone->mt = kh_copy(mt, mrb, klass->mt);
@@ -542,7 +542,7 @@ obj_is_instance_of(mrb_state *mrb, mrb_value self)
542
542
  mrb_value arg;
543
543
  mrb_bool instance_of_p;
544
544
 
545
- mrb_get_args(mrb, "o", &arg);
545
+ mrb_get_args(mrb, "C", &arg);
546
546
  instance_of_p = mrb_obj_is_instance_of(mrb, self, mrb_class_ptr(arg));
547
547
 
548
548
  return mrb_bool_value(instance_of_p);
@@ -715,14 +715,17 @@ mrb_obj_is_kind_of_m(mrb_state *mrb, mrb_value self)
715
715
  mrb_value arg;
716
716
  mrb_bool kind_of_p;
717
717
 
718
- mrb_get_args(mrb, "o", &arg);
718
+ mrb_get_args(mrb, "C", &arg);
719
719
  kind_of_p = mrb_obj_is_kind_of(mrb, self, mrb_class_ptr(arg));
720
720
 
721
721
  return mrb_bool_value(kind_of_p);
722
722
  }
723
723
 
724
+ KHASH_DECLARE(st, mrb_sym, char, 0)
725
+ KHASH_DEFINE(st, mrb_sym, char, 0, kh_int_hash_func, kh_int_hash_equal)
726
+
724
727
  static void
725
- method_entry_loop(mrb_state *mrb, struct RClass* klass, mrb_value ary)
728
+ method_entry_loop(mrb_state *mrb, struct RClass* klass, khash_t(st)* set)
726
729
  {
727
730
  khint_t i;
728
731
 
@@ -730,7 +733,7 @@ method_entry_loop(mrb_state *mrb, struct RClass* klass, mrb_value ary)
730
733
  if (!h) return;
731
734
  for (i=0;i<kh_end(h);i++) {
732
735
  if (kh_exist(h, i)) {
733
- mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(h,i)));
736
+ kh_put(st, set, kh_key(h,i));
734
737
  }
735
738
  }
736
739
  }
@@ -738,13 +741,14 @@ method_entry_loop(mrb_state *mrb, struct RClass* klass, mrb_value ary)
738
741
  mrb_value
739
742
  class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass* klass, int obj)
740
743
  {
744
+ khint_t i;
741
745
  mrb_value ary;
742
746
  struct RClass* oldklass;
747
+ khash_t(st)* set = kh_init(st, mrb);
743
748
 
744
- ary = mrb_ary_new(mrb);
745
749
  oldklass = 0;
746
750
  while (klass && (klass != oldklass)) {
747
- method_entry_loop(mrb, klass, ary);
751
+ method_entry_loop(mrb, klass, set);
748
752
  if ((klass->tt == MRB_TT_ICLASS) ||
749
753
  (klass->tt == MRB_TT_SCLASS)) {
750
754
  }
@@ -755,28 +759,46 @@ class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass* klass,
755
759
  klass = klass->super;
756
760
  }
757
761
 
762
+ ary = mrb_ary_new(mrb);
763
+ for (i=0;i<kh_end(set);i++) {
764
+ if (kh_exist(set, i)) {
765
+ mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set,i)));
766
+ }
767
+ }
768
+ kh_destroy(st, set);
769
+
758
770
  return ary;
759
771
  }
760
772
 
761
773
  mrb_value
762
774
  mrb_obj_singleton_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj)
763
775
  {
776
+ khint_t i;
764
777
  mrb_value ary;
765
778
  struct RClass* klass;
779
+ khash_t(st)* set = kh_init(st, mrb);
766
780
 
767
781
  klass = mrb_class(mrb, obj);
768
- ary = mrb_ary_new(mrb);
782
+
769
783
  if (klass && (klass->tt == MRB_TT_SCLASS)) {
770
- method_entry_loop(mrb, klass, ary);
784
+ method_entry_loop(mrb, klass, set);
771
785
  klass = klass->super;
772
786
  }
773
787
  if (recur) {
774
788
  while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) {
775
- method_entry_loop(mrb, klass, ary);
789
+ method_entry_loop(mrb, klass, set);
776
790
  klass = klass->super;
777
791
  }
778
792
  }
779
793
 
794
+ ary = mrb_ary_new(mrb);
795
+ for (i=0;i<kh_end(set);i++) {
796
+ if (kh_exist(set, i)) {
797
+ mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set,i)));
798
+ }
799
+ }
800
+ kh_destroy(st, set);
801
+
780
802
  return ary;
781
803
  }
782
804
 
@@ -922,7 +944,7 @@ mrb_f_raise(mrb_state *mrb, mrb_value self)
922
944
  /* fall through */
923
945
  default:
924
946
  exc = mrb_make_exception(mrb, argc, a);
925
- mrb_obj_iv_set(mrb, mrb_obj_ptr(exc), mrb_intern2(mrb, "lastpc", 6), mrb_cptr_value(mrb, mrb->c->ci->pc));
947
+ mrb_obj_iv_set(mrb, mrb_obj_ptr(exc), mrb_intern_lit(mrb, "lastpc"), mrb_cptr_value(mrb, mrb->c->ci->pc));
926
948
  mrb_exc_raise(mrb, exc);
927
949
  break;
928
950
  }
@@ -1027,7 +1049,7 @@ obj_respond_to(mrb_state *mrb, mrb_value self)
1027
1049
  }
1028
1050
 
1029
1051
  if (!respond_to_p) {
1030
- rtm_id = mrb_intern2(mrb, "respond_to_missing?", 19);
1052
+ rtm_id = mrb_intern_lit(mrb, "respond_to_missing?");
1031
1053
  if (basic_obj_respond_to(mrb, self, rtm_id, !mrb_test(priv))) {
1032
1054
  return mrb_funcall_argv(mrb, self, rtm_id, argc, argv);
1033
1055
  }
@@ -1129,5 +1151,5 @@ mrb_init_kernel(mrb_state *mrb)
1129
1151
  mrb_define_method(mrb, krn, "to_s", mrb_any_to_s, MRB_ARGS_NONE()); /* 15.3.1.3.46 */
1130
1152
 
1131
1153
  mrb_include_module(mrb, mrb->object_class, mrb->kernel_module);
1132
- mrb_alias_method(mrb, mrb->module_class, mrb_intern2(mrb, "dup", 3), mrb_intern2(mrb, "clone", 5));
1154
+ mrb_alias_method(mrb, mrb->module_class, mrb_intern_lit(mrb, "dup"), mrb_intern_lit(mrb, "clone"));
1133
1155
  }