blob: 837b428998055a92f1e6d1f45ef520375c9d1c79 [file] [log] [blame]
/**
* @license
* Copyright 2022 The Emscripten Authors
* SPDX-License-Identifier: MIT
*/
mergeInto(LibraryManager.library, {
// Backend support. wasmFS$backends will contain a mapping of backend IDs to
// the JS code that implements them. This is the JS side of the JSImpl* class
// in C++, together with the js_impl calls defined right after it.
$wasmFS$backends: {},
_wasmfs_jsimpl_alloc_file: function(backend, file) {
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
return wasmFS$backends[backend].allocFile(file);
},
_wasmfs_jsimpl_free_file: function(backend, file) {
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
return wasmFS$backends[backend].freeFile(file);
},
_wasmfs_jsimpl_write: function(backend, file, buffer, length, {{{ defineI64Param('offset') }}}) {
{{{ receiveI64ParamAsDouble('offset') }}}
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
return wasmFS$backends[backend].write(file, buffer, length, offset);
},
_wasmfs_jsimpl_read: function(backend, file, buffer, length, {{{ defineI64Param('offset') }}}) {
{{{ receiveI64ParamAsDouble('offset') }}}
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
return wasmFS$backends[backend].read(file, buffer, length, offset);
},
_wasmfs_jsimpl_get_size: function(backend, file) {
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
return wasmFS$backends[backend].getSize(file);
},
// ProxiedAsyncJSImpl. Each function receives a function pointer and a
// parameter. We convert those into a convenient Promise API for the
// implementors of backends: the hooks we call should return Promises, which
// we then connect to the calling C++.
_wasmfs_jsimpl_async_alloc_file__sig: 'vppp',
_wasmfs_jsimpl_async_alloc_file: async function(ctx, backend, file) {
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
await wasmFS$backends[backend].allocFile(file);
_emscripten_proxy_finish(ctx);
},
_wasmfs_jsimpl_async_free_file: async function(ctx, backend, file) {
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
await wasmFS$backends[backend].freeFile(file);
_emscripten_proxy_finish(ctx);
},
_wasmfs_jsimpl_async_write__sig: 'vpppppjp',
_wasmfs_jsimpl_async_write: async function(ctx, backend, file, buffer, length, {{{ defineI64Param('offset') }}}, result_p) {
{{{ receiveI64ParamAsDouble('offset') }}}
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
var result = await wasmFS$backends[backend].write(file, buffer, length, offset);
{{{ makeSetValue('result_p', 0, 'result', SIZE_TYPE) }}};
_emscripten_proxy_finish(ctx);
},
_wasmfs_jsimpl_async_read__sig: 'vpppppjp',
_wasmfs_jsimpl_async_read: async function(ctx, backend, file, buffer, length, {{{ defineI64Param('offset') }}}, result_p) {
{{{ receiveI64ParamAsDouble('offset') }}}
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
var result = await wasmFS$backends[backend].read(file, buffer, length, offset);
{{{ makeSetValue('result_p', 0, 'result', SIZE_TYPE) }}};
_emscripten_proxy_finish(ctx);
},
_wasmfs_jsimpl_async_get_size__sig: 'vpppp',
_wasmfs_jsimpl_async_get_size: async function(ctx, backend, file, size_p) {
#if ASSERTIONS
assert(wasmFS$backends[backend]);
#endif
var size = await wasmFS$backends[backend].getSize(file);
{{{ makeSetValue('size_p', 0, 'size', 'i64') }}};
_emscripten_proxy_finish(ctx);
},
});