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 }