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/error.c
CHANGED
@@ -25,7 +25,7 @@ mrb_exc_new(mrb_state *mrb, struct RClass *c, const char *ptr, long len)
|
|
25
25
|
}
|
26
26
|
|
27
27
|
mrb_value
|
28
|
-
|
28
|
+
mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str)
|
29
29
|
{
|
30
30
|
str = mrb_str_to_str(mrb, str);
|
31
31
|
return mrb_funcall(mrb, mrb_obj_value(c), "new", 1, str);
|
@@ -45,7 +45,7 @@ exc_initialize(mrb_state *mrb, mrb_value exc)
|
|
45
45
|
mrb_value mesg;
|
46
46
|
|
47
47
|
if (mrb_get_args(mrb, "|o", &mesg) == 1) {
|
48
|
-
mrb_iv_set(mrb, exc,
|
48
|
+
mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), mesg);
|
49
49
|
}
|
50
50
|
return exc;
|
51
51
|
}
|
@@ -74,7 +74,7 @@ exc_exception(mrb_state *mrb, mrb_value self)
|
|
74
74
|
if (argc == 0) return self;
|
75
75
|
if (mrb_obj_equal(mrb, self, a)) return self;
|
76
76
|
exc = mrb_obj_clone(mrb, self);
|
77
|
-
mrb_iv_set(mrb, exc,
|
77
|
+
mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "mesg"), a);
|
78
78
|
|
79
79
|
return exc;
|
80
80
|
}
|
@@ -90,7 +90,7 @@ exc_exception(mrb_state *mrb, mrb_value self)
|
|
90
90
|
static mrb_value
|
91
91
|
exc_to_s(mrb_state *mrb, mrb_value exc)
|
92
92
|
{
|
93
|
-
mrb_value mesg = mrb_attr_get(mrb, exc,
|
93
|
+
mrb_value mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
|
94
94
|
|
95
95
|
if (mrb_nil_p(mesg)) return mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, exc));
|
96
96
|
return mesg;
|
@@ -124,9 +124,9 @@ exc_inspect(mrb_state *mrb, mrb_value exc)
|
|
124
124
|
{
|
125
125
|
mrb_value str, mesg, file, line;
|
126
126
|
|
127
|
-
mesg = mrb_attr_get(mrb, exc,
|
128
|
-
file = mrb_attr_get(mrb, exc,
|
129
|
-
line = mrb_attr_get(mrb, exc,
|
127
|
+
mesg = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "mesg"));
|
128
|
+
file = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "file"));
|
129
|
+
line = mrb_attr_get(mrb, exc, mrb_intern_lit(mrb, "line"));
|
130
130
|
|
131
131
|
if (!mrb_nil_p(file) && !mrb_nil_p(line)) {
|
132
132
|
str = file;
|
@@ -163,7 +163,7 @@ exc_equal(mrb_state *mrb, mrb_value exc)
|
|
163
163
|
mrb_value obj;
|
164
164
|
mrb_value mesg;
|
165
165
|
mrb_bool equal_p;
|
166
|
-
mrb_sym id_mesg =
|
166
|
+
mrb_sym id_mesg = mrb_intern_lit(mrb, "mesg");
|
167
167
|
|
168
168
|
mrb_get_args(mrb, "o", &obj);
|
169
169
|
if (mrb_obj_equal(mrb, exc, obj)) {
|
@@ -171,7 +171,7 @@ exc_equal(mrb_state *mrb, mrb_value exc)
|
|
171
171
|
}
|
172
172
|
else {
|
173
173
|
if (mrb_obj_class(mrb, exc) != mrb_obj_class(mrb, obj)) {
|
174
|
-
if (mrb_respond_to(mrb, obj,
|
174
|
+
if (mrb_respond_to(mrb, obj, mrb_intern_lit(mrb, "message"))) {
|
175
175
|
mesg = mrb_funcall(mrb, obj, "message", 0);
|
176
176
|
}
|
177
177
|
else
|
@@ -193,7 +193,7 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
|
|
193
193
|
mrb_callinfo *ci = mrb->c->ci;
|
194
194
|
mrb_code *pc = ci->pc;
|
195
195
|
|
196
|
-
mrb_obj_iv_set(mrb, exc,
|
196
|
+
mrb_obj_iv_set(mrb, exc, mrb_intern_lit(mrb, "ciidx"), mrb_fixnum_value(ci - mrb->c->cibase));
|
197
197
|
while (ci >= mrb->c->cibase) {
|
198
198
|
mrb_code *err = ci->err;
|
199
199
|
|
@@ -204,8 +204,8 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
|
|
204
204
|
int32_t const line = mrb_debug_get_line(irep, err - irep->iseq);
|
205
205
|
char const* file = mrb_debug_get_filename(irep, err - irep->iseq);
|
206
206
|
if (line != -1 && file) {
|
207
|
-
mrb_obj_iv_set(mrb, exc,
|
208
|
-
mrb_obj_iv_set(mrb, exc,
|
207
|
+
mrb_obj_iv_set(mrb, exc, mrb_intern_lit(mrb, "file"), mrb_str_new_cstr(mrb, file));
|
208
|
+
mrb_obj_iv_set(mrb, exc, mrb_intern_lit(mrb, "line"), mrb_fixnum_value(line));
|
209
209
|
return;
|
210
210
|
}
|
211
211
|
}
|
@@ -231,7 +231,7 @@ mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
|
|
231
231
|
{
|
232
232
|
mrb_value mesg;
|
233
233
|
mesg = mrb_str_new_cstr(mrb, msg);
|
234
|
-
mrb_exc_raise(mrb,
|
234
|
+
mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mesg));
|
235
235
|
}
|
236
236
|
|
237
237
|
mrb_value
|
@@ -297,7 +297,7 @@ mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
|
|
297
297
|
va_start(args, fmt);
|
298
298
|
mesg = mrb_vformat(mrb, fmt, args);
|
299
299
|
va_end(args);
|
300
|
-
mrb_exc_raise(mrb,
|
300
|
+
mrb_exc_raise(mrb, mrb_exc_new_str(mrb, c, mesg));
|
301
301
|
}
|
302
302
|
|
303
303
|
void
|
@@ -350,7 +350,7 @@ mrb_bug(mrb_state *mrb, const char *fmt, ...)
|
|
350
350
|
int
|
351
351
|
sysexit_status(mrb_state *mrb, mrb_value err)
|
352
352
|
{
|
353
|
-
mrb_value st = mrb_iv_get(mrb, err,
|
353
|
+
mrb_value st = mrb_iv_get(mrb, err, mrb_intern_lit(mrb, "status"));
|
354
354
|
return mrb_fixnum(st);
|
355
355
|
}
|
356
356
|
|
@@ -376,7 +376,7 @@ make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr)
|
|
376
376
|
if (isstr) {
|
377
377
|
mesg = mrb_check_string_type(mrb, argv[0]);
|
378
378
|
if (!mrb_nil_p(mesg)) {
|
379
|
-
mesg =
|
379
|
+
mesg = mrb_exc_new_str(mrb, E_RUNTIME_ERROR, mesg);
|
380
380
|
break;
|
381
381
|
}
|
382
382
|
}
|
@@ -388,7 +388,7 @@ make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr)
|
|
388
388
|
n = 1;
|
389
389
|
exception_call:
|
390
390
|
{
|
391
|
-
mrb_sym exc =
|
391
|
+
mrb_sym exc = mrb_intern_lit(mrb, "exception");
|
392
392
|
if (mrb_respond_to(mrb, argv[0], exc)) {
|
393
393
|
mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
|
394
394
|
}
|
data/modules/mruby/src/error.h
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
void mrb_sys_fail(mrb_state *mrb, const char *mesg);
|
11
11
|
int sysexit_status(mrb_state *mrb, mrb_value err);
|
12
|
-
mrb_value
|
12
|
+
mrb_value mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str);
|
13
13
|
mrb_value make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr);
|
14
14
|
mrb_value mrb_make_exception(mrb_state *mrb, int argc, mrb_value *argv);
|
15
15
|
mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
|
data/modules/mruby/src/etc.c
CHANGED
@@ -198,6 +198,16 @@ mrb_float_value(mrb_state *mrb, mrb_float f)
|
|
198
198
|
return v;
|
199
199
|
}
|
200
200
|
|
201
|
+
mrb_value
|
202
|
+
mrb_float_pool(mrb_state *mrb, mrb_float f)
|
203
|
+
{
|
204
|
+
struct RFloat *nf = (struct RFloat *)mrb_malloc(mrb, sizeof(struct RFloat));
|
205
|
+
nf->tt = MRB_TT_FLOAT;
|
206
|
+
nf->c = mrb->float_class;
|
207
|
+
nf->f = f;
|
208
|
+
return mrb_obj_value(nf);
|
209
|
+
}
|
210
|
+
|
201
211
|
mrb_value
|
202
212
|
mrb_cptr_value(mrb_state *mrb, void *p)
|
203
213
|
{
|
data/modules/mruby/src/gc.c
CHANGED
@@ -370,10 +370,16 @@ mrb_free_heap(mrb_state *mrb)
|
|
370
370
|
static void
|
371
371
|
gc_protect(mrb_state *mrb, struct RBasic *p)
|
372
372
|
{
|
373
|
-
if (mrb->arena_idx >=
|
373
|
+
if (mrb->arena_idx >= MRB_GC_ARENA_SIZE) {
|
374
|
+
#ifdef MRB_GC_FIXED_ARENA
|
374
375
|
/* arena overflow error */
|
375
|
-
mrb->arena_idx =
|
376
|
+
mrb->arena_idx = MRB_GC_ARENA_SIZE - 4; /* force room in arena */
|
376
377
|
mrb_raise(mrb, E_RUNTIME_ERROR, "arena overflow error");
|
378
|
+
#else
|
379
|
+
/* extend arena */
|
380
|
+
mrb->arena_capa *= 1.5;
|
381
|
+
mrb->arena = (struct RBasic**)mrb_realloc(mrb, mrb->arena, sizeof(struct RBasic*)*mrb->arena_capa);
|
382
|
+
#endif
|
377
383
|
}
|
378
384
|
mrb->arena[mrb->arena_idx++] = p;
|
379
385
|
}
|
@@ -619,7 +625,8 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
|
|
619
625
|
{
|
620
626
|
struct mrb_context *c = ((struct RFiber*)obj)->cxt;
|
621
627
|
|
622
|
-
|
628
|
+
if (c != mrb->root_c)
|
629
|
+
mrb_free_context(mrb, c);
|
623
630
|
}
|
624
631
|
break;
|
625
632
|
|
@@ -639,6 +646,16 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
|
|
639
646
|
mrb_gc_free_str(mrb, (struct RString*)obj);
|
640
647
|
break;
|
641
648
|
|
649
|
+
case MRB_TT_PROC:
|
650
|
+
{
|
651
|
+
struct RProc *p = (struct RProc*)obj;
|
652
|
+
|
653
|
+
if (!MRB_PROC_CFUNC_P(p) && p->body.irep) {
|
654
|
+
mrb_irep_decref(mrb, p->body.irep);
|
655
|
+
}
|
656
|
+
}
|
657
|
+
break;
|
658
|
+
|
642
659
|
case MRB_TT_RANGE:
|
643
660
|
mrb_free(mrb, ((struct RRange*)obj)->edges);
|
644
661
|
break;
|
@@ -662,7 +679,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
|
|
662
679
|
static void
|
663
680
|
root_scan_phase(mrb_state *mrb)
|
664
681
|
{
|
665
|
-
size_t i, e
|
682
|
+
size_t i, e;
|
666
683
|
|
667
684
|
if (!is_minor_gc(mrb)) {
|
668
685
|
mrb->gray_list = NULL;
|
@@ -685,19 +702,6 @@ root_scan_phase(mrb_state *mrb)
|
|
685
702
|
if (mrb->root_c != mrb->c) {
|
686
703
|
mark_context(mrb, mrb->c);
|
687
704
|
}
|
688
|
-
|
689
|
-
/* mark irep pool */
|
690
|
-
if (mrb->irep) {
|
691
|
-
size_t len = mrb->irep_len;
|
692
|
-
if (len > mrb->irep_capa) len = mrb->irep_capa;
|
693
|
-
for (i=0; i<len; i++) {
|
694
|
-
mrb_irep *irep = mrb->irep[i];
|
695
|
-
if (!irep) continue;
|
696
|
-
for (j=0; j<irep->plen; j++) {
|
697
|
-
mrb_gc_mark_value(mrb, irep->pool[j]);
|
698
|
-
}
|
699
|
-
}
|
700
|
-
}
|
701
705
|
}
|
702
706
|
|
703
707
|
static size_t
|
@@ -1043,6 +1047,20 @@ mrb_gc_arena_save(mrb_state *mrb)
|
|
1043
1047
|
void
|
1044
1048
|
mrb_gc_arena_restore(mrb_state *mrb, int idx)
|
1045
1049
|
{
|
1050
|
+
#ifndef MRB_GC_FIXED_ARENA
|
1051
|
+
int capa = mrb->arena_capa;
|
1052
|
+
|
1053
|
+
if (idx < capa / 2) {
|
1054
|
+
capa *= 0.66;
|
1055
|
+
if (capa < MRB_GC_ARENA_SIZE) {
|
1056
|
+
capa = MRB_GC_ARENA_SIZE;
|
1057
|
+
}
|
1058
|
+
if (capa != mrb->arena_capa) {
|
1059
|
+
mrb->arena = (struct RBasic**)mrb_realloc(mrb, mrb->arena, sizeof(struct RBasic*)*capa);
|
1060
|
+
mrb->arena_capa = capa;
|
1061
|
+
}
|
1062
|
+
}
|
1063
|
+
#endif
|
1046
1064
|
mrb->arena_idx = idx;
|
1047
1065
|
}
|
1048
1066
|
|
data/modules/mruby/src/hash.c
CHANGED
@@ -266,7 +266,7 @@ mrb_hash_init_core(mrb_state *mrb, mrb_value hash)
|
|
266
266
|
RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT;
|
267
267
|
ifnone = block;
|
268
268
|
}
|
269
|
-
mrb_iv_set(mrb, hash,
|
269
|
+
mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
|
270
270
|
return hash;
|
271
271
|
}
|
272
272
|
|
@@ -425,7 +425,7 @@ mrb_hash_set_default(mrb_state *mrb, mrb_value hash)
|
|
425
425
|
|
426
426
|
mrb_get_args(mrb, "o", &ifnone);
|
427
427
|
mrb_hash_modify(mrb, hash);
|
428
|
-
mrb_iv_set(mrb, hash,
|
428
|
+
mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
|
429
429
|
RHASH(hash)->flags &= ~(MRB_HASH_PROC_DEFAULT);
|
430
430
|
|
431
431
|
return ifnone;
|
@@ -476,7 +476,7 @@ mrb_hash_set_default_proc(mrb_state *mrb, mrb_value hash)
|
|
476
476
|
|
477
477
|
mrb_get_args(mrb, "o", &ifnone);
|
478
478
|
mrb_hash_modify(mrb, hash);
|
479
|
-
mrb_iv_set(mrb, hash,
|
479
|
+
mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
|
480
480
|
RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT;
|
481
481
|
|
482
482
|
return ifnone;
|
@@ -734,7 +734,7 @@ mrb_hash_replace(mrb_state *mrb, mrb_value hash)
|
|
734
734
|
else {
|
735
735
|
ifnone = RHASH_IFNONE(hash2);
|
736
736
|
}
|
737
|
-
mrb_iv_set(mrb, hash,
|
737
|
+
mrb_iv_set(mrb, hash, mrb_intern_lit(mrb, "ifnone"), ifnone);
|
738
738
|
|
739
739
|
return hash;
|
740
740
|
}
|
@@ -1004,7 +1004,7 @@ hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, int eql)
|
|
1004
1004
|
|
1005
1005
|
if (mrb_obj_equal(mrb, hash1, hash2)) return mrb_true_value();
|
1006
1006
|
if (!mrb_hash_p(hash2)) {
|
1007
|
-
if (!mrb_respond_to(mrb, hash2,
|
1007
|
+
if (!mrb_respond_to(mrb, hash2, mrb_intern_lit(mrb, "to_hash"))) {
|
1008
1008
|
return mrb_false_value();
|
1009
1009
|
}
|
1010
1010
|
if (eql)
|
data/modules/mruby/src/kernel.c
CHANGED
@@ -29,7 +29,7 @@ typedef enum {
|
|
29
29
|
mrb_bool
|
30
30
|
mrb_obj_basic_to_s_p(mrb_state *mrb, mrb_value obj)
|
31
31
|
{
|
32
|
-
struct RProc *me = mrb_method_search(mrb, mrb_class(mrb, obj),
|
32
|
+
struct RProc *me = mrb_method_search(mrb, mrb_class(mrb, obj), mrb_intern_lit(mrb, "to_s"));
|
33
33
|
if (me && MRB_PROC_CFUNC_P(me) && (me->body.func == mrb_any_to_s))
|
34
34
|
return TRUE;
|
35
35
|
return FALSE;
|
@@ -280,7 +280,7 @@ mrb_singleton_class_clone(mrb_state *mrb, mrb_value obj)
|
|
280
280
|
clone->super = klass->super;
|
281
281
|
if (klass->iv) {
|
282
282
|
mrb_iv_copy(mrb, mrb_obj_value(clone), mrb_obj_value(klass));
|
283
|
-
mrb_obj_iv_set(mrb, (struct RObject*)clone,
|
283
|
+
mrb_obj_iv_set(mrb, (struct RObject*)clone, mrb_intern_lit(mrb, "__attached__"), obj);
|
284
284
|
}
|
285
285
|
if (klass->mt) {
|
286
286
|
clone->mt = kh_copy(mt, mrb, klass->mt);
|
@@ -542,7 +542,7 @@ obj_is_instance_of(mrb_state *mrb, mrb_value self)
|
|
542
542
|
mrb_value arg;
|
543
543
|
mrb_bool instance_of_p;
|
544
544
|
|
545
|
-
mrb_get_args(mrb, "
|
545
|
+
mrb_get_args(mrb, "C", &arg);
|
546
546
|
instance_of_p = mrb_obj_is_instance_of(mrb, self, mrb_class_ptr(arg));
|
547
547
|
|
548
548
|
return mrb_bool_value(instance_of_p);
|
@@ -715,14 +715,17 @@ mrb_obj_is_kind_of_m(mrb_state *mrb, mrb_value self)
|
|
715
715
|
mrb_value arg;
|
716
716
|
mrb_bool kind_of_p;
|
717
717
|
|
718
|
-
mrb_get_args(mrb, "
|
718
|
+
mrb_get_args(mrb, "C", &arg);
|
719
719
|
kind_of_p = mrb_obj_is_kind_of(mrb, self, mrb_class_ptr(arg));
|
720
720
|
|
721
721
|
return mrb_bool_value(kind_of_p);
|
722
722
|
}
|
723
723
|
|
724
|
+
KHASH_DECLARE(st, mrb_sym, char, 0)
|
725
|
+
KHASH_DEFINE(st, mrb_sym, char, 0, kh_int_hash_func, kh_int_hash_equal)
|
726
|
+
|
724
727
|
static void
|
725
|
-
method_entry_loop(mrb_state *mrb, struct RClass* klass,
|
728
|
+
method_entry_loop(mrb_state *mrb, struct RClass* klass, khash_t(st)* set)
|
726
729
|
{
|
727
730
|
khint_t i;
|
728
731
|
|
@@ -730,7 +733,7 @@ method_entry_loop(mrb_state *mrb, struct RClass* klass, mrb_value ary)
|
|
730
733
|
if (!h) return;
|
731
734
|
for (i=0;i<kh_end(h);i++) {
|
732
735
|
if (kh_exist(h, i)) {
|
733
|
-
|
736
|
+
kh_put(st, set, kh_key(h,i));
|
734
737
|
}
|
735
738
|
}
|
736
739
|
}
|
@@ -738,13 +741,14 @@ method_entry_loop(mrb_state *mrb, struct RClass* klass, mrb_value ary)
|
|
738
741
|
mrb_value
|
739
742
|
class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass* klass, int obj)
|
740
743
|
{
|
744
|
+
khint_t i;
|
741
745
|
mrb_value ary;
|
742
746
|
struct RClass* oldklass;
|
747
|
+
khash_t(st)* set = kh_init(st, mrb);
|
743
748
|
|
744
|
-
ary = mrb_ary_new(mrb);
|
745
749
|
oldklass = 0;
|
746
750
|
while (klass && (klass != oldklass)) {
|
747
|
-
method_entry_loop(mrb, klass,
|
751
|
+
method_entry_loop(mrb, klass, set);
|
748
752
|
if ((klass->tt == MRB_TT_ICLASS) ||
|
749
753
|
(klass->tt == MRB_TT_SCLASS)) {
|
750
754
|
}
|
@@ -755,28 +759,46 @@ class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass* klass,
|
|
755
759
|
klass = klass->super;
|
756
760
|
}
|
757
761
|
|
762
|
+
ary = mrb_ary_new(mrb);
|
763
|
+
for (i=0;i<kh_end(set);i++) {
|
764
|
+
if (kh_exist(set, i)) {
|
765
|
+
mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set,i)));
|
766
|
+
}
|
767
|
+
}
|
768
|
+
kh_destroy(st, set);
|
769
|
+
|
758
770
|
return ary;
|
759
771
|
}
|
760
772
|
|
761
773
|
mrb_value
|
762
774
|
mrb_obj_singleton_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj)
|
763
775
|
{
|
776
|
+
khint_t i;
|
764
777
|
mrb_value ary;
|
765
778
|
struct RClass* klass;
|
779
|
+
khash_t(st)* set = kh_init(st, mrb);
|
766
780
|
|
767
781
|
klass = mrb_class(mrb, obj);
|
768
|
-
|
782
|
+
|
769
783
|
if (klass && (klass->tt == MRB_TT_SCLASS)) {
|
770
|
-
method_entry_loop(mrb, klass,
|
784
|
+
method_entry_loop(mrb, klass, set);
|
771
785
|
klass = klass->super;
|
772
786
|
}
|
773
787
|
if (recur) {
|
774
788
|
while (klass && ((klass->tt == MRB_TT_SCLASS) || (klass->tt == MRB_TT_ICLASS))) {
|
775
|
-
method_entry_loop(mrb, klass,
|
789
|
+
method_entry_loop(mrb, klass, set);
|
776
790
|
klass = klass->super;
|
777
791
|
}
|
778
792
|
}
|
779
793
|
|
794
|
+
ary = mrb_ary_new(mrb);
|
795
|
+
for (i=0;i<kh_end(set);i++) {
|
796
|
+
if (kh_exist(set, i)) {
|
797
|
+
mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set,i)));
|
798
|
+
}
|
799
|
+
}
|
800
|
+
kh_destroy(st, set);
|
801
|
+
|
780
802
|
return ary;
|
781
803
|
}
|
782
804
|
|
@@ -922,7 +944,7 @@ mrb_f_raise(mrb_state *mrb, mrb_value self)
|
|
922
944
|
/* fall through */
|
923
945
|
default:
|
924
946
|
exc = mrb_make_exception(mrb, argc, a);
|
925
|
-
mrb_obj_iv_set(mrb, mrb_obj_ptr(exc),
|
947
|
+
mrb_obj_iv_set(mrb, mrb_obj_ptr(exc), mrb_intern_lit(mrb, "lastpc"), mrb_cptr_value(mrb, mrb->c->ci->pc));
|
926
948
|
mrb_exc_raise(mrb, exc);
|
927
949
|
break;
|
928
950
|
}
|
@@ -1027,7 +1049,7 @@ obj_respond_to(mrb_state *mrb, mrb_value self)
|
|
1027
1049
|
}
|
1028
1050
|
|
1029
1051
|
if (!respond_to_p) {
|
1030
|
-
rtm_id =
|
1052
|
+
rtm_id = mrb_intern_lit(mrb, "respond_to_missing?");
|
1031
1053
|
if (basic_obj_respond_to(mrb, self, rtm_id, !mrb_test(priv))) {
|
1032
1054
|
return mrb_funcall_argv(mrb, self, rtm_id, argc, argv);
|
1033
1055
|
}
|
@@ -1129,5 +1151,5 @@ mrb_init_kernel(mrb_state *mrb)
|
|
1129
1151
|
mrb_define_method(mrb, krn, "to_s", mrb_any_to_s, MRB_ARGS_NONE()); /* 15.3.1.3.46 */
|
1130
1152
|
|
1131
1153
|
mrb_include_module(mrb, mrb->object_class, mrb->kernel_module);
|
1132
|
-
mrb_alias_method(mrb, mrb->module_class,
|
1154
|
+
mrb_alias_method(mrb, mrb->module_class, mrb_intern_lit(mrb, "dup"), mrb_intern_lit(mrb, "clone"));
|
1133
1155
|
}
|