some clean up (something broke!)

This commit is contained in:
Matthew 2026-05-03 16:26:41 +10:00
parent b0c0120fc4
commit f98e6cc07f
14 changed files with 139 additions and 71 deletions

View File

@ -56,6 +56,8 @@ extern(C)
} }
*/ */
@nogc:
version(WebAssembly) version(WebAssembly)
{ {

View File

@ -18,22 +18,22 @@
#endif #endif
#if !defined(NO_STBI) && !defined(BUILD_WASM) #if !defined(NO_STBI) && !defined(BUILD_WASM)
# include "external/stb/stb_image.h" # include "../external/stb/stb_image.h"
# include "external/stb/stb_image_write.h" # include "../external/stb/stb_image_write.h"
#endif #endif
#ifdef BUILD_WASM #ifdef BUILD_WASM
# include "external/tinyalloc/tinyalloc.c" # include "../external/tinyalloc/tinyalloc.c"
#endif #endif
#ifndef NO_STBI #ifndef NO_STBI
# include "external/stb/stb_truetype.h" # include "../external/stb/stb_truetype.h"
#endif #endif
#ifdef DLIB_INCLUDE_VULKAN #ifdef DLIB_INCLUDE_VULKAN
# include "../VulkanRenderer/vulkan_includes.c" # include "../../VulkanRenderer/vulkan_includes.c"
#endif #endif
#ifndef BUILD_WASM #ifndef BUILD_WASM
# include "external/cgltf/cgltf.h" # include "../external/cgltf/cgltf.h"
#endif #endif

View File

@ -47,7 +47,7 @@ struct stbtt_fontinfo
stbtt__buf fdselect; stbtt__buf fdselect;
} }
extern(C): @nogc extern(C):
// stb_truetype // stb_truetype

View File

@ -461,7 +461,7 @@ struct Vector(T, int N)
return this; return this;
} }
ref Vector opAssign(U)(U u) if(isStaticArray!(U) && U.length == N && isAssignable!(T, typeof(*U.init.ptr))) ref Vector opAssign(U)(U u) if(isArray!(U) && U.length == N)
{ {
static foreach(i; 0 .. N) static foreach(i; 0 .. N)
{ {
@ -470,9 +470,12 @@ struct Vector(T, int N)
return this; return this;
} }
ref Vector opAssign(U)(U u) if(is(U : Vector)) ref Vector opAssign(U)(U u) if(isInstanceOf!(Vector, U))
{ {
v[] = u.v[]; static foreach(i; 0 .. N)
{
v[i] = cast(T)u.v[i];
}
return this; return this;
} }

View File

@ -10,30 +10,7 @@ public import dlib.assets;
public import dlib.externdecl; public import dlib.externdecl;
version(WebAssembly) version(WebAssembly)
{ {}
version(unittest)
{
extern(C) void _start()
{
import wasm;
import std.format;
char[512] buffer;
u32[5] arr = [3, 55, 123, 528, 3943];
string str = Str(sformat(buffer, "Nigger %s pppp %s", "faggot", arr));
Console(str, true);
static foreach(test_fn; __traits(getUnitTests, __traits(parent, _start)))
{
test_fn();
}
Console("success", true);
}
}
}
else else
{ {
public import dlibincludes; public import dlibincludes;

View File

@ -1972,10 +1972,10 @@ version(DLIB_TEST) unittest
u8[] data_valid, data_test; u8[] data_valid, data_test;
File f = File("platform.d", "rb"); File f = File("dlib/platform.d", "rb");
data_valid = f.rawRead(new u8[f.size()]); data_valid = f.rawRead(new u8[f.size()]);
data_test = LoadFile(&arena, "platform.d"); data_test = LoadFile(&arena, "dlib/platform.d");
assert(data_valid == data_test); assert(data_valid == data_test);
} }

View File

@ -7,12 +7,13 @@ import std.traits : isIntegral, hasMember, isArray;
import core.stdc.string; import core.stdc.string;
import std.format : sformat;
import std.stdio : writeln, writef, writefln;
//import std.traits; //import std.traits;
static if(NativeTarget) static if(NativeTarget)
{ {
import std.format : sformat;
import std.stdio : writeln, writef, writefln;
import dlib.platform; import dlib.platform;
} }
@ -77,6 +78,8 @@ CastArr(T, U)(U[] input_array)
return output_array; return output_array;
} }
// TODO: remove exceptions here
void void
Logf(string prefix = "INFO ", Args...)(string fmt, Args args) Logf(string prefix = "INFO ", Args...)(string fmt, Args args)
{ {
@ -92,6 +95,11 @@ Logf(string prefix = "INFO ", Args...)(string fmt, Args args)
assert(false, "Incompatible format type"); assert(false, "Incompatible format type");
} }
} }
else
{
writef("[%s]: ", prefix);
writefln(fmt, args);
}
} }
void void
@ -109,6 +117,11 @@ Logif(Args...)(string fmt, Args args, string func = __FUNCTION__)
assert(false, "Incompatible format type"); assert(false, "Incompatible format type");
} }
} }
else
{
writef("FN: [%s] ", func);
Logf(fmt, args);
}
} }
void void
@ -132,44 +145,46 @@ Debugf(Args...)(string fmt, Args args)
string string
Scratchf(Args...)(string fmt, Args args) Scratchf(Args...)(string fmt, Args args)
{ {
static if(NativeTarget) assert(g_scratch.init);
{ char[] buf = ScratchAlloc!(char)(fmt.length < 16 ? 32 : 128);
assert(g_scratch.init); return Str(sformat(buf, fmt, args));
char[] buf = ScratchAlloc!(char)(fmt.length < 16 ? 32 : 128);
return Str(sformat(buf, fmt, args));
}
else static assert(false, NO_IMPL);
} }
void void
Log(string str) Log(string str)
{ {
static if(NativeTarget) writeln(str); writeln(str);
} }
void void
Log(char* str) Log(char* str)
{ {
static if(NativeTarget) writeln(str); writeln(str[0 .. cast(usize)(strlen(str))]);
} }
@nogc usize @nogc pure @safe
{
usize
KB(usize v) KB(usize v)
{ {
return v * 1024; return v * 1024;
}; }
@nogc usize usize
MB(usize v) MB(usize v)
{ {
return KB(v) * 1024; return KB(v) * 1024;
}; }
@nogc usize usize
GB(usize v) GB(usize v)
{ {
return MB(v) * 1024; return MB(v) * 1024;
}; }
}
u32 u32
StrCharCount(T)(T str, u8 ch) if(is(T: string) || is(T: u8[]) || is(T: char[])) StrCharCount(T)(T str, u8 ch) if(is(T: string) || is(T: u8[]) || is(T: char[]))
@ -1319,10 +1334,10 @@ version(DLIB_TEST) unittest
} }
{ // Hash { // Hash
u8[10] arr_1 = 5; u8[10] arr_1 = 5;
u64[10] arr_2 = 555; u64[10] arr_2 = 555;
u64 val_1 = 555555; u64 val_1 = 555555;
u32 val_2 = 33333; u32 val_2 = 33333;
u64 v1 = Hash(arr_1); u64 v1 = Hash(arr_1);
u64 v2 = Hash(arr_2); u64 v2 = Hash(arr_2);
@ -1339,11 +1354,11 @@ version(DLIB_TEST) unittest
arr = CastArr!(u8)(char_arr); arr = CastArr!(u8)(char_arr);
} }
static if(NativeTarget)
{ {
ResetScratch(MB(4)); ResetScratch(MB(4));
string str = Scratchf("%s testing %s", 55, "testing"); string str = Scratchf("%s testing %s", 55, "testing");
assert(str == "55 testing testing"); assert(str == "55 testing testing");
Logf(str);
} }
{ {

View File

@ -5,18 +5,18 @@ name="Test_Runner"
shared_src="dlib/package.d dlib/platform.d dlib/fonts.d dlib/aliases.d dlib/math.d dlib/util.d dlib/alloc.d dlib/assets.d dlib/externdecl.d" shared_src="dlib/package.d dlib/platform.d dlib/fonts.d dlib/aliases.d dlib/math.d dlib/util.d dlib/alloc.d dlib/assets.d dlib/externdecl.d"
if [ "$1" == "wasm" ]; then if [ "$1" == "wasm" ]; then
flags="-c -vgc -mtriple=wasm32-unknown-unknown-wasm -fvisibility=public -dllimport=all --unittest --Xcc=-DBUILD_WASM -Iwasm/runtime -L--no-entry -i=core -i=std -i=. -g --real-precision=double --of=build/dlibmain.wasm --d-version=inline_concat -verrors=90" flags="-c -vgc -mtriple=wasm32-unknown-unknown-wasm -d-version=DLIB_TEST -fvisibility=public -dllimport=all --unittest --Xcc=-DBUILD_WASM -Iwasm/runtime -L--no-entry -i=core -i=std -i=. --real-precision=double --of=build/dlibmain.wasm --d-version=inline_concat -verrors=90"
wasm_src="wasm/runtime/object.d" wasm_src="wasm/runtime/object.d"
/bin/bash ./build.sh build wasm /bin/bash ./build.sh build wasm
ldc2 $flags $shared_src $wasm_src ldc2 $flags $shared_src $wasm_src
wasm-ld build/dlibmain.wasm build/dlibincludes.wasm --error-limit=0 --export-memory -obuild/dlib.wasm wasm-ld build/dlibmain.wasm build/dlibincludes.wasm --export=RunTests --error-limit=0 --export-memory -obuild/dlib.wasm
cp build/dlib.wasm wasm/dlib.wasm cp build/dlib.wasm wasm/dlib.wasm
else else
flags="-P-I/usr/include/freetype2 -L-lfreetype --main --unittest -g --of=$name" flags="-P-I/usr/include/freetype2 -Idlib -L-lfreetype --main --unittest -g --of=$name"
/bin/bash ./build.sh build /bin/bash ./build.sh build

Binary file not shown.

Binary file not shown.

View File

@ -212,7 +212,7 @@ extern(C) void _d_arraybounds_index(string file, uint line, size_t index, size_t
// } // }
extern(C) void _d_assert(string file, uint line) @trusted @nogc pure extern(C) void _d_assert(string file, uint line) @trusted @nogc
{ {
Abort("Assertion failure"); Abort("Assertion failure");
} }
@ -222,12 +222,12 @@ void _d_assertp(immutable(char)* file, uint line)
Abort("Assertion failure"); Abort("Assertion failure");
} }
extern(C) void _d_assert_msg(string msg, string file, uint line) @trusted @nogc pure extern(C) void _d_assert_msg(string msg, string file, uint line) @trusted @nogc
{ {
Abort("Assertion failure with msg"); Abort("Assertion failure with msg");
} }
void __switch_error(string file, size_t line) @trusted @nogc pure void __switch_error(string file, size_t line) @trusted @nogc
{ {
_d_assert_msg("final switch error", file, line); _d_assert_msg("final switch error", file, line);
} }

View File

@ -2,21 +2,49 @@ module std.stdio;
import dlib.util; import dlib.util;
import std.traits; import std.traits;
import wasm;
import std.format;
void void
writefln(alias fmt, A...)(A args) if(isSomeString!(typeof(fmt))) writefln(alias fmt, A...)(A args) if(isSomeString!(typeof(fmt)))
{ {
static foreach(i; 0 .. A.length) .writefln(Str(fmt), args);
{
{
static if()
}
}
} }
void void
writefln(Char, A...)(in Char[] fmt, A args) writefln(Char, A...)(in Char[] fmt, A args)
{ {
writefln(Str(fmt), args); char[1024] buffer;
string result = Str(sformat(buffer, fmt, args));
Console(result, true);
} }
void
writef(alias fmt, A...)(A args) if(isSomeString!(typeof(fmt)))
{
.writef(Str(fmt), args);
}
void
writef(Char, A...)(in Char[] fmt, A args)
{
char[1024] buffer;
string result = Str(sformat(buffer, fmt, args));
Console(result, false);
}
void
write(T...)(T args) if(T.length == 1 && isSomeString!(T[0]))
{
Console(Str(args[0]), false);
}
void
writeln(T...)(T args) if(T.length == 1 && isSomeString!(T[0]))
{
Console(Str(args[0]), true);
}

View File

@ -32,11 +32,14 @@ enum SprintfType : size_t
CharArray, CharArray,
} }
extern extern(C) @nogc pure @llvmAttr("wasm-import-module", "env"): extern extern(C) @nogc @llvmAttr("wasm-import-module", "env"):
@llvmAttr("wasm-import-name", "Console") void @llvmAttr("wasm-import-name", "Console") void
Console(string str, bool write_line); 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 @llvmAttr("wasm-import-name", "Abort") void
Abort(string message); Abort(string message);
@ -49,3 +52,28 @@ SprintfLoadArray(size_t length, const(void)* ptr, SprintfType type);
@llvmAttr("wasm-import-name", "SprintfEnd") size_t @llvmAttr("wasm-import-name", "SprintfEnd") size_t
SprintfEnd(char[] buffer, string format); 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);
}
}

View File

@ -253,6 +253,19 @@ class WasmManager
Console(string_length, string_ptr, write_line) Console(string_length, string_ptr, write_line)
{ {
manager.stdout_string += manager.LoadString(string_length, string_ptr); manager.stdout_string += manager.LoadString(string_length, string_ptr);
const arr = manager.LoadArray(Uint8Array, string_length, string_ptr);
if(write_line || manager.stdout_string.includes("\n"))
{
console.log(manager.stdout_string);
manager.stdout_string = "";
}
},
Console2(string_length, string_ptr, write_line)
{
manager.stdout_string += manager.LoadString(string_length, string_ptr);
const arr = manager.LoadArray(Uint8Array, string_length, string_ptr);
if(write_line || manager.stdout_string.includes("\n")) if(write_line || manager.stdout_string.includes("\n"))
{ {
console.log(manager.stdout_string); console.log(manager.stdout_string);
@ -281,5 +294,7 @@ async function StartWasm(path)
exports?._start(); exports?._start();
exports?.RunTests();
return; return;
} }