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); } }