about summary refs log tree commit diff
path: root/src/libstd/fmt/rt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/fmt/rt.rs')
-rw-r--r--src/libstd/fmt/rt.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/libstd/fmt/rt.rs b/src/libstd/fmt/rt.rs
new file mode 100644
index 00000000000..6feb1d7a848
--- /dev/null
+++ b/src/libstd/fmt/rt.rs
@@ -0,0 +1,62 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! This is an internal module used by the ifmt! runtime. These structures are
+//! emitted to static arrays to precompile format strings ahead of time.
+//!
+//! These definitions are similar to their `ct` equivalents, but differ in that
+//! these can be statically allocated and are slightly optimized for the runtime
+
+#[allow(missing_doc)];
+#[doc(hidden)];
+
+use either::Either;
+use fmt::parse;
+use option::Option;
+
+pub enum Piece<'self> {
+    String(&'self str),
+    // FIXME(#8259): this shouldn't require the unit-value here
+    CurrentArgument(()),
+    Argument(Argument<'self>),
+}
+
+pub struct Argument<'self> {
+    position: Position,
+    format: FormatSpec,
+    method: Option<&'self Method<'self>>
+}
+
+pub struct FormatSpec {
+    fill: char,
+    alignleft: bool,
+    flags: uint,
+    precision: parse::Count,
+    width: parse::Count,
+}
+
+pub enum Position {
+    ArgumentNext, ArgumentIs(uint)
+}
+
+pub enum Method<'self> {
+    Plural(Option<uint>, &'self [PluralArm<'self>], &'self [Piece<'self>]),
+    Select(&'self [SelectArm<'self>], &'self [Piece<'self>]),
+}
+
+pub struct PluralArm<'self> {
+    selector: Either<parse::PluralKeyword, uint>,
+    result: &'self [Piece<'self>],
+}
+
+pub struct SelectArm<'self> {
+    selector: &'self str,
+    result: &'self [Piece<'self>],
+}