webruby 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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
  }