2018-07-03 14:09:12 +02:00
// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to check if Module already exists (e.g. case 3 above).
// Substitution will be replaced with actual code on later stage of the build,
// this way Closure Compiler will not mangle it (e.g. case 4. above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module = typeof Module !== 'undefined' ? Module : { } ;
// --pre-jses are emitted after the Module integration code, so that they can
// refer to Module (if they choose; they can also define Module)
// {{PRE_JSES}}
// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = { } ;
var key ;
for ( key in Module ) {
if ( Module . hasOwnProperty ( key ) ) {
moduleOverrides [ key ] = Module [ key ] ;
}
}
Module [ 'arguments' ] = [ ] ;
Module [ 'thisProgram' ] = './this.program' ;
Module [ 'quit' ] = function ( status , toThrow ) {
throw toThrow ;
} ;
Module [ 'preRun' ] = [ ] ;
Module [ 'postRun' ] = [ ] ;
// The environment setup code below is customized to use Module.
// *** Environment setup code ***
var ENVIRONMENT _IS _WEB = false ;
var ENVIRONMENT _IS _WORKER = false ;
var ENVIRONMENT _IS _NODE = false ;
var ENVIRONMENT _IS _SHELL = false ;
// Three configurations we can be running in:
// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)
// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)
// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)
if ( Module [ 'ENVIRONMENT' ] ) {
if ( Module [ 'ENVIRONMENT' ] === 'WEB' ) {
ENVIRONMENT _IS _WEB = true ;
} else if ( Module [ 'ENVIRONMENT' ] === 'WORKER' ) {
ENVIRONMENT _IS _WORKER = true ;
} else if ( Module [ 'ENVIRONMENT' ] === 'NODE' ) {
ENVIRONMENT _IS _NODE = true ;
} else if ( Module [ 'ENVIRONMENT' ] === 'SHELL' ) {
ENVIRONMENT _IS _SHELL = true ;
} else {
throw new Error ( 'Module[\'ENVIRONMENT\'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.' ) ;
}
} else {
ENVIRONMENT _IS _WEB = typeof window === 'object' ;
ENVIRONMENT _IS _WORKER = typeof importScripts === 'function' ;
ENVIRONMENT _IS _NODE = typeof process === 'object' && typeof require === 'function' && ! ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _WORKER ;
ENVIRONMENT _IS _SHELL = ! ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _NODE && ! ENVIRONMENT _IS _WORKER ;
}
if ( ENVIRONMENT _IS _NODE ) {
// Expose functionality in the same simple way that the shells work
// Note that we pollute the global namespace here, otherwise we break in node
var nodeFS ;
var nodePath ;
Module [ 'read' ] = function shell _read ( filename , binary ) {
var ret ;
if ( ! nodeFS ) nodeFS = require ( 'fs' ) ;
if ( ! nodePath ) nodePath = require ( 'path' ) ;
filename = nodePath [ 'normalize' ] ( filename ) ;
ret = nodeFS [ 'readFileSync' ] ( filename ) ;
return binary ? ret : ret . toString ( ) ;
} ;
Module [ 'readBinary' ] = function readBinary ( filename ) {
var ret = Module [ 'read' ] ( filename , true ) ;
if ( ! ret . buffer ) {
ret = new Uint8Array ( ret ) ;
}
assert ( ret . buffer ) ;
return ret ;
} ;
if ( process [ 'argv' ] . length > 1 ) {
Module [ 'thisProgram' ] = process [ 'argv' ] [ 1 ] . replace ( /\\/g , '/' ) ;
}
Module [ 'arguments' ] = process [ 'argv' ] . slice ( 2 ) ;
if ( typeof module !== 'undefined' ) {
module [ 'exports' ] = Module ;
}
process [ 'on' ] ( 'uncaughtException' , function ( ex ) {
// suppress ExitStatus exceptions from showing an error
if ( ! ( ex instanceof ExitStatus ) ) {
throw ex ;
}
} ) ;
// Currently node will swallow unhandled rejections, but this behavior is
// deprecated, and in the future it will exit with error status.
process [ 'on' ] ( 'unhandledRejection' , function ( reason , p ) {
process [ 'exit' ] ( 1 ) ;
} ) ;
Module [ 'inspect' ] = function ( ) { return '[Emscripten Module object]' ; } ;
} else
if ( ENVIRONMENT _IS _SHELL ) {
if ( typeof read != 'undefined' ) {
Module [ 'read' ] = function shell _read ( f ) {
return read ( f ) ;
} ;
}
Module [ 'readBinary' ] = function readBinary ( f ) {
var data ;
if ( typeof readbuffer === 'function' ) {
return new Uint8Array ( readbuffer ( f ) ) ;
}
data = read ( f , 'binary' ) ;
assert ( typeof data === 'object' ) ;
return data ;
} ;
if ( typeof scriptArgs != 'undefined' ) {
Module [ 'arguments' ] = scriptArgs ;
} else if ( typeof arguments != 'undefined' ) {
Module [ 'arguments' ] = arguments ;
}
if ( typeof quit === 'function' ) {
Module [ 'quit' ] = function ( status , toThrow ) {
quit ( status ) ;
}
}
} else
if ( ENVIRONMENT _IS _WEB || ENVIRONMENT _IS _WORKER ) {
Module [ 'read' ] = function shell _read ( url ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , url , false ) ;
xhr . send ( null ) ;
return xhr . responseText ;
} ;
if ( ENVIRONMENT _IS _WORKER ) {
Module [ 'readBinary' ] = function readBinary ( url ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , url , false ) ;
xhr . responseType = 'arraybuffer' ;
xhr . send ( null ) ;
return new Uint8Array ( xhr . response ) ;
} ;
}
Module [ 'readAsync' ] = function readAsync ( url , onload , onerror ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , url , true ) ;
xhr . responseType = 'arraybuffer' ;
xhr . onload = function xhr _onload ( ) {
if ( xhr . status == 200 || ( xhr . status == 0 && xhr . response ) ) { // file URLs can return 0
onload ( xhr . response ) ;
return ;
}
onerror ( ) ;
} ;
xhr . onerror = onerror ;
xhr . send ( null ) ;
} ;
Module [ 'setWindowTitle' ] = function ( title ) { document . title = title } ;
} else
{
throw new Error ( 'not compiled for this environment' ) ;
}
// console.log is checked first, as 'print' on the web will open a print dialogue
// printErr is preferable to console.warn (works better in shells)
// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.
Module [ 'print' ] = typeof console !== 'undefined' ? console . log . bind ( console ) : ( typeof print !== 'undefined' ? print : null ) ;
Module [ 'printErr' ] = typeof printErr !== 'undefined' ? printErr : ( ( typeof console !== 'undefined' && console . warn . bind ( console ) ) || Module [ 'print' ] ) ;
// *** Environment setup code ***
// Closure helpers
Module . print = Module [ 'print' ] ;
Module . printErr = Module [ 'printErr' ] ;
// Merge back in the overrides
for ( key in moduleOverrides ) {
if ( moduleOverrides . hasOwnProperty ( key ) ) {
Module [ key ] = moduleOverrides [ key ] ;
}
}
// Free the object hierarchy contained in the overrides, this lets the GC
// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
moduleOverrides = undefined ;
// {{PREAMBLE_ADDITIONS}}
var STACK _ALIGN = 16 ;
function staticAlloc ( size ) {
assert ( ! staticSealed ) ;
var ret = STATICTOP ;
STATICTOP = ( STATICTOP + size + 15 ) & - 16 ;
return ret ;
}
function dynamicAlloc ( size ) {
assert ( DYNAMICTOP _PTR ) ;
var ret = HEAP32 [ DYNAMICTOP _PTR >> 2 ] ;
var end = ( ret + size + 15 ) & - 16 ;
HEAP32 [ DYNAMICTOP _PTR >> 2 ] = end ;
if ( end >= TOTAL _MEMORY ) {
var success = enlargeMemory ( ) ;
if ( ! success ) {
HEAP32 [ DYNAMICTOP _PTR >> 2 ] = ret ;
return 0 ;
}
}
return ret ;
}
function alignMemory ( size , factor ) {
if ( ! factor ) factor = STACK _ALIGN ; // stack alignment (16-byte) by default
var ret = size = Math . ceil ( size / factor ) * factor ;
return ret ;
}
function getNativeTypeSize ( type ) {
switch ( type ) {
case 'i1' : case 'i8' : return 1 ;
case 'i16' : return 2 ;
case 'i32' : return 4 ;
case 'i64' : return 8 ;
case 'float' : return 4 ;
case 'double' : return 8 ;
default : {
if ( type [ type . length - 1 ] === '*' ) {
return 4 ; // A pointer
} else if ( type [ 0 ] === 'i' ) {
var bits = parseInt ( type . substr ( 1 ) ) ;
assert ( bits % 8 === 0 ) ;
return bits / 8 ;
} else {
return 0 ;
}
}
}
}
function warnOnce ( text ) {
if ( ! warnOnce . shown ) warnOnce . shown = { } ;
if ( ! warnOnce . shown [ text ] ) {
warnOnce . shown [ text ] = 1 ;
Module . printErr ( text ) ;
}
}
var asm2wasmImports = { // special asm2wasm imports
"f64-rem" : function ( x , y ) {
return x % y ;
} ,
"debugger" : function ( ) {
debugger ;
}
} ;
var jsCallStartIndex = 1 ;
var functionPointers = new Array ( 0 ) ;
// 'sig' parameter is only used on LLVM wasm backend
function addFunction ( func , sig ) {
var base = 0 ;
for ( var i = base ; i < base + 0 ; i ++ ) {
if ( ! functionPointers [ i ] ) {
functionPointers [ i ] = func ;
return jsCallStartIndex + i ;
}
}
throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.' ;
}
function removeFunction ( index ) {
functionPointers [ index - jsCallStartIndex ] = null ;
}
var funcWrappers = { } ;
function getFuncWrapper ( func , sig ) {
if ( ! func ) return ; // on null pointer, return undefined
assert ( sig ) ;
if ( ! funcWrappers [ sig ] ) {
funcWrappers [ sig ] = { } ;
}
var sigCache = funcWrappers [ sig ] ;
if ( ! sigCache [ func ] ) {
// optimize away arguments usage in common cases
if ( sig . length === 1 ) {
sigCache [ func ] = function dynCall _wrapper ( ) {
return dynCall ( sig , func ) ;
} ;
} else if ( sig . length === 2 ) {
sigCache [ func ] = function dynCall _wrapper ( arg ) {
return dynCall ( sig , func , [ arg ] ) ;
} ;
} else {
// general case
sigCache [ func ] = function dynCall _wrapper ( ) {
return dynCall ( sig , func , Array . prototype . slice . call ( arguments ) ) ;
} ;
}
}
return sigCache [ func ] ;
}
function makeBigInt ( low , high , unsigned ) {
return unsigned ? ( ( + ( ( low >>> 0 ) ) ) + ( ( + ( ( high >>> 0 ) ) ) * 4294967296.0 ) ) : ( ( + ( ( low >>> 0 ) ) ) + ( ( + ( ( high | 0 ) ) ) * 4294967296.0 ) ) ;
}
function dynCall ( sig , ptr , args ) {
if ( args && args . length ) {
return Module [ 'dynCall_' + sig ] . apply ( null , [ ptr ] . concat ( args ) ) ;
} else {
return Module [ 'dynCall_' + sig ] . call ( null , ptr ) ;
}
}
var Runtime = {
// FIXME backwards compatibility layer for ports. Support some Runtime.*
// for now, fix it there, then remove it from here. That way we
// can minimize any period of breakage.
dynCall : dynCall , // for SDL2 port
} ;
// The address globals begin at. Very low in memory, for code size and optimization opportunities.
// Above 0 is static memory, starting with globals.
// Then the stack.
// Then 'dynamic' memory for sbrk.
var GLOBAL _BASE = 1024 ;
// === Preamble library stuff ===
// Documentation for the public APIs defined in this file must be updated in:
// site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
// site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
//========================================
// Runtime essentials
//========================================
var ABORT = 0 ; // whether we are quitting the application. no code should run after this. set in exit() and abort()
var EXITSTATUS = 0 ;
/** @type {function(*, string=)} */
function assert ( condition , text ) {
if ( ! condition ) {
abort ( 'Assertion failed: ' + text ) ;
}
}
var globalScope = this ;
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
function getCFunc ( ident ) {
var func = Module [ '_' + ident ] ; // closure exported function
assert ( func , 'Cannot call unknown function ' + ident + ', make sure it is exported' ) ;
return func ;
}
var JSfuncs = {
// Helpers for cwrap -- it can't refer to Runtime directly because it might
// be renamed by closure, instead it calls JSfuncs['stackSave'].body to find
// out what the minified function name is.
'stackSave' : function ( ) {
stackSave ( )
} ,
'stackRestore' : function ( ) {
stackRestore ( )
} ,
// type conversion from js to c
'arrayToC' : function ( arr ) {
var ret = stackAlloc ( arr . length ) ;
writeArrayToMemory ( arr , ret ) ;
return ret ;
} ,
'stringToC' : function ( str ) {
var ret = 0 ;
if ( str !== null && str !== undefined && str !== 0 ) { // null string
// at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
var len = ( str . length << 2 ) + 1 ;
ret = stackAlloc ( len ) ;
stringToUTF8 ( str , ret , len ) ;
}
return ret ;
}
} ;
// For fast lookup of conversion functions
var toC = {
'string' : JSfuncs [ 'stringToC' ] , 'array' : JSfuncs [ 'arrayToC' ]
} ;
// C calling interface.
function ccall ( ident , returnType , argTypes , args , opts ) {
var func = getCFunc ( ident ) ;
var cArgs = [ ] ;
var stack = 0 ;
if ( args ) {
for ( var i = 0 ; i < args . length ; i ++ ) {
var converter = toC [ argTypes [ i ] ] ;
if ( converter ) {
if ( stack === 0 ) stack = stackSave ( ) ;
cArgs [ i ] = converter ( args [ i ] ) ;
} else {
cArgs [ i ] = args [ i ] ;
}
}
}
var ret = func . apply ( null , cArgs ) ;
if ( returnType === 'string' ) ret = Pointer _stringify ( ret ) ;
else if ( returnType === 'boolean' ) ret = Boolean ( ret ) ;
if ( stack !== 0 ) {
stackRestore ( stack ) ;
}
return ret ;
}
function cwrap ( ident , returnType , argTypes ) {
argTypes = argTypes || [ ] ;
var cfunc = getCFunc ( ident ) ;
// When the function takes numbers and returns a number, we can just return
// the original function
var numericArgs = argTypes . every ( function ( type ) { return type === 'number' } ) ;
var numericRet = returnType !== 'string' ;
if ( numericRet && numericArgs ) {
return cfunc ;
}
return function ( ) {
return ccall ( ident , returnType , argTypes , arguments ) ;
}
}
/** @type {function(number, number, string, boolean=)} */
function setValue ( ptr , value , type , noSafe ) {
type = type || 'i8' ;
if ( type . charAt ( type . length - 1 ) === '*' ) type = 'i32' ; // pointers are 32-bit
switch ( type ) {
case 'i1' : HEAP8 [ ( ( ptr ) >> 0 ) ] = value ; break ;
case 'i8' : HEAP8 [ ( ( ptr ) >> 0 ) ] = value ; break ;
case 'i16' : HEAP16 [ ( ( ptr ) >> 1 ) ] = value ; break ;
case 'i32' : HEAP32 [ ( ( ptr ) >> 2 ) ] = value ; break ;
case 'i64' : ( tempI64 = [ value >>> 0 , ( tempDouble = value , ( + ( Math _abs ( tempDouble ) ) ) >= 1.0 ? ( tempDouble > 0.0 ? ( ( Math _min ( ( + ( Math _floor ( ( tempDouble ) / 4294967296.0 ) ) ) , 4294967295.0 ) ) | 0 ) >>> 0 : ( ~ ~ ( ( + ( Math _ceil ( ( tempDouble - + ( ( ( ~ ~ ( tempDouble ) ) ) >>> 0 ) ) / 4294967296.0 ) ) ) ) ) >>> 0 ) : 0 ) ] , HEAP32 [ ( ( ptr ) >> 2 ) ] = tempI64 [ 0 ] , HEAP32 [ ( ( ( ptr ) + ( 4 ) ) >> 2 ) ] = tempI64 [ 1 ] ) ; break ;
case 'float' : HEAPF32 [ ( ( ptr ) >> 2 ) ] = value ; break ;
case 'double' : HEAPF64 [ ( ( ptr ) >> 3 ) ] = value ; break ;
default : abort ( 'invalid type for setValue: ' + type ) ;
}
}
/** @type {function(number, string, boolean=)} */
function getValue ( ptr , type , noSafe ) {
type = type || 'i8' ;
if ( type . charAt ( type . length - 1 ) === '*' ) type = 'i32' ; // pointers are 32-bit
switch ( type ) {
case 'i1' : return HEAP8 [ ( ( ptr ) >> 0 ) ] ;
case 'i8' : return HEAP8 [ ( ( ptr ) >> 0 ) ] ;
case 'i16' : return HEAP16 [ ( ( ptr ) >> 1 ) ] ;
case 'i32' : return HEAP32 [ ( ( ptr ) >> 2 ) ] ;
case 'i64' : return HEAP32 [ ( ( ptr ) >> 2 ) ] ;
case 'float' : return HEAPF32 [ ( ( ptr ) >> 2 ) ] ;
case 'double' : return HEAPF64 [ ( ( ptr ) >> 3 ) ] ;
default : abort ( 'invalid type for getValue: ' + type ) ;
}
return null ;
}
var ALLOC _NORMAL = 0 ; // Tries to use _malloc()
var ALLOC _STACK = 1 ; // Lives for the duration of the current function call
var ALLOC _STATIC = 2 ; // Cannot be freed
var ALLOC _DYNAMIC = 3 ; // Cannot be freed except through sbrk
var ALLOC _NONE = 4 ; // Do not allocate
// allocate(): This is for internal use. You can use it yourself as well, but the interface
// is a little tricky (see docs right below). The reason is that it is optimized
// for multiple syntaxes to save space in generated code. So you should
// normally not use allocate(), and instead allocate memory using _malloc(),
// initialize it with setValue(), and so forth.
// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
// in *bytes* (note that this is sometimes confusing: the next parameter does not
// affect this!)
// @types: Either an array of types, one for each byte (or 0 if no type at that position),
// or a single type which is used for the entire block. This only matters if there
// is initial data - if @slab is a number, then this does not matter at all and is
// ignored.
// @allocator: How to allocate memory, see ALLOC_*
/** @type {function((TypedArray|Array<number>|number), string, number, number=)} */
function allocate ( slab , types , allocator , ptr ) {
var zeroinit , size ;
if ( typeof slab === 'number' ) {
zeroinit = true ;
size = slab ;
} else {
zeroinit = false ;
size = slab . length ;
}
var singleType = typeof types === 'string' ? types : null ;
var ret ;
if ( allocator == ALLOC _NONE ) {
ret = ptr ;
} else {
ret = [ typeof _malloc === 'function' ? _malloc : staticAlloc , stackAlloc , staticAlloc , dynamicAlloc ] [ allocator === undefined ? ALLOC _STATIC : allocator ] ( Math . max ( size , singleType ? 1 : types . length ) ) ;
}
if ( zeroinit ) {
var stop ;
ptr = ret ;
assert ( ( ret & 3 ) == 0 ) ;
stop = ret + ( size & ~ 3 ) ;
for ( ; ptr < stop ; ptr += 4 ) {
HEAP32 [ ( ( ptr ) >> 2 ) ] = 0 ;
}
stop = ret + size ;
while ( ptr < stop ) {
HEAP8 [ ( ( ptr ++ ) >> 0 ) ] = 0 ;
}
return ret ;
}
if ( singleType === 'i8' ) {
if ( slab . subarray || slab . slice ) {
HEAPU8 . set ( /** @type {!Uint8Array} */ ( slab ) , ret ) ;
} else {
HEAPU8 . set ( new Uint8Array ( slab ) , ret ) ;
}
return ret ;
}
var i = 0 , type , typeSize , previousType ;
while ( i < size ) {
var curr = slab [ i ] ;
type = singleType || types [ i ] ;
if ( type === 0 ) {
i ++ ;
continue ;
}
if ( type == 'i64' ) type = 'i32' ; // special case: we have one i32 here, and one i32 later
setValue ( ret + i , curr , type ) ;
// no need to look up size unless type changes, so cache it
if ( previousType !== type ) {
typeSize = getNativeTypeSize ( type ) ;
previousType = type ;
}
i += typeSize ;
}
return ret ;
}
// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready
function getMemory ( size ) {
if ( ! staticSealed ) return staticAlloc ( size ) ;
if ( ! runtimeInitialized ) return dynamicAlloc ( size ) ;
return _malloc ( size ) ;
}
/** @type {function(number, number=)} */
function Pointer _stringify ( ptr , length ) {
if ( length === 0 || ! ptr ) return '' ;
// Find the length, and check for UTF while doing so
var hasUtf = 0 ;
var t ;
var i = 0 ;
while ( 1 ) {
t = HEAPU8 [ ( ( ( ptr ) + ( i ) ) >> 0 ) ] ;
hasUtf |= t ;
if ( t == 0 && ! length ) break ;
i ++ ;
if ( length && i == length ) break ;
}
if ( ! length ) length = i ;
var ret = '' ;
if ( hasUtf < 128 ) {
var MAX _CHUNK = 1024 ; // split up into chunks, because .apply on a huge string can overflow the stack
var curr ;
while ( length > 0 ) {
curr = String . fromCharCode . apply ( String , HEAPU8 . subarray ( ptr , ptr + Math . min ( length , MAX _CHUNK ) ) ) ;
ret = ret ? ret + curr : curr ;
ptr += MAX _CHUNK ;
length -= MAX _CHUNK ;
}
return ret ;
}
return UTF8ToString ( ptr ) ;
}
// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.
function AsciiToString ( ptr ) {
var str = '' ;
while ( 1 ) {
var ch = HEAP8 [ ( ( ptr ++ ) >> 0 ) ] ;
if ( ! ch ) return str ;
str += String . fromCharCode ( ch ) ;
}
}
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.
function stringToAscii ( str , outPtr ) {
return writeAsciiToMemory ( str , outPtr , false ) ;
}
// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns
// a copy of that string as a Javascript String object.
var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder ( 'utf8' ) : undefined ;
function UTF8ArrayToString ( u8Array , idx ) {
var endPtr = idx ;
// TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
// Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
while ( u8Array [ endPtr ] ) ++ endPtr ;
if ( endPtr - idx > 16 && u8Array . subarray && UTF8Decoder ) {
return UTF8Decoder . decode ( u8Array . subarray ( idx , endPtr ) ) ;
} else {
var u0 , u1 , u2 , u3 , u4 , u5 ;
var str = '' ;
while ( 1 ) {
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
u0 = u8Array [ idx ++ ] ;
if ( ! u0 ) return str ;
if ( ! ( u0 & 0x80 ) ) { str += String . fromCharCode ( u0 ) ; continue ; }
u1 = u8Array [ idx ++ ] & 63 ;
if ( ( u0 & 0xE0 ) == 0xC0 ) { str += String . fromCharCode ( ( ( u0 & 31 ) << 6 ) | u1 ) ; continue ; }
u2 = u8Array [ idx ++ ] & 63 ;
if ( ( u0 & 0xF0 ) == 0xE0 ) {
u0 = ( ( u0 & 15 ) << 12 ) | ( u1 << 6 ) | u2 ;
} else {
u3 = u8Array [ idx ++ ] & 63 ;
if ( ( u0 & 0xF8 ) == 0xF0 ) {
u0 = ( ( u0 & 7 ) << 18 ) | ( u1 << 12 ) | ( u2 << 6 ) | u3 ;
} else {
u4 = u8Array [ idx ++ ] & 63 ;
if ( ( u0 & 0xFC ) == 0xF8 ) {
u0 = ( ( u0 & 3 ) << 24 ) | ( u1 << 18 ) | ( u2 << 12 ) | ( u3 << 6 ) | u4 ;
} else {
u5 = u8Array [ idx ++ ] & 63 ;
u0 = ( ( u0 & 1 ) << 30 ) | ( u1 << 24 ) | ( u2 << 18 ) | ( u3 << 12 ) | ( u4 << 6 ) | u5 ;
}
}
}
if ( u0 < 0x10000 ) {
str += String . fromCharCode ( u0 ) ;
} else {
var ch = u0 - 0x10000 ;
str += String . fromCharCode ( 0xD800 | ( ch >> 10 ) , 0xDC00 | ( ch & 0x3FF ) ) ;
}
}
}
}
// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.
function UTF8ToString ( ptr ) {
return UTF8ArrayToString ( HEAPU8 , ptr ) ;
}
// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',
// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.
// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
// str: the Javascript string to copy.
// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.
// outIdx: The starting offset in the array to begin the copying.
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
// terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF8Array ( str , outU8Array , outIdx , maxBytesToWrite ) {
if ( ! ( maxBytesToWrite > 0 ) ) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.
return 0 ;
var startIdx = outIdx ;
var endIdx = outIdx + maxBytesToWrite - 1 ; // -1 for string null terminator.
for ( var i = 0 ; i < str . length ; ++ i ) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
var u = str . charCodeAt ( i ) ; // possibly a lead surrogate
if ( u >= 0xD800 && u <= 0xDFFF ) u = 0x10000 + ( ( u & 0x3FF ) << 10 ) | ( str . charCodeAt ( ++ i ) & 0x3FF ) ;
if ( u <= 0x7F ) {
if ( outIdx >= endIdx ) break ;
outU8Array [ outIdx ++ ] = u ;
} else if ( u <= 0x7FF ) {
if ( outIdx + 1 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 0xC0 | ( u >> 6 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( u & 63 ) ;
} else if ( u <= 0xFFFF ) {
if ( outIdx + 2 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 0xE0 | ( u >> 12 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 6 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( u & 63 ) ;
} else if ( u <= 0x1FFFFF ) {
if ( outIdx + 3 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 0xF0 | ( u >> 18 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 12 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 6 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( u & 63 ) ;
} else if ( u <= 0x3FFFFFF ) {
if ( outIdx + 4 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 0xF8 | ( u >> 24 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 18 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 12 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 6 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( u & 63 ) ;
} else {
if ( outIdx + 5 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 0xFC | ( u >> 30 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 24 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 18 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 12 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( ( u >> 6 ) & 63 ) ;
outU8Array [ outIdx ++ ] = 0x80 | ( u & 63 ) ;
}
}
// Null-terminate the pointer to the buffer.
outU8Array [ outIdx ] = 0 ;
return outIdx - startIdx ;
}
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.
// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF8 ( str , outPtr , maxBytesToWrite ) {
return stringToUTF8Array ( str , HEAPU8 , outPtr , maxBytesToWrite ) ;
}
// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.
function lengthBytesUTF8 ( str ) {
var len = 0 ;
for ( var i = 0 ; i < str . length ; ++ i ) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var u = str . charCodeAt ( i ) ; // possibly a lead surrogate
if ( u >= 0xD800 && u <= 0xDFFF ) u = 0x10000 + ( ( u & 0x3FF ) << 10 ) | ( str . charCodeAt ( ++ i ) & 0x3FF ) ;
if ( u <= 0x7F ) {
++ len ;
} else if ( u <= 0x7FF ) {
len += 2 ;
} else if ( u <= 0xFFFF ) {
len += 3 ;
} else if ( u <= 0x1FFFFF ) {
len += 4 ;
} else if ( u <= 0x3FFFFFF ) {
len += 5 ;
} else {
len += 6 ;
}
}
return len ;
}
// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.
var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder ( 'utf-16le' ) : undefined ;
function UTF16ToString ( ptr ) {
var endPtr = ptr ;
// TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
// Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
var idx = endPtr >> 1 ;
while ( HEAP16 [ idx ] ) ++ idx ;
endPtr = idx << 1 ;
if ( endPtr - ptr > 32 && UTF16Decoder ) {
return UTF16Decoder . decode ( HEAPU8 . subarray ( ptr , endPtr ) ) ;
} else {
var i = 0 ;
var str = '' ;
while ( 1 ) {
var codeUnit = HEAP16 [ ( ( ( ptr ) + ( i * 2 ) ) >> 1 ) ] ;
if ( codeUnit == 0 ) return str ;
++ i ;
// fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
str += String . fromCharCode ( codeUnit ) ;
}
}
}
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.
// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
// str: the Javascript string to copy.
// outPtr: Byte address in Emscripten HEAP where to write the string to.
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.
// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF16 ( str , outPtr , maxBytesToWrite ) {
// Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
if ( maxBytesToWrite === undefined ) {
maxBytesToWrite = 0x7FFFFFFF ;
}
if ( maxBytesToWrite < 2 ) return 0 ;
maxBytesToWrite -= 2 ; // Null terminator.
var startPtr = outPtr ;
var numCharsToWrite = ( maxBytesToWrite < str . length * 2 ) ? ( maxBytesToWrite / 2 ) : str . length ;
for ( var i = 0 ; i < numCharsToWrite ; ++ i ) {
// charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
var codeUnit = str . charCodeAt ( i ) ; // possibly a lead surrogate
HEAP16 [ ( ( outPtr ) >> 1 ) ] = codeUnit ;
outPtr += 2 ;
}
// Null-terminate the pointer to the HEAP.
HEAP16 [ ( ( outPtr ) >> 1 ) ] = 0 ;
return outPtr - startPtr ;
}
// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
function lengthBytesUTF16 ( str ) {
return str . length * 2 ;
}
function UTF32ToString ( ptr ) {
var i = 0 ;
var str = '' ;
while ( 1 ) {
var utf32 = HEAP32 [ ( ( ( ptr ) + ( i * 4 ) ) >> 2 ) ] ;
if ( utf32 == 0 )
return str ;
++ i ;
// Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
// See http://unicode.org/faq/utf_bom.html#utf16-3
if ( utf32 >= 0x10000 ) {
var ch = utf32 - 0x10000 ;
str += String . fromCharCode ( 0xD800 | ( ch >> 10 ) , 0xDC00 | ( ch & 0x3FF ) ) ;
} else {
str += String . fromCharCode ( utf32 ) ;
}
}
}
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.
// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
// str: the Javascript string to copy.
// outPtr: Byte address in Emscripten HEAP where to write the string to.
// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.
// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.
function stringToUTF32 ( str , outPtr , maxBytesToWrite ) {
// Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
if ( maxBytesToWrite === undefined ) {
maxBytesToWrite = 0x7FFFFFFF ;
}
if ( maxBytesToWrite < 4 ) return 0 ;
var startPtr = outPtr ;
var endPtr = startPtr + maxBytesToWrite - 4 ;
for ( var i = 0 ; i < str . length ; ++ i ) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var codeUnit = str . charCodeAt ( i ) ; // possibly a lead surrogate
if ( codeUnit >= 0xD800 && codeUnit <= 0xDFFF ) {
var trailSurrogate = str . charCodeAt ( ++ i ) ;
codeUnit = 0x10000 + ( ( codeUnit & 0x3FF ) << 10 ) | ( trailSurrogate & 0x3FF ) ;
}
HEAP32 [ ( ( outPtr ) >> 2 ) ] = codeUnit ;
outPtr += 4 ;
if ( outPtr + 4 > endPtr ) break ;
}
// Null-terminate the pointer to the HEAP.
HEAP32 [ ( ( outPtr ) >> 2 ) ] = 0 ;
return outPtr - startPtr ;
}
// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.
function lengthBytesUTF32 ( str ) {
var len = 0 ;
for ( var i = 0 ; i < str . length ; ++ i ) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var codeUnit = str . charCodeAt ( i ) ;
if ( codeUnit >= 0xD800 && codeUnit <= 0xDFFF ) ++ i ; // possibly a lead surrogate, so skip over the tail surrogate.
len += 4 ;
}
return len ;
}
// Allocate heap space for a JS string, and write it there.
// It is the responsibility of the caller to free() that memory.
function allocateUTF8 ( str ) {
var size = lengthBytesUTF8 ( str ) + 1 ;
var ret = _malloc ( size ) ;
if ( ret ) stringToUTF8Array ( str , HEAP8 , ret , size ) ;
return ret ;
}
// Allocate stack space for a JS string, and write it there.
function allocateUTF8OnStack ( str ) {
var size = lengthBytesUTF8 ( str ) + 1 ;
var ret = stackAlloc ( size ) ;
stringToUTF8Array ( str , HEAP8 , ret , size ) ;
return ret ;
}
function demangle ( func ) {
return func ;
}
function demangleAll ( text ) {
var regex =
/__Z[\w\d_]+/g ;
return text . replace ( regex ,
function ( x ) {
var y = demangle ( x ) ;
return x === y ? x : ( x + ' [' + y + ']' ) ;
} ) ;
}
function jsStackTrace ( ) {
var err = new Error ( ) ;
if ( ! err . stack ) {
// IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
// so try that as a special-case.
try {
throw new Error ( 0 ) ;
} catch ( e ) {
err = e ;
}
if ( ! err . stack ) {
return '(no stack trace available)' ;
}
}
return err . stack . toString ( ) ;
}
function stackTrace ( ) {
var js = jsStackTrace ( ) ;
if ( Module [ 'extraStackTrace' ] ) js += '\n' + Module [ 'extraStackTrace' ] ( ) ;
return demangleAll ( js ) ;
}
// Memory management
var PAGE _SIZE = 16384 ;
var WASM _PAGE _SIZE = 65536 ;
var ASMJS _PAGE _SIZE = 16777216 ;
var MIN _TOTAL _MEMORY = 16777216 ;
function alignUp ( x , multiple ) {
if ( x % multiple > 0 ) {
x += multiple - ( x % multiple ) ;
}
return x ;
}
var HEAP ,
/** @type {ArrayBuffer} */
buffer ,
/** @type {Int8Array} */
HEAP8 ,
/** @type {Uint8Array} */
HEAPU8 ,
/** @type {Int16Array} */
HEAP16 ,
/** @type {Uint16Array} */
HEAPU16 ,
/** @type {Int32Array} */
HEAP32 ,
/** @type {Uint32Array} */
HEAPU32 ,
/** @type {Float32Array} */
HEAPF32 ,
/** @type {Float64Array} */
HEAPF64 ;
function updateGlobalBuffer ( buf ) {
Module [ 'buffer' ] = buffer = buf ;
}
function updateGlobalBufferViews ( ) {
Module [ 'HEAP8' ] = HEAP8 = new Int8Array ( buffer ) ;
Module [ 'HEAP16' ] = HEAP16 = new Int16Array ( buffer ) ;
Module [ 'HEAP32' ] = HEAP32 = new Int32Array ( buffer ) ;
Module [ 'HEAPU8' ] = HEAPU8 = new Uint8Array ( buffer ) ;
Module [ 'HEAPU16' ] = HEAPU16 = new Uint16Array ( buffer ) ;
Module [ 'HEAPU32' ] = HEAPU32 = new Uint32Array ( buffer ) ;
Module [ 'HEAPF32' ] = HEAPF32 = new Float32Array ( buffer ) ;
Module [ 'HEAPF64' ] = HEAPF64 = new Float64Array ( buffer ) ;
}
var STATIC _BASE , STATICTOP , staticSealed ; // static area
var STACK _BASE , STACKTOP , STACK _MAX ; // stack area
var DYNAMIC _BASE , DYNAMICTOP _PTR ; // dynamic area handled by sbrk
STATIC _BASE = STATICTOP = STACK _BASE = STACKTOP = STACK _MAX = DYNAMIC _BASE = DYNAMICTOP _PTR = 0 ;
staticSealed = false ;
function abortOnCannotGrowMemory ( ) {
abort ( 'Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL _MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ' ) ;
}
if ( ! Module [ 'reallocBuffer' ] ) Module [ 'reallocBuffer' ] = function ( size ) {
var ret ;
try {
if ( ArrayBuffer . transfer ) {
ret = ArrayBuffer . transfer ( buffer , size ) ;
} else {
var oldHEAP8 = HEAP8 ;
ret = new ArrayBuffer ( size ) ;
var temp = new Int8Array ( ret ) ;
temp . set ( oldHEAP8 ) ;
}
} catch ( e ) {
return false ;
}
var success = _emscripten _replace _memory ( ret ) ;
if ( ! success ) return false ;
return ret ;
} ;
function enlargeMemory ( ) {
// TOTAL_MEMORY is the current size of the actual array, and DYNAMICTOP is the new top.
var PAGE _MULTIPLE = Module [ "usingWasm" ] ? WASM _PAGE _SIZE : ASMJS _PAGE _SIZE ; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.
var LIMIT = 2147483648 - PAGE _MULTIPLE ; // We can do one page short of 2GB as theoretical maximum.
if ( HEAP32 [ DYNAMICTOP _PTR >> 2 ] > LIMIT ) {
return false ;
}
var OLD _TOTAL _MEMORY = TOTAL _MEMORY ;
TOTAL _MEMORY = Math . max ( TOTAL _MEMORY , MIN _TOTAL _MEMORY ) ; // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.
while ( TOTAL _MEMORY < HEAP32 [ DYNAMICTOP _PTR >> 2 ] ) { // Keep incrementing the heap size as long as it's less than what is requested.
if ( TOTAL _MEMORY <= 536870912 ) {
TOTAL _MEMORY = alignUp ( 2 * TOTAL _MEMORY , PAGE _MULTIPLE ) ; // Simple heuristic: double until 1GB...
} else {
// ..., but after that, add smaller increments towards 2GB, which we cannot reach
TOTAL _MEMORY = Math . min ( alignUp ( ( 3 * TOTAL _MEMORY + 2147483648 ) / 4 , PAGE _MULTIPLE ) , LIMIT ) ;
}
}
var replacement = Module [ 'reallocBuffer' ] ( TOTAL _MEMORY ) ;
if ( ! replacement || replacement . byteLength != TOTAL _MEMORY ) {
// restore the state to before this call, we failed
TOTAL _MEMORY = OLD _TOTAL _MEMORY ;
return false ;
}
// everything worked
updateGlobalBuffer ( replacement ) ;
updateGlobalBufferViews ( ) ;
return true ;
}
var byteLength ;
try {
byteLength = Function . prototype . call . bind ( Object . getOwnPropertyDescriptor ( ArrayBuffer . prototype , 'byteLength' ) . get ) ;
byteLength ( new ArrayBuffer ( 4 ) ) ; // can fail on older ie
} catch ( e ) { // can fail on older node/v8
byteLength = function ( buffer ) { return buffer . byteLength ; } ;
}
var TOTAL _STACK = Module [ 'TOTAL_STACK' ] || 5242880 ;
var TOTAL _MEMORY = Module [ 'TOTAL_MEMORY' ] || 16777216 ;
if ( TOTAL _MEMORY < TOTAL _STACK ) Module . printErr ( 'TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL _MEMORY + '! (TOTAL_STACK=' + TOTAL _STACK + ')' ) ;
// Initialize the runtime's memory
// Use a provided buffer, if there is one, or else allocate a new one
if ( Module [ 'buffer' ] ) {
buffer = Module [ 'buffer' ] ;
} else {
// Use a WebAssembly memory where available
if ( typeof WebAssembly === 'object' && typeof WebAssembly . Memory === 'function' ) {
Module [ 'wasmMemory' ] = new WebAssembly . Memory ( { 'initial' : TOTAL _MEMORY / WASM _PAGE _SIZE } ) ;
buffer = Module [ 'wasmMemory' ] . buffer ;
} else
{
buffer = new ArrayBuffer ( TOTAL _MEMORY ) ;
}
Module [ 'buffer' ] = buffer ;
}
updateGlobalBufferViews ( ) ;
function getTotalMemory ( ) {
return TOTAL _MEMORY ;
}
// Endianness check (note: assumes compiler arch was little-endian)
HEAP32 [ 0 ] = 0x63736d65 ; /* 'emsc' */
HEAP16 [ 1 ] = 0x6373 ;
if ( HEAPU8 [ 2 ] !== 0x73 || HEAPU8 [ 3 ] !== 0x63 ) throw 'Runtime error: expected the system to be little-endian!' ;
function callRuntimeCallbacks ( callbacks ) {
while ( callbacks . length > 0 ) {
var callback = callbacks . shift ( ) ;
if ( typeof callback == 'function' ) {
callback ( ) ;
continue ;
}
var func = callback . func ;
if ( typeof func === 'number' ) {
if ( callback . arg === undefined ) {
Module [ 'dynCall_v' ] ( func ) ;
} else {
Module [ 'dynCall_vi' ] ( func , callback . arg ) ;
}
} else {
func ( callback . arg === undefined ? null : callback . arg ) ;
}
}
}
var _ _ATPRERUN _ _ = [ ] ; // functions called before the runtime is initialized
var _ _ATINIT _ _ = [ ] ; // functions called during startup
var _ _ATMAIN _ _ = [ ] ; // functions called when main() is to be run
var _ _ATEXIT _ _ = [ ] ; // functions called during shutdown
var _ _ATPOSTRUN _ _ = [ ] ; // functions called after the main() is called
var runtimeInitialized = false ;
var runtimeExited = false ;
function preRun ( ) {
// compatibility - merge in anything from Module['preRun'] at this time
if ( Module [ 'preRun' ] ) {
if ( typeof Module [ 'preRun' ] == 'function' ) Module [ 'preRun' ] = [ Module [ 'preRun' ] ] ;
while ( Module [ 'preRun' ] . length ) {
addOnPreRun ( Module [ 'preRun' ] . shift ( ) ) ;
}
}
callRuntimeCallbacks ( _ _ATPRERUN _ _ ) ;
}
function ensureInitRuntime ( ) {
if ( runtimeInitialized ) return ;
runtimeInitialized = true ;
callRuntimeCallbacks ( _ _ATINIT _ _ ) ;
}
function preMain ( ) {
callRuntimeCallbacks ( _ _ATMAIN _ _ ) ;
}
function exitRuntime ( ) {
callRuntimeCallbacks ( _ _ATEXIT _ _ ) ;
runtimeExited = true ;
}
function postRun ( ) {
// compatibility - merge in anything from Module['postRun'] at this time
if ( Module [ 'postRun' ] ) {
if ( typeof Module [ 'postRun' ] == 'function' ) Module [ 'postRun' ] = [ Module [ 'postRun' ] ] ;
while ( Module [ 'postRun' ] . length ) {
addOnPostRun ( Module [ 'postRun' ] . shift ( ) ) ;
}
}
callRuntimeCallbacks ( _ _ATPOSTRUN _ _ ) ;
}
function addOnPreRun ( cb ) {
_ _ATPRERUN _ _ . unshift ( cb ) ;
}
function addOnInit ( cb ) {
_ _ATINIT _ _ . unshift ( cb ) ;
}
function addOnPreMain ( cb ) {
_ _ATMAIN _ _ . unshift ( cb ) ;
}
function addOnExit ( cb ) {
_ _ATEXIT _ _ . unshift ( cb ) ;
}
function addOnPostRun ( cb ) {
_ _ATPOSTRUN _ _ . unshift ( cb ) ;
}
// Deprecated: This function should not be called because it is unsafe and does not provide
// a maximum length limit of how many bytes it is allowed to write. Prefer calling the
// function stringToUTF8Array() instead, which takes in a maximum length that can be used
// to be secure from out of bounds writes.
/** @deprecated */
function writeStringToMemory ( string , buffer , dontAddNull ) {
warnOnce ( 'writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!' ) ;
var /** @type {number} */ lastChar , /** @type {number} */ end ;
if ( dontAddNull ) {
// stringToUTF8Array always appends null. If we don't want to do that, remember the
// character that existed at the location where the null will be placed, and restore
// that after the write (below).
end = buffer + lengthBytesUTF8 ( string ) ;
lastChar = HEAP8 [ end ] ;
}
stringToUTF8 ( string , buffer , Infinity ) ;
if ( dontAddNull ) HEAP8 [ end ] = lastChar ; // Restore the value under the null character.
}
function writeArrayToMemory ( array , buffer ) {
HEAP8 . set ( array , buffer ) ;
}
function writeAsciiToMemory ( str , buffer , dontAddNull ) {
for ( var i = 0 ; i < str . length ; ++ i ) {
HEAP8 [ ( ( buffer ++ ) >> 0 ) ] = str . charCodeAt ( i ) ;
}
// Null-terminate the pointer to the HEAP.
if ( ! dontAddNull ) HEAP8 [ ( ( buffer ) >> 0 ) ] = 0 ;
}
function unSign ( value , bits , ignore ) {
if ( value >= 0 ) {
return value ;
}
return bits <= 32 ? 2 * Math . abs ( 1 << ( bits - 1 ) ) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
: Math . pow ( 2 , bits ) + value ;
}
function reSign ( value , bits , ignore ) {
if ( value <= 0 ) {
return value ;
}
var half = bits <= 32 ? Math . abs ( 1 << ( bits - 1 ) ) // abs is needed if bits == 32
: Math . pow ( 2 , bits - 1 ) ;
if ( value >= half && ( bits <= 32 || value > half ) ) { // for huge values, we can hit the precision limit and always get true here. so don't do that
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
// TODO: In i64 mode 1, resign the two parts separately and safely
value = - 2 * half + value ; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
}
return value ;
}
var Math _abs = Math . abs ;
var Math _cos = Math . cos ;
var Math _sin = Math . sin ;
var Math _tan = Math . tan ;
var Math _acos = Math . acos ;
var Math _asin = Math . asin ;
var Math _atan = Math . atan ;
var Math _atan2 = Math . atan2 ;
var Math _exp = Math . exp ;
var Math _log = Math . log ;
var Math _sqrt = Math . sqrt ;
var Math _ceil = Math . ceil ;
var Math _floor = Math . floor ;
var Math _pow = Math . pow ;
var Math _imul = Math . imul ;
var Math _fround = Math . fround ;
var Math _round = Math . round ;
var Math _min = Math . min ;
var Math _max = Math . max ;
var Math _clz32 = Math . clz32 ;
var Math _trunc = Math . trunc ;
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0 ;
var runDependencyWatcher = null ;
var dependenciesFulfilled = null ; // overridden to take different actions when all run dependencies are fulfilled
function getUniqueRunDependency ( id ) {
return id ;
}
function addRunDependency ( id ) {
runDependencies ++ ;
if ( Module [ 'monitorRunDependencies' ] ) {
Module [ 'monitorRunDependencies' ] ( runDependencies ) ;
}
}
function removeRunDependency ( id ) {
runDependencies -- ;
if ( Module [ 'monitorRunDependencies' ] ) {
Module [ 'monitorRunDependencies' ] ( runDependencies ) ;
}
if ( runDependencies == 0 ) {
if ( runDependencyWatcher !== null ) {
clearInterval ( runDependencyWatcher ) ;
runDependencyWatcher = null ;
}
if ( dependenciesFulfilled ) {
var callback = dependenciesFulfilled ;
dependenciesFulfilled = null ;
callback ( ) ; // can add another dependenciesFulfilled
}
}
}
Module [ "preloadedImages" ] = { } ; // maps url to image data
Module [ "preloadedAudios" ] = { } ; // maps url to audio data
var memoryInitializer = null ;
// Prefix of data URIs emitted by SINGLE_FILE and related options.
var dataURIPrefix = 'data:application/octet-stream;base64,' ;
// Indicates whether filename is a base64 data URI.
function isDataURI ( filename ) {
return String . prototype . startsWith ?
filename . startsWith ( dataURIPrefix ) :
filename . indexOf ( dataURIPrefix ) === 0 ;
}
function integrateWasmJS ( ) {
// wasm.js has several methods for creating the compiled code module here:
// * 'native-wasm' : use native WebAssembly support in the browser
// * 'interpret-s-expr': load s-expression code from a .wast and interpret
// * 'interpret-binary': load binary wasm and interpret
// * 'interpret-asm2wasm': load asm.js code, translate to wasm, and interpret
// * 'asmjs': no wasm, just load the asm.js code and use that (good for testing)
// The method is set at compile time (BINARYEN_METHOD)
// The method can be a comma-separated list, in which case, we will try the
// options one by one. Some of them can fail gracefully, and then we can try
// the next.
// inputs
var method = 'native-wasm' ;
var wasmTextFile = 'stbvorbis.wast' ;
var wasmBinaryFile = 'stbvorbis.wasm' ;
var asmjsCodeFile = 'stbvorbis.temp.asm.js' ;
if ( typeof Module [ 'locateFile' ] === 'function' ) {
if ( ! isDataURI ( wasmTextFile ) ) {
wasmTextFile = Module [ 'locateFile' ] ( wasmTextFile ) ;
}
if ( ! isDataURI ( wasmBinaryFile ) ) {
wasmBinaryFile = Module [ 'locateFile' ] ( wasmBinaryFile ) ;
}
if ( ! isDataURI ( asmjsCodeFile ) ) {
asmjsCodeFile = Module [ 'locateFile' ] ( asmjsCodeFile ) ;
}
}
// utilities
var wasmPageSize = 64 * 1024 ;
var info = {
'global' : null ,
'env' : null ,
'asm2wasm' : asm2wasmImports ,
'parent' : Module // Module inside wasm-js.cpp refers to wasm-js.cpp; this allows access to the outside program.
} ;
var exports = null ;
function mergeMemory ( newBuffer ) {
// The wasm instance creates its memory. But static init code might have written to
// buffer already, including the mem init file, and we must copy it over in a proper merge.
// TODO: avoid this copy, by avoiding such static init writes
// TODO: in shorter term, just copy up to the last static init write
var oldBuffer = Module [ 'buffer' ] ;
if ( newBuffer . byteLength < oldBuffer . byteLength ) {
Module [ 'printErr' ] ( 'the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here' ) ;
}
var oldView = new Int8Array ( oldBuffer ) ;
var newView = new Int8Array ( newBuffer ) ;
newView . set ( oldView ) ;
updateGlobalBuffer ( newBuffer ) ;
updateGlobalBufferViews ( ) ;
}
function fixImports ( imports ) {
return imports ;
}
function getBinary ( ) {
try {
if ( Module [ 'wasmBinary' ] ) {
return new Uint8Array ( Module [ 'wasmBinary' ] ) ;
}
if ( Module [ 'readBinary' ] ) {
return Module [ 'readBinary' ] ( wasmBinaryFile ) ;
} else {
throw "on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)" ;
}
}
catch ( err ) {
abort ( err ) ;
}
}
function getBinaryPromise ( ) {
// if we don't have the binary yet, and have the Fetch api, use that
// in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web
if ( ! Module [ 'wasmBinary' ] && ( ENVIRONMENT _IS _WEB || ENVIRONMENT _IS _WORKER ) && typeof fetch === 'function' ) {
return fetch ( wasmBinaryFile , { credentials : 'same-origin' } ) . then ( function ( response ) {
if ( ! response [ 'ok' ] ) {
throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" ;
}
return response [ 'arrayBuffer' ] ( ) ;
} ) . catch ( function ( ) {
return getBinary ( ) ;
} ) ;
}
// Otherwise, getBinary should be able to get it synchronously
return new Promise ( function ( resolve , reject ) {
resolve ( getBinary ( ) ) ;
} ) ;
}
// do-method functions
function doNativeWasm ( global , env , providedBuffer ) {
if ( typeof WebAssembly !== 'object' ) {
Module [ 'printErr' ] ( 'no native wasm support detected' ) ;
return false ;
}
// prepare memory import
if ( ! ( Module [ 'wasmMemory' ] instanceof WebAssembly . Memory ) ) {
Module [ 'printErr' ] ( 'no native wasm Memory in use' ) ;
return false ;
}
env [ 'memory' ] = Module [ 'wasmMemory' ] ;
// Load the wasm module and create an instance of using native support in the JS engine.
info [ 'global' ] = {
'NaN' : NaN ,
'Infinity' : Infinity
} ;
info [ 'global.Math' ] = Math ;
info [ 'env' ] = env ;
// handle a generated wasm instance, receiving its exports and
// performing other necessary setup
function receiveInstance ( instance , module ) {
exports = instance . exports ;
if ( exports . memory ) mergeMemory ( exports . memory ) ;
Module [ 'asm' ] = exports ;
Module [ "usingWasm" ] = true ;
removeRunDependency ( 'wasm-instantiate' ) ;
}
addRunDependency ( 'wasm-instantiate' ) ;
// User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
// to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel
// to any other async startup actions they are performing.
if ( Module [ 'instantiateWasm' ] ) {
try {
return Module [ 'instantiateWasm' ] ( info , receiveInstance ) ;
} catch ( e ) {
Module [ 'printErr' ] ( 'Module.instantiateWasm callback failed with error: ' + e ) ;
return false ;
}
}
function receiveInstantiatedSource ( output ) {
// 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.
// receiveInstance() will swap in the exports (to Module.asm) so they can be called
receiveInstance ( output [ 'instance' ] , output [ 'module' ] ) ;
}
function instantiateArrayBuffer ( receiver ) {
getBinaryPromise ( ) . then ( function ( binary ) {
return WebAssembly . instantiate ( binary , info ) ;
} ) . then ( receiver ) . catch ( function ( reason ) {
Module [ 'printErr' ] ( 'failed to asynchronously prepare wasm: ' + reason ) ;
abort ( reason ) ;
} ) ;
}
// Prefer streaming instantiation if available.
if ( ! Module [ 'wasmBinary' ] &&
typeof WebAssembly . instantiateStreaming === 'function' &&
! isDataURI ( wasmBinaryFile ) &&
typeof fetch === 'function' ) {
WebAssembly . instantiateStreaming ( fetch ( wasmBinaryFile , { credentials : 'same-origin' } ) , info )
. then ( receiveInstantiatedSource )
. catch ( function ( reason ) {
// We expect the most common failure cause to be a bad MIME type for the binary,
// in which case falling back to ArrayBuffer instantiation should work.
Module [ 'printErr' ] ( 'wasm streaming compile failed: ' + reason ) ;
Module [ 'printErr' ] ( 'falling back to ArrayBuffer instantiation' ) ;
instantiateArrayBuffer ( receiveInstantiatedSource ) ;
} ) ;
} else {
instantiateArrayBuffer ( receiveInstantiatedSource ) ;
}
return { } ; // no exports yet; we'll fill them in later
}
// We may have a preloaded value in Module.asm, save it
Module [ 'asmPreload' ] = Module [ 'asm' ] ;
// Memory growth integration code
var asmjsReallocBuffer = Module [ 'reallocBuffer' ] ;
var wasmReallocBuffer = function ( size ) {
var PAGE _MULTIPLE = Module [ "usingWasm" ] ? WASM _PAGE _SIZE : ASMJS _PAGE _SIZE ; // In wasm, heap size must be a multiple of 64KB. In asm.js, they need to be multiples of 16MB.
size = alignUp ( size , PAGE _MULTIPLE ) ; // round up to wasm page size
var old = Module [ 'buffer' ] ;
var oldSize = old . byteLength ;
if ( Module [ "usingWasm" ] ) {
// native wasm support
try {
var result = Module [ 'wasmMemory' ] . grow ( ( size - oldSize ) / wasmPageSize ) ; // .grow() takes a delta compared to the previous size
if ( result !== ( - 1 | 0 ) ) {
// success in native wasm memory growth, get the buffer from the memory
return Module [ 'buffer' ] = Module [ 'wasmMemory' ] . buffer ;
} else {
return null ;
}
} catch ( e ) {
return null ;
}
}
} ;
Module [ 'reallocBuffer' ] = function ( size ) {
if ( finalMethod === 'asmjs' ) {
return asmjsReallocBuffer ( size ) ;
} else {
return wasmReallocBuffer ( size ) ;
}
} ;
// we may try more than one; this is the final one, that worked and we are using
var finalMethod = '' ;
// Provide an "asm.js function" for the application, called to "link" the asm.js module. We instantiate
// the wasm module at that time, and it receives imports and provides exports and so forth, the app
// doesn't need to care that it is wasm or olyfilled wasm or asm.js.
Module [ 'asm' ] = function ( global , env , providedBuffer ) {
env = fixImports ( env ) ;
// import table
if ( ! env [ 'table' ] ) {
var TABLE _SIZE = Module [ 'wasmTableSize' ] ;
if ( TABLE _SIZE === undefined ) TABLE _SIZE = 1024 ; // works in binaryen interpreter at least
var MAX _TABLE _SIZE = Module [ 'wasmMaxTableSize' ] ;
if ( typeof WebAssembly === 'object' && typeof WebAssembly . Table === 'function' ) {
if ( MAX _TABLE _SIZE !== undefined ) {
env [ 'table' ] = new WebAssembly . Table ( { 'initial' : TABLE _SIZE , 'maximum' : MAX _TABLE _SIZE , 'element' : 'anyfunc' } ) ;
} else {
env [ 'table' ] = new WebAssembly . Table ( { 'initial' : TABLE _SIZE , element : 'anyfunc' } ) ;
}
} else {
env [ 'table' ] = new Array ( TABLE _SIZE ) ; // works in binaryen interpreter at least
}
Module [ 'wasmTable' ] = env [ 'table' ] ;
}
if ( ! env [ 'memoryBase' ] ) {
env [ 'memoryBase' ] = Module [ 'STATIC_BASE' ] ; // tell the memory segments where to place themselves
}
if ( ! env [ 'tableBase' ] ) {
env [ 'tableBase' ] = 0 ; // table starts at 0 by default, in dynamic linking this will change
}
// try the methods. each should return the exports if it succeeded
var exports ;
exports = doNativeWasm ( global , env , providedBuffer ) ;
assert ( exports , 'no binaryen method succeeded.' ) ;
return exports ;
} ;
var methodHandler = Module [ 'asm' ] ; // note our method handler, as we may modify Module['asm'] later
}
integrateWasmJS ( ) ;
// === Body ===
var ASM _CONSTS = [ ] ;
STATIC _BASE = GLOBAL _BASE ;
2018-07-04 18:37:51 +02:00
STATICTOP = STATIC _BASE + 3776 ;
2018-07-03 14:09:12 +02:00
/* global initializers */ _ _ATINIT _ _ . push ( ) ;
2018-07-04 18:37:51 +02:00
var STATIC _BUMP = 3776 ;
2018-07-03 14:09:12 +02:00
Module [ "STATIC_BASE" ] = STATIC _BASE ;
Module [ "STATIC_BUMP" ] = STATIC _BUMP ;
/* no memory initializer */
var tempDoublePtr = STATICTOP ; STATICTOP += 16 ;
function copyTempFloat ( ptr ) { // functions, because inlining this code increases code size too much
HEAP8 [ tempDoublePtr ] = HEAP8 [ ptr ] ;
HEAP8 [ tempDoublePtr + 1 ] = HEAP8 [ ptr + 1 ] ;
HEAP8 [ tempDoublePtr + 2 ] = HEAP8 [ ptr + 2 ] ;
HEAP8 [ tempDoublePtr + 3 ] = HEAP8 [ ptr + 3 ] ;
}
function copyTempDouble ( ptr ) {
HEAP8 [ tempDoublePtr ] = HEAP8 [ ptr ] ;
HEAP8 [ tempDoublePtr + 1 ] = HEAP8 [ ptr + 1 ] ;
HEAP8 [ tempDoublePtr + 2 ] = HEAP8 [ ptr + 2 ] ;
HEAP8 [ tempDoublePtr + 3 ] = HEAP8 [ ptr + 3 ] ;
HEAP8 [ tempDoublePtr + 4 ] = HEAP8 [ ptr + 4 ] ;
HEAP8 [ tempDoublePtr + 5 ] = HEAP8 [ ptr + 5 ] ;
HEAP8 [ tempDoublePtr + 6 ] = HEAP8 [ ptr + 6 ] ;
HEAP8 [ tempDoublePtr + 7 ] = HEAP8 [ ptr + 7 ] ;
}
// {{PRE_LIBRARY}}
function _ _ _assert _fail ( condition , filename , line , func ) {
abort ( 'Assertion failed: ' + Pointer _stringify ( condition ) + ', at: ' + [ filename ? Pointer _stringify ( filename ) : 'unknown filename' , line , func ? Pointer _stringify ( func ) : 'unknown function' ] ) ;
}
function _abort ( ) {
Module [ 'abort' ] ( ) ;
}
var _llvm _floor _f64 = Math _floor ;
function _emscripten _memcpy _big ( dest , src , num ) {
HEAPU8 . set ( HEAPU8 . subarray ( src , src + num ) , dest ) ;
return dest ;
}
function _ _ _setErrNo ( value ) {
if ( Module [ '___errno_location' ] ) HEAP32 [ ( ( Module [ '___errno_location' ] ( ) ) >> 2 ) ] = value ;
return value ;
}
DYNAMICTOP _PTR = staticAlloc ( 4 ) ;
STACK _BASE = STACKTOP = alignMemory ( STATICTOP ) ;
STACK _MAX = STACK _BASE + TOTAL _STACK ;
DYNAMIC _BASE = alignMemory ( STACK _MAX ) ;
HEAP32 [ DYNAMICTOP _PTR >> 2 ] = DYNAMIC _BASE ;
staticSealed = true ; // seal the static portion of memory
var ASSERTIONS = false ;
/** @type {function(string, boolean=, number=)} */
function intArrayFromString ( stringy , dontAddNull , length ) {
var len = length > 0 ? length : lengthBytesUTF8 ( stringy ) + 1 ;
var u8array = new Array ( len ) ;
var numBytesWritten = stringToUTF8Array ( stringy , u8array , 0 , u8array . length ) ;
if ( dontAddNull ) u8array . length = numBytesWritten ;
return u8array ;
}
function intArrayToString ( array ) {
var ret = [ ] ;
for ( var i = 0 ; i < array . length ; i ++ ) {
var chr = array [ i ] ;
if ( chr > 0xFF ) {
if ( ASSERTIONS ) {
assert ( false , 'Character code ' + chr + ' (' + String . fromCharCode ( chr ) + ') at offset ' + i + ' not in 0x00-0xFF.' ) ;
}
chr &= 0xFF ;
}
ret . push ( String . fromCharCode ( chr ) ) ;
}
return ret . join ( '' ) ;
}
Module [ 'wasmTableSize' ] = 4 ;
Module [ 'wasmMaxTableSize' ] = 4 ;
function invoke _iii ( index , a1 , a2 ) {
try {
return Module [ "dynCall_iii" ] ( index , a1 , a2 ) ;
} catch ( e ) {
if ( typeof e !== 'number' && e !== 'longjmp' ) throw e ;
Module [ "setThrew" ] ( 1 , 0 ) ;
}
}
Module . asmGlobalArg = { } ;
Module . asmLibraryArg = { "abort" : abort , "assert" : assert , "enlargeMemory" : enlargeMemory , "getTotalMemory" : getTotalMemory , "abortOnCannotGrowMemory" : abortOnCannotGrowMemory , "invoke_iii" : invoke _iii , "___assert_fail" : _ _ _assert _fail , "___setErrNo" : _ _ _setErrNo , "_abort" : _abort , "_emscripten_memcpy_big" : _emscripten _memcpy _big , "_llvm_floor_f64" : _llvm _floor _f64 , "DYNAMICTOP_PTR" : DYNAMICTOP _PTR , "tempDoublePtr" : tempDoublePtr , "ABORT" : ABORT , "STACKTOP" : STACKTOP , "STACK_MAX" : STACK _MAX } ;
// EMSCRIPTEN_START_ASM
var asm = Module [ "asm" ] // EMSCRIPTEN_END_ASM
( Module . asmGlobalArg , Module . asmLibraryArg , buffer ) ;
Module [ "asm" ] = asm ;
var _ _ _errno _location = Module [ "___errno_location" ] = function ( ) { return Module [ "asm" ] [ "___errno_location" ] . apply ( null , arguments ) } ;
var _emscripten _replace _memory = Module [ "_emscripten_replace_memory" ] = function ( ) { return Module [ "asm" ] [ "_emscripten_replace_memory" ] . apply ( null , arguments ) } ;
var _free = Module [ "_free" ] = function ( ) { return Module [ "asm" ] [ "_free" ] . apply ( null , arguments ) } ;
var _malloc = Module [ "_malloc" ] = function ( ) { return Module [ "asm" ] [ "_malloc" ] . apply ( null , arguments ) } ;
var _memcpy = Module [ "_memcpy" ] = function ( ) { return Module [ "asm" ] [ "_memcpy" ] . apply ( null , arguments ) } ;
var _memset = Module [ "_memset" ] = function ( ) { return Module [ "asm" ] [ "_memset" ] . apply ( null , arguments ) } ;
var _sbrk = Module [ "_sbrk" ] = function ( ) { return Module [ "asm" ] [ "_sbrk" ] . apply ( null , arguments ) } ;
2018-07-04 18:37:51 +02:00
var _stb _vorbis _decode _memory _float = Module [ "_stb_vorbis_decode_memory_float" ] = function ( ) { return Module [ "asm" ] [ "_stb_vorbis_decode_memory_float" ] . apply ( null , arguments ) } ;
2018-07-03 14:09:12 +02:00
var establishStackSpace = Module [ "establishStackSpace" ] = function ( ) { return Module [ "asm" ] [ "establishStackSpace" ] . apply ( null , arguments ) } ;
var getTempRet0 = Module [ "getTempRet0" ] = function ( ) { return Module [ "asm" ] [ "getTempRet0" ] . apply ( null , arguments ) } ;
var runPostSets = Module [ "runPostSets" ] = function ( ) { return Module [ "asm" ] [ "runPostSets" ] . apply ( null , arguments ) } ;
var setTempRet0 = Module [ "setTempRet0" ] = function ( ) { return Module [ "asm" ] [ "setTempRet0" ] . apply ( null , arguments ) } ;
var setThrew = Module [ "setThrew" ] = function ( ) { return Module [ "asm" ] [ "setThrew" ] . apply ( null , arguments ) } ;
var stackAlloc = Module [ "stackAlloc" ] = function ( ) { return Module [ "asm" ] [ "stackAlloc" ] . apply ( null , arguments ) } ;
var stackRestore = Module [ "stackRestore" ] = function ( ) { return Module [ "asm" ] [ "stackRestore" ] . apply ( null , arguments ) } ;
var stackSave = Module [ "stackSave" ] = function ( ) { return Module [ "asm" ] [ "stackSave" ] . apply ( null , arguments ) } ;
var dynCall _iii = Module [ "dynCall_iii" ] = function ( ) { return Module [ "asm" ] [ "dynCall_iii" ] . apply ( null , arguments ) } ;
;
// === Auto-generated postamble setup entry stuff ===
Module [ 'asm' ] = asm ;
Module [ "ccall" ] = ccall ;
Module [ "cwrap" ] = cwrap ;
/ * *
* @ constructor
* @ extends { Error }
* @ this { ExitStatus }
* /
function ExitStatus ( status ) {
this . name = "ExitStatus" ;
this . message = "Program terminated with exit(" + status + ")" ;
this . status = status ;
} ;
ExitStatus . prototype = new Error ( ) ;
ExitStatus . prototype . constructor = ExitStatus ;
var initialStackTop ;
var calledMain = false ;
dependenciesFulfilled = function runCaller ( ) {
// If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
if ( ! Module [ 'calledRun' ] ) run ( ) ;
if ( ! Module [ 'calledRun' ] ) dependenciesFulfilled = runCaller ; // try this again later, after new deps are fulfilled
}
/** @type {function(Array=)} */
function run ( args ) {
args = args || Module [ 'arguments' ] ;
if ( runDependencies > 0 ) {
return ;
}
preRun ( ) ;
if ( runDependencies > 0 ) return ; // a preRun added a dependency, run will be called later
if ( Module [ 'calledRun' ] ) return ; // run may have just been called through dependencies being fulfilled just in this very frame
function doRun ( ) {
if ( Module [ 'calledRun' ] ) return ; // run may have just been called while the async setStatus time below was happening
Module [ 'calledRun' ] = true ;
if ( ABORT ) return ;
ensureInitRuntime ( ) ;
preMain ( ) ;
if ( Module [ 'onRuntimeInitialized' ] ) Module [ 'onRuntimeInitialized' ] ( ) ;
postRun ( ) ;
}
if ( Module [ 'setStatus' ] ) {
Module [ 'setStatus' ] ( 'Running...' ) ;
setTimeout ( function ( ) {
setTimeout ( function ( ) {
Module [ 'setStatus' ] ( '' ) ;
} , 1 ) ;
doRun ( ) ;
} , 1 ) ;
} else {
doRun ( ) ;
}
}
Module [ 'run' ] = run ;
function exit ( status , implicit ) {
// if this is just main exit-ing implicitly, and the status is 0, then we
// don't need to do anything here and can just leave. if the status is
// non-zero, though, then we need to report it.
// (we may have warned about this earlier, if a situation justifies doing so)
if ( implicit && Module [ 'noExitRuntime' ] && status === 0 ) {
return ;
}
if ( Module [ 'noExitRuntime' ] ) {
} else {
ABORT = true ;
EXITSTATUS = status ;
STACKTOP = initialStackTop ;
exitRuntime ( ) ;
if ( Module [ 'onExit' ] ) Module [ 'onExit' ] ( status ) ;
}
if ( ENVIRONMENT _IS _NODE ) {
process [ 'exit' ] ( status ) ;
}
Module [ 'quit' ] ( status , new ExitStatus ( status ) ) ;
}
Module [ 'exit' ] = exit ;
var abortDecorators = [ ] ;
function abort ( what ) {
if ( Module [ 'onAbort' ] ) {
Module [ 'onAbort' ] ( what ) ;
}
if ( what !== undefined ) {
Module . print ( what ) ;
Module . printErr ( what ) ;
what = JSON . stringify ( what )
} else {
what = '' ;
}
ABORT = true ;
EXITSTATUS = 1 ;
throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.' ;
}
Module [ 'abort' ] = abort ;
// {{PRE_RUN_ADDITIONS}}
if ( Module [ 'preInit' ] ) {
if ( typeof Module [ 'preInit' ] == 'function' ) Module [ 'preInit' ] = [ Module [ 'preInit' ] ] ;
while ( Module [ 'preInit' ] . length > 0 ) {
Module [ 'preInit' ] . pop ( ) ( ) ;
}
}
Module [ "noExitRuntime" ] = true ;
run ( ) ;
// {{POST_RUN_ADDITIONS}}
// {{MODULE_ADDITIONS}}