webruby 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/webruby/rake/mruby.rake +1 -0
- data/modules/emscripten/AUTHORS +7 -0
- data/modules/emscripten/LICENSE +26 -0
- data/modules/emscripten/emcc +58 -20
- data/modules/emscripten/emlink.py +2 -265
- data/modules/emscripten/emscripten.py +38 -18
- data/modules/emscripten/scons-tools/emscripten.py +11 -6
- data/modules/emscripten/scons-tools/llvm.py +4 -3
- data/modules/emscripten/src/analyzer.js +32 -13
- data/modules/emscripten/src/embind/embind.js +13 -13
- data/modules/emscripten/src/embind/emval.js +8 -7
- data/modules/emscripten/src/intertyper.js +10 -0
- data/modules/emscripten/src/jsifier.js +28 -6
- data/modules/emscripten/src/library.js +2949 -1322
- data/modules/emscripten/src/library_browser.js +27 -23
- data/modules/emscripten/src/library_egl.js +7 -2
- data/modules/emscripten/src/library_gl.js +15 -2
- data/modules/emscripten/src/library_glut.js +1 -1
- data/modules/emscripten/src/library_jansson.js +1 -1
- data/modules/emscripten/src/library_openal.js +464 -132
- data/modules/emscripten/src/library_path.js +134 -0
- data/modules/emscripten/src/library_sdl.js +222 -50
- data/modules/emscripten/src/modules.js +22 -5
- data/modules/emscripten/src/parseTools.js +13 -2
- data/modules/emscripten/src/postamble.js +60 -34
- data/modules/emscripten/src/preamble.js +67 -18
- data/modules/emscripten/src/relooper/Relooper.cpp +1 -1
- data/modules/emscripten/src/runtime.js +12 -2
- data/modules/emscripten/src/settings.js +869 -826
- data/modules/emscripten/src/shell.js +63 -51
- data/modules/emscripten/src/utility.js +6 -0
- data/modules/emscripten/system/include/bsd/sys/mman.h +1 -1
- data/modules/emscripten/system/include/emscripten/bind.h +28 -28
- data/modules/emscripten/system/include/libc/math.h +8 -0
- data/modules/emscripten/system/include/libc/sys/signal.h +3 -1
- data/modules/emscripten/system/include/libc/sys/stat.h +2 -1
- data/modules/emscripten/system/include/libc/sys/types.h +4 -0
- data/modules/emscripten/system/include/libcxx/CREDITS.TXT +24 -0
- data/modules/emscripten/system/include/libcxx/__bit_reference +27 -8
- data/modules/emscripten/system/include/libcxx/__config +62 -15
- data/modules/emscripten/system/include/libcxx/__debug +5 -1
- data/modules/emscripten/system/include/libcxx/__functional_03 +24 -24
- data/modules/emscripten/system/include/libcxx/__functional_base +22 -4
- data/modules/emscripten/system/include/libcxx/__hash_table +566 -54
- data/modules/emscripten/system/include/libcxx/__locale +11 -3
- data/modules/emscripten/system/include/libcxx/__split_buffer +6 -6
- data/modules/emscripten/system/include/libcxx/__std_stream +58 -30
- data/modules/emscripten/system/include/libcxx/__tree +58 -51
- data/modules/emscripten/system/include/libcxx/__tuple +9 -9
- data/modules/emscripten/system/include/libcxx/algorithm +223 -13
- data/modules/emscripten/system/include/libcxx/array +18 -17
- data/modules/emscripten/system/include/libcxx/atomic +15 -5
- data/modules/emscripten/system/include/libcxx/cctype +2 -2
- data/modules/emscripten/system/include/libcxx/chrono +131 -36
- data/modules/emscripten/system/include/libcxx/cmath +41 -36
- data/modules/emscripten/system/include/libcxx/complex +49 -49
- data/modules/emscripten/system/include/libcxx/cstdio +2 -2
- data/modules/emscripten/system/include/libcxx/cstdlib +5 -5
- data/modules/emscripten/system/include/libcxx/cstring +2 -2
- data/modules/emscripten/system/include/libcxx/cwchar +22 -13
- data/modules/emscripten/system/include/libcxx/deque +27 -14
- data/modules/emscripten/system/include/libcxx/forward_list +36 -35
- data/modules/emscripten/system/include/libcxx/fstream +16 -0
- data/modules/emscripten/system/include/libcxx/functional +348 -23
- data/modules/emscripten/system/include/libcxx/future +66 -0
- data/modules/emscripten/system/include/libcxx/ios +27 -0
- data/modules/emscripten/system/include/libcxx/istream +2 -4
- data/modules/emscripten/system/include/libcxx/iterator +17 -9
- data/modules/emscripten/system/include/libcxx/limits +2 -2
- data/modules/emscripten/system/include/libcxx/list +165 -105
- data/modules/emscripten/system/include/libcxx/locale +154 -43
- data/modules/emscripten/system/include/libcxx/map +165 -224
- data/modules/emscripten/system/include/libcxx/memory +113 -54
- data/modules/emscripten/system/include/libcxx/random +2 -29
- data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/include/libcxx/regex +60 -15
- data/modules/emscripten/system/include/libcxx/sstream +124 -40
- data/modules/emscripten/system/include/libcxx/string +345 -182
- data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +3 -3
- data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -2
- data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +3 -3
- data/modules/emscripten/system/include/libcxx/support/win32/support.h +10 -11
- data/modules/emscripten/system/include/libcxx/thread +2 -2
- data/modules/emscripten/system/include/libcxx/tuple +134 -65
- data/modules/emscripten/system/include/libcxx/type_traits +232 -24
- data/modules/emscripten/system/include/libcxx/unordered_map +314 -161
- data/modules/emscripten/system/include/libcxx/unordered_set +160 -2
- data/modules/emscripten/system/include/libcxx/utility +225 -40
- data/modules/emscripten/system/include/libcxx/vector +52 -57
- data/modules/emscripten/system/include/net/if.h +20 -1
- data/modules/emscripten/system/include/net/netinet/in.h +69 -5
- data/modules/emscripten/system/include/netdb.h +36 -0
- data/modules/emscripten/system/include/sys/ioctl.h +55 -3
- data/modules/emscripten/system/include/sys/select.h +2 -0
- data/modules/emscripten/system/include/sys/sendfile.h +16 -0
- data/modules/emscripten/system/include/sys/socket.h +181 -35
- data/modules/emscripten/system/lib/dlmalloc.c +10 -12
- data/modules/emscripten/system/lib/libc/musl/src/stdlib/ecvt.c +19 -0
- data/modules/emscripten/system/lib/libc/musl/src/stdlib/fcvt.c +25 -0
- data/modules/emscripten/system/lib/libc/musl/src/stdlib/gcvt.c +8 -0
- data/modules/emscripten/system/lib/libcextra.symbols +3 -0
- data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +24 -0
- data/modules/emscripten/system/lib/libcxx/debug.cpp +11 -9
- data/modules/emscripten/system/lib/libcxx/exception.cpp +9 -0
- data/modules/emscripten/system/lib/libcxx/hash.cpp +6 -0
- data/modules/emscripten/system/lib/libcxx/iostream.cpp +4 -4
- data/modules/emscripten/system/lib/libcxx/locale.cpp +91 -42
- data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +1 -1
- data/modules/emscripten/system/lib/libcxx/string.cpp +332 -491
- data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +4 -2
- data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +140 -41
- data/modules/emscripten/system/lib/libcxx/symbols +9 -256
- data/modules/emscripten/system/lib/libcxx/system_error.cpp +3 -0
- data/modules/emscripten/system/lib/libcxx/thread.cpp +16 -3
- data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +12 -2
- data/modules/emscripten/third_party/stb_image.c +4673 -0
- data/modules/emscripten/tools/asm_module.py +273 -0
- data/modules/emscripten/tools/exec_llvm.py +2 -2
- data/modules/emscripten/tools/file_packager.py +36 -16
- data/modules/emscripten/tools/find_bigfuncs.py +9 -9
- data/modules/emscripten/tools/js-optimizer.js +485 -131
- data/modules/emscripten/tools/js_optimizer.py +22 -15
- data/modules/emscripten/tools/merge_asm.py +26 -0
- data/modules/emscripten/tools/nativize_llvm.py +2 -2
- data/modules/emscripten/tools/settings_template_readonly.py +1 -1
- data/modules/emscripten/tools/shared.py +63 -20
- data/modules/emscripten/tools/split_asm.py +30 -0
- data/modules/emscripten/tools/test-js-optimizer-asm-outline1-output.js +686 -0
- data/modules/emscripten/tools/test-js-optimizer-asm-outline1.js +263 -0
- data/modules/emscripten/tools/test-js-optimizer-asm-outline2-output.js +747 -0
- data/modules/emscripten/tools/{test-js-optimizer-asm-outline.js → test-js-optimizer-asm-outline2.js} +1 -1
- data/modules/emscripten/tools/test-js-optimizer-asm-outline3-output.js +28 -0
- data/modules/emscripten/tools/test-js-optimizer-asm-outline3.js +30 -0
- data/modules/emscripten/tools/test-js-optimizer-asm-pre-output.js +4 -4
- data/modules/mruby/AUTHORS +1 -0
- data/modules/mruby/README.md +4 -2
- data/modules/mruby/build_config.rb +6 -6
- data/modules/mruby/doc/mrbgems/README.md +4 -4
- data/modules/mruby/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +1 -1
- data/modules/mruby/examples/mrbgems/c_extension_example/mrbgem.rake +1 -1
- data/modules/mruby/examples/mrbgems/ruby_extension_example/mrbgem.rake +1 -1
- data/modules/mruby/include/mrbconf.h +3 -0
- data/modules/mruby/include/mruby/array.h +2 -2
- data/modules/mruby/include/mruby/class.h +4 -4
- data/modules/mruby/include/mruby/compile.h +1 -0
- data/modules/mruby/include/mruby/data.h +1 -1
- data/modules/mruby/include/mruby/hash.h +2 -2
- data/modules/mruby/include/mruby/irep.h +3 -2
- data/modules/mruby/include/mruby/proc.h +1 -1
- data/modules/mruby/include/mruby/range.h +1 -1
- data/modules/mruby/include/mruby/string.h +2 -2
- data/modules/mruby/include/mruby/value.h +43 -26
- data/modules/mruby/include/mruby.h +10 -2
- data/modules/mruby/minirake +2 -2
- data/modules/mruby/mrbgems/mruby-array-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +4 -1
- data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +32 -0
- data/modules/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +13 -5
- data/modules/mruby/mrbgems/mruby-enum-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-enum-ext/test/enum.rb +10 -11
- data/modules/mruby/mrbgems/mruby-eval/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-exit/mrbgem.rake +4 -0
- data/modules/mruby/mrbgems/mruby-exit/src/mruby-exit.c +24 -0
- data/modules/mruby/mrbgems/mruby-fiber/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +4 -2
- data/modules/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-hash-ext/test/hash.rb +5 -7
- data/modules/mruby/mrbgems/mruby-math/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-numeric-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +2 -2
- data/modules/mruby/mrbgems/mruby-object-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-object-ext/src/object.c +3 -3
- data/modules/mruby/mrbgems/mruby-object-ext/test/nil.rb +3 -3
- data/modules/mruby/mrbgems/mruby-object-ext/test/object.rb +1 -1
- data/modules/mruby/mrbgems/mruby-objectspace/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +36 -37
- data/modules/mruby/mrbgems/mruby-print/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-proc-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-proc-ext/test/proc.rb +8 -8
- data/modules/mruby/mrbgems/mruby-random/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-range-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-range-ext/test/range.rb +6 -6
- data/modules/mruby/mrbgems/mruby-sprintf/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-string-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-string-ext/test/string.rb +6 -6
- data/modules/mruby/mrbgems/mruby-struct/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-symbol-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +2 -2
- data/modules/mruby/mrbgems/mruby-time/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-time/src/time.c +2 -8
- data/modules/mruby/mrbgems/mruby-toplevel-ext/mrbgem.rake +1 -1
- data/modules/mruby/mrbgems/mruby-toplevel-ext/test/toplevel.rb +10 -10
- data/modules/mruby/mrblib/class.rb +15 -9
- data/modules/mruby/mrblib/string.rb +12 -0
- data/modules/mruby/src/array.c +4 -3
- data/modules/mruby/src/class.c +13 -8
- data/modules/mruby/src/codegen.c +9 -8
- data/modules/mruby/src/error.c +7 -5
- data/modules/mruby/src/error.h +1 -0
- data/modules/mruby/src/etc.c +1 -1
- data/modules/mruby/src/gc.c +163 -128
- data/modules/mruby/src/kernel.c +43 -15
- data/modules/mruby/src/numeric.c +9 -7
- data/modules/mruby/src/object.c +1 -1
- data/modules/mruby/src/parse.y +37 -19
- data/modules/mruby/src/range.c +10 -24
- data/modules/mruby/src/state.c +2 -6
- data/modules/mruby/src/string.c +0 -9
- data/modules/mruby/src/variable.c +2 -2
- data/modules/mruby/src/vm.c +12 -6
- data/modules/mruby/tasks/mrbgem_spec.rake +7 -0
- data/modules/mruby/tasks/mrbgems.rake +2 -1
- data/modules/mruby/tasks/mrbgems_test.rake +1 -1
- data/modules/mruby/tasks/mruby_build.rake +4 -3
- data/modules/mruby/tasks/mruby_build_commands.rake +6 -1
- data/modules/mruby/tasks/mruby_build_gem.rake +2 -2
- data/modules/mruby/tasks/toolchains/androideabi.rake +2 -0
- data/modules/mruby/test/assert.rb +2 -2
- data/modules/mruby/test/t/argumenterror.rb +3 -3
- data/modules/mruby/test/t/array.rb +55 -55
- data/modules/mruby/test/t/basicobject.rb +1 -1
- data/modules/mruby/test/t/bs_block.rb +12 -12
- data/modules/mruby/test/t/class.rb +21 -21
- data/modules/mruby/test/t/enumerable.rb +18 -18
- data/modules/mruby/test/t/exception.rb +20 -20
- data/modules/mruby/test/t/false.rb +3 -3
- data/modules/mruby/test/t/float.rb +40 -40
- data/modules/mruby/test/t/gc.rb +10 -10
- data/modules/mruby/test/t/hash.rb +41 -41
- data/modules/mruby/test/t/indexerror.rb +2 -2
- data/modules/mruby/test/t/integer.rb +41 -41
- data/modules/mruby/test/t/kernel.rb +33 -33
- data/modules/mruby/test/t/literals.rb +82 -82
- data/modules/mruby/test/t/localjumperror.rb +1 -1
- data/modules/mruby/test/t/module.rb +170 -31
- data/modules/mruby/test/t/nameerror.rb +5 -5
- data/modules/mruby/test/t/nil.rb +2 -2
- data/modules/mruby/test/t/nomethoderror.rb +1 -1
- data/modules/mruby/test/t/numeric.rb +5 -5
- data/modules/mruby/test/t/object.rb +2 -2
- data/modules/mruby/test/t/proc.rb +8 -8
- data/modules/mruby/test/t/range.rb +9 -9
- data/modules/mruby/test/t/rangeerror.rb +2 -2
- data/modules/mruby/test/t/runtimeerror.rb +1 -1
- data/modules/mruby/test/t/standarderror.rb +2 -2
- data/modules/mruby/test/t/string.rb +100 -100
- data/modules/mruby/test/t/symbol.rb +5 -5
- data/modules/mruby/test/t/syntax.rb +15 -6
- data/modules/mruby/test/t/true.rb +3 -3
- data/modules/mruby/test/t/typeerror.rb +2 -2
- data/modules/mruby/tools/mrbc/mrbc.c +10 -4
- data/modules/mruby/travis_config.rb +1 -0
- data/scripts/gen_gems_config.rb +5 -1
- metadata +19 -4
- data/modules/emscripten/tools/test-js-optimizer-asm-outline-output.js +0 -570
@@ -0,0 +1,134 @@
|
|
1
|
+
mergeInto(LibraryManager.library, {
|
2
|
+
$PATH__deps: ['$FS'],
|
3
|
+
$PATH: {
|
4
|
+
// split a filename into [root, dir, basename, ext], unix version
|
5
|
+
// 'root' is just a slash, or nothing.
|
6
|
+
splitPath: function(filename) {
|
7
|
+
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
|
8
|
+
return splitPathRe.exec(filename).slice(1);
|
9
|
+
},
|
10
|
+
normalizeArray: function(parts, allowAboveRoot) {
|
11
|
+
// if the path tries to go above the root, `up` ends up > 0
|
12
|
+
var up = 0;
|
13
|
+
for (var i = parts.length - 1; i >= 0; i--) {
|
14
|
+
var last = parts[i];
|
15
|
+
if (last === '.') {
|
16
|
+
parts.splice(i, 1);
|
17
|
+
} else if (last === '..') {
|
18
|
+
parts.splice(i, 1);
|
19
|
+
up++;
|
20
|
+
} else if (up) {
|
21
|
+
parts.splice(i, 1);
|
22
|
+
up--;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
// if the path is allowed to go above the root, restore leading ..s
|
26
|
+
if (allowAboveRoot) {
|
27
|
+
for (; up--; up) {
|
28
|
+
parts.unshift('..');
|
29
|
+
}
|
30
|
+
}
|
31
|
+
return parts;
|
32
|
+
},
|
33
|
+
normalize: function(path) {
|
34
|
+
var isAbsolute = path.charAt(0) === '/',
|
35
|
+
trailingSlash = path.substr(-1) === '/';
|
36
|
+
// Normalize the path
|
37
|
+
path = PATH.normalizeArray(path.split('/').filter(function(p) {
|
38
|
+
return !!p;
|
39
|
+
}), !isAbsolute).join('/');
|
40
|
+
if (!path && !isAbsolute) {
|
41
|
+
path = '.';
|
42
|
+
}
|
43
|
+
if (path && trailingSlash) {
|
44
|
+
path += '/';
|
45
|
+
}
|
46
|
+
return (isAbsolute ? '/' : '') + path;
|
47
|
+
},
|
48
|
+
dirname: function(path) {
|
49
|
+
var result = PATH.splitPath(path),
|
50
|
+
root = result[0],
|
51
|
+
dir = result[1];
|
52
|
+
if (!root && !dir) {
|
53
|
+
// No dirname whatsoever
|
54
|
+
return '.';
|
55
|
+
}
|
56
|
+
if (dir) {
|
57
|
+
// It has a dirname, strip trailing slash
|
58
|
+
dir = dir.substr(0, dir.length - 1);
|
59
|
+
}
|
60
|
+
return root + dir;
|
61
|
+
},
|
62
|
+
basename: function(path, ext) {
|
63
|
+
// EMSCRIPTEN return '/'' for '/', not an empty string
|
64
|
+
if (path === '/') return '/';
|
65
|
+
var f = PATH.splitPath(path)[2];
|
66
|
+
if (ext && f.substr(-1 * ext.length) === ext) {
|
67
|
+
f = f.substr(0, f.length - ext.length);
|
68
|
+
}
|
69
|
+
return f;
|
70
|
+
},
|
71
|
+
join: function() {
|
72
|
+
var paths = Array.prototype.slice.call(arguments, 0);
|
73
|
+
return PATH.normalize(paths.filter(function(p, index) {
|
74
|
+
if (typeof p !== 'string') {
|
75
|
+
throw new TypeError('Arguments to path.join must be strings');
|
76
|
+
}
|
77
|
+
return p;
|
78
|
+
}).join('/'));
|
79
|
+
},
|
80
|
+
resolve: function() {
|
81
|
+
var resolvedPath = '',
|
82
|
+
resolvedAbsolute = false;
|
83
|
+
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
84
|
+
var path = (i >= 0) ? arguments[i] : FS.cwd();
|
85
|
+
// Skip empty and invalid entries
|
86
|
+
if (typeof path !== 'string') {
|
87
|
+
throw new TypeError('Arguments to path.resolve must be strings');
|
88
|
+
} else if (!path) {
|
89
|
+
continue;
|
90
|
+
}
|
91
|
+
resolvedPath = path + '/' + resolvedPath;
|
92
|
+
resolvedAbsolute = path.charAt(0) === '/';
|
93
|
+
}
|
94
|
+
// At this point the path should be resolved to a full absolute path, but
|
95
|
+
// handle relative paths to be safe (might happen when process.cwd() fails)
|
96
|
+
resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
|
97
|
+
return !!p;
|
98
|
+
}), !resolvedAbsolute).join('/');
|
99
|
+
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
|
100
|
+
},
|
101
|
+
relative: function(from, to) {
|
102
|
+
from = PATH.resolve(from).substr(1);
|
103
|
+
to = PATH.resolve(to).substr(1);
|
104
|
+
function trim(arr) {
|
105
|
+
var start = 0;
|
106
|
+
for (; start < arr.length; start++) {
|
107
|
+
if (arr[start] !== '') break;
|
108
|
+
}
|
109
|
+
var end = arr.length - 1;
|
110
|
+
for (; end >= 0; end--) {
|
111
|
+
if (arr[end] !== '') break;
|
112
|
+
}
|
113
|
+
if (start > end) return [];
|
114
|
+
return arr.slice(start, end - start + 1);
|
115
|
+
}
|
116
|
+
var fromParts = trim(from.split('/'));
|
117
|
+
var toParts = trim(to.split('/'));
|
118
|
+
var length = Math.min(fromParts.length, toParts.length);
|
119
|
+
var samePartsLength = length;
|
120
|
+
for (var i = 0; i < length; i++) {
|
121
|
+
if (fromParts[i] !== toParts[i]) {
|
122
|
+
samePartsLength = i;
|
123
|
+
break;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
var outputParts = [];
|
127
|
+
for (var i = samePartsLength; i < fromParts.length; i++) {
|
128
|
+
outputParts.push('..');
|
129
|
+
}
|
130
|
+
outputParts = outputParts.concat(toParts.slice(samePartsLength));
|
131
|
+
return outputParts.join('/');
|
132
|
+
}
|
133
|
+
}
|
134
|
+
});
|
@@ -10,7 +10,7 @@
|
|
10
10
|
// or otherwise).
|
11
11
|
|
12
12
|
var LibrarySDL = {
|
13
|
-
$SDL__deps: ['$FS', '$Browser'],
|
13
|
+
$SDL__deps: ['$FS', '$PATH', '$Browser'],
|
14
14
|
$SDL: {
|
15
15
|
defaults: {
|
16
16
|
width: 320,
|
@@ -28,6 +28,7 @@ var LibrarySDL = {
|
|
28
28
|
|
29
29
|
// The currently preloaded audio elements ready to be played
|
30
30
|
audios: [null],
|
31
|
+
rwops: [null],
|
31
32
|
// The currently playing audio element. There's only one music track.
|
32
33
|
music: {
|
33
34
|
audio: null,
|
@@ -275,6 +276,8 @@ var LibrarySDL = {
|
|
275
276
|
{{{ makeSetValue('surf+Runtime.QUANTUM_SIZE*5', '0', 'buffer', 'void*') }}} // SDL_Surface.pixels
|
276
277
|
{{{ makeSetValue('surf+Runtime.QUANTUM_SIZE*6', '0', '0', 'i32*') }}} // SDL_Surface.offset
|
277
278
|
|
279
|
+
{{{ makeSetValue('surf+Runtime.QUANTUM_SIZE*14', '0', '1', 'i32') }}}
|
280
|
+
|
278
281
|
{{{ makeSetValue('pixelFormat + SDL.structs.PixelFormat.format', '0', '-2042224636', 'i32') }}} // SDL_PIXELFORMAT_RGBA8888
|
279
282
|
{{{ makeSetValue('pixelFormat + SDL.structs.PixelFormat.palette', '0', '0', 'i32') }}} // TODO
|
280
283
|
{{{ makeSetValue('pixelFormat + SDL.structs.PixelFormat.BitsPerPixel', '0', 'bpp * 8', 'i8') }}}
|
@@ -315,7 +318,7 @@ var LibrarySDL = {
|
|
315
318
|
usePageCanvas: usePageCanvas,
|
316
319
|
source: source,
|
317
320
|
|
318
|
-
isFlagSet: function
|
321
|
+
isFlagSet: function(flag) {
|
319
322
|
return flags & flag;
|
320
323
|
}
|
321
324
|
};
|
@@ -361,6 +364,13 @@ var LibrarySDL = {
|
|
361
364
|
},
|
362
365
|
|
363
366
|
freeSurface: function(surf) {
|
367
|
+
var refcountPointer = surf + Runtime.QUANTUM_SIZE * 14;
|
368
|
+
var refcount = {{{ makeGetValue('refcountPointer', '0', 'i32') }}};
|
369
|
+
if (refcount > 1) {
|
370
|
+
{{{ makeSetValue('refcountPointer', '0', 'refcount - 1', 'i32') }}};
|
371
|
+
return;
|
372
|
+
}
|
373
|
+
|
364
374
|
var info = SDL.surfaces[surf];
|
365
375
|
if (!info.usePageCanvas && info.canvas) SDL.canvasPool.push(info.canvas);
|
366
376
|
_free(info.buffer);
|
@@ -939,7 +949,10 @@ var LibrarySDL = {
|
|
939
949
|
// TODO
|
940
950
|
},
|
941
951
|
|
942
|
-
SDL_GetKeyboardState: function() {
|
952
|
+
SDL_GetKeyboardState: function(numKeys) {
|
953
|
+
if (numKeys) {
|
954
|
+
{{{ makeSetValue('numKeys', 0, 0x10000, 'i32') }}};
|
955
|
+
}
|
943
956
|
return SDL.keyboardState;
|
944
957
|
},
|
945
958
|
|
@@ -1096,7 +1109,11 @@ var LibrarySDL = {
|
|
1096
1109
|
return ret;
|
1097
1110
|
},
|
1098
1111
|
|
1112
|
+
rotozoomSurface__deps: ['zoomSurface'],
|
1099
1113
|
rotozoomSurface: function(src, angle, zoom, smooth) {
|
1114
|
+
if (angle % 360 === 0) {
|
1115
|
+
return _zoomSurface(src, zoom, zoom, smooth);
|
1116
|
+
}
|
1100
1117
|
var srcData = SDL.surfaces[src];
|
1101
1118
|
var w = srcData.width * zoom;
|
1102
1119
|
var h = srcData.height * zoom;
|
@@ -1221,42 +1238,131 @@ var LibrarySDL = {
|
|
1221
1238
|
return flags; // We support JPG, PNG, TIF because browsers do
|
1222
1239
|
},
|
1223
1240
|
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1241
|
+
IMG_Load_RW__deps: ['SDL_LockSurface', 'SDL_FreeRW'],
|
1242
|
+
IMG_Load_RW: function(rwopsID, freeSrc) {
|
1243
|
+
try {
|
1244
|
+
// stb_image integration support
|
1245
|
+
var cleanup = function() {
|
1246
|
+
if (rwops && freeSrc) _SDL_FreeRW(rwopsID);
|
1247
|
+
};
|
1248
|
+
function addCleanup(func) {
|
1249
|
+
var old = cleanup;
|
1250
|
+
cleanup = function() {
|
1251
|
+
old();
|
1252
|
+
func();
|
1253
|
+
}
|
1254
|
+
}
|
1255
|
+
function callStbImage(func, params) {
|
1256
|
+
var x = Module['_malloc']({{{ QUANTUM_SIZE }}});
|
1257
|
+
var y = Module['_malloc']({{{ QUANTUM_SIZE }}});
|
1258
|
+
var comp = Module['_malloc']({{{ QUANTUM_SIZE }}});
|
1259
|
+
addCleanup(function() {
|
1260
|
+
Module['_free'](x);
|
1261
|
+
Module['_free'](y);
|
1262
|
+
Module['_free'](comp);
|
1263
|
+
if (data) Module['_stbi_image_free'](data);
|
1264
|
+
});
|
1265
|
+
var data = Module['_' + func].apply(null, params.concat([x, y, comp, 0]));
|
1266
|
+
if (!data) return null;
|
1267
|
+
return {
|
1268
|
+
rawData: true,
|
1269
|
+
data: data,
|
1270
|
+
width: {{{ makeGetValue('x', 0, 'i32') }}},
|
1271
|
+
height: {{{ makeGetValue('y', 0, 'i32') }}},
|
1272
|
+
size: {{{ makeGetValue('x', 0, 'i32') }}} * {{{ makeGetValue('y', 0, 'i32') }}} * {{{ makeGetValue('comp', 0, 'i32') }}},
|
1273
|
+
bpp: {{{ makeGetValue('comp', 0, 'i32') }}}
|
1274
|
+
};
|
1275
|
+
}
|
1276
|
+
|
1277
|
+
var rwops = SDL.rwops[rwopsID];
|
1278
|
+
if (rwops === undefined) {
|
1279
|
+
return 0;
|
1280
|
+
}
|
1281
|
+
|
1282
|
+
var filename = rwops.filename;
|
1283
|
+
if (filename === undefined) {
|
1284
|
+
#if STB_IMAGE
|
1285
|
+
var raw = callStbImage('stbi_load_from_memory', [rwops.bytes, rwops.count]);
|
1286
|
+
if (!raw) return 0;
|
1287
|
+
#else
|
1288
|
+
Runtime.warnOnce('Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)');
|
1289
|
+
return 0;
|
1290
|
+
#endif
|
1291
|
+
}
|
1292
|
+
|
1293
|
+
if (!raw) {
|
1294
|
+
filename = PATH.resolve(filename);
|
1295
|
+
var raw = Module["preloadedImages"][filename];
|
1296
|
+
if (!raw) {
|
1297
|
+
if (raw === null) Module.printErr('Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!');
|
1298
|
+
#if STB_IMAGE
|
1299
|
+
var name = Module['_malloc'](filename.length+1);
|
1300
|
+
writeStringToMemory(filename, name);
|
1301
|
+
addCleanup(function() {
|
1302
|
+
Module['_free'](name);
|
1303
|
+
});
|
1304
|
+
var raw = callStbImage('stbi_load', [name]);
|
1305
|
+
if (!raw) return 0;
|
1306
|
+
#else
|
1307
|
+
Runtime.warnOnce('Cannot find preloaded image ' + filename);
|
1308
|
+
Runtime.warnOnce('Cannot find preloaded image ' + filename + '. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)');
|
1309
|
+
return 0;
|
1310
|
+
#endif
|
1311
|
+
} else if (Module['freePreloadedMediaOnUse']) {
|
1312
|
+
Module["preloadedImages"][filename] = null;
|
1313
|
+
}
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
var surf = SDL.makeSurface(raw.width, raw.height, 0, false, 'load:' + filename);
|
1317
|
+
var surfData = SDL.surfaces[surf];
|
1318
|
+
surfData.ctx.globalCompositeOperation = "copy";
|
1319
|
+
if (!raw.rawData) {
|
1320
|
+
surfData.ctx.drawImage(raw, 0, 0, raw.width, raw.height, 0, 0, raw.width, raw.height);
|
1321
|
+
} else {
|
1322
|
+
var imageData = surfData.ctx.getImageData(0, 0, surfData.width, surfData.height);
|
1323
|
+
if (raw.bpp == 4) {
|
1324
|
+
imageData.data.set({{{ makeHEAPView('U8', 'raw.data', 'raw.data+raw.size') }}});
|
1325
|
+
} else if (raw.bpp == 3) {
|
1326
|
+
var pixels = raw.size/3;
|
1327
|
+
var data = imageData.data;
|
1328
|
+
var sourcePtr = raw.data;
|
1329
|
+
var destPtr = 0;
|
1330
|
+
for (var i = 0; i < pixels; i++) {
|
1331
|
+
data[destPtr++] = {{{ makeGetValue('sourcePtr++', 0, 'i8', null, 1) }}};
|
1332
|
+
data[destPtr++] = {{{ makeGetValue('sourcePtr++', 0, 'i8', null, 1) }}};
|
1333
|
+
data[destPtr++] = {{{ makeGetValue('sourcePtr++', 0, 'i8', null, 1) }}};
|
1334
|
+
data[destPtr++] = 255;
|
1335
|
+
}
|
1336
|
+
} else {
|
1337
|
+
Module.printErr('cannot handle bpp ' + raw.bpp);
|
1338
|
+
return 0;
|
1339
|
+
}
|
1340
|
+
surfData.ctx.putImageData(imageData, 0, 0);
|
1341
|
+
}
|
1342
|
+
surfData.ctx.globalCompositeOperation = "source-over";
|
1343
|
+
// XXX SDL does not specify that loaded images must have available pixel data, in fact
|
1344
|
+
// there are cases where you just want to blit them, so you just need the hardware
|
1345
|
+
// accelerated version. However, code everywhere seems to assume that the pixels
|
1346
|
+
// are in fact available, so we retrieve it here. This does add overhead though.
|
1347
|
+
_SDL_LockSurface(surf);
|
1348
|
+
surfData.locked--; // The surface is not actually locked in this hack
|
1349
|
+
if (SDL.GL) {
|
1350
|
+
// After getting the pixel data, we can free the canvas and context if we do not need to do 2D canvas blitting
|
1351
|
+
surfData.canvas = surfData.ctx = null;
|
1352
|
+
}
|
1353
|
+
return surf;
|
1354
|
+
} finally {
|
1355
|
+
cleanup();
|
1254
1356
|
}
|
1255
|
-
return surf;
|
1256
1357
|
},
|
1257
1358
|
SDL_LoadBMP: 'IMG_Load',
|
1258
|
-
SDL_LoadBMP_RW: '
|
1259
|
-
|
1359
|
+
SDL_LoadBMP_RW: 'IMG_Load_RW',
|
1360
|
+
IMG_Load__deps: ['IMG_Load_RW', 'SDL_RWFromFile'],
|
1361
|
+
IMG_Load: function(filename){
|
1362
|
+
var rwops = _SDL_RWFromFile(filename);
|
1363
|
+
var result = _IMG_Load_RW(rwops, 1);
|
1364
|
+
return result;
|
1365
|
+
},
|
1260
1366
|
|
1261
1367
|
// SDL_Audio
|
1262
1368
|
|
@@ -1392,22 +1498,61 @@ var LibrarySDL = {
|
|
1392
1498
|
return 0; // error
|
1393
1499
|
},
|
1394
1500
|
|
1395
|
-
Mix_LoadWAV_RW: function(
|
1396
|
-
|
1397
|
-
|
1398
|
-
if (
|
1399
|
-
|
1400
|
-
|
1501
|
+
Mix_LoadWAV_RW: function(rwopsID, freesrc) {
|
1502
|
+
var rwops = SDL.rwops[rwopsID];
|
1503
|
+
|
1504
|
+
if (rwops === undefined)
|
1505
|
+
return 0;
|
1506
|
+
|
1507
|
+
var filename = '';
|
1508
|
+
var audio;
|
1509
|
+
var bytes;
|
1510
|
+
|
1511
|
+
if (rwops.filename !== undefined) {
|
1512
|
+
filename = PATH.resolve(rwops.filename);
|
1513
|
+
var raw = Module["preloadedAudios"][filename];
|
1514
|
+
if (!raw) {
|
1515
|
+
if (raw === null) Module.printErr('Trying to reuse preloaded audio, but freePreloadedMediaOnUse is set!');
|
1516
|
+
Runtime.warnOnce('Cannot find preloaded audio ' + filename);
|
1517
|
+
|
1518
|
+
// see if we can read the file-contents from the in-memory FS
|
1519
|
+
var fileObject = FS.findObject(filename);
|
1520
|
+
|
1521
|
+
if (fileObject === null) Module.printErr('Couldn\'t find file for: ' + filename);
|
1522
|
+
|
1523
|
+
// We found the file. Load the contents
|
1524
|
+
if (fileObject && !fileObject.isFolder && fileObject.read) {
|
1525
|
+
bytes = fileObject.contents;
|
1526
|
+
} else {
|
1527
|
+
return 0;
|
1528
|
+
}
|
1529
|
+
}
|
1530
|
+
if (Module['freePreloadedMediaOnUse']) {
|
1531
|
+
Module["preloadedAudios"][filename] = null;
|
1532
|
+
}
|
1533
|
+
audio = raw;
|
1534
|
+
}
|
1535
|
+
else if (rwops.bytes !== undefined) {
|
1536
|
+
bytes = HEAPU8.subarray(rwops.bytes, rwops.bytes + rwops.count);
|
1537
|
+
}
|
1538
|
+
else {
|
1401
1539
|
return 0;
|
1402
1540
|
}
|
1403
|
-
|
1404
|
-
|
1541
|
+
|
1542
|
+
// Here, we didn't find a preloaded audio but we either were passed a filepath for
|
1543
|
+
// which we loaded bytes, or we were passed some bytes
|
1544
|
+
if (audio === undefined && bytes) {
|
1545
|
+
var blob = new Blob([new Uint8Array(bytes)], {type: rwops.mimetype});
|
1546
|
+
var url = URL.createObjectURL(blob);
|
1547
|
+
audio = new Audio();
|
1548
|
+
audio.src = url;
|
1405
1549
|
}
|
1550
|
+
|
1406
1551
|
var id = SDL.audios.length;
|
1407
1552
|
// Keep the loaded audio in the audio arrays, ready for playback
|
1408
1553
|
SDL.audios.push({
|
1409
1554
|
source: filename,
|
1410
|
-
audio:
|
1555
|
+
audio: audio
|
1411
1556
|
});
|
1412
1557
|
return id;
|
1413
1558
|
},
|
@@ -1567,8 +1712,14 @@ var LibrarySDL = {
|
|
1567
1712
|
return SDL.setGetVolume(SDL.music, volume);
|
1568
1713
|
},
|
1569
1714
|
|
1570
|
-
Mix_LoadMUS: 'Mix_LoadWAV_RW',
|
1571
1715
|
Mix_LoadMUS_RW: 'Mix_LoadWAV_RW',
|
1716
|
+
Mix_LoadMUS__deps: ['Mix_LoadMUS_RW', 'SDL_RWFromFile', 'SDL_FreeRW'],
|
1717
|
+
Mix_LoadMUS: function(filename) {
|
1718
|
+
var rwops = _SDL_RWFromFile(filename);
|
1719
|
+
var result = _Mix_LoadMUS_RW(rwops);
|
1720
|
+
_SDL_FreeRW(rwops);
|
1721
|
+
return result;
|
1722
|
+
},
|
1572
1723
|
|
1573
1724
|
Mix_FreeMusic: 'Mix_FreeChunk',
|
1574
1725
|
|
@@ -1760,6 +1911,11 @@ var LibrarySDL = {
|
|
1760
1911
|
return Math.floor(fontData.size*0.02); // XXX
|
1761
1912
|
},
|
1762
1913
|
|
1914
|
+
TTF_FontHeight: function(font) {
|
1915
|
+
var fontData = SDL.fonts[font];
|
1916
|
+
return fontData.size;
|
1917
|
+
},
|
1918
|
+
|
1763
1919
|
// SDL gfx
|
1764
1920
|
|
1765
1921
|
$SDL_gfx: {
|
@@ -1951,7 +2107,7 @@ var LibrarySDL = {
|
|
1951
2107
|
return -1;
|
1952
2108
|
},
|
1953
2109
|
|
1954
|
-
SDL_SetGammaRamp: function
|
2110
|
+
SDL_SetGammaRamp: function(redTable, greenTable, blueTable) {
|
1955
2111
|
return -1;
|
1956
2112
|
},
|
1957
2113
|
|
@@ -1967,8 +2123,25 @@ var LibrarySDL = {
|
|
1967
2123
|
|
1968
2124
|
SDL_InitSubSystem: function(flags) { return 0 },
|
1969
2125
|
|
1970
|
-
|
1971
|
-
|
2126
|
+
SDL_RWFromConstMem: function(mem, size) {
|
2127
|
+
var id = SDL.rwops.length; // TODO: recycle ids when they are null
|
2128
|
+
SDL.rwops.push({ bytes: mem, count: size });
|
2129
|
+
return id;
|
2130
|
+
},
|
2131
|
+
SDL_RWFromMem: 'SDL_RWFromConstMem',
|
2132
|
+
|
2133
|
+
SDL_RWFromFile: function(_name, mode) {
|
2134
|
+
var id = SDL.rwops.length; // TODO: recycle ids when they are null
|
2135
|
+
var name = Pointer_stringify(_name)
|
2136
|
+
SDL.rwops.push({ filename: name, mimetype: Browser.getMimetype(name) });
|
2137
|
+
return id;
|
2138
|
+
},
|
2139
|
+
|
2140
|
+
SDL_FreeRW: function(rwopsID) {
|
2141
|
+
SDL.rwops[rwopsID] = null;
|
2142
|
+
while (SDL.rwops.length > 0 && SDL.rwops[SDL.rwops.length-1] === null) {
|
2143
|
+
SDL.rwops.pop();
|
2144
|
+
}
|
1972
2145
|
},
|
1973
2146
|
|
1974
2147
|
SDL_EnableUNICODE: function(on) {
|
@@ -1995,7 +2168,6 @@ var LibrarySDL = {
|
|
1995
2168
|
SDL_GetThreadID: function() { throw 'SDL_GetThreadID' },
|
1996
2169
|
SDL_ThreadID: function() { throw 'SDL_ThreadID' },
|
1997
2170
|
SDL_AllocRW: function() { throw 'SDL_AllocRW: TODO' },
|
1998
|
-
SDL_FreeRW: function() { throw 'SDL_FreeRW: TODO' },
|
1999
2171
|
SDL_CondBroadcast: function() { throw 'SDL_CondBroadcast: TODO' },
|
2000
2172
|
SDL_CondWaitTimeout: function() { throw 'SDL_CondWaitTimeout: TODO' },
|
2001
2173
|
SDL_WM_IconifyWindow: function() { throw 'SDL_WM_IconifyWindow TODO' },
|
@@ -46,7 +46,9 @@ var Debugging = {
|
|
46
46
|
var form3ab = new RegExp(/^!(\d+) = metadata !{i32 \d+, (?:metadata !\d+|i32 \d+|null), metadata !(\d+).*$/);
|
47
47
|
var form3ac = new RegExp(/^!(\d+) = metadata !{i32 \d+, (?:metadata !\d+|null), metadata !"[^"]*", metadata !(\d+)[^\[]*.*$/);
|
48
48
|
var form3ad = new RegExp(/^!(\d+) = metadata !{i32 \d+, (?:i32 \d+|null), (?:i32 \d+|null), metadata !"[^"]*", metadata !"[^"]*", metadata !"[^"]*", metadata !(\d+),.*$/);
|
49
|
-
var
|
49
|
+
var form3ae = new RegExp(/^!(\d+) = metadata !{i32 \d+, metadata !(\d+).*$/);
|
50
|
+
// LLVM 3.3 drops the first and last parameters.
|
51
|
+
var form3b = new RegExp(/^!(\d+) = metadata !{(?:i32 \d+, )?metadata !"([^"]+)", metadata !"([^"]*)"(?:, (metadata !\d+|null))?}.*$/);
|
50
52
|
var form3c = new RegExp(/^!(\d+) = metadata !{\w+\d* !?(\d+)[^\d].*$/);
|
51
53
|
var form4 = new RegExp(/^!llvm.dbg.[\w\.]+ = .*$/);
|
52
54
|
var form5 = new RegExp(/^!(\d+) = metadata !{.*$/);
|
@@ -75,7 +77,7 @@ var Debugging = {
|
|
75
77
|
lines[i] = ';'; // return an empty line, to keep line numbers of subsequent lines the same
|
76
78
|
continue;
|
77
79
|
}
|
78
|
-
calc = form3a.exec(line) || form3ab.exec(line) || form3ac.exec(line) || form3ad.exec(line);
|
80
|
+
calc = form3a.exec(line) || form3ab.exec(line) || form3ac.exec(line) || form3ad.exec(line) || form3ae.exec(line);
|
79
81
|
if (calc) {
|
80
82
|
metadataToParentMetadata[calc[1]] = calc[2];
|
81
83
|
lines[i] = ';';
|
@@ -252,12 +254,26 @@ var Functions = {
|
|
252
254
|
for (var i = 0; i < argTypes.length; i++) {
|
253
255
|
var type = argTypes[i];
|
254
256
|
if (!type) break; // varargs
|
255
|
-
|
257
|
+
if (type in Runtime.FLOAT_TYPES) {
|
258
|
+
sig += 'f';
|
259
|
+
} else {
|
260
|
+
var chunks = getNumIntChunks(type);
|
261
|
+
for (var j = 0; j < chunks; j++) sig += 'i';
|
262
|
+
}
|
256
263
|
}
|
257
264
|
if (hasVarArgs) sig += 'i';
|
258
265
|
return sig;
|
259
266
|
},
|
260
267
|
|
268
|
+
getSignatureReturnType: function(sig) {
|
269
|
+
switch(sig[0]) {
|
270
|
+
case 'v': return 'void';
|
271
|
+
case 'i': return 'i32';
|
272
|
+
case 'f': return 'double';
|
273
|
+
default: throw 'what is this sig? ' + sig;
|
274
|
+
}
|
275
|
+
},
|
276
|
+
|
261
277
|
// Mark a function as needing indexing. Python will coordinate them all
|
262
278
|
getIndex: function(ident, doNotCreate, sig) {
|
263
279
|
if (doNotCreate && !(ident in this.indexedFunctions)) {
|
@@ -408,7 +424,7 @@ var LibraryManager = {
|
|
408
424
|
load: function() {
|
409
425
|
if (this.library) return;
|
410
426
|
|
411
|
-
var libraries = ['library.js', 'library_browser.js', 'library_sdl.js', 'library_gl.js', 'library_glut.js', 'library_xlib.js', 'library_egl.js', 'library_gc.js', 'library_jansson.js', 'library_openal.js', 'library_glfw.js'].concat(additionalLibraries);
|
427
|
+
var libraries = ['library.js', 'library_path.js', 'library_browser.js', 'library_sdl.js', 'library_gl.js', 'library_glut.js', 'library_xlib.js', 'library_egl.js', 'library_gc.js', 'library_jansson.js', 'library_openal.js', 'library_glfw.js'].concat(additionalLibraries);
|
412
428
|
for (var i = 0; i < libraries.length; i++) {
|
413
429
|
eval(processMacros(preprocess(read(libraries[i]))));
|
414
430
|
}
|
@@ -449,7 +465,8 @@ var PassManager = {
|
|
449
465
|
Types: Types,
|
450
466
|
Variables: Variables,
|
451
467
|
Functions: Functions,
|
452
|
-
EXPORTED_FUNCTIONS: EXPORTED_FUNCTIONS // needed for asm.js global constructors (ctors)
|
468
|
+
EXPORTED_FUNCTIONS: EXPORTED_FUNCTIONS, // needed for asm.js global constructors (ctors)
|
469
|
+
Runtime: { GLOBAL_BASE: Runtime.GLOBAL_BASE }
|
453
470
|
}));
|
454
471
|
} else if (phase == 'funcs') {
|
455
472
|
print('\n//FORWARDED_DATA:' + JSON.stringify({
|
@@ -396,12 +396,18 @@ function parseParamTokens(params) {
|
|
396
396
|
// handle 'byval' and 'byval align X'. We store the alignment in 'byVal'
|
397
397
|
byVal = QUANTUM_SIZE;
|
398
398
|
segment.splice(1, 1);
|
399
|
+
if (segment[1] && segment[1].text === 'nocapture') {
|
400
|
+
segment.splice(1, 1);
|
401
|
+
}
|
399
402
|
if (segment[1] && segment[1].text === 'align') {
|
400
403
|
assert(isNumber(segment[2].text));
|
401
404
|
byVal = parseInt(segment[2].text);
|
402
405
|
segment.splice(1, 2);
|
403
406
|
}
|
404
407
|
}
|
408
|
+
if (segment[1] && segment[1].text === 'nocapture') {
|
409
|
+
segment.splice(1, 1);
|
410
|
+
}
|
405
411
|
if (segment.length == 1) {
|
406
412
|
if (segment[0].text == '...') {
|
407
413
|
ret.push({
|
@@ -969,6 +975,11 @@ function generateStructTypes(type) {
|
|
969
975
|
}
|
970
976
|
ret[index++] = type;
|
971
977
|
} else {
|
978
|
+
if (Runtime.isStructType(type) && type[1] === '0') {
|
979
|
+
// this is [0 x something], which does nothing
|
980
|
+
// XXX this happens in java_nbody... assert(i === typeData.fields.length-1);
|
981
|
+
continue;
|
982
|
+
}
|
972
983
|
add(Types.types[type]);
|
973
984
|
}
|
974
985
|
var more = (i+1 < typeData.fields.length ? typeData.flatIndexes[i+1] : typeData.flatSize) - (index - start);
|
@@ -1231,7 +1242,7 @@ function indexizeFunctions(value, type) {
|
|
1231
1242
|
// add signature to library functions that we now know need indexing
|
1232
1243
|
var sig = Functions.implementedFunctions[value] || Functions.unimplementedFunctions[value];
|
1233
1244
|
if (!sig) {
|
1234
|
-
sig = Functions.unimplementedFunctions[value] = Functions.getSignature(out.returnType, out.segments ? out.segments.map(function(segment) { return segment[0].text }) : []);
|
1245
|
+
sig = Functions.unimplementedFunctions[value] = Functions.getSignature(out.returnType, out.segments ? out.segments.map(function(segment) { return segment[0].text }) : [], isVarArgsFunctionType(type));
|
1235
1246
|
}
|
1236
1247
|
return Functions.getIndex(value, undefined, sig);
|
1237
1248
|
}
|
@@ -1694,7 +1705,7 @@ function makeGetSlabs(ptr, type, allowMultiple, unsigned) {
|
|
1694
1705
|
}
|
1695
1706
|
case 'float': return ['HEAPF32'];
|
1696
1707
|
default: {
|
1697
|
-
throw 'what, exactly, can we do for unknown types in TA2?! ' + new Error().stack;
|
1708
|
+
throw 'what, exactly, can we do for unknown types in TA2?! ' + [new Error().stack, ptr, type, allowMultiple, unsigned];
|
1698
1709
|
}
|
1699
1710
|
}
|
1700
1711
|
}
|