1 module object; 2 3 // Reminder: my only target is x86_64 4 public import runtime.primitives.equality : __equals; 5 public import runtime.primitives.memory : _memset32; 6 public import runtime.primitives.move : __ArrayDtor; 7 public import runtime.entrypoint : _d_cmain; 8 public import libd.datastructures.string, libd.datastructures.array, libd.datastructures.hashstuff, libd.util.errorhandling; 9 10 extern(C) int _fltused = 0; // not a fucking clue. 11 12 alias string = immutable(char)[]; 13 alias bcstring = const(char)[]; 14 alias size_t = ulong; 15 alias ptrdiff_t = long; 16 17 extern(C) void _d_assert(const char[] message, uint line) 18 { 19 assertImpl(String(message), String("Unknown"), line); 20 } 21 22 extern(C) void _d_assertp() 23 { 24 assertImpl(String("Unknown"), String("Unkown"), 0); 25 } 26 27 extern(C) void _assert(char* message, char* file, uint line) 28 { 29 assertImpl(String(message), String(file), line); 30 } 31 32 private void assertImpl(String message, String file, uint line) 33 { 34 import runtime.stacktrace, libd.console.io; 35 36 size_t traceCount; 37 38 auto traces = traceGetStackTrace!8(2, traceCount); 39 40 Array!char output; 41 traceFormatStackTrace(output, traces); 42 consoleWriteln(output[]); 43 44 version(unittest) 45 { 46 import libd.testing.runner, libd.async; 47 if(!g_testRunnerRunning) 48 return; 49 50 taskYieldRaise(BcError( 51 traces[0].file, 52 traces[0].symbol, 53 String("Unknown"), 54 traces[0].line, 55 0, 56 message 57 )); 58 } 59 }