## std.debug: Useful functions for debugging. ## This module is imported by default. ## The `assert` macro checks that a provided assertation is true, ## and panics and dumps information if it is not. ## Asserts remain in release builds. If not desired, see `dbg_assert` pub macro assert(cond: bool) = quote if not `cond` then panic "assertation failed!\n {}".fmt(dbg(`cond`)) ## The `dbg_assert` function provides an assert that is compiled out in release builds. ## This is useful for debugging performance-critical code. pub macro dbg_assert(cond: bool) = quote when debug then # fixme: where is this constant coming from? assert `cond` ## The `discard` function consumes an object of any type. ## Useful for throwing away the result of a computation. pub func discard[T](self: T) = return ## The `panic` function prints a message to `stderr` and quits. pub func panic(message: str): never = stderr.write(message, "\n") std.os.exit(1) ## The special ... syntax is used to mark unimplemented parts of code. ## Such code will compile, but panic upon being called at runtime. ## It is usable almost anywhere, including in type declarations, thanks to compiler magic. @[magic] pub func ...: never = panic("unimplemented")