about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-07-29 05:40:26 -0700
committerbors <bors@rust-lang.org>2013-07-29 05:40:26 -0700
commit8413d4769f46cee7a6a4a6d9962d540b33d1af91 (patch)
treecfd95f59adc88a90fe363df26604ea084957fc5a
parent27812ea5e025ed36dc80379b86bb249b33c528a2 (diff)
parent79f1052b19cb43aad5f47a4e1110206a7c0143f6 (diff)
downloadrust-8413d4769f46cee7a6a4a6d9962d540b33d1af91.tar.gz
rust-8413d4769f46cee7a6a4a6d9962d540b33d1af91.zip
auto merge of #8085 : mrordinaire/rust/percent-p, r=huonw
pull request for #8011
-rw-r--r--src/libstd/unstable/extfmt.rs7
-rw-r--r--src/libsyntax/ext/fmt.rs2
-rw-r--r--src/test/run-pass/syntax-extension-fmt.rs11
3 files changed, 20 insertions, 0 deletions
diff --git a/src/libstd/unstable/extfmt.rs b/src/libstd/unstable/extfmt.rs
index 64ac76756d5..1a136bbaa37 100644
--- a/src/libstd/unstable/extfmt.rs
+++ b/src/libstd/unstable/extfmt.rs
@@ -114,6 +114,7 @@ pub mod ct {
         TyHex(Caseness),
         TyOctal,
         TyFloat,
+        TyPointer,
         TyPoly,
     }
 
@@ -325,6 +326,7 @@ pub mod ct {
             't' => TyBits,
             'o' => TyOctal,
             'f' => TyFloat,
+            'p' => TyPointer,
             '?' => TyPoly,
             _ => err(fmt!("unknown type in conversion: %c", s.char_at(i)))
         };
@@ -434,6 +436,7 @@ pub mod ct {
         assert!(test("t", TyBits));
         assert!(test("x", TyHex(CaseLower)));
         assert!(test("X", TyHex(CaseUpper)));
+        assert!(test("p", TyPointer));
         assert!(test("?", TyPoly));
     }
 
@@ -573,6 +576,10 @@ pub mod rt {
         } else { None };
         pad(cv, s, head, PadFloat, buf);
     }
+    pub fn conv_pointer<T>(cv: Conv, ptr: *T, buf: &mut ~str) {
+        let s = ~"0x" + uint_to_str_prec(ptr as uint, 16, 1u);
+        pad(cv, s, None, PadNozero, buf);
+    }
     pub fn conv_poly<T>(cv: Conv, v: &T, buf: &mut ~str) {
         let s = sys::log_str(v);
         conv_str(cv, s, buf);
diff --git a/src/libsyntax/ext/fmt.rs b/src/libsyntax/ext/fmt.rs
index 737127fcae7..855cf47111a 100644
--- a/src/libsyntax/ext/fmt.rs
+++ b/src/libsyntax/ext/fmt.rs
@@ -191,6 +191,7 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: span,
             TyChar => ("char", arg),
             TyBits | TyOctal | TyHex(_) | TyInt(Unsigned) => ("uint", arg),
             TyFloat => ("float", arg),
+            TyPointer => ("pointer", arg),
             TyPoly => ("poly", cx.expr_addr_of(sp, arg))
         };
         return make_conv_call(cx, arg.span, name, cnv, actual_arg,
@@ -242,6 +243,7 @@ fn pieces_to_expr(cx: @ExtCtxt, sp: span,
           },
           TyOctal => debug!("type: octal"),
           TyFloat => debug!("type: float"),
+          TyPointer => debug!("type: pointer"),
           TyPoly => debug!("type: poly")
         }
     }
diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs
index 4dd1dc61c0d..513bc078e7f 100644
--- a/src/test/run-pass/syntax-extension-fmt.rs
+++ b/src/test/run-pass/syntax-extension-fmt.rs
@@ -32,6 +32,7 @@ pub fn main() {
     part6();
     percent();
     more_floats();
+    pointer();
 }
 
 fn part1() {
@@ -263,3 +264,13 @@ fn more_floats() {
     assert_eq!(~"7.0000", fmt!("%.4f", 6.999999999));
     assert_eq!(~"3.141590000", fmt!("%.9f", 3.14159));
 }
+
+fn pointer() {
+    for 10.times {
+        let x: uint = ::std::rand::random();
+        assert_eq!(fmt!("%p", x as *uint), fmt!("0x%x", x));
+    }
+
+    let i = &1;
+    assert_eq!(fmt!("%p", i), fmt!("0x%x", i as *uint as uint));
+}