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
@@ -69,19 +69,23 @@ The value below allows about 60000 recursive calls in the simplest case. */
69
69
  #define TO_STR(x) TO_STR_(x)
70
70
  #define TO_STR_(x) #x
71
71
 
72
+ #define ARENA_RESTORE(mrb,ai) (mrb)->arena_idx = (ai)
73
+
72
74
  static inline void
73
75
  stack_clear(mrb_value *from, size_t count)
74
76
  {
77
+ #ifndef MRB_NAN_BOXING
75
78
  const mrb_value mrb_value_zero = { { 0 } };
76
79
 
77
80
  while (count-- > 0) {
78
- #ifndef MRB_NAN_BOXING
79
81
  *from++ = mrb_value_zero;
82
+ }
80
83
  #else
84
+ while (count-- > 0) {
81
85
  SET_NIL_VALUE(*from);
82
86
  from++;
83
- #endif
84
87
  }
88
+ #endif
85
89
  }
86
90
 
87
91
  static inline void
@@ -128,39 +132,39 @@ envadjust(mrb_state *mrb, mrb_value *oldbase, mrb_value *newbase)
128
132
  /** def rec ; $deep =+ 1 ; if $deep > 1000 ; return 0 ; end ; rec ; end */
129
133
 
130
134
  static void
135
+ stack_extend_alloc(mrb_state *mrb, int room)
136
+ {
137
+ mrb_value *oldbase = mrb->c->stbase;
138
+ int size = mrb->c->stend - mrb->c->stbase;
139
+ int off = mrb->c->stack - mrb->c->stbase;
140
+
141
+ /* Use linear stack growth.
142
+ It is slightly slower than doubling the stack space,
143
+ but it saves memory on small devices. */
144
+ if (room <= size)
145
+ size += MRB_STACK_GROWTH;
146
+ else
147
+ size += room;
148
+
149
+ mrb->c->stbase = (mrb_value *)mrb_realloc(mrb, mrb->c->stbase, sizeof(mrb_value) * size);
150
+ mrb->c->stack = mrb->c->stbase + off;
151
+ mrb->c->stend = mrb->c->stbase + size;
152
+ envadjust(mrb, oldbase, mrb->c->stbase);
153
+ /* Raise an exception if the new stack size will be too large,
154
+ to prevent infinite recursion. However, do this only after resizing the stack, so mrb_raise has stack space to work with. */
155
+ if (size > MRB_STACK_MAX) {
156
+ mrb_raise(mrb, E_RUNTIME_ERROR, "stack level too deep. (limit=" TO_STR(MRB_STACK_MAX) ")");
157
+ }
158
+ }
159
+
160
+ static inline void
131
161
  stack_extend(mrb_state *mrb, int room, int keep)
132
162
  {
133
163
  if (mrb->c->stack + room >= mrb->c->stend) {
134
- int size, off;
135
-
136
- mrb_value *oldbase = mrb->c->stbase;
137
-
138
- size = mrb->c->stend - mrb->c->stbase;
139
- off = mrb->c->stack - mrb->c->stbase;
140
-
141
- /* do not leave uninitialized malloc region */
142
- if (keep > size) keep = size;
143
-
144
- /* Use linear stack growth.
145
- It is slightly slower than doubling thestack space,
146
- but it saves memory on small devices. */
147
- if (room <= size)
148
- size += MRB_STACK_GROWTH;
149
- else
150
- size += room;
151
-
152
- mrb->c->stbase = (mrb_value *)mrb_realloc(mrb, mrb->c->stbase, sizeof(mrb_value) * size);
153
- mrb->c->stack = mrb->c->stbase + off;
154
- mrb->c->stend = mrb->c->stbase + size;
155
- envadjust(mrb, oldbase, mrb->c->stbase);
156
- /* Raise an exception if the new stack size will be too large,
157
- to prevent infinite recursion. However, do this only after resizing the stack, so mrb_raise has stack space to work with. */
158
- if (size > MRB_STACK_MAX) {
159
- mrb_raise(mrb, E_RUNTIME_ERROR, "stack level too deep. (limit=" TO_STR(MRB_STACK_MAX) ")");
160
- }
164
+ stack_extend_alloc(mrb, room);
161
165
  }
162
-
163
166
  if (room > keep) {
167
+ /* do not leave uninitialized malloc region */
164
168
  stack_clear(&(mrb->c->stack[keep]), room - keep);
165
169
  }
166
170
  }
@@ -355,7 +359,7 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr
355
359
  p = mrb_method_search_vm(mrb, &c, mid);
356
360
  if (!p) {
357
361
  undef = mid;
358
- mid = mrb_intern2(mrb, "method_missing", 14);
362
+ mid = mrb_intern_lit(mrb, "method_missing");
359
363
  p = mrb_method_search_vm(mrb, &c, mid);
360
364
  n++; argc++;
361
365
  }
@@ -488,7 +492,7 @@ localjump_error(mrb_state *mrb, localjump_error_kind kind)
488
492
  msg = mrb_str_buf_new(mrb, sizeof(lead) + 7);
489
493
  mrb_str_buf_cat(mrb, msg, lead, sizeof(lead) - 1);
490
494
  mrb_str_buf_cat(mrb, msg, kind_str[kind], kind_str_len[kind]);
491
- exc = mrb_exc_new3(mrb, E_LOCALJUMP_ERROR, msg);
495
+ exc = mrb_exc_new_str(mrb, E_LOCALJUMP_ERROR, msg);
492
496
  mrb->exc = mrb_obj_ptr(exc);
493
497
  }
494
498
 
@@ -507,11 +511,12 @@ argnum_error(mrb_state *mrb, int num)
507
511
  str = mrb_format(mrb, "wrong number of arguments (%S for %S)",
508
512
  mrb_fixnum_value(mrb->c->ci->argc), mrb_fixnum_value(num));
509
513
  }
510
- exc = mrb_exc_new3(mrb, E_ARGUMENT_ERROR, str);
514
+ exc = mrb_exc_new_str(mrb, E_ARGUMENT_ERROR, str);
511
515
  mrb->exc = mrb_obj_ptr(exc);
512
516
  }
513
517
 
514
- #define ERR_PC_HOOK(mrb, pc) mrb->c->ci->err = pc;
518
+ #define ERR_PC_SET(mrb, pc) mrb->c->ci->err = pc;
519
+ #define ERR_PC_CLR(mrb) mrb->c->ci->err = 0;
515
520
  #ifdef ENABLE_DEBUG
516
521
  #define CODE_FETCH_HOOK(mrb, irep, pc, regs) if ((mrb)->code_fetch_hook) (mrb)->code_fetch_hook((mrb), (irep), (pc), (regs));
517
522
  #else
@@ -547,7 +552,7 @@ void mrb_gv_val_set(mrb_state *mrb, mrb_sym sym, mrb_value val);
547
552
  #define CALL_MAXARGS 127
548
553
 
549
554
  mrb_value
550
- mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
555
+ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep)
551
556
  {
552
557
  /* mrb_assert(mrb_proc_cfunc_p(proc)) */
553
558
  mrb_irep *irep = proc->body.irep;
@@ -595,7 +600,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
595
600
  if (!mrb->c->stack) {
596
601
  stack_init(mrb);
597
602
  }
598
- stack_extend(mrb, irep->nregs, irep->nregs);
603
+ stack_extend(mrb, irep->nregs, stack_keep);
599
604
  mrb->c->ci->err = pc;
600
605
  mrb->c->ci->proc = proc;
601
606
  mrb->c->ci->nregs = irep->nregs + 1;
@@ -616,7 +621,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
616
621
 
617
622
  CASE(OP_LOADL) {
618
623
  /* A Bx R(A) := Pool(Bx) */
619
- regs[GETARG_A(i)] = pool[GETARG_Bx(i)];
624
+ regs[GETARG_A(i)] = pool[GETARG_Bx(i)];
620
625
  NEXT;
621
626
  }
622
627
 
@@ -688,8 +693,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
688
693
 
689
694
  CASE(OP_GETCV) {
690
695
  /* A B R(A) := ivget(Sym(B)) */
691
- ERR_PC_HOOK(mrb, pc);
696
+ ERR_PC_SET(mrb, pc);
692
697
  regs[GETARG_A(i)] = mrb_vm_cv_get(mrb, syms[GETARG_Bx(i)]);
698
+ ERR_PC_CLR(mrb);
693
699
  NEXT;
694
700
  }
695
701
 
@@ -703,8 +709,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
703
709
  /* A B R(A) := constget(Sym(B)) */
704
710
  mrb_value val;
705
711
 
706
- ERR_PC_HOOK(mrb, pc);
712
+ ERR_PC_SET(mrb, pc);
707
713
  val = mrb_vm_const_get(mrb, syms[GETARG_Bx(i)]);
714
+ ERR_PC_CLR(mrb);
708
715
  regs = mrb->c->stack;
709
716
  regs[GETARG_A(i)] = val;
710
717
  NEXT;
@@ -721,8 +728,9 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
721
728
  mrb_value val;
722
729
  int a = GETARG_A(i);
723
730
 
724
- ERR_PC_HOOK(mrb, pc);
731
+ ERR_PC_SET(mrb, pc);
725
732
  val = mrb_const_get(mrb, regs[a], syms[GETARG_Bx(i)]);
733
+ ERR_PC_CLR(mrb);
726
734
  regs = mrb->c->stack;
727
735
  regs[a] = val;
728
736
  NEXT;
@@ -830,7 +838,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
830
838
  /* Bx ensure_push(SEQ[Bx]) */
831
839
  struct RProc *p;
832
840
 
833
- p = mrb_closure_new(mrb, mrb->irep[irep->idx+GETARG_Bx(i)]);
841
+ p = mrb_closure_new(mrb, irep->reps[GETARG_Bx(i)]);
834
842
  /* push ensure_stack */
835
843
  if (mrb->c->esize <= mrb->c->ci->eidx) {
836
844
  if (mrb->c->esize == 0) mrb->c->esize = 16;
@@ -838,7 +846,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
838
846
  mrb->c->ensure = (struct RProc **)mrb_realloc(mrb, mrb->c->ensure, sizeof(struct RProc*) * mrb->c->esize);
839
847
  }
840
848
  mrb->c->ensure[mrb->c->ci->eidx++] = p;
841
- mrb_gc_arena_restore(mrb, ai);
849
+ ARENA_RESTORE(mrb, ai);
842
850
  NEXT;
843
851
  }
844
852
 
@@ -850,7 +858,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
850
858
  for (n=0; n<a; n++) {
851
859
  ecall(mrb, --mrb->c->ci->eidx);
852
860
  }
853
- mrb_gc_arena_restore(mrb, ai);
861
+ ARENA_RESTORE(mrb, ai);
854
862
  NEXT;
855
863
  }
856
864
 
@@ -891,7 +899,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
891
899
  if (!m) {
892
900
  mrb_value sym = mrb_symbol_value(mid);
893
901
 
894
- mid = mrb_intern2(mrb, "method_missing", 14);
902
+ mid = mrb_intern_lit(mrb, "method_missing");
895
903
  m = mrb_method_search_vm(mrb, &c, mid);
896
904
  if (n == CALL_MAXARGS) {
897
905
  mrb_ary_unshift(mrb, regs[a+1], sym);
@@ -1048,7 +1056,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1048
1056
  c = mrb->c->ci->target_class->super;
1049
1057
  m = mrb_method_search_vm(mrb, &c, mid);
1050
1058
  if (!m) {
1051
- mid = mrb_intern2(mrb, "method_missing", 14);
1059
+ mid = mrb_intern_lit(mrb, "method_missing");
1052
1060
  m = mrb_method_search_vm(mrb, &c, mid);
1053
1061
  if (n == CALL_MAXARGS) {
1054
1062
  mrb_ary_unshift(mrb, regs[a+1], mrb_symbol_value(ci->mid));
@@ -1156,7 +1164,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1156
1164
  rest->len = m1+len+m2;
1157
1165
  }
1158
1166
  regs[a+1] = stack[m1+r+m2];
1159
- mrb_gc_arena_restore(mrb, ai);
1167
+ ARENA_RESTORE(mrb, ai);
1160
1168
  NEXT;
1161
1169
  }
1162
1170
 
@@ -1261,8 +1269,8 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1261
1269
 
1262
1270
  L_RAISE:
1263
1271
  ci = mrb->c->ci;
1264
- mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern2(mrb, "lastpc", 6), mrb_cptr_value(mrb, pc));
1265
- mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern2(mrb, "ciidx", 5), mrb_fixnum_value(ci - mrb->c->cibase));
1272
+ mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern_lit(mrb, "lastpc"), mrb_cptr_value(mrb, pc));
1273
+ mrb_obj_iv_ifnone(mrb, mrb->exc, mrb_intern_lit(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->c->cibase));
1266
1274
  eidx = ci->eidx;
1267
1275
  if (ci == mrb->c->cibase) {
1268
1276
  if (ci->ridx == 0) goto L_STOP;
@@ -1279,10 +1287,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1279
1287
  mrb->jmp = prev_jmp;
1280
1288
  mrb_longjmp(mrb);
1281
1289
  }
1282
- while (eidx > ci->eidx) {
1283
- ecall(mrb, --eidx);
1290
+ if (ci > mrb->c->cibase) {
1291
+ while (eidx > ci[-1].eidx) {
1292
+ ecall(mrb, --eidx);
1293
+ }
1284
1294
  }
1285
- if (ci == mrb->c->cibase) {
1295
+ else if (ci == mrb->c->cibase) {
1286
1296
  if (ci->ridx == 0) {
1287
1297
  regs = mrb->c->stack = mrb->c->stbase;
1288
1298
  goto L_STOP;
@@ -1327,13 +1337,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1327
1337
  goto L_RAISE;
1328
1338
  }
1329
1339
  if (mrb->c->prev->ci == mrb->c->prev->cibase) {
1330
- mrb_value exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, mrb_str_new(mrb, "double resume", 13));
1340
+ mrb_value exc = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, mrb_str_new(mrb, "double resume", 13));
1331
1341
  mrb->exc = mrb_obj_ptr(exc);
1332
1342
  goto L_RAISE;
1333
1343
  }
1334
1344
  /* automatic yield at the end */
1335
1345
  mrb->c->status = MRB_FIBER_TERMINATED;
1336
1346
  mrb->c = mrb->c->prev;
1347
+ mrb->c->status = MRB_FIBER_RUNNING;
1337
1348
  }
1338
1349
  ci = mrb->c->ci;
1339
1350
  break;
@@ -1386,7 +1397,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1386
1397
  if (!m) {
1387
1398
  mrb_value sym = mrb_symbol_value(mid);
1388
1399
 
1389
- mid = mrb_intern2(mrb, "method_missing", 14);
1400
+ mid = mrb_intern_lit(mrb, "method_missing");
1390
1401
  m = mrb_method_search_vm(mrb, &c, mid);
1391
1402
  if (n == CALL_MAXARGS) {
1392
1403
  mrb_ary_unshift(mrb, regs[a+1], sym);
@@ -1530,7 +1541,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1530
1541
  default:
1531
1542
  goto L_SEND;
1532
1543
  }
1533
- mrb_gc_arena_restore(mrb, ai);
1544
+ ARENA_RESTORE(mrb, ai);
1534
1545
  NEXT;
1535
1546
  }
1536
1547
 
@@ -1847,7 +1858,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1847
1858
  CASE(OP_ARRAY) {
1848
1859
  /* A B C R(A) := ary_new(R(B),R(B+1)..R(B+C)) */
1849
1860
  regs[GETARG_A(i)] = mrb_ary_new_from_values(mrb, GETARG_C(i), &regs[GETARG_B(i)]);
1850
- mrb_gc_arena_restore(mrb, ai);
1861
+ ARENA_RESTORE(mrb, ai);
1851
1862
  NEXT;
1852
1863
  }
1853
1864
 
@@ -1855,7 +1866,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1855
1866
  /* A B mrb_ary_concat(R(A),R(B)) */
1856
1867
  mrb_ary_concat(mrb, regs[GETARG_A(i)],
1857
1868
  mrb_ary_splat(mrb, regs[GETARG_B(i)]));
1858
- mrb_gc_arena_restore(mrb, ai);
1869
+ ARENA_RESTORE(mrb, ai);
1859
1870
  NEXT;
1860
1871
  }
1861
1872
 
@@ -1927,14 +1938,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1927
1938
  }
1928
1939
  }
1929
1940
  }
1930
- mrb_gc_arena_restore(mrb, ai);
1941
+ ARENA_RESTORE(mrb, ai);
1931
1942
  NEXT;
1932
1943
  }
1933
1944
 
1934
1945
  CASE(OP_STRING) {
1935
1946
  /* A Bx R(A) := str_new(Lit(Bx)) */
1936
- regs[GETARG_A(i)] = mrb_str_literal(mrb, pool[GETARG_Bx(i)]);
1937
- mrb_gc_arena_restore(mrb, ai);
1947
+ regs[GETARG_A(i)] = mrb_str_dup(mrb, pool[GETARG_Bx(i)]);
1948
+ ARENA_RESTORE(mrb, ai);
1938
1949
  NEXT;
1939
1950
  }
1940
1951
 
@@ -1956,7 +1967,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1956
1967
  b+=2;
1957
1968
  }
1958
1969
  regs[GETARG_A(i)] = hash;
1959
- mrb_gc_arena_restore(mrb, ai);
1970
+ ARENA_RESTORE(mrb, ai);
1960
1971
  NEXT;
1961
1972
  }
1962
1973
 
@@ -1966,14 +1977,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1966
1977
  int c = GETARG_c(i);
1967
1978
 
1968
1979
  if (c & OP_L_CAPTURE) {
1969
- p = mrb_closure_new(mrb, mrb->irep[irep->idx+GETARG_b(i)]);
1980
+ p = mrb_closure_new(mrb, irep->reps[GETARG_b(i)]);
1970
1981
  }
1971
1982
  else {
1972
- p = mrb_proc_new(mrb, mrb->irep[irep->idx+GETARG_b(i)]);
1983
+ p = mrb_proc_new(mrb, irep->reps[GETARG_b(i)]);
1973
1984
  }
1974
1985
  if (c & OP_L_STRICT) p->flags |= MRB_PROC_STRICT;
1975
1986
  regs[GETARG_A(i)] = mrb_obj_value(p);
1976
- mrb_gc_arena_restore(mrb, ai);
1987
+ ARENA_RESTORE(mrb, ai);
1977
1988
  NEXT;
1978
1989
  }
1979
1990
 
@@ -1997,7 +2008,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
1997
2008
  }
1998
2009
  c = mrb_vm_define_class(mrb, base, super, id);
1999
2010
  regs[a] = mrb_obj_value(c);
2000
- mrb_gc_arena_restore(mrb, ai);
2011
+ ARENA_RESTORE(mrb, ai);
2001
2012
  NEXT;
2002
2013
  }
2003
2014
 
@@ -2014,7 +2025,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2014
2025
  }
2015
2026
  c = mrb_vm_define_module(mrb, base, id);
2016
2027
  regs[a] = mrb_obj_value(c);
2017
- mrb_gc_arena_restore(mrb, ai);
2028
+ ARENA_RESTORE(mrb, ai);
2018
2029
  NEXT;
2019
2030
  }
2020
2031
 
@@ -2037,7 +2048,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2037
2048
  /* prepare stack */
2038
2049
  mrb->c->stack += a;
2039
2050
 
2040
- p = mrb_proc_new(mrb, mrb->irep[irep->idx+GETARG_Bx(i)]);
2051
+ p = mrb_proc_new(mrb, irep->reps[GETARG_Bx(i)]);
2041
2052
  p->target_class = ci->target_class;
2042
2053
  ci->proc = p;
2043
2054
 
@@ -2068,14 +2079,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2068
2079
  struct RClass *c = mrb_class_ptr(regs[a]);
2069
2080
 
2070
2081
  mrb_define_method_vm(mrb, c, syms[GETARG_B(i)], regs[a+1]);
2071
- mrb_gc_arena_restore(mrb, ai);
2082
+ ARENA_RESTORE(mrb, ai);
2072
2083
  NEXT;
2073
2084
  }
2074
2085
 
2075
2086
  CASE(OP_SCLASS) {
2076
2087
  /* A B R(A) := R(B).singleton_class */
2077
2088
  regs[GETARG_A(i)] = mrb_singleton_class(mrb, regs[GETARG_B(i)]);
2078
- mrb_gc_arena_restore(mrb, ai);
2089
+ ARENA_RESTORE(mrb, ai);
2079
2090
  NEXT;
2080
2091
  }
2081
2092
 
@@ -2095,7 +2106,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2095
2106
  /* A B C R(A) := range_new(R(B),R(B+1),C) */
2096
2107
  int b = GETARG_B(i);
2097
2108
  regs[GETARG_A(i)] = mrb_range_new(mrb, regs[b], regs[b+1], GETARG_C(i));
2098
- mrb_gc_arena_restore(mrb, ai);
2109
+ ARENA_RESTORE(mrb, ai);
2099
2110
  NEXT;
2100
2111
  }
2101
2112
 
@@ -2119,6 +2130,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2119
2130
  ecall(mrb, n);
2120
2131
  }
2121
2132
  }
2133
+ mrb->c->ci->err = 0;
2122
2134
  mrb->jmp = prev_jmp;
2123
2135
  if (mrb->exc) {
2124
2136
  return mrb_obj_value(mrb->exc);
@@ -2128,14 +2140,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2128
2140
 
2129
2141
  CASE(OP_ERR) {
2130
2142
  /* Bx raise RuntimeError with message Lit(Bx) */
2131
- mrb_value msg = pool[GETARG_Bx(i)];
2143
+ mrb_value msg = mrb_str_dup(mrb, pool[GETARG_Bx(i)]);
2132
2144
  mrb_value exc;
2133
2145
 
2134
2146
  if (GETARG_A(i) == 0) {
2135
- exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, msg);
2147
+ exc = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, msg);
2136
2148
  }
2137
2149
  else {
2138
- exc = mrb_exc_new3(mrb, E_LOCALJUMP_ERROR, msg);
2150
+ exc = mrb_exc_new_str(mrb, E_LOCALJUMP_ERROR, msg);
2139
2151
  }
2140
2152
  mrb->exc = mrb_obj_ptr(exc);
2141
2153
  goto L_RAISE;
@@ -2144,6 +2156,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2144
2156
  END_DISPATCH;
2145
2157
  }
2146
2158
 
2159
+ mrb_value
2160
+ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
2161
+ {
2162
+ return mrb_context_run(mrb, proc, self, mrb->c->ci->argc + 2); /* argc + 2 (receiver and block) */
2163
+ }
2164
+
2147
2165
  void
2148
2166
  mrb_longjmp(mrb_state *mrb)
2149
2167
  {
@@ -87,6 +87,11 @@ module MRuby
87
87
  MRuby.targets[@name].instance_eval(&block)
88
88
  end
89
89
 
90
+ def enable_debug
91
+ compilers.each { |c| c.defines += %w(MRB_DEBUG) }
92
+ @mrbc.compile_options += ' -g'
93
+ end
94
+
90
95
  def toolchain(name)
91
96
  tc = Toolchain.toolchains[name.to_s]
92
97
  fail "Unknown #{name} toolchain" unless tc
@@ -98,7 +103,7 @@ module MRuby
98
103
  end
99
104
 
100
105
  def mrbcfile
101
- MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/mrbc")
106
+ MRuby.targets[@name].exefile("#{MRuby.targets[@name].build_dir}/bin/mrbc")
102
107
  end
103
108
 
104
109
  def compilers
@@ -199,6 +204,10 @@ module MRuby
199
204
  super
200
205
  end
201
206
 
207
+ def mrbcfile
208
+ MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/mrbc")
209
+ end
210
+
202
211
  def run_test
203
212
  mrbtest = exefile("#{build_dir}/test/mrbtest")
204
213
  if (@test_runner.command == nil)
@@ -1,7 +1,7 @@
1
1
  MRuby::Toolchain.new(:gcc) do |conf|
2
- [conf.cc, conf.cxx, conf.objc, conf.asm].each do |cc|
2
+ [conf.cc, conf.objc, conf.asm].each do |cc|
3
3
  cc.command = ENV['CC'] || 'gcc'
4
- cc.flags = [ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration)]
4
+ cc.flags = [ENV['CFLAGS'] || %w(-g -std=gnu99 -O3 -Wall -Werror-implicit-function-declaration)]
5
5
  cc.include_paths = ["#{MRUBY_ROOT}/include"]
6
6
  cc.defines = %w(DISABLE_GEMS)
7
7
  cc.option_include_path = '-I%s'
@@ -9,6 +9,16 @@ MRuby::Toolchain.new(:gcc) do |conf|
9
9
  cc.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}'
10
10
  end
11
11
 
12
+ [conf.cxx].each do |cxx|
13
+ cxx.command = ENV['CXX'] || 'g++'
14
+ cxx.flags = [ENV['CXXFLAGS'] || ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration)]
15
+ cxx.include_paths = ["#{MRUBY_ROOT}/include"]
16
+ cxx.defines = %w(DISABLE_GEMS)
17
+ cxx.option_include_path = '-I%s'
18
+ cxx.option_define = '-D%s'
19
+ cxx.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}'
20
+ end
21
+
12
22
  conf.linker do |linker|
13
23
  linker.command = ENV['LD'] || 'gcc'
14
24
  linker.flags = [ENV['LDFLAGS'] || %w()]
@@ -1,4 +1,4 @@
1
- MRuby::Toolchain.new(:vs2012) do |conf|
1
+ MRuby::Toolchain.new(:visualcpp) do |conf|
2
2
  [conf.cc, conf.cxx].each do |cc|
3
3
  cc.command = ENV['CC'] || 'cl.exe'
4
4
  cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /D_DEBUG /MDd /Zi /Od /RTC1 /DHAVE_STRING_H /DNO_GETTIMEOFDAY /D_CRT_SECURE_NO_WARNINGS)]
@@ -34,8 +34,8 @@ check_error(mrb_state *mrb)
34
34
  {
35
35
  /* Error check */
36
36
  /* $ko_test and $kill_test should be 0 */
37
- mrb_value ko_test = mrb_gv_get(mrb, mrb_intern2(mrb, "$ko_test", 8));
38
- mrb_value kill_test = mrb_gv_get(mrb, mrb_intern2(mrb, "$kill_test", 10));
37
+ mrb_value ko_test = mrb_gv_get(mrb, mrb_intern(mrb, "$ko_test", 8));
38
+ mrb_value kill_test = mrb_gv_get(mrb, mrb_intern(mrb, "$kill_test", 10));
39
39
 
40
40
  return mrb_fixnum_p(ko_test) && mrb_fixnum(ko_test) == 0 && mrb_fixnum_p(kill_test) && mrb_fixnum(kill_test) == 0;
41
41
  }
@@ -104,7 +104,7 @@ main(int argc, char **argv)
104
104
 
105
105
  if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v') {
106
106
  printf("verbose mode: enable\n\n");
107
- mrb_gv_set(mrb, mrb_intern2(mrb, "$mrbtest_verbose", 16), mrb_true_value());
107
+ mrb_gv_set(mrb, mrb_intern(mrb, "$mrbtest_verbose", 16), mrb_true_value());
108
108
  }
109
109
 
110
110
  krn = mrb->kernel_module;
@@ -17,7 +17,11 @@ assert('Array.[]', '15.2.12.4.1') do
17
17
  assert_equal([1, 2, 3], Array.[](1,2,3))
18
18
  end
19
19
 
20
- assert('Array#*', '15.2.12.5.1') do
20
+ assert('Array#+', '15.2.12.5.1') do
21
+ assert_equal([1, 1], [1].+([1]))
22
+ end
23
+
24
+ assert('Array#*', '15.2.12.5.2') do
21
25
  assert_raise(ArgumentError) do
22
26
  # this will cause an exception due to the wrong argument
23
27
  [1].*(-1)
@@ -26,10 +30,6 @@ assert('Array#*', '15.2.12.5.1') do
26
30
  assert_equal([], [1].*(0))
27
31
  end
28
32
 
29
- assert('Array#+', '15.2.12.5.2') do
30
- assert_equal([1, 1], [1].+([1]))
31
- end
32
-
33
33
  assert('Array#<<', '15.2.12.5.3') do
34
34
  assert_equal([1, 1], [1].<<(1))
35
35
  end
@@ -9,7 +9,15 @@ assert('Class superclass', '15.2.3.2') do
9
9
  assert_equal(Module, Class.superclass)
10
10
  end
11
11
 
12
- # Class#initialize '15.2.3.3.1' is tested in Class#new
12
+ assert('Class#initialize', '15.2.3.3.1') do
13
+ c = Class.new do
14
+ def test
15
+ :test
16
+ end
17
+ end.new
18
+
19
+ assert_equal(c.test, :test)
20
+ end
13
21
 
14
22
  assert('Class#initialize_copy', '15.2.3.3.2') do
15
23
  class TestClass
@@ -222,6 +230,11 @@ assert('Class new') do
222
230
  assert_equal(Class, Class.new.class)
223
231
  end
224
232
 
233
+ assert('class to return the last value') do
234
+ m = class C; :m end
235
+ assert_equal(m, :m)
236
+ end
237
+
225
238
  assert('Class#inherited') do
226
239
  class Foo
227
240
  @@subclass_name = nil
@@ -281,6 +281,10 @@ end
281
281
  assert('Kernel#is_a?', '15.3.1.3.24') do
282
282
  assert_true is_a?(Kernel)
283
283
  assert_false is_a?(Array)
284
+
285
+ assert_raise TypeError do
286
+ 42.is_a?(42)
287
+ end
284
288
  end
285
289
 
286
290
  assert('Kernel#iterator?', '15.3.1.3.25') do
@@ -276,16 +276,16 @@ end
276
276
  assert('Module.constants', '15.2.2.4.24') do
277
277
  $n = []
278
278
  module TestA
279
- Const = 1
279
+ C = 1
280
280
  end
281
281
  class TestB
282
282
  include TestA
283
- Const2 = 1
283
+ C2 = 1
284
284
  $n = constants.sort
285
285
  end
286
286
 
287
- assert_equal [ :Const ], TestA.constants
288
- assert_equal [ :Const, :Const2 ], $n
287
+ assert_equal [ :C ], TestA.constants
288
+ assert_equal [ :C, :C2 ], $n
289
289
  end
290
290
 
291
291
  assert('Module#include', '15.2.2.4.27') do
@@ -20,7 +20,7 @@ assert('NameError#name', '15.2.31.2.1') do
20
20
  $test_dummy_result = e.name
21
21
  end
22
22
 
23
- assert_equal $test_dummy_result, :bar
23
+ assert_equal :bar, $test_dummy_result
24
24
  end
25
25
 
26
26
  assert('NameError#initialize', '15.2.31.2.2') do