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/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
|
}
|