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