diff --git a/src/lib/term.rs b/src/lib/term.rs index cfec5ff6b8f..c0dc9ee588d 100644 --- a/src/lib/term.rs +++ b/src/lib/term.rs @@ -1,52 +1,65 @@ +/* +Module: term +Simple ANSI color library +*/ - -// Simple ANSI color library. -// // TODO: Windows support. + +/* Const: color_black */ const color_black: u8 = 0u8; - +/* Const: color_red */ const color_red: u8 = 1u8; - +/* Const: color_green */ const color_green: u8 = 2u8; - +/* Const: color_yellow */ const color_yellow: u8 = 3u8; - +/* Const: color_blue */ const color_blue: u8 = 4u8; - +/* Const: color_magenta */ const color_magenta: u8 = 5u8; - +/* Const: color_cyan */ const color_cyan: u8 = 6u8; - +/* Const: color_light_gray */ const color_light_gray: u8 = 7u8; - +/* Const: color_light_grey */ const color_light_grey: u8 = 7u8; - +/* Const: color_dark_gray */ const color_dark_gray: u8 = 8u8; - +/* Const: color_dark_grey */ const color_dark_grey: u8 = 8u8; - +/* Const: color_bright_red */ const color_bright_red: u8 = 9u8; - +/* Const: color_bright_green */ const color_bright_green: u8 = 10u8; - +/* Const: color_bright_yellow */ const color_bright_yellow: u8 = 11u8; - +/* Const: color_bright_blue */ const color_bright_blue: u8 = 12u8; - +/* Const: color_bright_magenta */ const color_bright_magenta: u8 = 13u8; - +/* Const: color_bright_cyan */ const color_bright_cyan: u8 = 14u8; - +/* Const: color_bright_white */ const color_bright_white: u8 = 15u8; fn esc(writer: io::buf_writer) { writer.write([0x1bu8, '[' as u8]); } +/* +Function: reset + +Reset the foreground and background colors to default +*/ fn reset(writer: io::buf_writer) { esc(writer); writer.write(['0' as u8, 'm' as u8]); } +/* +Function: color_supported + +Returns true if the terminal supports color +*/ fn color_supported() -> bool { let supported_terms = ["xterm-color", "xterm", "screen-bce"]; ret alt generic_os::getenv("TERM") { @@ -67,15 +80,23 @@ fn set_color(writer: io::buf_writer, first_char: u8, color: u8) { writer.write([first_char, ('0' as u8) + color, 'm' as u8]); } +/* +Function: fg + +Set the foreground color +*/ fn fg(writer: io::buf_writer, color: u8) { ret set_color(writer, '3' as u8, color); } +/* +Function: fg + +Set the background color +*/ fn bg(writer: io::buf_writer, color: u8) { ret set_color(writer, '4' as u8, color); } -// export fg; -// export bg; // Local Variables: // fill-column: 78; diff --git a/src/lib/time.rs b/src/lib/time.rs index 236f19a5abf..9460c96154d 100644 --- a/src/lib/time.rs +++ b/src/lib/time.rs @@ -1,12 +1,18 @@ +/* +Module: time +*/ +// FIXME: Document what these functions do native "c-stack-cdecl" mod rustrt { fn get_time(&sec: u32, &usec: u32); fn nano_time(&ns: u64); } +/* Type: timeval */ type timeval = {sec: u32, usec: u32}; +/* Function: get_time */ fn get_time() -> timeval { let sec = 0u32; let usec = 0u32; @@ -14,8 +20,10 @@ fn get_time() -> timeval { ret {sec: sec, usec: usec}; } +/* Function: precise_time_ns */ fn precise_time_ns() -> u64 { let ns = 0u64; rustrt::nano_time(ns); ret ns; } +/* Function: precise_time_s */ fn precise_time_s() -> float { ret (precise_time_ns() as float) / 1000000000.; } diff --git a/src/lib/u32.rs b/src/lib/u32.rs index de368fff9d8..626ca8b6fbd 100644 --- a/src/lib/u32.rs +++ b/src/lib/u32.rs @@ -1,6 +1,21 @@ -pure fn max_value() -> u32 { ret 4294967296u32; } +/* +Module: u32 +*/ + +/* +Function: min_value + +Return the minimal value for a u32 +*/ pure fn min_value() -> u32 { ret 0u32; } +/* +Function: max_value + +Return the maximal value for a u32 +*/ +pure fn max_value() -> u32 { ret 4294967296u32; } + // // Local Variables: // mode: rust diff --git a/src/lib/u64.rs b/src/lib/u64.rs index 497b60acdbf..b0b78af3995 100644 --- a/src/lib/u64.rs +++ b/src/lib/u64.rs @@ -1,6 +1,26 @@ -pure fn max_value() -> u64 { ret 18446744073709551615u64; } +/* +Module: u64 +*/ + +/* +Function: min_value + +Return the minimal value for a u64 +*/ pure fn min_value() -> u64 { ret 0u64; } +/* +Function: max_value + +Return the maximal value for a u64 +*/ +pure fn max_value() -> u64 { ret 18446744073709551615u64; } + +/* +Function: to_str + +Convert to a string in a given base +*/ fn to_str(n: u64, radix: uint) -> str { assert (0u < radix && radix <= 16u); @@ -36,4 +56,9 @@ fn to_str(n: u64, radix: uint) -> str { ret s; } +/* +Function: str + +Convert to a string +*/ fn str(n: u64) -> str { ret to_str(n, 10u); } diff --git a/src/lib/u8.rs b/src/lib/u8.rs index 5f594165e19..6faab75873c 100644 --- a/src/lib/u8.rs +++ b/src/lib/u8.rs @@ -49,6 +49,11 @@ pure fn ge(x: u8, y: u8) -> bool { ret x >= y; } /* Predicate: gt */ pure fn gt(x: u8, y: u8) -> bool { ret x > y; } +/* +Function: range + +Iterate over the range [`lo`..`hi`) +*/ fn range(lo: u8, hi: u8, it: block(u8)) { while lo < hi { it(lo); lo += 1u8; } } diff --git a/src/lib/unsafe.rs b/src/lib/unsafe.rs index 5194392d1be..0259555adc4 100644 --- a/src/lib/unsafe.rs +++ b/src/lib/unsafe.rs @@ -1,4 +1,8 @@ -// Unsafe operations. +/* +Module: unsafe + +Unsafe operations +*/ native "rust-intrinsic" mod rusti { fn cast<T, U>(src: T) -> U; @@ -8,7 +12,21 @@ native "c-stack-cdecl" mod rustrt { fn leak<T>(-thing: T); } -// Casts the value at `src` to U. The two types must have the same length. +/* +Function: reinterpret_cast + +Casts the value at `src` to U. The two types must have the same length. +*/ fn reinterpret_cast<T, U>(src: T) -> U { ret rusti::cast(src); } +/* +Function: leak + +Move `thing` into the void. + +The leak function will take ownership of the provided value but neglect +to run any required cleanup or memory-management operations on it. This +can be used for various acts of magick, particularly when using +reinterpret_cast on managed pointer types. +*/ fn leak<T>(-thing: T) { rustrt::leak(thing); } diff --git a/src/lib/util.rs b/src/lib/util.rs index 3c441f1656f..466dfdcc97f 100644 --- a/src/lib/util.rs +++ b/src/lib/util.rs @@ -1,23 +1,49 @@ +/* +Module: util +*/ +/* +Function: id + +The identity function +*/ pure fn id<T>(x: T) -> T { x } +/* +Function: unreachable + +A standard function to use to indicate unreachable code. Because the +function is guaranteed to fail typestate will correctly identify +any code paths following the appearance of this function as unreachable. +*/ fn unreachable() -> ! { fail "Internal error: entered unreachable code"; } /* FIXME (issue #141): See test/run-pass/constrained-type.rs. Uncomment * the constraint once fixed. */ +/* +Function: rational + +A rational number +*/ type rational = {num: int, den: int}; // : int::positive(*.den); -// : int::positive(*.den); +/* +Function: rational_leq +*/ pure fn rational_leq(x: rational, y: rational) -> bool { // NB: Uses the fact that rationals have positive denominators WLOG: x.num * y.den <= y.num * x.den } +/* +Function: orb +*/ pure fn orb(a: bool, b: bool) -> bool { a || b } +// FIXME: Document what this is for or delete it tag void { void(@void); }