webruby 0.2.2 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/webruby/config.rb +4 -9
- data/lib/webruby/rake/files.rake +2 -2
- data/modules/emscripten/AUTHORS +9 -1
- data/modules/emscripten/CONTRIBUTING.markdown +5 -0
- data/modules/emscripten/ChangeLog +435 -0
- data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
- data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
- data/modules/emscripten/em++ +0 -2
- data/modules/emscripten/emcc +92 -32
- data/modules/emscripten/emlink.py +16 -13
- data/modules/emscripten/emmake +1 -1
- data/modules/emscripten/emrun +918 -0
- data/modules/emscripten/emrun.bat +2 -0
- data/modules/emscripten/emscripten.py +545 -20
- data/modules/emscripten/src/analyzer.js +6 -1
- data/modules/emscripten/src/compiler.js +25 -16
- data/modules/emscripten/src/emrun_postjs.js +20 -0
- data/modules/emscripten/{tests → src}/hello_world.js +0 -0
- data/modules/emscripten/src/intertyper.js +45 -16
- data/modules/emscripten/src/jsifier.js +78 -48
- data/modules/emscripten/src/library.js +381 -96
- data/modules/emscripten/src/library_browser.js +50 -53
- data/modules/emscripten/src/library_egl.js +66 -24
- data/modules/emscripten/src/library_fs.js +122 -90
- data/modules/emscripten/src/library_gl.js +739 -353
- data/modules/emscripten/src/library_glfw.js +9 -3
- data/modules/emscripten/src/library_glut.js +10 -5
- data/modules/emscripten/src/library_idbfs.js +14 -14
- data/modules/emscripten/src/library_memfs.js +65 -41
- data/modules/emscripten/src/library_nodefs.js +61 -9
- data/modules/emscripten/src/library_openal.js +4 -4
- data/modules/emscripten/src/library_path.js +9 -13
- data/modules/emscripten/src/library_sdl.js +301 -64
- data/modules/emscripten/src/library_sockfs.js +7 -5
- data/modules/emscripten/src/modules.js +62 -22
- data/modules/emscripten/src/parseTools.js +135 -102
- data/modules/emscripten/src/postamble.js +3 -4
- data/modules/emscripten/src/preamble.js +49 -29
- data/modules/emscripten/src/proxyClient.js +1 -1
- data/modules/emscripten/src/proxyWorker.js +10 -10
- data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
- data/modules/emscripten/src/runtime.js +32 -8
- data/modules/emscripten/src/settings.js +25 -8
- data/modules/emscripten/src/shell.html +6 -3
- data/modules/emscripten/src/shell.js +13 -11
- data/modules/emscripten/src/simd.js +602 -432
- data/modules/emscripten/src/struct_info.json +22 -2
- data/modules/emscripten/src/utility.js +32 -17
- data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
- data/modules/emscripten/system/include/compat/ctype.h +17 -0
- data/modules/emscripten/system/include/compat/wchar.h +23 -0
- data/modules/emscripten/system/include/compat/wctype.h +23 -0
- data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
- data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
- data/modules/emscripten/system/include/emscripten/vector.h +29 -1
- data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
- data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
- data/modules/emscripten/system/include/libcxx/__config +95 -17
- data/modules/emscripten/system/include/libcxx/__debug +25 -4
- data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
- data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
- data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
- data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
- data/modules/emscripten/system/include/libcxx/__locale +21 -19
- data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
- data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
- data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
- data/modules/emscripten/system/include/libcxx/__tree +35 -26
- data/modules/emscripten/system/include/libcxx/__tuple +15 -15
- data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
- data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
- data/modules/emscripten/system/include/libcxx/algorithm +121 -110
- data/modules/emscripten/system/include/libcxx/array +15 -15
- data/modules/emscripten/system/include/libcxx/bitset +4 -4
- data/modules/emscripten/system/include/libcxx/chrono +51 -17
- data/modules/emscripten/system/include/libcxx/cmath +25 -23
- data/modules/emscripten/system/include/libcxx/codecvt +21 -18
- data/modules/emscripten/system/include/libcxx/complex +48 -7
- data/modules/emscripten/system/include/libcxx/cstddef +1 -1
- data/modules/emscripten/system/include/libcxx/cstdio +8 -1
- data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
- data/modules/emscripten/system/include/libcxx/cwchar +1 -1
- data/modules/emscripten/system/include/libcxx/deque +26 -12
- data/modules/emscripten/system/include/libcxx/dynarray +311 -0
- data/modules/emscripten/system/include/libcxx/exception +4 -4
- data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
- data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
- data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
- data/modules/emscripten/system/include/libcxx/forward_list +33 -7
- data/modules/emscripten/system/include/libcxx/fstream +4 -4
- data/modules/emscripten/system/include/libcxx/functional +200 -170
- data/modules/emscripten/system/include/libcxx/future +83 -39
- data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
- data/modules/emscripten/system/include/libcxx/iomanip +147 -0
- data/modules/emscripten/system/include/libcxx/ios +24 -16
- data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
- data/modules/emscripten/system/include/libcxx/istream +13 -8
- data/modules/emscripten/system/include/libcxx/iterator +108 -417
- data/modules/emscripten/system/include/libcxx/limits +8 -4
- data/modules/emscripten/system/include/libcxx/list +28 -8
- data/modules/emscripten/system/include/libcxx/locale +153 -390
- data/modules/emscripten/system/include/libcxx/map +280 -100
- data/modules/emscripten/system/include/libcxx/memory +49 -97
- data/modules/emscripten/system/include/libcxx/mutex +2 -2
- data/modules/emscripten/system/include/libcxx/new +43 -14
- data/modules/emscripten/system/include/libcxx/numeric +2 -2
- data/modules/emscripten/system/include/libcxx/optional +697 -0
- data/modules/emscripten/system/include/libcxx/ostream +17 -8
- data/modules/emscripten/system/include/libcxx/queue +5 -5
- data/modules/emscripten/system/include/libcxx/random +53 -51
- data/modules/emscripten/system/include/libcxx/ratio +11 -11
- data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/include/libcxx/regex +23 -20
- data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
- data/modules/emscripten/system/include/libcxx/set +166 -2
- data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
- data/modules/emscripten/system/include/libcxx/sstream +4 -4
- data/modules/emscripten/system/include/libcxx/stack +3 -3
- data/modules/emscripten/system/include/libcxx/streambuf +5 -5
- data/modules/emscripten/system/include/libcxx/string +372 -324
- data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
- data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
- data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
- data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
- data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
- data/modules/emscripten/system/include/libcxx/system_error +14 -8
- data/modules/emscripten/system/include/libcxx/thread +7 -8
- data/modules/emscripten/system/include/libcxx/tuple +29 -88
- data/modules/emscripten/system/include/libcxx/type_traits +253 -209
- data/modules/emscripten/system/include/libcxx/typeindex +3 -3
- data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
- data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
- data/modules/emscripten/system/include/libcxx/utility +20 -20
- data/modules/emscripten/system/include/libcxx/valarray +23 -23
- data/modules/emscripten/system/include/libcxx/vector +114 -91
- data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
- data/modules/emscripten/system/lib/libcextra.symbols +7 -0
- data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
- data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
- data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
- data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
- data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
- data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
- data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
- data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
- data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
- data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
- data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
- data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
- data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
- data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
- data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
- data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
- data/modules/emscripten/system/lib/libcxx/symbols +187 -168
- data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
- data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
- data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
- data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
- data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
- data/modules/emscripten/tools/cache.py +5 -7
- data/modules/emscripten/tools/cache.pyc +0 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
- data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
- data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
- data/modules/emscripten/tools/file_packager.py +93 -50
- data/modules/emscripten/tools/js-optimizer.js +98 -48
- data/modules/emscripten/tools/js_optimizer.py +4 -4
- data/modules/emscripten/tools/js_optimizer.pyc +0 -0
- data/modules/emscripten/tools/jsrun.py +1 -1
- data/modules/emscripten/tools/jsrun.pyc +0 -0
- data/modules/emscripten/tools/response_file.py +6 -0
- data/modules/emscripten/tools/response_file.pyc +0 -0
- data/modules/emscripten/tools/settings_template_readonly.py +2 -0
- data/modules/emscripten/tools/shared.py +88 -34
- data/modules/emscripten/tools/shared.pyc +0 -0
- data/modules/emscripten/tools/split.py +21 -13
- data/modules/mruby/build_config.rb +7 -1
- data/modules/mruby/doc/compile/README.md +5 -9
- data/modules/mruby/include/mrbconf.h +5 -2
- data/modules/mruby/include/mruby/array.h +1 -0
- data/modules/mruby/include/mruby/compile.h +2 -4
- data/modules/mruby/include/mruby/dump.h +7 -16
- data/modules/mruby/include/mruby/hash.h +1 -1
- data/modules/mruby/include/mruby/irep.h +14 -2
- data/modules/mruby/include/mruby/khash.h +8 -7
- data/modules/mruby/include/mruby/string.h +1 -0
- data/modules/mruby/include/mruby/value.h +5 -2
- data/modules/mruby/include/mruby.h +12 -13
- data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
- data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
- data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
- data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
- data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
- data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
- data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
- data/modules/mruby/mrblib/numeric.rb +99 -33
- data/modules/mruby/src/array.c +11 -4
- data/modules/mruby/src/backtrace.c +2 -2
- data/modules/mruby/src/class.c +49 -30
- data/modules/mruby/src/codegen.c +131 -79
- data/modules/mruby/src/debug.c +1 -1
- data/modules/mruby/src/dump.c +213 -163
- data/modules/mruby/src/error.c +17 -17
- data/modules/mruby/src/error.h +1 -1
- data/modules/mruby/src/etc.c +10 -0
- data/modules/mruby/src/gc.c +35 -17
- data/modules/mruby/src/hash.c +5 -5
- data/modules/mruby/src/kernel.c +36 -14
- data/modules/mruby/src/load.c +238 -296
- data/modules/mruby/src/numeric.c +18 -98
- data/modules/mruby/src/object.c +3 -5
- data/modules/mruby/src/parse.y +63 -56
- data/modules/mruby/src/proc.c +8 -5
- data/modules/mruby/src/re.h +0 -1
- data/modules/mruby/src/state.c +65 -27
- data/modules/mruby/src/string.c +3 -31
- data/modules/mruby/src/symbol.c +3 -3
- data/modules/mruby/src/variable.c +12 -5
- data/modules/mruby/src/vm.c +90 -72
- data/modules/mruby/tasks/mruby_build.rake +10 -1
- data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
- data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
- data/modules/mruby/test/driver.c +3 -3
- data/modules/mruby/test/t/array.rb +5 -5
- data/modules/mruby/test/t/class.rb +14 -1
- data/modules/mruby/test/t/kernel.rb +4 -0
- data/modules/mruby/test/t/module.rb +4 -4
- data/modules/mruby/test/t/nameerror.rb +1 -1
- data/modules/mruby/tools/mrbc/mrbc.c +23 -17
- data/modules/mruby/travis_config.rb +10 -1
- metadata +28 -5
- data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
data/modules/mruby/src/vm.c
CHANGED
@@ -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
|
-
|
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 =
|
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 =
|
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 =
|
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
|
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
|
-
|
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,
|
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)] =
|
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
|
-
|
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
|
-
|
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
|
-
|
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,
|
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
|
-
|
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
|
-
|
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 =
|
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 =
|
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
|
-
|
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,
|
1265
|
-
mrb_obj_iv_ifnone(mrb, mrb->exc,
|
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
|
-
|
1283
|
-
|
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 =
|
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 =
|
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
|
-
|
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), ®s[GETARG_B(i)]);
|
1850
|
-
|
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
|
-
|
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
|
-
|
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)] =
|
1937
|
-
|
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
|
-
|
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,
|
1980
|
+
p = mrb_closure_new(mrb, irep->reps[GETARG_b(i)]);
|
1970
1981
|
}
|
1971
1982
|
else {
|
1972
|
-
p = mrb_proc_new(mrb,
|
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
|
-
|
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
|
-
|
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
|
-
|
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,
|
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
|
-
|
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
|
-
|
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
|
-
|
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 =
|
2147
|
+
exc = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, msg);
|
2136
2148
|
}
|
2137
2149
|
else {
|
2138
|
-
exc =
|
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[
|
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.
|
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(:
|
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)]
|
data/modules/mruby/test/driver.c
CHANGED
@@ -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,
|
38
|
-
mrb_value kill_test = mrb_gv_get(mrb,
|
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,
|
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
|
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
|
-
|
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
|
@@ -276,16 +276,16 @@ end
|
|
276
276
|
assert('Module.constants', '15.2.2.4.24') do
|
277
277
|
$n = []
|
278
278
|
module TestA
|
279
|
-
|
279
|
+
C = 1
|
280
280
|
end
|
281
281
|
class TestB
|
282
282
|
include TestA
|
283
|
-
|
283
|
+
C2 = 1
|
284
284
|
$n = constants.sort
|
285
285
|
end
|
286
286
|
|
287
|
-
assert_equal [ :
|
288
|
-
assert_equal [ :
|
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
|