about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorBrian Anderson <andersrb@gmail.com>2011-04-13 20:51:24 -0400
committerBrian Anderson <andersrb@gmail.com>2011-04-13 22:14:40 -0400
commit5c0f4c1939b392e0bd0bcbce86fa83eb7a421992 (patch)
tree9d88f7766e9b3526ffccb2a38c06acbcd38e009f /src/lib
parent4844e1c08a0f87f8c2bf4ba752630e1af0794a63 (diff)
downloadrust-5c0f4c1939b392e0bd0bcbce86fa83eb7a421992.tar.gz
rust-5c0f4c1939b392e0bd0bcbce86fa83eb7a421992.zip
Add more commentary about ExtFmt
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ExtFmt.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs
index 229a0c5d517..da32568af52 100644
--- a/src/lib/ExtFmt.rs
+++ b/src/lib/ExtFmt.rs
@@ -1,6 +1,32 @@
+/* The 'fmt' extension is modeled on the posix printf system.
+ *
+ * A posix conversion ostensibly looks like this:
+ *
+ * %[parameter][flags][width][.precision][length]type
+ *
+ * Given the different numeric type bestiary we have, we omit the 'length'
+ * parameter and support slightly different conversions for 'type':
+ *
+ * %[parameter][flags][width][.precision]type
+ *
+ * we also only support translating-to-rust a tiny subset of the possible
+ * combinations at the moment.
+ */
+
 import option.none;
 import option.some;
 
+/*
+ * We have a CT (compile-time) module that parses format strings into a
+ * sequence of conversions. From those conversions AST fragments are built
+ * that call into properly-typed functions in the RT (run-time) module.  Each
+ * of those run-time conversion functions accepts another conversion
+ * description that specifies how to format its output.
+ *
+ * The building of the AST is currently done in a module inside the compiler,
+ * but should migrate over here as the plugin interface is defined.
+ */
+
 // Functions used by the fmt extension at compile time
 mod CT {
     tag signedness {
@@ -262,7 +288,10 @@ mod CT {
     }
 }
 
-// Functions used by the fmt extension at runtime
+// Functions used by the fmt extension at runtime. For now there are a lot of
+// decisions made a runtime. If it proves worthwhile then some of these
+// conditions can be evaluated at compile-time. For now though it's cleaner to
+// implement it this way, I think.
 mod RT {
 
     tag ty {