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
@@ -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