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
@@ -53,7 +53,7 @@ void
53
53
  mrb_name_class(mrb_state *mrb, struct RClass *c, mrb_sym name)
54
54
  {
55
55
  mrb_obj_iv_set(mrb, (struct RObject*)c,
56
- mrb_intern2(mrb, "__classid__", 11), mrb_symbol_value(name));
56
+ mrb_intern_lit(mrb, "__classid__"), mrb_symbol_value(name));
57
57
  }
58
58
 
59
59
  #define make_metaclass(mrb, c) prepare_singleton_class((mrb), (struct RBasic*)(c))
@@ -89,7 +89,7 @@ prepare_singleton_class(mrb_state *mrb, struct RBasic *o)
89
89
  o->c = sc;
90
90
  mrb_field_write_barrier(mrb, (struct RBasic*)o, (struct RBasic*)sc);
91
91
  mrb_field_write_barrier(mrb, (struct RBasic*)sc, (struct RBasic*)o);
92
- mrb_obj_iv_set(mrb, (struct RObject*)sc, mrb_intern2(mrb, "__attached__", 12), mrb_obj_value(o));
92
+ mrb_obj_iv_set(mrb, (struct RObject*)sc, mrb_intern_lit(mrb, "__attached__"), mrb_obj_value(o));
93
93
  }
94
94
 
95
95
  struct RClass*
@@ -116,7 +116,7 @@ setup_class(mrb_state *mrb, mrb_value outer, struct RClass *c, mrb_sym id)
116
116
  mrb_name_class(mrb, c, id);
117
117
  mrb_const_set(mrb, outer, id, mrb_obj_value(c));
118
118
  mrb_obj_iv_set(mrb, (struct RObject*)c,
119
- mrb_intern2(mrb, "__outer__", 9), outer);
119
+ mrb_intern_lit(mrb, "__outer__"), outer);
120
120
  }
121
121
 
122
122
  struct RClass*
@@ -124,7 +124,7 @@ mrb_class_outer_module(mrb_state *mrb, struct RClass *c)
124
124
  {
125
125
  mrb_value outer;
126
126
 
127
- outer = mrb_obj_iv_get(mrb, (struct RObject*)c, mrb_intern2(mrb, "__outer__", 9));
127
+ outer = mrb_obj_iv_get(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"));
128
128
  if (mrb_nil_p(outer)) return 0;
129
129
  return mrb_class_ptr(outer);
130
130
  }
@@ -380,6 +380,7 @@ to_hash(mrb_state *mrb, mrb_value val)
380
380
  string mruby type C type note
381
381
  ----------------------------------------------------------------------------------------------
382
382
  o: Object [mrb_value]
383
+ C: class/module [mrb_value]
383
384
  S: String [mrb_value]
384
385
  A: Array [mrb_value]
385
386
  H: Hash [mrb_value]
@@ -434,6 +435,29 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
434
435
  }
435
436
  }
436
437
  break;
438
+ case 'C':
439
+ {
440
+ mrb_value *p;
441
+
442
+ p = va_arg(ap, mrb_value*);
443
+ if (i < argc) {
444
+ mrb_value ss;
445
+
446
+ ss = *sp++;
447
+ switch (mrb_type(ss)) {
448
+ case MRB_TT_CLASS:
449
+ case MRB_TT_MODULE:
450
+ case MRB_TT_SCLASS:
451
+ break;
452
+ default:
453
+ mrb_raisef(mrb, E_TYPE_ERROR, "%S is not class/module", ss);
454
+ break;
455
+ }
456
+ *p = ss;
457
+ i++;
458
+ }
459
+ }
460
+ break;
437
461
  case 'S':
438
462
  {
439
463
  mrb_value *p;
@@ -576,16 +600,8 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
576
600
  *p = (mrb_int)f;
577
601
  }
578
602
  break;
579
- case MRB_TT_FALSE:
580
- *p = 0;
581
- break;
582
603
  default:
583
- {
584
- mrb_value tmp;
585
-
586
- tmp = mrb_convert_type(mrb, *sp, MRB_TT_FIXNUM, "Integer", "to_int");
587
- *p = mrb_fixnum(tmp);
588
- }
604
+ *p = mrb_fixnum(mrb_Integer(mrb, *sp));
589
605
  break;
590
606
  }
591
607
  sp++;
@@ -740,7 +756,7 @@ mrb_mod_append_features(mrb_state *mrb, mrb_value mod)
740
756
  mrb_value klass;
741
757
 
742
758
  mrb_check_type(mrb, mod, MRB_TT_MODULE);
743
- mrb_get_args(mrb, "o", &klass);
759
+ mrb_get_args(mrb, "C", &klass);
744
760
  mrb_include_module(mrb, mrb_class_ptr(klass), mrb_class_ptr(mod));
745
761
  return mod;
746
762
  }
@@ -788,7 +804,7 @@ mrb_mod_include_p(mrb_state *mrb, mrb_value mod)
788
804
  mrb_value mod2;
789
805
  struct RClass *c = mrb_class_ptr(mod);
790
806
 
791
- mrb_get_args(mrb, "o", &mod2);
807
+ mrb_get_args(mrb, "C", &mod2);
792
808
  mrb_check_type(mrb, mod2, MRB_TT_MODULE);
793
809
 
794
810
  while (c) {
@@ -1045,7 +1061,7 @@ mrb_instance_new(mrb_state *mrb, mrb_value cv)
1045
1061
 
1046
1062
  obj = mrb_instance_alloc(mrb, cv);
1047
1063
  mrb_get_args(mrb, "*&", &argv, &argc, &blk);
1048
- mrb_funcall_with_block(mrb, obj, mrb_intern2(mrb, "initialize", 10), argc, argv, blk);
1064
+ mrb_funcall_with_block(mrb, obj, mrb_intern_lit(mrb, "initialize"), argc, argv, blk);
1049
1065
 
1050
1066
  return obj;
1051
1067
  }
@@ -1056,7 +1072,7 @@ mrb_obj_new(mrb_state *mrb, struct RClass *c, int argc, mrb_value *argv)
1056
1072
  mrb_value obj;
1057
1073
 
1058
1074
  obj = mrb_instance_alloc(mrb, mrb_obj_value(c));
1059
- mrb_funcall_argv(mrb, obj, mrb_intern2(mrb, "initialize", 10), argc, argv);
1075
+ mrb_funcall_argv(mrb, obj, mrb_intern_lit(mrb, "initialize"), argc, argv);
1060
1076
 
1061
1077
  return obj;
1062
1078
  }
@@ -1064,15 +1080,18 @@ mrb_obj_new(mrb_state *mrb, struct RClass *c, int argc, mrb_value *argv)
1064
1080
  static mrb_value
1065
1081
  mrb_class_new_class(mrb_state *mrb, mrb_value cv)
1066
1082
  {
1067
- mrb_value super;
1068
- struct RClass *new_class;
1083
+ mrb_value super, blk;
1084
+ mrb_value new_class;
1069
1085
 
1070
- if (mrb_get_args(mrb, "|o", &super) == 0) {
1086
+ if (mrb_get_args(mrb, "|C&", &super, &blk) == 0) {
1071
1087
  super = mrb_obj_value(mrb->object_class);
1072
1088
  }
1073
- new_class = mrb_class_new(mrb, mrb_class_ptr(super));
1074
- mrb_funcall(mrb, super, "inherited", 1, mrb_obj_value(new_class));
1075
- return mrb_obj_value(new_class);
1089
+ new_class = mrb_obj_value(mrb_class_new(mrb, mrb_class_ptr(super)));
1090
+ if (!mrb_nil_p(blk)) {
1091
+ mrb_funcall_with_block(mrb, new_class, mrb_intern_cstr(mrb, "class_eval"), 0, NULL, blk);
1092
+ }
1093
+ mrb_funcall(mrb, super, "inherited", 1, new_class);
1094
+ return new_class;
1076
1095
  }
1077
1096
 
1078
1097
  mrb_value
@@ -1144,7 +1163,7 @@ mrb_bob_missing(mrb_state *mrb, mrb_value mod)
1144
1163
 
1145
1164
  mrb_get_args(mrb, "n*", &name, &a, &alen);
1146
1165
 
1147
- if (mrb_respond_to(mrb,mod,mrb_intern2(mrb, "inspect",7))){
1166
+ if (mrb_respond_to(mrb,mod,mrb_intern_lit(mrb, "inspect"))){
1148
1167
  inspect = mrb_funcall(mrb, mod, "inspect", 0);
1149
1168
  if (RSTRING_LEN(inspect) > 64) {
1150
1169
  inspect = mrb_any_to_s(mrb, mod);
@@ -1196,7 +1215,7 @@ mrb_class_path(mrb_state *mrb, struct RClass *c)
1196
1215
  mrb_value path;
1197
1216
  const char *name;
1198
1217
  size_t len;
1199
- mrb_sym classpath = mrb_intern2(mrb, "__classpath__", 13);
1218
+ mrb_sym classpath = mrb_intern_lit(mrb, "__classpath__");
1200
1219
 
1201
1220
  path = mrb_obj_iv_get(mrb, (struct RObject*)c, classpath);
1202
1221
  if (mrb_nil_p(path)) {
@@ -1357,7 +1376,7 @@ mrb_mod_to_s(mrb_state *mrb, mrb_value klass)
1357
1376
  mrb_value str;
1358
1377
 
1359
1378
  if (mrb_type(klass) == MRB_TT_SCLASS) {
1360
- mrb_value v = mrb_iv_get(mrb, klass, mrb_intern2(mrb, "__attached__", 12));
1379
+ mrb_value v = mrb_iv_get(mrb, klass, mrb_intern_lit(mrb, "__attached__"));
1361
1380
 
1362
1381
  str = mrb_str_new(mrb, "#<Class:", 8);
1363
1382
 
@@ -1893,10 +1912,10 @@ mrb_init_class(mrb_state *mrb)
1893
1912
  mrb_define_const(mrb, obj, "Class", mrb_obj_value(cls));
1894
1913
 
1895
1914
  /* name each classes */
1896
- mrb_name_class(mrb, bob, mrb_intern2(mrb, "BasicObject", 11));
1897
- mrb_name_class(mrb, obj, mrb_intern2(mrb, "Object", 6));
1898
- mrb_name_class(mrb, mod, mrb_intern2(mrb, "Module", 6));
1899
- mrb_name_class(mrb, cls, mrb_intern2(mrb, "Class", 5));
1915
+ mrb_name_class(mrb, bob, mrb_intern_lit(mrb, "BasicObject"));
1916
+ mrb_name_class(mrb, obj, mrb_intern_lit(mrb, "Object"));
1917
+ mrb_name_class(mrb, mod, mrb_intern_lit(mrb, "Module"));
1918
+ mrb_name_class(mrb, cls, mrb_intern_lit(mrb, "Class"));
1900
1919
 
1901
1920
  MRB_SET_INSTANCE_TT(cls, MRB_TT_CLASS);
1902
1921
  mrb_define_method(mrb, bob, "initialize", mrb_bob_init, MRB_ARGS_NONE());