dlib/wasm/runtime/wasm.d

80 lines
1.2 KiB
D

module wasm;
import ldc.attributes;
enum SprintfType : size_t
{
None,
U8,
I8,
U16,
I16,
U32,
I32,
U64,
I64,
SizeT,
F32,
F64,
Bool,
String,
U8Array,
I8Array,
U16Array,
I16Array,
U32Array,
I32Array,
U64Array,
I64Array,
F32Array,
F64Array,
Char,
CharArray,
}
extern extern(C) @nogc @llvmAttr("wasm-import-module", "env"):
@llvmAttr("wasm-import-name", "Console") void
Console(string str, bool write_line);
@llvmAttr("wasm-import-name", "Console2") void
Console2(size_t length, const(void)* ptr, bool write_line);
@llvmAttr("wasm-import-name", "Abort") void
Abort(string message);
@llvmAttr("wasm-import-name", "SprintfLoadValue") void
SprintfLoadValue(const(void)* ptr, SprintfType type);
@llvmAttr("wasm-import-name", "SprintfLoadArray") void
SprintfLoadArray(size_t length, const(void)* ptr, SprintfType type);
@llvmAttr("wasm-import-name", "SprintfEnd") size_t
SprintfEnd(char[] buffer, string format);
export void
_start()
{
import dlib.alloc;
import dlib.util;
ResetScratch(MB(2));
}
version(DLIB_TEST)
{
export void
RunTests()
{
Console("azZ", true);
static foreach(test_fn; __traits(getUnitTests, __traits(parent, _start)))
{
Console("Running test", true);
test_fn();
}
Console("Tests succeeded", true);
}
}