aboutsummaryrefslogtreecommitdiff
path: root/lib/std/debug.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-06-16 18:27:44 -0400
committerGitHub <noreply@github.com>2020-06-16 18:27:44 -0400
commit9781342042798f7a75f3f7233872bae0fbde3ecc (patch)
treebe2ff5a5010332550258811f36af2c1543b46fa0 /lib/std/debug.zig
parentf0b8791da75d2cb9c73424b8270da81e7d0ec333 (diff)
parentaf592f0ddd4448e746cf288b674c0199325598d5 (diff)
downloadzig-9781342042798f7a75f3f7233872bae0fbde3ecc.tar.gz
zig-9781342042798f7a75f3f7233872bae0fbde3ecc.zip
Merge pull request #5607 from daurnimator/cleanup-debug-stderr
std: clean up debug stderr variables
Diffstat (limited to 'lib/std/debug.zig')
-rw-r--r--lib/std/debug.zig34
1 files changed, 10 insertions, 24 deletions
diff --git a/lib/std/debug.zig b/lib/std/debug.zig
index f339aa639b..591f2d1a80 100644
--- a/lib/std/debug.zig
+++ b/lib/std/debug.zig
@@ -50,33 +50,17 @@ pub const LineInfo = struct {
}
};
-/// Tries to write to stderr, unbuffered, and ignores any error returned.
-/// Does not append a newline.
-var stderr_file: File = undefined;
-var stderr_file_writer: File.Writer = undefined;
-
-var stderr_stream: ?*File.OutStream = null;
var stderr_mutex = std.Mutex.init();
+/// Tries to write to stderr, unbuffered, and ignores any error returned.
+/// Does not append a newline.
pub fn warn(comptime fmt: []const u8, args: var) void {
const held = stderr_mutex.acquire();
defer held.release();
- const stderr = getStderrStream();
+ const stderr = io.getStdErr().writer();
nosuspend stderr.print(fmt, args) catch return;
}
-pub fn getStderrStream() *File.OutStream {
- if (stderr_stream) |st| {
- return st;
- } else {
- stderr_file = io.getStdErr();
- stderr_file_writer = stderr_file.outStream();
- const st = &stderr_file_writer;
- stderr_stream = st;
- return st;
- }
-}
-
pub fn getStderrMutex() *std.Mutex {
return &stderr_mutex;
}
@@ -99,6 +83,7 @@ pub fn detectTTYConfig() TTY.Config {
if (process.getEnvVarOwned(allocator, "ZIG_DEBUG_COLOR")) |_| {
return .escape_codes;
} else |_| {
+ const stderr_file = io.getStdErr();
if (stderr_file.supportsAnsiEscapeCodes()) {
return .escape_codes;
} else if (builtin.os.tag == .windows and stderr_file.isTty()) {
@@ -113,7 +98,7 @@ pub fn detectTTYConfig() TTY.Config {
/// TODO multithreaded awareness
pub fn dumpCurrentStackTrace(start_addr: ?usize) void {
nosuspend {
- const stderr = getStderrStream();
+ const stderr = io.getStdErr().writer();
if (builtin.strip_debug_info) {
stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return;
return;
@@ -134,7 +119,7 @@ pub fn dumpCurrentStackTrace(start_addr: ?usize) void {
/// TODO multithreaded awareness
pub fn dumpStackTraceFromBase(bp: usize, ip: usize) void {
nosuspend {
- const stderr = getStderrStream();
+ const stderr = io.getStdErr().writer();
if (builtin.strip_debug_info) {
stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return;
return;
@@ -204,7 +189,7 @@ pub fn captureStackTrace(first_address: ?usize, stack_trace: *builtin.StackTrace
/// TODO multithreaded awareness
pub fn dumpStackTrace(stack_trace: builtin.StackTrace) void {
nosuspend {
- const stderr = getStderrStream();
+ const stderr = io.getStdErr().writer();
if (builtin.strip_debug_info) {
stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return;
return;
@@ -272,7 +257,7 @@ pub fn panicExtra(trace: ?*const builtin.StackTrace, first_trace_addr: ?usize, c
const held = panic_mutex.acquire();
defer held.release();
- const stderr = getStderrStream();
+ const stderr = io.getStdErr().writer();
stderr.print(format ++ "\n", args) catch os.abort();
if (trace) |t| {
dumpStackTrace(t.*);
@@ -297,7 +282,7 @@ pub fn panicExtra(trace: ?*const builtin.StackTrace, first_trace_addr: ?usize, c
// A panic happened while trying to print a previous panic message,
// we're still holding the mutex but that's fine as we're going to
// call abort()
- const stderr = getStderrStream();
+ const stderr = io.getStdErr().writer();
stderr.print("Panicked during a panic. Aborting.\n", .{}) catch os.abort();
},
else => {
@@ -458,6 +443,7 @@ pub const TTY = struct {
.Reset => out_stream.writeAll(RESET) catch return,
},
.windows_api => if (builtin.os.tag == .windows) {
+ const stderr_file = io.getStdErr();
const S = struct {
var attrs: windows.WORD = undefined;
var init_attrs = false;