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
@@ -23,6 +23,7 @@ LibraryManager.library = {
|
|
23
23
|
stdout: 'allocate(1, "i32*", ALLOC_STATIC)',
|
24
24
|
stderr: 'allocate(1, "i32*", ALLOC_STATIC)',
|
25
25
|
_impure_ptr: 'allocate(1, "i32*", ALLOC_STATIC)',
|
26
|
+
__dso_handle: 'allocate(1, "i32*", ALLOC_STATIC)',
|
26
27
|
|
27
28
|
// ==========================================================================
|
28
29
|
// dirent.h
|
@@ -471,6 +472,11 @@ LibraryManager.library = {
|
|
471
472
|
mkstemp: function(template) {
|
472
473
|
return _creat(_mktemp(template), 0600);
|
473
474
|
},
|
475
|
+
mkdtemp__deps: ['mktemp', 'mkdir'],
|
476
|
+
mkdtemp: function(template) {
|
477
|
+
template = _mktemp(template);
|
478
|
+
return (_mkdir(template, 0700) === 0) ? template : 0;
|
479
|
+
},
|
474
480
|
fcntl__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
|
475
481
|
fcntl: function(fildes, cmd, varargs, dup2) {
|
476
482
|
// int fcntl(int fildes, int cmd, ...);
|
@@ -535,7 +541,7 @@ LibraryManager.library = {
|
|
535
541
|
// Advise as much as you wish. We don't care.
|
536
542
|
return 0;
|
537
543
|
},
|
538
|
-
posix_madvise:
|
544
|
+
posix_madvise: function(){ return 0 }, // ditto as fadvise
|
539
545
|
posix_fallocate__deps: ['$FS', '__setErrNo', '$ERRNO_CODES'],
|
540
546
|
posix_fallocate: function(fd, offset, len) {
|
541
547
|
// int posix_fallocate(int fd, off_t offset, off_t len);
|
@@ -847,10 +853,7 @@ LibraryManager.library = {
|
|
847
853
|
___setErrNo(ERRNO_CODES.ERANGE);
|
848
854
|
return 0;
|
849
855
|
} else {
|
850
|
-
|
851
|
-
{{{ makeSetValue('buf', 'i', 'cwd.charCodeAt(i)', 'i8') }}}
|
852
|
-
}
|
853
|
-
{{{ makeSetValue('buf', 'i', '0', 'i8') }}}
|
856
|
+
writeAsciiToMemory(cwd, buf);
|
854
857
|
return buf;
|
855
858
|
}
|
856
859
|
},
|
@@ -1193,7 +1196,6 @@ LibraryManager.library = {
|
|
1193
1196
|
_exit: function(status) {
|
1194
1197
|
// void _exit(int status);
|
1195
1198
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
|
1196
|
-
Module.print('exit(' + status + ') called');
|
1197
1199
|
Module['exit'](status);
|
1198
1200
|
},
|
1199
1201
|
fork__deps: ['__setErrNo', '$ERRNO_CODES'],
|
@@ -1293,10 +1295,7 @@ LibraryManager.library = {
|
|
1293
1295
|
if (namesize < ret.length + 1) {
|
1294
1296
|
return ___setErrNo(ERRNO_CODES.ERANGE);
|
1295
1297
|
} else {
|
1296
|
-
|
1297
|
-
{{{ makeSetValue('name', 'i', 'ret.charCodeAt(i)', 'i8') }}}
|
1298
|
-
}
|
1299
|
-
{{{ makeSetValue('name', 'i', '0', 'i8') }}}
|
1298
|
+
writeAsciiToMemory(ret, name);
|
1300
1299
|
return 0;
|
1301
1300
|
}
|
1302
1301
|
},
|
@@ -1579,12 +1578,12 @@ LibraryManager.library = {
|
|
1579
1578
|
// stdio.h
|
1580
1579
|
// ==========================================================================
|
1581
1580
|
|
1582
|
-
|
1583
|
-
return
|
1581
|
+
_getFloat: function(text) {
|
1582
|
+
return /^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?/.exec(text);
|
1584
1583
|
},
|
1585
1584
|
|
1586
1585
|
// TODO: Document.
|
1587
|
-
_scanString__deps: ['
|
1586
|
+
_scanString__deps: ['_getFloat'],
|
1588
1587
|
_scanString: function(format, get, unget, varargs) {
|
1589
1588
|
if (!__scanString.whiteSpace) {
|
1590
1589
|
__scanString.whiteSpace = {};
|
@@ -1602,12 +1601,12 @@ LibraryManager.library = {
|
|
1602
1601
|
if (format.indexOf('%n') >= 0) {
|
1603
1602
|
// need to track soFar
|
1604
1603
|
var _get = get;
|
1605
|
-
get = function() {
|
1604
|
+
get = function get() {
|
1606
1605
|
soFar++;
|
1607
1606
|
return _get();
|
1608
1607
|
}
|
1609
1608
|
var _unget = unget;
|
1610
|
-
unget = function() {
|
1609
|
+
unget = function unget() {
|
1611
1610
|
soFar--;
|
1612
1611
|
return _unget();
|
1613
1612
|
}
|
@@ -1743,15 +1742,13 @@ LibraryManager.library = {
|
|
1743
1742
|
// Read characters according to the format. floats are trickier, they may be in an unfloat state in the middle, then be a valid float later
|
1744
1743
|
if (type == 'f' || type == 'e' || type == 'g' ||
|
1745
1744
|
type == 'F' || type == 'E' || type == 'G') {
|
1746
|
-
var last = 0;
|
1747
1745
|
next = get();
|
1748
|
-
while (next > 0)
|
1746
|
+
while (next > 0 && (!(next in __scanString.whiteSpace))) {
|
1749
1747
|
buffer.push(String.fromCharCode(next));
|
1750
|
-
if (__isFloat(buffer.join(''))) {
|
1751
|
-
last = buffer.length;
|
1752
|
-
}
|
1753
1748
|
next = get();
|
1754
1749
|
}
|
1750
|
+
var m = __getFloat(buffer.join(''));
|
1751
|
+
var last = m ? m[0].length : 0;
|
1755
1752
|
for (var i = 0; i < buffer.length - last + 1; i++) {
|
1756
1753
|
unget();
|
1757
1754
|
}
|
@@ -1864,17 +1861,20 @@ LibraryManager.library = {
|
|
1864
1861
|
// int x = 4; printf("%c\n", (char)x);
|
1865
1862
|
var ret;
|
1866
1863
|
if (type === 'double') {
|
1864
|
+
#if TARGET_LE32 == 2
|
1865
|
+
ret = {{{ makeGetValue('varargs', 'argIndex', 'double', undefined, undefined, true, 4) }}};
|
1866
|
+
#else
|
1867
1867
|
ret = {{{ makeGetValue('varargs', 'argIndex', 'double', undefined, undefined, true) }}};
|
1868
|
+
#endif
|
1868
1869
|
#if USE_TYPED_ARRAYS == 2
|
1869
1870
|
} else if (type == 'i64') {
|
1870
|
-
|
1871
|
-
#if TARGET_LE32
|
1871
|
+
#if TARGET_LE32 == 1
|
1872
1872
|
ret = [{{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true) }}},
|
1873
1873
|
{{{ makeGetValue('varargs', 'argIndex+8', 'i32', undefined, undefined, true) }}}];
|
1874
1874
|
argIndex += {{{ STACK_ALIGN }}}; // each 32-bit chunk is in a 64-bit block
|
1875
1875
|
#else
|
1876
|
-
ret = [{{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true) }}},
|
1877
|
-
{{{ makeGetValue('varargs', 'argIndex+4', 'i32', undefined, undefined, true) }}}];
|
1876
|
+
ret = [{{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true, 4) }}},
|
1877
|
+
{{{ makeGetValue('varargs', 'argIndex+4', 'i32', undefined, undefined, true, 4) }}}];
|
1878
1878
|
#endif
|
1879
1879
|
|
1880
1880
|
#else
|
@@ -1885,7 +1885,11 @@ LibraryManager.library = {
|
|
1885
1885
|
type = 'i32'; // varargs are always i32, i64, or double
|
1886
1886
|
ret = {{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true) }}};
|
1887
1887
|
}
|
1888
|
+
#if TARGET_LE32 == 2
|
1889
|
+
argIndex += Runtime.getNativeFieldSize(type);
|
1890
|
+
#else
|
1888
1891
|
argIndex += Math.max(Runtime.getNativeFieldSize(type), Runtime.getAlignSize(type, null, true));
|
1892
|
+
#endif
|
1889
1893
|
return ret;
|
1890
1894
|
}
|
1891
1895
|
|
@@ -2514,6 +2518,10 @@ LibraryManager.library = {
|
|
2514
2518
|
}
|
2515
2519
|
var bytesRead = 0;
|
2516
2520
|
var streamObj = FS.getStream(stream);
|
2521
|
+
if (!streamObj) {
|
2522
|
+
___setErrNo(ERRNO_CODES.EBADF);
|
2523
|
+
return 0;
|
2524
|
+
}
|
2517
2525
|
while (streamObj.ungotten.length && bytesToRead > 0) {
|
2518
2526
|
{{{ makeSetValue('ptr++', '0', 'streamObj.ungotten.pop()', 'i8') }}}
|
2519
2527
|
bytesToRead--;
|
@@ -2701,10 +2709,7 @@ LibraryManager.library = {
|
|
2701
2709
|
var result = dir + '/' + name;
|
2702
2710
|
if (!_tmpnam.buffer) _tmpnam.buffer = _malloc(256);
|
2703
2711
|
if (!s) s = _tmpnam.buffer;
|
2704
|
-
|
2705
|
-
{{{ makeSetValue('s', 'i', 'result.charCodeAt(i)', 'i8') }}};
|
2706
|
-
}
|
2707
|
-
{{{ makeSetValue('s', 'i', '0', 'i8') }}};
|
2712
|
+
writeAsciiToMemory(result, s);
|
2708
2713
|
return s;
|
2709
2714
|
},
|
2710
2715
|
tempnam__deps: ['tmpnam'],
|
@@ -2757,12 +2762,12 @@ LibraryManager.library = {
|
|
2757
2762
|
return -1;
|
2758
2763
|
}
|
2759
2764
|
var buffer = [];
|
2760
|
-
|
2765
|
+
function get() {
|
2761
2766
|
var c = _fgetc(stream);
|
2762
2767
|
buffer.push(c);
|
2763
2768
|
return c;
|
2764
2769
|
};
|
2765
|
-
|
2770
|
+
function unget() {
|
2766
2771
|
_ungetc(buffer.pop(), stream);
|
2767
2772
|
};
|
2768
2773
|
return __scanString(format, get, unget, varargs);
|
@@ -2779,8 +2784,8 @@ LibraryManager.library = {
|
|
2779
2784
|
// int sscanf(const char *restrict s, const char *restrict format, ... );
|
2780
2785
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html
|
2781
2786
|
var index = 0;
|
2782
|
-
|
2783
|
-
|
2787
|
+
function get() { return {{{ makeGetValue('s', 'index++', 'i8') }}}; };
|
2788
|
+
function unget() { index--; };
|
2784
2789
|
return __scanString(format, get, unget, varargs);
|
2785
2790
|
},
|
2786
2791
|
snprintf__deps: ['_formatString'],
|
@@ -3042,7 +3047,7 @@ LibraryManager.library = {
|
|
3042
3047
|
},
|
3043
3048
|
|
3044
3049
|
bsearch: function(key, base, num, size, compar) {
|
3045
|
-
|
3050
|
+
function cmp(x, y) {
|
3046
3051
|
#if ASM_JS
|
3047
3052
|
return Module['dynCall_iii'](compar, x, y);
|
3048
3053
|
#else
|
@@ -3205,7 +3210,7 @@ LibraryManager.library = {
|
|
3205
3210
|
}
|
3206
3211
|
}
|
3207
3212
|
if (!finalBase) finalBase = 10;
|
3208
|
-
start = str;
|
3213
|
+
var start = str;
|
3209
3214
|
|
3210
3215
|
// Get digits.
|
3211
3216
|
var chr;
|
@@ -3345,10 +3350,7 @@ LibraryManager.library = {
|
|
3345
3350
|
var ptrSize = {{{ Runtime.getNativeTypeSize('i8*') }}};
|
3346
3351
|
for (var i = 0; i < strings.length; i++) {
|
3347
3352
|
var line = strings[i];
|
3348
|
-
|
3349
|
-
{{{ makeSetValue('poolPtr', 'j', 'line.charCodeAt(j)', 'i8') }}};
|
3350
|
-
}
|
3351
|
-
{{{ makeSetValue('poolPtr', 'j', '0', 'i8') }}};
|
3353
|
+
writeAsciiToMemory(line, poolPtr);
|
3352
3354
|
{{{ makeSetValue('envPtr', 'i * ptrSize', 'poolPtr', 'i8*') }}};
|
3353
3355
|
poolPtr += line.length + 1;
|
3354
3356
|
}
|
@@ -3537,13 +3539,15 @@ LibraryManager.library = {
|
|
3537
3539
|
llvm_memcpy_p0i8_p0i8_i32: 'memcpy',
|
3538
3540
|
llvm_memcpy_p0i8_p0i8_i64: 'memcpy',
|
3539
3541
|
|
3540
|
-
memmove__sig: '
|
3542
|
+
memmove__sig: 'iiii',
|
3541
3543
|
memmove__asm: true,
|
3542
3544
|
memmove__deps: ['memcpy'],
|
3543
3545
|
memmove: function(dest, src, num) {
|
3544
3546
|
dest = dest|0; src = src|0; num = num|0;
|
3547
|
+
var ret = 0;
|
3545
3548
|
if (((src|0) < (dest|0)) & ((dest|0) < ((src + num)|0))) {
|
3546
3549
|
// Unlikely case: Copy backwards in a safe manner
|
3550
|
+
ret = dest;
|
3547
3551
|
src = (src + num)|0;
|
3548
3552
|
dest = (dest + num)|0;
|
3549
3553
|
while ((num|0) > 0) {
|
@@ -3552,9 +3556,11 @@ LibraryManager.library = {
|
|
3552
3556
|
num = (num - 1)|0;
|
3553
3557
|
{{{ makeSetValueAsm('dest', 0, makeGetValueAsm('src', 0, 'i8'), 'i8') }}};
|
3554
3558
|
}
|
3559
|
+
dest = ret;
|
3555
3560
|
} else {
|
3556
3561
|
_memcpy(dest, src, num) | 0;
|
3557
3562
|
}
|
3563
|
+
return dest | 0;
|
3558
3564
|
},
|
3559
3565
|
llvm_memmove_i32: 'memmove',
|
3560
3566
|
llvm_memmove_i64: 'memmove',
|
@@ -3571,7 +3577,7 @@ LibraryManager.library = {
|
|
3571
3577
|
memset__inline: function(ptr, value, num, align) {
|
3572
3578
|
return makeSetValues(ptr, 0, value, 'null', num, align);
|
3573
3579
|
},
|
3574
|
-
memset__sig: '
|
3580
|
+
memset__sig: 'iiii',
|
3575
3581
|
memset__asm: true,
|
3576
3582
|
memset: function(ptr, value, num) {
|
3577
3583
|
#if USE_TYPED_ARRAYS == 2
|
@@ -3600,8 +3606,10 @@ LibraryManager.library = {
|
|
3600
3606
|
{{{ makeSetValueAsm('ptr', 0, 'value', 'i8') }}};
|
3601
3607
|
ptr = (ptr+1)|0;
|
3602
3608
|
}
|
3609
|
+
return (ptr-num)|0;
|
3603
3610
|
#else
|
3604
3611
|
{{{ makeSetValues('ptr', '0', 'value', 'null', 'num') }}};
|
3612
|
+
return ptr;
|
3605
3613
|
#endif
|
3606
3614
|
},
|
3607
3615
|
llvm_memset_i32: 'memset',
|
@@ -3978,10 +3986,7 @@ LibraryManager.library = {
|
|
3978
3986
|
return ___setErrNo(ERRNO_CODES.ERANGE);
|
3979
3987
|
} else {
|
3980
3988
|
var msg = ERRNO_MESSAGES[errnum];
|
3981
|
-
|
3982
|
-
{{{ makeSetValue('strerrbuf', 'i', 'msg.charCodeAt(i)', 'i8') }}}
|
3983
|
-
}
|
3984
|
-
{{{ makeSetValue('strerrbuf', 'i', 0, 'i8') }}}
|
3989
|
+
writeAsciiToMemory(msg, strerrbuf);
|
3985
3990
|
return 0;
|
3986
3991
|
}
|
3987
3992
|
} else {
|
@@ -4165,6 +4170,11 @@ LibraryManager.library = {
|
|
4165
4170
|
return me.ret;
|
4166
4171
|
},
|
4167
4172
|
|
4173
|
+
// ==========================================================================
|
4174
|
+
// GCC/LLVM specifics
|
4175
|
+
// ==========================================================================
|
4176
|
+
__builtin_prefetch: function(){},
|
4177
|
+
|
4168
4178
|
// ==========================================================================
|
4169
4179
|
// LLVM specifics
|
4170
4180
|
// ==========================================================================
|
@@ -4670,6 +4680,10 @@ LibraryManager.library = {
|
|
4670
4680
|
|
4671
4681
|
llvm_dbg_declare__inline: function() { throw 'llvm_debug_declare' }, // avoid warning
|
4672
4682
|
|
4683
|
+
// llvm-nacl
|
4684
|
+
|
4685
|
+
llvm_nacl_atomic_store_i32__inline: true,
|
4686
|
+
|
4673
4687
|
// ==========================================================================
|
4674
4688
|
// llvm-mono integration
|
4675
4689
|
// ==========================================================================
|
@@ -5064,10 +5078,7 @@ LibraryManager.library = {
|
|
5064
5078
|
var layout = {{{ JSON.stringify(C_STRUCTS.utsname) }}};
|
5065
5079
|
function copyString(element, value) {
|
5066
5080
|
var offset = layout[element];
|
5067
|
-
|
5068
|
-
{{{ makeSetValue('name', 'offset + i', 'value.charCodeAt(i)', 'i8') }}}
|
5069
|
-
}
|
5070
|
-
{{{ makeSetValue('name', 'offset + i', '0', 'i8') }}}
|
5081
|
+
writeAsciiToMemory(value, name + offset);
|
5071
5082
|
}
|
5072
5083
|
if (name === 0) {
|
5073
5084
|
return -1;
|
@@ -5110,7 +5121,7 @@ LibraryManager.library = {
|
|
5110
5121
|
table[from + i] = {};
|
5111
5122
|
sigs.forEach(function(sig) { // TODO: new Function etc.
|
5112
5123
|
var full = 'dynCall_' + sig;
|
5113
|
-
table[from + i][sig] = function() {
|
5124
|
+
table[from + i][sig] = function dynCall_sig() {
|
5114
5125
|
arguments[0] -= from;
|
5115
5126
|
return asm[full].apply(null, arguments);
|
5116
5127
|
}
|
@@ -5134,7 +5145,7 @@ LibraryManager.library = {
|
|
5134
5145
|
|
5135
5146
|
// patch js module dynCall_* to use functionTable
|
5136
5147
|
sigs.forEach(function(sig) {
|
5137
|
-
jsModule['dynCall_' + sig] = function() {
|
5148
|
+
jsModule['dynCall_' + sig] = function dynCall_sig() {
|
5138
5149
|
return table[arguments[0]][sig].apply(null, arguments);
|
5139
5150
|
};
|
5140
5151
|
});
|
@@ -5297,6 +5308,16 @@ LibraryManager.library = {
|
|
5297
5308
|
}
|
5298
5309
|
},
|
5299
5310
|
|
5311
|
+
dladdr: function(addr, info) {
|
5312
|
+
// report all function pointers as coming from this program itself XXX not really correct in any way
|
5313
|
+
var fname = allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL); // XXX leak
|
5314
|
+
{{{ makeSetValue('addr', 0, 'fname', 'i32') }}};
|
5315
|
+
{{{ makeSetValue('addr', QUANTUM_SIZE, '0', 'i32') }}};
|
5316
|
+
{{{ makeSetValue('addr', QUANTUM_SIZE*2, '0', 'i32') }}};
|
5317
|
+
{{{ makeSetValue('addr', QUANTUM_SIZE*3, '0', 'i32') }}};
|
5318
|
+
return 1;
|
5319
|
+
},
|
5320
|
+
|
5300
5321
|
// ==========================================================================
|
5301
5322
|
// pwd.h
|
5302
5323
|
// ==========================================================================
|
@@ -5598,7 +5619,7 @@ LibraryManager.library = {
|
|
5598
5619
|
var WEEKDAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
5599
5620
|
var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
5600
5621
|
|
5601
|
-
|
5622
|
+
function leadingSomething(value, digits, character) {
|
5602
5623
|
var str = typeof value === 'number' ? value.toString() : (value || '');
|
5603
5624
|
while (str.length < digits) {
|
5604
5625
|
str = character[0]+str;
|
@@ -5606,12 +5627,12 @@ LibraryManager.library = {
|
|
5606
5627
|
return str;
|
5607
5628
|
};
|
5608
5629
|
|
5609
|
-
|
5630
|
+
function leadingNulls(value, digits) {
|
5610
5631
|
return leadingSomething(value, digits, '0');
|
5611
5632
|
};
|
5612
5633
|
|
5613
|
-
|
5614
|
-
|
5634
|
+
function compareByDay(date1, date2) {
|
5635
|
+
function sgn(value) {
|
5615
5636
|
return value < 0 ? -1 : (value > 0 ? 1 : 0);
|
5616
5637
|
};
|
5617
5638
|
|
@@ -5624,7 +5645,7 @@ LibraryManager.library = {
|
|
5624
5645
|
return compare;
|
5625
5646
|
};
|
5626
5647
|
|
5627
|
-
|
5648
|
+
function getFirstWeekStartDate(janFourth) {
|
5628
5649
|
switch (janFourth.getDay()) {
|
5629
5650
|
case 0: // Sunday
|
5630
5651
|
return new Date(janFourth.getFullYear()-1, 11, 29);
|
@@ -5643,7 +5664,7 @@ LibraryManager.library = {
|
|
5643
5664
|
}
|
5644
5665
|
};
|
5645
5666
|
|
5646
|
-
|
5667
|
+
function getWeekBasedYear(date) {
|
5647
5668
|
var thisDate = __addDays(new Date(date.tm_year+1900, 0, 1), date.tm_yday);
|
5648
5669
|
|
5649
5670
|
var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4);
|
@@ -5930,8 +5951,8 @@ LibraryManager.library = {
|
|
5930
5951
|
var matches = new RegExp('^'+pattern).exec(Pointer_stringify(buf))
|
5931
5952
|
// Module['print'](Pointer_stringify(buf)+ ' is matched by '+((new RegExp('^'+pattern)).source)+' into: '+JSON.stringify(matches));
|
5932
5953
|
|
5933
|
-
|
5934
|
-
|
5954
|
+
function initDate() {
|
5955
|
+
function fixup(value, min, max) {
|
5935
5956
|
return (typeof value !== 'number' || isNaN(value)) ? min : (value>=min ? (value<=max ? value: max): min);
|
5936
5957
|
};
|
5937
5958
|
return {
|
@@ -5948,7 +5969,7 @@ LibraryManager.library = {
|
|
5948
5969
|
var date = initDate();
|
5949
5970
|
var value;
|
5950
5971
|
|
5951
|
-
|
5972
|
+
function getMatch(symbol) {
|
5952
5973
|
var pos = capture.indexOf(symbol);
|
5953
5974
|
// check if symbol appears in regexp
|
5954
5975
|
if (pos >= 0) {
|
@@ -6118,16 +6139,23 @@ LibraryManager.library = {
|
|
6118
6139
|
// int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
|
6119
6140
|
var seconds = {{{ makeGetValue('rqtp', C_STRUCTS.timespec.tv_sec, 'i32') }}};
|
6120
6141
|
var nanoseconds = {{{ makeGetValue('rqtp', C_STRUCTS.timespec.tv_nsec, 'i32') }}};
|
6121
|
-
|
6122
|
-
|
6142
|
+
if (rmtp !== 0) {
|
6143
|
+
{{{ makeSetValue('rmtp', C_STRUCTS.timespec.tv_sec, '0', 'i32') }}}
|
6144
|
+
{{{ makeSetValue('rmtp', C_STRUCTS.timespec.tv_nsec, '0', 'i32') }}}
|
6145
|
+
}
|
6123
6146
|
return _usleep((seconds * 1e6) + (nanoseconds / 1000));
|
6124
6147
|
},
|
6125
|
-
|
6148
|
+
clock_gettime__deps: ['emscripten_get_now'],
|
6126
6149
|
clock_gettime: function(clk_id, tp) {
|
6127
6150
|
// int clock_gettime(clockid_t clk_id, struct timespec *tp);
|
6128
|
-
var now
|
6151
|
+
var now;
|
6152
|
+
if (clk_id === {{{ cDefine('CLOCK_REALTIME') }}}) {
|
6153
|
+
now = Date.now();
|
6154
|
+
} else {
|
6155
|
+
now = _emscripten_get_now();
|
6156
|
+
}
|
6129
6157
|
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_sec, 'Math.floor(now/1000)', 'i32') }}}; // seconds
|
6130
|
-
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_nsec, '(now % 1000)
|
6158
|
+
{{{ makeSetValue('tp', C_STRUCTS.timespec.tv_nsec, 'Math.floor((now % 1000)*1000*1000)', 'i32') }}}; // nanoseconds
|
6131
6159
|
return 0;
|
6132
6160
|
},
|
6133
6161
|
clock_settime: function(clk_id, tp) {
|
@@ -6135,10 +6163,17 @@ LibraryManager.library = {
|
|
6135
6163
|
// Nothing.
|
6136
6164
|
return 0;
|
6137
6165
|
},
|
6166
|
+
clock_getres__deps: ['emscripten_get_now_res'],
|
6138
6167
|
clock_getres: function(clk_id, res) {
|
6139
6168
|
// int clock_getres(clockid_t clk_id, struct timespec *res);
|
6169
|
+
var nsec;
|
6170
|
+
if (clk_id === {{{ cDefine('CLOCK_REALTIME') }}}) {
|
6171
|
+
nsec = 1000 * 1000;
|
6172
|
+
} else {
|
6173
|
+
nsec = _emscripten_get_now_res();
|
6174
|
+
}
|
6140
6175
|
{{{ makeSetValue('res', C_STRUCTS.timespec.tv_sec, '1', 'i32') }}}
|
6141
|
-
{{{ makeSetValue('res', C_STRUCTS.timespec.tv_nsec, '
|
6176
|
+
{{{ makeSetValue('res', C_STRUCTS.timespec.tv_nsec, 'nsec', 'i32') }}} // resolution is milliseconds
|
6142
6177
|
return 0;
|
6143
6178
|
},
|
6144
6179
|
|
@@ -6559,10 +6594,7 @@ LibraryManager.library = {
|
|
6559
6594
|
|
6560
6595
|
var me = _nl_langinfo;
|
6561
6596
|
if (!me.ret) me.ret = _malloc(32);
|
6562
|
-
|
6563
|
-
{{{ makeSetValue('me.ret', 'i', 'result.charCodeAt(i)', 'i8') }}}
|
6564
|
-
}
|
6565
|
-
{{{ makeSetValue('me.ret', 'i', '0', 'i8') }}}
|
6597
|
+
writeAsciiToMemory(result, me.ret);
|
6566
6598
|
return me.ret;
|
6567
6599
|
},
|
6568
6600
|
|
@@ -6878,6 +6910,10 @@ LibraryManager.library = {
|
|
6878
6910
|
pthread_mutex_trylock: function() {
|
6879
6911
|
return 0;
|
6880
6912
|
},
|
6913
|
+
pthread_mutexattr_setpshared: function(attr, pshared) {
|
6914
|
+
// XXX implement if/when getpshared is required
|
6915
|
+
return 0;
|
6916
|
+
},
|
6881
6917
|
pthread_cond_init: function() {},
|
6882
6918
|
pthread_cond_destroy: function() {},
|
6883
6919
|
pthread_cond_broadcast: function() {
|
@@ -6946,7 +6982,7 @@ LibraryManager.library = {
|
|
6946
6982
|
|
6947
6983
|
pthread_setspecific__deps: ['$PTHREAD_SPECIFIC', '$ERRNO_CODES'],
|
6948
6984
|
pthread_setspecific: function(key, value) {
|
6949
|
-
if (
|
6985
|
+
if (!(key in PTHREAD_SPECIFIC)) {
|
6950
6986
|
return ERRNO_CODES.EINVAL;
|
6951
6987
|
}
|
6952
6988
|
PTHREAD_SPECIFIC[key] = value;
|
@@ -6973,6 +7009,10 @@ LibraryManager.library = {
|
|
6973
7009
|
_pthread_cleanup_push.level = __ATEXIT__.length;
|
6974
7010
|
},
|
6975
7011
|
|
7012
|
+
pthread_rwlock_init: function() {
|
7013
|
+
return 0; // XXX
|
7014
|
+
},
|
7015
|
+
|
6976
7016
|
// ==========================================================================
|
6977
7017
|
// malloc.h
|
6978
7018
|
// ==========================================================================
|
@@ -7314,6 +7354,7 @@ LibraryManager.library = {
|
|
7314
7354
|
// we're generating fake IP addresses with lookup_name that we can
|
7315
7355
|
// resolve later on with lookup_addr.
|
7316
7356
|
// We do the aliasing in 172.29.*.*, giving us 65536 possibilities.
|
7357
|
+
$DNS__deps: ['_inet_pton4_raw', '_inet_pton6_raw'],
|
7317
7358
|
$DNS: {
|
7318
7359
|
address_map: {
|
7319
7360
|
id: 1,
|
@@ -7321,7 +7362,6 @@ LibraryManager.library = {
|
|
7321
7362
|
names: {}
|
7322
7363
|
},
|
7323
7364
|
|
7324
|
-
lookup_name__deps: ['_inet_pton4_raw', '_inet_pton6_raw'],
|
7325
7365
|
lookup_name: function (name) {
|
7326
7366
|
// If the name is already a valid ipv4 / ipv6 address, don't generate a fake one.
|
7327
7367
|
var res = __inet_pton4_raw(name);
|
@@ -7412,6 +7452,9 @@ LibraryManager.library = {
|
|
7412
7452
|
|
7413
7453
|
getaddrinfo__deps: ['$Sockets', '$DNS', '_inet_pton4_raw', '_inet_ntop4_raw', '_inet_pton6_raw', '_inet_ntop6_raw', '_write_sockaddr', 'htonl'],
|
7414
7454
|
getaddrinfo: function(node, service, hint, out) {
|
7455
|
+
// Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL
|
7456
|
+
// hints are specified or ai_family set to AF_UNSPEC or ai_socktype or ai_protocol set to 0 then we
|
7457
|
+
// really should provide a linked list of suitable addrinfo values.
|
7415
7458
|
var addrs = [];
|
7416
7459
|
var canon = null;
|
7417
7460
|
var addr = 0;
|
@@ -7466,6 +7509,15 @@ LibraryManager.library = {
|
|
7466
7509
|
type = proto === {{{ cDefine('IPPROTO_UDP') }}} ? {{{ cDefine('SOCK_DGRAM') }}} : {{{ cDefine('SOCK_STREAM') }}};
|
7467
7510
|
}
|
7468
7511
|
|
7512
|
+
// If type or proto are set to zero in hints we should really be returning multiple addrinfo values, but for
|
7513
|
+
// now default to a TCP STREAM socket so we can at least return a sensible addrinfo given NULL hints.
|
7514
|
+
if (proto === 0) {
|
7515
|
+
proto = {{{ cDefine('IPPROTO_TCP') }}};
|
7516
|
+
}
|
7517
|
+
if (type === 0) {
|
7518
|
+
type = {{{ cDefine('SOCK_STREAM') }}};
|
7519
|
+
}
|
7520
|
+
|
7469
7521
|
if (!node && !service) {
|
7470
7522
|
return {{{ cDefine('EAI_NONAME') }}};
|
7471
7523
|
}
|
@@ -7473,14 +7525,14 @@ LibraryManager.library = {
|
|
7473
7525
|
{{{ cDefine('AI_NUMERICSERV') }}}|{{{ cDefine('AI_V4MAPPED') }}}|{{{ cDefine('AI_ALL') }}}|{{{ cDefine('AI_ADDRCONFIG') }}})) {
|
7474
7526
|
return {{{ cDefine('EAI_BADFLAGS') }}};
|
7475
7527
|
}
|
7476
|
-
if (({{{ makeGetValue('hint', C_STRUCTS.addrinfo.ai_flags, 'i32') }}} & {{{ cDefine('AI_CANONNAME') }}}) && !node) {
|
7528
|
+
if (hint !== 0 && ({{{ makeGetValue('hint', C_STRUCTS.addrinfo.ai_flags, 'i32') }}} & {{{ cDefine('AI_CANONNAME') }}}) && !node) {
|
7477
7529
|
return {{{ cDefine('EAI_BADFLAGS') }}};
|
7478
7530
|
}
|
7479
7531
|
if (flags & {{{ cDefine('AI_ADDRCONFIG') }}}) {
|
7480
7532
|
// TODO
|
7481
7533
|
return {{{ cDefine('EAI_NONAME') }}};
|
7482
7534
|
}
|
7483
|
-
if (type !== {{{ cDefine('SOCK_STREAM') }}} && type !== {{{ cDefine('SOCK_DGRAM') }}}) {
|
7535
|
+
if (type !== 0 && type !== {{{ cDefine('SOCK_STREAM') }}} && type !== {{{ cDefine('SOCK_DGRAM') }}}) {
|
7484
7536
|
return {{{ cDefine('EAI_SOCKTYPE') }}};
|
7485
7537
|
}
|
7486
7538
|
if (family !== {{{ cDefine('AF_UNSPEC') }}} && family !== {{{ cDefine('AF_INET') }}} && family !== {{{ cDefine('AF_INET6') }}}) {
|
@@ -7610,12 +7662,131 @@ LibraryManager.library = {
|
|
7610
7662
|
|
7611
7663
|
return 0;
|
7612
7664
|
},
|
7665
|
+
// Can't use a literal for $GAI_ERRNO_MESSAGES as was done for $ERRNO_MESSAGES as the keys (e.g. EAI_BADFLAGS)
|
7666
|
+
// are actually negative numbers and you can't have expressions as keys in JavaScript literals.
|
7667
|
+
$GAI_ERRNO_MESSAGES: {},
|
7613
7668
|
|
7669
|
+
gai_strerror__deps: ['$GAI_ERRNO_MESSAGES'],
|
7614
7670
|
gai_strerror: function(val) {
|
7615
|
-
|
7616
|
-
|
7671
|
+
var buflen = 256;
|
7672
|
+
|
7673
|
+
// On first call to gai_strerror we initialise the buffer and populate the error messages.
|
7674
|
+
if (!_gai_strerror.buffer) {
|
7675
|
+
_gai_strerror.buffer = _malloc(buflen);
|
7676
|
+
|
7677
|
+
GAI_ERRNO_MESSAGES['0'] = 'Success';
|
7678
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_BADFLAGS') }}}] = 'Invalid value for \'ai_flags\' field';
|
7679
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_NONAME') }}}] = 'NAME or SERVICE is unknown';
|
7680
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_AGAIN') }}}] = 'Temporary failure in name resolution';
|
7681
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_FAIL') }}}] = 'Non-recoverable failure in name res';
|
7682
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_FAMILY') }}}] = '\'ai_family\' not supported';
|
7683
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_SOCKTYPE') }}}] = '\'ai_socktype\' not supported';
|
7684
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_SERVICE') }}}] = 'SERVICE not supported for \'ai_socktype\'';
|
7685
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_MEMORY') }}}] = 'Memory allocation failure';
|
7686
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_SYSTEM') }}}] = 'System error returned in \'errno\'';
|
7687
|
+
GAI_ERRNO_MESSAGES['' + {{{ cDefine('EAI_OVERFLOW') }}}] = 'Argument buffer overflow';
|
7688
|
+
}
|
7689
|
+
|
7690
|
+
var msg = 'Unknown error';
|
7691
|
+
|
7692
|
+
if (val in GAI_ERRNO_MESSAGES) {
|
7693
|
+
if (GAI_ERRNO_MESSAGES[val].length > buflen - 1) {
|
7694
|
+
msg = 'Message too long'; // EMSGSIZE message. This should never occur given the GAI_ERRNO_MESSAGES above.
|
7695
|
+
} else {
|
7696
|
+
msg = GAI_ERRNO_MESSAGES[val];
|
7697
|
+
}
|
7698
|
+
}
|
7699
|
+
|
7700
|
+
writeAsciiToMemory(msg, _gai_strerror.buffer);
|
7701
|
+
return _gai_strerror.buffer;
|
7702
|
+
},
|
7703
|
+
|
7704
|
+
// Implement netdb.h protocol entry (getprotoent, getprotobyname, getprotobynumber, setprotoent, endprotoent)
|
7705
|
+
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/getprotobyname.html
|
7706
|
+
// The Protocols object holds our 'fake' protocols 'database'.
|
7707
|
+
$Protocols: {
|
7708
|
+
list: [],
|
7709
|
+
map: {}
|
7710
|
+
},
|
7711
|
+
setprotoent__deps: ['$Protocols'],
|
7712
|
+
setprotoent: function(stayopen) {
|
7713
|
+
// void setprotoent(int stayopen);
|
7714
|
+
|
7715
|
+
// Allocate and populate a protoent structure given a name, protocol number and array of aliases
|
7716
|
+
function allocprotoent(name, proto, aliases) {
|
7717
|
+
// write name into buffer
|
7718
|
+
var nameBuf = _malloc(name.length + 1);
|
7719
|
+
writeAsciiToMemory(name, nameBuf);
|
7720
|
+
|
7721
|
+
// write aliases into buffer
|
7722
|
+
var j = 0;
|
7723
|
+
var length = aliases.length;
|
7724
|
+
var aliasListBuf = _malloc((length + 1) * 4); // Use length + 1 so we have space for the terminating NULL ptr.
|
7725
|
+
|
7726
|
+
for (var i = 0; i < length; i++, j += 4) {
|
7727
|
+
var alias = aliases[i];
|
7728
|
+
var aliasBuf = _malloc(alias.length + 1);
|
7729
|
+
writeAsciiToMemory(alias, aliasBuf);
|
7730
|
+
{{{ makeSetValue('aliasListBuf', 'j', 'aliasBuf', 'i8*') }}};
|
7731
|
+
}
|
7732
|
+
{{{ makeSetValue('aliasListBuf', 'j', '0', 'i8*') }}}; // Terminating NULL pointer.
|
7733
|
+
|
7734
|
+
// generate protoent
|
7735
|
+
var pe = _malloc({{{ C_STRUCTS.protoent.__size__ }}});
|
7736
|
+
{{{ makeSetValue('pe', C_STRUCTS.protoent.p_name, 'nameBuf', 'i8*') }}};
|
7737
|
+
{{{ makeSetValue('pe', C_STRUCTS.protoent.p_aliases, 'aliasListBuf', 'i8**') }}};
|
7738
|
+
{{{ makeSetValue('pe', C_STRUCTS.protoent.p_proto, 'proto', 'i32') }}};
|
7739
|
+
return pe;
|
7740
|
+
};
|
7741
|
+
|
7742
|
+
// Populate the protocol 'database'. The entries are limited to tcp and udp, though it is fairly trivial
|
7743
|
+
// to add extra entries from /etc/protocols if desired - though not sure if that'd actually be useful.
|
7744
|
+
var list = Protocols.list;
|
7745
|
+
var map = Protocols.map;
|
7746
|
+
if (list.length === 0) {
|
7747
|
+
var entry = allocprotoent('tcp', 6, ['TCP']);
|
7748
|
+
list.push(entry);
|
7749
|
+
map['tcp'] = map['6'] = entry;
|
7750
|
+
entry = allocprotoent('udp', 17, ['UDP']);
|
7751
|
+
list.push(entry);
|
7752
|
+
map['udp'] = map['17'] = entry;
|
7753
|
+
}
|
7754
|
+
|
7755
|
+
_setprotoent.index = 0;
|
7756
|
+
},
|
7757
|
+
|
7758
|
+
endprotoent: function() {
|
7759
|
+
// void endprotoent(void);
|
7760
|
+
// We're not using a real protocol database so we don't do a real close.
|
7761
|
+
},
|
7762
|
+
|
7763
|
+
getprotoent__deps: ['setprotoent', '$Protocols'],
|
7764
|
+
getprotoent: function(number) {
|
7765
|
+
// struct protoent *getprotoent(void);
|
7766
|
+
// reads the next entry from the protocols 'database' or return NULL if 'eof'
|
7767
|
+
if (_setprotoent.index === Protocols.list.length) {
|
7768
|
+
return 0;
|
7769
|
+
} else {
|
7770
|
+
var result = Protocols.list[_setprotoent.index++];
|
7771
|
+
return result;
|
7617
7772
|
}
|
7618
|
-
|
7773
|
+
},
|
7774
|
+
|
7775
|
+
getprotobyname__deps: ['setprotoent', '$Protocols'],
|
7776
|
+
getprotobyname: function(name) {
|
7777
|
+
// struct protoent *getprotobyname(const char *);
|
7778
|
+
name = Pointer_stringify(name);
|
7779
|
+
_setprotoent(true);
|
7780
|
+
var result = Protocols.map[name];
|
7781
|
+
return result;
|
7782
|
+
},
|
7783
|
+
|
7784
|
+
getprotobynumber__deps: ['setprotoent', '$Protocols'],
|
7785
|
+
getprotobynumber: function(number) {
|
7786
|
+
// struct protoent *getprotobynumber(int proto);
|
7787
|
+
_setprotoent(true);
|
7788
|
+
var result = Protocols.map[number];
|
7789
|
+
return result;
|
7619
7790
|
},
|
7620
7791
|
|
7621
7792
|
// ==========================================================================
|
@@ -7683,7 +7854,7 @@ LibraryManager.library = {
|
|
7683
7854
|
var session = Module['webrtc']['session'];
|
7684
7855
|
var peer = new Peer(broker);
|
7685
7856
|
var listenOptions = Module['webrtc']['hostOptions'] || {};
|
7686
|
-
peer.onconnection = function(connection) {
|
7857
|
+
peer.onconnection = function peer_onconnection(connection) {
|
7687
7858
|
console.log('connected');
|
7688
7859
|
var addr;
|
7689
7860
|
/* If this peer is connecting to the host, assign 10.0.0.1 to the host so it can be
|
@@ -7697,7 +7868,7 @@ LibraryManager.library = {
|
|
7697
7868
|
}
|
7698
7869
|
connection['addr'] = addr;
|
7699
7870
|
Sockets.connections[addr] = connection;
|
7700
|
-
connection.ondisconnect = function() {
|
7871
|
+
connection.ondisconnect = function connection_ondisconnect() {
|
7701
7872
|
console.log('disconnect');
|
7702
7873
|
// Don't return the host address (10.0.0.1) to the pool
|
7703
7874
|
if (!(session && session === Sockets.connections[addr]['route'])) {
|
@@ -7709,12 +7880,12 @@ LibraryManager.library = {
|
|
7709
7880
|
Module['webrtc']['ondisconnect'](peer);
|
7710
7881
|
}
|
7711
7882
|
};
|
7712
|
-
connection.onerror = function(error) {
|
7883
|
+
connection.onerror = function connection_onerror(error) {
|
7713
7884
|
if (Module['webrtc']['onerror'] && 'function' === typeof Module['webrtc']['onerror']) {
|
7714
7885
|
Module['webrtc']['onerror'](error);
|
7715
7886
|
}
|
7716
7887
|
};
|
7717
|
-
connection.onmessage = function(label, message) {
|
7888
|
+
connection.onmessage = function connection_onmessage(label, message) {
|
7718
7889
|
if ('unreliable' === label) {
|
7719
7890
|
handleMessage(addr, message.data);
|
7720
7891
|
}
|
@@ -7724,13 +7895,13 @@ LibraryManager.library = {
|
|
7724
7895
|
Module['webrtc']['onconnect'](peer);
|
7725
7896
|
}
|
7726
7897
|
};
|
7727
|
-
peer.onpending = function(pending) {
|
7898
|
+
peer.onpending = function peer_onpending(pending) {
|
7728
7899
|
console.log('pending from: ', pending['route'], '; initiated by: ', (pending['incoming']) ? 'remote' : 'local');
|
7729
7900
|
};
|
7730
|
-
peer.onerror = function(error) {
|
7901
|
+
peer.onerror = function peer_onerror(error) {
|
7731
7902
|
console.error(error);
|
7732
7903
|
};
|
7733
|
-
peer.onroute = function(route) {
|
7904
|
+
peer.onroute = function peer_onroute(route) {
|
7734
7905
|
if (Module['webrtc']['onpeer'] && 'function' === typeof Module['webrtc']['onpeer']) {
|
7735
7906
|
Module['webrtc']['onpeer'](peer, route);
|
7736
7907
|
}
|
@@ -7746,7 +7917,7 @@ LibraryManager.library = {
|
|
7746
7917
|
console.log("unable to deliver message: ", addr, header[1], message);
|
7747
7918
|
}
|
7748
7919
|
}
|
7749
|
-
window.onbeforeunload = function() {
|
7920
|
+
window.onbeforeunload = function window_onbeforeunload() {
|
7750
7921
|
var ids = Object.keys(Sockets.connections);
|
7751
7922
|
ids.forEach(function(id) {
|
7752
7923
|
Sockets.connections[id].close();
|
@@ -7815,7 +7986,7 @@ LibraryManager.library = {
|
|
7815
7986
|
}
|
7816
7987
|
info.addr = Sockets.localAddr; // 10.0.0.254
|
7817
7988
|
info.host = __inet_ntop4_raw(info.addr);
|
7818
|
-
info.close = function() {
|
7989
|
+
info.close = function info_close() {
|
7819
7990
|
Sockets.portmap[info.port] = undefined;
|
7820
7991
|
}
|
7821
7992
|
Sockets.portmap[info.port] = info;
|
@@ -8181,7 +8352,7 @@ LibraryManager.library = {
|
|
8181
8352
|
},
|
8182
8353
|
|
8183
8354
|
accept__deps: ['$FS', '$SOCKFS', '$DNS', '$ERRNO_CODES', '__setErrNo', '_write_sockaddr'],
|
8184
|
-
accept: function(fd,
|
8355
|
+
accept: function(fd, addr, addrlen) {
|
8185
8356
|
var sock = SOCKFS.getSocket(fd);
|
8186
8357
|
if (!sock) {
|
8187
8358
|
___setErrNo(ERRNO_CODES.EBADF);
|
@@ -8189,7 +8360,7 @@ LibraryManager.library = {
|
|
8189
8360
|
}
|
8190
8361
|
try {
|
8191
8362
|
var newsock = sock.sock_ops.accept(sock);
|
8192
|
-
if (
|
8363
|
+
if (addr) {
|
8193
8364
|
var res = __write_sockaddr(addr, newsock.family, DNS.lookup_name(newsock.daddr), newsock.dport);
|
8194
8365
|
assert(!res.errno);
|
8195
8366
|
}
|
@@ -8547,7 +8718,13 @@ LibraryManager.library = {
|
|
8547
8718
|
return -1;
|
8548
8719
|
}
|
8549
8720
|
var arg = {{{ makeGetValue('varargs', '0', 'i32') }}};
|
8550
|
-
|
8721
|
+
|
8722
|
+
try {
|
8723
|
+
return FS.ioctl(stream, request, arg);
|
8724
|
+
} catch (e) {
|
8725
|
+
FS.handleFSError(e);
|
8726
|
+
return -1;
|
8727
|
+
}
|
8551
8728
|
},
|
8552
8729
|
#endif
|
8553
8730
|
|
@@ -8580,7 +8757,7 @@ LibraryManager.library = {
|
|
8580
8757
|
},
|
8581
8758
|
|
8582
8759
|
emscripten_run_script_string: function(ptr) {
|
8583
|
-
var s = eval(Pointer_stringify(ptr));
|
8760
|
+
var s = eval(Pointer_stringify(ptr)) + '';
|
8584
8761
|
var me = _emscripten_run_script_string;
|
8585
8762
|
if (!me.bufferSize || me.bufferSize < s.length+1) {
|
8586
8763
|
if (me.bufferSize) _free(me.buffer);
|
@@ -8614,12 +8791,120 @@ LibraryManager.library = {
|
|
8614
8791
|
},
|
8615
8792
|
|
8616
8793
|
emscripten_asm_const: function(code) {
|
8617
|
-
|
8618
|
-
|
8619
|
-
|
8620
|
-
|
8621
|
-
|
8622
|
-
|
8794
|
+
Runtime.getAsmConst(code, 0)();
|
8795
|
+
},
|
8796
|
+
|
8797
|
+
emscripten_asm_const_int__jsargs: true,
|
8798
|
+
emscripten_asm_const_int: function(code) {
|
8799
|
+
var args = Array.prototype.slice.call(arguments, 1);
|
8800
|
+
return Runtime.getAsmConst(code, args.length).apply(null, args) | 0;
|
8801
|
+
},
|
8802
|
+
|
8803
|
+
emscripten_asm_const_double__jsargs: true,
|
8804
|
+
emscripten_asm_const_double: function(code) {
|
8805
|
+
var args = Array.prototype.slice.call(arguments, 1);
|
8806
|
+
return +Runtime.getAsmConst(code, args.length).apply(null, args);
|
8807
|
+
},
|
8808
|
+
|
8809
|
+
emscripten_get_now: function() {
|
8810
|
+
if (!_emscripten_get_now.actual) {
|
8811
|
+
if (ENVIRONMENT_IS_NODE) {
|
8812
|
+
_emscripten_get_now.actual = function _emscripten_get_now_actual() {
|
8813
|
+
var t = process['hrtime']();
|
8814
|
+
return t[0] * 1e3 + t[1] / 1e6;
|
8815
|
+
}
|
8816
|
+
} else if (typeof dateNow !== 'undefined') {
|
8817
|
+
_emscripten_get_now.actual = dateNow;
|
8818
|
+
} else if (ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now']) {
|
8819
|
+
_emscripten_get_now.actual = function _emscripten_get_now_actual() { return window['performance']['now'](); };
|
8820
|
+
} else {
|
8821
|
+
_emscripten_get_now.actual = Date.now;
|
8822
|
+
}
|
8823
|
+
}
|
8824
|
+
return _emscripten_get_now.actual();
|
8825
|
+
},
|
8826
|
+
|
8827
|
+
emscripten_get_now_res: function() { // return resolution of get_now, in nanoseconds
|
8828
|
+
if (ENVIRONMENT_IS_NODE) {
|
8829
|
+
return 1; // nanoseconds
|
8830
|
+
} else if (typeof dateNow !== 'undefined' ||
|
8831
|
+
(ENVIRONMENT_IS_WEB && window['performance'] && window['performance']['now'])) {
|
8832
|
+
return 1000; // microseconds (1/1000 of a millisecond)
|
8833
|
+
} else {
|
8834
|
+
return 1000*1000; // milliseconds
|
8835
|
+
}
|
8836
|
+
},
|
8837
|
+
|
8838
|
+
//============================
|
8839
|
+
// emscripten vector ops
|
8840
|
+
//============================
|
8841
|
+
|
8842
|
+
emscripten_float32x4_signmask__inline: function(a) {
|
8843
|
+
return 'SIMD.float32x4.bitsToInt32x4(' + a + ').signMask';
|
8844
|
+
},
|
8845
|
+
|
8846
|
+
emscripten_float32x4_min__inline: function(a, b) {
|
8847
|
+
return 'SIMD.float32x4.min(' + a + ', ' + b + ')';
|
8848
|
+
},
|
8849
|
+
|
8850
|
+
emscripten_float32x4_max__inline: function(a, b) {
|
8851
|
+
return 'SIMD.float32x4.max(' + a + ', ' + b + ')';
|
8852
|
+
},
|
8853
|
+
|
8854
|
+
emscripten_float32x4_sqrt__inline: function(a) {
|
8855
|
+
return 'SIMD.float32x4.sqrt(' + a + ')';
|
8856
|
+
},
|
8857
|
+
|
8858
|
+
emscripten_float32x4_lessThan__inline: function(a, b) {
|
8859
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.float32x4.lessThan(' + a + ', ' + b + '))';
|
8860
|
+
},
|
8861
|
+
|
8862
|
+
emscripten_float32x4_lessThanOrEqual__inline: function(a, b) {
|
8863
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.float32x4.lessThanOrEqual(' + a + ', ' + b + '))';
|
8864
|
+
},
|
8865
|
+
|
8866
|
+
emscripten_float32x4_equal__inline: function(a, b) {
|
8867
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.float32x4.equal(' + a + ', ' + b + '))';
|
8868
|
+
},
|
8869
|
+
|
8870
|
+
emscripten_float32x4_greaterThanOrEqual__inline: function(a, b) {
|
8871
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.float32x4.greaterThanOrEqual(' + a + ', ' + b + '))';
|
8872
|
+
},
|
8873
|
+
|
8874
|
+
emscripten_float32x4_greaterThan__inline: function(a, b) {
|
8875
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.float32x4.greaterThan(' + a + ', ' + b + '))';
|
8876
|
+
},
|
8877
|
+
|
8878
|
+
emscripten_float32x4_and__inline: function(a, b) {
|
8879
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.and(SIMD.float32x4.bitsToInt32x4(' + a + '), SIMD.float32x4.bitsToInt32x4(' + b + ')))';
|
8880
|
+
},
|
8881
|
+
|
8882
|
+
emscripten_float32x4_andNot__inline: function(a, b) {
|
8883
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.and(SIMD.int32x4.not(SIMD.float32x4.bitsToInt32x4(' + a + ')), SIMD.float32x4.bitsToInt32x4(' + b + ')))';
|
8884
|
+
},
|
8885
|
+
|
8886
|
+
emscripten_float32x4_or__inline: function(a, b) {
|
8887
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.or(SIMD.float32x4.bitsToInt32x4(' + a + '), SIMD.float32x4.bitsToInt32x4(' + b + ')))';
|
8888
|
+
},
|
8889
|
+
|
8890
|
+
emscripten_float32x4_xor__inline: function(a, b) {
|
8891
|
+
return 'SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.xor(SIMD.float32x4.bitsToInt32x4(' + a + '), SIMD.float32x4.bitsToInt32x4(' + b + ')))';
|
8892
|
+
},
|
8893
|
+
|
8894
|
+
emscripten_int32x4_bitsToFloat32x4__inline: function(a) {
|
8895
|
+
return 'SIMD.int32x4.bitsToFloat32x4(' + a + ')';
|
8896
|
+
},
|
8897
|
+
|
8898
|
+
emscripten_int32x4_toFloat32x4__inline: function(a) {
|
8899
|
+
return 'SIMD.int32x4.toFloat32x4(' + a + ')';
|
8900
|
+
},
|
8901
|
+
|
8902
|
+
emscripten_float32x4_bitsToInt32x4__inline: function(a) {
|
8903
|
+
return 'SIMD.float32x4.bitsToInt32x4(' + a + ')';
|
8904
|
+
},
|
8905
|
+
|
8906
|
+
emscripten_float32x4_toInt32x4__inline: function(a) {
|
8907
|
+
return 'SIMD.float32x4.toInt32x4(' + a + ')';
|
8623
8908
|
},
|
8624
8909
|
|
8625
8910
|
//============================
|
@@ -8718,6 +9003,6 @@ function autoAddDeps(object, name) {
|
|
8718
9003
|
|
8719
9004
|
// Add aborting stubs for various libc stuff needed by libc++
|
8720
9005
|
['pthread_cond_signal', 'pthread_equal', 'wcstol', 'wcstoll', 'wcstoul', 'wcstoull', 'wcstof', 'wcstod', 'wcstold', 'pthread_join', 'pthread_detach', 'catgets', 'catopen', 'catclose', 'fputwc', '__lockfile', '__unlockfile'].forEach(function(aborter) {
|
8721
|
-
LibraryManager.library[aborter] = function() { throw 'TODO: ' + aborter };
|
9006
|
+
LibraryManager.library[aborter] = function aborting_stub() { throw 'TODO: ' + aborter };
|
8722
9007
|
});
|
8723
9008
|
|