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
@@ -246,7 +246,7 @@ var EXITSTATUS = 0;
|
|
246
246
|
var undef = 0;
|
247
247
|
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
|
248
248
|
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
|
249
|
-
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD;
|
249
|
+
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
|
250
250
|
#if USE_TYPED_ARRAYS == 2
|
251
251
|
var tempI64, tempI64b;
|
252
252
|
var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
|
@@ -585,16 +585,16 @@ function UTF16ToString(ptr) {
|
|
585
585
|
}
|
586
586
|
Module['UTF16ToString'] = UTF16ToString;
|
587
587
|
|
588
|
-
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
|
588
|
+
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
|
589
589
|
// null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
|
590
590
|
function stringToUTF16(str, outPtr) {
|
591
591
|
for(var i = 0; i < str.length; ++i) {
|
592
592
|
// charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
|
593
593
|
var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
|
594
|
-
{{{ makeSetValue('outPtr', 'i*2', 'codeUnit', 'i16') }}}
|
594
|
+
{{{ makeSetValue('outPtr', 'i*2', 'codeUnit', 'i16') }}};
|
595
595
|
}
|
596
596
|
// Null-terminate the pointer to the HEAP.
|
597
|
-
{{{ makeSetValue('outPtr', 'str.length*2', 0, 'i16') }}}
|
597
|
+
{{{ makeSetValue('outPtr', 'str.length*2', 0, 'i16') }}};
|
598
598
|
}
|
599
599
|
Module['stringToUTF16'] = stringToUTF16;
|
600
600
|
|
@@ -620,7 +620,7 @@ function UTF32ToString(ptr) {
|
|
620
620
|
}
|
621
621
|
Module['UTF32ToString'] = UTF32ToString;
|
622
622
|
|
623
|
-
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
|
623
|
+
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
|
624
624
|
// null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
|
625
625
|
// but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string.
|
626
626
|
function stringToUTF32(str, outPtr) {
|
@@ -632,11 +632,11 @@ function stringToUTF32(str, outPtr) {
|
|
632
632
|
var trailSurrogate = str.charCodeAt(++iCodeUnit);
|
633
633
|
codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
|
634
634
|
}
|
635
|
-
{{{ makeSetValue('outPtr', 'iChar*4', 'codeUnit', 'i32') }}}
|
635
|
+
{{{ makeSetValue('outPtr', 'iChar*4', 'codeUnit', 'i32') }}};
|
636
636
|
++iChar;
|
637
637
|
}
|
638
638
|
// Null-terminate the pointer to the HEAP.
|
639
|
-
{{{ makeSetValue('outPtr', 'iChar*4', 0, 'i32') }}}
|
639
|
+
{{{ makeSetValue('outPtr', 'iChar*4', 0, 'i32') }}};
|
640
640
|
}
|
641
641
|
Module['stringToUTF32'] = stringToUTF32;
|
642
642
|
|
@@ -646,6 +646,10 @@ function demangle(func) {
|
|
646
646
|
if (func[0] !== '_') return func;
|
647
647
|
if (func[1] !== '_') return func; // C function
|
648
648
|
if (func[2] !== 'Z') return func;
|
649
|
+
switch (func[3]) {
|
650
|
+
case 'n': return 'operator new()';
|
651
|
+
case 'd': return 'operator delete()';
|
652
|
+
}
|
649
653
|
var i = 3;
|
650
654
|
// params, etc.
|
651
655
|
var basicTypes = {
|
@@ -678,7 +682,7 @@ function demangle(func) {
|
|
678
682
|
var subs = [];
|
679
683
|
function parseNested() {
|
680
684
|
i++;
|
681
|
-
if (func[i] === 'K') i++;
|
685
|
+
if (func[i] === 'K') i++; // ignore const
|
682
686
|
var parts = [];
|
683
687
|
while (func[i] !== 'E') {
|
684
688
|
if (func[i] === 'S') { // substitution
|
@@ -689,6 +693,11 @@ function demangle(func) {
|
|
689
693
|
i = next+1;
|
690
694
|
continue;
|
691
695
|
}
|
696
|
+
if (func[i] === 'C') { // constructor
|
697
|
+
parts.push(parts[parts.length-1]);
|
698
|
+
i += 2;
|
699
|
+
continue;
|
700
|
+
}
|
692
701
|
var size = parseInt(func.substr(i));
|
693
702
|
var pre = size.toString().length;
|
694
703
|
if (!size || !pre) { i--; break; } // counter i++ below us
|
@@ -700,6 +709,7 @@ function demangle(func) {
|
|
700
709
|
i++; // skip E
|
701
710
|
return parts;
|
702
711
|
}
|
712
|
+
var first = true;
|
703
713
|
function parse(rawList, limit, allowVoid) { // main parser
|
704
714
|
limit = limit || Infinity;
|
705
715
|
var ret = '', list = [];
|
@@ -707,21 +717,22 @@ function demangle(func) {
|
|
707
717
|
return '(' + list.join(', ') + ')';
|
708
718
|
}
|
709
719
|
var name;
|
710
|
-
if (func[i]
|
720
|
+
if (func[i] === 'N') {
|
721
|
+
// namespaced N-E
|
722
|
+
name = parseNested().join('::');
|
723
|
+
limit--;
|
724
|
+
if (limit === 0) return rawList ? [name] : name;
|
725
|
+
} else {
|
711
726
|
// not namespaced
|
712
|
-
if (func[i] === 'K') i++;
|
727
|
+
if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
|
713
728
|
var size = parseInt(func.substr(i));
|
714
729
|
if (size) {
|
715
730
|
var pre = size.toString().length;
|
716
731
|
name = func.substr(i + pre, size);
|
717
732
|
i += pre + size;
|
718
733
|
}
|
719
|
-
} else {
|
720
|
-
// namespaced N-E
|
721
|
-
name = parseNested().join('::');
|
722
|
-
limit--;
|
723
|
-
if (limit === 0) return rawList ? [name] : name;
|
724
734
|
}
|
735
|
+
first = false;
|
725
736
|
if (func[i] === 'I') {
|
726
737
|
i++;
|
727
738
|
var iList = parse(true);
|
@@ -1032,7 +1043,7 @@ function writeStringToMemory(string, buffer, dontAddNull) {
|
|
1032
1043
|
var i = 0;
|
1033
1044
|
while (i < array.length) {
|
1034
1045
|
var chr = array[i];
|
1035
|
-
{{{ makeSetValue('buffer', 'i', 'chr', 'i8') }}}
|
1046
|
+
{{{ makeSetValue('buffer', 'i', 'chr', 'i8') }}};
|
1036
1047
|
i = i + 1;
|
1037
1048
|
}
|
1038
1049
|
}
|
@@ -1050,9 +1061,9 @@ function writeAsciiToMemory(str, buffer, dontAddNull) {
|
|
1050
1061
|
#if ASSERTIONS
|
1051
1062
|
assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);
|
1052
1063
|
#endif
|
1053
|
-
{{{ makeSetValue('buffer', 'i', 'str.charCodeAt(i)', 'i8') }}}
|
1064
|
+
{{{ makeSetValue('buffer', 'i', 'str.charCodeAt(i)', 'i8') }}};
|
1054
1065
|
}
|
1055
|
-
if (!dontAddNull) {{{ makeSetValue('buffer', 'str.length', 0, 'i8') }}}
|
1066
|
+
if (!dontAddNull) {{{ makeSetValue('buffer', 'str.length', 0, 'i8') }}};
|
1056
1067
|
}
|
1057
1068
|
Module['writeAsciiToMemory'] = writeAsciiToMemory;
|
1058
1069
|
|
@@ -1060,7 +1071,7 @@ Module['writeAsciiToMemory'] = writeAsciiToMemory;
|
|
1060
1071
|
{{{ reSign }}}
|
1061
1072
|
|
1062
1073
|
#if PRECISE_I32_MUL
|
1063
|
-
if (!Math['imul']) Math['imul'] = function(a, b) {
|
1074
|
+
if (!Math['imul']) Math['imul'] = function imul(a, b) {
|
1064
1075
|
var ah = a >>> 16;
|
1065
1076
|
var al = a & 0xffff;
|
1066
1077
|
var bh = b >>> 16;
|
@@ -1068,17 +1079,22 @@ if (!Math['imul']) Math['imul'] = function(a, b) {
|
|
1068
1079
|
return (al*bl + ((ah*bl + al*bh) << 16))|0;
|
1069
1080
|
};
|
1070
1081
|
#else
|
1071
|
-
Math['imul'] = function(a, b) {
|
1082
|
+
Math['imul'] = function imul(a, b) {
|
1072
1083
|
return (a*b)|0; // fast but imprecise
|
1073
1084
|
};
|
1074
1085
|
#endif
|
1075
1086
|
Math.imul = Math['imul'];
|
1076
1087
|
|
1077
|
-
#if
|
1078
|
-
if
|
1079
|
-
|
1080
|
-
|
1081
|
-
Math
|
1088
|
+
#if PRECISE_F32
|
1089
|
+
#if PRECISE_F32 == 1
|
1090
|
+
if (!Math['fround']) {
|
1091
|
+
var froundBuffer = new Float32Array(1);
|
1092
|
+
Math['fround'] = function(x) { froundBuffer[0] = x; return froundBuffer[0] };
|
1093
|
+
}
|
1094
|
+
#else // 2
|
1095
|
+
if (!Math['fround']) Math['fround'] = function(x) { return x };
|
1096
|
+
#endif
|
1097
|
+
Math.fround = Math['fround'];
|
1082
1098
|
#endif
|
1083
1099
|
|
1084
1100
|
var Math_abs = Math.abs;
|
@@ -1096,7 +1112,7 @@ var Math_ceil = Math.ceil;
|
|
1096
1112
|
var Math_floor = Math.floor;
|
1097
1113
|
var Math_pow = Math.pow;
|
1098
1114
|
var Math_imul = Math.imul;
|
1099
|
-
var
|
1115
|
+
var Math_fround = Math.fround;
|
1100
1116
|
var Math_min = Math.min;
|
1101
1117
|
|
1102
1118
|
// A counter of dependencies for calling run(). If we need to
|
@@ -1107,19 +1123,21 @@ var Math_min = Math.min;
|
|
1107
1123
|
// it happens right before run - run will be postponed until
|
1108
1124
|
// the dependencies are met.
|
1109
1125
|
var runDependencies = 0;
|
1110
|
-
var runDependencyTracking = {};
|
1111
1126
|
var runDependencyWatcher = null;
|
1112
1127
|
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
|
1128
|
+
#if ASSERTIONS
|
1129
|
+
var runDependencyTracking = {};
|
1130
|
+
#endif
|
1113
1131
|
|
1114
1132
|
function addRunDependency(id) {
|
1115
1133
|
runDependencies++;
|
1116
1134
|
if (Module['monitorRunDependencies']) {
|
1117
1135
|
Module['monitorRunDependencies'](runDependencies);
|
1118
1136
|
}
|
1137
|
+
#if ASSERTIONS
|
1119
1138
|
if (id) {
|
1120
1139
|
assert(!runDependencyTracking[id]);
|
1121
1140
|
runDependencyTracking[id] = 1;
|
1122
|
-
#if ASSERTIONS
|
1123
1141
|
if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {
|
1124
1142
|
// Check for missing dependencies every few seconds
|
1125
1143
|
runDependencyWatcher = setInterval(function() {
|
@@ -1136,10 +1154,10 @@ function addRunDependency(id) {
|
|
1136
1154
|
}
|
1137
1155
|
}, 10000);
|
1138
1156
|
}
|
1139
|
-
#endif
|
1140
1157
|
} else {
|
1141
1158
|
Module.printErr('warning: run dependency added without ID');
|
1142
1159
|
}
|
1160
|
+
#endif
|
1143
1161
|
}
|
1144
1162
|
Module['addRunDependency'] = addRunDependency;
|
1145
1163
|
function removeRunDependency(id) {
|
@@ -1147,12 +1165,14 @@ function removeRunDependency(id) {
|
|
1147
1165
|
if (Module['monitorRunDependencies']) {
|
1148
1166
|
Module['monitorRunDependencies'](runDependencies);
|
1149
1167
|
}
|
1168
|
+
#if ASSERTIONS
|
1150
1169
|
if (id) {
|
1151
1170
|
assert(runDependencyTracking[id]);
|
1152
1171
|
delete runDependencyTracking[id];
|
1153
1172
|
} else {
|
1154
1173
|
Module.printErr('warning: run dependency removed without ID');
|
1155
1174
|
}
|
1175
|
+
#endif
|
1156
1176
|
if (runDependencies == 0) {
|
1157
1177
|
if (runDependencyWatcher !== null) {
|
1158
1178
|
clearInterval(runDependencyWatcher);
|
@@ -2,12 +2,12 @@
|
|
2
2
|
function EventListener() {
|
3
3
|
this.listeners = {};
|
4
4
|
|
5
|
-
this.addEventListener = function(event, func) {
|
5
|
+
this.addEventListener = function addEventListener(event, func) {
|
6
6
|
if (!this.listeners[event]) this.listeners[event] = [];
|
7
7
|
this.listeners[event].push(func);
|
8
8
|
};
|
9
9
|
|
10
|
-
this.fireEvent = function(event) {
|
10
|
+
this.fireEvent = function fireEvent(event) {
|
11
11
|
event.preventDefault = function(){};
|
12
12
|
|
13
13
|
if (event.type in this.listeners) {
|
@@ -22,17 +22,17 @@ var window = this;
|
|
22
22
|
var windowExtra = new EventListener();
|
23
23
|
for (var x in windowExtra) window[x] = windowExtra[x];
|
24
24
|
|
25
|
-
window.close = function() {
|
25
|
+
window.close = function window_close() {
|
26
26
|
postMessage({ target: 'window', method: 'close' });
|
27
27
|
};
|
28
28
|
|
29
29
|
var document = new EventListener();
|
30
30
|
|
31
|
-
document.createElement = function(what) {
|
31
|
+
document.createElement = function document_createElement(what) {
|
32
32
|
switch(what) {
|
33
33
|
case 'canvas': {
|
34
34
|
var canvas = new EventListener();
|
35
|
-
canvas.ensureData = function() {
|
35
|
+
canvas.ensureData = function canvas_ensureData() {
|
36
36
|
if (!canvas.data || canvas.data.width !== canvas.width || canvas.data.height !== canvas.height) {
|
37
37
|
canvas.data = {
|
38
38
|
width: canvas.width,
|
@@ -42,7 +42,7 @@ document.createElement = function(what) {
|
|
42
42
|
postMessage({ target: 'canvas', op: 'resize', width: canvas.width, height: canvas.height });
|
43
43
|
}
|
44
44
|
};
|
45
|
-
canvas.getContext = function(type) {
|
45
|
+
canvas.getContext = function canvas_getContext(type) {
|
46
46
|
assert(type == '2d');
|
47
47
|
return {
|
48
48
|
getImageData: function(x, y, w, h) {
|
@@ -63,7 +63,7 @@ document.createElement = function(what) {
|
|
63
63
|
};
|
64
64
|
};
|
65
65
|
canvas.boundingClientRect = {};
|
66
|
-
canvas.getBoundingClientRect = function() {
|
66
|
+
canvas.getBoundingClientRect = function canvas_getBoundingClientRect() {
|
67
67
|
return {
|
68
68
|
width: canvas.boundingClientRect.width,
|
69
69
|
height: canvas.boundingClientRect.height,
|
@@ -89,10 +89,10 @@ Module.canvas = document.createElement('canvas');
|
|
89
89
|
|
90
90
|
Module.setStatus = function(){};
|
91
91
|
|
92
|
-
Module.print = function(x) {
|
92
|
+
Module.print = function Module_print(x) {
|
93
93
|
postMessage({ target: 'stdout', content: x });
|
94
94
|
};
|
95
|
-
Module.printErr = function(x) {
|
95
|
+
Module.printErr = function Module_printErr(x) {
|
96
96
|
postMessage({ target: 'stderr', content: x });
|
97
97
|
};
|
98
98
|
|
@@ -112,7 +112,7 @@ function messageResender() {
|
|
112
112
|
}
|
113
113
|
}
|
114
114
|
|
115
|
-
onmessage = function(message) {
|
115
|
+
onmessage = function onmessage(message) {
|
116
116
|
if (!calledMain) {
|
117
117
|
if (!messageBuffer) {
|
118
118
|
messageBuffer = [];
|
@@ -6,7 +6,12 @@
|
|
6
6
|
#include <list>
|
7
7
|
#include <stack>
|
8
8
|
|
9
|
+
#if EMSCRIPTEN
|
9
10
|
#include "ministring.h"
|
11
|
+
#else
|
12
|
+
#include <string>
|
13
|
+
typedef std::string ministring;
|
14
|
+
#endif
|
10
15
|
|
11
16
|
template <class T, class U> bool contains(const T& container, const U& contained) {
|
12
17
|
return container.find(contained) != container.end();
|
@@ -66,11 +71,7 @@ static int AsmJS = 0;
|
|
66
71
|
|
67
72
|
// Indenter
|
68
73
|
|
69
|
-
#if EMSCRIPTEN
|
70
74
|
int Indenter::CurrIndent = 1;
|
71
|
-
#else
|
72
|
-
int Indenter::CurrIndent = 0;
|
73
|
-
#endif
|
74
75
|
|
75
76
|
// Branch
|
76
77
|
|
@@ -541,6 +542,16 @@ void Relooper::Calculate(Block *Entry) {
|
|
541
542
|
for (BlockSet::iterator iter = Curr->BranchesIn.begin(); iter != Curr->BranchesIn.end(); iter++) {
|
542
543
|
Queue.insert(*iter);
|
543
544
|
}
|
545
|
+
#if 0
|
546
|
+
// Add elements it leads to, if they are dead ends. There is no reason not to hoist dead ends
|
547
|
+
// into loops, as it can avoid multiple entries after the loop
|
548
|
+
for (BlockBranchMap::iterator iter = Curr->BranchesOut.begin(); iter != Curr->BranchesOut.end(); iter++) {
|
549
|
+
Block *Target = iter->first;
|
550
|
+
if (Target->BranchesIn.size() <= 1 && Target->BranchesOut.size() == 0) {
|
551
|
+
Queue.insert(Target);
|
552
|
+
}
|
553
|
+
}
|
554
|
+
#endif
|
544
555
|
}
|
545
556
|
}
|
546
557
|
assert(InnerBlocks.size() > 0);
|
@@ -82,8 +82,8 @@ var RuntimeGenerator = {
|
|
82
82
|
// Rounding is inevitable if the number is large. This is a particular problem for small negative numbers
|
83
83
|
// (-1 will be rounded!), so handle negatives separately and carefully
|
84
84
|
makeBigInt: function(low, high, unsigned) {
|
85
|
-
var unsignedRet = '(' + asmCoercion(makeSignOp(low, 'i32', 'un', 1, 1), '
|
86
|
-
var signedRet = '(' + asmCoercion(makeSignOp(low, 'i32', 'un', 1, 1), '
|
85
|
+
var unsignedRet = '(' + asmCoercion(makeSignOp(low, 'i32', 'un', 1, 1), 'double') + '+(' + asmCoercion(makeSignOp(high, 'i32', 'un', 1, 1), 'double') + '*' + asmEnsureFloat(4294967296, 'double') + '))';
|
86
|
+
var signedRet = '(' + asmCoercion(makeSignOp(low, 'i32', 'un', 1, 1), 'double') + '+(' + asmCoercion(makeSignOp(high, 'i32', 're', 1, 1), 'double') + '*' + asmEnsureFloat(4294967296, 'double') + '))';
|
87
87
|
if (typeof unsigned === 'string') return '(' + unsigned + ' ? ' + unsignedRet + ' : ' + signedRet + ')';
|
88
88
|
return unsigned ? unsignedRet : signedRet;
|
89
89
|
}
|
@@ -145,7 +145,7 @@ var Runtime = {
|
|
145
145
|
//! @param type The type, by name.
|
146
146
|
getNativeTypeSize: function(type) {
|
147
147
|
#if QUANTUM_SIZE == 1
|
148
|
-
|
148
|
+
return 1;
|
149
149
|
#else
|
150
150
|
switch (type) {
|
151
151
|
case 'i1': case 'i8': return 1;
|
@@ -161,6 +161,8 @@ var Runtime = {
|
|
161
161
|
var bits = parseInt(type.substr(1));
|
162
162
|
assert(bits % 8 === 0);
|
163
163
|
return bits/8;
|
164
|
+
} else {
|
165
|
+
return 0;
|
164
166
|
}
|
165
167
|
}
|
166
168
|
}
|
@@ -183,8 +185,11 @@ var Runtime = {
|
|
183
185
|
// type can be a native type or a struct (or null, for structs we only look at size here)
|
184
186
|
getAlignSize: function(type, size, vararg) {
|
185
187
|
// we align i64s and doubles on 64-bit boundaries, unlike x86
|
188
|
+
#if TARGET_LE32 == 1
|
189
|
+
if (vararg) return 8;
|
190
|
+
#endif
|
186
191
|
#if TARGET_LE32
|
187
|
-
if (type == 'i64' || type == 'double'
|
192
|
+
if (!vararg && (type == 'i64' || type == 'double')) return 8;
|
188
193
|
if (!type) return Math.min(size, 8); // align structures internally to 64 bits
|
189
194
|
#endif
|
190
195
|
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
|
@@ -224,9 +229,16 @@ var Runtime = {
|
|
224
229
|
// bN, large number field, like a [N x i8]
|
225
230
|
size = field.substr(1)|0;
|
226
231
|
alignSize = 1;
|
227
|
-
} else {
|
228
|
-
|
232
|
+
} else if (field[0] === '<') {
|
233
|
+
// vector type
|
229
234
|
size = alignSize = Types.types[field].flatSize; // fully aligned
|
235
|
+
} else if (field[0] === 'i') {
|
236
|
+
// illegal integer field, that could not be legalized because it is an internal structure field
|
237
|
+
// it is ok to have such fields, if we just use them as markers of field size and nothing more complex
|
238
|
+
size = alignSize = parseInt(field.substr(1))/8;
|
239
|
+
assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
|
240
|
+
} else {
|
241
|
+
assert(false, 'invalid type for calculateStructAlignment');
|
230
242
|
}
|
231
243
|
if (type.packed) alignSize = 1;
|
232
244
|
type.alignSize = Math.max(type.alignSize, alignSize);
|
@@ -372,6 +384,18 @@ var Runtime = {
|
|
372
384
|
#endif
|
373
385
|
},
|
374
386
|
|
387
|
+
getAsmConst: function(code, numArgs) {
|
388
|
+
// code is a constant string on the heap, so we can cache these
|
389
|
+
if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
|
390
|
+
var func = Runtime.asmConstCache[code];
|
391
|
+
if (func) return func;
|
392
|
+
var args = [];
|
393
|
+
for (var i = 0; i < numArgs; i++) {
|
394
|
+
args.push(String.fromCharCode(36) + i); // $0, $1 etc
|
395
|
+
}
|
396
|
+
return Runtime.asmConstCache[code] = eval('(function(' + args.join(',') + '){ ' + Pointer_stringify(code) + ' })'); // new Function does not allow upvars in node
|
397
|
+
},
|
398
|
+
|
375
399
|
warnOnce: function(text) {
|
376
400
|
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
|
377
401
|
if (!Runtime.warnOnce.shown[text]) {
|
@@ -385,7 +409,7 @@ var Runtime = {
|
|
385
409
|
getFuncWrapper: function(func, sig) {
|
386
410
|
assert(sig);
|
387
411
|
if (!Runtime.funcWrappers[func]) {
|
388
|
-
Runtime.funcWrappers[func] = function() {
|
412
|
+
Runtime.funcWrappers[func] = function dynCall_wrapper() {
|
389
413
|
return Runtime.dynCall(sig, func, arguments);
|
390
414
|
};
|
391
415
|
}
|
@@ -443,7 +467,7 @@ var Runtime = {
|
|
443
467
|
buffer.length = 0;
|
444
468
|
return ret;
|
445
469
|
}
|
446
|
-
this.processJSString = function(string) {
|
470
|
+
this.processJSString = function processJSString(string) {
|
447
471
|
string = unescape(encodeURIComponent(string));
|
448
472
|
var ret = [];
|
449
473
|
for (var i = 0; i < string.length; i++) {
|
@@ -23,7 +23,8 @@ var QUANTUM_SIZE = 4; // This is the size of an individual field in a structure.
|
|
23
23
|
// Changing this from the default of 4 is deprecated.
|
24
24
|
|
25
25
|
var TARGET_X86 = 0; // For i386-pc-linux-gnu
|
26
|
-
var TARGET_LE32 = 1; // For le32-unknown-nacl
|
26
|
+
var TARGET_LE32 = 1; // For le32-unknown-nacl. 1 is normal, 2 is for the fastcomp llvm
|
27
|
+
// backend using pnacl abi simplification
|
27
28
|
|
28
29
|
var CORRECT_SIGNS = 1; // Whether we make sure to convert unsigned values to signed values.
|
29
30
|
// Decreases performance with additional runtime checks. Might not be
|
@@ -115,7 +116,13 @@ var PRECISE_I64_MATH = 1; // If enabled, i64 addition etc. is emulated - which i
|
|
115
116
|
var PRECISE_I32_MUL = 1; // If enabled, i32 multiplication is done with full precision, which means it is
|
116
117
|
// correct even if the value exceeds the JS double-integer limit of ~52 bits (otherwise,
|
117
118
|
// rounding will occur above that range).
|
118
|
-
var
|
119
|
+
var PRECISE_F32 = 0; // 0: Use JS numbers for floating-point values. These are 64-bit and do not model C++
|
120
|
+
// floats exactly, which are 32-bit.
|
121
|
+
// 1: Model C++ floats precisely, using Math.fround, polyfilling when necessary. This
|
122
|
+
// can be slow if the polyfill is used on heavy float32 computation.
|
123
|
+
// 2: Model C++ floats precisely using Math.fround if available in the JS engine, otherwise
|
124
|
+
// use an empty polyfill. This will have less of a speed penalty than using the full
|
125
|
+
// polyfill in cases where engine support is not present.
|
119
126
|
|
120
127
|
var CLOSURE_ANNOTATIONS = 0; // If set, the generated code will be annotated for the closure
|
121
128
|
// compiler. This potentially lets closure optimize the code better.
|
@@ -217,6 +224,10 @@ var GL_UNSAFE_OPTS = 1; // Enables some potentially-unsafe optimizations in GL e
|
|
217
224
|
var FULL_ES2 = 0; // Forces support for all GLES2 features, not just the WebGL-friendly subset.
|
218
225
|
var LEGACY_GL_EMULATION = 0; // Includes code to emulate various desktop GL features. Incomplete but useful
|
219
226
|
// in some cases, see https://github.com/kripken/emscripten/wiki/OpenGL-support
|
227
|
+
var GL_FFP_ONLY = 0; // If you specified LEGACY_GL_EMULATION = 1 and only use fixed function pipeline in your code,
|
228
|
+
// you can also set this to 1 to signal the GL emulation layer that it can perform extra
|
229
|
+
// optimizations by knowing that the user code does not use shaders at all. If
|
230
|
+
// LEGACY_GL_EMULATION = 0, this setting has no effect.
|
220
231
|
|
221
232
|
var STB_IMAGE = 0; // Enables building of stb-image, a tiny public-domain library for decoding images, allowing
|
222
233
|
// decoding of images without using the browser's built-in decoders. The benefit is that this
|
@@ -384,13 +395,16 @@ var FAKE_X86_FP80 = 1; // Replaces x86_fp80 with double. This loses precision. I
|
|
384
395
|
|
385
396
|
var GC_SUPPORT = 1; // Enables GC, see gc.h (this does not add overhead, so it is on by default)
|
386
397
|
|
387
|
-
var WARN_ON_UNDEFINED_SYMBOLS =
|
388
|
-
// are not resolved by the library_*.js files.
|
389
|
-
//
|
398
|
+
var WARN_ON_UNDEFINED_SYMBOLS = 1; // If set to 1, we will warn on any undefined symbols that
|
399
|
+
// are not resolved by the library_*.js files. Note that
|
400
|
+
// it is common in large projects to
|
390
401
|
// not implement everything, when you know what is not
|
391
402
|
// going to actually be called (and don't want to mess with
|
392
|
-
// the existing buildsystem), and
|
393
|
-
// implemented later on, say in --pre-js
|
403
|
+
// the existing buildsystem), and functions might be
|
404
|
+
// implemented later on, say in --pre-js, so you may
|
405
|
+
// want to build with -s WARN_ON_UNDEFINED_SYMBOLS=0 to
|
406
|
+
// disable the warnings if they annoy you.
|
407
|
+
// See also ERROR_ON_UNDEFINED_SYMBOLS
|
394
408
|
|
395
409
|
var ERROR_ON_UNDEFINED_SYMBOLS = 0; // If set to 1, we will give a compile-time error on any
|
396
410
|
// undefined symbols (see WARN_ON_UNDEFINED_SYMBOLS).
|
@@ -410,7 +424,8 @@ var HEADLESS = 0; // If 1, will include shim code that tries to 'fake' a browser
|
|
410
424
|
var BENCHMARK = 0; // If 1, will just time how long main() takes to execute, and not
|
411
425
|
// print out anything at all whatsoever. This is useful for benchmarking.
|
412
426
|
|
413
|
-
var ASM_JS = 0; // If 1, generate code in asm.js format.
|
427
|
+
var ASM_JS = 0; // If 1, generate code in asm.js format. If 2, emits the same code except
|
428
|
+
// for omitting 'use asm'
|
414
429
|
|
415
430
|
var PGO = 0; // Enables profile-guided optimization in the form of runtime checks for
|
416
431
|
// which functions are actually called. Emits a list during shutdown that you
|
@@ -421,6 +436,8 @@ var DEAD_FUNCTIONS = []; // Functions on this list are not converted to JS, and
|
|
421
436
|
// reducing code size.
|
422
437
|
// If a dead function is actually called, you will get a runtime
|
423
438
|
// error.
|
439
|
+
// This can affect both functions in compiled code, and system
|
440
|
+
// library functions (e.g., you can use this to kill printf).
|
424
441
|
// TODO: options to lazily load such functions
|
425
442
|
|
426
443
|
var EXPLICIT_ZEXT = 0; // If 1, generate an explicit conversion of zext i1 to i32, using ?:
|
@@ -50,7 +50,7 @@
|
|
50
50
|
//text = text.replace(/>/g, ">");
|
51
51
|
//text = text.replace('\n', '<br>', 'g');
|
52
52
|
element.value += text + "\n";
|
53
|
-
element.scrollTop =
|
53
|
+
element.scrollTop = element.scrollHeight; // focus on bottom
|
54
54
|
};
|
55
55
|
})(),
|
56
56
|
printErr: function(text) {
|
@@ -63,8 +63,11 @@
|
|
63
63
|
},
|
64
64
|
canvas: document.getElementById('canvas'),
|
65
65
|
setStatus: function(text) {
|
66
|
-
if (Module.setStatus.
|
66
|
+
if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
|
67
|
+
if (text === Module.setStatus.text) return;
|
67
68
|
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
|
69
|
+
var now = Date.now();
|
70
|
+
if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon
|
68
71
|
var statusElement = document.getElementById('status');
|
69
72
|
var progressElement = document.getElementById('progress');
|
70
73
|
if (m) {
|
@@ -87,6 +90,6 @@
|
|
87
90
|
};
|
88
91
|
Module.setStatus('Downloading...');
|
89
92
|
</script>
|
90
|
-
|
93
|
+
{{{ SCRIPT }}}
|
91
94
|
</body>
|
92
95
|
</html>
|
@@ -38,17 +38,17 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR
|
|
38
38
|
if (ENVIRONMENT_IS_NODE) {
|
39
39
|
// Expose functionality in the same simple way that the shells work
|
40
40
|
// Note that we pollute the global namespace here, otherwise we break in node
|
41
|
-
Module['print'] = function(x) {
|
41
|
+
Module['print'] = function print(x) {
|
42
42
|
process['stdout'].write(x + '\n');
|
43
43
|
};
|
44
|
-
Module['printErr'] = function(x) {
|
44
|
+
Module['printErr'] = function printErr(x) {
|
45
45
|
process['stderr'].write(x + '\n');
|
46
46
|
};
|
47
47
|
|
48
48
|
var nodeFS = require('fs');
|
49
49
|
var nodePath = require('path');
|
50
50
|
|
51
|
-
Module['read'] = function(filename, binary) {
|
51
|
+
Module['read'] = function read(filename, binary) {
|
52
52
|
filename = nodePath['normalize'](filename);
|
53
53
|
var ret = nodeFS['readFileSync'](filename);
|
54
54
|
// The path is absolute if the normalized version is the same as the resolved.
|
@@ -60,9 +60,9 @@ if (ENVIRONMENT_IS_NODE) {
|
|
60
60
|
return ret;
|
61
61
|
};
|
62
62
|
|
63
|
-
Module['readBinary'] = function(filename) { return Module['read'](filename, true) };
|
63
|
+
Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
|
64
64
|
|
65
|
-
Module['load'] = function(f) {
|
65
|
+
Module['load'] = function load(f) {
|
66
66
|
globalEval(read(f));
|
67
67
|
};
|
68
68
|
|
@@ -77,10 +77,10 @@ else if (ENVIRONMENT_IS_SHELL) {
|
|
77
77
|
if (typeof read != 'undefined') {
|
78
78
|
Module['read'] = read;
|
79
79
|
} else {
|
80
|
-
Module['read'] = function() { throw 'no read() available (jsc?)' };
|
80
|
+
Module['read'] = function read() { throw 'no read() available (jsc?)' };
|
81
81
|
}
|
82
82
|
|
83
|
-
Module['readBinary'] = function(f) {
|
83
|
+
Module['readBinary'] = function readBinary(f) {
|
84
84
|
return read(f, 'binary');
|
85
85
|
};
|
86
86
|
|
@@ -91,9 +91,11 @@ else if (ENVIRONMENT_IS_SHELL) {
|
|
91
91
|
}
|
92
92
|
|
93
93
|
this['{{{ EXPORT_NAME }}}'] = Module;
|
94
|
+
|
95
|
+
eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly)
|
94
96
|
}
|
95
97
|
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
96
|
-
Module['read'] = function(url) {
|
98
|
+
Module['read'] = function read(url) {
|
97
99
|
var xhr = new XMLHttpRequest();
|
98
100
|
xhr.open('GET', url, false);
|
99
101
|
xhr.send(null);
|
@@ -105,10 +107,10 @@ else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
105
107
|
}
|
106
108
|
|
107
109
|
if (typeof console !== 'undefined') {
|
108
|
-
Module['print'] = function(x) {
|
110
|
+
Module['print'] = function print(x) {
|
109
111
|
console.log(x);
|
110
112
|
};
|
111
|
-
Module['printErr'] = function(x) {
|
113
|
+
Module['printErr'] = function printErr(x) {
|
112
114
|
console.log(x);
|
113
115
|
};
|
114
116
|
} else {
|
@@ -136,7 +138,7 @@ function globalEval(x) {
|
|
136
138
|
eval.call(null, x);
|
137
139
|
}
|
138
140
|
if (!Module['load'] == 'undefined' && Module['read']) {
|
139
|
-
Module['load'] = function(f) {
|
141
|
+
Module['load'] = function load(f) {
|
140
142
|
globalEval(Module['read'](f));
|
141
143
|
};
|
142
144
|
}
|